はじめに
■ROSとGazeboによる自律移動シミュレーション
1.モデル作成
2.SLAMアルゴリズムの比較の導入
3.SLAMの実装 ← 今ココ
前回はSLAMアルゴリズムの比較を行いました。なので今回は実際にSLAMを実装してシミュレーションと実機上で動かしてみたいと思います。
今回用いるSLAMライブラリは以下にしようと思います。
SLAMライブラリ | 採用理由 |
---|---|
Google Cartographer | 前回の比較動画より、マッピングと自己位置推定の精度が良いように感じられたから。また、個人的にGraph-basedアルゴリズムを使ってみたいというのもあります。 |
導入環境
- OS:Ubuntu 16.04
- ROSバージョン:Kinetic
- ロボットシミュレータ:Gazebo
ROSパッケージ
SLAMを実装するに当たり、以下のROSパッケージを作成しました。
SLAM-Robot_Codeパッケージには以下のサブパッケージが含まれます!
サブパッケージ | 用途 |
---|---|
slambot_controller | SLAMロボット実機のコントローラー |
slambot_description | SLAMロボットモデルの描写 |
slambot_gazebo | gazeboでのシミュレーション |
slambot_navigation | ナビゲーション(パス・プランニング等) |
slambot_sensing | センサ起動 |
slambot_slam | SLAM実行 |
slambot_teleop | テレ・オペレーション用 (PS4コントローラ、キーボード) |
実行方法
デプス・カメラで障害物を認識しつつ、SLAMで自己位置推定しながら障害物を回避する動作をシミュレーションと実機で動かしてみました。
①シミュレーションの場合
<実行手順>
以下3つのlaunchを実行する。
$ roslaunch slambot_gazebo vehicle_controller_sim.launch
→ gazeboシミュレータ起動(車輪制御、デプス・カメラ)
$ roslaunch slambot_navigation navigation_without_map.launch
→ SLAM起動
$ roslaunch slambot_navigation user_interface.launch
→ Rviz起動(ユーザーによるゴールの設定が可能)
全てのlaunchを起動すると以下のようなノードグラフとなります。
<実行結果>
(画像をクリックするとYouTubeへジャンプします。)
②実機の場合
<実行手順>
以下4つのlaunchを実行する。
$ roslaunch slambot_controller vehicle_controller_node
→ 車体(車輪)制御起動
$ roslaunch slambot_sensing xtion_pro_live.launch
→ デプス・カメラ起動
$ roslaunch slambot_navigation navigation_without_map.launch
→ SLAM起動
$ roslaunch slambot_navigation user_interface.launch
→ Rviz起動(ユーザーによるゴールの設定が可能)
全てのlaunchを起動すると以下のようなノードグラフとなります。
<実行結果>
(画像をクリックするとYouTubeへジャンプします。)
※動画ではホイールが車体の中心に取り付けられていますが、現在は車体前方に取り付けられています。
さいごに
いかがでしたでしょうか?
シミュレーション、実機共に見事障害物を避けて目標地点に到達することができました。
今回、SLAMアルゴリズムとしてGoogle Cartographerを用いましたが、次回以降はgmappingや他のアルゴリズムも試してみたいと思います。
余談ですが、私の開発アプローチとしてまずはシミュレーションで狙い通りの動作をすることを確認した後に、実機で動作確認を行ってます。
このアプローチ方法の利点として、不確定要素の多い実機で動作確認するよりモデル上で動作確認した方が不具合の発見が容易になる利点があります。
皆さんも是非お試しください(^^)v
でも、今回作成したモデルのパラメータは結構適当なのであしからず!