0
$\begingroup$

Rosanswers logo

Hello,

I am using rtabmap rgbd_odometry node and data from IMU feeded to robot_pose_ekf node. This gives me stable odometry. This stable odometry data publishes a odom->base_link transform. Apart from this the rgbd_odometry node and robot_pose_ekf node also publishes the transform between odom and baselink. To avoid any conflict i remapped the frame id of rgbd_odometry and robot_pose_ekf as odom1 and odom_combined. But now when i run

rosrun tf view_frames 

The results are varying everytime i run the command. Sometimes it shows that odom-base_link transform is published by odom and at other point of time it shows that the same transform is published by rgbd_odometry. How can i select odom to be publishing this transform always ?

roswtf

gives me this.

ERROR TF re-parenting contention:
 * reparenting of [base_link] to [odom_combined] by [/robot_pose_ekf]
 * reparenting of [base_link] to [odom_useless] by [/rgbd_odometry]
 * reparenting of [base_link] to [odom] by [/odom]

ERROR TF multiple authority contention:
 * node [/robot_pose_ekf] publishing transform [base_link] with parent [odom_combined] already published by node [/odom]
 * node [/rgbd_odometry] publishing transform [base_link] with parent [odom_useless] already published by node [/robot_pose_ekf]
 * node [/odom] publishing transform [base_link] with parent [odom] already published by node [/rgbd_odometry]
 * node [/rgbd_odometry] publishing transform [base_link] with parent [odom_useless] already published by node [/odom]
 * node [/odom] publishing transform [base_link] with parent [odom] already published by node [/robot_pose_ekf]
 * node [/robot_pose_ekf] publishing transform [base_link] with parent [odom_combined] already published by node [/rgbd_odometry]

Please help me with this. I have been stuck at the same point since last 4 days.


Originally posted by Bhargav on ROS Answers with karma: 72 on 2014-11-23

Post score: 0

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

tf represents coordinate frames and the transforms between them as a tree. This means each frame_id can only have one parent (but can have many children). You currently have three separate nodes publishing a transform from different frames into base_link: robot_pose_ekf, rgbd_odometry, and odom.

In other words, renaming only the odom frame coming from robot_pose_ekf isn't enough. If you had instead/also renamed the child_frame_id (base_link), it would have worked. Alternatively and preferably, the rgbd_odometry node may have a parameter that stops it from publishing its transform. Finally, you appear to have a third node publishing that transform (the odom node).


Originally posted by Tom Moore with karma: 13689 on 2014-11-23

This answer was ACCEPTED on the original site

Post score: 1


Original comments

Comment by Bhargav on 2014-11-23:
Thank you Tom! I did the same with robot_pose_ekf. There was a parameter called publish_tf. I set it false, but somehow it was still publishing. I don't know if there is one for rgbd_odometry. It wasn't listed on their page. Is there a way that we can see all the parameters of the give node?

Comment by Tom Moore on 2014-11-23:
Since robot_pose_ekf is going to have the best overall pose estimate in your system, you want it to publish that transform, and not the other nodes. Try rosparam list from a console to see what parameters are set. Other than the namespaces, I don't know if you can see who set what parameter.

Comment by Bhargav on 2014-11-23:
Thank you! But rosparam list only shows the parameters which i have already set in launch file.

Comment by Tom Moore on 2014-11-23:
Perhaps you should post your launch file.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.