我正在开发一个使用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问题的任何帮助,或任何其他更简单的方法来处理这种情况将非常感激。提前谢谢。