概要
gmappingなどの多くのマップ生成パッケージでは、sensor_msgs/LaserScanの型のトピックを受信することが多いと思います。そのような時に、scanを発行できるデバイスはLidarなどがありますが、Lidarを使わずにデプスカメラだけを用いたい場合に、深度マップのトピックをscanトピックに変換してくれるdepthimage_to_laserscan というパッケージを用いることをおすすめします。
使い方
launchファイルの例は下記になります。
<node pkg="depthimage_to_laserscan" type="depthimage_to_laserscan" name="depthimage_to_laserscan_left" > <param name="output_frame_id" value="scan_link"/> <remap from="image" to="/camera/depth/image_raw" /> <remap from="camera_info" to="/camera/depth/camera_info" /> </node>
- output_frame_id: scanトピックが発行されるフレームのIDです。通常は、デプスカメラが設置されたフレームを指定すれば良いかと思います。
- image: インプットされるデプスカメラのデータです。デフォルトだと/imageというトピックをsubscribeしにいくので、 デプスカメラが発行するトピックにremapします。(例では/camera/depth/image_raw)
- camera_info: インプットされるデプスカメラのメタデータです。デフォルトだと/camera_infoというトピックをsubscribeしにいくので、デプスカメラが発行するトピックにremapします。(例では/camera/depth/camera_info)
上記をlaunchファイルに追加して実行するとデプスカメラの情報がscanトピックに変換されて出力されます。
複数方向のデプスマップの統合
デプスカメラはLidarなどに比べるとスキャン範囲は狭くなってしまうので、複数台を組み合わせることも可能です。
複数変換したい時も同様で、下記のように名前がぶつからないように注意しながらlaunchファイルを組めば大丈夫です。
<node pkg="depthimage_to_laserscan" type="depthimage_to_laserscan" name="depthimage_to_laserscan_front" > <param name="output_frame_id" value="scan_front_link"/> <remap from="image" to="/camera_front/depth/image_raw" /> <remap from="camera_info" to="/camera_front/depth/camera_info" /> <remap from="scan" to="/scan_front" /> </node> <node pkg="depthimage_to_laserscan" type="depthimage_to_laserscan" name="depthimage_to_laserscan_left" > <param name="output_frame_id" value="scan_left_link"/> <remap from="image" to="/camera_left/depth/image_raw" /> <remap from="camera_info" to="/camera_left/depth/camera_info" /> <remap from="scan" to="/scan_left" /> </node> <node pkg="depthimage_to_laserscan" type="depthimage_to_laserscan" name="depthimage_to_laserscan_right" > <param name="output_frame_id" value="scan_right_link"/> <remap from="image" to="/camera_right/depth/image_raw" /> <remap from="camera_info" to="/camera_right/depth/camera_info" /> <remap from="scan" to="/scan_right" /> </node>
複数のscanトピックを統合する方法については下記記事を参考にしてください。
laserscan_multi_mergerは、ira_laser_toolsというパッケージに含まれる、複数のスキャントピックをマージしてくれるノードです。 複数のスキャントピックがある際に1つのスキャントピックに合わせてくれるのでとても便利です。マップ生成時など1つのスキャントピックだけサブスクライブしているノードに渡す時に最適です。 私はデプスカメラを複数方向に設置し、depthimage_to_laserscanでそれぞれの深度センサの画像をスキャントピックに変換した後にlaserscan_multi_mergerで1つのスキャントピックに変換して、それをgmappingに渡してマップを生成などをしています。