Skip to content

障害物速度制限機能#

目的#

このノードは、障害物の方向へ走行している際の速度を制限します。 例えば、カーブでガードレールに接近しているときに速度を下げることができます。

自動運転ソフトウェアドキュメント#

障害物速度制限器#

障害物速度制限器ノードは、障害物との衝突を回避するために車両の速度を制限します。このノードを有効にすると、車両は障害物との衝突を回避するために次の操作を行います。

  • 障害物との距離が指定されたしきい値よりも小さい場合、車両の速度を制限します。
  • 障害物が車両の走行経路にある場合、車両の経路を再計画します。

障害物速度制限器ノードは、次のコンポーネントを使用して障害物との衝突を検出します。

  • 自車位置
  • 障害物検出
  • 経路計画

障害物速度制限器ノードは、障害物との衝突を回避するために次のコンポーネントを使用して車両の速度を制限します。

  • 速度計画
  • 速度制御

機能#

障害物速度制限器ノードには、次の機能があります。

  • 障害物との衝突を回避するための車両速度の制限
  • 障害物との衝突を回避するための車両経路の再計画
  • 障害物との衝突を回避するための車両速度のpost resampling

設定#

障害物速度制限器ノードは以下のパラメータで設定できます。

  • 障害物との衝突回避のための最小距離しきい値
  • 車両の速度を制限するための最大速度
  • 車両の速度をpost resamplingするための間隔

使用方法#

障害物速度制限器ノードを使用するには、次の手順に従います。

  1. Autowareの「障害物速度制限器」ノードを起動します。
  2. 障害物との衝突回避のための最小距離しきい値、車両の速度を制限するための最大速度、車両の速度をpost resamplingするための間隔を設定します。
  3. 「障害物速度制限器」ノードを車両の他のコンポーネントに接続します。

#

障害物速度制限器ノードは、次のようなシナリオで使用できます。

  • 車両が他の車両や歩行者に近づきすぎている場合
  • 車両が交差点に近づきすぎている場合
  • 車両が障害物のある道路を走行している場合

制約事項#

障害物速度制限器ノードには、次の制約事項があります。

  • 障害物を正確に検出できない場合があります。
  • 車両の速度を制限できない場合があります。
  • 車両の経路を再計画できない場合があります。

トラブルシューティング#

障害物速度制限器ノードに問題がある場合は、次の手順に従います。

  1. 障害物との衝突回避のための最小距離しきい値が適切に設定されていることを確認します。
  2. 車両の速度を制限するための最大速度が適切に設定されていることを確認します。
  3. 車両の速度をpost resamplingするための間隔が適切に設定されていることを確認します。
  4. 障害物速度制限器ノードが車両の他のコンポーネントに適切に接続されていることを確認します。

内部機構/アルゴリズム#

パラメータmin_ttc(衝突までの最小時間)を使用し、ノードは速度制限を設定して、min_ttcの期間、新しい制御入力がなくても障害物との衝突が発生しないようにします。

これを達成するために、各軌跡のポイントで自車位置が時間的にシミュレートされ、対応するフットプリントを作成します。 フットプリントが障害物と衝突した場合、軌跡のポイントの速度が低減されて、新しいシミュレートされたフットプリントが衝突しなくなります。パラメータsimulation.distance_methodにより、正確な距離計算と、単純なユークリッド距離を使用したより安価な近似との切り替えが可能になります。

パラメータsimulation.modelにより、車両の動作をシミュレートするための2つのモデルが選択できます。簡単なパーティクルモデルと、より複雑な自転車モデルです。

パーティクルモデル#

パーティクルモデルは、軌跡のポイントにおける車両の一定の進行方向と速度を使用して、将来の動作をシミュレートします。 シミュレートされた前方動作は直線で、フットプリントは長方形になります。

フットプリント#

長方形のフットプリントは、シミュレートされた前方動作に平行で、車両の幅の半分だけ離れた2本の線で形成されます。

particle_footprint_image

距離#

衝突点がフットプリント内にある場合、次の図に示すようにして距離が計算されます。

particle_collision_distance_image

自転車モデル#

