障害物速度制限機能#
目的#
このノードは、障害物の方向へ走行している際の速度を制限します。 例えば、カーブでガードレールに接近しているときに速度を下げることができます。
自動運転ソフトウェアドキュメント#
障害物速度制限器#
障害物速度制限器ノードは、障害物との衝突を回避するために車両の速度を制限します。このノードを有効にすると、車両は障害物との衝突を回避するために次の操作を行います。
- 障害物との距離が指定されたしきい値よりも小さい場合、車両の速度を制限します。
- 障害物が車両の走行経路にある場合、車両の経路を再計画します。
障害物速度制限器ノードは、次のコンポーネントを使用して障害物との衝突を検出します。
- 自車位置
- 障害物検出
- 経路計画
障害物速度制限器ノードは、障害物との衝突を回避するために次のコンポーネントを使用して車両の速度を制限します。
- 速度計画
- 速度制御
機能#
障害物速度制限器ノードには、次の機能があります。
- 障害物との衝突を回避するための車両速度の制限
- 障害物との衝突を回避するための車両経路の再計画
- 障害物との衝突を回避するための車両速度の
post resampling
設定#
障害物速度制限器ノードは以下のパラメータで設定できます。
- 障害物との衝突回避のための最小距離しきい値
- 車両の速度を制限するための最大速度
- 車両の速度を
post resampling
するための間隔
使用方法#
障害物速度制限器ノードを使用するには、次の手順に従います。
- Autowareの「障害物速度制限器」ノードを起動します。
- 障害物との衝突回避のための最小距離しきい値、車両の速度を制限するための最大速度、車両の速度を
post resampling
するための間隔を設定します。 - 「障害物速度制限器」ノードを車両の他のコンポーネントに接続します。
例#
障害物速度制限器ノードは、次のようなシナリオで使用できます。
- 車両が他の車両や歩行者に近づきすぎている場合
- 車両が交差点に近づきすぎている場合
- 車両が障害物のある道路を走行している場合
制約事項#
障害物速度制限器ノードには、次の制約事項があります。
- 障害物を正確に検出できない場合があります。
- 車両の速度を制限できない場合があります。
- 車両の経路を再計画できない場合があります。
トラブルシューティング#
障害物速度制限器ノードに問題がある場合は、次の手順に従います。
- 障害物との衝突回避のための最小距離しきい値が適切に設定されていることを確認します。
- 車両の速度を制限するための最大速度が適切に設定されていることを確認します。
- 車両の速度を
post resampling
するための間隔が適切に設定されていることを確認します。 - 障害物速度制限器ノードが車両の他のコンポーネントに適切に接続されていることを確認します。
内部機構/アルゴリズム#
パラメータmin_ttc
(衝突までの最小時間)を使用し、ノードは速度制限を設定して、min_ttc
の期間、新しい制御入力がなくても障害物との衝突が発生しないようにします。
これを達成するために、各軌跡のポイントで自車位置が時間的にシミュレートされ、対応するフットプリントを作成します。
フットプリントが障害物と衝突した場合、軌跡のポイントの速度が低減されて、新しいシミュレートされたフットプリントが衝突しなくなります。パラメータsimulation.distance_method
により、正確な距離計算と、単純なユークリッド距離を使用したより安価な近似との切り替えが可能になります。
パラメータsimulation.model
により、車両の動作をシミュレートするための2つのモデルが選択できます。簡単なパーティクルモデルと、より複雑な自転車モデルです。
パーティクルモデル#
パーティクルモデルは、軌跡のポイントにおける車両の一定の進行方向と速度を使用して、将来の動作をシミュレートします。 シミュレートされた前方動作は直線で、フットプリントは長方形になります。
フットプリント#
長方形のフットプリントは、シミュレートされた前方動作に平行で、車両の幅の半分だけ離れた2本の線で形成されます。
距離#
衝突点がフットプリント内にある場合、次の図に示すようにして距離が計算されます。
自転車モデル#
自転車モデルは、軌跡のポイントにおける車両の一定の進行方向、速度、およびステアリングを使用して、将来の動作をシミュレートします。
シミュレートされた前方動作は、ステアリングに関連付けられた曲率円の周囲の円弧になります。
ステアリングの不確実性は、simulation.steering_offset
パラメータを使用して導入できます。このパラメータは、左端のステアリングから右端のステアリングまでの動作の範囲を生成します。
これにより、同じ軌跡のポイントから始まる3本の曲線が生成されます。
パラメータsimulation.nb_points
は、これらの線の精度を調整するために使用され、最小の2
は直線になり、値が高くなると曲線の精度が向上します。
デフォルトでは、軌跡メッセージに含まれるステアリング値が使用されます。
パラメータtrajectory_preprocessing.calculate_steering_angles
をtrue
に設定すると、これらの値を再計算できます。
フットプリント#
自転車モデルのフットプリントは、シミュレートされた左および右の動作に平行で、車両の幅の半分だけ離れた線で作成されます。 さらに、中央シミュレートされた動作の終点の左と右にある2つの点が使用されて、多角形が完成されます。
距離#
衝突点までの距離は、軌跡のポイントと衝突点を通過する曲率円を求めることによって計算されます。
障害物検出#
レーンレットマップは常に障害物をチェックしていますが、他のソースはパラメーター 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_envelope
が true
に設定されている場合、横断シミュレートフットプリント内に入っていない障害物は無視されます。
安全範囲ポリゴンはすべてのフットプリントから構築され、占有グリッドまたは点群上で正マスクとして使用されます。
このオプションは障害物の総数を減らすことができ、衝突検出のコストを削減します。 ただし、範囲を覆うコストは通常、検討するには高すぎます。
エゴパス上の障害物#
パラメーター obstacles.ignore_obstacles_on_path
が true
に設定されている場合、軌道と車両寸法からポリゴンマスクが構築されます。
このポリゴン内の障害物はすべて無視されます。
ポリゴンのサイズは、車両の横方向オフセットに追加される 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」は、調整された速度で発生する最大減速度(現在の自車速度に対する相対値)を設定できます。