ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Correct way to insert IMU into tf chain for wheeled robot?

asked 2017-10-17 10:42:41 -0500

Rick Armstrong gravatar image

updated 2017-10-17 10:58:37 -0500

What's the right spot in the tf tree to insert an IMU for a small wheeled robot?


We're running AMCL on a Clearpath Jackal, equipped with a Velodyne VLP-16 LiDAR. We've had the little beast autonomously running around our office for a while now, and it's time to move outdoors, to a _relatively_ flat gravel lot. I say "relatively", because it's not uncommon for the robot to bounce around and tilt up to +- 20 degrees or so while scrambling over the gravel. When this happens AMCL gets hopelessly lost, since we're using pointcloud_to_laserscan to get a 2D slice that's fed into laser_scan_matcher and AMCL. When we're tilted, the 2D assumption breaks (as can be seen in RViz, because the point cloud doesn't tilt). The Jackal comes with an IMU, but the tf chain looks like this:


The part of the chain that connects up to the VLP-16 looks like:


I _think_ the right thing to do is this:


I'm about to give it a whirl, but I'd appreciate any advice or experiences that others can offer.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2017-10-17 11:08:54 -0500

tfoote gravatar image

It's generally recommended to use an EKF to integrate the IMU with odometry before publishing to the tf tree. I recommend checking out robot_localization

edit flag offensive delete link more


We're currently using robot_localization, but just to publish Odometry messages for move_base. We've set /robot_localization/publish_tf to false, because the odometry from the Jackal is so poor, that we went to laser_scan_matcher to publish the odom->base_link transform.

Rick Armstrong gravatar image Rick Armstrong  ( 2017-10-17 11:38:43 -0500 )edit

Since we're just looking for roll/pitch, I was hoping that sticking the IMU in the chain using imu_filter_madgwick would make sense, just to get the point cloud oriented correctly.

Rick Armstrong gravatar image Rick Armstrong  ( 2017-10-17 11:40:13 -0500 )edit

You can go ahead and insert the data anywhere in the chain that you want. However I stand by my suggestion to use a filter to fuse the data. I suspect that your best solution would be to add the output of the scan matcher as a sensor input into the localization algorithm.

tfoote gravatar image tfoote  ( 2017-10-17 11:53:07 -0500 )edit

Makes sense, thanks.

Rick Armstrong gravatar image Rick Armstrong  ( 2017-10-17 12:04:53 -0500 )edit

Question Tools



Asked: 2017-10-17 10:42:41 -0500

Seen: 1,041 times

Last updated: Oct 17 '17