ROS
SLAM
Gazebo

ROSとGazeboによる自律移動シミュレーション 〜モデル作成〜

はじめに

前回までは主に自己位置推定アルゴリズムの動作確認を行ってきました。

なので今回からは少しROSのシミュレータを使って自律移動ロボットを動かしていきたいと思います。

Gazeboシミュレータ

Gazeboはオープンソースで使用可能なロボットアプリケーション開発のための動力学シミュレータです。Gazeboについての詳細は以下の記事が参考になると思いますので、ここでは割愛します。

モデルとなるロボット

今回シミュレータで作成したいロボットはこれです。
vehicle1

これは私がSLAM開発用に作った簡素な対向2輪型移動ロボットです。
作り方は私のGitHubに載せているので参考にしてみてください。

ちなみに、画像を見ていただくとわかると思いますが、センサはまだ何も取り付けていません(笑)

ロボットモデルの作成

以下のサイトを参考にして作成してみました。
- ROSで始めるロボティクス
- Gazebo + ROS で自分だけのロボットをつくる
- ロボット記述言語

センサはASUSのXtion Pro Liveを取り付けてみました。

※Xtion Pro Live
ASUS製のRGBDセンサの名称。RGBのカラー画像と距離(Depth)情報が取得できるセンサです。
現在、Xtion Pro Liveは生産終了となっており、後継のXtion 2が販売されているみたいです。

車体はURDFで作成しXtion Pro LiveはGitHub上で先駆者が作成したものを流用させていただきました。
Gazeboを使うとセンサの動作までシミュレーションすることができます。
例えば、今回使用するXtion Pro Liveのモデルでは、モデル環境内のカラー画像と距離情報が取得できます。
もちろん、車体も制御することが可能で、並進速度[m/s]と回転速度[rad/s]を与えることでモデル環境内で動きまわることができます。
この車体の制御にはros_controlというものを使用します。
ros_controlについては以下の記事に詳しく書かれています。

実際に私もros_controlを使用してみたのですが、かなり奥が深いです。なのでひとまず、先駆者達が作成したものをそのまま使用してみることにしました。

試行錯誤の末、作成されたモデルはGazeboとRvizで描写できるようになりました。

<Gazebo>
slambot_model_04
slambot_model_01
slambot_model_05

<Rviz>
slambot_model_03
slambot_model_02

今回作成したパッケージはGitHubに上げています。

  • SLAM-Robot_Code/slambot_sim/slambot_description
    • config
      • controller.yaml ・・・ joint_state_controllerとdiff_drive_controllerのパラメータ設定ファイル
    • launch ・・・ launchファイル
    • src ・・・ ソースコード
    • urdf ・・・ URDF形式のロボット記述ファイルが含まれています
    • world ・・・ Willow Garage社オフィスの仮想3次元空間。Gazeboで使用。

実行には以下のlaunchファイルを起動します。

  • gazebo.launch ・・・ gazeboシミュレータ起動用(gazebo起動)
  • display.launch ・・・ シミュレーション結果の可視化用(Rviz起動)

※上記の画像ではカフェのような空間が表示されていますが、現在はWillow Garage社オフィスが表示されるようになってます。

上記2つのlaunchを起動後、「/slambot_host/cmd_vel」に並進・回転速度コマンドを与えるとモデルのロボットが動き出します。この「/slambot_host/cmd_vel」へPublishするためのノードももちろん作成しています。今回はキーボード操作とPS4のコントローラでの操作用の2つのノードを作成しました。パッケージはvehicle_teleopになります。詳しい仕様方法は同パッケージ内のREADME.mdを参照してください。

作成したロボットモデルを動かしてみよう!

実際に作成したモデルを動かしてみます。
(画像をクリックするとYouTubeへジャンプします。)
robot_model

さいごに

なんとかモデルのロボットをシミュレータ内で動かせるようになったので、次回は本格的にSLAMのシミュレーションを行っていこうと思います。