Skip to content

Commit 7c2fbb8

Browse files
committed
Merge branch 'master' of github.com:introlab/rtabmap into gtest
2 parents 95fbc95 + 9f464db commit 7c2fbb8

8 files changed

Lines changed: 297 additions & 141 deletions

File tree

CMakeLists.txt

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -872,22 +872,7 @@ IF(WITH_VINS_FUSION)
872872
ENDIF(WITH_VINS_FUSION)
873873

874874
IF(WITH_OPENVINS)
875-
FIND_PACKAGE(ov_msckf)
876-
# On ROS2, the indirect includes and libraries
877-
# are not forwarded by ov_msckf target, append them manually
878-
FIND_PACKAGE(ov_core)
879-
FIND_PACKAGE(ov_init)
880-
IF(ov_msckf_FOUND AND ov_core_FOUND AND ov_init_FOUND)
881-
SET(ov_msckf_INCLUDE_DIRS
882-
${ov_msckf_INCLUDE_DIRS}
883-
${ov_core_INCLUDE_DIRS}
884-
${ov_init_INCLUDE_DIRS})
885-
SET(ov_msckf_LIBRARIES
886-
${ov_msckf_LIBRARIES}
887-
${ov_core_LIBRARIES}
888-
${ov_init_LIBRARIES})
889-
MESSAGE(STATUS "Found OpenVINS: ${ov_msckf_INCLUDE_DIRS}")
890-
ENDIF()
875+
FIND_PACKAGE(OpenVINS)
891876
ENDIF(WITH_OPENVINS)
892877

893878
IF(WITH_FASTCV)
@@ -1253,7 +1238,7 @@ ENDIF()
12531238
IF(NOT vins_FOUND)
12541239
SET(VINSFUSION "//")
12551240
ENDIF()
1256-
IF(NOT ov_msckf_FOUND)
1241+
IF(NOT OpenVINS_FOUND)
12571242
SET(OPENVINS "//")
12581243
ENDIF()
12591244
IF(NOT CUVSLAM_FOUND)
@@ -2013,7 +1998,7 @@ ELSE()
20131998
MESSAGE(STATUS " With VINS-Fusion = NO (VINS-Fusion not found)")
20141999
ENDIF()
20152000

2016-
IF(ov_msckf_FOUND)
2001+
IF(OpenVINS_FOUND)
20172002
MESSAGE(STATUS " With OpenVINS = YES (License: GPLv3)")
20182003
ELSEIF(NOT WITH_OPENVINS)
20192004
MESSAGE(STATUS " With OpenVINS = NO (WITH_OPENVINS=OFF)")

cmake_modules/FindOpenVINS.cmake

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Find OpenVINS
2+
#
3+
# We search for a vins installation in ROS/ROS2 first, then fallback on
4+
# ros-free library in common install paths
5+
6+
FIND_PACKAGE(ov_msckf QUIET)
7+
IF(ov_msckf_FOUND)
8+
# On ROS2, the indirect includes and libraries
9+
# are not forwarded by ov_msckf target, append them manually
10+
FIND_PACKAGE(ov_core)
11+
FIND_PACKAGE(ov_init)
12+
IF(ov_msckf_FOUND AND ov_core_FOUND AND ov_init_FOUND)
13+
SET(OpenVINS_FOUND TRUE)
14+
SET(OpenVINS_INCLUDE_DIRS
15+
${ov_msckf_INCLUDE_DIRS}
16+
${ov_core_INCLUDE_DIRS}
17+
${ov_init_INCLUDE_DIRS})
18+
SET(OpenVINS_LIBRARIES
19+
${ov_msckf_LIBRARIES}
20+
${ov_core_LIBRARIES}
21+
${ov_init_LIBRARIES})
22+
ENDIF()
23+
ELSE()
24+
find_path(OpenVINS_INCLUDE_DIR NAMES core/VioManager.h PATH_SUFFIXES open_vins)
25+
find_library(OpenVINS_LIBRARY NAMES ov_msckf_lib)
26+
IF (OpenVINS_INCLUDE_DIR AND OpenVINS_LIBRARY)
27+
SET(OpenVINS_FOUND TRUE)
28+
SET(OpenVINS_INCLUDE_DIRS ${OpenVINS_INCLUDE_DIR})
29+
SET(OpenVINS_LIBRARIES ${OpenVINS_LIBRARY})
30+
ENDIF()
31+
ENDIF()
32+
33+
IF (OpenVINS_FOUND)
34+
# show which OpenVINS was found only if not quiet
35+
IF (NOT OpenVINS_FIND_QUIETLY)
36+
MESSAGE(STATUS "Found OpenVINS: ${OpenVINS_LIBRARIES} ${OpenVINS_INCLUDE_DIRS}")
37+
ENDIF (NOT OpenVINS_FIND_QUIETLY)
38+
ELSE (OpenVINS_FOUND)
39+
# fatal error if OpenVINS is required but not found
40+
IF (OpenVINS_FIND_REQUIRED)
41+
MESSAGE(FATAL_ERROR "Could not find OpenVINS")
42+
ENDIF (OpenVINS_FIND_REQUIRED)
43+
ENDIF (OpenVINS_FOUND)
44+

