2021-07-14 11:00
前回の「ROS2でSLAM入門1:ROS2インストールからマップ作成編」で、ROS2のインストールから、SLAMのサンプルを動かして、地図を作成しました。
今回は、作成した地図を用いた自律移動ロボットのシミュレーションを試してみたいと思います。 前回同様、ROS2+シミュレータ(Gazebo)を使用していきます。
ロボットを好きな場所に移動させるには「SLAM」と「自律移動(ナビゲーション)」という技術が必要です。SLAMは環境内でのロボット位置姿勢を求めるもので、 自律移動は経路計算・経路追従・障害物回避などを行いながらロボットを目的地まで導く技術です。
前回作成した地図を活用して、自律移動のシミュレーションを行ってみます。
準備
前回の内容を全て実行して、ROS2+シミュレータ(Gazebo)の環境を構築してください。
ホームディレクトリ(フォルダ)が以下の図のような構成となっていればOKです。
自律移動のサンプル実行
シミュレータ起動
それではシミュレーションを進めて行きます。ターミナル上でコマンドを実行してシミュレータを立ち上げてください。
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
自律移動アプリ起動
別ターミナル上にて、以下のコマンドを実行してください。
このコマンドでは、ホームディレクトリにあるmap.yamlを引数として自律移動をアプリを立ち上げています。この時、写真右側のようにRviz2も立ち上がればOKです。Rviz2の中には地図がロードされています。
$ ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map.yaml
初期位置を与える
ロボットは、最初自分が地図上のどこにいるのかを知りません。そこで、Rviz2のGUIを使用して、初期位置を与えます。
Rviz2上の「2D Pose Estimate」ボタンをクリックしたら、シミュレータ上の位置(実機では現実位置)を参考にして、Rviz2の地図上で正しいと思われる位置でドラッグドロップします。(ドラッグ中は矢印でロボットの向きを指定出来ます)
初期位置が与えられると地図上に紫のエリアが出現します。これはコストマップと呼ばれるもので、壁の近くなどは高コストになります。
自律移動アプリは出来るだけ高コストな場所を避ける(≒壁に接触しない)ようにして、経路を生成します。
目的地を指定する
いよいよロボットが動きます。
Rviz2上の「Navigation2 Goal」ボタンをクリックしたら、地図上のロボットを向かわせたい位置でドラッグドロップします。(ドラッグ中は矢印でロボットの向きを指定出来ます)
ロボットが移動します。この時、ロボットと指定した目的地の間には生成された走行予定経路が表示されています。
終了
各コマンドを実行したターミナル上でCtrl+cキーを押下して、アプリ停止させてください。
まとめ
ROS2+シミュレータ(Gazebo)で、SLAMと自律移動のサンプルを動かしました。 ロボットの移動に必要なSLAM+自律移動の雰囲気が掴めたのではないでしょうか。
この後は、障害物を増やしてみたり、ロボットを強制移動させるなどの外乱を与えて、 SLAMのポテンシャルや限界を探ってみると面白いかもしれませんね。
宣伝
ROS/ROS2を使うと自律移動型ロボットのソフトは意外と簡単に動きます。ただ、これを実運用で安定稼働させるには、ソフト以外に電気や機械など様々なノウハウが必要となります。 テクノロードではロボットハードの開発からソフトやクラウドまで一括して開発を請け負うことが可能ですので、お気軽にご相談ください。 ROSを扱った開発事例はこちらをご覧ください。