View on GitHub

ROSを使用した移動ロボットのナビゲーション

日本ロボット学会 第131回 ロボットの作り方セミナー

マップを利用したナビゲージョン操作2

下記の実習を行うために、まずROS_MASTER_URIROS_HOSTNAMElocalhostをリモートPCのIPアドレスに変更します。(参照)。

実機でナビゲーションノードを行う

リモートPCで roscoreを実行する。

1
$ roscore

新しいターミナルウィンドウを開き、TurtleBotと接続します。

1
  ssh pi@192.168.xxx.xxx (The IP 192.168.xxx.xxx is your Raspberry Pi’s IP or hostname)

パスワードはturtlebotです。

下記のような表示があれば接続が成功しました。

1
2
3
4
5
6
7
username@pc_name:~$ ssh pi@192.168.10.11
turtlebot@192.168.10.11’s password:

...

Last login: [曜日] [月] [日] XX:XX:XX 2021 from 192.168.XX.XX
turtlebot@turtlebot:~$
1
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch

新しいターミナルを開き、ナビゲーションファイルを起動します。

1
$ roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml

初期ポーズを推定する

まずロボットの初期姿勢推定を実行する必要があります。 RVizのメニューで2D Pose Estimateを押すと、非常に大きな緑色の矢印が表示されます。 所定のマップで実際のロボットが配置されているポーズに移動し、マウスの左ボタンを押したまま緑色の矢印をロボットの正面が向いている方向にドラッグし、以下の手順に従います。

次に、turtlebot3_teleop_keyboardノードなどのツールを使用してロボットを前後に動かし、周囲の環境情報を収集して、ロボットが現在地図上のどこにあるかを調べます。

1
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

このプロセスが完了すると、ロボットは緑色の矢印で指定された位置と方向を初期ポーズとして使用して、実際の位置と方向を推定します。 すべての緑色の矢印は、TurtleBot3の予想される位置を表しています。 レーザースキャナーは、地図上に壁のおおよその図を描画します。 図面に図が正しく表示されない場合は、上の2D Pose Estimateボタンをクリックして、TurtleBot3のローカライズを繰り返します。

注意: Estimate InitialPoseに使用されるturtlebot3_teleop_keyboardノードは、使用後に終了する必要があります。 そうしない場合はトピックが次のステップのナビゲーションノードの/cmd_velトピックと重複するため、ロボットは奇妙な動作をします。

ナビゲーション目標の送信

すべての準備ができたらナビゲーションGUIからmoveコマンドを試してみましょう。 RVizのメニューで2D Nav Goalを押すと、非常に大きな緑色の矢印が表示されます。 この緑色の矢印は、ロボットの宛先を指定できるマーカーです。 矢印のルートはロボットのxyの位置であり、矢印が指す方向はロボットのtheta方向です。 ロボットが移動する位置でこの矢印をクリックし、ドラッグして以下の手順のように方向を設定します。

ロボットは、地図に基づいて目的地への障害物を回避するためのパスを作成します。 次に、ロボットはパスに沿って移動します。 この時、いきなり障害物を検知しても障害物を避けて目標点に移動します。

ゴール位置へのパスを作成できない場合、ゴール位置の設定に失敗することがあります。 ロボットが目標位置に到達する前に停止したい場合は、TurtleBot3の現在の位置を目標位置として設定します。

参考文献