Google Cartographer 導入
Closed this issue · 17 comments
得られた知見とかをまとめるのに READMEに追記するのは違うかなと思って
それ用の Issue を立てることにしました
タスクの洗い出しができたら Projects の方に移行してもいいかなって思います
fifth_robot & cartographer
困ったこと・わからないことがあったら また別個で
Issue もしくは Projectsの方に書いてください。
使用方法
Edit Required
参考文献
公式ドキュメント
- Cartographer (TOP)
- Cartographer_ROS (TOP)
- Cartographer_ROS (ROS API)
- Cartographer (configuration)
- Cartographer_ROS (configuration)
- read_the_docs (Cartographer)
- read_the_docs (Cartographer_ROS)
Github
- googlecartographer/cartographer
- googlecartographer/cartographer_ros
- takuyani/SLAM-Robot_Code
- ros-japan-users/cartographer_example
- PINTO0309/zumo32u4 ← New !!
Qiita
- GoogleのCartographerをシミュレーターで使いたいだけの人生だった[失敗談]
- Google Cartographer でSLAMデータを保存する
- RaspberryPi3と(中略)_009日目_SLAM_Google Cartographer_LiDAR(A1M8)
- RaspberryPi3と(中略)_015日目_SLAM_自律走行の前準備_CartoGrapherによる自宅の地図作成
- ROSとGazeboによる自律移動シミュレーション 〜SLAMの実装〜
- ROS31:Cartographerを動かすまで
- ROS32:cartgrapher(2D)のデータを保存、再生する。
- ROS33:cartgrapher(3D)を動かす。
Tips
takuyani/SLAM-Robot_Codeのビルド方法
先駆者様のリポジトリからいろいろと探ろうと思います
リポジトリそのものがsrc内にあるべきファイル群なので次のような手順を踏みます
1.
mkdir slambot_ws ;cd slambot_ws
2.
git clone git@github.com:takuyani/SLAM-Robot_Code.git src ;cd src
3.
catkin_init_workspace ;cd ../
4.
catkin_make
これでビルドは通ります。
offline_cartographer を使ってみた(odom 不使用)
commit ID
ec5e1263cc278ccab4c968f6bf5197ef2b71918f
手順
-
おもむろに
roslaunch fifth_robot_description teleop_keyboard.launch
-
bagfile を録る
デモ用の bagfile で使ってそうだったのが
clock とimu と pointcloud2 のトピックしかなかったのでそれを参考にrosbag record /points2 /clock /imu
-
offline_cartographer を起動
roslaunch fifth_robot_description offline_cartographer.launch bagfile:=<2で録ったbagfile>
結果
こ れ は ひ ど い
地図の概形っぽいのは見えるんだけどなあ
imuが悪さしてるのかしら
上の再現方法
commit ID
94ce3028821610df0b14038d960f16f94da51b8e
-
シミュレーション環境を立ち上げる
roslaunch fifth_robot_description teleop_keyboard.launch enable_rviz:=false
-
bagfile を録る
roslaunch fifth_robot_description bag_recorder.launch
-
シミュレーション環境で適当に走らせる
-
bag を録り終えたら、imu のフィルタリングと odom のremap をする
(もっと賢いやり方にするつもり)
roslaunch fifth_robot_description bag_player.launch bagfile:=<bagfile_name.bag>
rosbag record --all -O filtered_bagfile.bag
-
offline_cartographer_node でマッピング
roslaunch fifth_robot_description offline_cartographer.launch bagfile:=filtered_bagfile.bag
-
filtered_bagfile.bag と同じディレクトリにそれらしきものができているかと思います。
plyファイルは3次元点群を表現するためのものです -
assets_writer を走らせる。点群がなめらかになっているのはわかるけど、
実際何やってるかは微妙にわかんない。本来 *.pbstream ファイルができているはずなんだけど
何らかの不具合で *.pb ファイルしかできていない
Extracting trajectory/poses #332
roslaunch fifth_robot_description assets_writer.launch bagfile:=/home/tanacchi/filtered_bagfile.bag pbfile:=/home/tanacchi/filtered_bagfile.bag.pb
↑複数行に渡ってるように見えるけどトリプルクリックで全選択できます
この時点で、地図の出来がパラメータ次第で全く異なることが分かった
imu のフィルタリングは依然として必要
で、実際にnavigation させる時にどうやって使うの?っていうところが今後の課題
先駆者様たちの launch ファイルから見様見真似で動かしてみます
自分が次に動けるのは 9/7(金) 以降になります
Thanks a lot for your summary.
Cartographer を使う際は、きちんと公式にある手順を踏んでインストールしてください。
apt
でも入ってしまってしかも微妙に動いちゃうから気づくのが遅れてしまった
可能性として出てきたのが、
Cartographer は既知の地図を元に navigation するのに適していないということ
cartographer_node 等で pbstream ファイル(3次元地図および自己位置データ)を
生成することに成功したものの
それを読み込んで 自己位置推定 をするという機能が見当たらない
cartographer によって、従来でいう map とwaypoint の生成は可能かもしれないが
実際に navigation する際には amcl と move_base を使うことになりそう
amcl がLaserScan (2D情報)を取得するため
結局は PointCloud2(3D) から LaserScan(2D) への変換を噛ませることになるかもしれない
幸い、変換の際に利用する pointcloud_to_laserscan_node が、
”3次元で見た時の輪郭を2次元に落としこむ”ような処理をしてくれているため
3DLiDAR の恩恵を全く受けられないというわけではなさそうだ。
(白:LaserScan その他:PointCloud2)
今後のアプローチとしては、
- Cartographer で「マップ情報とセンサ情報から自己位置推定をする」機能を探してみる
- -load_state_filename というオプションで pbstream ファイルを読み込める
- Cartographer に加え、新たに 3d_navigationというパッケージを利用してみる
- cartographer_pbstream_to_ros_map で GridMap を生成し、その後は従来通りの手法をとる
- GridMap の生成には成功している
の3パターンが考えられる
確実性を重視して、3 → 2 → 1 の順番で手を付けたいと思う
いずれの手段となっても、3D LiDAR の意味は十分にある
It should be perfect on condition that it's written in English, or the others have to employ google translation :)