【自律ロボット製作記】#12 move_baseでコストマップと経路計画を見直す
どうもこんにちは、今回はROSのmove_baseパッケージについて書きたいと思います。
私のロボットの場合、move_baseを使用して目的地を指定すると、壁にぶつかったり障害物があるのに直進したりと、全然障害物回避してくれていません。。。
(move_baseのパラメータは色々多くて、ずっと放置してました。。)
そこで、今回はちゃんとmove_baseを動かすために、色々パラメータを調整してみました。
move_baseの構成
move_baseパッケージは、目的地(”move_base_simple/goal”)を指定すると、事前の地図情報、センサー情報等をもとに、最適な経路を算出して、速度指示(cmd_vel)を出力してくれるというものです。
move_baseには、経路計画(global_planner,local_planner)とコストマップ(global_costmap,local_costmap)があります。
グローバルコストマップ、グローバルプランナーは、事前に得られた地図などの情報をもとにコストを割り振り経路を決定します。
一方、ローカルプランナー、ローカルコストマップは、スキャン情報などをもとにリアルタイムにコストを割り振り経路を決定するものです。
私の場合、rvizでデバッグしてもローカルコストマップが全然表示されていませんでした。
ということで、ローカルコストマップ中心にパラメータを見直しました。
※move_baseの概要等は以下のサイトが大変参考になりました。ありがとうございました。
Navigation Stack を理解する – 2.2 move_base: ソフトウェア構成をみる
パラメータで重要だったこと
今回、costmap_common_params.yamlを以下の様に設定しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
footprint: [[0.10, 0.10], [-0.02, 0.10], [-0.02, -0.10], [0.10, -0.10]] obstacle_layer: enabled: true max_obstacle_height: 0.6 combination_method: 1 track_unknown_space: true obstacle_range: 1.5 #0.3 #1.0 #0.5 #2.5 raytrace_range: 2.0 #1.0 #1.5 #1.0 #3.0 observation_sources: scan #scan_filtered scan: data_type: LaserScan topic: /scan marking: true clearing: true min_obstacle_height: 0 max_obstacle_height: 5 inflation_layer: enabled: true cost_scaling_factor: 5.0 inflation_radius: 0.1 #0.5 static_layer: enabled: true |
特に重要だったパラメータが、
上記をいい塩梅で調整しないと、目的地(ゴール)までなかなかたどり着けません。(その代わり壁に衝突することはない)
とりあえず、私のロボットでは今回の設定にしましたが、ロボットや環境毎に調整が必須でしょう。
動画
今回設定したパラメータで動作させた動画です。
今まで、壁にぶつかったりしていましたが、ちゃんと壁などを回避して進んでくれるようになりました。
最後に
今までほったらかしにしていたmove_baseのパラメータ、これが最適解じゃないかもしれませんが、ようやく設定できました。
それにしても、move_baseやamclなどパラメータが多すぎて調整が難しいですね。
様々なロボットや環境に簡単に適用できるようにパラメータをいかに効率的に設定するかは今後の課題です。
色々検討してみたいと思います。
それでは!!
スポンサーリンク