On the alignment of global reference frames of cuVSLAM and nvblox global costmap?

Hello Isaac ROS team

Thank you very much releasing cuSLAM, nvblox and isaac_ros_map_localization packages as open-source projects.

I went over the cuVSLAM: CUDA Accelerated Visual Odometry and Mapping and nvblox:GPU-Accelerated Incremental Signed Distance Field Mapping technical reports along with @ashwinvk’s webinar for isaac_ros_map_localization package.

Here is what I have understood so far

  1. cuVSLAM map is internally used to provide robust visual-internal odometry and this map doesn’t interface with Nav2

  2. Assuming a static costmap created to conform to the specifications of nav2_map_server was generated apriori, isaac_ros_map_localization can reliably estimate initialpose of the robot in 2D global costmap.

  3. nvblox provides 3D reconstruction along with 2D costmap updates when a new pose, color and depth image becomes available.

Given the above, my question is as follows:

The initial pose from isaac_ros_map_localization, along with the global origin from the 2D costmap be used to initialize the global origin and starting pose in cuVSLAM i.e. global reference frame alignment between the two maps?

Thank you for your time.

Best,
@azmyin12

isaac_ros_map_localization is used to calculate where the robot is with respect to the Nav2 map. This sets the map->odom frame transform. The cuVSLAM is used to publish the odometry, ie, the transform between odom->base_link. I’m not sure which global origin param you are referring to. But I don’t think there is a need for such a parameter is this pipeline.

1 Like

Hi @ashwinvk

Thank you for the feedback. Before presenting my discussion (and a few questions) further, the simulated robot I am working with when running cuVSLAM shows this TF

Perusing the cuVSLAM documentations, I see the following

and the coordinate frame definitions

cuVSLAM appears to be publishing odometry data with respect to two reference frames. One is published is map -> base_link and the other one is odom -> base_link.

Now from isaac_ros_nvblox ros parameter doc , this package is setup to publish map updates from global_frame -> pose_frame with those two parameters defaults being odom and base_link respectively.

My question(s) are as follows

a Why cuVSLAM publishes both sets of odometry when common convention states odom frame drifts over time. Isn’t SLAM performing the drift corrections?

b After running cuVSLAM do I need to set nvblox’s global_frame to map instead of odom?

c If b is true, then by the logic I presented in this topic, are the reference frames of both SLAM and nvblox now aligned to one common global reference frame?

Best regards,
Azmyin

1 Like