Odd behavior from RVIZ VIO output for ISAAC_ROS SLAM

We have been running tests using your SLAM system and in RVIZ I notice the VIO paths starting point diverging from the starting point of the SLAM system and the robots initial pose. Apparently the starting point for the VIO path is the odom frame and that frame is moving around but it isn’t at the location of the current position of the drone.

Hi @lowellm
Thank you for providing a topic. In order to better assist you, can you please describe your setup and the type of data you are using?

Thank you for your support,
Raffaello

Hi @Raffaello We have two cameras and an IMU. The cameras are unrectified and static tf2 publishes exist which connect the three sensors together along with having a base frame to represent the center of the robot. I really don’;t understand why the starting edge of the VIO system would be at the odom frame or be moving, it’s very odd.

Doing some experimenting I may have found a cause(but I am still confused).

I replaced to the transform name for input_base_frame string to be the name of the child which which is the left_camera_location vs the name of the parent(which is robot_center). After doing this the VIO and SLAM path are the same. The documentation is very odd though because it fails to say what the parent should be named in the coordinate frame section of the documentation:

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

Essentially it appears to say that “input_left_camera_frame” and “input_base_frame” should be the same even though that doesn’t make sense.

Basically you have the frame for the center of the robot: robot_center and then a frame from that to the left_camera location, say left_camera_location, then two other frames off that, right_camera_location and imu_location.

At this point I have no idea what the difference between “input_base_frame” and “input_left_camera_frame” or what to name the parent of “input_left_camera_frame” since the natural name which would be “input_base_frame” appears to want the transform which takes the base_frame to the left_camera frame.

In fact it’s not even clear why input_base_frame exists as a transform since input_left_camera_frame should do the same thing according to documentation…

Hi @lowellm

Thank you for reporting your issue and for resolving it. I will document your trouble internally for better documentation in the next release.

Raffaello

@Raffaello

To clarify, what is “input_base_frame” supposed to be and how is it different from base_frame?

In most cases input_base_frame and base_frame are the same.

There is only one case where the user may want to have input and output baseframes separately - if you have several slam nodes.

So you may want to have:
input_base_frame, input_left, .., input_base_frame_to_imu (to read camera parameter)
map1_->odometry1->out_base_frame1
map2_->odometry2->out_base_frame2

I tried having input_base_frame and base_frame be the same and it created the issue I talked about in the first post. The way I made it work was making input_base_frame the same as the left_camera_frame and everything appeared to work correctly. Do you have any ideas why this would be?

In the example you just gave what would base_frame be then?

Hi @lowellm ,

If you wish to utilize the left camera, set “input_left_camera_frame” and the same frame for “base_frame”.