ROS下的openni2.launch

一、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-<rosdistro>-openni2-camera

或者

sudo apt-get install ros-<rosdistro>-openni2-launch

 

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的包装。


<launch>

  <!-- "camera" 唯一标识该设备. 所有的topics都在"camera"命名空间下,并且它是tf frame ids的前缀. -->
  <arg name="camera" default="camera" />
  <arg name="rgb_frame_id"   default="$(arg camera)_rgb_optical_frame" />
  <arg name="depth_frame_id" default="$(arg camera)_depth_optical_frame" />

  <!-- device_id有如下的格式:
         "#1"  : 第一个被发现 的设备。
         "2@X" :USB bus 2 上第X个被发现的设备-->
  <arg name="device_id" default="#1" />

  <!-- 默认校准文件存在是${ROS_HOME}/camera_info/${NAME}.yaml,
      ${NAME}是来自"[rgb|depth]_[serial#]"的设备序列编号,例: "depth_B00367707227042B".
    -->
  <arg name="rgb_camera_info_url"   default="" />
  <arg name="depth_camera_info_url" default="" />

  <!-- 硬件设备配准-->
  <arg name="depth_registration" default="false" />

  <!-- 驱动参数 -->
  <arg name="color_depth_synchronization"     default="false" />
  <arg name="auto_exposure"                   default="true" />
  <arg name="auto_white_balance"              default="true" />

  <!-- 重映射设备空间的所有参数 -->
  <arg name="rgb"              default="rgb" />
  <arg name="ir"               default="ir" />
  <arg name="depth"            default="depth" />

  <!-- 当你播放录制的包文件或自己编写了更为精准的tf时,需要选择性抑制自主载入驱动的nodelet或发布的tf tree. -->
  <arg name="load_driver" default="true" />
  <arg name="publish_tf" default="true" />
  <!-- 处理模式 -->
  <arg name="rgb_processing"                  default="true"  />
  <arg name="debayer_processing"              default="false" />
  <arg name="ir_processing"                   default="false" />
  <arg name="depth_processing"                default="true" />
  <arg name="depth_registered_processing"     default="true" />
  <arg name="disparity_processing"            default="false" />
  <arg name="disparity_registered_processing" default="false" />
  <arg name="hw_registered_processing"        default="true" if="$(arg depth_registration)" />
  <arg name="sw_registered_processing"        default="false" if="$(arg depth_registration)" />
  <arg name="hw_registered_processing"        default="false" unless="$(arg depth_registration)" />
  <arg name="sw_registered_processing"        default="true" unless="$(arg depth_registration)" />

  <!-- 默认关闭topic复位功能 -->
  <arg name="respawn" default="false" />

  <!-- nodelet manager的线程数 -->
  <arg name="num_worker_threads" default="4" />

  <!-- 载入topics/nodelets进入 "camera" 命名空间 -->
  <group ns="$(arg camera)">
 
   <!-- 启动t nodelet manager -->
   <arg name="manager" value="$(arg camera)_nodelet_manager" />
   <arg name="debug" default="false" /> <!-- Run manager in GDB? -->
   <include file="$(find rgbd_launch)/launch/includes/manager.launch.xml">
     <arg name="name" value="$(arg manager)" />
     <arg name="debug" value="$(arg debug)" />
     <arg name="num_worker_threads"  value="$(arg num_worker_threads)" />
   </include>

    <!-- 载入驱动 -->
    <include if="$(arg load_driver)"
      file="$(find openni2_launch)/launch/includes/device.launch.xml">
      <arg name="manager"                         value="$(arg manager)" />
      <arg name="device_id"                       value="$(arg device_id)" />
      <arg name="rgb_frame_id"                    value="$(arg rgb_frame_id)" />
      <arg name="depth_frame_id"                  value="$(arg depth_frame_id)" />
      <arg name="rgb_camera_info_url"             value="$(arg rgb_camera_info_url)" />
      <arg name="depth_camera_info_url"           value="$(arg depth_camera_info_url)" />
      <arg name="rgb"                             value="$(arg rgb)" />
      <arg name="ir"                              value="$(arg ir)" />
      <arg name="depth"                           value="$(arg depth)" />
      <arg name="respawn"                         value="$(arg respawn)" />
      <arg name="depth_registration"              value="$(arg depth_registration)" />
      <arg name="color_depth_synchronization"     value="$(arg color_depth_synchronization)" />
      <arg name="auto_exposure"                   value="$(arg auto_exposure)" />
      <arg name="auto_white_balance"              value="$(arg auto_white_balance)" />
    </include>

    <!-- 载入标准的constellation of processing nodelets -->
    <include file="$(find rgbd_launch)/launch/includes/processing.launch.xml">
      <arg name="manager"                         value="$(arg manager)" />
      <arg name="rgb"                             value="$(arg rgb)" />
      <arg name="ir"                              value="$(arg ir)" />
      <arg name="depth"                           value="$(arg depth)" />
      <arg name="respawn"                         value="$(arg respawn)" />
      <arg name="rgb_processing"                  value="$(arg rgb_processing)" />
      <arg name="debayer_processing"              value="$(arg debayer_processing)" />
      <arg name="ir_processing"                   value="$(arg ir_processing)" />
      <arg name="depth_processing"                value="$(arg depth_processing)" />
      <arg name="depth_registered_processing"     value="$(arg depth_registered_processing)" />
      <arg name="disparity_processing"            value="$(arg disparity_processing)" />
      <arg name="disparity_registered_processing" value="$(arg disparity_registered_processing)" />
      <arg name="hw_registered_processing"        value="$(arg hw_registered_processing)" />
      <arg name="sw_registered_processing"        value="$(arg sw_registered_processing)" />
    </include>

  </group> <!-- camera -->

  <!-- 载入默认tf -->
  <include if="$(arg publish_tf)"
    file="$(find rgbd_launch)/launch/kinect_frames.launch">
    <arg name="camera" value="$(arg camera)" />
  </include>

</launch>

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 


 

你可能感兴趣的:(ROS下的openni2.launch)