corelib/include/rtabmap/core/Parameters.h

Lines changed: 61 additions & 60 deletions
Large diffs are not rendered by default.

corelib/src/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -781,16 +781,16 @@ IF(vins_FOUND)
781781
)
782782
ENDIF(vins_FOUND)
783783

784-
IF(ov_msckf_FOUND)
784+
IF(OpenVINS_FOUND)
785785
SET(INCLUDE_DIRS
786-
${ov_msckf_INCLUDE_DIRS}
786+
${OpenVINS_INCLUDE_DIRS}
787787
${INCLUDE_DIRS}
788788
)
789789
SET(LIBRARIES
790-
${ov_msckf_LIBRARIES}
790+
${OpenVINS_LIBRARIES}
791791
${LIBRARIES}
792792
)
793-
ENDIF(ov_msckf_FOUND)
793+
ENDIF(OpenVINS_FOUND)
794794

795795
IF(ORB_SLAM_FOUND)
796796
SET(INCLUDE_DIRS

corelib/src/odometry/OdometryOpenVINS.cpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,85 @@ OdometryOpenVINS::OdometryOpenVINS(const ParametersMap & parameters) :
152152
params_->init_options.sigma_wb = params_->imu_noises.sigma_wb;
153153
params_->init_options.sigma_pix = params_->slam_options.sigma_pix;
154154
params_->init_options.gravity_mag = params_->gravity_mag;
155+
156+
if(parameters.find(Parameters::kOdomOpenVINSConfigPath()) != parameters.end())
157+
{
158+
// Load the config: will override all parameters above!
159+
std::string configPath = parameters.at(Parameters::kOdomOpenVINSConfigPath());
160+
if(!configPath.empty())
161+
{
162+
if(UFile::exists(configPath))
163+
{
164+
UWARN("OpenVINS config file is provided (%s=\"%s\"), reading it. The parameters from the config file will overwrite OdomOpenVINS/*** parameters.",
165+
Parameters::kOdomOpenVINSConfigPath().c_str(), configPath.c_str());
166+
auto parser = std::make_shared<ov_core::YamlParser>(configPath);
167+
168+
// The sequence of loading is based on VioManagerOptions::print_and_load()
169+
// We removed all parts about intrinsics/extrinsics, which will be loaded later
170+
// when we receive the data (which should already include intrinsics and extrinsics).
171+
172+
params_->state_options.print(parser);
173+
174+
params_->init_options.print_and_load_initializer(parser);
175+
params_->init_options.print_and_load_noise(parser);
176+
parser->parse_config("gravity_mag", params_->init_options.gravity_mag);
177+
parser->parse_config("max_cameras", params_->init_options.num_cameras);
178+
parser->parse_config("use_stereo", params_->init_options.use_stereo);
179+
parser->parse_config("downsample_cameras", params_->init_options.downsample_cameras);
180+
181+
parser->parse_config("dt_slam_delay", params_->dt_slam_delay);
182+
parser->parse_config("try_zupt", params_->try_zupt);
183+
parser->parse_config("zupt_max_velocity",params_-> zupt_max_velocity);
184+
parser->parse_config("zupt_noise_multiplier", params_->zupt_noise_multiplier);
185+
parser->parse_config("zupt_max_disparity", params_->zupt_max_disparity);
186+
parser->parse_config("zupt_only_at_beginning", params_->zupt_only_at_beginning);
187+
parser->parse_config("record_timing_information", params_->record_timing_information);
188+
parser->parse_config("record_timing_filepath", params_->record_timing_filepath);
189+
190+
params_->print_and_load_trackers(parser);
191+
params_->print_and_load_noise(parser);
192+
193+
if(params_->state_options.num_cameras > 2)
194+
{
195+
UFATAL("OpenVINS integration in RTAB-Map doesn't support more than 2 cameras (num_cameras=%d).", params_->state_options.num_cameras);
196+
}
197+
198+
parser->parse_config("gravity_mag", params_->gravity_mag);
199+
parser->parse_config("use_mask", params_->use_mask);
200+
params_->masks.clear();
201+
if (params_->use_mask) {
202+
for (int i = 0; i < params_->state_options.num_cameras; i++) {
203+
std::string mask_path;
204+
std::string mask_node = "mask" + std::to_string(i);
205+
parser->parse_config(mask_node, mask_path);
206+
std::string total_mask_path = parser->get_config_folder() + mask_path;
207+
if (!boost::filesystem::exists(total_mask_path)) {
208+
PRINT_ERROR(RED "VioManager(): invalid mask path:\n" RESET);
209+
PRINT_ERROR(RED "\t- mask%d - %s\n" RESET, i, total_mask_path.c_str());
210+
std::exit(EXIT_FAILURE);
211+
}
212+
params_->masks.emplace(i, cv::imread(total_mask_path, cv::IMREAD_GRAYSCALE));
213+
}
214+
}
215+
216+
if (!parser->successful()) {
217+
UWARN("Not all expected OpenVINS parameters were read successfully "
218+
"from \"%s\". Values from RTAB-Map's OpenOpenVINS/* parameters "
219+
"will be used instead for the missing ones.",
220+
configPath.c_str());
221+
}
222+
else {
223+
UINFO("OpenVINS config file(%s=\"%s\") read.",
224+
Parameters::kOdomOpenVINSConfigPath().c_str(), configPath.c_str());
225+
}
226+
}
227+
else
228+
{
229+
UERROR("OpenVINS config file is provided (%s=\"%s\") but it doesn't exist!",
230+
Parameters::kOdomOpenVINSConfigPath().c_str(), configPath.c_str());
231+
}
232+
}
233+
}
155234
#endif
156235
}
157236

