Improving VIO with RealSense D435I + RTABMap on a drone

asked 2022-10-07 04:45:11 -0500

ripdk12 gravatar image

Hi there! I want to use a RealSense D435I camera to achieve VIO to assist my drone in stabilizing. I take inspiration from the "opensource_tracking.launch" file provided by the realsense-ros package, however, I have modified it quite a bit for better position estimation. Before I go on here's a bit of information about the versions of the packages I'm using:

  1. librealsense2 v. 2.50.0
  2. realsense-ros v. 2.3.2
  3. RTAB-Map v 0.20.18
  4. robot_localization v. 2.6.12
  5. imu_filter_madgwick v. 1.2.5

Also I am running a Jetson Nano module as the companion computer with ROS melodic, along with a Pixhawk flight controller.

The launch file

The launch file that so far has worked best for me, and was mostly inspired by this post is as follows:

link to launch file code (github)

The plan, once I am happy with the result, is to use the mavros package to transform the data from the /odometry/filtered topic to the flight controller

The Problem

So far so good, now the problem I have is that the odometry data seems to be very unstable, it jumps around in the world frame and somewhat easily gets lost. To show what I am talking about, I have included a link to this video This is expected to be the case of course, but I am still wondering if I could do better, and since my knowledge of the area is limited, I thought you smart people might be able to help me.

Also I have noticed that the visual odometry provided by rtabmap on the /rtabmap/odom topic only publishes at a rate of about 1.2 hz, which seems incredibly slow, is there any way to speed this up? I wasn't able to find much information about this.

Further information

Here I have included some pictures that might help understand what's going on

rqt_graph rqt_tf_tree

If you need more information I am happy to provide!

(i could not figure out how to include code snippet directly into the post as standard markdown didn't seem to work) (Also, sadly, I was unable to insert pictures here because of my low karma)

Thanks for your time!

edit retag flag offensive close merge delete


On Jetson nano, you may have to look for more lightweight visual [inertial] odometry package than the one provided with rtabmap. You can feed that odometry to rtabmap node afterwards to get the map.

matlabbe gravatar image matlabbe  ( 2022-10-09 23:11:15 -0500 )edit

Do you have any suggested lightweight packages for stereo odometry? I have managed to get the stereo odometry of rtabmap to spit out odometry messages at 2.7 Hz now, which has improved the results a lot, ideally i would love to see 20+ Hz odom messages. Thanks.

ripdk12 gravatar image ripdk12  ( 2022-10-10 03:00:05 -0500 )edit

You may try open_vins, msckf_vio packages. Based on results in this paper, msckf_vio was pretty fast.

matlabbe gravatar image matlabbe  ( 2022-10-23 16:42:19 -0500 )edit