2DレーザーのみでGoogle Cartographer rosを動かして地図を作る(デプスカメラでも可)


二次元のCartographer_rosをレーザのみで動かし、地図を作りました。

Cartographer_rosはgoogleが公開しているオープンソースのSLAMパッケージのrosラッパーです。

レーザー用のSLAMでループクロージャーができてるパッケージは貴重で、有名なgmappingは明示的にループが閉じないので屋外などの大規模環境で地図がずれるって人は使ってみたらよいと思います。
2DではIMU・オドメトリが不要なのもポイント高いです。ただし、3DはIMUが必須です。
ちなみにdepthimage_to_laserscanを使えば,デプスカメラでもできます.

ビルド時の注意

チュートリ通りに既存のcatkin_wsでビルドするとビルドできなかった時の対処が非常に面倒くさいので,google_wsと言った名前のcartographer専用のワークスペースを作ったほうがよいと思います.

編集したところ 

1.レーザースキャンの型の設定

デフォルトではMultiEchoLaserScan型を読み込む設定なので、使用機器にあったLaserScan型に変更しました。ちなみにPointCloud2型も設定かえれば読み込めます。

cartographer_ros/cartographer_ros/configuration_files/backpack_2d.lua

options = {
・・・
num_laser_scans = 1,-- <--default:0
num_multi_echo_laser_scans = 0,-- <--default:1
num_subdivisions_per_laser_scan = 10,
num_point_clouds = 0,--<--if pc2 is used,set 1
・・・
}

2.IMUの設定

デフォルトではimuの入力が必要だったので、imuの設定を切りました。

cartographer/configuration_files/trajectory_builder_2d.lua

TRAJECTORY_BUILDER_2D = {
use_imu_data = false,-- <--default:true
・・・

}

launch起動時の注意

パラメータを設定したら、またビルドしないとパラメータが反映されないので注意して下さい.

実行

scanデータをpubishするノードとcartographerのbackpack_2d.launchを立ち上げ

できた地図


map_serverのmap_saverで地図をpgm形式で保存もできます。

結果

簡単に地図ができる!