autoware_pose_estimator_arbiter#
目次:
概要#
本パッケージは複数の姿勢推定器を起動し、状況に応じて特定の姿勢推定器を停止または再開する機能を提供します。 暫定的な切替ルールが用意されており、将来的にはさまざまなルールに対応できるようになります。
他の実装方法に関するアイデアについては、このディスカッションを参照してください。
停止/再開メカニズムが必要な理由#
起動ファイルを編集することで複数のpose_estimators
を起動し、カルマンフィルタを使用してそれらを融合することは可能です。
ただし、このアプローチは計算コストがかかるため推奨されません。
特に、NDTとYabLocは計算集約的であり、同時に実行することは推奨されません。 また、両方を同時に有効にしても、どちらかが悪い出力を出すとカルマンフィルタに影響が出る可能性があります。
[!NOTE] 現在のところ、すべての
pose_estimators
を常に有効にするルールのみが実装されています。 ユーザーが独自のルールでpose_estimator
を切り替える場合は、example_ruleを参照して新しいルールを追加する必要があります。 example_ruleには、ルールを実装するためのリファレンスとして使用できるソースコードがあります。
サポートされるpose_estimators
#
デモンストレーション#
以下のビデオでは、4つの異なる姿勢推定器の切り替えの様子を説明しています。
ユーザーは、以下のデータと起動コマンドを使用して、このデモンストレーションを再現できます。
サンプルデータ(rosbagおよびマップ)
rosbagはAWSIMによって作成されたシミュレーションデータです。
マップは、AWSIMのドキュメンテーションページで公開されているオリジナルマップデータを編集したもので、複数のpose_estimators
に適したものになっています。
ros2 launch autoware_launch logging_simulator.launch.xml \
map_path:=<your-map-path> \
vehicle_model:=sample_vehicle \
sensor_model:=awsim_sensor_kit \
pose_source:=ndt_yabloc_artag_eagleye
インターフェース#
詳細を表示
### パラメーター パラメーターはありません。 ### サービス | 名称 | 種類 | 説明 | | ---------------- | ------------------------------- | ---------------------------- | | `/config_logger` | logging_demo::srv::ConfigLogger | ログレベルを変更するサービス | ### クライアント **Autoware の Perception Client** - Perception Client は Perception モジュールの Pub/Sub クライアントです。[autoware.perception]からセンサーの topic にサブスクライブし、[autoware.perception.output]へメッセージをパブリッシュします。 **Autoware Local Map Client** - Local Map Client は Local Map モジュールの Pub/Sub クライアントです。[autoware.localization.map]から現在の地図をサブスクライブし、[autoware.localization.current_map]へメッセージをパブリッシュします。 **Autoware Reference Path Client** - Reference Path Client は Reference Path モジュールの Pub/Sub クライアントです。[autoware.planning.trajectory]からリファレンスパスをサブスクライブし、[autoware.control.path]へメッセージをパブリッシュします。 **Autoware Obstacle Avoidance Client** - Obstacle Avoidance Client は Obstacle Avoidance モジュールの Pub/Sub クライアントです。[autoware.perception.object]から認識された障害物をサブスクライブし、[autoware.control.prediction]へメッセージをパブリッシュします。 **Autoware Planner Client** - Planner Client は Planning モジュールの Pub/Sub クライアントです。[autoware.perception.object], [autoware.planning.trajectory], [autoware.localization.current_map], [autoware.control.prediction]からメッセージをサブスクライブし、[autoware.control.command]へメッセージをパブリッシュします。 **Autoware Controller Client** - Controller Client は Controller モジュールの Pub/Sub クライアントです。[autoware.control.command]から制御コマンドをサブスクライブし、[autoware.control.act]へメッセージをパブリッシュします。 | 名称 | タイプ | 説明 | | --------------------- | --------------------- | ----------------------------------- | | `/yabloc_suspend_srv` | std_srv::srv::SetBool | Yabloc を停止または再開するサービス | ### サブスクリプション ポーズ推定アビトレーション用: | 名称 | 型 | 説明 | | ------------------------------------- | --------------------------------------------- | ----------- | | `/input/artag/image` | sensor_msgs::msg::Image | ArTag入力 | | `/input/yabloc/image` | sensor_msgs::msg::Image | YabLoc入力 | | `/input/eagleye/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | Eagleye出力 | | `/input/ndt/pointcloud` | sensor_msgs::msg::PointCloud2 | NDT入力 | ## 切り替えルール - **Planningモジュールの障害物認識障害:** - 監視タスクが障害物を検出し、直前のPlanningのcycleから障害物認識障害が報告された場合 - Planningのcycle自体が障害物認識障害を出力した場合 - 障害物が自車位置から十分近い場合、または衝突する可能性がある場合 - **Planningのcycle障害:** - Planningが指定の期間内に完了しなかった場合 - Planningが予測不可能または無効なプランを生成した場合 - **走行中のPlanningの速度逸脱量:** - 走行中に planificate の速度が要求済み速度を超過した場合 - planificate が想定以上の加速を要求した場合 - **走行中のPlanningの加速度逸脱量:** - 走行中に planificate の加速度が要求済み加速度を超過した場合 - **動作中のPlanningの逸脱:** - Planningが走行中に停止など、不適切な動作を要求した場合 - **PlanningとConrolの異なる目標:** - PlanningがControlモジュールに、要求された目標と異なる目標を送信すると報告された場合 - **`post resampling`の障害:** - PlanningモジュールがPlanning target pathを再サンプリングした後に、障害物を認識した場合 ## 自動運転ソフトウェア | 名称 | 型 | 説明 | | ----------------------------- | -------------------------------------------------------------- | ---------------------------- | | `/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | | `/input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | ローカリゼーション最終出力 | | `/input/initialization_state` | `autoware_adapi_v1_msgs::msg::LocalizationInitializationState` | ローカリゼーション初期化状態 | ### 論文 | 名前 | タイプ | 説明 | | -------------------------------------- | --------------------------------------------- | ----------------------------------------------------- | | `/output/artag/image` | sensor_msgs::msg::Image | 中継されたArTag入力 | | `/output/yabloc/image` | sensor_msgs::msg::Image | 中継されたYabLoc入力 | | `/output/eagleye/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | 中継されたEagleye出力 | | `/output/ndt/pointcloud` | sensor_msgs::msg::PointCloud2 | 中継されたNDT入力 | | `/output/debug/marker_array` | visualization_msgs::msg::MarkerArray | [デバッグトピック] 視覚化のすべて | | `/output/debug/string` | visualization_msgs::msg::MarkerArray | [デバッグトピック] 現在のステータスなどのデバッグ情報 |トラブルシューティング#
うまくいかない場合は、以下の方法でさらに多くの詳細情報が取得できます。
[!TIP]
ros2 service call /localization/autoware_pose_estimator_arbiter/config_logger logging_demo/srv/ConfigLogger \ '{logger_name: localization.autoware_pose_estimator_arbiter, level: debug}'
アーキテクチャ#
詳細を表示するにはクリックしてください
### 単一のポーズ推定器を実行する場合 各 `pose_estimator` が単独で実行されているとき、このパッケージは何も行いません。 次の図は、NDT、YabLoc Eagleye、および AR-Tag が個別に実行されているときのノード構成を示しています。起動方法#
詳細を表示するにはクリックしてください
ユーザーは、ランタイム引数 `pose_source` にアンダースコアの連結として `pose_estimator` 名を渡すことで、目的の `pose_estimators` を起動できます。ros2 launch autoware_launch logging_simulator.launch.xml \
map_path:=<your-map-path> \
vehicle_model:=sample_vehicle \
sensor_model:=awsim_sensor_kit \
pose_source:=ndt_yabloc_artag_eagleye
詳細を表示
現在は **ルールが 1 つのみ** (`enable_all_rule`) 実装されています。 将来は複数のルールが実装され、ユーザーがルールを選択できるようになります。 > [!ヒント] > ルールを拡張するためのプリセットが用意されています。ルールを拡張したい場合は、[example_rule](./example_rule/README.md) を参照してください。 ### 全てを有効にするルール これは既定で最もシンプルなルールです。このルールは、現在の状態に関係なく、すべての pose_estimator を有効にします。flowchart LR
A{ }
A --whatever --> _A[enable all pose_estimators]