ホームページ  >  記事  >  テクノロジー周辺機器  >  アポロの車線変更戦略とその実際の応用に関する詳細な分析

アポロの車線変更戦略とその実際の応用に関する詳細な分析

WBOY
WBOY転載
2023-11-07 11:37:05540ブラウズ

1. はじめに

1.1. 車線変更の機能

車線変更の機能は、簡単に言えば、基準線から基準線の 1 つを選択することです。選択する行。Planning の後続のモジュールで使用する行。

アポロの車線変更戦略とその実際の応用に関する詳細な分析

#Apollo が提供するオープンソースの車線変更コードは大幅に削除されていることに注意してください。シンプルなフレームのみ。アクティブな車線変更、(障害物による) パッシブな車線変更、比較的完全なステート マシン、車線変更ウィンドウ、ギャップ選択などの多くの機能が欠落しています。この技術記事では、既存のフレームワークに関する内容のみを示します。その他の車線変更機能の内容については、続報を楽しみにしていてください。

1.2. 車線変更ステートマシン

Apollo の現在の車線変更ステート マシンは次のとおりです。以下:

アポロの車線変更戦略とその実際の応用に関する詳細な分析

ステート マシンについては、注目に値する点がいくつかあります:

  • ここでの IN_CHANGE_LANE には、車線変更の実行と車線変更の両方が含まれます通常の状況では区別する必要があります。Apollo は、最初に基準線を切り替えてから車線変更アクションを実行する方法を採用していますが、一部の友人は、最初に車線変更動作を行ってから基準線を切り替える方法を採用します (利点は、基準線が切り替わるフレーム内で、自車の横方向の距離が0に近いことです。
  • 現状のコードでは、車線変更に失敗するタイミングが反映されていません。また、関連するコードの削除が原因であると考える理由もあります。
  • 完全な車線変更ステータスには、少なくとも、車線変更の準備、車線変更の実行、車線変更の維持、車線変更のキャンセル、車線変更の完了、および車線変更の完了が含まれている必要があります。その他のステータス

#2. コード分析

2.1. 全体的なプロセス

関連するコードが保存されているパス場所は次のとおりです: modules/planning/tasks/deciders/lane_change_decider/http://lane_change_decider.cc

  1. reference_line_info が空の場合に例外を処理します。
  2. 強制車線変更が設定されている場合 reckless_change_lanetrue の場合は、直接Update Reference Line.
  3. 前のフレームの車線変更ステータスを取得しますprev_status。最初にプログラムに入ったとき、prev_status(!prev_status-> has_status()) の場合、この時点でそのまま車線変更が完了したとみなされます。 ,
  4. has_change_lane
  5. false ) であり、車両がパトロール状態にあることを示します。車両が現在位置する車線には独自の車線があり、その周囲に可変車線はありません。 スイッチ レーン チェンジ ステート マシン
  6. 前のフレームはレーン チェンジ ステートでした
  7. ChangeLaneStatus::IN_CHANGE_LANE
: 前のフレームで車がいた車線と今回のフレームで車がいた車線が同じであれば、車はまだ目標車線に向かって歩いていることを意味します。前のフレームにあった車両は、このフレームにある車線とは異なります。これは、車両がすでにターゲット車線にあり、切り替えが完了したことを意味します。
  • 前のフレームは車線にありました失敗した状態の変更ChangeLaneStatus::CHANGE_LANE_FAILED: 車線変更が失敗した場合、状態は一定期間フリーズされ、その後、次の車線変更に備えるために車線変更状態に切り替わります。
  • 前のフレームは車線変更完了状態でしたChangeLaneStatus::CHANGE_LANE_FINISHED: 車線変更が成功した後も一定時間フリーズし、その後車線変更状態に切り替わります。次の車線変更の準備をします。ここで時間を固定する目的は、頻繁な車線変更を避けることです。
  • 2.2. 安全チェック

IsClearToChangeLane 車線変更が安全かどうかを判定します。

この安全判定方法では、仮想障害物(Virtual Obstacles)と静的障害物(Static Obstacles)は考慮しません。

投影を計算する参照線上の動的障害物の投影の幾何学的意味 以下に示すように:
    1. 車両が車線変更中の場合は、IsChangeLanePath で上で計算した投影関係を使用して、ターゲット基準線 #の車線の外側にある 障害物を無視します。
    2. ## .
    3. 障害物が車両と同じ方向に移動しているかどうかを判断します same_direction. 障害物との関係に基づいて 前方方向を計算します安全距離と後方安全距離
    4. .
    5. 車両と障害物との距離が上記で計算した安全距離よりも大きい場合は、車両の進行方向と速度の関係が考慮されます。車線変更は安全です。 HysteresisFilter
    6. は Open Close ロジックの一種で、安全判定結果の安定性を高めることを目的としています (前フレームの判定結果が考慮されます)。安全な場合、このフレームはより安全な判断を下す傾向になります。その逆も同様です)。

    2.3. 参照行の更新

    内容書き換える必要があるのは、LaneChangeDecider::PrioritizeChangeLane

    1. Input:<span></span> is_prioritize_change_lane です。 is_prioritize_change_lane が ## の場合#true の場合、切り替え先のターゲットのリファレンス ラインを見つけます。一方、is_prioritize_change_lanefalse の場合は、現在のレーンのリファレンス ラインを見つけます。車両の位置が分かります。
    2. reference_line_info->splice(reference_line_info->begin(),*reference_line_info, iter);iter## で指す基準線を入れます。 # リンク リストの先頭のステップ 1 で見つかりました。Planning 以降のモジュールでは reference_line_info( ).front() が使用されるため、リンク リストの先頭は、フレームが使用される参照線であることを示します。 splice の使用方法の詳細については、「C の基本」を参照してください。
    3. Output:
    4. ReferenceLineInfoLinked list.

    アポロの車線変更戦略とその実際の応用に関する詳細な分析##元のリンク: https://mp.weixin.qq.com /s/IQkBV8iadaU4Qy70F3Xs3Q

以上がアポロの車線変更戦略とその実際の応用に関する詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。