一、openni_camera
1.openni_camera:
OpenNI摄像机在ROS下的驱动,可以发出原始的depth、RGB、IR图像流。
OpenNI摄像包括: Microsoft Kinect, PrimeSense PSDK, ASUS Xtion Pro、Pro Live。
这是最简化的驱动程序,节点只可以发送原始数据。因此推荐使用openni2_launch安装包, 因为其中包含了对RGB-D数据的进一步处理。
Ubuntu下的安装:
sudo apt-get install ros-
或者
sudo apt-get install ros-
2.openni2_node发布的话题:
(1)RGB camera:
rgb/camera_info(sensor_msgs/CameraInfo)//相机的校准和元数据
rgb/image_raw (sensor_msgs/Image) //来自于设备的原始数据
(2)Depth camera:
depth_registration为false(关闭OpenNI registration)时:
depth/camera_info (sensor_msgs/CameraInfo)//相机的校准和元数据
depth/image_raw (sensor_msgs/Image) //来自于设备的原始数据,毫米表示的uint16格式深度数据。
Registered depth camera (aligned with RGB camera),depth_registration为true(使能OpenNI registration):
depth_registered/camera_info (sensor_msgs/CameraInfo)//相机的校准和元数据,与depth_registered/image_raw同步。
depth_registered/image_raw (sensor_msgs/Image)//来自于设备配准后的原始数据,毫米表示的uint16格式深度数据。
(3)IR camera:
ir/camera_info (sensor_msgs/CameraInfo) /相机的校准和元数据
ir/image_raw (sensor_msgs/Image) //原始的uint16 IR image
(4)IR projector:
projector/camera_info (sensor_msgs/CameraInfo)
伪造IR projector的校准,基准以P矩阵形式编码,立体进程节点可以使用depth和projector信息作为左右对。
3.服务:
rgb/set_camera_info (sensor_msgs/SetCameraInfo) //设置RGB camera校准
ir/set_camera_info (sensor_msgs/SetCameraInfo)//设置IR camera校准
4.参数:
(1)~device_id (string, default: #1)
指定打开的设备,推荐以下格式:
#1 :发现的第一个设备使用该编号。
2@3 :USB总线2,地址为3。
B00367707227042B:设备的序列名。
(2)~rgb_frame_id(string, default: /openni_rgb_optical_frame)
RGB camera 的 tf 坐标系。
(3)~depth_frame_id(string,default:/openni_depth_optical_frame)
IR/depth camera 的 tf 坐标系。
(4)~rgb_camera_info_url(string,default:file://${ROS_HOME}/
camera_info/${NAME}.yaml)
RGB camera的校准文件URL.
(5)~time_out (double)//数据流刷新超时
5.动态可重组参数:
(1)~image_mode (int, default: 2)
color/grayscale image的输出模式,包括:
SXGA_15Hz (1): 1280x1024@15Hz,
VGA_30Hz (2): 640x480@30Hz,
VGA_25Hz (3): 640x480@25Hz,
QVGA_25Hz (4): 320x240@25Hz,
QVGA_30Hz (5): 320x240@30Hz,
QVGA_60Hz (6): 320x240@60Hz,
QQVGA_25Hz (7): 160x120@25Hz,
QQVGA_30Hz (8): 160x120@30Hz,
QQVGA_60Hz (9): 160x120@60Hz
(2)~depth_mode (int, default: 2)
depth image的输出模式,包括:
SXGA_15Hz (1): 1280x1024@15Hz,
VGA_30Hz (2): 640x480@30Hz,
VGA_25Hz (3): 640x480@25Hz,
QVGA_25Hz (4): 320x240@25Hz,
QVGA_30Hz (5): 320x240@30Hz,
QVGA_60Hz (6): 320x240@60Hz,
QQVGA_25Hz (7): 160x120@25Hz,
QQVGA_30Hz (8): 160x120@30Hz,
QQVGA_60Hz (9): 160x120@60Hz
(3)~depth_registration (bool, default: False)
深度数据校准。
(4)~data_skip (int, default: 0)
每隔N幅图像发送一幅。(rgb/depth/depth_registered/ir) N: 0 to 10
(5)~depth_time_offset (double, default: 0.0)
深度图像时间偏移量,单位:s. Range: -1.0 to 1.0
(6)~image_time_offset (double, default: 0.0)
image图像时间偏移量,单位:s. Range: -1.0 to 1.0
(7)~depth_ir_offset_x (double, default: 5.0)
X offset between IR and depth images Range: -10.0 to 10.0
(8)~depth_ir_offset_y (double, default: 4.0)
Y offset between IR and depth images Range: -10.0 to 10.0
(9)~z_offset_mm (int, default: 0)
Z offset in mm Range: -50 to 50
6.openni_camera/driver nodelet和openni_node具有相同的参数。
二、rgbd_launch:
打开RGBD设备的launch文件,载入的节点将原始的depth/RGB/IR图像流转变成了
depth图像, disparity图像 and (registered) point clouds。
1.rgbd_launch包含了驱动安装包openni_launch或 freenect_launch需要的通用launch文件。
主要有两个重要的launch文件:
(1)processing.launch.xml:安装一系列nodelets去处理来自RGB-D driver(openni_camera or freenect_camera)
的数据,还可以设定参数简化处理nodelets图像。
(2)kinect_frames.launch:为 Kinect安装tf tree。也可以从openni_launch or freenect_launch内部启动该文件。
2.rgbd_launch文件包含多个分散处理的launch文件。但只有 processing.launch.xml可以在外部修改使用。
processing.launch.xml参数:
(1)rgb_processing (bool, default: true)
安装产生原始和校准的单色及多彩图像的nodelets。
给出了来自RGB-D驱动的Bayer编码的rgb/image_raw topic。
产生了rgb/image_mono, rgb/image_rect_mono, rgb/image_color和rgb/image_rect_color话题。
(2)debayer_processing (bool, default: true)
设置为true说明rgb_processing=true,设置为false会导致rgb_processing只产生rgb/image_rect_color。
(3)ir_processing (bool, default: true)
设置为true,校准 IR image(ir/image_raw -> ir/image_rect_raw)
(4)depth_processing (bool, default: true)
给出原始的深度数据并校准。
将原始的和校准的图像数据转变为标准的格式(uint16 -> float),产生一个点云。
需要depth/image_raw,产生depth/image_rect_raw (rectified), depth/image (metric), depth/image_rect (rectified, metric), depth/points (pointcloud).
(5)depth_registered_processing (bool, default: true)
产生深度和RGB配准的RGBD点云。
点云的生成有两种方式:
软件配准管线(要求:sw_registered_processing = true,
depth_processing = true,depth_registration = false)。
硬件配准管线(要求:hw_registered_processing = true,
depth_registration = true)
(6)disparity_processing (bool, default: true)
由未校准的深度数据生成disparity图像。
将depth/image_rect_raw and projector/camera_info转换成depth/disparity。
(7)sw_registered_processing (bool, default: true)
软件管线配准处理: depth/image_rect_raw
->depth_registered/sw_registered/image_rect_raw(registered)
->depth_registered/points AND depth_registered/disparity.
(8)hw_registered_processing (bool, default: true)
硬件管线配准处理:
depth/image_raw->depth_registered/hw_registered/image_rect_raw(rectified)-> depth_registered/points 和 depth_registered/disparity.
重映射:
(1)rgb (string, default: rgb)
重映射rgb命名空间。
(2)ir (string, default: ir)
重映射ir命名空间。
(3)depth (string, default: depth)
重映射depth命名空间。
(4)depth_registered (string, default: depth_registered)
重映射depth_registered命名空间。
(5)projector (string, default: projector)
重映射projector命名空间。
三、openni2.launch
主要是对rgbd_launch和openni_camera的包装。
file="$(find openni2_launch)/launch/includes/device.launch.xml">
file="$(find rgbd_launch)/launch/kinect_frames.launch">