guilib/include/rtabmap/gui/PreferencesDialog.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ private Q_SLOTS:
372372
void changeOdometryORBSLAMVocabulary();
373373
void changeOdometryOKVISConfigPath();
374374
void changeOdometryVINSFusionConfigPath();
375+
void changeOdometryOpenVINSConfigPath();
375376
void changeOdometryLIOSAMConfigPath();
376377
void changeOdometryOpenVINSLeftMask();
377378
void changeOdometryOpenVINSRightMask();

guilib/src/PreferencesDialog.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1619,6 +1619,8 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
16191619
connect(_ui->toolButton_OdomVinsFusionPath, SIGNAL(clicked()), this, SLOT(changeOdometryVINSFusionConfigPath()));
16201620

16211621
// Odometry OpenVINS
1622+
_ui->lineEdit_openvinsConfigPath->setObjectName(Parameters::kOdomOpenVINSConfigPath().c_str());
1623+
connect(_ui->toolButton_openvinsConfigPath, SIGNAL(clicked()), this, SLOT(changeOdometryOpenVINSConfigPath()));
16221624
_ui->checkBox_OdomOpenVINSUseStereo->setObjectName(Parameters::kOdomOpenVINSUseStereo().c_str());
16231625
_ui->checkBox_OdomOpenVINSUseKLT->setObjectName(Parameters::kOdomOpenVINSUseKLT().c_str());
16241626
_ui->spinBox_OdomOpenVINSNumPts->setObjectName(Parameters::kOdomOpenVINSNumPts().c_str());
@@ -5794,6 +5796,23 @@ void PreferencesDialog::changeOdometryVINSFusionConfigPath()
57945796
}
57955797
}
57965798

5799+
void PreferencesDialog::changeOdometryOpenVINSConfigPath()
5800+
{
5801+
QString path;
5802+
if(_ui->lineEdit_openvinsConfigPath->text().isEmpty())
5803+
{
5804+
path = QFileDialog::getOpenFileName(this, tr("OpenVINS Config"), this->getWorkingDirectory(), tr("OpenVINS config (*.yaml)"));
5805+
}
5806+
else
5807+
{
5808+
path = QFileDialog::getOpenFileName(this, tr("OpenVINS Config"), _ui->lineEdit_openvinsConfigPath->text(), tr("OpenVINS config (*.yaml)"));
5809+
}
5810+
if(!path.isEmpty())
5811+
{
5812+
_ui->lineEdit_openvinsConfigPath->setText(path);
5813+
}
5814+
}
5815+
57975816
void PreferencesDialog::changeOdometryLIOSAMConfigPath()
57985817
{
57995818
QString path;

0 commit comments

Comments
 (0)