Localizing on a vertical plane
I am currently working on a mobile robot that is able to drive on a vertical surface. As it is a mobile robot i would like to be able to locate the robot continuously. From what i have gathered the two most common ways are either robot_pose_ekf
or robot_localization
. I haven't been able to find much material on robot_localization
so for now I am looking at robot_pose_ekf
. In the documentation it states that:
"The Roll and Pitch angles are interpreted as absolute angles (because an IMU sensor has a gravity reference), and the Yaw angle is interpreted as a relative angle.
Because I am trying to locate on a vertical plane this is exactly the condition i would like to exploit. Say that my map is represented in the XY-plane in Rviz (even though it is the physical XZ-plane) my absolute angle will be the Z-angle and this would enable me to have a absolute (non-drift) heading of my robot. Depending on the configuration of the robot the X or Y angles might line up with the gravity vector, I don't know if this could cause any trouble.
I have tried to see if there is a way to bend robot_pose_ekf
into compliance, be it rotating the odometry of my robot into another plane to match up with the IMU or vice versa. But the problem I keep running into is that robot_pose_ekf
has one relative angle and two absolute where i have at worst the same but depending on configuration a might have three absolute.
furthermore as far as I have read robot_pose_ekf
neglects the odom.pose.pose.position.x
and odom.twist.twist.linear.z
which inhibits me in rotating the whole system into the physical plane.
It might also be cause for trouble that the gravity vector no longer is on a specified axis as it can rotate as the robot rotates around the Z-axis.
The question: Is there a way to make robot_pose_ekf
compliant with my configuration, that I just can't seem to figure out? Maybe it can be modified to neglect X and Y instead of Z and then just use Z alone?
OR
Maybe this is a job for robot_localization
, I just haven't been able to find much information on this.
Any suggestions are MUCH appreciated, as I have set this as a (significant) milestone i my Bachelors project and I am running low on time.
EDIT: This definitely seems like a job for robot_localization
, although in this talk it states that it is required to have compass readings, but i can't see why this is necessary, and it is definitely not an option as the robot I am working on relies on (very) powerful magnets to 'stick' to the vertical surface. Shouldn't the fused orientation the IMU is sending out be enough to give a heading? I am using a BNO 055 IMU.
Even though I am closer to a solution I am by no means there ...