ロボット研究開発、ソフトウェア開発、コンテンツ制作配信

【自律ロボット製作記】#12 move_baseでコストマップと経路計画を見直す

どうもこんにちは、今回はROSのmove_baseパッケージについて書きたいと思います。

私のロボットの場合、move_baseを使用して目的地を指定すると、壁にぶつかったり障害物があるのに直進したりと、全然障害物回避してくれていません。。。
(move_baseのパラメータは色々多くて、ずっと放置してました。。)
そこで、今回はちゃんとmove_baseを動かすために、色々パラメータを調整してみました。

スポンサーリンク

move_baseの構成

move_baseパッケージは、目的地(”move_base_simple/goal”)を指定すると、事前の地図情報、センサー情報等をもとに、最適な経路を算出して、速度指示(cmd_vel)を出力してくれるというものです。


ROS Wikiより

move_baseには、経路計画(global_planner,local_planner)とコストマップ(global_costmap,local_costmap)があります。
グローバルコストマップ、グローバルプランナーは、事前に得られた地図などの情報をもとにコストを割り振り経路を決定します。
一方、ローカルプランナー、ローカルコストマップは、スキャン情報などをもとにリアルタイムにコストを割り振り経路を決定するものです。
私の場合、rvizでデバッグしてもローカルコストマップが全然表示されていませんでした。
ということで、ローカルコストマップ中心にパラメータを見直しました。

※move_baseの概要等は以下のサイトが大変参考になりました。ありがとうございました。
Navigation Stack を理解する – 2.2 move_base: ソフトウェア構成をみる

パラメータで重要だったこと

今回、costmap_common_params.yamlを以下の様に設定しました。

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

特に重要だったパラメータが、footprintobstacle_rangeraytrace_rangeinflation_radiusでした。

footprint→これをかなり正確に定義しておこないと、壁に触れていないのに、ロボットがスタックに入ったと判定されて、結局Abortedで中断になる。
obstacle_range(default:2.5m)→ここで定義した距離以内のものを障害物として判定する。(大きすぎると、障害物がたくさん存在し、経路生成が難しくなる)
raytrace_range(default:3.0m)→おそらく、この距離の範囲内にオブジェクトが無いときは、その中のコストマップをクリア(障害物をクリア)
inflation_radius(default:0.55m)→障害物から影響を受ける距離。大きすぎると、障害物と衝突すると判定されるため、すぐにスタックになってしまう。

上記をいい塩梅で調整しないと、目的地(ゴール)までなかなかたどり着けません。(その代わり壁に衝突することはない)
とりあえず、私のロボットでは今回の設定にしましたが、ロボットや環境毎に調整が必須でしょう。

動画

今回設定したパラメータで動作させた動画です。
今まで、壁にぶつかったりしていましたが、ちゃんと壁などを回避して進んでくれるようになりました。

最後に

今までほったらかしにしていたmove_baseのパラメータ、これが最適解じゃないかもしれませんが、ようやく設定できました。
それにしても、move_baseやamclなどパラメータが多すぎて調整が難しいですね。
様々なロボットや環境に簡単に適用できるようにパラメータをいかに効率的に設定するかは今後の課題です。
色々検討してみたいと思います。

それでは!!

関連記事(一部広告含む)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ページトップボタン