自転車モデルは、軌跡のポイントにおける車両の一定の進行方向、速度、およびステアリングを使用して、将来の動作をシミュレートします。 シミュレートされた前方動作は、ステアリングに関連付けられた曲率円の周囲の円弧になります。 ステアリングの不確実性は、simulation.steering_offsetパラメータを使用して導入できます。このパラメータは、左端のステアリングから右端のステアリングまでの動作の範囲を生成します。 これにより、同じ軌跡のポイントから始まる3本の曲線が生成されます。 パラメータsimulation.nb_pointsは、これらの線の精度を調整するために使用され、最小の2は直線になり、値が高くなると曲線の精度が向上します。

デフォルトでは、軌跡メッセージに含まれるステアリング値が使用されます。 パラメータtrajectory_preprocessing.calculate_steering_anglestrueに設定すると、これらの値を再計算できます。

フットプリント#

自転車モデルのフットプリントは、シミュレートされた左および右の動作に平行で、車両の幅の半分だけ離れた線で作成されます。 さらに、中央シミュレートされた動作の終点の左と右にある2つの点が使用されて、多角形が完成されます。

bicycle_footprint_image

距離#

衝突点までの距離は、軌跡のポイントと衝突点を通過する曲率円を求めることによって計算されます。

bicycle_collision_distance_image

障害物検出#

レーンレットマップは常に障害物をチェックしていますが、他のソースはパラメーター obstacles.dynamic_source を使用して切り替えられます。

フットプリントと交差する障害物を効率的に探すために、それらは R-ツリー (https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boostgeometryindex__rtree.html) に格納されます。 2 つのツリーが使用されます。1 つは障害物点用で、1 つは障害物ラインストリング用です (R-ツリーを簡素化するために、ラインストリングはセグメントに分解されます)。

オブスタクルマスク#

動的障害物#

他の車などの移動障害物は、このモジュールでは考慮されません。 これらの障害物は知覚モジュールで検出され、ポリゴンとして表現されます。 これらのポリゴン内の障害物は無視されます。

パラメーター obstacles.dynamic_obstacles_min_vel よりも速度が高い動的障害物のみが削除されます。

遅延や精度のエラーに対処するために、パラメーター obstacles.dynamic_obstacles_buffer でポリゴンを拡大できます。

安全範囲外の障害物#

パラメーター obstacles.filter_envelopetrue に設定されている場合、横断シミュレートフットプリント内に入っていない障害物は無視されます。 安全範囲ポリゴンはすべてのフットプリントから構築され、占有グリッドまたは点群上で正マスクとして使用されます。

このオプションは障害物の総数を減らすことができ、衝突検出のコストを削減します。 ただし、範囲を覆うコストは通常、検討するには高すぎます。

エゴパス上の障害物#

パラメーター obstacles.ignore_obstacles_on_pathtrue に設定されている場合、軌道と車両寸法からポリゴンマスクが構築されます。 このポリゴン内の障害物はすべて無視されます。

ポリゴンのサイズは、車両の横方向オフセットに追加される obstacles.ignore_extra_distance パラメーターを使用して増やすことができます。

このオプションは少しコストが高く、不適切な動的障害物がエゴパス上で検出され、不要な速度制限が発生するような、ノイズの多い動的障害物がある場合にのみ使用​​する必要があります。

レーンレットマップ#

静的障害物に関する情報は、ラインストリングの type タグの値を使用してレーンレットマップに格納できます。 ラインストリングに type がパラメーター obstacles.static_map_tags の値のいずれかがある場合、それは障害物として使用されます。

レーンレットマップからの障害物はマスクの影響を受けません。

占有グリッド#

マスキングは autoware::grid_map_utils::PolygonIterator 関数を使用して、各ポリゴンマスク内のセルを反復処理することで実行されます。 次に、パラメーター obstacles.occupancy_grid_threshold よりも高い占有値を持つセルのみを保持するようにしきい値が適用されます。 最後に、イメージはイメージに変換され、障害物ラインストリングは opencv 関数 findContour を使用して抽出されます。

点群#

マスキングは pcl::CropHull 関数を使用して実行されます。 次に、点群からの点が障害物として直接使用されます。

速度調節#

