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

# Robot_localization with IMU and conventions

I tried to go through most of the answered topics about this, but still some things are not clear for me, so I have some more questions :) .

I want to do a multi-sensor fusion with robot_localization. As a first step I want to use r_l with one IMU, and later fuse one more IMU and GPS.

The IMU I am using is an SBG that uses the NED notation.

Since r_l uses ENU notation, I convert the measurements from the IMU from NED -> ENU. I have deactivated the magnetometer, since it is prone to errors for the environment that I will be using it.

1) I suppose that ENU is valid only if we know the "true north", which in my case I don't, because I don't use the magnetometer. In ENU I suppose we consider that Y axis is looking forward and X to the right, like:

Also, in r_l documentation it is mentioned:

IMU is placed in its neutral right-side-up position on a flat surface will:

• Measure +9.81 meters per second squared for the Z axis.
• If the sensor is rolled +90 degrees (left side up), the acceleration should be +9.81 meters per second squared for the Y axis.
• If the sensor is pitched +90 degrees (front side down), it should read -9.81 meters per second squared for the X axis.

which results in the ROS convention that X is looking forward and Y to the left, like:

My question is what is the difference between these 2, since no magnetometers are used, and why should I provide the r_l with IMU data in ENU notation and not just convert NED to the ROS convention and provide it to the r_l. Additionally, when I provide IMU data in ENU notation Y axis is pointing forward, which is different from the ROS notation in which the X axis is pointing forward. When I move my robot forward, the r_l outputs movement in the Y axis, but I expected it to output motion in X axis.

2) Since I will fuse many sensors I want everything to be referenced in relevance to the base_link, which is considered to be the "center" of my robot. If my IMU is not placed on the robot's center, I have two options: a) configure the lever arm alignment of my IMU with the offsets of the IMU in relevance to the robot's center, b) declare a static transformation between the IMU and the center of robot (base_link).

• If I use the tf2 for a static transformation between the IMU and the base_link, will the r_l transform "automatically" the provided IMU data from the IMU reference frame, using the declared static transformation, and feed them as input to the EKF, or I have to do the transformation with tf2 myself and then provide the transformed data to the EKF?
• Does tf2 take into account also the forces except the orientation? For example if I have my IMU ...
edit retag close merge delete

Sort by ยป oldest newest most voted

For the mag data, you'd have to either rotate the IMU so that the "new" X-axis (east) points forward, or just provide a static transform for that data. For the accelerometer and gyro, you can just negate the Y and Z axis values so that everything is ROS-conformant.

The EKF will transform the IMU data using the static transforms you provide before fusing the data. However, I think you'd be wise to just set the lever arms using the SBG calibration tool. I've worked with that exact sensor in the past in an underwater robotics application, and I went that route, rather than using static transforms.

more