使用不带OpenNI的pcl_to_scan将PointCloud转换为LaserScan

时间:2013-08-03 21:50:14

标签: kinect openni point-cloud-library point-clouds ros

我正在开发一个使用Kinect进行机器人导航的项目。我们使用ROS Groovy作为发行版和Gazebo进行模拟,并为机器人模型提供传感器和模型插件。我们使用.sdf文件操作了kinect模型,并添加了libgazebo_ros_openni_kinect.so文件作为插件。所以现在,每当我们在Gazebo中启动机器人模型时,它会发布如下主题:/ cam3d / depth / image_raw,/ cam3d / depth / points,/ cam3d / rgb / image_raw ...

我们的model.sdf包含kinect模型的这一部分:

<plugin name="kinect" filename="libgazebo_ros_openni_kinect.so" >
      <alwaysOn>true</alwaysOn>
      <updateRate>10</updateRate>
      <pointCloudCutoff>0.001</pointCloudCutoff>
      <imageTopicName>/cam3d/rgb/image_raw</imageTopicName>
      <pointCloudTopicName>/cam3d/depth/points</pointCloudTopicName>
      <cameraInfoTopicName>/cam3d/camera_info</cameraInfoTopicName>
      <depthImageTopicName>/cam3d/depth/image_raw</depthImageTopicName>
      <depthImageInfoTopicName>/cam3d/depth/camera_info</depthImageInfoTopicName>
      <frameName>kinect</frameName>
      <distortion_k1>0.00000001</distortion_k1>
      <distortion_k2>0.00000001</distortion_k2>
      <distortion_k3>0.00000001</distortion_k3>
      <distortion_t1>0.00000001</distortion_t1>
      <distortion_t2>0.00000001</distortion_t2>
      <imageTopicName>kinectimage</imageTopicName>
      <pointCloudTopicName>pcloud</pointCloudTopicName>
      <depthImageTopicName>depth</depthImageTopicName>
      <depthImageCameraInfoTopicName>depthcamerainfo</depthImageCameraInfoTopicName>
 </plugin>

我们打算使用pcl_to_scan包将点云数据转换为LaserScan。我做了一些关于它的研究。人们说我必须创建一个启动文件来使用pcl_to_scan包。我看了一下示例启动文件并意识到他们使用openni.launch和openni_manager来将/ camera / depth / points转换为laserscan数据。我需要操作该启动文件才能使用我们创建的模型,因为我们目前还没有使用openni。

他们提供的启动文件是这样的:

<launch>
  <!-- kinect nodes -->
  <include file="$(find openni_launch)/launch/openni.launch"/>

  <!-- openni_manager -->
  <node pkg="nodelet" type="nodelet" name="openni_manager" output="screen" respawn="true" args="manager"/>

  <!-- throttling -->
  <node pkg="nodelet" type="nodelet" name="pointcloud_throttle" args="load pointcloud_to_laserscan/CloudThrottle openni_manager">
    <param name="max_rate" value="2"/>
    <remap from="cloud_in" to="/camera/depth/points"/>
    <remap from="cloud_out" to="cloud_throttled"/>
  </node>

  <!-- fake laser -->
  <node pkg="nodelet" type="nodelet" name="kinect_laser" args="load pointcloud_to_laserscan/CloudToScan openni_manager">
  <!--Setting the parameters for obtaining scan data within desired ranges-->
    <param name="max_height" value="0.30"/>
    <param name="min_height" value="-0.15"/>
    <param name="angle_min" value="-0.5233"/>
    <param name="angle_max" value="0.5233"/>
    <param name="range_min" value="0.50"/>
    <param name="range_max" value="6.0"/>
    <param name="output_frame_id" value="/camera_depth_frame"/>
    <remap from="cloud" to="cloud_throttled"/>
  </node>
</launch>

我还偶然发现了depthimage_to_laserscan和pointcloud_to_laserscan软件包,这对处理这个问题也很有用。有关pcl_to_scan问题的任何帮助,或任何其他更简单的方法来处理这种情况将非常感激。提前谢谢。

0 个答案:

没有答案