衝突が検出された場合、軌跡のポイントでの速度は、その結果のフットプリントが障害物に衝突しなくなるように調整されます: \(velocity = \frac{dist\_to\_collision}{min\_ttc}\)

エゴ車両の急激な減速を防ぐために、max_deceleration パラメーターは、現在のエゴ速度に対する減速を制限します。 未来の期間 t で発生する軌跡点の場合 (元の速度プロファイルから計算されます)、

さらに、min_adjusted_velocity パラメータは修正された速度の下限を指定します。

軌道の前処理#

このノードは、自車位置からの入力軌跡の一部のみを変更します。 パラメータ trajectory_preprocessing.start_distance は、自車位置のどれだけ前から速度が修正され始めるかを調整するために使用されます。 パラメータ trajectory_preprocessing.max_length および trajectory_preprocessing.max_duration は、速度が調整される軌道の量を制御するために使用されます。

trajectory_preprocessing.downsample_factor パラメータを使用して、精度を犠牲にしてコンピューティングコストを削減するために、軌跡をダウンサンプリングできます。 たとえば、値 1 はすべての軌跡点が評価されることを意味し、値 10 はポイントの 1/10 のみ評価されることを意味します。

パラメータ#

名前 説明
min_ttc float 各軌跡点で一定の向きと速度を想定した場合、衝突しないために必要な最低時間 [秒]
distance_buffer float 障害物との必要な距離バッファ [m]
min_adjusted_velocity float このノードが設定できる最小調整速度 [m/s]
max_deceleration float 調整速度が発生させることができる最大減速 [m/s²]
trajectory_preprocessing.start_distance float 軌道の一部 (現在の自車位置に対する相対距離) から速度を調整するコントロールの開始点 [m]
trajectory_preprocessing.max_length float 速度を調整する最大距離 (start_distance から開始) [m]
trajectory_preprocessing.max_distance float 速度を調整する最大時間 (start_distance から測定) [秒]
trajectory_preprocessing.downsample_factor int 軌跡のダウンサンプリング係数。精度と性能のトレードオフに使用できます。
trajectory_preprocessing.calculate_steering_angle bool True の場合、軌跡メッセージの操舵角は使用されず、再計算されます。
simulation.model string シミュレーションに使用するモデル。 "particle" か "bicycle" のいずれか。
simulation.distance_method string 衝突までの距離の計算に使用するメソッド。 "exact" か "approximation" のいずれか。
simulation.steering_offset float bicycle モデルで使用する操舵の周りにオフセット。
simulation.nb_points int bicycle モデルでモーションをシミュレートするために使用するポイント数。
obstacles.dynamic_source string 障害物チェックに使用される動的障害物のソース。 "occupancy_grid"、"point_cloud"、または "static_only" (動的障害物なし) のいずれか。
obstacles.occupancy_grid_threshold int 占用グリッドでセルが障害物と見なされる値。
obstacles.dynamic_obstacles_buffer float 障害物マスク時に障害物の周りに使用するバッファ。ノイズを防ぎます。
obstacles.dynamic_obstacles_min_vel float 動的障害物をマスクする最小速度。
obstacles.static_map_tags 文字列リスト このタグを持つレーンのマップの直線は障害物として使用されます。
obstacles.filter_envelope bool 安全エンベロープを使用して動的障害物ソースをフィルタリングするかどうか。

仮定 / 制約#

このノードが出力する速度プロファイルは現実的なものではなく、加速度やジャークの考慮なく速度が急変することがあります。 この速度プロファイルは、車両の実際の速度の上限として使用するものとして意図されています。

(オプション) エラー検出と処理#

このノードにとって重要なケースは、障害物が軌道に非常に近距離で誤って検出され、それに対応する速度が非常に低下する場合です。 これは急ブレーキを引き起こす可能性があり、これらのエラーを軽減するために2つのメカニズムを使用できます。

パラメーター「min_adjusted_velocity」は調整された速度に最小値を設定し、ノードが車両を減速しすぎないようにします。 パラメーター「max_deceleration」は、調整された速度で発生する最大減速度(現在の自車速度に対する相対値)を設定できます。

(オプション) パフォーマンスの特徴付け#

(オプション) 参照 / 外部リンク#

(オプション) 今後の拡張 / 実装されていない部分#