##目的
LidarからのTopic:sensor_msgs/LaserScanに対応している車輪ロボット向けのROSの2D/3D-SLAMパッケージをまとめた。Lidar単体では、原理上3DOF(X方向・Y方向・θ方向)姿勢までしか検出できないが、パッケージによっては、Lidar+IMU or Lidar+回転雲台を使って、6DOF(X方向・Y方向・θ方向)姿勢を検出できるものもある。
これ以外にもROSにはSLAMパッケージがあるが、個人的に使ったことあるものを記載。
##一覧
名前 | 作者 | アルゴリズム | loop closure | DOF(検出姿勢の自由度) | 補足 |
---|---|---|---|---|---|
Gmapping | フライブルク大学, サピエンツァ大学,チューリッヒ工科大学 | Rao-Blackwell定理を用いた Particle Filter | 有 | 3DOF(Odom+Lidar) | 最もメジャー |
Hector SLAM | ダルムシュタット工科大学 | Scan-Matching +拡張カルマンフィルタ | 無 | 3DOF(Lidar) 6DOF(IMU+Lidar) | RoboCup 2011向けに開発・odometoryフリー動作可 |
Karto SLAM | SRI International | Graph-based SLAM | 有 | 3DOF(Odom+Lidar) | |
Google Cartographer | Graph-based SLAM | 有 | 3DOF(Lidar) 6DOF(IMU+Lidar) | odometoryフリー動作可・現時点OpenSourceの2D-SLAMではロバスト性最も良い?(2017/5) | |
Ethzasl icp mapping | チューリッヒ工科大学 | ICP-based SLAM | 無 | 3DOF(Lidar) 6DOF(RDB-D Camera/3D-Lidar) |
上記のモジュールはROS上の互換性であり、
map→odom→base_footprint→base_link→base_scanのtfを発行していれば、
下記のlaunchファイルを使って呼び出すことで、map topicを発行することができる。
##動作確認環境
Ubuntu16.04 (x64)
ROS Kinetic
###・Gmapping
Improved Techniques for Grid Mapping with Rao-Blackwellized Particle Filters
http://www.openslam.org/gmapping
ROSWiki: http://wiki.ros.org/gmapping
Github: https://github.com/ros-perception/slam_gmapping
Install:
$ sudo apt-get install ros-kinetic-gmapping
Launch:
<?xml version="1.0"?>
<launch>
<node pkg="gmapping" type="slam_gmapping" name="kobuki_slam_gmapping" output="screen">
<remap from="scan" to="scan"/>
<param name="base_frame" value="base_footprint"/>
<param name="odom_frame" value="odom"/>
</node>
</launch>
###・Hector SLAM
A Flexible and Scalable SLAM System with Full 3D Motion Estimation
ROSWiki: http://wiki.ros.org/hector_slam
Github: https://github.com/tu-darmstadt-ros-pkg/hector_slam
Install:
$ sudo apt-get install ros-indigo-hector-*
Launch:
<?xml version="1.0"?>
<launch>
<param name="pub_map_odom_transform" value="true"/>
<param name="map_frame" value="map"/>
<param name="base_frame" value="base_frame"/>
<param name="odom_frame" value="odom"/>
<node pkg="tf" type="static_transform_publisher" name="map_2_odom" args="0 0 0 0 0 0 /map /odom 100"/>
<node pkg="tf" type="static_transform_publisher" name="base_link_2_base_stabilized_link" args="0 0 0 0 0 0 /base_link /_base_stabilized 100"/>
<node pkg="tf" type="static_transform_publisher" name="base_stablized_2_base_frame" args="0 0 0 0 0 0 /_base_stabilized /base_frame 100"/>
<node pkg="tf" type="static_transform_publisher" name="base_2_nav_link" args="0 0 0 0 0 0 /base_frame /nav 100"/>
<include file="$(find hector_slam_example)/launch/default_mapping.launch"/>
<include file="$(find hector_geotiff)/launch/geotiff_mapper.launch"/>
</launch>
###・Karto SLAM
kartorobotics: https://www.kartorobotics.com/
ROSwiki: http://wiki.ros.org/karto
Github: https://github.com/ros-perception/open_karto
Install:
$ sudo apt-get install ros-indigo-open-karto
$ sudo apt-get install ros-indigo-slam-karto
Launch:
<?xml version="1.0"?>
<launch>
<node pkg="slam_karto" type="slam_karto" name="slam_karto" output="screen">
<remap from="scan" to="scan"/>
</launch>
###・Google Cartographer
Real-Time Loop Closure in 2D LIDAR SLAM
https://google-cartographer.readthedocs.io/en/latest/
Github: https://github.com/googlecartographer/cartographer
Install:
###・Ethzasl icp mapping
チューリッヒ工科大が公開している、ROSのICPのSLAMモジュール。
RGB-Dカメラ・3D-Lidarからの3Dのポイントクラウド入力を前提としているが、Lidarでも動作可能。
やや古く、最新のROS環境でコンパイル通すには手間がかかる。
WillowGarage Blog: Real-Time Modular 3D Mapping
ethz-asl/ethzasl_icp_mapping Github
ROS WIKI ethzasl_icp_mapping
Install:
参考資料:
RPLidar For ROS Based SLAM and Navigation/SLAMTEC
An Evaluation of 2D SLAM Techniques Available in Robot Operating System
An Evaluation of 2D SLAM Techniques Available in Robot Operating System (ROS)