Closed tanacchi closed 5 years ago
先駆者様のリポジトリからいろいろと探ろうと思います リポジトリそのものがsrc内にあるべきファイル群なので次のような手順を踏みます
mkdir slambot_ws ;cd slambot_ws
git clone git@github.com:takuyani/SLAM-Robot_Code.git src ;cd src
catkin_init_workspace ;cd ../
catkin_make
これでビルドは通ります。
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
b37d3c05634abe79ff2c97a90807d306332acc02
手順は上とだいたい同じ *横から見た図
? ? ? odomを受け取るようにしただけでも だいぶマシにはなったっぽい やっぱりimuのせいなのか?
上:直進のみ 下:カーブのみ
上からだときれいに見えなくもないが、横から見るとなかなかひどい やはり imu のキャリブレーションかフィルタリングが必要かと
シミュレータが重たいので、imu のデータが飛んでるからこうなってるのかと思い points2 の数を減らしたり、imu の update_rate を上げてみたり、切り返しをゆっくりにしてみたりしたけど変化なし
切り返しの数だけ跳んでるからimuなんだろうな
imu データの内、roll と pitch の回転角速度をフィルタリングした
やっとまともなのができた ] ↑上から見た図 ↑横から見た図 実機のセンサを使ったらまた変わるのかもしれない
根本的な解決のためには urdf をもう少し厳密に書かなきゃいけないのかもしれない
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)
今後のアプローチとしては、
の3パターンが考えられる
確実性を重視して、3 → 2 → 1 の順番で手を付けたいと思う
いずれの手段となっても、3D LiDAR の意味は十分にある
PointCloud2 -> LaserScan の変換をしたうえで gmapping で地図を作りました。
こっちのほうがキレイじゃねえか
今までの、経路上にできる謎空間はなくなった。
調べてみたところ、pcl(point cloud library)で位置補正し、 move_baseと連携して navigation するみたいなパッケージがあるので それも調べてみます
今回の Google Cartographer の研究の集大成です。 汚そうで実はかなりキレイなんですコレ マップの輪郭はそう見えますが。
つくチャに向けての開発にあたって、導入は難しいということで 一旦 Google Cartographer の方はこれにて切り上げることにします。
もしここから waypoint 的なものが取り出せることがわかれば、 再始動します
It should be perfect on condition that it's written in English, or the others have to employ google translation :)
得られた知見とかをまとめるのに READMEに追記するのは違うかなと思って それ用の Issue を立てることにしました タスクの洗い出しができたら Projects の方に移行してもいいかなって思います
fifth_robot & cartographer
困ったこと・わからないことがあったら また別個で Issue もしくは Projectsの方に書いてください。
使用方法
Edit Required
参考文献
公式ドキュメント
Github
Qiita
Tips