Rosanswers logo

I have a 3 wheeled differential drive robot (2 wheels + 1 castor) which has a 9 DOF IMU (3d acceleration, heading and angular velocities) and a 2D lidar (RPLidar). I have a pre-computed map.

To localize the robot I am using the ROS package amcl. AMCL requires 3 inputs:

  1. 2D Laser scan data
  2. odom -> base_link transform. This is typically published by an odometry source.
  3. Map

Odometry is estimated using the ROS package robot_localization, which uses Kalman filters to fuse data from the IMU's 3 sensors - accelerometer, gyroscope and magnetometer. The localization works reasonably well at slow speeds. However sometimes the estimated position is way off the actual position.

My questions :

  1. Is this the right approach to perform localization using an IMU and 2D lidar?
  2. Will the odometry estimated using the IMU data be good enough for amcl?

Originally posted by Subodh Malgonde on ROS Answers with karma: 512 on 2018-08-31

Post score: 0


1 Answer 1


Rosanswers logo

If you're using robot_localization in what I would refer to as a "local" mode (i.e. updating based on sensors for local state estimate as opposed to AMCL which gives global updates of drift), you would want to also likely include your encoder readings from the drivetrain to give it velocity information. Integrating acceleration is tough work and you're essentially throwing away "free" information given to you by the encoders to do your speed control.

That should help you get the most generic setup on line. If you have issues at this point, I think you need to take a look at your covariances and settings and tune til happy. There will be of course some drift, this is why AMCL exists, but should get you on a path.

Originally posted by stevemacenski with karma: 8272 on 2018-08-31

This answer was ACCEPTED on the original site

Post score: 3

Original comments

Comment by Subodh Malgonde on 2018-09-03:
Thanks for your answer. I am using robot_localization in the "local mode". I understand that integrating acceleration is tough work. However I expected laser + IMU to be sufficient for localization. I will now take your suggestion and use wheel encoder data.

Comment by aarontan on 2018-09-10:
@subodh have you had any luck with robot_localization in "local mode" for imu + wheel odometry? I am facing issues in this area (See my latest question)

Comment by Subodh Malgonde on 2018-09-11:
Yes I have been able to setup robot_localization in the local mode and I have used it with an IMU (Razor 9DOF) and laser odometry (rf2o_laser_odometry). I have left a couple of comments on your question.

Comment by raphael_khang on 2020-07-06:
Hello, I am working on the same subject as you, but am facing difficulties. I want to know if you had managed to solve this and if so you want to give me the configuration made? or the code so that I try to see what’s wrong with me


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.