ロボットのナビゲーションに 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>
点群データを LaserScan に変換するために、pcl_to_scan パッケージを使用する予定です。それについて少し調べてみました。pcl_to_scan パッケージを使用するには、起動ファイルを作成する必要があると言われています。起動ファイルの例を調べたところ、/camera/depth/points をレーザースキャン データに変換するために openni.launch と openni_manager が使用されていることがわかりました。現時点では 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 の問題、またはこの状況に対処するための他の簡単な方法に関するヘルプをいただければ幸いです。前もって感謝します。