計画コンポーネント設計#
目的#
自動運転システムの計画コンポーネントは自動運転車両の目標軌道(経路と速度)を生成する際に重要な役割を果たします。安全と交通ルールの順守を確保し、特定の使命を果たします。
このドキュメントでは、Autoware 内の計画要件と設計の概要を説明し、開発者が計画コンポーネントの設計と拡張性を理解するのに役立ちます。
このドキュメントは2つの部分に分かれており、最初の部分では高レベルの要件と設計について説明し、後半の部分では実際の実装と提供される機能に焦点を当てます。
目標と非目標#
私たちの目標は、単に自動運転システムの開発だけにとどまりません。ユーザーが個々のニーズに合わせて自動運転機能を強化できる"自動運転プラットフォーム"の提供を目指します。
Autowareでは、高い拡張性、機能モジュール性、明確に定義されたインターフェイスを重視するマイクロオートノミーアーキテクチャ の概念を利用しています。
これを念頭に置いて、計画コンポーネントの設計ポリシーは、すべての複雑な自動運転シナリオに対処すること (これは非常に困難な問題であるため) ではなく、カスタマイズ可能で簡単に拡張可能な計画開発プラットフォームを提供することに重点を置いています。このアプローチにより、プラットフォームが幅広いニーズに対応できるようになり、最終的には多くの複雑なユースケースが解決されると考えています。
この方針を明確にするために目標と非目標を次のように定義します:
目標:
- 単純なODDを定義できるように、基本的な関数が提供されています
- 機能を拡張する前に、計画コンポーネントは自動運転に必要な重要な機能を提供する必要があります。これには、移動、停止、方向転換などの基本操作に加え、比較的安全で単純な状況での車線変更や障害物の回避の処理も含まれます。
- 機能はユーザー主導の拡張のためにモジュール化されています
- このシステムは、拡張機能を備えたさまざまな運用設計ドメイン (ODD) に適応するように設計されています。プラグインに似たモジュール化により、さまざまなレベルの自動運転やさまざまな車両または環境アプリケーション(例:Lv4/Lv2 自動運転、公共/私道走行、大型車両、小型ロボットなど)など、多様なニーズに合わせたシステムの作成が可能になります。
- 障害物のない私道など、特定のODDの機能を削減することも重要な側面です。このモジュール式アプローチにより、特定のユーザーのニーズに合わせて消費電力やセンサー要件を削減できます。
- この機能は人間のオペレーターの判断によって拡張可能です
- オペレーター支援を組み込むことは、機能拡張の重要な側面です。これは、システムが人間のサポートを受けながら、複雑で困難なシナリオに適応できることを意味します。特定の種類の演算子はここでは定義されていません。それは、プロトタイプの開発段階で車両に同乗する人かもしれないし、自動運転サービス中の緊急時に接続される遠隔操作者かもしれない。
非目標:
計画コンポーネントはサードパーティのモジュールで拡張できるように設計されています。したがって、以下はAutowareの計画コンポーネントの目標ではありません:
- ユーザーが必要とするすべての機能をデフォルトで提供します。
- 自動運転システムの完全な機能と性能特性を提供する。
- 常に人間の能力を超えた性能を提供すること、あるいは絶対的な安全性を確保すること。
これらの側面は自動運転"プラットフォーム"という当社のビジョンに特有のものであり、一般的な自動運転計画コンポーネントには当てはまらない場合があります。
高次元のデザイン#
この図は、計画コンポーネントの高レベルのアーキテクチャを示しています。これは理想的な設計を表しており、現在の実装は異なる場合があります。実装の詳細については、このドキュメントの後半のセクションで説明します。
マイクロオートノミーアーキテクチャの原則に従って、モジュール式システムフレームワークを採用しました。計画領域内の機能は、特定の使用例に応じて動的または静的に適応できるモジュールとして実装されます。これには、車線変更、交差点処理、横断歩道などのモジュールが含まれます。
計画コンポーネントは、いくつかのサブコンポーネントで構成されます:
- ミッション計画: 地図データを利用して現在地から目的地までのルートを計算するモジュールです。その機能は、フリート管理システム(FMS)やカーナビゲーションの経路計画に似ています。
- 計画モジュール: これらのモジュールは、ターゲットの軌道、ウィンカー信号などを含む、割り当てられたミッションに対する車両の動作を計画します。これらのモジュールは、行動と動作のカテゴリに分類されます。:
- 行動: 安全でルールに準拠したルートの計算、車線変更、交差点進入、停止線での停止の決定の管理に重点を置きます。
- 動作: 行動モジュールと連携して、車両の動きと乗り心地を考慮して車両の軌道を決定します。これには、経路形成と速度計算のための横方向および縦方向の計画が含まれます。
- 検証: 緊急対応機能を備え、計画された軌道の安全性と適切性を保証します。計画された軌道が不適切な場合、緊急プロトコルがトリガーされるか、代替経路が生成されます。
ハイライト#
この高レベル設計の重要な側面は次のとおりです:
各機能の調整#
経路生成、車線変更、交差点管理などの重要な計画機能がモジュール化されています。これらのモジュールには標準化されたインターフェイスが付属しており、追加や変更が簡単に行えます。これらのインターフェイスの詳細については、後続のセクションで説明します。各モジュールを有効/無効にする方法の詳細については、計画の実装ドキュメントを参照してください。
ミッション計画サブコンポーネントの分離#
ミッションプランニングは、FMS(フリート管理システム)などの既存のサービスに通常見られる機能の代替として機能します。高レベルの設計で定義されたインターフェイスを遵守することで、サードパーティのサービスとの統合が容易になります。
検証サブコンポーネントの分離#
計画コンポーネントの拡張可能な性質を考慮すると、すべての機能にわたって一貫した安全レベルを確保することは困難です。したがって、検証機能はコアの計画モジュールから独立して管理され、計画モジュールの任意の変更に対しても安全性のベースラインを維持します。
HMI用インターフェース(ヒューマン・マシン・インターフェース)#
HMIは人間のオペレーターとスムーズに連携できるように設計されています。これらのインターフェイスにより、車内または遠隔地にかかわらず、計画コンポーネントとオペレーター間の調整が可能になります。
計画とその他のコンポーネントの分離に関するトレードオフ#
Autowareの包括的な設計では、計画、認識、位置推定、制御などのコンポーネントを分離することで、サードパーティモジュールとの連携が容易になります。ただし、この分離にはパフォーマンスと拡張性の間のトレードオフが伴います。たとえば、知覚コンポーネントは、計画から分離されているため、不要なオブジェクトを処理する可能性があります。同様に、計画と制御を分離すると、計画中に車両の運動を考慮する際に課題が生じる可能性があります。これらの問題を軽減するには、インターフェイス情報を強化するか、計算量を増やす必要がある場合があります。
機能をカスタマイズする#
計画コンポーネント設計の重要な機能は、外部モジュールと統合できることです。以下の図は、外部機能を組み込むためのさまざまな方法を示しています。
1. 計画コンポーネントへの新しいモジュールの追加#
ユーザーは、既存の計画機能を新しいモジュールで拡張または置き換えることができます。このアプローチは一般的に機能を拡張するために使用され、目的のODDにない機能の追加や既存の機能の簡素化を可能にします。
ただし、これらの機能を追加するには、よく整理されたモジュールインターフェイスが必要です。2023年11月の時点では、理想的なモジュラーシステムは完全には確立されておらず、いくつかの制限があります。詳細については、リファレンス実装セクションの現在の実装での機能のカスタマイズと計画の実装ドキュメントを参照してください。
2. 計画のサブコンポーネントの置き換え#
サブコンポーネント レベルでのコラボレーションと拡張に興味を持つユーザーもいるかもしれません。これには、ミッション計画を既存の FMS サービスに置き換えたり、既存の検証機能を利用しながらサードパーティの軌道生成モジュールを組み込んだりすることが含まれる可能性があります。
計画コンポーネントの内部インターフェイスに準拠すると、このレベルでのコラボレーションと拡張が可能になります。既存の計画機能との複雑な連携は制限される場合がありますが、特定の計画コンポーネント機能と外部モジュール間の統合が可能になります。
3. 計画コンポーネント全体の置き換え#
自動運転計画システムを開発している組織や研究機関は、独自の計画ソリューションとAutowareの知覚モジュールまたは制御モジュールの統合に興味があるかもしれません。これは、コンポーネント間で定義された堅牢で安定したインターフェイスに従って、計画システム全体を置き換えることによって実現できます。ただし、既存の計画モジュールと直接調整できない場合があることに注意することが重要です。
コンポーネントインターフェース#
このセクションでは、計画コンポーネントとその内部モジュールの入力と出力について説明します。現在の実装については計画コンポーネントインターフェイスページを参照してください。
計画コンポーネントへの入力#
- 地図から
- ベクターマップ: 経路計画のための車線接続情報、参照パスを生成するための車線形状、交通ルール関連情報など、環境に関するすべての静的情報が含まれます。
- 知覚から
- 検出物体情報: 歩行者や他の車両など、事前に知ることができない物体に関するリアルタイムの情報を提供します。計画コンポーネントは、これらの物体との衝突を回避するための操縦を計画します。
- 検出された障害物情報: 障害物の位置に関するリアルタイム情報を提供します。これは、検出されたオブジェクトよりも原始的なもので、緊急停止やその他の安全対策に使用されます。
- 占有マップ情報: 歩行者や他の車両の存在に関するリアルタイムの情報と、遮蔽されたエリアの情報を提供します。
- 信号機認識結果: 各信号機の現在の状態をリアルタイムで提供します。計画コンポーネントは、計画された経路に関連する情報を抽出し、交差点で停止するかどうかを決定します。
- 位置推定から
- 車両運動情報: 自車両の位置、速度、加速度、およびその他の運動関連データが含まれます。
- システムから
- 動作モード: 車両が自律モードで動作しているかどうかを示します。
- ヒューマンマシンインターフェイス(HMI)から
- 機能の実行: 人間のオペレーターによる、車線変更や交差点への進入などの自動運転操作の実行/承認を可能にします。
- APIレイヤーから
- 目的地(目標): 計画コンポーネントが到達することを目指す最終的な位置を表します。
- チェックポイント: 目的地までの経路上の中間点を表します。これは経路計算時に使用されます。
- 速度制限: 車両の最高速度制限を設定します。
計画コンポーネントからの出力#
- 制御へ
- 軌道: 制御コンポーネントが従う必要があるポーズ、ツイスト、加速のスムーズなシーケンスを提供します。軌跡の長さは通常10秒、分解能は0.1秒です。
- 方向指示器: 計画された操作に基づいて、右、左、ハザードなどの車両の方向指示器を制御します。
- システムへ
- 診断: 計画コンポーネントの状態をレポートし、処理が正しく実行されているかどうか、安全な計画が生成されているかどうかを示します。
- ヒューマン・マシン・インターフェース(HMI)へ
- 機能実行の可用性: 車線変更や交差点への進入など、実行できる操作または必要な操作のステータスを示します。
- 軌道候補: ユーザーの実行後に実行される可能性のある軌道を示します。
- APIレイヤーへ
- 計画要因: 現在の計画動作の背後にある理由に関する情報を提供します。これには、回避すべき目標物の位置、停止の決定に至った障害物、およびその他の関連情報が含まれる場合があります。
計画コンポーネントの内部インターフェース#
- ミッション計画からシナリオ計画まで
- 経路: 出発地から目的地までたどる必要がある経路のガイダンスを提供します。この経路は、地図上に定義されたレーンIDなどの情報に基づいて決定されます。経路レベルでは、どの特定の車線を使用するかは明示的に示されず、経路には複数の車線が含まれる場合があります。
- 行動計画から動作計画へ
- 通過点: 車両がたどる大まかな位置と速度を提供します。これらの通過点ポイントは通常約1メートルの間隔で定義されます。他の間隔距離も可能ですが、計画コンポーネントの精度やパフォーマンスに影響を与える可能性があります。
- 走行可能エリア: 車線内や物理的に走行可能なエリアなど、車両が走行できる領域を定義します。動作プランナーがこの定義された領域内で最終的な軌道を計算することを前提としています。
- シナリオの計画から検証へ
- 軌道: 制御コンポーネントが追従しようとする目的の位置、速度、加速度を定義します。軌道点は軌道速度に基づいて約0.1秒間隔で定義されます。
- 検証から制御コンポーネントへ
- 軌道: 上記と同じですが、追加の安全上の考慮事項がいくつかあります。
設計の詳細#
サポートされている機能#
機能 | 説明 | 要件 | 図 | デモ |
---|---|---|---|---|
経路計画 | 自車位置から目的地までの経路を計画します。 リファレンス実装はMission Planner,にあり、 mission_planner ノードを起動することで有効化します。 |
- レーンレットマップ(走行レーン) | ||
経路からの道筋計画 | 指定された経路からたどる経路を計画します。 リファレンス実装はBehavior Path Plannerにあります。 |
- レーンレットマップ(走行レーン) | ||
障害物回避 | ステアリング操作で障害物を回避するように経路を計画します。 リファレンス実装はAvoidance, Obstacle Avoidance Plannerにあります。 パラメータの有効化フラグは: launch obstacle_avoidance_planner true |
- オブジェクト情報 | デモビデオ ![]() |
|
道筋の平滑化 | スムーズなステアリングを実現するために経路を計画します。 リファレンス実装はObstacle Avoidance Plannerにあります。 |
- レーンレットマップ(走行レーン) | デモビデオ ![]() |
|
狭所走行 | 走行可能エリア内で走行するための経路を計画します。また、走行可能領域内を走行できない場合は、車両を停止し、走行可能領域から出ないようにしてください。 リファレンス実装はObstacle Avoidance Plannerにあります。 |
- レーンレットマップ (高精度レーン境界) | デモビデオ ![]() |
|
車線変更 | 目的地に到達するための車線変更の経路を計画します。 リファレンス実装はLane Changeにあります。 |
- レーンレットマップ(走行レーン) | デモビデオ ![]() |
|
乗り上げ | 路肩に車を停めるための経路を計画します。 リファレンス実装はGoal Plannerにあります。 |
- レーンレットマップ(路肩レーン) | デモビデオs: Simple Pull Over ![]() Arc Forward Pull Over ![]() Arc Backward Pull Over ![]() |
|
発進 | 車寄せのための経路を路肩から開始するように計画します。 リファレンス実装はPull Out Moduleにあります。 |
- レーンレットマップ(路肩レーン) | デモビデオ: Simple Pull Out ![]() Backward Pull Out ![]() |
|
パスシフト | 外部からの指示に応じて横方向の経路を計画します。 リファレンス実装はSide Shift Module. |
- None | ||
障害物停止 | 経路上の障害物に合わせて停止する速度を計画します。 リファレンス実装はObstacle Stop Planner, Obstacle Cruise Plannerにあります。 launch obstacle_stop_planner と有効化フラグ: TODO , launch obstacle_cruise_planner と有効化フラグ: TODO |
- オブジェクト情報 | デモビデオ ![]() |
|
障害物の減速 | 経路の周囲にある障害物に対して減速するように速度を計画します。 リファレンス実装はObstacle Stop Planner, Obstacle Cruise Plannerにあります。 |
- オブジェクト情報 | デモビデオ ![]() |
|
適応的クルーズコントロール | 自車両の前を走行する車両に追従するように速度を計画します。 リファレンス実装はObstacle Stop Planner, Obstacle Cruise Plannerにあります。 |
- オブジェクト情報 | ||
割り込み車両に対する減速 | 車両が自車線に割り込むリスクを回避するために速度を計画します。 リファレンス実装はObstacle Cruise Plannerにあります。 |
- オブジェクト情報 | ||
起動時の周辺確認 | 車両の周囲に障害物がある場合に移動を防止するために速度を計画します。 リファレンス実装はSurround Obstacle Checkerにあります。 Enable flag in parameter: use_surround_obstacle_check true in tier4_planning_component.launch.xml < |
- オブジェクト情報 | デモビデオ ![]() |
|
カーブの減速 | カーブでは減速するように速度を計画します。 リファレンス実装はMotion Velocity Smootherにあります。 |
- None | ||
障害物に対するカーブの減速 | 経路周囲の障害物との衝突の危険を考慮して、カーブでは減速するように速度を計画します。 リファレンス実装はObstacle Velocity Limiterにあります。 |
- オブジェクト情報 - レーンレットマップ (固定障害物) |
デモビデオ ![]() |
|
横断歩道 | 断歩道に近づいたり歩いたりする歩行者が停止または減速する速度を計画します。 リファレンス実装はCrosswalk Moduleにあります。 |
- オブジェクト情報 - レーンレットマップ (横断歩道) |
デモビデオ ![]() |
|
交差点対向車確認 | 対向車との危険を避けるために、交差点での右折または左折の速度を計画します。 リファレンス実装はIntersection Moduleにあります。 |
- オブジェクト情報 - レーンレットマップ (交差点とゆずり車線) |
デモビデオ ![]() |
|
交差点死角チェック | 死角の後ろから来る他の車両やバイクとの危険を避けるために、交差点で右折または左折するときの速度を計画してください。 リファレンス実装はBlind Spot Moduleにあります。 |
- オブジェクト情報 - レーンレットマップ (交差点) |
デモビデオ ![]() |
|
交差点のオクルージョンチェック | オクルージョンエリアから車両が来る可能性があるリスクを回避するために、交差点での右折または左折の速度を計画します。 リファレンス実装はIntersection Moduleにあります。 |
- オブジェクト情報 - レーンレットマップ (交差点) |
デモビデオ ![]() |
|
交差点の渋滞検知 | 渋滞で前方に車両が停止している場合、交差点に進入しないように交差点の速度を計画してください。 リファレンス実装はIntersection Moduleにあります。 |
- オブジェクト情報 - レーンレットマップ (交差点) |
デモビデオ ![]() |
|
信号機 | 信号に従って交差点の速度を計画します。 リファレンス実装はTraffic Light Moduleにあります。 |
- 信号色情報 | デモビデオ ![]() |
|
飛び出しチェック | 近くの物体が経路に飛び出してしまう可能性を考慮して、速度を減速するように計画します。 リファレンス実装はRun Out Moduleにあります。 |
- オブジェクト情報 | デモビデオ ![]() |
|
停止線 | 停止線で停止するように計画速度を設定します。 リファレンス実装はStop Line Moduleにあります。 |
- レーンレットマップ (停止線) | デモビデオ ![]() |
|
オクルージョンスポットチェック | 大型車両の後ろなどからオブジェクトがオクルージョンエリアから飛び出してくる場合に減速するように速度を計画します。 リファレンス実装はOcclusion Spot Moduleにあります。 |
- オブジェクト情報 - レーンレットマップ (専用/一般レーン) |
デモビデオ ![]() |
|
停車禁止エリア | 消防署出入り口前など、停止禁止区域では停止しないように速度を計画してください。 リファレンス実装はNo Stopping Area Moduleにあります。 |
- レーンレットマップ (no stopping area) | ||
私有地から公道への合流 | 歩行者や他の車両との衝突の危険を避けるために、私道から公道に入るときの速度を計画してください。 リファレンス実装はMerge from Private Area Moduleにあります。 |
- オブジェクト情報 - レーンレットマップ (専用/一般レーン) |
WIP | |
スピードバンプ | スピードバンプでは減速するように速度を計画します。 | |||
リファレンス実装はSpeed Bump Moduleにあります。 |
- レーンレットマップ (スピードバンプ) | デモビデオ ![]() |
||
検知エリア | 指定された検出エリアに物体が存在する場合、対応する停止位置で停止するように計画速度を設定します。 リファレンス実装はDetection Area Moduleにあります。 |
- レーンレットマップ (検知エリア) | デモビデオ ![]() |
|
走行可能な車線なし | ODD (運用設計ドメイン) で指定されたエリアを出る前に停止するように速度を計画するか、ODD 車線外で自律モードが開始された場合に車両を停止します。 リファレンス実装はNo Drivable Lane Module. |
- レーンレットマップ (走行禁止レーン) | ||
車線逸脱時の衝突検知 | 自車両が自分の車線から逸脱したときに、別の車線を走行している他の車両との衝突を避けるために速度を計画します。 リファレンス実装はOut of Lane Moduleにあります。 |
- オブジェクト情報 - レーンレットマップ (走行レーン) |
WIP | |
駐車場 | 駐車エリアでの特定の目標に向けて経路と速度を計画します。 リファレンス実装はFree Space Plannerにあります。 |
- オブジェクト情報 - レーンレットマップ (駐車場) |
デモビデオ ![]() |
|
自動緊急ブレーキ (AEB) | 前方の物体との衝突が予想される場合は、緊急停止してください。この機能は最終的な安全層として期待されており、位置推定または知覚システムに障害が発生した場合でも機能するはずであることに注意してください。 リファレンス実装はOut of Lane Moduleにあります。 |
- Primitive objects | ||
最小リスク行動 (MRM) | 危険な事象が発生した場合には、適切な MRM (最小リスク行動) 指示を提供します。例えば、センサーの異常が発見された場合、状況に応じて緊急ブレーキ、適度な停止、路肩寄せなどの指示を出します。 リファレンス実装はTODO |
- TODO | WIP | |
軌道の検証 | 計画された軌道が安全であることを確認してください。安全でない場合は、軌道を変更する、軌道の送信を停止する、自動運転システムに報告するなどの適切な措置を講じます。 リファレンス実装はPlanning Validatorにあります。 |
- None | ||
レーンマップ生成の実行 | 手動運転で記録された位置特定データからレーンマップを生成します。 リファレンス実装はWIP |
- None | WIP | |
ランニングレーンの最適化 | 車両の運動学を考慮してマップの中心線 (基準パス) を最適化して滑らかにします。 リファレンス実装はStatic Centerline Optimizerにあります。 |
- レーンレットマップ (走行レーン) | WIP |
リファレンス実装#
次の図は、計画コンポーネントのリファレンス実装を示しています。新しいモジュールを追加したり、機能を拡張したりすることで、さまざまなODDをサポートできます。
一部の実装は、実装の難しさのために高レベルのアーキテクチャ設計に準拠しておらず、更新が必要であることに注意してください。
詳細は各パッケージの設計資料をご参照ください。
- mission_planner: 地図情報をもとにスタートからゴールまでのルートを計算します。
- behavior_path_planner: 交通規則に基づいて経路と走行可能エリアを計算します。
- lane_following
- lane_change
- avoidance
- pull_over
- pull_out
- side_shift
- behavior_velocity_planner: 交通ルールに基づいて最大速度を計算します。
- obstacle_avoidance_planner: 障害物と走行可能領域の制約の下で経路形状を計算します
- surround_obstacle_checker: 自車両の周囲に障害物がある場合に車両を停止させ続けます。車両停止時のみ作動します。
- obstacle_stop_planner: 軌道上またはその近くに障害物がある場合、停止、減速、適応クルーズ (車に追従) の状況に応じて軌道ポイントの最大速度を計算します。
- costmap_generator: 動的オブジェクトとレーン情報からパス生成のためのコストマップを生成します。
- freespace_planner: フリースペース シーンの実現可能性 (曲率など) を考慮して軌道を計算します。アルゴリズムについてはここで説明します。
- scenario_selector : 現在のシナリオに従って軌道を選択します。
- external_velocity_limit_selector: 複数の候補から適切な速度制限を取得します。
- motion_velocity_smoother: 速度、加速度、ジャーク制約を考慮して最終速度を計算します。
現在の実装における重要な情報#
シナリオプランニングレイヤーの導入#
きちんと構造化された車線での運転と、駐車場などの空きスペースでの運転との間のインターフェースには、異なる要件があります。たとえば、レーンドライビングではマップIDを使用してルートを処理できますが、これは空きスペースでの計画には適していません。計画サブコンポーネントをシナリオレベル(車線走行、駐車など)で切り替えるメカニズムにより、インターフェイスの柔軟な設計が可能になりますが、異なるシナリオ間でモジュールを再利用するという欠点があります。
行動と動作の分離#
計画の古典的なアプローチの1つは、アクションを決定する"行動"と最終的な動きを決定する"動作"に分割することです。ただし、機能の分離が進むとパフォーマンスが低下する傾向があるため、この分離はパフォーマンスとのトレードオフを意味します。たとえば行動は動作が最終的に実行する計算についての事前知識なしで意思決定を行う必要があるため、一般に保守的な意思決定が行われます。一方で、動作と動作を統合すると動作性能と意思決定が相互依存するため、地域の交通ルールに合わせて意思決定機能のみを拡張したい場合など、拡張性の点で課題が生じます。
この背景を理解するにはこちらの以前に説明した文書が役立つかもしれません。
現在の実装の機能をカスタマイズする#
現在の実装ではモジュール レベルの機能を追加することは可能ですが、すべての機能に対応する統一インターフェイスは提供されていません。現在の実装におけるモジュールレベルでの拡張方法について簡単に説明します。
behavior_velocity_plannerまたはbehavior_path_plnnerに新しいモジュールを追加します#
behavior_path_plannerやbehavior_velocity_plannerどの ROSノードには、プラグインを通じて使用できるモジュールインターフェイスがあります。これらのROSノードで定義されたモジュールインターフェースに従ってモジュールを追加することで、モジュールの動的なロード/アンロードが可能になります。モジュールを追加する具体的な方法については、各パッケージのドキュメントを参照してください。
計画コンポーネントに新しいrosノードを追加します#
動作計画にモジュールを追加する場合、モジュールをROSノードとして作成し、計画コンポーネントに統合する必要があります。現在の構成では、上流で計算された目標軌道に情報を追加する処理が行われており、このプロセスにROS Nodeを導入することで機能拡張が可能となっています。
シナリオを追加または置き換える#
現在の実装では、複数のモジュールを一括して切り替える方法として、シナリオレベルの切り替えロジックを導入しています。これにより、新しいシナリオ (高速道路での運転など) を追加できます。
シナリオをrosノードとして作成し、scenario_selector rosノードをそれに合わせることで統合が完了します。この利点は、他のシナリオ (車線走行など) の実装に影響を与えることなく、重要な新機能を導入できることです。ただし、シナリオの切り替えによるシナリオレベルの調整のみが可能であり、既存の計画モジュールレベルでの調整は可能ではありません。