Robotics StackExchange | Archived questions

Robot Localization output incorrect for movement in Y axis with Vectornav IMU

Hello,

I am using Robot Localization to localize rover with an Marvelmind Indoor GPS, Vectornav IMU and Wheel Encoder Odometry.

For the vectornav imu I am using code set from: https://github.com/dawonn/vectornav

I have ensured that the vectornav IMU follow ENU standard. However the output orientation is flipped only on the Y axis (With respect to actual movement in real life) but correct when moving along x axis in the global frame.

image description

In the test above I moved the rover in a square as representation with the blue arrows. However the ekf output is in yellow and does not match the actual robots orientation only in the Y axis. The robot turns in the correct direction however its just not matching up with the Blue arrows (The real movement of the robot) as its only flipped in one axis.

When I switch the vectornav imu code to the NED format I get this:

image description

In which the red arrows is the EKF output and the orange is the real robot movement. How all the arrows are moving in the square pattern that I moved the robot however the actual robot had movement that was vertically flipped.

Thoughts? Please let me know if there is more information I can provide for troubleshooting!

Asked by jawsqb on 2019-09-19 13:39:30 UTC

Comments

Answers

Some thoughts, may be right, may be not.

Some (nicer) IMUs will have a different coordinate system and you should make sure to check the docs, and I think this is what you may be seeing here. IMUs report things in the inertia frame of reference, so +Z is anti-gravity direction which is pretty much the opposite as most would think. If you're saying that the Y axis seems to be flipped, that's makes me suspect that the frame is actually rotated 180 about the X axis so that the Y is opposing and the +Z is in the "intuitive" direction meaning proper acceleration vs. acceleration.

Sidenote: That's a very very nice IMU which comes with an extremely powerful SDK, I hope you're making good use of it and not just fusing the raw output to R_L :-)

Asked by stevemacenski on 2019-09-19 22:27:14 UTC

Comments

So I am matching the outputs to what the robot localization site is recommending reference below. Though I am somewhat confused by terminology that if the "right side up" position means that it is just sitting flat. Or that if the Right side of the IMU is actually facing up.

The weird issue is that I am getting correct orientation in the odometry frame of ekf output when fusing just wheel odometry and imu. However when I fuse the ekf in the map frame to include the indoor GPS map I get the above behavior.

I'm just confused as to why even though I conform it to the REP standard it is giving me behavior like this in the map frame but not odometry frame.

IMU Setup Recommendation: http://docs.ros.org/indigo/api/robot_localization/html/preparing_sensor_data.html

Asked by jawsqb on 2019-09-20 08:58:07 UTC

I'd recommend at least trying my suggestion and seeing if that helps. Also keep in mind that R_L recommends to run 2 filters: a local filter of IMU/odom for odom->base_link and then another with GPS+(stuff?) for the map->odom. Make sure you're not trying to dump everything into 1 filter

Asked by stevemacenski on 2019-09-20 14:21:23 UTC