Ask Your Question

Frame id /generic_camera_link, with Kinect

asked 2012-09-20 23:05:02 -0500

webrot gravatar image

updated 2016-10-24 09:04:19 -0500

ngrennan gravatar image

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?

edit retag flag offensive close merge delete


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.

Boris gravatar imageBoris ( 2012-09-22 19:08:07 -0500 )edit

2 Answers

Sort by ยป oldest newest most voted

answered 2012-09-20 23:52:08 -0500

updated 2013-02-23 21:51:38 -0500

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

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 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.

edit flag offensive delete link more


Thanks for the clear explanation.

harsha gravatar imageharsha ( 2012-09-21 19:21:15 -0500 )edit

answered 2012-09-21 01:10:09 -0500

webrot gravatar image

So, I should do it in the .xacro file of the kinect? Thanks

edit flag offensive delete link more


Please use comments for clarification instead of creating new answers.

Boris gravatar imageBoris ( 2012-09-21 01:45:53 -0500 )edit

Ok... sorry. No there aren't disconnected nodes. There are only the two (world and odom) which I created.

webrot gravatar imagewebrot ( 2012-09-21 02:43:50 -0500 )edit

I'm trying, but this will not convert image coords to real coords unless i create a static_trasform_publisher which uses camera parameters, isn't it?

webrot gravatar imagewebrot ( 2012-09-21 13:01:28 -0500 )edit

have you figured out the problem? I cant transform point cloud in camera frame to world frame. I tried adding a parent frame to camera link but the point cloud topic is still in camera frame

dmngu9 gravatar imagedmngu9 ( 2015-04-27 07:07:11 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2012-09-20 23:05:02 -0500

Seen: 1,427 times

Last updated: Feb 23 '13