Indoor localization with 2D lidar and IMU
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:
- 2D Laser scan data
- odom -> base_link transform. This is typically published by an odometry source.
- 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 :
- Is this the right approach to perform localization using an IMU and 2D lidar?
- Will the odometry estimated using the IMU data be good enough for amcl?