Using ISAAC ROS vSLAM questions on localization mode, pose graph saving offline and 3d reconstruction with nvblox

Hi,

I was testing out different API for isaac ros vslam in the latest 3.0 release.

I had the following questions:

  1. I have noticed isaac ros visual slam cannot be run in localization mode only. It lets us load the previously saved map but modifies it running in full SLAM mode. Can this behavior be modified where I can switch between full SLAM and localization modes on demand? I essentially dont want drastic changes in the map since I am using these SLAM poses to create a dense 3D reconstruction.
  2. I want to create a dense 3D reconstruction of the environment using nvblox or other algorithms. If fed SLAM poses directly online 3D reconstruction can be really poor especially when the camera is brought back in a previously located region. Do you all plan on tightly integrating vslam + nvblox to support loop closure?
  3. Can the code be modified to use wheel odometry data instead of IMU? If yes, can you point to where it can be done?
2 Likes

Hi @vishrut1

Thank you for your interesting, let me reply question by question:

Isaac ROS vslam can also be set up in only localization mode, just changing some parameters:

ROS Parameter Type Default Description
enable_localization_n_mapping bool true If enabled, SLAM mode is on. If disabled, only odometry is on. Currently SLAM mode only works when using a single stereo camera.
enable_imu_fusion bool false If enabled, IMU data is used.

I suggest using Isaac ROS nvblox, which is designed to build a 3D map and is already integrating loop closure. Isaac ROS Nvblox — Isaac ROS

The cvlsam algorithm cannot be modified, but you can use another ROS 2 node to filter and merge all odometries together; for example:

I hope I help you with my replies, but feel free to ask more.

Best,
Raffaello

Hi @Raffaello

Thank you for the prompt reply.

I had some follow up questions:

  1. “Isaac ROS vslam can also be set up in only localization mode, just changing some parameters.”
    → Setting enable_localization_n_mapping to false would mean nvidia isaac vslam would run purely in visual odometry mode and not use landmarks/visual features from the previously created map?

  2. " I suggest using Isaac ROS nvblox, which is designed to build a 3D map and is already integrating loop closure. Isaac ROS Nvblox — isaac_ros_docs documentation"
    → I couldn’t find any resources on isaac_ros_nvblox specifying loop closure. Additionally, the reason I was checking on vSLAM + nvblox integration was if vSLAM corrects drifts with loop closure constraints it is not reflected in nvblox since nvblox is only subscribing to odom data and not pose graph. This realistically translates to a waypoint having two different locations in vSLAM tf and in the map constructed by nvblox.

  3. “The cvlsam algorithm cannot be modified, but you can use another ROS 2 node to filter and merge all odometries together”
    → I understand, but I was primarily asking this so that my robot’s high fidelity wheel odometry data can be fused along with imu data in pre integration phase to get robust vSLAM. Does Nvidia plan to integrate odometry data in vSLAM in upcoming releases?

2 Likes

can you only localize if the IMU is not being used?

Could you please clarify this ? so setting “enable_localization_n_mapping” to true and “enable_imu_fusion” to false makes the vslam perform in localization mode and does not modify the existing map(pose graph and landmarks) ?

Hi all, let me support you by the lines:

Yes, the localization works even if the IMU fusion is disabled.

Isaac ROS vSLAM will try to determine the location of the landmarks on the requested map that match the current set. If the localization is successful, cuVSLAM will load the map into memory. If not, it will proceed to build a new map. The new configuration will not affect the previous map.

1 Like
  1. " I suggest using Isaac ROS nvblox, which is designed to build a 3D map and is already integrating loop closure. Isaac ROS Nvblox — isaac_ros_docs documentation"
    → I couldn’t find any resources on isaac_ros_nvblox specifying loop closure. Additionally, the reason I was checking on vSLAM + nvblox integration was if vSLAM corrects drifts with loop closure constraints it is not reflected in nvblox since nvblox is only subscribing to odom data and not pose graph. This realistically translates to a waypoint having two different locations in vSLAM tf and in the map constructed by nvblox.

For your second question, I guess the nvblox loop is in an offline state. The official map building package isaac_mapping_ros. Its map building process is to run cuvslam offline to obtain all the poses after loop optimization, and then use nvblox to perform 3D reconstruction. The final result is a map containing loop detection.