# IMU and Wheel Encoder Calibration

Hi, I am trying to do localization based on Wheel Odometry, IMU, GNSS and LiDAR. I figured that i first need to do calibration for all the sensors, i.e all of them to be reference from the same frame base_link. I am stuck at trying to do calibration for IMU and Wheel Odometry. From what i found on a couple of papers, what people normally do is to perform IMU Odometry and Wheel Odometry, gets the trajectories and solve the hand-eye calibration problem (AX =XB).

1. I am afraid that the solution from the IMU Odometry and Wheel Odometry will not be closely related, as in there will not be a matrix X that satisfy AX = XB, due to the difference in the trajectories computed. What can i do should this problem occurs? I am thinking of performing odometry in a shorter distance to avoid odometry.

2. Is there a different way to do the calibration? So far I have only found the hand-eye calibration as the only mean to calibration these sensors.

If you have any information with me that you would like to share, all are welcome. Thank you very much.

edit retag close merge delete

Sort by » oldest newest most voted

Hello there,

Am not sure about how to calibrate the IMU, but you can go through [link text] this link which is from ROS Navigation Tunning , where you use it for checking your the Odom (http://wiki.ros.org/navigation/Tutori...)

more

Thank you very much. I will take a look at the link.

( 2020-08-27 03:45:19 -0500 )edit

these liks for IMU calibration"

and this link for Odometry Errors"

Edit 1 From the static_transform_publisher:

static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms


Publish a static coordinate transform to tf using an x/y/z offset in meters and yaw/pitch/roll in radians. (yaw is rotation about Z, pitch is rotation about Y, and roll is rotation about X). The period, in milliseconds, specifies how often to send a transform. 100ms (10hz) is a good value.

The General Form:

     <launch>
</launch>

In your launch file (for example)
<launch>
<node pkg="tf" type="static_transform_publisher" name="imu_to_base"
<node pkg="i2c_imu" type="i2c_imu_node" name="i2c_imu" output="screen" >
<rosparam file="\$(find i2c_imu)/param/imu.yaml"/>
</node>
</launch>


Summery: To align the imu to the vehicle, you should modify the six value of the previous "static_transform_publisher"

more

( 2020-08-26 13:47:31 -0500 )edit

Hi, Thank you very much for your answer. Unfortunately, I might have been not too clear with my questions. I have an IMU module on a vehicle. I want to align the frame of reference of the IMU to the frame of reference of the car. The IMU has been intrinsically calibrated, but i am looking for a method of extrinsic calibration.

( 2020-08-26 21:32:35 -0500 )edit

( 2020-08-27 00:29:30 -0500 )edit

Hi, Thank you very much. Your answer is what i need for the launch file. I am looking for the correct x y z yaw pitch roll values. Do you know how to get it from the IMU data and Wheel odometry data? My imu message is in the format of sensor_msgs/Imu and the wheel odometry is nav_msgs/Odometry.

( 2020-08-27 03:45:05 -0500 )edit

( 2020-08-27 03:50:41 -0500 )edit

Thank you so much for trying to help me out. I will try to explain the question more clearly. I don't have a urdf file for now.

I have an IMU which is fixed on a car. I am trying to get the transformation between the IMU frame and the wheel odometry frame. For example, let the x-axis of the wheel odometry be the forward facing of the vehicle. if the y axis of the IMU frame is on the x axis on the wheel odometry frame, then when the car moves forwards the IMU will report that the car is moving side way.

( 2020-08-28 02:30:26 -0500 )edit

So, To solve your problem, you must generate a urdf file. The answer has been edited.

( 2020-08-28 04:06:54 -0500 )edit

I understand that i need a transformation from the IMU to the Wheel Odometry frame from the tf libraty. I an looking for a method of determining what the values of the elements in the tf.

( 2020-08-28 04:19:12 -0500 )edit