車線変更の機能は、簡単に言えば、基準線から基準線の 1 つを選択することです。選択する行。Planning の後続のモジュールで使用する行。
#Apollo が提供するオープンソースの車線変更コードは大幅に削除されていることに注意してください。シンプルなフレームのみ。アクティブな車線変更、(障害物による) パッシブな車線変更、比較的完全なステート マシン、車線変更ウィンドウ、ギャップ選択などの多くの機能が欠落しています。この技術記事では、既存のフレームワークに関する内容のみを示します。その他の車線変更機能の内容については、続報を楽しみにしていてください。
Apollo の現在の車線変更ステート マシンは次のとおりです。以下:
ステート マシンについては、注目に値する点がいくつかあります:
関連するコードが保存されているパス場所は次のとおりです: modules/planning/tasks/deciders/lane_change_decider/http://lane_change_decider.cc
reference_line_info
が空の場合に例外を処理します。 reckless_change_lane
が true
の場合は、直接Update Reference Line.prev_status
。最初にプログラムに入ったとき、prev_status
(!prev_status-> has_status()
) の場合、この時点でそのまま車線変更が完了したとみなされます。 , false
) であり、車両がパトロール状態にあることを示します。車両が現在位置する車線には独自の車線があり、その周囲に可変車線はありません。
スイッチ レーン チェンジ ステート マシン
ChangeLaneStatus::CHANGE_LANE_FAILED
: 車線変更が失敗した場合、状態は一定期間フリーズされ、その後、次の車線変更に備えるために車線変更状態に切り替わります。ChangeLaneStatus::CHANGE_LANE_FINISHED
: 車線変更が成功した後も一定時間フリーズし、その後車線変更状態に切り替わります。次の車線変更の準備をします。ここで時間を固定する目的は、頻繁な車線変更を避けることです。
2.2. 安全チェックこの安全判定方法では、仮想障害物(Virtual Obstacles)と静的障害物(Static Obstacles)は考慮しません。
IsChangeLanePath
で上で計算した投影関係を使用して、ターゲット基準線 #の車線の外側にある 障害物を無視します。 障害物が車両と同じ方向に移動しているかどうかを判断します
same_direction. 障害物との関係に基づいて 前方方向を計算します安全距離と後方安全距離
HysteresisFilter内容書き換える必要があるのは、LaneChangeDecider::PrioritizeChangeLane
Input:<span></span>
is_prioritize_change_lane です。
is_prioritize_change_lane が ## の場合#true
の場合、切り替え先のターゲットのリファレンス ラインを見つけます。一方、is_prioritize_change_lane
が false
の場合は、現在のレーンのリファレンス ラインを見つけます。車両の位置が分かります。reference_line_info->splice(reference_line_info->begin(),*reference_line_info, iter)
;iter## で指す基準線を入れます。 # リンク リストの先頭のステップ 1 で見つかりました。Planning 以降のモジュールでは
reference_line_info( ).front() が使用されるため、リンク リストの先頭は、フレームが使用される参照線であることを示します。
splice の使用方法の詳細については、「C の基本」を参照してください。
Linked list.
##元のリンク: https://mp.weixin.qq.com /s/IQkBV8iadaU4Qy70F3Xs3Q
以上がアポロの車線変更戦略とその実際の応用に関する詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。