Robot_localization with IMU and conventions

asked 2020-02-12 05:10:51 -0600

GeorgeG gravatar image

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.

image description

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:

image description

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:

image description

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 ...
(more)
edit retag flag offensive close merge delete