How to tell if I am localized and loop closure has happened using only cuvslam

I am running Isaac preceptor. I am trying to understand if loop closure has happened and I am properly localized. I do see a topic called /visual_slam/status with vo_state which appears to always be a value of “1”, I’d expect loop closure to be something that was achieved over time as cuvslam saw points that it recognized, is there a status that is updated somewhere that I can know definitely if loop closure has happened and I am fully localized?

I should note that I am running the devkit with no lidar, just the stock devkit on my robot base.

Hi @anthony.webb and welcome to the Isaac ROS forum.

Let me reply to your questions:

this topic indicates whether visual tracking worked successfully for a given stereo pair (but is not related to slam)

to observe the loop closure, you need to set the following parameters as True of isac_ros_visual_slam in the launch file:

  • enable_slam_visualization
  • enable_localization_n_mapping

More details on the Isaac ROS vlsam parameters are available at this link: isaac_ros_visual_slam — isaac_ros_docs documentation

Then, through the topic /visual_slam/vis/loop_closure_cloud, you can view a point cloud of visual features from the current image that were matched with features from the vslam map.

Let me know if you can see the output request.

Best,
Raffaello

I do see the red dots on the loop closure cloud, so perhaps all it is well.

Let me describe what I am trying to accomplish as a sanity check. When the robot starts up, I will manually drive it from its dock around my warehouse to various stations and grab the current pose to use as waypoints I can later return to as “goal poses” sent to nav2.

I assume that if the vslam does not have loop closure or has otherwise drifted when I collected a pose/waypoint then when I go to send them as a goal pose to nav2 I will not end up in the proper physical location?

For this reason I thought it would be wise/necessary to ensure that loop closure had occurred and the bot was fully localized BEFORE collecting a waypoint. It would make sense to me there there was a status that would give a simple boolean that the bot was confident it knew where it was. This flag could then give me the green light to go ahead and confidently grab the pose/waypoint.

Does this sound reasonable?