# why is tf frame changing?

Hallo,

I am using a Kinect mounted on a PR2, ROS Electric and the openni_camera package from the openni_kinect stack. After starting the Kinect driver with

• rgb_frame id: /openni_rgb_optical_frame and
• depth_frame_id: /openni_depth_optical_frame

the published clouds both have the frame_id /openni_rgb_optical_frame.

Has someone an explanation for me?

Thanks David

pr2admin@kodiak-c1:/opt/ros/electric/stacks/openni_kinect/openni_camera/launch$roslaunch openni_camera openni_node.launch ... logging to /u/pr2admin/.ros/log/bf52f8ea-e5a0-11e1-9e5c-001517ebc101/roslaunch-kodiak-c1-11445.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://kodiak-c1:55334/ # SUMMARY PARAMETERS * /rosdistro * /openni_node1/use_indices * /openni_node1/depth_registration * /openni_node1/image_time_offset * /openni_node1/depth_frame_id * /openni_node1/depth_mode * /openni_node1/debayering * /rosversion * /openni_node1/projector_depth_baseline * /openni_node1/rgb_frame_id * /openni_node1/depth_rgb_translation * /openni_node1/depth_time_offset * /openni_node1/image_mode * /openni_node1/shift_offset * /openni_node1/device_id * /openni_node1/depth_rgb_rotation NODES / openni_node1 (openni_camera/openni_node) kinect_base_link (tf/static_transform_publisher) kinect_base_link1 (tf/static_transform_publisher) kinect_base_link2 (tf/static_transform_publisher) kinect_base_link3 (tf/static_transform_publisher) auto-starting new master process[master]: started with pid [11471] ROS_MASTER_URI=http://c1:11311 setting /run_id to bf52f8ea-e5a0-11e1-9e5c-001517ebc101 process[rosout-1]: started with pid [11488] started core service [/rosout] process[openni_node1-2]: started with pid [11498] process[kinect_base_link-3]: started with pid [11501] process[kinect_base_link1-4]: started with pid [11502] process[kinect_base_link2-5]: started with pid [11503] process[kinect_base_link3-6]: started with pid [11505] [ INFO] [1344901438.735767926]: [/openni_node1] Number devices connected: 1 [ INFO] [1344901438.736005847]: [/openni_node1] 1. device on bus 002:09 is a Xbox NUI Camera (2ae) from Microsoft (45e) with serial id 'A00365902376048A' [ INFO] [1344901438.738526435]: [/openni_node1] searching for device with index = 1 [ INFO] [1344901438.783217136]: [/openni_node1] Opened 'Xbox NUI Camera' on bus 2:9 with serial number 'A00365902376048A' [ INFO] [1344901438.798280799]: rgb_frame_id = '/openni_rgb_optical_frame' [ INFO] [1344901438.800312236]: depth_frame_id = '/openni_depth_optical_frame' === pr2admin@kodiak-c1:~$ rostopic echo /camera/depth/points | grep frame
frame_id: /openni_rgb_optical_frame

pr2admin@kodiak-c1:~$rostopic echo /camera/rgb/image_color | grep frame frame_id: /openni_rgb_optical_frame edit retag close merge delete ## 1 Answer Sort by » oldest newest most voted Hi DavidF! That is an easy one!! If you look into the file$(find openni_camera)/launch/openni_node.launch you will see that the parameter depth_registration is set to true:

<param name="depth_registration" value="true" />


This means that the depth image is being registered with the rgb image (so the pixels in both images represent the exact same points in the real world) and therefore both /camera/rgb/image_color and /camera/depth/points are now expressed in terms of /openni_rgb_optical_frame.

If you set that parameter to false, then /camera/depth/points will have frame_id = /openni_depth_optical_frame as you would expect.

I hope this was helpful. Martin.

more