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
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
ボタンを押し、地図上の任意の場所をクリックする。

rostopic echo /clicked_point
を実行したターミナル上にクリックした場所の座標が表示される。この情報のx
とy
を使えば良い。
$ 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