はじめに
ROS2(ROS dashing)で『SLAM入門』のLittleSLAMを動かすラッパーを書きました。スキャンデータのみで動かせます。
ROS2とは
下記のスライドがわかりやすいです。
次世代ロボット フレームワーク ROS2の紹介 - SWEST
Getting Started with ROS 2 / DDS
ROS2のチュートリアルはこちらからどうぞ。
ROS Japan ユーザグループ 講習会 ~ ROS 2 の紹介 ~
Qiita ROS2導入&レクチャー
LittleSLAMとは
LittleSLAMは『SLAM入門』の教材として作られた2D-SLAMのプログラムです。
LittleSLAMはICP-スキャンマッチングによるLocal SLAMとグラフベースSLAMによるGlobal SLAMによって成り立っています。
スキャンマッチングに関しては以下のスライドを読めばわかると思います。
Scan Matching 自己位置推定手法
LiDAR-SLAM チュートリアル資料
SLAMに関しては以下の解説論文に詳しく書いてあります。
[移動ロボットの環境認識 —地図構築と自己位置推定]
(https://www.jstage.jst.go.jp/article/isciesci/60/12/60_509/_pdf)
LittleSLAMのプログラムの詳細はリンク先と『SLAM入門』を参照ください。
IO
subscriber
- sensor_msgs::msg::LaserScan ("scan")
- odom (tfの"base_link"->"odom")(optional,with use_odom:=true)
(コマンドからパラメーターuse_odomを渡すのがまだできてないので、そのうちします…。このリポジトリやこのQ&Aを参考にすれば良いっぽい?)
publisher
- sensor_msgs::msg::PointCloud2 ("icp_map")
- nav_msgs::msg::Path ("path")
- nav_msgs::msg::PoseStamped ("current_pose")
結果
データはros.orgのIntroduction to Working With Laser Scanner Dataにある以下のデータros2用に変換して使いました。
コード置き場
参考
友納 正裕,『SLAM入門』
LittleSLAM
little_slam
rosjp_ros2_basics
test_repo
How to set up tfbuffer clock in ROS 2 so it works with sim time?
lookupTransform - builtin_interfaces/Time to tf2::TimePoint?