Confusion on SLAM node with unrectified inputs

I have been reading the documentation I was linked to pretty intensely and it’s not made clear how the system handles unrectified stereo images.

https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_visual_slam/index.html

Gives basic information but what isn’t clear is as follows:

  1. Why isn’t the optical fame of the camera the same as the frame? If the two aren’t the same how do you connect them to each other?

  2. Suppose you have a transformation between your two cameras, how do you transmit that information? Given the cameras are not aligned it’s unclear if the information is transmitted via the CameraInfo node or by a starting parameter? The CameraInfo node only appears to have a place for rotation information and not position offset.

  3. Does the system attempt to turn the image pair into a set of rectified binocular stereo images ? Or does it optimize position using projection onto each cameras undistorted but not horizontally aligned images?

  4. Assuming it attempts to create set of calibrated binocular stereo images is position/orientation information for the robot and landmarks given with respect to the unrectified but undistorted camera left cameras location? Or is it given with respect to the rectified camera? If it’s given with respect to the rectified camera how can we get the transformation to get the position/orientation information with respect to the undistorted, but unrectified left camera?

  5. When using IMU information, is the IMU location given with respect to the left cameras location or left cameras rectified location? It appears the IMU location is given via a TF message which the VSLAM node subscribes to.

Hi @lowellm ,

We have just released Isaac ROS 2.1. If you haven’t downloaded it yet, you can read the release note here:

https://nvidia-isaac-ros.github.io/releases/index.html#isaac-ros-2-1-0-november-16-2023

I reply to all your questions below.

  1. Why isn’t the optical fame of the camera the same as the frame? If the two aren’t the same how do you connect them to each other?

Some params correspond to the tf frame for each camera so the transform can be queried from that.

  1. Suppose you have a transformation between your two cameras, how do you transmit that information? Given the cameras are not aligned it’s unclear if the information is transmitted via the CameraInfo node or by a starting parameter? The CameraInfo node only appears to have a place for rotation information and not position offset.
  1. Does the system attempt to turn the image pair into a set of rectified binocular stereo images ? Or does it optimize position using projection onto each cameras undistorted but not horizontally aligned images?

You can use rectified_images that flag the incoming images are rectified or raw.

More info here: isaac_ros_visual_slam — isaac_ros_docs documentation

  1. Assuming it attempts to create set of calibrated binocular stereo images is position/orientation information for the robot and landmarks given with respect to the unrectified but undistorted camera left cameras location? Or is it given with respect to the rectified camera? If it’s given with respect to the rectified camera how can we get the transformation to get the position/orientation information with respect to the undistorted, but unrectified left camera?

You can provide a raw unaligned rig or do an alignment on his side enabling rectified_images in both ways.

  1. When using IMU information, is the IMU location given with respect to the left cameras location or left cameras rectified location? It appears the IMU location is given via a TF message which the VSLAM node subscribes to.

If you provide full rectified input, then imu is relative to rectified. If raw then relative to raw.

You can connect the node in:

Raw camera->ROS rectification that shift/rotate camera->Isaac ROS VSLAM in rectified_images mode → output pose will be relative to rectified input.

Then, it’s up to you to apply reverse extra transformation from ROS rectification.

Raffaello

1 Like

Hi @Raffaello.

Thanks for the information,

So to clarify, if I provide raw unrecitifed input along with distortion parameters and the frame transformation information between cameras, the odometry information output by the SLAM program is with respect to the raw left camera?

And the frame transformation linking the two cameras and the camera and the IMU, is it just a normal tf2 message getting published or something else? What is the format of the transform message and what name is being refered to? The documentation is really bad.