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 ther_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 ...