Skip to content

tandem_run_manager

Koki Kubota edited this page Oct 16, 2023 · 3 revisions

このノードは、waypoint_nav と併用することで、縦列対策をすることができます。ここでいう縦列対策とは、他のロボット(または歩行者などの動的障害物)が列をなしている状況で、同じようにロボットを並ばせ、列の進行に合わせてロボットを制御する、というものです。
waypoint_nav に与えるウェイポイントファイルをこのノードにも読み込ませ、ウェイポイントに専用のパラメータを与えておくことで、特定のウェイポイント区間中に縦列対策を有効化できます。この区間中はレーザースキャンの情報を基に前方に障害物があるかどうかを確認し、一定距離以内に障害物がある場合、ナビゲーションを一時中断します。その後、障害物が一定距離から離れたらナビゲーションを再開します。
また、move_base の global_costmap が有効だと前方の障害物を迂回する経路を生成してしまうため、縦列対策が有効化している区間中は global_costmap を無効化します。


1. Subscribed Topics


2. Parameters

  • ~waypoints_file (string, default: "")
    ウェイポイントファイルのパス。waypoint_nav に指定したものと同じである必要がある。

  • ~use_angle (float, default: 20)
    レーザースキャンデータのうち、中央の何度分(degree)を障害物の認識に利用するか。

  • ~danger_dist (float, default: 1.0)
    レーザースキャンデータにより、このパラメータで指定した距離(m)以内に障害物があるとき、ナビゲーションを中断する。

  • ~switch_costmap (string[ ], default: [ ])
    縦列対策の区間中に無効化する global_costmap の名前のリスト。無効化・有効化の切り替えには Dynamic reconfigure の機能を使用。


6. Required YAML Format

waypoint_nav とこのノードに指定するウェイポイントファイルの中で、"tandem_start", "tandem_end" の2つのパラメータを特定のウェイポイントに与えることで、縦列対策を有効化できます。 以下はウェイポイントファイルの例です。

waypoints:
- point: {x: 1.0, y: 0.0, z: 0.0, vel: 1.0, rad: 0.8, stop: false, tandem_start: 1}
- point: {x: 2.0, y: 0.0, z: 0.0, vel: 1.0, rad: 0.8, stop: true}
- point: {x: 3.0, y: 0.0, z: 0.0, vel: 1.0, rad: 0.8, stop: false, tandem_end: 1}
...
- point: {x: 6.0, y: 0.0, z: 0.0, vel: 1.0, rad: 0.8, stop: false, tandem_start: 2}
...
finish_pose:
  header: {seq: 0, stamp: 113.132, frame_id: map}
  pose:
    position: {x: 4.0, y: 0.0, z: 0.0}
    orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}

上記のウェイポイントファイルの場合、tandem_start パラメータをもつ1つめのウェイポイントに到達後、2つめに向かい始めるときに縦列対策が有効になります。このとき、パラメータ "switch_costmaps" で指定した costmap は無効化されます。レーザースキャンデータのうち、正面から "use_angle" で指定した角度の中に、"danger_dist" で指定した距離以内の障害物があればナビゲーションを中断します。中断後も観測し続け、障害物が離れればナビゲーションを再開します。そして、tandem_end パラメータをもつ3つめのウェイポイントに到達したら縦列対策を有効にする前の状態に戻ります。
なお、パラメータ tandem_start, tandem_end に対する数値は意味をもちませんが、縦列対策を有効にしたい区間が複数ある場合、セットで同じ数値を指定しておくと分かりやすいかもしれません。

Clone this wiki locally