ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
Let's ignore the vision system for a moment, and focus on wheel odometry and robot_pose_ekf
. Your TF tree should look like this (also see this ros-users thread):
map --> odom_combined --> base_footprint --> base_link
... where
map --> odom_combined
is usually published by amcl (optional)odom_combined --> base_footprint
is published by robot_pose_ekfbase_footprint --> base_link
is a fixed link in your URDF.The reason for this peculiar choice of frames is that in TF, each frame can only have one parent. Intuitively, one would like to have multiple parents of base_footprint
:
odom --> base_footprint
for pure wheel odometryodom_combined --> base_footprint
for EKF estimationmap --> base_footprint
for AMCL localizationSince this is not possible in TF, the frames are published as a chain (see above). The important part for your problem is that when using robot_pose_ekf
, tf
publishing from the wheel odometry has to be switched off. Instead, you should only publish nav_msgs/Odometry
messages (using odom_combined
as the header frame id), which form the input for robot_pose_ekf
and can also be visualized in RViz.
In short:
odom_combined
instead of odom
everywhere (or the other way around, but be consistent about it)robot_pose_ekf
do thatnav_msgs/Odometry
messages for the wheel odometry and the overhead camera on the /odom
and /vo
topics, in both cases specifying odom_combined
as the header frame id and base_footprint
as the child_frame_id.I hope that helps; otherwise, could you post your TF tree, showing the unconnected frames?