# Using an IMU on vertical surface for heading estimation update

My situation: I am working on a robot that is able to drive on a vertical surface using magnet wheels. I am trying to get to robot to navigate autonomously but I only have odometry and an IMU available now. I know navigating using only sensors that are drift-prone is never a good idea but further sensors will be added later to assist with global position.

My question: Is there a way to exploit that the robot is driving on a vertical surface and hence the IMU can give a fairly precise heading if the robot is at a standstill?

I have read up on robot_pose_ekf and robot_localization but I can't seem to find a way to use these for this specific situation. I could implement them as they are intended but I feel like i would be missing an opportunity to exploit the fact that it is driving on a vertical surface.

What I am looking for: Any help is much appreciated! Full fledged solutions are of course welcome, but I am also looking just for ideas as to how I could approach this. What I have in mind so far is that the robot gets a pose from the IMU whenever it is standing still and then updates the heading of the robot accordingly. But I would rather that it also was able to do some kind of loop-closure-like update of the position according to the heading given by the IMU, but i realize that it might be wishful thinking that such a node exists for my specific situation.

edit retag close merge delete

Sort by » oldest newest most voted

If you read out the the linear acceleration vector from the raw IMU data that will give you what you want.

Say the vertical plane your robot is moving is normal to the z axis of the IMU sensor, in this case taking the x and y components of the raw linear acceleration measurements will give you the direction of the gravity vector in your robots body frame. These measurements can be fairly noisy so you probably want to average a 10-50 readings to remove some of the noise.

more