Robotics StackExchange | Archived questions

Frame of reference of depth sensors

Hello everyone,

I am working on a project to do the 3D reconstruction of the environment using ASUS Xtion pro and using openni2launch, openni2camera and rgbd_launch packages to get the data from the device drivers.

In rgbdlaunch, there is a file **kinectframes.launch** in which four frames - camerargbframe, cameradepthframe, camerargbopticalframe and cameradepthopticalframe, with different orientations are defined. And there is a frame camera_link in which all of these frames are transformed. You can see the static transform between these frames here.

My question is that when the point cloud is created by the device, which frame among the above mentioned frames is considered as reference? Also when the image (rgb and/or depth) is acquired by the device, which frame is the reference frame?

The orientation of the baselink or cameralink is different from camerargbopticalframe or cameradepthopticalframe as mentioned in REP-103. Hence my confusion.

Any guidance is appreciated. Thanks in advance !!

Asked by KamalDSOberoi on 2016-07-04 05:55:23 UTC

Comments

Answers

The reference frame should be listed in the frame_id field in the header of each message.

Asked by ahendrix on 2016-07-04 22:16:00 UTC

Comments

Hi. Thanks for your answer. But if we talk in more general sense than ROS, do you know if there is any predefined convention by the manufacturer (Microsoft or Asus) that a particular reference frame will be used to display the point cloud?

Asked by KamalDSOberoi on 2016-07-05 02:42:21 UTC

Most depth sensors capture depth as the distance along the ray from the pixel on the image plane, through the center of the image lens. This is a fairly standard pinhole camera model, but reporting depth instead of light intensity or color.

Asked by ahendrix on 2016-07-05 03:06:41 UTC

Some sensors (like the kinect and Asus) appear to have low distortion, or they correct for lens distortion in hardware, but otherwise they don't usually transform the data into a different reference frame.

Asked by ahendrix on 2016-07-05 03:08:07 UTC

Image coordinates correspond to the *_optical_frame, and I believe they are used for the captured rgb and depth images. Sensor-relative coordinates correspond to the camera_depth_frame and are used for the computed point cloud.

Asked by ahendrix on 2016-07-05 03:10:30 UTC

Note that the sensor sends a depth image over USB, and the ROS driver publishes that depth image in addition to converting it into a 3D point cloud and publishing that point cloud, too.

Asked by ahendrix on 2016-07-05 03:12:51 UTC

IMO there should be a reference frame in which the frames for depth and rgb cameras are fixed (static transform) and the point cloud is displayed. What do you think?

Asked by KamalDSOberoi on 2016-07-05 04:24:35 UTC