0
$\begingroup$

Rosanswers logo

Hello, I'm using tf to transform Point Cloud coords which I receive from kinect (image coords) to real world (gazebo coords). First of all, I had to create a publisher for the /world frame, because launching tf tf_monitor no frame was published. I thought this was enough and I believed that, receiving a coordinate frame from the cloud, this was automatically published somewhere in the kinect controller. However, it seems I was wrong, in fact I'm receiving this error:

Frame id /generic_camera_link does not exist! Frames (3): Frame /odom exists with parent /world. Frame /world exists with parent NO_PARENT.

EDIT: I'm using gazebo_ros_openni_kinect controller for Kinect

EDIT 2: Are there other faster methods to obtain the same results?

How can I solve it?


Originally posted by webrot on ROS Answers with karma: 1 on 2012-09-20

Post score: 0


Original comments

Comment by Boris on 2012-09-22:
What do you mean faster? You can either add a call to static_transform_publisher to a .launch file or do the same thing programmatically. Please see tf Tutorials.

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

You can use static_transform_publisher to create a link between /world frame and whatever you need.

To make it easier to understand interconnections between frames use

$ rosrun tf2_visualization frame_viewer.py

It will produce a graph with all available frames and their links.


EDIT #1:

Run above mentioned command in terminal and check if there any disconnected nodes (single or a group) on the graph.


EDIT #2:

Run the following on terminal but substitute <point_cloud_topic> with appropriate topic name:

$ rostopic echo -n 1 <point_cloud_topic>/header/frame_id

Use frame ID from output of this command to create a new tf frame linked to /odom:

$ rosrun tf static_transform_publisher 0 0 0 0 0 0 /odom <point_cloud_frame_id> 100

This command will add your Kinect frame as a child to /odom frame and will publish it every 100ms.

You might need to substitute zeros there with appropriate XYZ displacement and YPR orientation. See static_tranform_publisher documentation for more details (link provided at the beginning of the answer).

If you run frame_viewer.py after that you should see three nodes connected in line from /world to /odom to <point_cloud_frame_id>.


EDIT #3:

Question about transformation of point cloud coordinates to fixed frame was already answered here.


Originally posted by Boris with karma: 3060 on 2012-09-20

This answer was ACCEPTED on the original site

Post score: 4


Original comments

Comment by harsha on 2012-09-21:
Thanks for the clear explanation.

$\endgroup$

Your Answer

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