navigation_action_server - KMiyawaki/tokuron GitHub Wiki

ROS navigation の Action Server を使う

Home


move_base にコマンドを送る

  • move_baseは ROS Navigation メタパッケージの全体 ( SLAM 以外) を束ねるものである。
    • move_base
    • 現状でも/cmd_velに速度をパブリッシュすればロボットを動かせる。しかし今やりたいのは、move_baseが持つ、大域的・局所的な経路計画と障害物回避機能である。

ロボットローカル座標系での目標指定による移動

  • スクリプトを格納するディレクトリを作る
cd
cd catkin_ws/src/navigation_test
mkdir scripts
  • 作成したscriptsに下記ファイルをダウンロード
  • Stage Simulator と ROS(1)に従ってnavigation.launchを起動し、自己位置推定しておく。
    • おおよその位置で良いので、自己位置推定しておかないと直進しない。
  • 新しいターミナルを開いてスクリプトを実行する。
rosrun navigation_test simple_navigation_local_goals.py
  • ロボットは少し(1メートル)進んで停止する。停止したら、すべてのターミナルでCtrl+Cによりプログラムを終了させる。

マップ座標系での目標指定による移動

  • スクリプトを別名でコピーし編集する。
roscd navigation_test/scripts
cp simple_navigation_local_goals.py simple_navigation_global_goals.py
  • 編集箇所は次の通り
coord_type = "base_link" # ロボットローカル座標系
を
coord_type = "map" # マップ座標系
にして、
goal.target_pose.pose.position.x = 5.5 (x 座標変更)
goal.target_pose.pose.position.y = 1.2 (y 座標追記)
goal.target_pose.pose.orientation.w = 1.0
  • Stage Simulator と ROS(1)に従ってnavigation.launchを起動し、自己位置推定しておく。
  • 新しいターミナルを開いてスクリプトを実行する。
rosrun navigation_test simple_navigation_global_goals.py

マップ上の座標の調べ方

  • スクリプトでマップ上の特定の場所にロボットをナビゲーションさせる際に、ゴールの座標が必要となる。
  • RViz のPublish Pointボタンで座標を調べることができる。
  • navigation.launchを起動していないなら、Stage Simulator と ROS(1)に従ってnavigation.launchを起動しておく。
  • 新しいターミナルを開いて下記コマンドを実行する。
rostopic echo /clicked_point
  • RViz 上でPublish Pointボタンを押し、地図上の任意の場所をクリックする。

Screenshot from 2018-11-10 17-12-28.png

  • rostopic echo /clicked_pointを実行したターミナル上にクリックした場所の座標が表示される。この情報のxyを使えば良い。
$ rostopic echo /clicked_point
WARNING: no messages received and simulated time is active.
Is /clock being published?
header:
  seq: 4
  stamp:
    secs: 491
    nsecs: 500000000
  frame_id: "map"
point:
  x: 17.6272621155
  y: -0.0404167175293
  z: -0.00174522399902
---

課題

  • 任意の目標地点を数個(4点以上)地図上に設定し、それらを順番に回っていくプログラムを作成しなさい。
    • このように最終目的地に至るまでのサブゴールをウェイポイントと呼びます。
    • 本来、ウェイポイントで停止して欲しくはないですが、現状では止まってしまう問題があります。
  • 最終的には2号館のフロア(現在シミュレーションで使っている地図)全体(エレベータホール含む)を1周させなさい。

参考


Home