Skip to content

Commit aaea62b

Browse files
author
Felix Toft
committed
exposing multi-cam mode as a rtabmap param
1 parent 31fe3d3 commit aaea62b

File tree

4 files changed

+17
-18
lines changed

4 files changed

+17
-18
lines changed

corelib/include/rtabmap/core/Parameters.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,9 @@ class RTABMAP_CORE_EXPORT Parameters
682682
RTABMAP_PARAM(OdomOpen3D, MaxDepth, float, 3.0, "Maximum depth.");
683683
RTABMAP_PARAM(OdomOpen3D, Method, int, 0, "Registration method: 0=PointToPlane, 1=Intensity, 2=Hybrid.");
684684

685+
// Odometry cuVSLAM
686+
RTABMAP_PARAM(OdomCuVSLAM, MulticamMode, int, 0, "cuVSLAM multicam_mode setting: 0=moderate, 1=performance, 2=precision.");
687+
685688
// Common registration parameters
686689
RTABMAP_PARAM(Reg, RepeatOnce, bool, true, "Do a second registration with the output of the first registration as guess. Only done if no guess was provided for the first registration (like on loop closure). It can be useful if the registration approach used can use a guess to get better matches.");
687690
RTABMAP_PARAM(Reg, Strategy, int, 0, "0=Vis, 1=Icp, 2=VisIcp");

corelib/include/rtabmap/core/odometry/OdometryCuVSLAM.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class RTABMAP_CORE_EXPORT OdometryCuVSLAM : public Odometry
6868
bool lost_;
6969
bool tracking_;
7070
bool planar_constraints_;
71+
int multicam_mode_ = 0;
7172
Transform previous_pose_;
7273
double last_timestamp_;
7374

corelib/src/Parameters.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ rtabmap::ParametersMap Parameters::getDefaultOdometryParameters(bool stereo, boo
183183
(stereo && group.compare("Stereo") == 0) ||
184184
(icp && group.compare("Icp") == 0) ||
185185
(vis && Parameters::isFeatureParameter(iter->first)) ||
186+
group.compare("OdomCuVSLAM") == 0 ||
186187
group.compare("Reg") == 0 ||
187188
group.compare("Optimizer") == 0 ||
188189
group.compare("g2o") == 0 ||

corelib/src/odometry/OdometryCuVSLAM.cpp

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ bool initializeCuVSLAM(const SensorData & data,
104104
std::vector<std::array<float, 12>> & intrinsics,
105105
cudaStream_t & cuda_stream);
106106

107-
CUVSLAM_Configuration CreateConfiguration(const SensorData & data);
107+
CUVSLAM_Configuration CreateConfiguration(const SensorData & data, int multicam_mode);
108108

109109
bool prepareImages(const SensorData & data,
110110
std::vector<CUVSLAM_Image> & cuvslam_images,
@@ -159,18 +159,6 @@ Transform FromcuVSLAMPose(const CUVSLAM_Pose & cuvslam_pose)
159159
return rtabmap_transform;
160160
}
161161

162-
void PrintConfiguration(const CUVSLAM_Configuration & cfg)
163-
{
164-
UINFO("Use use_gpu: %s", cfg.use_gpu ? "true" : "false");
165-
const char* odometry_mode_str = "Unknown";
166-
switch(cfg.odometry_mode) {
167-
case Multicamera: odometry_mode_str = "Multicamera (vision-only)"; break;
168-
case Inertial: odometry_mode_str = "Inertial"; break;
169-
case RGBD: odometry_mode_str = "RGBD"; break;
170-
}
171-
UINFO("Odometry Mode: %s", odometry_mode_str);
172-
}
173-
174162
} // namespace rtabmap
175163

176164
#endif
@@ -204,7 +192,14 @@ OdometryCuVSLAM::OdometryCuVSLAM(const ParametersMap & parameters) :
204192
{
205193
#ifdef RTABMAP_CUVSLAM
206194
Parameters::parse(parameters, Parameters::kRegForce3DoF(), planar_constraints_);
207-
195+
Parameters::parse(parameters, Parameters::kOdomCuVSLAMMulticamMode(), multicam_mode_);
196+
if(multicam_mode_ < 0 || multicam_mode_ > 2)
197+
{
198+
UWARN("%s=%d is invalid, clamping to [0,2].",
199+
Parameters::kOdomCuVSLAMMulticamMode().c_str(), multicam_mode_);
200+
multicam_mode_ = multicam_mode_ <= 0 ? 0 : 2;
201+
}
202+
UINFO("%s=%d", Parameters::kOdomCuVSLAMMulticamMode().c_str(), multicam_mode_);
208203
// Warm up GPU and create CUDA context before tracker initialization
209204
// Supposedly this will speed up the tracker initialization
210205
CUVSLAM_WarmUpGPU();
@@ -734,8 +729,7 @@ bool initializeCuVSLAM(const SensorData & data,
734729
camera_rig.cameras = cuvslam_cameras.data();
735730
camera_rig.num_cameras = cuvslam_cameras.size();
736731

737-
const CUVSLAM_Configuration configuration = CreateConfiguration(data);
738-
PrintConfiguration(configuration);
732+
const CUVSLAM_Configuration configuration = CreateConfiguration(data, multicam_mode_);
739733

740734
// Create tracker
741735
CUVSLAM_TrackerHandle tracker_handle;
@@ -782,7 +776,7 @@ Implementation based on Isaac ROS VisualSlamNode::VisualSlamImpl::CreateConfigur
782776
Source: isaac_ros_visual_slam/isaac_ros_visual_slam/src/impl/visual_slam_impl.cpp:379-422
783777
https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_visual_slam/blob/19be8c781a55dee9cfbe9f097adca3986638feb1/isaac_ros_visual_slam/src/impl/visual_slam_impl.cpp#L379-L422
784778
*/
785-
CUVSLAM_Configuration CreateConfiguration(const SensorData & data)
779+
CUVSLAM_Configuration CreateConfiguration(const SensorData & data, int multicam_mode)
786780
{
787781
CUVSLAM_Configuration configuration;
788782
CUVSLAM_InitDefaultConfiguration(&configuration);
@@ -803,7 +797,7 @@ CUVSLAM_Configuration CreateConfiguration(const SensorData & data)
803797

804798
// Odometry configuration (Vision-only, no IMU)
805799
configuration.odometry_mode = CUVSLAM_OdometryMode::Multicamera;
806-
configuration.multicam_mode = 0; // moderate (0), performance (1) or precision (2).
800+
configuration.multicam_mode = multicam_mode; // moderate (0), performance (1) or precision (2).
807801
configuration.debug_imu_mode = 0;
808802

809803
// Frame timing

0 commit comments

Comments
 (0)