Skip to content

Commit 7efb502

Browse files
committed
Use iridescence_viewer (#177)
1 parent 58bcca5 commit 7efb502

File tree

5 files changed

+177
-15
lines changed

5 files changed

+177
-15
lines changed

CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,11 @@ find_package(socket_publisher QUIET)
185185
if(socket_publisher_FOUND)
186186
message(STATUS "Viewer for examples: SocketPublisher")
187187
endif()
188+
find_package(iridescence_viewer QUIET)
189+
if(iridescence_viewer_FOUND)
190+
message(STATUS "Viewer for examples: IridescenceViewer")
191+
endif()
192+
188193

189194
#########
190195
# Build #
@@ -211,6 +216,15 @@ if(socket_publisher_FOUND)
211216
target_link_libraries(stella_vslam_ros_system PRIVATE
212217
socket_publisher::socket_publisher ${SIOCLIENT_LIBRARY} ${PROTOBUF_LIBRARIES})
213218
endif()
219+
if(iridescence_viewer_FOUND)
220+
# Set macro flag
221+
target_compile_definitions(stella_vslam_ros_system
222+
PRIVATE HAVE_IRIDESCENCE_VIEWER)
223+
# Link viewer
224+
target_link_libraries(stella_vslam_ros_system PRIVATE
225+
iridescence_viewer::iridescence_viewer)
226+
endif()
227+
214228
# TODO: Move heder files to include directory
215229
target_include_directories(stella_vslam_ros_system PRIVATE
216230
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>

src/CMakeLists.txt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
if(pangolin_viewer_FOUND)
2-
message(STATUS "Viewer for examples: pangolin viewer")
3-
endif()
4-
if(socket_publisher_FOUND)
5-
message(STATUS "Viewer for examples: socket publisher")
6-
endif()
7-
81
set(EXECUTABLE_TARGETS "")
92

103
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
@@ -30,6 +23,14 @@ foreach(EXECUTABLE_TARGET IN LISTS EXECUTABLE_TARGETS)
3023
target_link_libraries(${EXECUTABLE_TARGET} PRIVATE
3124
socket_publisher::socket_publisher ${SIOCLIENT_LIBRARY} ${PROTOBUF_LIBRARIES})
3225
endif()
26+
if(iridescence_viewer_FOUND)
27+
# Set macro flag
28+
target_compile_definitions(${EXECUTABLE_TARGET}
29+
PRIVATE HAVE_IRIDESCENCE_VIEWER)
30+
# Link viewer
31+
target_link_libraries(${EXECUTABLE_TARGET} PRIVATE
32+
iridescence_viewer::iridescence_viewer)
33+
endif()
3334

3435
# setup stack trace logger
3536
if(USE_STACK_TRACE_LOGGER)

src/run_slam.cc

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#ifdef HAVE_PANGOLIN_VIEWER
22
#include "pangolin_viewer/viewer.h"
33
#endif
4+
#ifdef HAVE_IRIDESCENCE_VIEWER
5+
#include "iridescence_viewer/viewer.h"
6+
#endif
47
#ifdef HAVE_SOCKET_PUBLISHER
58
#include "socket_publisher/publisher.h"
69
#endif
@@ -51,6 +54,29 @@ void tracking(const std::shared_ptr<stella_vslam_ros::system>& slam_ros,
5154
SLAM->get_map_publisher());
5255
}
5356
#endif
57+
#ifdef HAVE_IRIDESCENCE_VIEWER
58+
std::shared_ptr<iridescence_viewer::viewer> iridescence_viewer;
59+
std::mutex mtx_terminate;
60+
bool terminate_is_requested = false;
61+
if (viewer_string == "iridescence_viewer") {
62+
iridescence_viewer = std::make_shared<iridescence_viewer::viewer>(
63+
stella_vslam::util::yaml_optional_ref(cfg->yaml_node_, "IridescenceViewer"),
64+
SLAM->get_frame_publisher(),
65+
SLAM->get_map_publisher());
66+
iridescence_viewer->add_button("Reset", [&SLAM] {
67+
SLAM->request_reset();
68+
});
69+
iridescence_viewer->add_button("Save and exit", [&terminate_is_requested, &mtx_terminate, &iridescence_viewer] {
70+
std::lock_guard<std::mutex> lock(mtx_terminate);
71+
terminate_is_requested = true;
72+
iridescence_viewer->request_terminate();
73+
});
74+
iridescence_viewer->add_close_callback([&terminate_is_requested, &mtx_terminate] {
75+
std::lock_guard<std::mutex> lock(mtx_terminate);
76+
terminate_is_requested = true;
77+
});
78+
}
79+
#endif
5480
#ifdef HAVE_SOCKET_PUBLISHER
5581
std::shared_ptr<socket_publisher::publisher> publisher;
5682
if (viewer_string == "socket_publisher") {
@@ -70,6 +96,11 @@ void tracking(const std::shared_ptr<stella_vslam_ros::system>& slam_ros,
7096
if (viewer_string == "pangolin_viewer") {
7197
#ifdef HAVE_PANGOLIN_VIEWER
7298
viewer->run();
99+
#endif
100+
}
101+
if (viewer_string == "iridescence_viewer") {
102+
#ifdef HAVE_IRIDESCENCE_VIEWER
103+
iridescence_viewer->run();
73104
#endif
74105
}
75106
if (viewer_string == "socket_publisher") {
@@ -93,6 +124,11 @@ void tracking(const std::shared_ptr<stella_vslam_ros::system>& slam_ros,
93124
if (viewer_string == "pangolin_viewer") {
94125
#ifdef HAVE_PANGOLIN_VIEWER
95126
viewer->request_terminate();
127+
#endif
128+
}
129+
if (viewer_string == "iridescence_viewer") {
130+
#ifdef HAVE_IRIDESCENCE_VIEWER
131+
iridescence_viewer->request_terminate();
96132
#endif
97133
}
98134
if (viewer_string == "socket_publisher") {
@@ -155,7 +191,7 @@ int main(int argc, char* argv[]) {
155191
auto disable_mapping = op.add<popl::Switch>("", "disable-mapping", "disable mapping");
156192
auto temporal_mapping = op.add<popl::Switch>("", "temporal-mapping", "enable temporal mapping");
157193
auto rectify = op.add<popl::Switch>("r", "rectify", "rectify stereo image");
158-
auto viewer = op.add<popl::Value<std::string>>("", "viewer", "viewer [pangolin_viewer, socket_publisher, none]");
194+
auto viewer = op.add<popl::Value<std::string>>("", "viewer", "viewer [iridescence_viewer, pangolin_viewer, socket_publisher, none]");
159195
try {
160196
op.parse(argc, argv);
161197
}
@@ -182,7 +218,10 @@ int main(int argc, char* argv[]) {
182218
std::string viewer_string;
183219
if (viewer->is_set()) {
184220
viewer_string = viewer->value();
185-
if (viewer_string != "pangolin_viewer" && viewer_string != "socket_publisher" && viewer_string != "none") {
221+
if (viewer_string != "pangolin_viewer"
222+
&& viewer_string != "socket_publisher"
223+
&& viewer_string != "iridescence_viewer"
224+
&& viewer_string != "none") {
186225
std::cerr << "invalid arguments (--viewer)" << std::endl
187226
<< std::endl
188227
<< op << std::endl;
@@ -196,6 +235,14 @@ int main(int argc, char* argv[]) {
196235
return EXIT_FAILURE;
197236
}
198237
#endif
238+
#ifndef HAVE_IRIDESCENCE_VIEWER
239+
if (viewer_string == "iridescence_viewer") {
240+
std::cerr << "iridescence_viewer not linked" << std::endl
241+
<< std::endl
242+
<< op << std::endl;
243+
return EXIT_FAILURE;
244+
}
245+
#endif
199246
#ifndef HAVE_SOCKET_PUBLISHER
200247
if (viewer_string == "socket_publisher") {
201248
std::cerr << "socket_publisher not linked" << std::endl
@@ -206,7 +253,9 @@ int main(int argc, char* argv[]) {
206253
#endif
207254
}
208255
else {
209-
#ifdef HAVE_PANGOLIN_VIEWER
256+
#ifdef HAVE_IRIDESCENCE_VIEWER
257+
viewer_string = "iridescence_viewer";
258+
#elif defined(HAVE_PANGOLIN_VIEWER)
210259
viewer_string = "pangolin_viewer";
211260
#elif defined(HAVE_SOCKET_PUBLISHER)
212261
viewer_string = "socket_publisher";

src/run_slam_offline.cc

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#ifdef HAVE_PANGOLIN_VIEWER
22
#include "pangolin_viewer/viewer.h"
33
#endif
4+
#ifdef HAVE_IRIDESCENCE_VIEWER
5+
#include "iridescence_viewer/viewer.h"
6+
#endif
47
#ifdef HAVE_SOCKET_PUBLISHER
58
#include "socket_publisher/publisher.h"
69
#endif
@@ -66,6 +69,29 @@ void tracking(const std::shared_ptr<stella_vslam_ros::system>& slam_ros,
6669
SLAM->get_map_publisher());
6770
}
6871
#endif
72+
#ifdef HAVE_IRIDESCENCE_VIEWER
73+
std::shared_ptr<iridescence_viewer::viewer> iridescence_viewer;
74+
std::mutex mtx_terminate;
75+
bool terminate_is_requested = false;
76+
if (viewer_string == "iridescence_viewer") {
77+
iridescence_viewer = std::make_shared<iridescence_viewer::viewer>(
78+
stella_vslam::util::yaml_optional_ref(cfg->yaml_node_, "IridescenceViewer"),
79+
SLAM->get_frame_publisher(),
80+
SLAM->get_map_publisher());
81+
iridescence_viewer->add_button("Reset", [&SLAM] {
82+
SLAM->request_reset();
83+
});
84+
iridescence_viewer->add_button("Save and exit", [&terminate_is_requested, &mtx_terminate, &iridescence_viewer] {
85+
std::lock_guard<std::mutex> lock(mtx_terminate);
86+
terminate_is_requested = true;
87+
iridescence_viewer->request_terminate();
88+
});
89+
iridescence_viewer->add_close_callback([&terminate_is_requested, &mtx_terminate] {
90+
std::lock_guard<std::mutex> lock(mtx_terminate);
91+
terminate_is_requested = true;
92+
});
93+
}
94+
#endif
6995
#ifdef HAVE_SOCKET_PUBLISHER
7096
std::shared_ptr<socket_publisher::publisher> publisher;
7197
if (viewer_string == "socket_publisher") {
@@ -85,6 +111,11 @@ void tracking(const std::shared_ptr<stella_vslam_ros::system>& slam_ros,
85111
if (viewer_string == "pangolin_viewer") {
86112
#ifdef HAVE_PANGOLIN_VIEWER
87113
viewer->run();
114+
#endif
115+
}
116+
if (viewer_string == "iridescence_viewer") {
117+
#ifdef HAVE_IRIDESCENCE_VIEWER
118+
iridescence_viewer->run();
88119
#endif
89120
}
90121
if (viewer_string == "socket_publisher") {
@@ -238,6 +269,11 @@ void tracking(const std::shared_ptr<stella_vslam_ros::system>& slam_ros,
238269
if (viewer_string == "pangolin_viewer") {
239270
#ifdef HAVE_PANGOLIN_VIEWER
240271
viewer->request_terminate();
272+
#endif
273+
}
274+
if (viewer_string == "iridescence_viewer") {
275+
#ifdef HAVE_IRIDESCENCE_VIEWER
276+
iridescence_viewer->request_terminate();
241277
#endif
242278
}
243279
if (viewer_string == "socket_publisher") {
@@ -309,7 +345,7 @@ int main(int argc, char* argv[]) {
309345
auto disable_mapping = op.add<popl::Switch>("", "disable-mapping", "disable mapping");
310346
auto temporal_mapping = op.add<popl::Switch>("", "temporal-mapping", "enable temporal mapping");
311347
auto rectify = op.add<popl::Switch>("r", "rectify", "rectify stereo image");
312-
auto viewer = op.add<popl::Value<std::string>>("", "viewer", "viewer [pangolin_viewer, socket_publisher, none]");
348+
auto viewer = op.add<popl::Value<std::string>>("", "viewer", "viewer [iridescence_viewer, pangolin_viewer, socket_publisher, none]");
313349
try {
314350
op.parse(argc, argv);
315351
}
@@ -336,7 +372,10 @@ int main(int argc, char* argv[]) {
336372
std::string viewer_string;
337373
if (viewer->is_set()) {
338374
viewer_string = viewer->value();
339-
if (viewer_string != "pangolin_viewer" && viewer_string != "socket_publisher" && viewer_string != "none") {
375+
if (viewer_string != "pangolin_viewer"
376+
&& viewer_string != "socket_publisher"
377+
&& viewer_string != "iridescence_viewer"
378+
&& viewer_string != "none") {
340379
std::cerr << "invalid arguments (--viewer)" << std::endl
341380
<< std::endl
342381
<< op << std::endl;
@@ -350,6 +389,14 @@ int main(int argc, char* argv[]) {
350389
return EXIT_FAILURE;
351390
}
352391
#endif
392+
#ifndef HAVE_IRIDESCENCE_VIEWER
393+
if (viewer_string == "iridescence_viewer") {
394+
std::cerr << "iridescence_viewer not linked" << std::endl
395+
<< std::endl
396+
<< op << std::endl;
397+
return EXIT_FAILURE;
398+
}
399+
#endif
353400
#ifndef HAVE_SOCKET_PUBLISHER
354401
if (viewer_string == "socket_publisher") {
355402
std::cerr << "socket_publisher not linked" << std::endl
@@ -360,7 +407,9 @@ int main(int argc, char* argv[]) {
360407
#endif
361408
}
362409
else {
363-
#ifdef HAVE_PANGOLIN_VIEWER
410+
#ifdef HAVE_IRIDESCENCE_VIEWER
411+
viewer_string = "iridescence_viewer";
412+
#elif defined(HAVE_PANGOLIN_VIEWER)
364413
viewer_string = "pangolin_viewer";
365414
#elif defined(HAVE_SOCKET_PUBLISHER)
366415
viewer_string = "socket_publisher";

src/system.cc

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#ifdef HAVE_PANGOLIN_VIEWER
22
#include "pangolin_viewer/viewer.h"
33
#endif
4+
#ifdef HAVE_IRIDESCENCE_VIEWER
5+
#include "iridescence_viewer/viewer.h"
6+
#endif
47
#ifdef HAVE_SOCKET_PUBLISHER
58
#include "socket_publisher/publisher.h"
69
#endif
@@ -43,6 +46,9 @@ class System : public rclcpp::Node {
4346
#ifdef HAVE_PANGOLIN_VIEWER
4447
std::shared_ptr<pangolin_viewer::viewer> viewer_;
4548
#endif
49+
#ifdef HAVE_IRIDESCENCE_VIEWER
50+
std::shared_ptr<iridescence_viewer::viewer> iridescence_viewer_;
51+
#endif
4652
#ifdef HAVE_SOCKET_PUBLISHER
4753
std::shared_ptr<socket_publisher::publisher> publisher_;
4854
#endif
@@ -73,7 +79,10 @@ System::System(
7379
// viewer
7480
if (!viewer.empty()) {
7581
viewer_string_ = viewer;
76-
if (viewer_string_ != "pangolin_viewer" && viewer_string_ != "socket_publisher" && viewer_string_ != "none") {
82+
if (viewer_string_ != "pangolin_viewer"
83+
&& viewer_string_ != "socket_publisher"
84+
&& viewer_string_ != "iridescence_viewer"
85+
&& viewer_string_ != "none") {
7786
RCLCPP_FATAL(get_logger(), "invalid arguments (--viewer)");
7887
return;
7988
}
@@ -83,6 +92,12 @@ System::System(
8392
return;
8493
}
8594
#endif
95+
#ifndef HAVE_IRIDESCENCE_VIEWER
96+
if (viewer_string_ == "iridescence_viewer") {
97+
RCLCPP_FATAL(get_logger(), "iridescence_viewer not linked");
98+
return;
99+
}
100+
#endif
86101
#ifndef HAVE_SOCKET_PUBLISHER
87102
if (viewer_string_ == "socket_publisher") {
88103
RCLCPP_FATAL(get_logger(), "socket_publisher not linked");
@@ -91,7 +106,9 @@ System::System(
91106
#endif
92107
}
93108
else {
94-
#ifdef HAVE_PANGOLIN_VIEWER
109+
#ifdef HAVE_IRIDESCENCE_VIEWER
110+
viewer_string_ = "iridescence_viewer";
111+
#elif defined(HAVE_PANGOLIN_VIEWER)
95112
viewer_string_ = "pangolin_viewer";
96113
#elif defined(HAVE_SOCKET_PUBLISHER)
97114
viewer_string_ = "socket_publisher";
@@ -155,6 +172,28 @@ System::System(
155172
slam_->get_map_publisher());
156173
}
157174
#endif
175+
#ifdef HAVE_IRIDESCENCE_VIEWER
176+
std::mutex mtx_terminate;
177+
bool terminate_is_requested = false;
178+
if (viewer_string_ == "iridescence_viewer") {
179+
iridescence_viewer_ = std::make_shared<iridescence_viewer::viewer>(
180+
stella_vslam::util::yaml_optional_ref(cfg_->yaml_node_, "IridescenceViewer"),
181+
slam_->get_frame_publisher(),
182+
slam_->get_map_publisher());
183+
iridescence_viewer_->add_button("Reset", [this] {
184+
slam_->request_reset();
185+
});
186+
iridescence_viewer_->add_button("Save and exit", [this, &terminate_is_requested, &mtx_terminate] {
187+
std::lock_guard<std::mutex> lock(mtx_terminate);
188+
terminate_is_requested = true;
189+
iridescence_viewer_->request_terminate();
190+
});
191+
iridescence_viewer_->add_close_callback([&terminate_is_requested, &mtx_terminate] {
192+
std::lock_guard<std::mutex> lock(mtx_terminate);
193+
terminate_is_requested = true;
194+
});
195+
}
196+
#endif
158197
#ifdef HAVE_SOCKET_PUBLISHER
159198
if (viewer_string_ == "socket_publisher") {
160199
publisher_ = std::make_shared<socket_publisher::publisher>(
@@ -172,6 +211,11 @@ System::System(
172211
if (viewer_string_ == "pangolin_viewer") {
173212
#ifdef HAVE_PANGOLIN_VIEWER
174213
viewer_->run();
214+
#endif
215+
}
216+
if (viewer_string_ == "iridescence_viewer") {
217+
#ifdef HAVE_IRIDESCENCE_VIEWER
218+
iridescence_viewer_->run();
175219
#endif
176220
}
177221
if (viewer_string_ == "socket_publisher") {
@@ -195,6 +239,11 @@ System::~System() {
195239
if (viewer_string_ == "pangolin_viewer") {
196240
#ifdef HAVE_PANGOLIN_VIEWER
197241
viewer_->request_terminate();
242+
#endif
243+
}
244+
if (viewer_string_ == "iridescence_viewer") {
245+
#ifdef HAVE_IRIDESCENCE_VIEWER
246+
iridescence_viewer_->request_terminate();
198247
#endif
199248
}
200249
if (viewer_string_ == "socket_publisher") {

0 commit comments

Comments
 (0)