ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

frames and tf with robot_pose_ekf

asked 2011-07-07 02:54:28 -0500

chcorbato gravatar image


I'm trying to use a compass to improve the odometry information of my robot, so I'm fusing it as an Imu message with the robot odometry using the robot_pose_ekf node. I have problems with the /odom frame published by my robot odometry and the /odom_combined frame published by robot_pose_ekf.

Could anyone help me understand how robot_pose_ekf should be integrated with the already extant frames and transformations?

Thank you

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2011-07-07 10:04:29 -0500

Wim gravatar image

What you are trying to do is not really supported in the robot_pose_ekf. According to the documentation for the imu input to the robot_pose_ekf: "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". What you are trying to do is to provide a Yaw angle from a compass, which is an absolute measurement, not a relative measurement. Although the robot_pose_ekf can give you a reasonable result, you will still see drift on your robot's Yaw angle because of this.

edit flag offensive delete link more

answered 2011-07-07 05:34:38 -0500

arebgun gravatar image

updated 2011-07-07 05:37:33 -0500

Your robot only needs to publish odometry topic and not odometry TF frame when using robot_pose_ekf node. As you already noticed if they both publish to TF you will end up with multiple parents for your robot's base_link, which can't happen. robot_pose_ekf subscribes to odometry and imu topics, merges them and then publishes odom_combined TF frame, which you can use in navigation stack. Usually robot base drivers have a parameter that let's use enable/disable odometry frame broadcast on TF.

edit flag offensive delete link more


But, when you try to use the odom_combined generated by the robot_pose_ekf node in the navigation stack, this last expects an "nav_msgs/Odometry" and robot_pose_ekf/odom_combined publish a "geometry_msgs/PoseStamped". What about this? There is necessary some change or adaption before send the "corrected" odometry to move_base node? Thanks.
mbj gravatar image mbj  ( 2011-07-14 21:18:57 -0500 )edit

My robot_pose_ekf subscribes to /encoder and /imu What should be the headers of these two topics? Currently, my /encoder has frame_id: odom_combined and child_frame_id: base_footprint while my /imu has frame_id: base_link. My tf tree is odom->base_footprint->base_link

2ROS0 gravatar image 2ROS0  ( 2014-07-09 09:43:23 -0500 )edit

Will that ^ be a problem considering that my /encoder msg has a child_frame_id which is not even on my tree (not being broadcast). The node doesn't throw any errors so I am wondering if robot_pose_ekf actually uses the frame_id ?

2ROS0 gravatar image 2ROS0  ( 2014-07-09 09:45:19 -0500 )edit

Question Tools


Asked: 2011-07-07 02:54:28 -0500

Seen: 1,781 times

Last updated: Jul 07 '11