From 4dcbb7b2744de17a470b6663faf9d3c427a3b8b9 Mon Sep 17 00:00:00 2001 From: morimoto Date: Tue, 12 Nov 2024 22:40:30 +0900 Subject: [PATCH 1/4] translate README.md to Japanese --- README.md | 133 +++- common/README.md | 13 +- common/autoware_ad_api_specs/README.md | 3 +- .../README.md | 7 +- common/autoware_geography_utils/README.md | 5 +- common/autoware_grid_map_utils/README.md | 58 +- common/autoware_interpolation/README.md | 55 +- common/autoware_kalman_filter/README.md | 7 +- common/autoware_motion_utils/README.md | 93 +-- .../README.md | 8 +- .../README.md | 37 +- .../autoware_overlay_rviz_plugin/README.md | 59 +- .../autoware_perception_rviz_plugin/README.md | 240 ++++++- common/autoware_point_types/README.md | 124 +++- common/autoware_signal_processing/README.md | 16 +- common/autoware_test_utils/README.md | 94 ++- common/autoware_universe_utils/README.md | 74 +- common/bag_time_manager_rviz_plugin/README.md | 21 +- common/component_interface_utils/README.md | 101 +-- common/glog_component/README.md | 10 +- common/tier4_adapi_rviz_plugin/README.md | 29 +- common/tier4_api_utils/README.md | 5 +- .../tier4_camera_view_rviz_plugin/README.md | 25 +- common/tier4_datetime_rviz_plugin/README.md | 15 +- .../tier4_localization_rviz_plugin/README.md | 108 +-- common/tier4_planning_rviz_plugin/README.md | 381 +++++++--- common/tier4_state_rviz_plugin/README.md | 117 ++- common/tier4_system_rviz_plugin/README.md | 11 +- .../tier4_traffic_light_rviz_plugin/README.md | 27 +- common/tier4_vehicle_rviz_plugin/README.md | 141 ++-- common/traffic_light_utils/README.md | 7 +- common/tvm_utility/README.md | 128 ++-- common/tvm_utility/artifacts/README.md | 7 +- .../README.md | 233 +++--- control/autoware_control_validator/README.md | 100 +-- .../autoware_external_cmd_selector/README.md | 53 +- control/autoware_joy_controller/README.md | 222 +++--- .../autoware_lane_departure_checker/README.md | 165 +++-- .../autoware_mpc_lateral_controller/README.md | 549 ++++++++------ .../README.md | 113 ++- .../README.md | 201 +++--- .../README.md | 393 +++++----- control/autoware_pure_pursuit/README.md | 23 +- control/autoware_shift_decider/README.md | 86 ++- .../README.md | 434 +++++------ .../README.md | 61 +- .../README.md | 63 +- control/autoware_vehicle_cmd_gate/README.md | 246 ++++--- .../control_performance_analysis/README.md | 147 ++-- control/predicted_path_checker/README.md | 154 ++-- .../autoware_control_evaluator/README.md | 19 +- evaluator/autoware_evaluator_utils/README.md | 7 +- .../autoware_planning_evaluator/README.md | 102 ++- evaluator/diagnostic_converter/README.md | 58 +- evaluator/kinematic_evaluator/README.md | 5 +- evaluator/localization_evaluator/README.md | 9 +- .../perception_online_evaluator/README.md | 192 +++-- launch/tier4_autoware_api_launch/README.md | 18 +- launch/tier4_control_launch/README.md | 18 +- launch/tier4_localization_launch/README.md | 16 +- launch/tier4_map_launch/README.md | 18 +- launch/tier4_perception_launch/README.md | 14 +- launch/tier4_planning_launch/README.md | 12 +- launch/tier4_sensing_launch/README.md | 24 +- launch/tier4_simulator_launch/README.md | 12 +- launch/tier4_system_launch/README.md | 12 +- launch/tier4_vehicle_launch/README.md | 33 +- localization/autoware_ekf_localizer/README.md | 175 +++-- .../autoware_geo_pose_projector/README.md | 33 +- localization/autoware_gyro_odometer/README.md | 97 ++- .../README.md | 57 +- .../autoware_ar_tag_based_localizer/README.md | 131 +++- .../autoware_lidar_marker_localizer/README.md | 137 +++- .../README.md | 97 ++- .../autoware_localization_util/README.md | 5 +- .../autoware_ndt_scan_matcher/README.md | 420 +++++------ localization/autoware_pose2twist/README.md | 144 +++- .../README.md | 213 +++--- .../autoware_pose_estimator_arbiter/README.md | 332 +++++---- .../example_rule/README.md | 83 ++- .../autoware_pose_initializer/README.md | 116 +-- .../README.md | 212 ++++-- localization/autoware_stop_filter/README.md | 87 ++- localization/autoware_twist2accel/README.md | 68 +- localization/yabloc/README.md | 91 +-- localization/yabloc/yabloc_common/README.md | 179 ++++- .../yabloc/yabloc_image_processing/README.md | 505 ++++++++++--- localization/yabloc/yabloc_monitor/README.md | 83 ++- .../yabloc/yabloc_particle_filter/README.md | 357 +++++++-- .../yabloc/yabloc_pose_initializer/README.md | 123 +++- map/autoware_map_height_fitter/README.md | 37 +- map/autoware_map_projection_loader/README.md | 61 +- map/autoware_map_tf_generator/README.md | 83 ++- map/map_loader/README.md | 161 +++-- map/util/lanelet2_map_preprocessor/README.md | 3 +- perception/autoware_bytetrack/README.md | 251 +++++-- perception/autoware_cluster_merger/README.md | 189 ++++- .../README.md | 260 +++++-- .../README.md | 163 ++++- .../README.md | 157 +++- .../README.md | 25 +- .../autoware_detection_by_tracker/README.md | 135 ++-- .../autoware_elevation_map_loader/README.md | 236 ++++-- .../autoware_euclidean_cluster/README.md | 170 +++-- .../autoware_ground_segmentation/README.md | 102 ++- .../README.md | 134 +++- .../README.md | 162 +++-- .../autoware_lidar_centerpoint/README.md | 380 ++++++---- .../autoware_lidar_transfusion/README.md | 208 ++++-- .../autoware_map_based_prediction/README.md | 405 ++++++----- .../autoware_multi_object_tracker/README.md | 116 +-- perception/autoware_object_merger/README.md | 128 ++-- .../autoware_object_range_splitter/README.md | 145 ++-- .../README.md | 23 +- .../README.md | 115 ++- .../README.md | 72 +- .../README.md | 62 +- .../README.md | 142 ++-- .../README.md | 115 +-- .../autoware_radar_object_tracker/README.md | 144 ++-- .../README.md | 91 +-- .../autoware_shape_estimation/README.md | 231 ++++-- .../autoware_simple_object_merger/README.md | 76 +- .../autoware_tensorrt_classifier/README.md | 9 +- perception/autoware_tensorrt_common/README.md | 7 +- perception/autoware_tensorrt_yolox/README.md | 220 +++--- .../autoware_tracking_object_merger/README.md | 124 ++-- .../autoware_traffic_light_arbiter/README.md | 99 ++- .../README.md | 416 +++++++---- .../README.md | 113 +-- .../README.md | 63 +- .../README.md | 243 ++++++- .../README.md | 49 +- .../README.md | 186 ++++- perception/perception_utils/README.md | 5 +- planning/README.md | 95 +-- planning/autoware_costmap_generator/README.md | 86 +-- .../README.md | 281 ++++++-- planning/autoware_freespace_planner/README.md | 160 ++--- .../README.md | 115 ++- planning/autoware_mission_planner/README.md | 246 ++++--- .../README.md | 13 +- .../README.md | 508 +++++++------ .../autoware_obstacle_stop_planner/README.md | 388 +++++----- planning/autoware_path_optimizer/README.md | 270 ++++--- planning/autoware_path_smoother/README.md | 13 +- .../autoware_planning_test_manager/README.md | 56 +- .../README.md | 28 +- .../autoware_planning_validator/README.md | 125 ++-- .../README.md | 51 +- planning/autoware_route_handler/README.md | 17 +- planning/autoware_rtc_interface/README.md | 137 ++-- planning/autoware_scenario_selector/README.md | 45 +- .../README.md | 86 +-- .../README.md | 176 +++-- planning/autoware_velocity_smoother/README.md | 518 +++++++++----- .../README.md | 41 +- .../README.md | 168 ++--- .../README.md | 406 +++++------ .../README.md | 675 +++++++++++------- .../autoware_behavior_path_planner/README.md | 328 +++++---- .../README.md | 89 ++- .../README.md | 36 +- .../README.md | 586 +++++++-------- .../README.md | 612 ++++++++-------- .../README.md | 50 +- .../README.md | 363 +++++----- .../README.md | 69 +- .../README.md | 517 +++++++------- .../README.md | 65 +- .../README.md | 44 +- .../README.md | 231 +++--- .../README.md | 95 +-- .../README.md | 5 +- .../README.md | 284 ++++---- .../README.md | 68 +- .../README.md | 68 +- .../README.md | 80 ++- .../README.md | 88 ++- .../README.md | 110 +-- .../README.md | 7 +- .../README.md | 124 ++-- .../README.md | 291 +++++--- .../README.md | 183 +++-- .../README.md | 101 +-- .../autoware_bezier_sampler/README.md | 5 +- .../autoware_frenet_planner/README.md | 9 +- .../autoware_path_sampler/README.md | 199 ++++-- .../autoware_sampler_common/README.md | 9 +- sensing/autoware_gnss_poser/README.md | 86 ++- sensing/autoware_image_diagnostics/README.md | 162 ++++- .../README.md | 93 ++- sensing/autoware_imu_corrector/README.md | 127 ++-- sensing/autoware_pcl_extensions/README.md | 37 +- .../README.md | 188 +++-- .../README.md | 36 +- .../README.md | 32 +- .../autoware_radar_threshold_filter/README.md | 58 +- .../README.md | 94 ++- .../livox/autoware_livox_tag_filter/README.md | 134 ++-- sensing/vehicle_velocity_converter/README.md | 97 ++- simulator/autoware_carla_interface/README.md | 264 +++++-- .../dummy_perception_publisher/README.md | 87 ++- simulator/fault_injection/README.md | 150 +++- .../learning_based_vehicle_model/README.md | 118 +-- simulator/simple_planning_simulator/README.md | 248 +++---- .../tier4_dummy_object_rviz_plugin/README.md | 371 +++++++--- simulator/vehicle_door_simulator/README.md | 3 +- system/autoware_component_monitor/README.md | 56 +- system/autoware_default_adapi/README.md | 32 +- .../README.md | 126 +++- system/bluetooth_monitor/README.md | 81 ++- system/component_state_monitor/README.md | 5 +- .../ad_api_adaptors/README.md | 45 +- .../automatic_pose_initializer/README.md | 13 +- system/diagnostic_graph_aggregator/README.md | 83 +-- system/diagnostic_graph_utils/README.md | 11 +- system/dummy_diag_publisher/README.md | 53 +- system/dummy_infrastructure/README.md | 48 +- system/duplicated_node_checker/README.md | 38 +- .../mrm_comfortable_stop_operator/README.md | 119 ++- system/mrm_emergency_stop_operator/README.md | 85 ++- system/mrm_handler/README.md | 97 ++- system/system_diagnostic_monitor/README.md | 21 +- system/system_monitor/README.md | 272 +++---- system/topic_state_monitor/README.md | 111 +-- system/velodyne_monitor/README.md | 125 ++-- tools/reaction_analyzer/README.md | 243 +++---- .../README.md | 255 +++---- .../autoware_external_cmd_converter/README.md | 79 +- .../README.md | 65 +- 231 files changed, 18304 insertions(+), 11596 deletions(-) diff --git a/README.md b/README.md index 9636c801a4444..87ac18a59a9a4 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,33 @@ # Autoware Universe -## Welcome to Autoware Universe +## Autoware Universeへようこそ -Autoware Universe serves as a foundational pillar within the Autoware ecosystem, playing a critical role in enhancing the core functionalities of autonomous driving technologies. -This repository is a pivotal element of the Autoware Core/Universe concept, managing a wide array of packages that significantly extend the capabilities of autonomous vehicles. +Autoware UniverseはAutowareエコシステムの基礎的な柱として、自動運転技術における中核的な機能を強化する重要な役割を果たします。 +このリポジトリはAutoware Core/Universeコンセプトの中核的な要素であり、自動運転車の機能を大幅に拡張する広範なパッケージを管理しています。 ![autoware_universe_front](docs/assets/images/autoware_universe_front.png) -## Getting Started +## 入門 -To dive into the vast world of Autoware and understand how Autoware Universe fits into the bigger picture, we recommend starting with the [Autoware Documentation](https://autowarefoundation.github.io/autoware-documentation/). This resource provides a thorough overview of the Autoware ecosystem, guiding you through its components, functionalities, and how to get started with development. +Autowareの広大な世界に飛び込み、Autoware Universeが全体像の中でどのように適合するかを理解するには、[Autowareドキュメント](https://autowarefoundation.github.io/autoware-documentation/)から始めることをお勧めします。このリソースはAutowareエコシステムの包括的な概要を提供し、そのコンポーネント、機能、開発の始め方を説明しています。 -### Explore Autoware Universe documentation +### Autoware Universeのドキュメントを探る -For those looking to explore the specifics of Autoware Universe components, the [Autoware Universe Documentation](https://autowarefoundation.github.io/autoware.universe/), deployed with MKDocs, offers detailed insights. +Autoware Universeコンポーネントの詳細を探りたい場合は、MKDocsで展開された[Autoware Universeのドキュメント](https://autowarefoundation.github.io/autoware.universe/)で詳細な情報を見つけることができます。 -## Code Coverage Metrics +## コードカバレッジメトリクス -Below table shows the coverage rate of entire Autoware Universe and sub-components respectively. +以下の表は、Autoware Universe全体およびサブコンポーネントのそれぞれのカバレッジ率を示しています。 -### Entire Project Coverage +### プロジェクト全体のカバレッジ [![codecov](https://codecov.io/github/autowarefoundation/autoware.universe/graph/badge.svg?token=KQP68YQ65D)](https://codecov.io/github/autowarefoundation/autoware.universe) -### Component-wise Coverage +### コンポーネントごとのカバレッジ -You can check more details by clicking the badge and navigating the codecov website. +バッジをクリックしてcodecovのウェブサイトに移動すると、詳細を確認できます。 -| Component | Coverage | +| コンポーネント | 対応範囲 | | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Common | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Common%20Packages&query=$.[0].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Common%20Packages) | | Control | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Control%20Packages&query=$.[1].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Control%20Packages) | @@ -42,9 +42,104 @@ You can check more details by clicking the badge and navigating the codecov webs | System | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=System%20Packages&query=$.[10].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=System%20Packages) | | Vehicle | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Vehicle%20Packages&query=$.[11].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Vehicle%20Packages) | - - +**自動運転ソフトウェアに関するドキュメント** + +## Self-Driving Software Architecture + +### Planningモジュール + +#### ユースケースと要件 + +* 自車位置と目的地の認識 +* 安全かつ効率的な経路の作成 +* 障害物回避と衝突予測 +* 高速道路と市街地でのナビゲーション対応 + +#### 実装の詳細 + +* 動的パスプランニングアルゴリズム(例:A*、D*ライト)を使用したリアルタイム経路生成 +* 車載センサー(LiDAR、カメラ、レーダー)からのデータ統合 +* 障害物検出と逸脱量リスク評価のための物体検出アルゴリズム +* 高精度地図データの活用 + +#### パフォーマンスの測定基準 + +* 目的地への到着時間 +* 走行距離と燃料消費量 +* 障害物との衝突回避率 +* 加速度逸脱量、速度逸脱量 + +### Perceptionモジュール + +#### ユースケースと要件 + +* 車両周囲の環境認識 +* 動的および静的障害物の検出と追跡 +* 物体の形状、サイズ、速度の推定 +* 交通状況のモニタリングと予測 + +#### 実装の詳細 + +* LiDARとカメラからのデータを融合した物体検出と追跡アルゴリズム +* 領域ベースの物体検出器(例:YOLO、Faster R-CNN) +* ニューラルネットワークを使用した特徴抽出と分類 +* 地図データの活用とセンシングデータへの投影 + +#### パフォーマンスの測定基準 + +* 物体検出の精度(mAP) +* 物体追跡の精度(IDF1) +* 処理スループット(FPS) +* エラー検出率(例:偽検出率、偽陰性率) + +### Controlモジュール + +#### ユースケースと要件 + +* アクセル、ブレーキ、ステアリングの制御 +* 経路計画からの命令の追従 +* 障害物回避のための緊急回避動作 +* 車両の安定性とハンドリングの維持 + +#### 実装の詳細 + +* PID制御器を使用したフィードバック制御 +* モデル予測制御(MPC)を使用した最適制御 +* 先行車両追従のための適応制御アルゴリズム +* 緊急回避のための最適化されたパスクレプランニング + +#### パフォーマンスの測定基準 + +* 経路からの逸脱量 +* アクセル、ブレーキ、ステアリング操作の応答性 +* エネルギー効率(例:燃料消費量) + +### Sensingモジュール + +#### ユースケースと要件 + +* 車両周囲の環境データの収集 +* LiDAR、カメラ、レーダーなど、複数のセンサーのデータ統合 +* データの収集と'post resampling'のリアルタイム処理 +* センサーキャリブレーションとエラー補正 + +#### 実装の詳細 + +* ROS(Robot Operating System)ベースのセンサーデータ統合システム +* センサーデータの同期と'post resampling'のリアルタイム処理 +* レーザー、RGB、深度データの融合技術 +* 固有のセンサーデバイスドライバの開発 + +#### パフォーマンスの測定基準 + +* データの収集範囲と精度 +* データの'post resampling'と同期化の精度 +* センサーキャリブレーションの品質 +* 処理スループット(FPS) + +### Autowareとの統合 + +* ROSベースのアーキテクチャによるAutowareへのシームレスな統合 +* モジュールの再利用性と拡張性 +* オープンソースコミュニティによる継続的な開発とサポート + diff --git a/common/README.md b/common/README.md index 05f85de61286e..3127d9bf459b9 100644 --- a/common/README.md +++ b/common/README.md @@ -1,16 +1,17 @@ -# Common +# 共通 -## Getting Started +## はじめに -The Autoware.Universe Common folder consists of common and testing libraries that are used by other Autoware components, as well as useful plugins for visualization in RVIZ2. +Autoware.Universe Commonフォルダは他のAutowareコンポーネントで使用される一般的でテスト用のライブラリのほか、RVIZ2における視覚化に便利なプラグインで構成されています。 !!! note - In addition to the ones listed in this folder, users can also have a look at some of the add-ons in the `autoware_tools/common` documentation [page](https://autowarefoundation.github.io/autoware_tools/main/common/mission_planner_rviz_plugin/). + このフォルダに記載されているもののほかに、ユーザーは `autoware_tools/common` のドキュメント [ページ](https://autowarefoundation.github.io/autoware_tools/main/common/mission_planner_rviz_plugin/) のアドオンも閲覧できます。 -## Highlights +## ハイライト -Some of the commonly used libraries are: +一般的に使われているライブラリを以下に示します。 1. `autoware_universe_utils` 2. `autoware_motion_utils` + diff --git a/common/autoware_ad_api_specs/README.md b/common/autoware_ad_api_specs/README.md index 6683bcdb3a51d..c415ee8f77768 100644 --- a/common/autoware_ad_api_specs/README.md +++ b/common/autoware_ad_api_specs/README.md @@ -1,3 +1,4 @@ # autoware_adapi_specs -This package is a specification of Autoware AD API. +このパッケージは、Autoware AD APIの仕様です。 + diff --git a/common/autoware_component_interface_tools/README.md b/common/autoware_component_interface_tools/README.md index 48492664a647e..d9c32b2e02958 100644 --- a/common/autoware_component_interface_tools/README.md +++ b/common/autoware_component_interface_tools/README.md @@ -1,7 +1,8 @@ -# autoware_component_interface_tools +## autoware_component_interface_tools -This package provides the following tools for component interface. +このパッケージでは、コンポーネント・インターフェイスに関する次のツールを提供します。 ## service_log_checker -Monitor the service log of component_interface_utils and display if the response status is an error. +`component_interface_utils`のサービスログを監視し、レスポンスステータスがエラーかどうかを表示します。 + diff --git a/common/autoware_geography_utils/README.md b/common/autoware_geography_utils/README.md index fb4c2dc3a8312..13a19553c3f70 100644 --- a/common/autoware_geography_utils/README.md +++ b/common/autoware_geography_utils/README.md @@ -1,5 +1,6 @@ # geography_utils -## Purpose +## 目的 + +このパッケージには、その他の package で使用される地理関連関数があります。必要に応じて参照してください。 -This package contains geography-related functions used by other packages, so please refer to them as needed. diff --git a/common/autoware_grid_map_utils/README.md b/common/autoware_grid_map_utils/README.md index 34adfe230cf78..86d47a444af9d 100644 --- a/common/autoware_grid_map_utils/README.md +++ b/common/autoware_grid_map_utils/README.md @@ -1,51 +1,49 @@ -# Grid Map Utils +# グリッドマップユーティリティ -## Overview +## 概要 -This packages contains a re-implementation of the `grid_map::PolygonIterator` used to iterate over -all cells of a grid map contained inside some polygon. +このパッケージには、ポリゴン内にあるグリッドマップのすべてのセルを反復処理するために使用される `grid_map::PolygonIterator` の再実装が含まれます。 -## Algorithm +## アルゴリズム -This implementation uses the [scan line algorithm](https://en.wikipedia.org/wiki/Scanline_rendering), -a common algorithm used to draw polygons on a rasterized image. -The main idea of the algorithm adapted to a grid map is as follow: +この実装では、ラスタライズされた画像にポリゴンを描画するために使用される一般的なアルゴリズムである [走査線アルゴリズム](https://ja.wikipedia.org/wiki/%E8%B5%B0%E6%9F%A5%E7%B7%9A%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%B6%E3%83%B3) を使用します。 +このアルゴリズムをグリッドマップに適用した主な考え方は次のとおりです。 -- calculate intersections between rows of the grid map and the edges of the polygon edges; -- calculate for each row the column between each pair of intersections; -- the resulting `(row, column)` indexes are inside of the polygon. +- グリッドマップの行とポリゴン端の交点を計算します。 +- 各行について、各交点のペア間の列を計算します。 +- 結果の `(行、列)` インデックスはポリゴン内にあります。 -More details on the scan line algorithm can be found in the References. +走査線アルゴリズムの詳細については、リファレンスを参照してください。 ## API -The `autoware::grid_map_utils::PolygonIterator` follows the same API as the original [`grid_map::PolygonIterator`](https://docs.ros.org/en/kinetic/api/grid_map_core/html/classgrid__map_1_1PolygonIterator.html). +`autoware::grid_map_utils::PolygonIterator` は、元の [`grid_map::PolygonIterator`](https://docs.ros.org/en/kinetic/api/grid_map_core/html/classgrid__map_1_1PolygonIterator.html) と同じ API に従います。 -## Assumptions +## 前提 -The behavior of the `autoware::grid_map_utils::PolygonIterator` is only guaranteed to match the `grid_map::PolygonIterator` if edges of the polygon do not _exactly_ cross any cell center. -In such a case, whether the crossed cell is considered inside or outside of the polygon can vary due to floating precision error. +`autoware::grid_map_utils::PolygonIterator` の動作が `grid_map::PolygonIterator` と一致するのは、ポリゴンの端がどのセルの中心とも _完全に_ 交差しない場合のみです。 +このような場合、交差したセルがポリゴンの内側と外側のどちらと見なされるかは、浮動小数点の精度誤差によって異なる場合があります。 -## Performances +## パフォーマンス -Benchmarking code is implemented in `test/benchmarking.cpp` and is also used to validate that the `autoware::grid_map_utils::PolygonIterator` behaves exactly like the `grid_map::PolygonIterator`. +`test/benchmarking.cpp` にベンチマークコードを実装しており、`autoware::grid_map_utils::PolygonIterator` が `grid_map::PolygonIterator` とまったく同じように動作することを検証するためにも使用しています。 -The following figure shows a comparison of the runtime between the implementation of this package (`autoware_grid_map_utils`) and the original implementation (`grid_map`). -The time measured includes the construction of the iterator and the iteration over all indexes and is shown using a logarithmic scale. -Results were obtained varying the side size of a square grid map with `100 <= n <= 1000` (size=`n` means a grid of `n x n` cells), -random polygons with a number of vertices `3 <= m <= 100` and with each parameter `(n,m)` repeated 10 times. +次の図は、このパッケージ (`autoware_grid_map_utils`) の実装と元の (`grid_map`) 実装のランタイムを比較したものです。 +測定した時間は、イテレータの構築とすべてのインデックスの反復処理を含み、対数スケールで示しています。 +結果は、側辺長が `100 <= n <= 1000` の正方形グリッドマップ (サイズ=`n` は、`n x n` セルのグリッドを表します) で、頂点数が `3 <= m <= 100` のランダムなポリゴンでばらつきがあり、各パラメーター `(n,m)` は 10 回繰り返して取得されました。 -![Runtime comparison](media/runtime_comparison.png) +![ランタイムの比較](media/runtime_comparison.png) -## Future improvements +## 今後改善予定 -There exists variations of the scan line algorithm for multiple polygons. -These can be implemented if we want to iterate over the cells contained in at least one of multiple polygons. +複数のポリゴンに対する走査線アルゴリズムのバリエーションがあります。 +これらは、複数のポリゴンのいずれかに含まれるセルを反復処理する場合に実装できます。 -The current implementation imitate the behavior of the original `grid_map::PolygonIterator` where a cell is selected if its center position is inside the polygon. -This behavior could be changed for example to only return all cells overlapped by the polygon. +現在の実装は、中心点がポリゴン内にある場合にセルが選択される、元の `grid_map::PolygonIterator` の動作を模倣しています。 +例えば、この動作は、ポリゴンに重なるセルのみを返すように変更できます。 -## References +## 参考資料 -- +- - + diff --git a/common/autoware_interpolation/README.md b/common/autoware_interpolation/README.md index 5801c06dcb717..a17d9d6945b1b 100644 --- a/common/autoware_interpolation/README.md +++ b/common/autoware_interpolation/README.md @@ -1,41 +1,40 @@ -# Interpolation package +# 補間パッケージ -This package supplies linear and spline interpolation functions. +このパッケージでは、線形およびスプライン補間関数が提供されます。 -## Linear Interpolation +## 線形補間 -`lerp(src_val, dst_val, ratio)` (for scalar interpolation) interpolates `src_val` and `dst_val` with `ratio`. -This will be replaced with `std::lerp(src_val, dst_val, ratio)` in `C++20`. +`lerp(src_val, dst_val, ratio)`(スカラー補間用)は、`ratio`を使用して`src_val`と`dst_val`を補間します。 +これは`C++20`で`std::lerp(src_val, dst_val, ratio)`に置き換えられます。 -`lerp(base_keys, base_values, query_keys)` (for vector interpolation) applies linear regression to each two continuous points whose x values are`base_keys` and whose y values are `base_values`. -Then it calculates interpolated values on y-axis for `query_keys` on x-axis. +`lerp(base_keys, base_values, query_keys)`(ベクトル補間用)は、x値が`base_keys`で、y値が`base_values`である2つの連続点それぞれに線形回帰を適用します。 +その後、x軸の`query_keys`に対してy軸の補間値を計算します。 -## Spline Interpolation +## スプライン補間 -`spline(base_keys, base_values, query_keys)` (for vector interpolation) applies spline regression to each two continuous points whose x values are`base_keys` and whose y values are `base_values`. -Then it calculates interpolated values on y-axis for `query_keys` on x-axis. +`spline(base_keys, base_values, query_keys)`(ベクトル補間用)は、x値が`base_keys`で、y値が`base_values`である2つの連続点それぞれにスプライン回帰を適用します。 +その後、x軸の`query_keys`に対してy軸の補間値を計算します。 -### Evaluation of calculation cost +### 計算コストの評価 -We evaluated calculation cost of spline interpolation for 100 points, and adopted the best one which is tridiagonal matrix algorithm. -Methods except for tridiagonal matrix algorithm exists in `spline_interpolation` package, which has been removed from Autoware. +100点に対するスプライン補間の計算コストを評価し、3対角行列アルゴリズムという最良のものを採用しました。 +3対角行列アルゴリズム以外の方法は`spline_interpolation`パッケージに存在しますが、Autowareからは削除されています。 -| Method | Calculation time | +| 手法 | 計算時間 | | --------------------------------- | ---------------- | -| Tridiagonal Matrix Algorithm | 0.007 [ms] | -| Preconditioned Conjugate Gradient | 0.024 [ms] | -| Successive Over-Relaxation | 0.074 [ms] | +| 三対角行列アルゴリズム | 0.007 [ms] | +| 前処理共役勾配法 | 0.024 [ms] | +| 逐次過剰緩和法 | 0.074 [ms] | -### Spline Interpolation Algorithm +### スプライン補間アルゴリズム -Assuming that the size of `base_keys` ($x_i$) and `base_values` ($y_i$) are $N + 1$, we aim to calculate spline interpolation with the following equation to interpolate between $y_i$ and $y_{i+1}$. +`base_keys` ($x_i$) と `base_values` ($y_i$) のサイズが $N + 1$ であると仮定すると、以下の式でスプライン補間を計算し、$y_i$ と $y_{i+1}$ の間に補間します。 $$ Y_i(x) = a_i (x - x_i)^3 + b_i (x - x_i)^2 + c_i (x - x_i) + d_i \ \ \ (i = 0, \dots, N-1) $$ -Constraints on spline interpolation are as follows. -The number of constraints is $4N$, which is equal to the number of variables of spline interpolation. +スプライン補間の制約条件は以下のとおりです。制約条件の数は $4N$ であり、これはスプライン補間の変数の数と等しいです。 $$ \begin{align} @@ -48,7 +47,7 @@ Y''_{N-1} (x_N) & = 0 \end{align} $$ -According to [this article](https://www.mk-mode.com/rails/docs/INTERPOLATION_SPLINE.pdf), spline interpolation is formulated as the following linear equation. +[この記事](https://www.mk-mode.com/rails/docs/INTERPOLATION_SPLINE.pdf) によると、スプライン補間は次の線形方程式として定式化されます。 $$ \begin{align} @@ -67,7 +66,7 @@ $$ \end{align} $$ -where +ここで、 $$ \begin{align} @@ -76,22 +75,21 @@ w_i & = 6 \left(\frac{y_{i+1} - y_{i+1}}{h_i} - \frac{y_i - y_{i-1}}{h_{i-1}}\ri \end{align} $$ -The coefficient matrix of this linear equation is tridiagonal matrix. Therefore, it can be solve with tridiagonal matrix algorithm, which can solve linear equations without gradient descent methods. +この線形方程式の係数行列は三対角行列です。そのため、降下勾配法を使用せずに線形方程式を解くことができる三対角行列アルゴリズムで解くことができます。 -Solving this linear equation with tridiagonal matrix algorithm, we can calculate coefficients of spline interpolation as follows. +三対角行列アルゴリズムを使用してこの線形方程式を解くと、スプライン補間の係数を次のように計算できます。 $$ \begin{align} a_i & = \frac{v_{i+1} - v_i}{6 (x_{i+1} - x_i)} \ \ \ (i = 0, \dots, N-1) \\ b_i & = \frac{v_i}{2} \ \ \ (i = 0, \dots, N-1) \\ c_i & = \frac{y_{i+1} - y_i}{x_{i+1} - x_i} - \frac{1}{6}(x_{i+1} - x_i)(2 v_i + v_{i+1}) \ \ \ (i = 0, \dots, N-1) \\ -d_i & = y_i \ \ \ (i = 0, \dots, N-1) \end{align} $$ -### Tridiagonal Matrix Algorithm +### 三対角行列アルゴリズム -We solve tridiagonal linear equation according to [this article](https://www.iist.ac.in/sites/default/files/people/tdma.pdf) where variables of linear equation are expressed as follows in the implementation. +線形方程式は[こちら](https://www.iist.ac.in/sites/default/files/people/tdma.pdf)の記事に従い、三対角行列アルゴリズムで解いていきます。実装上は、線形方程式の変数は以下のようになります。 $$ \begin{align} @@ -107,3 +105,4 @@ x = \end{pmatrix} \end{align} $$ + diff --git a/common/autoware_kalman_filter/README.md b/common/autoware_kalman_filter/README.md index 7c0feb9c2a61a..921f5dd086956 100644 --- a/common/autoware_kalman_filter/README.md +++ b/common/autoware_kalman_filter/README.md @@ -1,9 +1,10 @@ # kalman_filter -## Purpose +## 目的 -This common package contains the kalman filter with time delay and the calculation of the kalman filter. +この共通パッケージには、時差付きカルマンフィルタとカルマンフィルの計算が含まれます。 -## Assumptions / Known limits +## 想定 / 既知の制限 TBD. + diff --git a/common/autoware_motion_utils/README.md b/common/autoware_motion_utils/README.md index 993ec7a3ea7c3..8a7c744edd44d 100644 --- a/common/autoware_motion_utils/README.md +++ b/common/autoware_motion_utils/README.md @@ -1,24 +1,25 @@ -# Motion Utils package +# モーションユーティリティパッケージ -## Definition of terms +## 用語の定義 -### Segment +### セグメント -`Segment` in Autoware is the line segment between two successive points as follows. +Autowareにおける`セグメント`は、次のような2つの連続したポイント間の線分です。 ![segment](./media/segment.svg){: style="width:600px"} -The nearest segment index and nearest point index to a certain position is not always th same. -Therefore, we prepare two different utility functions to calculate a nearest index for points and segments. +特定の位置に対する最近接セグメントインデックスと最近接ポイントインデックスは、常に同じではありません。 +そのため、ポイントとセグメントの最近接インデックスを計算するための2つの異なるユーティリティ関数を用意しています。 -## Nearest index search +## 最近接インデックス検索 -In this section, the nearest index and nearest segment index search is explained. +このセクションでは、最近接インデックス検索と最近接セグメントインデックス検索について説明します。 -We have the same functions for the nearest index search and nearest segment index search. -Taking for the example the nearest index search, we have two types of functions. +最近接インデックス検索と最近接セグメントインデックス検索には同じ関数を使用します。 +最も近いインデックス検索の例を挙げると、2種類の関数があります。 + +最初の関数は、距離とヨーのしきい値を使用して最近接インデックスを見つけるものです。 -The first function finds the nearest index with distance and yaw thresholds. ```cpp template @@ -28,22 +29,22 @@ size_t findFirstNearestIndexWithSoftConstraints( const double yaw_threshold = std::numeric_limits::max()); ``` -This function finds the first local solution within thresholds. -The reason to find the first local one is to deal with some edge cases explained in the next subsection. +この関数はしきい値内の最初のローカルソリューションを求めます。最初のローカルソリューションを求める理由は、次の小節で説明するエッジケースを処理するためです。 + +しきい値引数にはデフォルトのパラメータがあるので、関数の呼び出し時にどのしきい値を渡すかを決定できます。 -There are default parameters for thresholds arguments so that you can decide which thresholds to pass to the function. +1. 距離とヨーの両方のしきい値が指定されている場合 + - まず、距離とヨーの両方のしきい値を持つ最も近いインデックスを見つけようとします。 + - 見つからない場合、距離のしきい値のみで再度見つけようとします。 + - 見つからない場合、しきい値なしで見つけます。 +2. 距離のみが指定されている場合 + - まず、距離のしきい値を持つ最も近いインデックスを見つけようとします。 + - 見つからない場合、しきい値なしで見つけます。 +3. しきい値が指定されていない場合 + - 最も近いインデックスを見つけます。 -1. When both the distance and yaw thresholds are given. - - First, try to find the nearest index with both the distance and yaw thresholds. - - If not found, try to find again with only the distance threshold. - - If not found, find without any thresholds. -2. When only distance are given. - - First, try to find the nearest index the distance threshold. - - If not found, find without any thresholds. -3. When no thresholds are given. - - Find the nearest index. +2 番目の関数は、`lane_id`であるレーンの最も近いインデックスを見付けます。 -The second function finds the nearest index in the lane whose id is `lane_id`. ```cpp size_t findNearestIndexFromLaneId( @@ -51,45 +52,48 @@ size_t findNearestIndexFromLaneId( const geometry_msgs::msg::Point & pos, const int64_t lane_id); ``` -### Application to various object +### さまざまなオブジェクトへの適用 -Many node packages often calculate the nearest index of objects. -We will explain the recommended method to calculate it. +多くのノードパッケージは、オブジェクトの最近接インデックスを計算することがよくあります。 +推奨される計算方法について説明します。 -#### Nearest index for the ego +#### 自車に対する最近接インデックス -Assuming that the path length before the ego is short enough, we expect to find the correct nearest index in the following edge cases by `findFirstNearestIndexWithSoftConstraints` with both distance and yaw thresholds. -Blue circles describes the distance threshold from the base link position and two blue lines describe the yaw threshold against the base link orientation. -Among points in these cases, the correct nearest point which is red can be found. +自車の前方のパス長が十分に短い場合、距離とヨー角の両方の閾値を使用して`findFirstNearestIndexWithSoftConstraints`を使用して、次のエッジケースで正しい最近接インデックスが得られることが期待されます。 +青い円は、ベースリンク位置からの距離閾値を表し、2つの青い線はベースリンクの向きに対してヨー角の閾値を表します。 +これらのケース内の点の中で、赤い正しい最近接点が検出できます。 ![ego_nearest_search](./media/ego_nearest_search.svg) -Therefore, the implementation is as follows. +したがって、実装は以下のようになります。 + ```cpp const size_t ego_nearest_idx = findFirstNearestIndexWithSoftConstraints(points, ego_pose, ego_nearest_dist_threshold, ego_nearest_yaw_threshold); const size_t ego_nearest_seg_idx = findFirstNearestIndexWithSoftConstraints(points, ego_pose, ego_nearest_dist_threshold, ego_nearest_yaw_threshold); ``` -#### Nearest index for dynamic objects +#### 動的オブジェクトの nearest index -For the ego nearest index, the orientation is considered in addition to the position since the ego is supposed to follow the points. -However, for the dynamic objects (e.g., predicted object), sometimes its orientation may be different from the points order, e.g. the dynamic object driving backward although the ego is driving forward. +エゴの nearest index では、エゴが点に従うことが想定されるため、位置に加えて向きも考慮されます。 +ただし、動的オブジェクト (たとえば、予測オブジェクト) の場合、動的オブジェクトが後退していても、エゴが前進していても、オブジェクトの向きが点の順序と異なる場合があります。 + +したがって、動的オブジェクトではヨー閾値は考慮されるべきではありません。 +実装は次のようになります。 -Therefore, the yaw threshold should not be considered for the dynamic object. -The implementation is as follows. ```cpp const size_t dynamic_obj_nearest_idx = findFirstNearestIndexWithSoftConstraints(points, dynamic_obj_pose, dynamic_obj_nearest_dist_threshold); const size_t dynamic_obj_nearest_seg_idx = findFirstNearestIndexWithSoftConstraints(points, dynamic_obj_pose, dynamic_obj_nearest_dist_threshold); ``` -#### Nearest index for traffic objects +#### 交通対象の最近インデックス + +Laneletマップでは、交通対象は特定のレーンに属しています。 +この特定のレーンのIDにより、正しい最近インデックスを検索できます。 -In lanelet maps, traffic objects belong to the specific lane. -With this specific lane's id, the correct nearest index can be found. +実装方法は次のとおりです。 -The implementation is as follows. ```cpp // first extract `lane_id` which the traffic object belong to. @@ -97,8 +101,9 @@ const size_t traffic_obj_nearest_idx = findNearestIndexFromLaneId(path_with_lane const size_t traffic_obj_nearest_seg_idx = findNearestSegmentIndexFromLaneId(path_with_lane_id, traffic_obj_pos, lane_id); ``` -## For developers +## 開発者向け + +`trajectory.hpp` の一部テンプレート関数は、主に特定の型 (`autoware_planning_msgs::msg::PathPoint`, `autoware_planning_msgs::msg::PathPoint`, `autoware_planning_msgs::msg::TrajectoryPoint`) で使用されるため、コンパイル時間を短縮するために `extern template` 関数としてエクスポートされています。 -Some of the template functions in `trajectory.hpp` are mostly used for specific types (`autoware_planning_msgs::msg::PathPoint`, `autoware_planning_msgs::msg::PathPoint`, `autoware_planning_msgs::msg::TrajectoryPoint`), so they are exported as `extern template` functions to speed-up compilation time. +`autoware_motion_utils.hpp` ヘッダーファイルは、このファイルを直接/間接的に含むソースファイルがプリプロセスに時間がかかったため削除されました。 -`autoware_motion_utils.hpp` header file was removed because the source files that directly/indirectly include this file took a long time for preprocessing. diff --git a/common/autoware_object_recognition_utils/README.md b/common/autoware_object_recognition_utils/README.md index 8d4eabd19c76d..b3d12dc62e9ce 100644 --- a/common/autoware_object_recognition_utils/README.md +++ b/common/autoware_object_recognition_utils/README.md @@ -1,6 +1,8 @@ # autoware_object_recognition_utils -## Purpose +## 目的 + +このパッケージには、オブジェクト認識モジュール全体に有用な共通関数のライブラリが含まれています。 + +このパッケージには、さまざまなデータ型、メッセージ型間の相互変換や、それらに対する一般的な操作の実行を行う関数が含まれる場合があります。 -This package contains a library of common functions that are useful across the object recognition module. -This package may include functions for converting between different data types, msg types, and performing common operations on them. diff --git a/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md b/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md index 3a4040a7065d0..6ec60efb8729f 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md +++ b/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md @@ -1,35 +1,36 @@ # autoware_mission_details_overlay_rviz_plugin -This RViz plugin displays the remaining distance and time for the current mission. +このRVizプラグインは、現在のミッションの残り距離と時間を表示します。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------- | -| `/planning/mission_remaining_distance_time` | `autoware_planning_msgs::msg::MissionRemainingDistanceTime` | The topic is for mission remaining distance and time | +| 名称 | 種類 | 説明 | +| ------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------ | +| `/planning/mission_remaining_distance_time` | `autoware_planning_msgs::msg::MissionRemainingDistanceTime` | ミッションの残り距離と時間を表すトピック | -## Overlay Parameters +## オーバーレイパラメータ -| Name | Type | Default Value | Description | +| 名前 | タイプ | デフォルト値 | 説明 | | -------- | ---- | ------------- | --------------------------------- | -| `Width` | int | 170 | Width of the overlay [px] | -| `Height` | int | 100 | Height of the overlay [px] | -| `Right` | int | 10 | Margin from the right border [px] | -| `Top` | int | 10 | Margin from the top border [px] | +| `Width` | int | 170 | オーバーレイの幅 [`px`] | +| `Height` | int | 100 | オーバーレイの高さ [`px`] | +| `Right` | int | 10 | 右端からの余白 [`px`] | +| `Top` | int | 10 | 上端からの余白 [`px`] | -The mission details display is aligned with top right corner of the screen. +ミッションの詳細表示は、画面の右上に配置されています。 -## Usage +## 使用方法 -Similar to [autoware_overlay_rviz_plugin](../autoware_overlay_rviz_plugin/README.md) +[autoware_overlay_rviz_plugin](../autoware_overlay_rviz_plugin/README.md)に似ています。 -## Credits +## クレジット -Based on the [jsk_visualization](https://github.com/jsk-ros-pkg/jsk_visualization) package. +[jsk_visualization](https://github.com/jsk-ros-pkg/jsk_visualization)パッケージをベースにしています。 -### Icons +### アイコン - - + diff --git a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md index 943d566ad109c..6f3313ddfa8b2 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md +++ b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md @@ -1,54 +1,55 @@ # autoware_overlay_rviz_plugin -Plugin for displaying 2D overlays over the RViz2 3D scene. +RViz2の3Dシーン上に2Dオーバーレイを表示するためのプラグイン。 -Based on the [jsk_visualization](https://github.com/jsk-ros-pkg/jsk_visualization) -package, under the 3-Clause BSD license. +[jsk_visualization](https://github.com/jsk-ros-pkg/jsk_visualization) +パッケージをベースとしており、3条項BSDライセンスに従っています。 -## Purpose +## 目的 -This plugin provides a visual and easy-to-understand display of vehicle speed, turn signal, steering status and gears. +このプラグインは、車両速度、ウィンカー、ステアリング状態、ギアの視覚的かつわかりやすい表示を提供します。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------ | -| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | The topic is vehicle velocity | -| `/vehicle/status/turn_indicators_status` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | The topic is status of turn signal | -| `/vehicle/status/hazard_status` | `autoware_vehicle_msgs::msg::HazardReport` | The topic is status of hazard | -| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | The topic is status of steering | -| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | The topic is status of gear | -| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | The topic is velocity limit | -| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | The topic is status of traffic light | +| 名前 | 種類 | 説明 | +| -------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------- | +| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両速度のトピック | +| `/vehicle/status/turn_indicators_status` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ウインカーの状態のトピック | +| `/vehicle/status/hazard_status` | `autoware_vehicle_msgs::msg::HazardReport` | ハザードランプの状態のトピック | +| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングの状態のトピック | +| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアのステータスに関するトピック | +| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限に関するトピック | +| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 信号機のステータスに関するトピック | -## Parameter +## パラメータ -### Core Parameters +### 中核パラメータ #### SignalDisplay -| Name | Type | Default Value | Description | +| 名称 | タイプ | デフォルト値 | 説明 | | ------------------------ | ------ | -------------------- | --------------------------------- | -| `property_width_` | int | 128 | Width of the plotter window [px] | -| `property_height_` | int | 128 | Height of the plotter window [px] | -| `property_left_` | int | 128 | Left of the plotter window [px] | -| `property_top_` | int | 128 | Top of the plotter window [px] | -| `property_signal_color_` | QColor | QColor(25, 255, 240) | Turn Signal color | +| `property_width_` | int | 128 | プロッターウィンドウの幅 [px] | +| `property_height_` | int | 128 | プロッターウィンドウの高さ [px] | +| `property_left_` | int | 128 | プロッターウィンドウの左 [px] | +| `property_top_` | int | 128 | プロッターウィンドウの上 [px] | +| `property_signal_color_` | QColor | QColor(25, 255, 240) | ターンシグナルの色 | -## Assumptions / Known limits +## 前提条件 / 制約 TBD. -## Usage +## 使用法 -1. Start `rviz2` and click `Add` button under the `Displays` panel. +1. `rviz2`を起動し、`Displays`パネルの`追加`ボタンをクリックします。 ![select_add](./assets/images/select_add.png) -2. Under `By display type` tab, select `autoware_overlay_rviz_plugin/SignalDisplay` and press OK. +2. `By display type`タブで、`autoware_overlay_rviz_plugin/SignalDisplay`を選択し、OKを押します。 -3. Enter the names of the topics if necessary. +3. 必要に応じて、トピックの名前を入力します。 ![select_topic_name](./assets/images/select_topic_name.png) + diff --git a/common/autoware_perception_rviz_plugin/README.md b/common/autoware_perception_rviz_plugin/README.md index ed6f3e1675ace..318dd9534e39d 100644 --- a/common/autoware_perception_rviz_plugin/README.md +++ b/common/autoware_perception_rviz_plugin/README.md @@ -1,62 +1,246 @@ # autoware_perception_rviz_plugin -## Purpose +## 目的 -It is an rviz plugin for visualizing the result from perception module. This package is based on the implementation of the rviz plugin developed by Autoware.Auto. +認識モジュールからの結果を可視化するためのrvizプラグインです。このパッケージは、Autoware.Autoによって開発されたrvizプラグインの実装をベースにしています。 -See Autoware.Auto design documentation for the original design philosophy. [[1]](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/src/tools/visualization/autoware_rviz_plugins) +元の設計思想については、Autoware.Auto設計ドキュメントを参照してください。[[1]](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/src/tools/visualization/autoware_rviz_plugins) - -## Input Types / Visualization Results +## 入力タイプ / 可視化結果 -### DetectedObjects +### 検出された物体 + +#### 入力タイプ +- `AutowareAuto::DetectedObject` + +#### Visualized Result +- `rviz::MarkerArray` + +### LandMarks #### Input Types +- `AutowareAuto::LandMark` -| Name | Type | Description | -| ---- | ------------------------------------------------ | ---------------------- | -| | `autoware_perception_msgs::msg::DetectedObjects` | detection result array | +#### Visualized Result +- `rviz::MarkerArray` -#### Visualization Result +### PointClouds -![detected-object-visualization-description](./images/detected-object-visualization-description.jpg) +#### Input Types +- `AutowareAuto::PointCloud` +- `AutowareAuto::LidarPointCloud` +- `AutowareAuto::CameraPointCloud` +- `AutowareAuto::PointCloud2` + +#### Visualized Result +- `sensor_msgs::PointCloud2` + +### TrackingObjects + +#### Input Types +- `AutowareAuto::TrackedObject` + +#### Visualized Result +- `rviz::MarkerArray` -### TrackedObjects +### TrafficLights #### Input Types +- `AutowareAuto::TrafficLight` + +#### Visualized Result +- `rviz::MarkerArray` + +### Planning (optional) + +#### Input Types +- `AutowareAuto::Trajectory` + +#### Visualized Result +- `rviz::MarkerArray` + +## Configuration + +### AutowareAuto::DetectedObjects + +- `Topic Name`: The topic name of the `AutowareAuto::DetectedObject` message received by the plugin. + +- `Marker Scale`: The scale of the marker. + +- `Marker Lifetime`: The lifetime of the marker in seconds. + +- `Marker Alpha`: The alpha value of the marker. + +- `Marker Color`: The color of the marker. + +- `Ground Truth Marker Enabled`: Enable/disable the display of ground truth marker. + +- `Measured Marker Enabled`: Enable/disable the display of measured marker. + +- `Ground Truth Color`: The color of the ground truth marker. + +- `Measured Color`: The color of the measured marker. + +### LandMarks + +- `Topic Name`: The topic name of the `AutowareAuto::LandMark` message received by the plugin. + +- `Marker Scale`: The scale of the marker. + +- `Marker Lifetime`: The lifetime of the marker in seconds. + +- `Marker Alpha`: The alpha value of the marker. + +- `Marker Color`: The color of the marker. + +### PointClouds + +- `Topic Name`: The topic name of the `AutowareAuto::PointCloud` message received by the plugin. + +- `Show Color`: Enable/disable the display of the point cloud with color information. + +- `Color Attribute`: The attribute name of the color information. + +- `Normalize Color`: Enable/disable the normalization of the color information. + +- `Min Intensity`: The minimum intensity threshold for displaying the point cloud. -| Name | Type | Description | -| ---- | ----------------------------------------------- | --------------------- | -| | `autoware_perception_msgs::msg::TrackedObjects` | tracking result array | +- `Max Intensity`: The maximum intensity threshold for displaying the point cloud. -#### Visualization Result +### TrackingObjects -Overwrite tracking results with detection results. +- `Topic Name`: The topic name of the `AutowareAuto::TrackedObject` message received by the plugin. + +- `Marker Scale`: The scale of the marker. + +- `Marker Lifetime`: The lifetime of the marker in seconds. + +- `Marker Alpha`: The alpha value of the marker. + +- `Marker Color`: The color of the marker. + +### TrafficLights + +- `Topic Name`: The topic name of the `AutowareAuto::TrafficLight` message received by the plugin. + +- `Marker Scale`: The scale of the marker. + +- `Marker Lifetime`: The lifetime of the marker in seconds. + +- `Marker Alpha`: The alpha value of the marker. + +- `Marker Color`: The color of the marker. + +### Planning + +- `Topic Name`: The topic name of the `AutowareAuto::Trajectory` message received by the plugin. + +- `Marker Scale`: The scale of the marker. + +- `Marker Lifetime`: The lifetime of the marker in seconds. + +- `Marker Alpha`: The alpha value of the marker. + +- `Marker Color`: The color of the marker. +- `Show Reference Trajectory`: Enable/disable the display of the reference trajectory. +- `Show Prediction Trajectory`: Enable/disable the display of the prediction trajectory. +- `Show Planning Trajectory`: Enable/disable the display of the planning trajectory. +- `Show Predicted Obstacle Trajectory`: Enable/disable the display of the predicted obstacle trajectory. +- `Show Sensor Predicted Obstacle`: Enable/disable the display of the sensor predicted obstacle. +- `Show Speed Profile`: Enable/disable the display of the speed profile. +- `Show Lateral Speed Profile`: Enable/disable the display of the lateral speed profile. +- `Show Longitudinal Speed Profile`: Enable/disable the display of the longitudinal speed profile. +- `Show Selected Motion Plan`: Enable/disable the display of the selected motion plan. +- `Show Goal Pose`: Enable/disable the display of the goal pose. +- `Prediction Trajectory Duration`: The duration of the prediction trajectory in seconds. +- `Planning Trajectory Duration`: The duration of the planning trajectory in seconds. +- `Reference Trajectory Duration`: The duration of the reference trajectory in seconds. +- `Reference Velocity`: The velocity of the reference trajectory in meters per second. +- `Reference Acceleration`: The acceleration of the reference trajectory in meters per second squared. +- `Reference Jerk`: The jerk of the reference trajectory in meters per second cubed. +- `Max Velocity Violation (m/s)`: The maximum velocity逸脱量 in meters per second. +- `Max Lateral Acceleration Violation (m/s^2)`: The maximum lateral acceleration逸脱量 in meters per second squared. +- `Max Longitudinal Acceleration Violation (m/s^2)`: The maximum longitudinal acceleration逸脱量 in meters per second squared. +- `Max Jerk Violation (m/s^3)`: The maximum jerk逸脱量 in meters per second cubed. +- `Max Curvature Violation (1/m)`: The maximum curvature逸脱量 in inverse meters. +- `Additional Moving Obstacle`: The path of an additional moving obstacle for planning. +- `Initial Distance to Moving Obstacle`: The initial distance to the moving obstacle in meters. +- `Perception Planning Horizon`: The perception planning horizon. +- `Sensor Planning Horizon`: The sensor planning horizon. +- `Topic Name`: The topic name of the selected motion plan. + +### Planned Path Optimization (optional) + +- `Topic Name`: The topic name of the `autoware_planning_msgs::PlannedPathOptimization` message received by the plugin. + +- `Marker Scale`: The scale of the marker. + +- `Marker Lifetime`: The lifetime of the marker in seconds. + +- `Marker Alpha`: The alpha value of the marker. + +- `Marker Color`: The color of the marker. + +- `Optimization Success Marker Color`: The color of the optimization success marker. + +- `Optimization Failure Marker Color`: The color of the optimization failure marker. + +## Usage + +``` +rviz +``` + +``` +roslaunch autoware_perception_rviz_plugin autoware_perception_rviz_plugin.launch +``` + +| 名称 | タイプ | 説明 | +| ---------- | ------------------------------------------------ | ---------------------- | +| | `autoware_perception_msgs::msg::DetectedObjects` | 検出結果配列 | + +#### 可視化結果 + +![detected-object-visualization-description](./images/detected-object-visualization-description.jpg) + +### トラッキングされたオブジェクト + +#### 入力タイプ + +| 名称 | タイプ | 説明 | +|---|---|---| +| | `autoware_perception_msgs::msg::TrackedObjects` | 追跡結果の配列 | + +#### 可視化結果 + +検出結果で追跡結果を上書きします。 ![tracked-object-visualization-description](./images/tracked-object-visualization-description.jpg) ### PredictedObjects -#### Input Types +#### 入力タイプ -| Name | Type | Description | -| ---- | ------------------------------------------------- | ----------------------- | -| | `autoware_perception_msgs::msg::PredictedObjects` | prediction result array | +| 名前 | 種別 | 説明 | +| ---- | ------------------------------------------------- | ------------------------- | +| | `autoware_perception_msgs::msg::PredictedObjects` | prediction結果配列 | -#### Visualization Result +#### 可視化結果 -Overwrite prediction results with tracking results. +追跡結果を予測結果で上書きします。 ![predicted-object-visualization-description](./images/predicted-object-visualization-description.jpg) -## References/External links +## 参照/外部リンク [1] -## Future extensions / Unimplemented parts +## 今後の拡張/未実装部分 + diff --git a/common/autoware_point_types/README.md b/common/autoware_point_types/README.md index 92f19d2bc353a..e6a9baa18431e 100644 --- a/common/autoware_point_types/README.md +++ b/common/autoware_point_types/README.md @@ -1 +1,123 @@ -# Autoware Point Types +## Autoware Point Type + +### 'Sensor Measurements'ポイントタイプ + +#### 'Radar Point' + +- センサーからのレーダー測定 +- 座標系: センサー座標系 +- フィールド: + - `id`: 整数 + - `meas_time`: タイムスタンプ (sec, nanosec) + - `range`: 測定対象物までの距離 (m) + - `range_stddev`: 距離の標準偏差 (m) + - `azimuth`: 測定対象物までの方位角 (rad) + - `azimuth_stddev`: 方位角の標準偏差 (rad) + - `elevation`: 測定対象物までの仰角 (rad) + - `elevation_stddev`: 仰角の標準偏差 (rad) + - `vx`: 測定対象物の速度 (m/s) + - `vx_stddev`: 速度の標準偏差 (m/s) + +#### 'Camera Point' + +- センサーからのカメラ測定 +- 座標系: カメラ座標系 +- フィールド: + - `id`: 整数 + - `meas_time`: タイムスタンプ (sec, nanosec) + - `x`: 測定対象物のx座標 (pixel) + - `y`: 測定対象物のy座標 (pixel) + - `width`: 測定対象物の幅 (pixel) + - `height`: 測定対象物の高さ (pixel) + - `orientation`: 測定対象物の向き (rad) + - `object_type`: 測定対象物のタイプ (車, 歩行者, 自転車など) + +#### 'Lidar Point' + +- センサーからのLiDAR測定 +- 座標系: LiDAR座標系 +- フィールド: + - `id`: 整数 + - `meas_time`: タイムスタンプ (sec, nanosec) + - `x`: 測定対象物のx座標 (m) + - `y`: 測定対象物のy座標 (m) + - `z`: 測定対象物のz座標 (m) + - `intensity`: 測定対象物の反射強度 + - `ring`: 測定対象物のLiDARスキャンラインの番号 + +### 'Prediction'ポイントタイプ + +#### 'Predicted Object' + +- Planningコンポーネントによる予測された測定対象物 +- 座標系: 世界座標系 +- フィールド: + - `id`: 整数 + - `pred_time`: 予測されたタイムスタンプ (sec, nanosec) + - `x`: 予測された測定対象物のx座標 (m) + - `y`: 予測された測定対象物のy座標 (m) + - `z`: 予測された測定対象物のz座標 (m) + - `x_stddev`: 予測された測定対象物のx座標の標準偏差 (m) + - `y_stddev`: 予測された測定対象物のy座標の標準偏差 (m) + - `z_stddev`: 予測された測定対象物のz座標の標準偏差 (m) + - `vx`: 予測された測定対象物の速度 (m/s) + - `vy`: 予測された測定対象物の速度 (m/s) + - `vz`: 予測された測定対象物の速度 (m/s) + - `yaw`: 予測された測定対象物の向き (rad) + - `yaw_stddev`: 予測された測定対象物の向きの標準偏差 (rad) + - `length`: 予測された測定対象物の長さ (m) + - `width`: 予測された測定対象物の幅 (m) + - `height`: 予測された測定対象物の高さ (m) + - `object_type`: 予測された測定対象物のタイプ (車, 歩行者, 自転車など) + - `existence_probability`: 予測された測定対象物の存在確率 + +### 'Trajectory'ポイントタイプ + +#### 'Predicted Trajectory' + +- Planningコンポーネントによる予測パス +- 座標系: 世界座標系 +- フィールド: + - `id`: 整数 + - `start_time`: パスの開始時刻 (sec, nanosec) + - `points`: `'Predicted Object'`ポイントの配列 + +#### 'Ego Vehicle Motion' + +- Planningコンポーネントによる自車位置の予測 +- 座標系: 世界座標系 +- フィールド: + - `id`: 整数 + - `meas_time`: タイムスタンプ (sec, nanosec) + - `x`: 予測された自車位置x座標 (m) + - `y`: 予測された自車位置y座標 (m) + - `z`: 予測された自車位置z座標 (m) + - `yaw`: 予測された自車位置の向き (rad) + - `vx`: 予測された自車速度 (m/s) + - `vy`: 予測された自車速度 (m/s) + - `vz`: 予測された自車速度 (m/s) + +### 'Control'ポイントタイプ + +#### 'Control Command' + +- PlanningコンポーネントからControlコンポーネントへの制御コマンド +- 座標系: 世界座標系 +- フィールド: + - `id`: 整数 + - `meas_time`: タイムスタンプ (sec, nanosec) + - `acceleration`: 要求される加速度 (m/s²) + - `steering_angle`: 要求される操舵角 (rad) + - `velocity`: 要求される速度 (m/s) + - `acceleration_limit`: 加速度制限 (m/s²) + - `steering_angle_limit`: 操舵角制限 (rad) + - `velocity_limit`: 速度制限 (m/s) + - `v_longitudinal_ jerk_limit`: 縦加速度逸脱量制限 (m/s³) + - `v_lateral_ jerk_limit`: 横加速度逸脱量制限 (m/s³) + - `steer_jerk_limit`: 操舵角逸脱量制限 (rad/s³) + - `max_deceleration`: 最大減速度 (m/s²) + - `min_deceleration`: 最小減速度 (m/s²) + - `max_lateral_acceleration`: 最大横加速度 (m/s²) + - `max_steer_acceleration`: 最大操舵角加速度 (m/s²) + - `max_steer_angle_rate`: 最大操舵角速度 (rad/s) + diff --git a/common/autoware_signal_processing/README.md b/common/autoware_signal_processing/README.md index 5f7aaa978ed6d..e8b1281ef865b 100644 --- a/common/autoware_signal_processing/README.md +++ b/common/autoware_signal_processing/README.md @@ -1,13 +1,13 @@ -# Signal Processing Methods +# 信号処理手法 -In this package, we present signal processing related methods for the Autoware applications. The following -functionalities are available in the current version. +本パッケージでは、Autowareアプリケーション向けの信号処理関連の手法を紹介しています。現在のバージョンでは、以下の機能が利用できます。 -- an 1-D Low-pass filter, -- [Butterworth low-pass filter tools.](documentation/ButterworthFilter.md) +- 1次元ローパスフィルタ +- [バターワースローパスフィルタツール](documentation/ButterworthFilter.md) -low-pass filter currently supports only the 1-D low pass filtering. +ローパスフィルタは現在、1次元ローパスフィルタリングのみをサポートしています。 -## Assumptions / Known limits +## 想定 / 既知の制限 + +未定です。 -TBD. diff --git a/common/autoware_test_utils/README.md b/common/autoware_test_utils/README.md index 57e065c154c8f..a7edb06217cdf 100644 --- a/common/autoware_test_utils/README.md +++ b/common/autoware_test_utils/README.md @@ -1,74 +1,110 @@ -# Test Utils +# テストユーティリティ -## Background +## 背景 -Several Autoware's components and modules have already adopted unit testing, so a common library to ease the process of writing unit tests is necessary. +Autowareのいくつかのコンポーネント・モジュールに既に単体テストが導入されており、単体テストの記述プロセスを容易にする共通ライブラリが必要です。 -## Purpose +## 目的 -The objective of the `test_utils` is to develop a unit testing library for the Autoware components. This library will include +`test_utils`の目的は、Autowareコンポーネント用の単体テストライブラリの開発です。このライブラリには以下が含まれます。 -- commonly used functions -- input/mock data parser -- maps for testing -- common routes and mock data for testing. +- 一般的に使用される関数 +- 入力/モックデータパーサー +- テスト用のマップ +- 一般的な経路およびテスト用モックデータ -## Available Maps +## 利用可能なマップ -The following maps are available [here](https://github.com/autowarefoundation/autoware.universe/tree/main/common/autoware_test_utils/test_map) +次のマップは[こちら](https://github.com/autowarefoundation/autoware.universe/tree/main/common/autoware_test_utils/test_map)で利用できます。 ### Common -The common map contains multiple types of usable inputs, including shoulder lanes, intersections, and some regulatory elements. The common map is named `lanelet2_map.osm` in the folder. +共通マップには、肩レーン、交差点、いくつかの規制要素など、使用可能なさまざまなタイプの入力が含まれています。共通マップはフォルダー内で`lanelet2_map.osm`という名前です。 ![common](./images/common.png) ### 2 km Straight -The 2 km straight lanelet map consists of two lanes that run in the same direction. The map is named `2km_test.osm`. +2 km直線レーンレットマップは、同じ方向に走る2つの車線で構成されています。マップは`2km_test.osm`という名前です。 ![two_km](./images/2km-test.png) -The following illustrates the design of the map. +以下にマップの設計を示します。 ![straight_diagram](./images/2km-test.svg) ### road_shoulders -The road_shoulders lanelet map consist of a variety of pick-up/drop-off site maps with road_shoulder tags including: +road_shouldersレーンレットマップは、次のようなroad_shoulderタグが付いたさまざまなピックアップ/ドロップオフサイトマップで構成されています。 -- pick-up/drop-off sites on the side of street lanes -- pick-up/drop-off sites on the side of curved lanes -- pick-up/drop-off sites inside a private area +- 側道車線の横にあるピックアップ/ドロップオフサイト +- 曲線車線の横にあるピックアップ/ドロップオフサイト +- 私有区域内のピックアップ/ドロップオフサイト ![road_shoulder_test](./images/road_shoulder_test_map.png) -You can easily launch planning_simulator by +planning_simulatorを次のように簡単に起動できます。 + ```bash ros2 launch autoware_test_utils psim_road_shoulder.launch.xml vehicle_model:=<> sensor_model:=<> use_sim_time:=true ``` -### intersection +### 交差点 -The intersections lanelet map consist of a variety of intersections including: +交差点のレーンレットマップには、以下を含むさまざまな交差点があります。 -- 4-way crossing with traffic light -- 4-way crossing without traffic light -- T-shape crossing without traffic light -- intersection with a loop -- complicated intersection +- 交通信号機付き4車線交差点 +- 交通信号機のない4車線交差点 +- 交通信号機のないT字路交差点 +- ループのある交差点 +- 複雑な交差点 ![intersection_test](./images/intersection_test_map.png) -You can easily launch planning_simulator by +次のようにして簡単にplanning_simulatorを起動できます + ```bash ros2 launch autoware_test_utils psim_intersection.launch.xml vehicle_model:=<> sensor_model:=<> use_sim_time:=true ``` -## Example use cases +## 使用例 ### Autoware Planning Test Manager -The goal of the [Autoware Planning Test Manager](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_planning_test_manager/) is to test planning module nodes. The `PlanningInterfaceTestManager` class ([source code](https://github.com/autowarefoundation/autoware.universe/blob/main/planning/autoware_planning_test_manager/src/autoware_planning_test_manager.cpp)) creates wrapper functions based on the `test_utils` functions. +[Autoware Planning Test Manager](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_planning_test_manager/)の目標は、Planningモジュールノードをテストすることです。 `PlanningInterfaceTestManager`クラス([ソースコード](https://github.com/autowarefoundation/autoware.universe/blob/main/planning/autoware_planning_test_manager/src/autoware_planning_test_manager.cpp))は、`test_utils`関数をベースにラッパー関数を生成します。 + +### 単体テスト用のテストデータ生成 + +[PR説明](https://github.com/autowarefoundation/autoware.universe/pull/9207)で提示されているように、ユーザーはテストマップ上でPlanning Simulationを実行中にシーンのスナップショットをyamlファイルに保存することができます。 + + +```bash +ros2 launch autoware_test_utils psim_road_shoulder.launch.xml vehicle_model:= sensor_model:= +ros2 launch autoware_test_utils psim_intersection.launch.xml vehicle_model:= sensor_model:= +``` + + +```bash +ros2 service call /autoware_test_utils/topic_snapshot_saver std_srvs/srv/Empty \{\} +``` + +トピックを保存するトピックのリストとフィールド名は、`config/sample_topic_snapshot.yaml` で指定されています。 + + +```yaml +# setting +fields: + - name: self_odometry # this is the field name for this topic + type: Odometry # the abbreviated type name of this topic + topic: /localization/kinematic_state # the name of this topic + +# output +self_odometry: + - header: ... + ... +``` + +各フィールドは、`autoware_test_utils/mock_data_parser.hpp` で定義された関数を使用して ROS メッセージタイプに解析できます。 + diff --git a/common/autoware_universe_utils/README.md b/common/autoware_universe_utils/README.md index d49fced367908..f539ab5c48fa8 100644 --- a/common/autoware_universe_utils/README.md +++ b/common/autoware_universe_utils/README.md @@ -1,12 +1,12 @@ -# autoware_universe_utils +## autoware_universe_utils -## Purpose +## 目的 -This package contains many common functions used by other packages, so please refer to them as needed. +このパッケージには、他のパッケージで一般的に使用される関数が多数含まれているため、必要に応じて参照してください。 -## For developers +## 開発者向け -`autoware_universe_utils.hpp` header file was removed because the source files that directly/indirectly include this file took a long time for preprocessing. +プリプロセスに時間がかかるため、`autoware_universe_utils.hpp` ヘッダーファイルは削除されました。 ## `autoware::universe_utils` @@ -14,49 +14,51 @@ This package contains many common functions used by other packages, so please re #### `autoware::universe_utils::TimeKeeper` -##### Constructor +##### コンストラクタ + ```cpp template explicit TimeKeeper(Reporters... reporters); ``` -- Initializes the `TimeKeeper` with a list of reporters. +- `TimeKeeper`をリポーターのリストで初期化します。 -##### Methods +##### メソッド - `void add_reporter(std::ostream * os);` - - Adds a reporter to output processing times to an `ostream`. - - `os`: Pointer to the `ostream` object. + - `ostream`に出力処理時間をレポートするリポーターを追加します。 + - `os`: `ostream`オブジェクトへのポインタ。 - `void add_reporter(rclcpp::Publisher::SharedPtr publisher);` - - Adds a reporter to publish processing times to an `rclcpp` publisher. - - `publisher`: Shared pointer to the `rclcpp` publisher. + - 処理時間を`rclcpp`パブリッシャーにパブリッシュするリポーターを追加します。 + - `publisher`: `rclcpp`パブリッシャーへの共有ポインタ。 - `void add_reporter(rclcpp::Publisher::SharedPtr publisher);` - - Adds a reporter to publish processing times to an `rclcpp` publisher with `std_msgs::msg::String`. - - `publisher`: Shared pointer to the `rclcpp` publisher. + - 処理時間を`std_msgs::msg::String`を使用した`rclcpp`パブリッシャーにパブリッシュするリポーターを追加します。 + - `publisher`: `rclcpp`パブリッシャーへの共有ポインタ。 - `void start_track(const std::string & func_name);` - - Starts tracking the processing time of a function. - - `func_name`: Name of the function to be tracked. + - 関数の処理時間を追跡し始めます。 + - `func_name`: 追跡する関数の名前。 - `void end_track(const std::string & func_name);` - - Ends tracking the processing time of a function. - - `func_name`: Name of the function to end tracking. + - 関数の処理時間の追跡を終了します。 + - `func_name`: 追跡を終了する関数の名前。 - `void comment(const std::string & comment);` - - Adds a comment to the current function being tracked. - - `comment`: Comment to be added. + - 追跡中の現在の関数にコメントを追加します。 + - `comment`: 追加するコメント。 + +##### 注釈 -##### Note +- 以下に示すように、`start_track`と`end_track`を使用して時間測定を開始および終了できます。 -- It's possible to start and end time measurements using `start_track` and `end_track` as shown below: ```cpp time_keeper.start_track("example_function"); @@ -64,9 +66,10 @@ explicit TimeKeeper(Reporters... reporters); time_keeper.end_track("example_function"); ``` -- For safety and to ensure proper tracking, it is recommended to use `ScopedTimeTrack`. +- 安全性と適切な追跡を確保するために、`ScopedTimeTrack`の使用を推奨します。 + +##### 例 -##### Example ```cpp #include @@ -138,7 +141,8 @@ int main(int argc, char ** argv) } ``` -- Output (console) +- 出力(コンソール) + ```text ========================== @@ -147,7 +151,8 @@ int main(int argc, char ** argv) └── func_c (3.055ms) : This is a comment for func_c ``` -- Output (`ros2 topic echo /processing_time`) +- 出力 (`ros2 topic echo /processing_time`) + ```text --- @@ -171,23 +176,26 @@ int main(int argc, char ** argv) #### `autoware::universe_utils::ScopedTimeTrack` -##### Description +##### 説明 + +スコープ内の関数の処理時間を自動的に追跡するためのクラスです。 -Class for automatically tracking the processing time of a function within a scope. +##### コンストラクタ -##### Constructor ```cpp ScopedTimeTrack(const std::string & func_name, TimeKeeper & time_keeper); ``` -- `func_name`: Name of the function to be tracked. -- `time_keeper`: Reference to the `TimeKeeper` object. +- `func_name`: 追跡する関数の名前。 +- `time_keeper`: `TimeKeeper` オブジェクトへの参照。 + +##### デストラクター -##### Destructor ```cpp ~ScopedTimeTrack(); ``` -- Destroys the `ScopedTimeTrack` object, ending the tracking of the function. +- `ScopedTimeTrack`オブジェクトを破壊し、関数の追跡を終了します。 + diff --git a/common/bag_time_manager_rviz_plugin/README.md b/common/bag_time_manager_rviz_plugin/README.md index 2fad6b2204bb9..7c8ce5bf85664 100644 --- a/common/bag_time_manager_rviz_plugin/README.md +++ b/common/bag_time_manager_rviz_plugin/README.md @@ -1,26 +1,27 @@ # bag_time_manager_rviz_plugin -## Purpose +## 目的 -This plugin allows publishing and controlling the ros bag time. +このプラグインは、rosバッグの時間をパブリッシュし制御します。 -## Output +## 出力 -tbd. +TBD -## HowToUse +## 使用方法 -1. Start rviz and select panels/Add new panel. +1. rvizを起動し、パネル/新しいパネルの追加を選択します。 ![select_panel](./images/select_panels.png) -2. Select BagTimeManagerPanel and press OK. +2. BagTimeManagerPanelを選択し、OKを押します。 ![select_manager_plugin](./images/add_bag_time_manager_panel.png) -3. See bag_time_manager_rviz_plugin/BagTimeManagerPanel is added. +3. bag_time_manager_rviz_plugin/BagTimeManagerPanelが追加されていることを確認します。 ![manager_plugin](./images/bag_time_manager_panel.png) -- Pause/Resume: pause/resume the clock. -- ApplyRate: apply rate of the clock. +- Pause/Resume: クロックを一時停止/再開します。 +- ApplyRate: クロックのレートを適用します。 + diff --git a/common/component_interface_utils/README.md b/common/component_interface_utils/README.md index 2a2b191c854a0..8152eedae35fc 100644 --- a/common/component_interface_utils/README.md +++ b/common/component_interface_utils/README.md @@ -1,101 +1,2 @@ -# component_interface_utils +404: Not Found -## Features - -This is a utility package that provides the following features: - -- Instantiation of the wrapper class -- Logging for service and client -- Service exception for response -- Relays for topic and service - -## Design - -This package provides the wrappers for the interface classes of rclcpp. -The wrappers limit the usage of the original class to enforce the processing recommended by the component interface. -Do not inherit the class of rclcpp, and forward or wrap the member function that is allowed to be used. - -## Instantiation of the wrapper class - -The wrapper class requires interface information in this format. - -```cpp -struct SampleService -{ - using Service = sample_msgs::srv::ServiceType; - static constexpr char name[] = "/sample/service"; -}; - -struct SampleMessage -{ - using Message = sample_msgs::msg::MessageType; - static constexpr char name[] = "/sample/message"; - static constexpr size_t depth = 1; - static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE; - static constexpr auto durability = RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL; -}; -``` - -Create the wrapper using the above definition as follows. - -```cpp -// header file -component_interface_utils::Service::SharedPtr srv_; -component_interface_utils::Client::SharedPtr cli_; -component_interface_utils::Publisher::SharedPtr pub_; -component_interface_utils::Subscription::SharedPtr sub_; - -// source file -const auto node = component_interface_utils::NodeAdaptor(this); -node.init_srv(srv_, callback); -node.init_cli(cli_); -node.init_pub(pub_); -node.init_sub(sub_, callback); -``` - -## Logging for service and client - -If the wrapper class is used, logging is automatically enabled. The log level is `RCLCPP_INFO`. - -## Service exception for response - -If the wrapper class is used and the service response has status, throwing `ServiceException` will automatically catch and set it to status. -This is useful when returning an error from a function called from the service callback. - -```cpp -void service_callback(Request req, Response res) -{ - function(); - res->status.success = true; -} - -void function() -{ - throw ServiceException(ERROR_CODE, "message"); -} -``` - -If the wrapper class is not used or the service response has no status, manually catch the `ServiceException` as follows. - -```cpp -void service_callback(Request req, Response res) -{ - try { - function(); - res->status.success = true; - } catch (const ServiceException & error) { - res->status = error.status(); - } -} -``` - -## Relays for topic and service - -There are utilities for relaying services and messages of the same type. - -```cpp -const auto node = component_interface_utils::NodeAdaptor(this); -service_callback_group_ = create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); -node.relay_message(pub_, sub_); -node.relay_service(cli_, srv_, service_callback_group_); // group is for avoiding deadlocks -``` diff --git a/common/glog_component/README.md b/common/glog_component/README.md index 94a40fe32e40d..fcb0d7e7d9354 100644 --- a/common/glog_component/README.md +++ b/common/glog_component/README.md @@ -1,12 +1,13 @@ # glog_component -This package provides the glog (google logging library) feature as a ros2 component library. This is used to dynamically load the glog feature with container. +このパッケージは、glog(Google ロギングライブラリ)機能を ros2 コンポーネントライブラリとして提供します。これを使用して、コンテナで glog 機能を動的に読み込みます。 -See the [glog github](https://github.com/google/glog) for the details of its features. +詳細な機能については [glog github](https://github.com/google/glog) を参照してください。 -## Example +## 例 + +コンテナで `glog_component` を読み込む場合、起動ファイルは以下のようになります。 -When you load the `glog_component` in container, the launch file can be like below: ```py glog_component = ComposableNode( @@ -27,3 +28,4 @@ container = ComposableNodeContainer( ], ) ``` + diff --git a/common/tier4_adapi_rviz_plugin/README.md b/common/tier4_adapi_rviz_plugin/README.md index 4056130776178..9aba8a004d036 100644 --- a/common/tier4_adapi_rviz_plugin/README.md +++ b/common/tier4_adapi_rviz_plugin/README.md @@ -2,28 +2,29 @@ ## RoutePanel -To use the panel, set the topic name from 2D Goal Pose Tool to `/rviz/routing/pose`. -By default, when a tool publish a pose, the panel immediately sets a route with that as the goal. -Enable or disable of allow_goal_modification option can be set with the check box. +パネルを使用するには、2D Goal Pose Tool のトピック名を `/rviz/routing/pose` に設定します。 +既定では、ツールがポーズを公開すると、パネルはそのポーズをゴールとするルートをすぐに設定します。 +allow_goal_modification オプションの有効化または無効化はチェックボックスで設定できます。 -Push the mode button in the waypoint to enter waypoint mode. In this mode, the pose is added to waypoints. -Press the apply button to set the route using the saved waypoints (the last one is a goal). -Reset the saved waypoints with the reset button. +ウェイポイント内のモードボタンを押してウェイポイントモードに入ります。このモードでは、ポーズがウェイポイントに追加されます。 +保存したウェイポイント (最後の一つはゴール) を使用してルートを設定するには、適用ボタンを押します。 +保存したウェイポイントをリセットするには、リセットボタンを押します。 -## Material Design Icons +## Material Design アイコン -This project uses [Material Design Icons](https://developers.google.com/fonts/docs/material_symbols) by Google. These icons are used under the terms of the Apache License, Version 2.0. +このプロジェクトでは、Google の [Material Design Icons](https://developers.google.com/fonts/docs/material_symbols) を使用しています。これらのアイコンは Apache License, Version 2.0 の条項に基づいて使用されています。 -Material Design Icons are a collection of symbols provided by Google that are used to enhance the user interface of applications, websites, and other digital products. +Material Design アイコンは、Google が提供するシンボルのコレクションで、アプリケーション、ウェブサイト、その他のデジタル製品のユーザーインターフェイスを強化するために使用されています。 -### License +### ライセンス -The Material Design Icons are licensed under the Apache License, Version 2.0. You may obtain a copy of the License at: +Material Design アイコンは Apache License, Version 2.0 のもとでライセンスされています。ライセンスのコピーは次の場所から入手できます。 -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +適用される法律によって要求されるか、書面により同意しない限り、ライセンスに基づいて配布されるソフトウェアは、「現状のまま」で明示的または黙示的な保証や条件なしに配布されます。ライセンスの特定の言語に準拠した許可およびライセンスに基づく制限事項を参照してください。 -### Acknowledgments +### 謝辞 + +これらのアイコンをコミュニティに提供し、開発者とデザイナーがプロジェクトの視覚的魅力とユーザーエクスペリエンスを強化するのに役立てている Google に感謝の意を表します。 -We would like to express our gratitude to Google for making these icons available to the community, helping developers and designers enhance the visual appeal and user experience of their projects. diff --git a/common/tier4_api_utils/README.md b/common/tier4_api_utils/README.md index 3af88bc32d619..bb39f8331bb19 100644 --- a/common/tier4_api_utils/README.md +++ b/common/tier4_api_utils/README.md @@ -1,4 +1,5 @@ # tier4_api_utils -This is an old implementation of a class that logs when calling a service. -Please use [component_interface_utils](../component_interface_utils/README.md) instead. +これはサービスを呼び出したときにログを記録するクラスの古い実装です。 +代わりに[component_interface_utils](../component_interface_utils/README.md)を使用してください。 + diff --git a/common/tier4_camera_view_rviz_plugin/README.md b/common/tier4_camera_view_rviz_plugin/README.md index 3297b578dd609..b074b28ef8c47 100644 --- a/common/tier4_camera_view_rviz_plugin/README.md +++ b/common/tier4_camera_view_rviz_plugin/README.md @@ -1,27 +1,28 @@ # tier4_camera_view_rviz_plugin -## ThirdPersonView Tool +## 第三者ビューツール -Add the `tier4_camera_view_rviz_plugin/ThirdPersonViewTool` tool to the RViz. Push the button, the camera will focus on the vehicle and set the target frame to `base_link`. Short cut key 'o'. +RVizに`tier4_camera_view_rviz_plugin/ThirdPersonViewTool`ツールを追加します。ボタンを押すと、カメラが車両にフォーカスされ、ターゲットフレームが「base_link」に設定されます。ショートカットキーは「o」です。 -## BirdEyeView Tool +## 鳥瞰図ビューツール -Add the `tier4_camera_view_rviz_plugin/BirdEyeViewTool` tool to the RViz. Push the button, the camera will turn to the BEV view, the target frame is consistent with the latest frame. Short cut key 'r'. +RVizに`tier4_camera_view_rviz_plugin/BirdEyeViewTool`ツールを追加します。ボタンを押すと、カメラがBEVビューに切り替わり、ターゲットフレームは最新のフレームと一致します。ショートカットキーは「r」です。 -## Material Design Icons +## マテリアルデザインアイコン -This project uses [Material Design Icons](https://developers.google.com/fonts/docs/material_symbols) by Google. These icons are used under the terms of the Apache License, Version 2.0. +このプロジェクトではGoogleの [マテリアルデザインアイコン](https://developers.google.com/fonts/docs/material_symbols)を使用しています。これらのアイコンはApache License、バージョン2.0の条項に従って使用されています。 -Material Design Icons are a collection of symbols provided by Google that are used to enhance the user interface of applications, websites, and other digital products. +マテリアルデザインアイコンは、アプリケーション、Webサイト、その他のデジタル製品のユーザーインターフェイスを向上させるためにGoogleによって提供される記号のコレクションです。 -### License +### ライセンス -The Material Design Icons are licensed under the Apache License, Version 2.0. You may obtain a copy of the License at: +マテリアルデザインアイコンは、Apache License、バージョン2.0のライセンスが付与されています。ライセンスのコピーは次のURLから入手できます。 -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +適用される法律により要求されない限り、または書面による合意がない限り、ライセンスに基づいて配布されるソフトウェアは、「現状のまま」の状態で配布され、明示的または黙示的な保証や条件はありません。ライセンスに記載されている特定の言語に記載される許可と制限事項を参照してください。 -### Acknowledgments +### 謝辞 + +これらのアイコンをコミュニティに提供し、開発者やデザイナーがプロジェクトのビジュアルアピールとユーザーエクスペリエンスを向上させることができるよう支援するGoogleに感謝の意を表します。 -We would like to express our gratitude to Google for making these icons available to the community, helping developers and designers enhance the visual appeal and user experience of their projects. diff --git a/common/tier4_datetime_rviz_plugin/README.md b/common/tier4_datetime_rviz_plugin/README.md index b483155b342eb..7705dc1e5b92b 100644 --- a/common/tier4_datetime_rviz_plugin/README.md +++ b/common/tier4_datetime_rviz_plugin/README.md @@ -1,16 +1,17 @@ # tier4_datetime_rviz_plugin -## Purpose +## 目的 -This plugin displays the ROS Time and Wall Time in rviz. +このプラグインは、ROS時刻とウォール時刻をrvizに表示します。 -## Assumptions / Known limits +## 想定/既知の制限 -TBD. +TBD。 -## Usage +## 使用方法 -1. Start rviz and select panels/Add new panel. +1. rvizを起動して、パネル/新しいパネルを追加を選択します。 ![select_panel](./images/select_panels.png) -2. Select tier4_datetime_rviz_plugin/AutowareDateTimePanel and press OK. +2. tier4_datetime_rviz_plugin/AutowareDateTimePanelを選択して、OKを押します。 ![select_datetime_plugin](./images/select_datetime_plugin.png) + diff --git a/common/tier4_localization_rviz_plugin/README.md b/common/tier4_localization_rviz_plugin/README.md index 5f5e35ea3dc19..2a6fbeb81671a 100644 --- a/common/tier4_localization_rviz_plugin/README.md +++ b/common/tier4_localization_rviz_plugin/README.md @@ -1,71 +1,71 @@ -# tier4_localization_rviz_plugin +## tier4_localization_rviz_plugin -## Purpose +## 目的 -This plugin can display the localization history obtained by ekf_localizer, ndt_scan_matching, and GNSS. -If the uncertainty of the estimated pose is given, it can also be displayed. +このプラグインは、ekf_localizer、ndt_scan_matching、GNSSによって取得されたローカリゼーションの履歴を表示できます。推定ポーズの不確かさが与えられた場合、それも表示できます。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -### Pose History +### Pose履歴 -| Name | Type | Description | -| ------------ | --------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | In input/pose, put the result of localization calculated by ekf_localizer, ndt_scan_matching, or GNSS | +| 名称 | タイプ | 説明 | +| ---- | ----- | ------------------------------------------------------------------------------------------------- | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | `input/pose` には、ekf_localizer、ndt_scan_matching、または GNSS で計算された局所化の結果を入れます | -### Pose With Covariance History +### 共分散を持つ自車位置履歴 -| Name | Type | Description | +| 名称 | 型 | 説明 | | ---------------------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | In input/pose_with_covariance, put the result of localization calculated by ekf_localizer, ndt_scan_matching, or GNSS | - -## Parameters - -### Core Parameters - -### Pose History - -| Name | Type | Default Value | Description | -| ----------------------- | ------ | ------------- | -------------------------- | -| `property_buffer_size_` | int | 100 | Buffer size of topic | -| `property_line_view_` | bool | true | Use Line property or not | -| `property_line_width_` | float | 0.1 | Width of Line property [m] | -| `property_line_alpha_` | float | 1.0 | Alpha of Line property | -| `property_line_color_` | QColor | Qt::white | Color of Line property | - -### Pose With Covariance History - -| Name | Type | Default Value | Description | -| ------------------------------- | ------ | -------------- | -------------------------------- | -| `property_buffer_size_` | int | 100 | Buffer size of topic | -| `property_path_view_` | bool | true | Use path property or not | -| `property_shape_type_` | string | Line | Line or Arrow | -| `property_line_width_` | float | 0.1 | Width of Line property [m] | -| `property_line_alpha_` | float | 1.0 | Alpha of Line property | -| `property_line_color_` | QColor | Qt::white | Color of Line property | -| `property_arrow_shaft_length` | float | 0.3 | Shaft length of Arrow property | -| `property_arrow_shaft_diameter` | float | 0.15 | Shaft diameter of Arrow property | -| `property_arrow_head_length` | float | 0.2 | Head length of Arrow property | -| `property_arrow_head_diameter` | float | 0.3 | Head diameter of Arrow property | -| `property_arrow_alpha_` | float | 1.0 | Alpha of Arrow property | -| `property_arrow_color_` | QColor | Qt::white | Color of Arrow property | -| `property_sphere_scale_` | float | 1.0 | Scale of Sphere property | -| `property_sphere_alpha_` | float | 0.5 | Alpha of Sphere property | -| `property_sphere_color_` | QColor | (204, 51, 204) | Color of Sphere property | - -## Assumptions / Known limits +| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | `input/pose_with_covariance` には、ekf_localizer、ndt_scan_matching、GNSS によって計算された、ローカリゼーションの結果を配置します。 | + +## パラメータ + +### コアパラメータ + +### 自車位置履歴 + +| 名称 | タイプ | デフォルト値 | 説明 | +| ----------------------- | ------ | ------------- | ------------------------- | +| `property_buffer_size_` | int | 100 | トピックのバッファサイズ | +| `property_line_view_` | bool | true | Lineプロパティを使用 | +| `property_line_width_` | float | 0.1 | Lineプロパティの幅 [m] | +| `property_line_alpha_` | float | 1.0 | Lineプロパティのアルファ | +| `property_line_color_` | QColor | Qt::white | Lineプロパティの色 | + +### 自車位置の共分散履歴 + +| 名称 | タイプ | デフォルト値 | 説明 | +| ----------------------------- | ------ | ------------ | --------------------------------------- | +| `property_buffer_size_` | int | 100 | トピックのバッファサイズ | +| `property_path_view_` | bool | true | パスプロパティを使用するか否か | +| `property_shape_type_` | string | Line | LineまたはArrow | +| `property_line_width_` | float | 0.1 | Lineプロパティの幅 [m] | +| `property_line_alpha_` | float | 1.0 | Lineプロパティのアルファ | +| `property_line_color_` | QColor | Qt::white | Lineプロパティの色 | +| `property_arrow_shaft_length` | float | 0.3 | Arrowプロパティのシャフトの長さ | +| `property_arrow_shaft_diameter` | float | 0.15 | Arrowプロパティのシャフトの直径 | +| `property_arrow_head_length` | float | 0.2 | Arrowプロパティのヘッドの長さ | +| `property_arrow_head_diameter` | float | 0.3 | Arrowプロパティのヘッドの直径 | +| `property_arrow_alpha_` | float | 1.0 | Arrowプロパティのアルファ | +| `property_arrow_color_` | QColor | Qt::white | Arrowプロパティの色 | +| `property_sphere_scale_` | float | 1.0 | Sphereプロパティのスケール | +| `property_sphere_alpha_` | float | 0.5 | Sphereプロパティのアルファ | +| `property_sphere_color_` | QColor | (204, 51, 204) | Sphereプロパティの色 | + +## 想定/既知の制限 TBD. -## Usage +## 使用方法 -1. Start rviz and select Add under the Displays panel. +1. rvizを起動し、[Displays]パネルで[Add]を選択します。 ![select_add](./images/select_add.png) -2. Select tier4_localization_rviz_plugin/PoseHistory or PoseWithCovarianceHistory. Next, press OK. +2. [tier4_localization_rviz_plugin/PoseHistory]または[PoseWithCovarianceHistory]を選択します。次に、[OK]を押します。 ![select_localization_plugin](./images/select_localization_plugin.png) -3. Enter the name of the topic where you want to view the trajectory and the covariance. +3. 軌道と共分散を表示するトピックの名前を入力します。 ![select_topic_name](./images/select_topic_name.png) -4. You can view the trajectory and the covariance. +4. 軌道と共分散を表示できます。 ![ex_pose_with_covariance_history](./images/ex_pose_with_covariance_history.png) + diff --git a/common/tier4_planning_rviz_plugin/README.md b/common/tier4_planning_rviz_plugin/README.md index 5b6286139af0d..402222d8578ab 100644 --- a/common/tier4_planning_rviz_plugin/README.md +++ b/common/tier4_planning_rviz_plugin/README.md @@ -1,145 +1,322 @@ -# tier4_planning_rviz_plugin +## tier4_planning_rviz_plugin -This package is including jsk code. -Note that jsk_overlay_utils.cpp and jsk_overlay_utils.hpp are BSD license. +このパッケージにはjskコードが含まれます。 +jsk_overlay_utils.cppとjsk_overlay_utils.hppはBSDライセンスです。 -## Purpose +## 目的 -This plugin displays the path, trajectory, and maximum speed. +このプラグインは、パス、軌跡、および最高速度を表示します。 -## Inputs / Outputs +## 入出力 -### Input - -| Name | Type | Description | -| -------------------------------------------------- | ----------------------------------------- | ------------------------------------------ | -| `/input/path` | `autoware_planning_msgs::msg::Path` | The topic on which to subscribe path | -| `/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | The topic on which to subscribe trajectory | -| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs/msg/VelocityLimit` | The topic on which to publish max velocity | +### 入力 +- current pose +- velocity profile +- planned trajectory +- v\_max ### Output +- No outputs + +## Usage + +```roslaunch tier4_planning_rviz_plugin tier4_planning_rviz_plugin.launch [args...]``` + +## Arguments + +``` +--topic /planning/trajectory +--pose_topic /current_pose +--velocty_topic /planning/velocity_profile +--max_velo /planning/v_max +--frame_id base_link +--max_lateral_jerk 0.5 +--max_longitudinal_jerk 1.0 +``` + +| 名前 | タイプ | 説明 | +| --------------------------------------------- | ----------------------------------------- | ------------------------------------------- | +| `/input/path` | `autoware_planning_msgs::msg::Path` | パスをサブスクライブするトピック | +| `/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | トラジェクトリをサブスクライブするトピック | +| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs/msg/VelocityLimit` | 最大速度をパブリッシュするトピック | + +### 出力 + +このドキュメントでは、AutowareにおけるPlanningコンポーネント内の経路計画モジュールの詳細を説明します。 + +#### 目的 + +経路計画モジュールは、障害物や走行制限を考慮した、安全で効率的な経路を生成します。 + +#### 入力 + +* 自車位置(`current pose`) +* 目的地 +* 障害物マップ +* 走行制限マップ + +#### 出力 -| Name | Type | Description | -| --------------------------------------- | ------------------------------- | ---------------------------------------- | -| `/planning/mission_planning/checkpoint` | `geometry_msgs/msg/PoseStamped` | The topic on which to publish checkpoint | +* 経路(`post resampling`) +* 速度プロファイル +* 加速度逸脱量 +* 速度逸脱量 -## Parameter +#### アルゴリズム -### Core Parameters +経路計画モジュールは、以下を含む複数のサブコンポーネントを使用します。 + +* **経路探索:** A*アルゴリズムを使用して、障害物を回避する最適な経路を探索します。 +* **経路平滑化:** 経路の急カーブや急激な速度変化を滑らかにします。 +* **速度計画:** 速度制限や加速制限を考慮して、安全な速度プロファイルを作成します。 + +#### 注意事項 + +* 経路計画モジュールは、障害物マップと走行制限マップの正確性に依存します。 +* モジュールは動的環境では動作しません。 +* 経路は**推奨経路**であることに注意してください。実際の経路は、センサーデータや他の制御システムによって修正される可能性があります。 + +| 名称 | 種別 | 説明 | +| --------------------------------------- | ------------------------------ | ----------------------------------------- | +| `/planning/mission_planning/checkpoint` | `geometry_msgs/msg/PoseStamped` | チェックポイントを公開するトピック | + +## パラメーター + +### コアパラメーター #### MissionCheckpoint -| Name | Type | Default Value | Description | -| ---------------------- | ------ | -------------------- | -------------------------------------------------- | -| `pose_topic_property_` | string | `mission_checkpoint` | The topic on which to publish checkpoint | -| `std_dev_x_` | float | 0.5 | X standard deviation for checkpoint pose [m] | -| `std_dev_y_` | float | 0.5 | Y standard deviation for checkpoint pose [m] | -| `std_dev_theta_` | float | M_PI / 12.0 | Theta standard deviation for checkpoint pose [rad] | -| `position_z_` | float | 0.0 | Z position for checkpoint pose [m] | +| 名前 | 型 | 初期値 | 説明 | +|---|---|---|---| +| `pose_topic_property_` | 文字列 | `mission_checkpoint` | チェックポイントを発行するトピック | +| `std_dev_x_` | 浮動小数 | 0.5 | チェックポイント姿勢の X 標準偏差 [m] | +| `std_dev_y_` | 浮動小数 | 0.5 | チェックポイント姿勢の Y 標準偏差 [m] | +| `std_dev_theta_` | 浮動小数 | M_PI / 12.0 | チェックポイント姿勢の Theta 標準偏差 [rad] | +| `position_z_` | 浮動小数 | 0.0 | チェックポイント姿勢の Z 位置 [m] | #### Path -| Name | Type | Default Value | Description | -| ------------------------------- | ------ | ------------- | ---------------------------- | -| `property_path_view_` | bool | true | Use Path property or not | -| `property_path_width_view_` | bool | false | Use Constant Width or not | -| `property_path_width_` | float | 2.0 | Width of Path property [m] | -| `property_path_alpha_` | float | 1.0 | Alpha of Path property | -| `property_path_color_view_` | bool | false | Use Constant Color or not | -| `property_path_color_` | QColor | Qt::black | Color of Path property | -| `property_velocity_view_` | bool | true | Use Velocity property or not | -| `property_velocity_alpha_` | float | 1.0 | Alpha of Velocity property | -| `property_velocity_scale_` | float | 0.3 | Scale of Velocity property | -| `property_velocity_color_view_` | bool | false | Use Constant Color or not | -| `property_velocity_color_` | QColor | Qt::black | Color of Velocity property | -| `property_vel_max_` | float | 3.0 | Max velocity [m/s] | - -#### DrivableArea - -| Name | Type | Default Value | Description | -| ------------------------ | ----- | ------------- | ------------------------------------- | -| `color_scheme_property_` | int | 0 | Color scheme of DrivableArea property | -| `alpha_property_` | float | 0.2 | Alpha of DrivableArea property | -| `draw_under_property_` | bool | false | Draw as background or not | +**Planning** コンポーネントは、現在の経路の経路を生成し、各経路ポイントの速度と加速度を計算します。経路には、車両の現在の姿勢からゴールまでの道筋を示す一連のセグメントが含まれています。 + +各セグメントには、以下のパラメータが含まれています。 + +* 開始と終了の経路ポイント +* 最大速度と加速度 +* スプライン補完(オプション) + +**Planning** コンポーネントは、以下を考慮して経路を最適化します。 + +* 交通規制(速度制限、停止線など) +* 交通状況(他の車両、歩行者など) +* 車両の動力学(加速度、減速度、曲がる能力) + +最適化された経路が計算されたら、**Planning** コンポーネントはこれを実行される一連のコマンド(コントロールコマンド)に変換します。コントロールコマンドには、車両の速度、加速度、ステアリングの目標値が含まれます。 + +| 名称 | 型 | デフォルト値 | 説明 | +| ------------------------------------ | ------ | ------------- | ---------------------------------------------------- | +| `property_path_view_` | bool | true | パスプロパティを使用するかどうか | +| `property_path_width_view_` | bool | false | 一定の幅を使用するかどうか | +| `property_path_width_` | float | 2.0 | パスプロパティの幅 [m] | +| `property_path_alpha_` | float | 1.0 | パスプロパティのアルファ | +| `property_path_color_view_` | bool | false | 一定の色を使用するかどうか | +| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | +| `property_velocity_view_` | bool | true | 速度プロパティを使用するかどうか | +| `property_velocity_alpha_` | float | 1.0 | 速度プロパティのアルファ | +| `property_velocity_scale_` | float | 0.3 | 速度プロパティのスケール | +| `property_velocity_color_view_` | bool | false | 一定の色を使用するかどうか | +| `property_velocity_color_` | QColor | Qt::black | 速度プロパティの色 | +| `property_vel_max_` | float | 3.0 | 最大速度 [m/s] | + +#### 走行可能領域 + +このドキュメントでは、Autowareの中核となるコンポーネントであるDrivableAreaについて説明します。 + +**目的** +DrivableAreaモジュールは、現在の周りの走行可能なエリアを検出し、それをトラジェクトリプランニングとローカルプランニングに提供します。 + +**入力** +* 自車位置と姿勢 +* センサーデータ(点群、画像など) +* Map data (lane information, drivable area information) +* タスクマニュアル(実行するタスク) + +**出力** +* 走行可能領域の点群 +* 走行可能領域のポリゴン + +**アルゴリズム** +DrivableAreaモジュールは、以下のステップで走行可能領域を検出します。 + +1. **Occupancy Gridの作成:** センサーデータを処理して、周囲環境の占有グリッドを作成します。 +2. **点群フィルタリング:** 点群から、地面、障害物、走行不可能なオブジェクトを除去します。 +3. **走行可能エリアの抽出:** 除去された点群から、走行可能なエリアを抽出します。 +4. **`post resampling`:** 走行可能エリアを滑らかにし、ノイズを除去します。 + +**パラメータ** +DrivableAreaモジュールの動作は、次のパラメータで構成できます。 + +* センサーパラメータ(スキャン範囲、解像度など) +* フィルターパラメータ(地面検出しきい値、障害物検出しきい値など) +* 抽出パラメータ(走行可能エリアの最小サイズ、最大傾斜角度など) +* `post resampling`パラメータ(カーネルサイズ、シグマ値など) + +**評価指標** +DrivableAreaモジュールの性能は、以下の指標によって評価できます。 + +* 正答率 +* 再現率 +* F1スコア +* 処理時間 + +**依存関係** +DrivableAreaモジュールは、以下のコンポーネントに依存しています。 + +* ロケーション(自車位置と姿勢の提供) +* センサー(点群と画像データの提供) +* マップ(レーン情報と走行可能エリア情報の提供) +* タスクマネージャー(実行するタスクの提供) + +**制限事項** +DrivableAreaモジュールには、次の制限事項があります。 + +* センサーの死角の影響を受けます。 +* 動的障害物(歩行者、車両など)を検出できません。 +* 急激な勾配や複雑な環境では、走行可能領域を正確に検出できない場合があります。 + +| 名前 | タイプ | 初期値 | 説明 | +| ------------------------ | ----- | ------- | --------------------------------------- | +| `color_scheme_property_` | 整数 | 0 | 走行可能エリアプロパティのカラーテーマ | +| `alpha_property_` | float | 0.2 | 走行可能エリアプロパティのアルファ値 | +| `draw_under_property_` | bool | false | 背景として描画するか否か | #### PathFootprint -| Name | Type | Default Value | Description | -| -------------------------------- | ------ | ------------- | ---------------------------------- | -| `property_path_footprint_view_` | bool | true | Use Path Footprint property or not | -| `property_path_footprint_alpha_` | float | 1.0 | Alpha of Path Footprint property | -| `property_path_footprint_color_` | QColor | Qt::black | Color of Path Footprint property | -| `property_vehicle_length_` | float | 4.77 | Vehicle length [m] | -| `property_vehicle_width_` | float | 1.83 | Vehicle width [m] | -| `property_rear_overhang_` | float | 1.03 | Rear overhang [m] | +PathFootprintは、トラジェクトリを表示し、その最適解を探索するためのtoolです。これは、Autoware.Planningコンポーネントによって利用されます。 + +PathFootprintは、次の機能を提供します。 + +- 複数のトラジェクトリを可視化し、それらを比較するための基準を提供します。 +- トラジェクトリ空間を探索し、さまざまなプランニング戦略を評価するための反復可能な方法を提供します。 +- PathFootprintは、「post resampling」で生成されたトラジェクトリのコレクションを受け取ります。 +- `post resampling`は、トラジェクトリ空間内でランダムなサンプルを生成するMonte Caloベースのアルゴリズムです。 +- PathFootprintは、これらのサンプルを評価し、さまざまな基準に基づいてレーティングを行います。 +- レーティングは、目標値への近接性、速度/加速度逸脱量、障害物との衝突可能性など、さまざまな要素に基づいています。 +- PathFootprintは、最も高い評価を得たトラジェクトリを返します。 +- これにより、Autoware.Planningコンポーネントは、自車位置と目標値に基づいて、最適なトラジェクトリを選択できます。 + +| Name | Type | Default Value | Description | +| -------------------------------- | ------ | ------------- | ---------------------------------------------- | +| `property_path_footprint_view_` | bool | true | パスフットプリントプロパティを使用するかどうかの設定 | +| `property_path_footprint_alpha_` | float | 1.0 | パスフットプリントプロパティのアルファ値 | +| `property_path_footprint_color_` | QColor | Qt::black | パスフットプリントプロパティの色 | +| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | +| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | +| `property_rear_overhang_` | float | 1.03 | リアオーバーハング [m] | #### Trajectory -| Name | Type | Default Value | Description | -| ------------------------------- | ------ | ------------- | ---------------------------- | -| `property_path_view_` | bool | true | Use Path property or not | -| `property_path_width_` | float | 2.0 | Width of Path property [m] | -| `property_path_alpha_` | float | 1.0 | Alpha of Path property | -| `property_path_color_view_` | bool | false | Use Constant Color or not | -| `property_path_color_` | QColor | Qt::black | Color of Path property | -| `property_velocity_view_` | bool | true | Use Velocity property or not | -| `property_velocity_alpha_` | float | 1.0 | Alpha of Velocity property | -| `property_velocity_scale_` | float | 0.3 | Scale of Velocity property | -| `property_velocity_color_view_` | bool | false | Use Constant Color or not | -| `property_velocity_color_` | QColor | Qt::black | Color of Velocity property | -| `property_velocity_text_view_` | bool | false | View text Velocity | -| `property_velocity_text_scale_` | float | 0.3 | Scale of Velocity property | -| `property_vel_max_` | float | 3.0 | Max velocity [m/s] | +AutowareのTrajectoryコンポーネントは、次のことを行う責任があります。 +* センサー情報から障害物と車線の認識(perception)。 +* 動的経路計画(Dynamic Path Planning)による、自車位置と障害物に関する知識に基づく経路の生成。 +* エラストキネティックモデル(Elastokinetic Model)による、経路に対する速度、加速度制御。 + +経路の生成プロセスは、2つの主要なサブプロセスに分かれています。 + +1. **グローバルパスプランニング**:車線情報に基づいて可能な経路を計算します。 +2. **ローカルパスプランニング**:障害物と自車位置に基づいて現実的な経路を計算します。 + +ローカルパスプランニングでは、以下を考慮して経路を計算します。 +* 障害物逸脱量 +* 加速度逸脱量 +* 速度逸脱量 + +また、経路の生成時には以下の制約が考慮されます。 +* 最小曲率半径 +* 最大速度 +* 最大加速度 + +経路が生成されると、'post resampling`が適用され、Planningコンポーネントに渡される前に、経路が滑らかで連続的になります。 + +| 名称 | 型 | 初期値 | 説明 | +| --------------------------------------- | -------- | ----------- | ----------------------------------------------------- | +| `property_path_view_` | 論理値 | true | パスプロパティを使用するかどうか | +| `property_path_width_` | 浮動小数 | 2.0 | パスプロパティの幅 [m] | +| `property_path_alpha_` | 浮動小数 | 1.0 | パスプロパティのアルファ | +| `property_path_color_view_` | 論理値 | false | 定数値を使用するかどうか | +| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | +| `property_velocity_view_` | 論理値 | true | Velocityプロパティを使用するかどうか | +| `property_velocity_alpha_` | 浮動小数 | 1.0 | Velocityプロパティのアルファ | +| `property_velocity_scale_` | 浮動小数 | 0.3 | Velocityプロパティのスケール | +| `property_velocity_color_view_` | 論理値 | false | 定数値を使用するかどうか | +| `property_velocity_color_` | QColor | Qt::black | Velocityプロパティの色 | +| `property_velocity_text_view_` | 論理値 | false | Velocityをテキストで表示する | +| `property_velocity_text_scale_` | 浮動小数 | 0.3 | Velocityプロパティのスケール | +| `property_vel_max_` | 浮動小数 | 3.0 | 最大速度 [m/s] | #### TrajectoryFootprint -| Name | Type | Default Value | Description | -| -------------------------------------- | ------ | -------------------- | ---------------------------------------- | -| `property_trajectory_footprint_view_` | bool | true | Use Trajectory Footprint property or not | -| `property_trajectory_footprint_alpha_` | float | 1.0 | Alpha of Trajectory Footprint property | -| `property_trajectory_footprint_color_` | QColor | QColor(230, 230, 50) | Color of Trajectory Footprint property | -| `property_vehicle_length_` | float | 4.77 | Vehicle length [m] | -| `property_vehicle_width_` | float | 1.83 | Vehicle width [m] | -| `property_rear_overhang_` | float | 1.03 | Rear overhang [m] | -| `property_trajectory_point_view_` | bool | false | Use Trajectory Point property or not | -| `property_trajectory_point_alpha_` | float | 1.0 | Alpha of Trajectory Point property | -| `property_trajectory_point_color_` | QColor | QColor(0, 60, 255) | Color of Trajectory Point property | -| `property_trajectory_point_radius_` | float | 0.1 | Radius of Trajectory Point property | +このコンポーネントは、受け取った経路を処理し、経路上の每个のポイントに経路幅と経路半径を追加します。これにより、経路上に占有スペースを生成し、経路追従時に空間の制約を維持できます。 + +このコンポーネントは次の入力を取ります。 + +* `CurrentPose`:自車位置 +* `LaneCenterline`:車線の中心線 +* `Trajectory`:プランニングコンポーネントから提供された経路 + +そして次の出力を生成します: + +* `TrajectoryFootprint`:経路幅と経路半径が追加された経路 + +| 名前 | タイプ | デフォルト値 | 説明 | +| -------------------------------------- | ------ | -------------------------- | ----------------------------------------- | +| `property_trajectory_footprint_view_` | bool | true | Trajectory Footprint プロパティを使用するかどうか | +| `property_trajectory_footprint_alpha_` | float | 1.0 | Trajectory Footprint プロパティのアルファ値 | +| `property_trajectory_footprint_color_` | QColor | QColor(230, 230, 50) | Trajectory Footprint プロパティのカラー値 | +| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | +| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | +| `property_rear_overhang_` | float | 1.03 | リアオーバーハング [m] | +| `property_trajectory_point_view_` | bool | false | Trajectory Point プロパティを使用するかどうか | +| `property_trajectory_point_alpha_` | float | 1.0 | Trajectory Point プロパティのアルファ値 | +| `property_trajectory_point_color_` | QColor | QColor(0, 60, 255) | Trajectory Point プロパティのカラー値 | +| `property_trajectory_point_radius_` | float | 0.1 | Trajectory Point プロパティの半径値 | #### MaxVelocity -| Name | Type | Default Value | Description | -| ----------------------- | ------ | -------------------------------------------------- | -------------------------------------------- | -| `property_topic_name_` | string | `/planning/scenario_planning/current_max_velocity` | The topic on which to subscribe max velocity | -| `property_text_color_` | QColor | QColor(255, 255, 255) | Text color | -| `property_left_` | int | 128 | Left of the plotter window [px] | -| `property_top_` | int | 128 | Top of the plotter window [px] | -| `property_length_` | int | 96 | Length of the plotter window [px] | -| `property_value_scale_` | float | 1.0 / 4.0 | Value scale | +Planningモジュールによって計算された最も速く走行可能な速度。この速度は、周囲環境や自車位置に基づいてシステムが決定します。 -## Usage +| 名前 | タイプ | デフォルト値 | 説明 | +| ----------------------- | ------ | -------------------------------------------------- | ------------------------------------------------ | +| `property_topic_name_` | 文字列 | `/planning/scenario_planning/current_max_velocity` | 最大速度を購読するためのトピック | +| `property_text_color_` | QColor | QColor(255, 255, 255) | テキストの色 | +| `property_left_` | 整数 | 128 | プロッタウィンドウの左側 [px] | +| `property_top_` | 整数 | 128 | プロッタウィンドウの上 [px] | +| `property_length_` | 整数 | 96 | プロッタウィンドウの長さ [px] | +| `property_value_scale_` | 浮動小数 | 1.0 / 4.0 | 値のスケール | + +## 使用方法 -1. Start rviz and select Add under the Displays panel. +1. rvizを起動し、[表示]パネルで[追加]を選択します。 ![select_add](./images/select_add.png) -2. Select any one of the tier4_planning_rviz_plugin and press OK. +2. tier4_planning_rviz_pluginのいずれかを選択して、[OK]を押します。 ![select_planning_plugin](./images/select_planning_plugin.png) -3. Enter the name of the topic where you want to view the path or trajectory. +3. パスまたは軌跡を表示するトピックの名前を入力します。 ![select_topic_name](./images/select_topic_name.png) -## Material Design Icons +## Material Designアイコン -This project uses [Material Design Icons](https://developers.google.com/fonts/docs/material_symbols) by Google. These icons are used under the terms of the Apache License, Version 2.0. +このプロジェクトでは、Googleによる[Material Designアイコン](https://developers.google.com/fonts/docs/material_symbols)を使用しています。これらのアイコンは、Apache Licenseバージョン2.0の条件に基づいて使用されています。 -Material Design Icons are a collection of symbols provided by Google that are used to enhance the user interface of applications, websites, and other digital products. +Material Designアイコンは、Googleが提供する記号の集まりで、アプリケーション、Webサイト、その他のデジタル製品のユーザーインターフェイスを向上させるために使用されています。 -### License +### ライセンス -The Material Design Icons are licensed under the Apache License, Version 2.0. You may obtain a copy of the License at: +Material Designアイコンは、Apache Licenseバージョン2.0のライセンスの下で配布されています。ライセンスのコピーは次のURLから入手できます。 -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +適用法で要求されるか、書面で同意されていない限り、ライセンスに基づいて配布されるソフトウェアは、「現状のまま」の状態で保証や条件なしに配布され、明示的または黙示的に関係ありません。ライセンスの特定の言語により、ライセンスに基づく許可と制限が規定されています。 + +### 確認 -### Acknowledgments +Googleがこれらのアイコンをコミュニティに公開し、開発者やデザイナーがプロジェクトの視覚的魅力とユーザーエクスペリエンスを向上させることができることに対し、謝意を表したいと思います。 -We would like to express our gratitude to Google for making these icons available to the community, helping developers and designers enhance the visual appeal and user experience of their projects. diff --git a/common/tier4_state_rviz_plugin/README.md b/common/tier4_state_rviz_plugin/README.md index e45be3bea13dc..55c690d69ba84 100644 --- a/common/tier4_state_rviz_plugin/README.md +++ b/common/tier4_state_rviz_plugin/README.md @@ -1,48 +1,99 @@ # tier4_state_rviz_plugin -## Purpose +## 目的 -This plugin displays the current status of autoware. -This plugin also can engage from the panel. +このプラグインはAutowareの現在の状態を表示します。 +また、プラグインはパネルからも起動できます。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ---------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------- | -| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | The topic represents the state of operation mode | -| `/api/routing/state` | `autoware_adapi_v1_msgs::msg::RouteState` | The topic represents the state of route | -| `/api/localization/initialization_state` | `autoware_adapi_v1_msgs::msg::LocalizationInitializationState` | The topic represents the state of localization initialization | -| `/api/motion/state` | `autoware_adapi_v1_msgs::msg::MotionState` | The topic represents the state of motion | -| `/api/autoware/get/emergency` | `tier4_external_api_msgs::msg::Emergency` | The topic represents the state of external emergency | -| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | The topic represents the state of gear | +| 名前 | タイプ | 説明 | +| -------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------- | +| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | オペレーションモードの状態を表します | +| `/api/routing/state` | `autoware_adapi_v1_msgs::msg::RouteState` | ルートの状態を表します | +| `/api/localization/initialization_state` | `autoware_adapi_v1_msgs::msg::LocalizationInitializationState` | ローカリゼーション初期化の状態を表します | +| `/api/motion/state` | `autoware_adapi_v1_msgs::msg::MotionState` | モーションの状態を表します | +| `/api/autoware/get/emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急事態の状態を表します | +| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアの状態を表します | -### Output +### 出力 -| Name | Type | Description | -| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -| `/api/operation_mode/change_to_autonomous` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | The service to change operation mode to autonomous | -| `/api/operation_mode/change_to_stop` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | The service to change operation mode to stop | -| `/api/operation_mode/change_to_local` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | The service to change operation mode to local | -| `/api/operation_mode/change_to_remote` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | The service to change operation mode to remote | -| `/api/operation_mode/enable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | The service to enable vehicle control by Autoware | -| `/api/operation_mode/disable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | The service to disable vehicle control by Autoware | -| `/api/routing/clear_route` | `autoware_adapi_v1_msgs::srv::ClearRoute` | The service to clear route state | -| `/api/motion/accept_start` | `autoware_adapi_v1_msgs::srv::AcceptStart` | The service to accept the vehicle to start | -| `/api/autoware/set/emergency` | `tier4_external_api_msgs::srv::SetEmergency` | The service to set external emergency | -| `/planning/scenario_planning/max_velocity_default` | `tier4_planning_msgs::msg::VelocityLimit` | The topic to set maximum speed of the vehicle | +**自動運転ソフトウエア** -## HowToUse +**はじめに** -1. Start rviz and select panels/Add new panel. +本ドキュメントでは、自動運転車両向けに開発されたオープンソースソフトウェアAutowareのアーキテクチャと実装について説明する。Autowareは、障害物検出や経路計画などの運転タスクを実行するためのモジュール化されたコンポーネントの集合である。 - ![select_panel](./images/select_panels.png) +**アーキテクチャ** -2. Select tier4_state_rviz_plugin/AutowareStatePanel and press OK. +Autowareアーキテクチャは、Perception、Planning、Controlの3層構造となっている。 - ![select_state_plugin](./images/select_state_plugin.png) +**Perception** -3. If the auto button is activated, can engage by clicking it. +Perception層は、センサーデータから周囲環境を認識する。LIDAR、カメラ、レーダーなどのセンサーからのデータを生成し、オブジェクトを検出し、分類し、追跡する。 + +**Planning** + +Planning層は、車両の経路を計画する。周囲環境の認識情報と自車位置に基づき、「post resampling」手法を使用して経路を生成する。経路は、速度、加速度、制御逸脱量などの制約条件が考慮される。 + +**Control** + +Control層は、計画された経路に基づいて車両を制御する。この層は、ステアリング、アクセル、ブレーキを制御し、安全に軌道を追従する。 + +**モジュール** + +Autowareは、次のような主要モジュールで構成されている。 + +* **Perception:** + * LIDAR Point Cloud Filter + * Object Detection + * Object Tracking +* **Planning:** + * Path Planning + * Trajectory Generation +* **Control:** + * Motion Planner + * Vehicle Control + +**実装** + +Autowareは、ROS(Robot Operating System)を使用して実装されている。モジュール間の通信は、トピックとサービスを通じて行われる。Autowareには、シミュレーションやテスト用のさまざまなツールも含まれている。 + +**使用法** + +Autowareは、自動運転車両の開発に使用できる。研究目的でも、商用製品の開発でも使用できる。Autowareはオープンソースであり、GitHubで利用できる。 + +**追加資料** + +* [Autoware GitHubリポジトリ](https://github.com/autowarefoundation/autoware.auto) +* [Autowareドキュメント](https://www.autoware.org/documentation/) + +| 名前 | タイプ | 説明 | +| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | +| `/api/operation_mode/change_to_autonomous` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 自動運転モードに変更するサービス | +| `/api/operation_mode/change_to_stop` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 停止モードに変更するサービス | +| `/api/operation_mode/change_to_local` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | ローカルモードに変更するサービス | +| `/api/operation_mode/change_to_remote` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | リモートモードに変更するサービス | +| `/api/operation_mode/enable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autowareによる車両制御を有効にするサービス | +| `/api/operation_mode/disable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autowareによる車両制御を無効にするサービス | +| `/api/routing/clear_route` | `autoware_adapi_v1_msgs::srv::ClearRoute` | ルート状態をクリアするサービス | +| `/api/motion/accept_start` | `autoware_adapi_v1_msgs::srv::AcceptStart` | 車両の始動を受け入れるサービス | +| `/api/autoware/set/emergency` | `tier4_external_api_msgs::srv::SetEmergency` | 外部緊急状態を設定するサービス | +| `/planning/scenario_planning/max_velocity_default` | `tier4_planning_msgs::msg::VelocityLimit` | 車両の最大速度を設定するトピック | + +## 使用方法 + +1. rvizを起動し、パネル/新しいパネルを追加を選択する。 + + ![select_panel](./images/select_panels_ja.png) + +2. tier4_state_rviz_plugin/AutowareStatePanelを選択し、OKを押す。 + + ![select_state_plugin](./images/select_state_plugin_ja.png) + +3. 自動ボタンがアクティブ化されていれば、クリックでエンゲージできます。 + + ![select_auto](./images/select_auto_ja.png) - ![select_auto](./images/select_auto.png) diff --git a/common/tier4_system_rviz_plugin/README.md b/common/tier4_system_rviz_plugin/README.md index 763504c4709a9..9c657087c9a9f 100644 --- a/common/tier4_system_rviz_plugin/README.md +++ b/common/tier4_system_rviz_plugin/README.md @@ -1,11 +1,12 @@ # tier4_system_rviz_plugin -## Purpose +## 目的 -This plugin display the Hazard information from Autoware; and output notices when emergencies are from initial localization and route setting. +このプラグインはAutowareから収集した障害情報を表示します。また、当初位置決めや経路設定時に緊急事態が発生した場合は通知を出力します。 -## Input +## 入力 -| Name | Type | Description | +| 名前 | タイプ | 説明 | | --------------------------------- | ------------------------------------------------ | ------------------------------------------------------------ | -| `/system/emergency/hazard_status` | `autoware_system_msgs::msg::HazardStatusStamped` | The topic represents the emergency information from Autoware | +| `/system/emergency/hazard_status` | `autoware_system_msgs::msg::HazardStatusStamped` | このトピックは Autoware からの緊急情報を表します | + diff --git a/common/tier4_traffic_light_rviz_plugin/README.md b/common/tier4_traffic_light_rviz_plugin/README.md index cc37d17768d49..62f23680fbf0b 100644 --- a/common/tier4_traffic_light_rviz_plugin/README.md +++ b/common/tier4_traffic_light_rviz_plugin/README.md @@ -1,18 +1,18 @@ -# tier4_traffic_light_rviz_plugin +## tier4_traffic_light_rviz_plugin -## Purpose +## 目的 -This plugin panel publishes dummy traffic light signals. +このプラグインパネルは、ダミー信号機信号をパブリッシュします。 -## Inputs / Outputs +## 入出力 -### Output +### 出力 -| Name | Type | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ----------------------------- | -| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | Publish traffic light signals | +| 名称 | 型 | 説明 | +| ------------------------------------------------------ | ------------------------------------------------------ | ----------------------------- | +| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 交通信号の公開 | -## HowToUse +## 操作方法
@@ -24,11 +24,12 @@ This plugin panel publishes dummy traffic light signals.
-1. Start rviz and select panels/Add new panel. -2. Select TrafficLightPublishPanel and press OK. -3. Set `Traffic Light ID` & `Traffic Light Status` and press `SET` button. -4. Traffic light signals are published, while `PUBLISH` button is pushed. +1. rvizを起動して[パネル]->[新しいパネルを追加]を選択します。 +2. TrafficLightPublishPanelを選択してOKを押します。 +3. [`Traffic Light ID`]と[`Traffic Light Status`]を設定して[`SET`]ボタンを押します。 +4. [`PUBLISH`]ボタンが押されている間、信号機信号がパブリッシュされます。
+ diff --git a/common/tier4_vehicle_rviz_plugin/README.md b/common/tier4_vehicle_rviz_plugin/README.md index 9560963b1f5c0..44e67e3157ca0 100644 --- a/common/tier4_vehicle_rviz_plugin/README.md +++ b/common/tier4_vehicle_rviz_plugin/README.md @@ -1,93 +1,98 @@ -# tier4_vehicle_rviz_plugin +## Tier4 vehicle RVIZ プラグイン -This package is including jsk code. -Note that jsk_overlay_utils.cpp and jsk_overlay_utils.hpp are BSD license. +このパッケージには jsk コードが含まれています。 +jsk_overlay_utils.cpp および jsk_overlay_utils.hpp は BSD ライセンスであることに注意してください。 -## Purpose +## 目的 -This plugin provides a visual and easy-to-understand display of vehicle speed, turn signal, steering status and acceleration. +このプラグインは、車両速度、ターンシグナル、ステアリングステータス、加速度をビジュアルかつ分かりやすく表示します。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| --------------------------------- | -------------------------------------------------- | ---------------------------------- | -| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | The topic is vehicle twist | -| `/control/turn_signal_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | The topic is status of turn signal | -| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | The topic is status of steering | -| `/localization/acceleration` | `geometry_msgs::msg::AccelWithCovarianceStamped` | The topic is the acceleration | +| 名前 | タイプ | 説明 | +| ------------------------------------ | ---------------------------------------------------------- | -------------------------------------- | +| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両の捻じれ | +| `/control/turn_signal_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ターンシグナルのステータス | +| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングのステータス | +| `/localization/acceleration` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 加速度 | -## Parameter +## パラメータ -### Core Parameters +### コアパラメータ #### ConsoleMeter -| Name | Type | Default Value | Description | -| ------------------------------- | ------ | -------------------- | ---------------------------------------- | -| `property_text_color_` | QColor | QColor(25, 255, 240) | Text color | -| `property_left_` | int | 128 | Left of the plotter window [px] | -| `property_top_` | int | 128 | Top of the plotter window [px] | -| `property_length_` | int | 256 | Height of the plotter window [px] | -| `property_value_height_offset_` | int | 0 | Height offset of the plotter window [px] | -| `property_value_scale_` | float | 1.0 / 6.667 | Value scale | +| 名 | 型 | デフォルト値 | 説明 | +| --------------------------------- | ------ | ---------------------------- | ----------------------------------------- | +| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | +| `property_left_` | int | 128 | プロッタウィンドウの左 [px] | +| `property_top_` | int | 128 | プロッタウィンドウの上 [px] | +| `property_length_` | int | 256 | プロッタウィンドウの高さ [px] | +| `property_value_height_offset_` | int | 0 | プロッタウィンドウの高さオフセット [px] | +| `property_value_scale_` | float | 1.0 / 6.667 | 値のスケール | #### SteeringAngle | Name | Type | Default Value | Description | | ------------------------------- | ------ | -------------------- | ---------------------------------------- | -| `property_text_color_` | QColor | QColor(25, 255, 240) | Text color | -| `property_left_` | int | 128 | Left of the plotter window [px] | -| `property_top_` | int | 128 | Top of the plotter window [px] | -| `property_length_` | int | 256 | Height of the plotter window [px] | -| `property_value_height_offset_` | int | 0 | Height offset of the plotter window [px] | -| `property_value_scale_` | float | 1.0 / 6.667 | Value scale | -| `property_handle_angle_scale_` | float | 3.0 | Scale is steering angle to handle angle | +| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | +| `property_left_` | int | 128 | プロッタウィンドウの左辺 [px] | +| `property_top_` | int | 128 | プロッタウィンドウの上辺 [px] | +| `property_length_` | int | 256 | プロッタウィンドウの高さ [px] | +| `property_value_height_offset_` | int | 0 | プロッタウィンドウの高さオフセット [px] | +| `property_value_scale_` | float | 1.0 / 6.667 | 値のスケール | +| `property_handle_angle_scale_` | float | 3.0 | ハンドル角に対する操舵角のスケール | #### TurnSignal -| Name | Type | Default Value | Description | -| ------------------ | ---- | ------------- | -------------------------------- | -| `property_left_` | int | 128 | Left of the plotter window [px] | -| `property_top_` | int | 128 | Top of the plotter window [px] | -| `property_width_` | int | 256 | Left of the plotter window [px] | -| `property_height_` | int | 256 | Width of the plotter window [px] | +Planningモジュールは、 поворотный сигнал からの情報を消費します。 + +| 名称 | タイプ | 初期値 | 説明 | +| ------------------ | ---- | ------ | ---------------------------------------- | +| `property_left_` | int | 128 | プロッタウィンドウの左端 [px] | +| `property_top_` | int | 128 | プロッタウィンドウの上端 [px] | +| `property_width_` | int | 256 | プロッタウィンドウの左幅 [px] | +| `property_height_` | int | 256 | プロッタウィンドウの高さ [px] | -#### VelocityHistory +#### 速度履歴 -| Name | Type | Default Value | Description | + +| Name | Type | Default Value | 説明 | | ------------------------------- | ------ | ------------- | -------------------------- | -| `property_velocity_timeout_` | float | 10.0 | Timeout of velocity [s] | -| `property_velocity_alpha_` | float | 1.0 | Alpha of velocity | -| `property_velocity_scale_` | float | 0.3 | Scale of velocity | -| `property_velocity_color_view_` | bool | false | Use Constant Color or not | -| `property_velocity_color_` | QColor | Qt::black | Color of velocity history | -| `property_vel_max_` | float | 3.0 | Color Border Vel Max [m/s] | - -#### AccelerationMeter - -| Name | Type | Default Value | Description | -| ----------------------------------- | ------ | -------------------- | ------------------------------------------------ | -| `property_normal_text_color_` | QColor | QColor(25, 255, 240) | Normal text color | -| `property_emergency_text_color_` | QColor | QColor(255, 80, 80) | Emergency acceleration color | -| `property_left_` | int | 896 | Left of the plotter window [px] | -| `property_top_` | int | 128 | Top of the plotter window [px] | -| `property_length_` | int | 256 | Height of the plotter window [px] | -| `property_value_height_offset_` | int | 0 | Height offset of the plotter window [px] | -| `property_value_scale_` | float | 1 / 6.667 | Value text scale | -| `property_emergency_threshold_max_` | float | 1.0 | Max acceleration threshold for emergency [m/s^2] | -| `property_emergency_threshold_min_` | float | -2.5 | Min acceleration threshold for emergency [m/s^2] | - -## Assumptions / Known limits - -TBD. - -## Usage - -1. Start rviz and select Add under the Displays panel. +| `property_velocity_timeout_` | float | 10.0 | 速度タイムアウト [秒] | +| `property_velocity_alpha_` | float | 1.0 | 速度のアルファ | +| `property_velocity_scale_` | float | 0.3 | 速度のスケール | +| `property_velocity_color_view_` | bool | false | 定色を使用 | +| `property_velocity_color_` | QColor | Qt::black | 速度履歴の色 | +| `property_vel_max_` | float | 3.0 | 色の境界速度の最大値 [m/s] | + +#### 加速度計 + + +| 名前 | タイプ | デフォルト値 | 説明 | +| ----------------------------------- | ------ | -------------------- | --------------------------------------------------- | +| `property_normal_text_color_` | QColor | QColor(25, 255, 240) | 通常のテキストの色 | +| `property_emergency_text_color_` | QColor | QColor(255, 80, 80) | 緊急時の加速度の色 | +| `property_left_` | int | 896 | プロッターウィンドウの左端 [px] | +| `property_top_` | int | 128 | プロッターウィンドウの上端 [px] | +| `property_length_` | int | 256 | プロッターウィンドウの高さ [px] | +| `property_value_height_offset_` | int | 0 | プロッターウィンドウの高さオフセット [px] | +| `property_value_scale_` | float | 1 / 6.667 | 値テキストのスケール | +| `property_emergency_threshold_max_` | float | 1.0 | 緊急時の最大加速度のしきい値 [m/s^2] | +| `property_emergency_threshold_min_` | float | -2.5 | 緊急時の最小加速度のしきい値 [m/s^2] | + +## 既定値 / 既知の制約 + +未定。 + +## 使用方法 + +1. rvizを起動し、DisplaysパネルでAddを選択します。 ![select_add](./images/select_add.png) -2. Select any one of the tier4_vehicle_rviz_plugin and press OK. +2. tier4_vehicle_rviz_pluginのいずれかを選択し、OKを押します。 ![select_vehicle_plugin](./images/select_vehicle_plugin.png) -3. Enter the name of the topic where you want to view the status. +3. ステータスを表示するトピックの名前を入力します。 ![select_topic_name](./images/select_topic_name.png) + diff --git a/common/traffic_light_utils/README.md b/common/traffic_light_utils/README.md index 0963a33bc1c4e..32acb085a19ad 100644 --- a/common/traffic_light_utils/README.md +++ b/common/traffic_light_utils/README.md @@ -1,6 +1,7 @@ # traffic_light_utils -## Purpose +## 目的 + +このパッケージには、トラフィックライト認識モジュール全体で有用な共通関数のライブラリが含まれています。 +このパッケージには、ROIタイプの処理、さまざまなデータ型とメッセージ型間の変換、およびそれらに関連する共通関数の関数が含まれる場合があります。 -This package contains a library of common functions that are useful across the traffic light recognition module. -This package may include functions for handling ROI types, converting between different data types and message types, as well as common functions related to them. diff --git a/common/tvm_utility/README.md b/common/tvm_utility/README.md index 4751428353886..f7c17d040ba35 100644 --- a/common/tvm_utility/README.md +++ b/common/tvm_utility/README.md @@ -1,27 +1,21 @@ -# TVM Utility +# TVMユーティリティ -This is the design document for the `tvm_utility` package. For instructions on how to build the tests for YOLOv2 Tiny, -see the [YOLOv2 Tiny Example Pipeline](tvm-utility-yolo-v2-tiny-tests.md). -For information about where to store test artifacts see the [TVM Utility Artifacts](artifacts/README.md). +これは`tvm_utility`パッケージの設計文書です。YOLOv2 Tinyのテストを作成する方法については、[YOLOv2 Tiny例パイプライン](tvm-utility-yolo-v2-tiny-tests.md)を参照してください。テストアーティファクトを保存する場所については、[TVMユーティリティアーティファクト](artifacts/README.md)を参照してください。 -## Purpose / Use cases +## 目的/ユースケース -A set of c++ utilities to help build a TVM based machine learning inference pipeline. The library contains a pipeline -class which helps building the pipeline and a number of utility functions that are common in machine learning. +TVMベースの機械学習推論パイプラインを構築するために役立つ、C++ユーティリティのセットです。ライブラリにはパイプラインの構築に役立つパイプラインクラスと、機械学習によくある多数のユーティリティ関数が含まれます。 -## Design +## 設計 -The Pipeline Class is a standardized way to write an inference pipeline. The pipeline class contains 3 different stages: -the pre-processor, the inference engine and the post-processor. The TVM implementation of an inference engine stage is -provided. +パイプラインクラスは推論パイプラインを作成するための標準化された方法です。パイプラインクラスには、プリプロセッサ、推論エンジン、およびポストプロセッサの3つの異なるステージが含まれています。TVMの推論エンジンステージの実装が提供されます。 ### API -The pre-processor and post-processor need to be implemented by the user before instantiating the pipeline. You can see example -usage in the example pipeline at `test/yolo_v2_tiny`. +プリプロセッサとポストプロセッサは、パイプラインをインスタンス化する前にユーザによって実装される必要があります。`test/yolo_v2_tiny`のサンプルパイプラインで、使用例を確認できます。 + +パイプラインの各ステージには、入力データをパラメータとして取得し、出力データを返す`schedule`関数があります。パイプラインオブジェクトが作成されると、`pipeline.schedule`が呼び出されてパイプラインが実行されます。 -Each stage in the pipeline has a `schedule` function which takes input data as a parameter and return the output data. -Once the pipeline object is created, `pipeline.schedule` is called to run the pipeline. ```{cpp} int main() { @@ -31,32 +25,30 @@ int main() { } ``` -#### Version checking +#### バージョンチェック + +`InferenceEngineTVM::version_check` 関数は、使用中のニューラルネットワークのバージョンが、サポートされているバージョン範囲(古いものから新しいものまで)に含まれているかどうかをチェックするために使用できます。 -The `InferenceEngineTVM::version_check` function can be used to check the version of the neural network in use against the range of earliest to latest supported versions. +`InferenceEngineTVM` クラスは、サポートされている最新のバージョンを保持しており、ターゲットバージョンが変更された場合は更新する必要があります。ただし、このバージョン変更の影響が、このバージョンの依存パッケージに及ぼされるかどうかをテストした後で変更してください。 -The `InferenceEngineTVM` class holds the latest supported version, which needs to be updated when the targeted version changes; after having tested the effect of the version change on the packages dependent on this one. +最も古いサポートされているバージョンは、推論を利用する各パッケージによって異なります。したがって、これらのパッケージで定義(および維持)する必要があります。 -The earliest supported version depends on each package making use of the inference, and so should be defined (and maintained) in those packages. +#### モデル -#### Models +依存パッケージでは、このパッケージの `get_neural_network` cmake 関数を使用して、適切な外部依存関係を構築する必要があります。 -Dependent packages are expected to use the `get_neural_network` cmake function from this package in order to build proper external dependency. +### エラーの検出と処理 -### Error detection and handling +エラーが発生した場合はいつでも `std::runtime_error` がスローされる必要があります。適切なテキストエラーの説明を入力する必要があります。 -`std::runtime_error` should be thrown whenever an error is encountered. It should be populated with an appropriate text -error description. +### ニューラルネットワークプロバイダー -### Neural Networks Provider +ニューラルネットワークは [Model Zoo](https://github.com/autowarefoundation/modelzoo/) CI パイプラインの一部としてコンパイルされ、S3 バケットに保存されます。 -The neural networks are compiled as part of the -[Model Zoo](https://github.com/autowarefoundation/modelzoo/) CI pipeline and saved to an S3 bucket. +`get_neural_network` 関数は、アーティファクト管理のための抽象化を作成します。ユーザーはモデル構成のヘッダーファイルが "data/user/${MODEL_NAME}/" にあるかどうかを確認する必要があります。見つからない場合、何も起こらず、パッケージのコンパイルはスキップされます。 -The `get_neural_network` function creates an abstraction for the artifact management. -Users should check if model configuration header file is under "data/user/${MODEL_NAME}/". Otherwise, nothing happens and compilation of the package will be skipped. +関数を活用するパッケージのソースディレクトリの構造は次のとおりです。 -The structure inside of the source directory of the package making use of the function is as follow: ```{text} . @@ -69,69 +61,67 @@ The structure inside of the source directory of the package making use of the fu │ └── ... ``` -The `inference_engine_tvm_config.hpp` file needed for compilation by dependent packages should be available under "data/models/${MODEL_NAME}/inference_engine_tvm_config.hpp". -Dependent packages can use the cmake `add_dependencies` function with the name provided in the `DEPENDENCY` output parameter of `get_neural_network` to ensure this file is created before it gets used. +`inference_engine_tvm_config.hpp` ファイルは依存パッケージでコンパイルするために必要なので、「data/models/${MODEL_NAME}/inference_engine_tvm_config.hpp」に対して準備できます。 +依存パッケージは、`get_neural_network` の `DEPENDENCY` 出力パラメータで提供される名前で cmake の `add_dependencies` 関数を使用して、このファイルが使用される前に作成されるようにできます。 + +他の `deploy_*` ファイルは、パッケージの `share` ディレクトリの下の「models/${MODEL_NAME}/」にインストールされます。 -The other `deploy_*` files are installed to "models/${MODEL_NAME}/" under the `share` directory of the package. +他のモデルファイルはパッケージフォルダの下の autoware_data フォルダ内に、次の構造を使用して格納する必要があります。 -The other model files should be stored in autoware_data folder under package folder with the structure: ```{text} $HOME/autoware_data -| └──${package} -| └──models -| ├── ${MODEL 1} -| | ├── deploy_graph.json -| | ├── deploy_lib.so -| | └── deploy_param.params + +| └──${パッケージ} +| └──モデル +| ├── ${モデル 1} +| | ├── デプロイ_グラフ.json +| | ├── デプロイ_ライブラリ.so +| | └── デプロイ_パラメータ.params | ├── ... -| └── ${MODEL ...} +| └── ${モデル ...} | └── ... -``` -#### Inputs / Outputs +#### 入力/出力 -Outputs: +出力: -- `get_neural_network` cmake function; create proper external dependency for a package with use of the model provided by the user. +- `get_neural_network` cmake関数: ユーザーが提供するモデルを使用するパッケージ用の適切な外部依存関係を作成します。 -In/Out: +入出力: -- The `DEPENDENCY` argument of `get_neural_network` can be checked for the outcome of the function. - It is an empty string when the neural network wasn't provided by the user. +- `get_neural_network`の`DEPENDENCY`引数は、関数の結果を確認できます。 + ユーザーがニューラルネットワークを提供しなかった場合、空文字列になります。 -## Security considerations +## セキュリティの考慮事項 -### Pipeline +### パイプライン -Both the input and output are controlled by the same actor, so the following security concerns are out-of-scope: +入力と出力の両方が同じアクタによって制御されるため、以下のセキュリティ上の懸念事項は対象外です: -- Spoofing -- Tampering +- なりすまし +- 改ざん -Leaking data to another actor would require a flaw in TVM or the host operating system that allows arbitrary memory to -be read, a significant security flaw in itself. This is also true for an external actor operating the pipeline early: -only the object that initiated the pipeline can run the methods to receive its output. +データを別のアクタに漏洩するには、任意のメモリを読み取ることができるTVMまたはホストオペレーティングシステムの欠陥、それ自体が重大なセキュリティ上の欠陥を必要とします。これは、パイプラインを早期に操作する外部アクタにも当てはまります。パイプラインを開始したオブジェクトのみが出力を受け取るためのメソッドを実行できます。 -A Denial-of-Service attack could make the target hardware unusable for other pipelines but would require being able to -run code on the CPU, which would already allow a more severe Denial-of-Service attack. +サービス妨害攻撃は、対象のハードウェアを他のパイプラインで使用できなくする可能性がありますが、CPUでコードを実行できる必要があるため、より深刻なサービス妨害攻撃をすでに可能にします。 -No elevation of privilege is required for this package. +このパッケージには権限の昇格は必要ありません。 -### Network provider +### ネットワークプロバイダー -The pre-compiled networks are downloaded from an S3 bucket and are under threat of spoofing, -tampering and denial of service. -Spoofing is mitigated by using an https connection. -Mitigations for tampering and denial of service are left to AWS. +事前コンパイルされたネットワークはS3バケットからダウンロードされ、なりすまし、改ざん、サービス妨害の脅威にさらされています。 +なりすましはhttps接続を使用することで軽減されます。 +改ざんとサービス妨害に対する軽減策はAWSに委ねられています。 -The user-provided networks are installed as they are on the host system. -The user is in charge of securing the files they provide with regard to information disclosure. +ユーザー提供のネットワークは、ホストシステムにそのままインストールされます。 +ユーザーは、情報開示に関して提供するファイルのセキュリティを確保する責任があります。 -## Future extensions / Unimplemented parts +## 今後の拡張/実装されていない部分 -Future packages will use tvm_utility as part of the perception stack to run machine learning workloads. +将来のパッケージは、Perceptionスタックの一部としてtvm_utilityを使用して、機械学習の処理を実行します。 -## Related issues +## 関連する問題 + diff --git a/common/tvm_utility/artifacts/README.md b/common/tvm_utility/artifacts/README.md index a2c6affd9a0e7..7fb482bef715e 100644 --- a/common/tvm_utility/artifacts/README.md +++ b/common/tvm_utility/artifacts/README.md @@ -1,6 +1,7 @@ -# TVM Utility Artifacts +## TVMユーティリティアーティファクト -Place any test artifacts in subdirectories within this directory. +テストアーティファクトは、このディレクトリ内のサブディレクトリ内に配置してください。 -e.g.: +例: ./artifacts/yolo_v2_tiny + diff --git a/control/autoware_autonomous_emergency_braking/README.md b/control/autoware_autonomous_emergency_braking/README.md index 42b3f4c9f96de..2fea30db0cc00 100644 --- a/control/autoware_autonomous_emergency_braking/README.md +++ b/control/autoware_autonomous_emergency_braking/README.md @@ -1,66 +1,65 @@ -# Autonomous Emergency Braking (AEB) +# 自動緊急ブレーキ (AEB) -## Purpose / Role +## 目的/役割 -`autonomous_emergency_braking` is a module that prevents collisions with obstacles on the predicted path created by a control module or sensor values estimated from the control module. +`autonomous_emergency_braking` は、制御モジュールによって作成された予測経路上の障害物や、制御モジュールから推定されたセンサー値との衝突を防ぐモジュールです。 -### Assumptions +### 前提条件 -This module has following assumptions. +このモジュールは以下の前提条件に基づいています。 -- The predicted path of the ego vehicle can be made from either the path created from sensors or the path created from a control module, or both. +- 自車の予測経路は、センサーから作成された経路、制御モジュールから作成された経路、またはその両方のいずれかから作成できます。 -- The current speed and angular velocity can be obtained from the sensors of the ego vehicle, and it uses points as obstacles. +- 自車の現在の速度と角速度は、自車のセンサーから取得でき、点として障害物が使用されます。 -- The AEBs target obstacles are 2D points that can be obtained from the input point cloud or by obtaining the intersection points between the predicted ego footprint path and a predicted object's shape. +- AEBs の対象障害物は、入力された点群から取得するか、予測された自車のフットプリント経路と予測されたオブジェクトの形状との交点を求めることで取得できる 2D 点です。 -### IMU path generation: steering angle vs IMU's angular velocity +### IMU パス生成: ステアリング角度と IMU の角速度 -Currently, the IMU-based path is generated using the angular velocity obtained by the IMU itself. It has been suggested that the steering angle could be used instead onf the angular velocity. +現在、IMU ベースのパスは、IMU 自体によって取得された角速度を使用して生成されています。角速度の代わりにステアリング角度を使用することが提案されています。 -The pros and cons of both approaches are: +両方のアプローチの長所と短所は次のとおりです。 -IMU angular velocity: +IMU 角速度: -- (+) Usually, it has high accuracy -- (-) Vehicle vibration might introduce noise. +- (+) 一般的に高精度 +- (-) 車両の振動によりノイズが発生する可能性があります。 -Steering angle: +ステアリング角度: -- (+) Not so noisy -- (-) May have a steering offset or a wrong gear ratio, and the steering angle of Autoware and the real steering may not be the same. +- (+) ノイズが少ない +- (-) ステアリングオフセットまたは間違ったギアレシオが発生する可能性があり、Autoware のステアリング角度と実際のステアリングが同じではない場合があります。 -For the moment, there are no plans to implement the steering angle on the path creation process of the AEB module. +現時点では、AEB モジュールのパス作成プロセスにステアリング角度を実装する予定はありません。 -## Inner-workings / Algorithms +## 内部処理/アルゴリズム -AEB has the following steps before it outputs the emergency stop signal. +AEB は、緊急停止信号を出力する前に次の手順を実行します。 -1. Activate AEB if necessary. +1. 必要に応じて AEB をアクティブ化します。 -2. Generate a predicted path of the ego vehicle. +2. 自車の予測経路を生成します。 -3. Get target obstacles from the input point cloud and/or predicted object data. +3. 入力点群や予測されたオブジェクトデータから対象障害物を入手します。 -4. Estimate the closest obstacle speed. +4. 最も近い障害物の速度を推定します。 -5. Collision check with target obstacles. +5. 対象障害物との衝突チェックを行います。 -6. Send emergency stop signals to `/diagnostics`. +6. `/diagnostics` に緊急停止信号を送信します。 -We give more details of each section below. +以下に、各セクションの詳細を示します。 -### 1. Activate AEB if necessary +### 1. 必要に応じて AEB をアクティブ化する -We do not activate AEB module if it satisfies the following conditions. +次の条件を満たしている場合は、AEB モジュールをアクティブ化しません。 -- Ego vehicle is not in autonomous driving state +- 自車が自動運転状態にない場合 +- 自車が動いていない場合 (現在の速度が 0.1 m/s のしきい値を下回る場合) -- When the ego vehicle is not moving (Current Velocity is below a 0.1 m/s threshold) +### 2. 自車走行経路の予測 -### 2. Generate a predicted path of the ego vehicle - -AEB generates a predicted footprint path based on current velocity and current angular velocity obtained from attached sensors. Note that if `use_imu_path` is `false`, it skips this step. This predicted path is generated as: +AEBは、搭載センサーから取得した現在の速度および現在の角速度に基づいて、予測したフットプリント経路を生成します。`use_imu_path`が`false`の場合、このステップはスキップされることに注意してください。この予測経路は以下のように生成されます。 $$ x_{k+1} = x_k + v cos(\theta_k) dt \\ @@ -68,59 +67,58 @@ y_{k+1} = y_k + v sin(\theta_k) dt \\ \theta_{k+1} = \theta_k + \omega dt $$ -where $v$ and $\omega$ are current longitudinal velocity and angular velocity respectively. $dt$ is time interval that users can define in advance. +ここで、$v$と$\omega$はそれぞれ現在の縦断速度および角速度です。$dt$はユーザーが事前に定義できる時間間隔です。 -On the other hand, if `use_predicted_trajectory` is set to true, the AEB module will use the predicted path from the MPC as a base to generate a footprint path. Both the IMU footprint path and the MPC footprint path can be used at the same time. +一方、`use_predicted_trajectory`がtrueに設定されている場合、AEBモジュールはMPCからの予測経路をベースとしてフットプリント経路を生成します。IMUフットプリント経路とMPCフットプリント経路は同時に使用できます。 -### 3. Get target obstacles +### 3. ターゲット障害物の取得 -After generating the ego footprint path(s), the target obstacles are identified. There are two methods to find target obstacles: using the input point cloud, or using the predicted object information coming from perception modules. +自車フットプリント経路を生成した後、ターゲット障害物が特定されます。ターゲット障害物を検索するには、入力点群を使用するか、知覚モジュールから来る予測オブジェクト情報を使用する2つの方法があります。 -#### Pointcloud obstacle filtering +#### 点群障害物フィルタリング -The AEB module can filter the input pointcloud to find target obstacles with which the ego vehicle might collide. This method can be enable if the `use_pointcloud_data` parameter is set to true. The pointcloud obstacle filtering has three major steps, which are rough filtering, noise filtering with clustering and rigorous filtering. +AEBモジュールは、入力点群をフィルタリングして、自車が衝突する可能性のあるターゲット障害物を見つけることができます。この方法は、`use_pointcloud_data`パラメーターをtrueに設定すると有効になります。点群障害物フィルタリングには、粗フィルタリング、クラスタリングによるノイズフィルタリング、厳密フィルタリングの3つの主要ステップがあります。 -##### Rough filtering +##### 粗フィルタリング -In rough filtering step, we select target obstacle with simple filter. Create a search area up to a certain distance (default is half of the ego vehicle width plus the `path_footprint_extra_margin` parameter) away from the predicted path of the ego vehicle and ignore the point cloud that are not within it. The rough filtering step is illustrated below. +粗フィルタリングステップでは、単純なフィルタを使用してターゲット障害物を選択します。自車の予測経路から一定の距離(デフォルトは自車幅の半分に`path_footprint_extra_margin`パラメーターを加えたもの)まで検索エリアを作成し、その範囲内にない点群は無視します。粗フィルタリングステップは以下に示されています。 ![rough_filtering](./image/obstacle_filtering_1.drawio.svg) -##### Noise filtering with clustering and convex hulls +##### クラスタリングと凸包によるノイズフィルタリング -To prevent the AEB from considering noisy points, euclidean clustering is performed on the filtered point cloud. The points in the point cloud that are not close enough to other points to form a cluster are discarded. Furthermore, each point in a cluster is compared against the `cluster_minimum_height` parameter, if no point inside a cluster has a height/z value greater than `cluster_minimum_height`, the whole cluster of points is discarded. The parameters `cluster_tolerance`, `minimum_cluster_size` and `maximum_cluster_size` can be used to tune the clustering and the size of objects to be ignored, for more information about the clustering method used by the AEB module, please check the official documentation on euclidean clustering of the PCL library: . +AEBがノイズのある点を考慮するのを防ぐため、フィルタリングされた点群に対してユークリッドクラスタリングが実行されます。クラスタを形成するには他の点に十分近くない点群内の点は破棄されます。さらに、クラスタ内の各点は`cluster_minimum_height`パラメーターと比較され、クラスタ内のどの点も`cluster_minimum_height`より大きい高さ/z値を持たない場合、点のクラスタ全体が破棄されます。`cluster_tolerance`、`minimum_cluster_size`、`maximum_cluster_size`パラメーターを使用して、クラスタリングと無視するオブジェクトのサイズを調整できます。AEBモジュールで使用されるクラスタリング方法の詳細については、PCLライブラリのユークリッドクラスタリングに関する公式ドキュメントを確認してください: -Furthermore, a 2D convex hull is created around each detected cluster, the vertices of each hull represent the most extreme/outside points of the cluster. These vertices are then checked in the next step. +さらに、検出された各クラスタの周囲に2D凸包が作成され、各包の頂点はクラスタの最も外側の点を表します。次に、これらの頂点は次のステップでチェックされます。 -##### Rigorous filtering +##### 厳密フィルタリング -After Noise filtering, the module performs a geometric collision check to determine whether the filtered obstacles/hull vertices actually have possibility to collide with the ego vehicle. In this check, the ego vehicle is represented as a rectangle, and the point cloud obstacles are represented as points. Only the vertices with a possibility of collision are kept. +ノイズフィルタリング後、モジュールは幾何学的衝突チェックを実行して、フィルタリングされた障害物/包の頂点が実際に自車と衝突する可能性があるかどうかを判断します。このチェックでは、自車は長方形として、点群障害物は点として表されます。衝突の可能性がある頂点のみが保持されます。 ![rigorous_filtering](./image/obstacle_filtering_2.drawio.svg) -#### Using predicted objects to get target obstacles +#### ターゲット障害物の取得における予測オブジェクトの使用 -If the `use_predicted_object_data` parameter is set to true, the AEB can use predicted object data coming from the perception modules, to get target obstacle points. This is done by obtaining the 2D intersection points between the ego's predicted footprint path and each of the predicted objects enveloping polygon or bounding box. +`use_predicted_object_data`パラメーターをtrueに設定すると、AEBは知覚モジュールから来る予測オブジェクトデータを使用してターゲット障害物点を取得できます。これは、自車の予測フットプリント経路と各予測オブジェクトの包囲多角形またはバウンディングボックスとの2D交点を取得することで行われます。 ![predicted_object_and_path_intersection](./image/using-predicted-objects.drawio.svg) -### Finding the closest target obstacle +### ターゲット障害物との最接近の特定 -Once all target obstacles have been identified, the AEB module chooses the point that is closest to the ego vehicle as the candidate for collision checking. Only the closest point is considered because RSS distance is used to judge if a collision will happen or not, and if the closest vertex to the ego is deemed to be safe from collision, the rest of the target obstacles will also be safe. +すべてのターゲット障害物が特定されたら、AEBモジュールは自車に最も近い点を衝突チェックの候補として選択します。RSS距離は衝突が発生するかどうかを判断するために使用され、自車への最も近い頂点が衝突から安全とみなされる場合、残りのターゲット障害物も衝突から安全であるため、最も近い点のみが考慮されます。 ![closest_object](./image/closest-point.drawio.svg) -### 4. Obstacle velocity estimation +### 4. 障害物速度推定 + +ターゲットポイントの速度の計算を開始するには、ポイントは速度計算エリアに入る必要があります。これは、`speed_calculation_expansion_margin`パラメーターによって定義されます。 +運用環境によっては、このマージンは初期計算ステップ中に速度の誤算によって引き起こされる不必要な自動緊急ブレーキを軽減することができます。 -To begin calculating the target point's velocity, the point must enter the speed calculation area, -which is defined by the `speed_calculation_expansion_margin` parameter. -Depending on the operational environment, -this margin can reduce unnecessary autonomous emergency braking -caused by velocity miscalculations during the initial calculation steps. +## 自動運転ソフトウェアドキュメント ![speed_calculation_expansion](./image/speed_calculation_expansion.drawio.svg) -Once the position of the closest obstacle/point is determined, the AEB modules uses the history of previously detected objects to estimate the closest object relative speed using the following equations: +最も近い障害物/ポイントの位置が決定されると、AEBモジュールは、以下の式を使用して、過去に検出されたオブジェクトの履歴から、最も近いオブジェクトの相対速度を推定します。 $$ d_{t} = t_{1} - t_{0} @@ -134,107 +132,108 @@ $$ v_{norm} = d_{x} / d_{t} $$ -Where $t_{1}$ and $t_{0}$ are the timestamps of the point clouds used to detect the current closest object and the closest object of the previous point cloud frame, and $o_{x}$ and $prev_{x}$ are the positions of those objects, respectively. +ここで、$t_{1}$と$t_{0}$は、現在の最も近いオブジェクトと、直前のポイントクラウドフレームの最も近いオブジェクトを検出するために使用したポイントクラウドのタイムスタンプであり、$o_{x}$と$prev_{x}$は、それらのオブジェクトの位置です。 ![relative_speed](./image/object_relative_speed.drawio.svg) -Note that, when the closest obstacle/point comes from using predicted object data, $v_{norm}$ is calculated by directly computing the norm of the predicted object's velocity in the x and y axes. +最も近い障害物/ポイントが予測されたオブジェクトデータを使用して得られる場合、$v_{norm}$は、x軸とy軸で予測されたオブジェクトの速度のノルムを直接計算することで計算されます。 -The velocity vector is then compared against the ego's predicted path to get the longitudinal velocity $v_{obj}$: +次に、速度ベクトルをエゴの予測経路と比較して、縦方向速度$v_{ego}$を取得します。 $$ v_{obj} = v_{norm} * Cos(yaw_{diff}) + v_{ego} $$ -where $yaw_{diff}$ is the difference in yaw between the ego path and the displacement vector $$v_{pos} = o_{pos} - prev_{pos} $$ and $v_{ego}$ is the ego's current speed, which accounts for the movement of points caused by the ego moving and not the object. All these equations are performed disregarding the z axis (in 2D). +ここで、$yaw_{diff}$は、エゴパスと移動ベクトルとの間のヨー差で、$$v_{pos} = o_{pos} - prev_{pos} $$、$v_{ego}$は、エゴの現在の速度で、エゴの移動によるポイントの移動を考慮していますが、オブジェクトによる移動は考慮していません。これらすべての式は、z軸(2D)を無視して実行されます。 -Note that, the object velocity is calculated against the ego's current movement direction. If the object moves in the opposite direction to the ego's movement, the object velocity will be negative, which will reduce the rss distance on the next step. +オブジェクト速度は、エゴの現在の移動方向に対して計算されていることに注意してください。オブジェクトがエゴの移動とは逆方向に移動する場合、オブジェクト速度は負になり、次のステップでのrss距離が短くなります。 -The resulting estimated object speed is added to a queue of speeds with timestamps. The AEB then checks for expiration of past speed estimations and eliminates expired speed measurements from the queue, the object expiration is determined by checking if the time elapsed since the speed was first added to the queue is larger than the parameter `previous_obstacle_keep_time`. Finally, the median speed of the queue is calculated. The median speed will be used to calculate the RSS distance used for collision checking. +推定されたオブジェクト速度の結果は、タイムスタンプ付きの速度のキューに追加されます。次に、AEBは過去の速度推定の有効期限を確認し、期限切れの速度測定をキューから削除します。オブジェクトの有効期限は、速度が最初にキューに追加されてからの経過時間が、パラメーター`previous_obstacle_keep_time`より大きいかどうかを確認することによって決定されます。最後に、キューの平均速度が計算されます。平均速度は、衝突確認に使用されるRSS距離を計算するために使用されます。 -### 5. Collision check with target obstacles using RSS distance +### 5. RSS距離を使用したターゲット障害物との衝突チェック -In the fourth step, it checks the collision with the closest obstacle point using RSS distance. RSS distance is formulated as: +第4ステップでは、RSS距離を使用して最も近い障害物ポイントとの衝突をチェックします。RSS距離は次のように定式化されます。 $$ d = v_{ego}*t_{response} + v_{ego}^2/(2*a_{min}) -(sign(v_{obj})) * v_{obj}^2/(2*a_{obj_{min}}) + offset $$ -where $v_{ego}$ and $v_{obj}$ is current ego and obstacle velocity, $a_{min}$ and $a_{obj_{min}}$ is ego and object minimum acceleration (maximum deceleration), $t_{response}$ is response time of the ego vehicle to start deceleration. Therefore the distance from the ego vehicle to the obstacle is smaller than this RSS distance $d$, the ego vehicle send emergency stop signals. This is illustrated in the following picture. +ここで、$v_{ego}$と$v_{obj}$は現在のエゴと障害物の速度、$a_{min}$と$a_{obj_{min}}$はエゴとオブジェクトの最小加速度(最大減速)、$t_{response}$は減速を開始するエゴ車両の応答時間です。したがって、エゴ車両から障害物までの距離がこのRSS距離$d$よりも小さい場合、エゴ車両は緊急停止信号を送信します。これは次の図に示されています。 ![rss_check](./image/rss_check.drawio.svg) -### 6. Send emergency stop signals to `/diagnostics` +### 6. `/diagnostics`に対する緊急停止信号の送信 -If AEB detects collision with point cloud obstacles in the previous step, it sends emergency signal to `/diagnostics` in this step. Note that in order to enable emergency stop, it has to send ERROR level emergency. Moreover, AEB user should modify the setting file to keep the emergency level, otherwise Autoware does not hold the emergency state. +AEBが前のステップでポイントクラウド障害物との衝突を検出した場合、このステップで`/diagnostics`に緊急信号を送信します。緊急停止を有効にするには、ERRORレベルの緊急事態を送信する必要があります。さらに、AEBユーザーは設定ファイルを修正して緊急レベルを維持する必要があります。そうしないと、Autowareは緊急状態を保持しません。 -## Use cases +## ユースケース -### Front vehicle suddenly brakes +### 前方の車両が急ブレーキ -The AEB can activate when a vehicle in front suddenly brakes, and a collision is detected by the AEB module. Provided the distance between the ego vehicle and the front vehicle is large enough and the ego’s emergency acceleration value is high enough, it is possible to avoid or soften collisions with vehicles in front that suddenly brake. NOTE: the acceleration used by the AEB to calculate rss_distance is NOT necessarily the acceleration used by the ego while doing an emergency brake. The acceleration used by the real vehicle can be tuned by changing the [mrm_emergency stop jerk and acceleration values](https://github.com/tier4/autoware_launch/blob/d1b2688f2788acab95bb9995d72efd7182e9006a/autoware_launch/config/system/mrm_emergency_stop_operator/mrm_emergency_stop_operator.param.yaml#L4). +前方車両が急ブレーキをかけ、AEBモジュールによって衝突が検出されると、AEBを起動できます。エゴ車両と前方車両の距離が十分に大きく、エゴの緊急加速度値が十分に高い場合、急ブレーキをかける前方車両との衝突を回避または緩和することができます。注意: AEBがrss距離の計算に使用した加速度は、緊急ブレーキ中にエゴが使用する加速度とは必ずしも同じではありません。実際の車両で使用される加速度は、[mrm_emergency stop jerkとacceleration値](https://github.com/tier4/autoware_launch/blob/d1b2688f2788acab95bb9995d72efd7182e9006a/autoware_launch/config/system/mrm_emergency_stop_operator/mrm_emergency_stop_operator.param.yaml#L4)を変更することで調整できます。 ![front vehicle collision prevention](./image/front_vehicle_collision.drawio.svg) -### Stop for objects that appear suddenly +### 急に登場したオブジェクトへの停止 -When an object appears suddenly, the AEB can act as a fail-safe to stop the ego vehicle when other modules fail to detect the object on time. If sudden object cut ins are expected, it might be useful for the AEB module to detect collisions of objects BEFORE they enter the real ego vehicle path by increasing the `expand_width` parameter. +突然物体が現れた場合、他のモジュールが時間内に物体を検出できなかったとき、AEB は自動運転車両を停止するためにフェイルセーフとして動作できます。オブジェクトによる急な割り込みが予想される場合は、`expand_width` パラメータを増やすことで、AEB モジュールがオブジェクトが自動運転車両の実際のパスに入る前に衝突を検出するのに役立つ場合があります。 -![occluded object collision prevention](./image/occluded_space.drawio.svg) +![後方車両との衝突防止](./image/occluded_space.drawio.svg) -### Preventing Collisions with rear objects +### 後方オブジェクトとの衝突の防止 -The AEB module can also prevent collisions when the ego vehicle is moving backwards. +AEB モジュールは、自動運転車両が後退している場合にも衝突を防止できます。 -![backward driving](./image/backward-driving.drawio.svg) +![後退運転](./image/backward-driving.drawio.svg) -### Preventing collisions in case of wrong Odometry (IMU path only) +### オドメータの誤りによる衝突の防止(IMU パスのみ) -When vehicle odometry information is faulty, it is possible that the MPC fails to predict a correct path for the ego vehicle. If the MPC predicted path is wrong, collision avoidance will not work as intended on the planning modules. However, the AEB’s IMU path does not depend on the MPC and could be able to predict a collision when the other modules cannot. As an example you can see a figure of a hypothetical case in which the MPC path is wrong and only the AEB’s IMU path detects a collision. +車両オドメータの情報に誤りがある場合、MPC が自動運転車両の正しいパスを予測できない可能性があります。MPC が予測したパスが間違っていると、衝突回避が計画モジュールで意図したとおりに機能しません。ただし、AEB の IMU パスは MPC に依存せず、他のモジュールが衝突を検出できない場合に衝突を予測できる可能性があります。たとえば、MPC パスが間違っており、AEB の IMU パスのみが衝突を検出する仮想ケースの図を示します。 -![wrong mpc](./image/wrong-mpc.drawio.svg) +![間違った mpc](./image/wrong-mpc.drawio.svg) -## Parameters +## パラメータ -| Name | Unit | Type | Description | Default value | -| :--------------------------------- | :----- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| publish_debug_markers | [-] | bool | flag to publish debug markers | true | -| publish_debug_pointcloud | [-] | bool | flag to publish the point cloud used for debugging | false | -| use_predicted_trajectory | [-] | bool | flag to use the predicted path from the control module | true | -| use_imu_path | [-] | bool | flag to use the predicted path generated by sensor data | true | -| use_object_velocity_calculation | [-] | bool | flag to use the object velocity calculation. If set to false, object velocity is set to 0 [m/s] | true | -| check_autoware_state | [-] | bool | flag to enable or disable autoware state check. If set to false, the AEB module will run even when the ego vehicle is not in AUTONOMOUS state. | true | -| detection_range_min_height | [m] | double | minimum hight of detection range used for avoiding the ghost brake by false positive point clouds | 0.0 | -| detection_range_max_height_margin | [m] | double | margin for maximum hight of detection range used for avoiding the ghost brake by false positive point clouds. `detection_range_max_height = vehicle_height + detection_range_max_height_margin` | 0.0 | -| voxel_grid_x | [m] | double | down sampling parameters of x-axis for voxel grid filter | 0.05 | -| voxel_grid_y | [m] | double | down sampling parameters of y-axis for voxel grid filter | 0.05 | -| voxel_grid_z | [m] | double | down sampling parameters of z-axis for voxel grid filter | 100000.0 | -| cluster tolerance | [m] | double | maximum allowable distance between any two points to be considered part of the same cluster | 0.15 | -| cluster_minimum_height | [m] | double | at least one point in a cluster must be higher than this value for the cluster to be included in the set of possible collision targets | 0.1 | -| minimum_cluster_size | [-] | int | minimum required amount of points contained by a cluster for it to be considered as a possible target obstacle | 10 | -| maximum_cluster_size | [-] | int | maximum amount of points contained by a cluster for it to be considered as a possible target obstacle | 10000 | -| min_generated_imu_path_length | [m] | double | minimum distance for a predicted path generated by sensors | 0.5 | -| max_generated_imu_path_length | [m] | double | maximum distance for a predicted path generated by sensors | 10.0 | -| expand_width | [m] | double | expansion width of the ego vehicle for the collision check | 0.1 | -| longitudinal_offset | [m] | double | longitudinal offset distance for collision check | 2.0 | -| t_response | [s] | double | response time for the ego to detect the front vehicle starting deceleration | 1.0 | -| a_ego_min | [m/ss] | double | maximum deceleration value of the ego vehicle | -3.0 | -| a_obj_min | [m/ss] | double | maximum deceleration value of objects | -3.0 | -| imu_prediction_time_horizon | [s] | double | time horizon of the predicted path generated by sensors | 1.5 | -| imu_prediction_time_interval | [s] | double | time interval of the predicted path generated by sensors | 0.1 | -| mpc_prediction_time_horizon | [s] | double | time horizon of the predicted path generated by mpc | 1.5 | -| mpc_prediction_time_interval | [s] | double | time interval of the predicted path generated by mpc | 0.1 | -| aeb_hz | [-] | double | frequency at which AEB operates per second | 10 | -| speed_calculation_expansion_margin | [m] | double | expansion width of the ego vehicle for the beginning speed calculation | 0.1 | +| Name | 単位 | タイプ | 説明 | デフォルト値 | +| :--------------------------------- | :----- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| publish_debug_markers | [なし] | ブール | デバッグマーカーを発行するフラグ | true | +| publish_debug_pointcloud | [なし] | ブール | デバッグに使用されるポイントクラウドを発行するフラグ | false | +| use_predicted_trajectory | [なし] | ブール | コントロールモジュールからの予測パスの使用フラグ | true | +| use_imu_path | [なし] | ブール | センサーデータによって生成された予測パスの使用フラグ | true | +| use_object_velocity_calculation | [なし] | ブール | オブジェクト速度計算の使用フラグ。 `false` に設定すると、オブジェクト速度は 0 [m/s] に設定されます。 | true | +| check_autoware_state | [なし] | ブール | Autoware ステートチェックの有効/無効フラグ。 `false` に設定すると、エゴ車が AUTONOMOUS ステートにない場合でも AEB モジュールは動作します。 | true | +| detection_range_min_height | [m] | 倍精度 | 誤検出によるゴーストブレーキを回避するために使用される検出範囲の最小高さ | 0.0 | +| detection_range_max_height_margin | [m] | 倍精度 | 誤検出によるゴーストブレーキを回避するために使用される検出範囲の最大高さのマージン。 `detection_range_max_height = vehicle_height + detection_range_max_height_margin` | 0.0 | +| voxel_grid_x | [m] | 倍精度 | ボクセルグリッドフィルタの X 軸ダウンサンプリングパラメータ | 0.05 | +| voxel_grid_y | [m] | 倍精度 | ボクセルグリッドフィルタの Y 軸ダウンサンプリングパラメータ | 0.05 | +| voxel_grid_z | [m] | 倍精度 | ボクセルグリッドフィルタの Z 軸ダウンサンプリングパラメータ | 減速 | +| cluster tolerance | [m] | 倍精度 | 2 つの点の間に許容可能な最大距離。それ以下の距離では、同じクラスタの一部とみなされます。 | 0.15 | +| cluster_minimum_height | [m] | 倍精度 | クラスタ内の少なくとも 1 つの点が衝突対象の可能性のあるクラスタに含まれるために、この値よりも高くする必要があります。 | 0.1 | +| minimum_cluster_size | [なし] | 整数 | 対象の障害物として考慮されるためには、クラスタに必要最低限のポイント数 | 10 | +| maximum_cluster_size | [なし] | 整数 | 対象の障害物として考慮されるためには、クラスタに含まれる最大ポイント数 | 10000 | +| min_generated_imu_path_length | [m] | 倍精度 | センサーによって生成された予測パスの最小距離 | 0.5 | +| max_generated_imu_path_length | [m] | 倍精度 | センサーによって生成された予測パスの最大距離 | 10.0 | +| expand_width | [m] | 倍精度 | 衝突チェック時のエゴ車両の拡張幅 | 0.1 | +| longitudinal_offset | [m] | 倍精度 | 衝突チェック時の縦方向オフセット距離 | 2.0 | +| t_response | [s] | 倍精度 | エゴ車が前方の車両を検知してから減速を開始するまでの反応時間 | 1.0 | +| a_ego_min | [m/ss] | 倍精度 | エゴ車両の最大減速度 | -3.0 | +| a_obj_min | [m/ss] | 倍精度 | オブジェクトの最大減速度 | -3.0 | +| imu_prediction_time_horizon | [s] | 倍精度 | センサーによって生成された予測パスの時間範囲 | 1.5 | +| imu_prediction_time_interval | [s] | 倍精度 | センサーによって生成された予測パスの時間間隔 | Planning | +| mpc_prediction_time_horizon | [s] | 倍精度 | mpc によって生成された予測パスの時間範囲 | 1.5 | +| mpc_prediction_time_interval | [s] | 倍精度 | mpc によって生成された予測パスの時間間隔 | 0.1 | +| aeb_hz | [なし] | 倍精度 | AEBが1秒間に動作する頻度 | 10 | +| speed_calculation_expansion_margin | [m] | 倍精度 | 開始速度計算時のエゴ車両の拡張幅 | 0.1 | -## Limitations +## 制約事項 -- The distance required to stop after collision detection depends on the ego vehicle's speed and deceleration performance. To avoid collisions, it's necessary to increase the detection distance and set a higher deceleration rate. However, this creates a trade-off as it may also increase the number of unnecessary activations. Therefore, it's essential to consider what role this module should play and adjust the parameters accordingly. +- 衝突検出後の停止に必要な距離は、自車速度と減速性能によって異なります。衝突を回避するには、検出距離を長くし、より高い減速率を設定する必要があります。ただし、不要なアクティベーションの数を増やす可能性があるため、トレードオフが生じます。したがって、このモジュールが果たすべき役割を考慮し、それに応じてパラメータを調整することが不可欠です。 -- AEB might not be able to react with obstacles that are close to the ground. It depends on the performance of the pre-processing methods applied to the point cloud. +- AEBは、地上に近い障害物に対しては反応できない場合があります。これは、点群に適用される前処理方法のパフォーマンスに依存します。 -- Longitudinal acceleration information obtained from sensors is not used due to the high amount of noise. +- センサーから取得した縦方向加速度の情報は、ノイズが大きいので使用されていません。 -- The accuracy of the predicted path created from sensor data depends on the accuracy of sensors attached to the ego vehicle. +- センサーデータから作成された予測経路の精度は、自車に搭載されたセンサーの精度に依存します。 ![aeb_range](./image/range.drawio.svg) + diff --git a/control/autoware_control_validator/README.md b/control/autoware_control_validator/README.md index cc3d2069c940f..9a3b89a863029 100644 --- a/control/autoware_control_validator/README.md +++ b/control/autoware_control_validator/README.md @@ -1,65 +1,83 @@ -# Control Validator +# 制御検証器 -The `control_validator` is a module that checks the validity of the output of the control component. The status of the validation can be viewed in the `/diagnostics` topic. +`control_validator` は制御コンポーネントの出力の妥当性を確認するモジュールです。検証のステータスは `/diagnostics` トピックで確認できます。 ![control_validator](./image/control_validator.drawio.svg) -## Supported features +## サポート対象機能 -The following features are supported for the validation and can have thresholds set by parameters. -The listed features below does not always correspond to the latest implementation. +検証に対して、次の機能がサポートされており、しきい値をパラメータによって設定できます。 +以下にリストされている機能は常に最新のインプリメンテーションに対応しているわけではありません。 -| Description | Arguments | Diagnostic equation | -| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | :---------------------------------------------------: | -| Inverse velocity: Measured velocity has a different sign from the target velocity. | measured velocity $v$, target velocity $\hat{v}$, and velocity parameter $c$ | $v \hat{v} < 0, \quad \lvert v \rvert > c$ | -| Overspeed: Measured speed exceeds target speed significantly. | measured velocity $v$, target velocity $\hat{v}$, ratio parameter $r$, and offset parameter $c$ | $\lvert v \rvert > (1 + r) \lvert \hat{v} \rvert + c$ | +| 説明 | 引数 | 診断式 | +| ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | :--------------------------------------------------: | +| 逆速度: 計測速度が目標速度と符号が異なる。 | 計測速度 $v$、目標速度 $\hat{v}$、および速度パラメータ $c$ | $v \hat{v} < 0, \quad \lvert v \rvert > c$ | +| 過速度: 計測速度が目標速度を著しく上回る。 | 計測速度 $v$、目標速度 $\hat{v}$、比率パラメータ $r$、およびオフセットパラメータ $c$ | $\lvert v \rvert > (1 + r) \lvert \hat{v} \rvert + c$ | -- **Deviation check between reference trajectory and predicted trajectory** : invalid when the largest deviation between the predicted trajectory and reference trajectory is greater than the given threshold. +- **基準軌跡と予測軌跡の逸脱量チェック**: 予測軌跡と基準軌跡との間の最大逸脱量が指定されたしきい値を超えている場合、無効になります。 ![trajectory_deviation](./image/trajectory_deviation.drawio.svg) -## Inputs/Outputs +## 入出力 -### Inputs +### 入力量 -The `control_validator` takes in the following inputs: +`control_validator` には、次の入力量があります。 -| Name | Type | Description | -| ------------------------------ | --------------------------------- | ------------------------------------------------------------------------------ | -| `~/input/kinematics` | nav_msgs/Odometry | ego pose and twist | -| `~/input/reference_trajectory` | autoware_planning_msgs/Trajectory | reference trajectory which is outputted from planning module to to be followed | -| `~/input/predicted_trajectory` | autoware_planning_msgs/Trajectory | predicted trajectory which is outputted from control module | +| 名前 | タイプ | 説明 | +| ----------------------------------- | ------------------------------------- | ----------------------------------------------------------------------------------- | +| `~/input/kinematics` | nav_msgs/Odometry | 自車位置とツイスト | +| `~/input/reference_trajectory` | autoware_planning_msgs/Trajectory | Planningモジュールから出力され、追従すべきリファレンストラジェクトリ | +| `~/input/predicted_trajectory` | autoware_planning_msgs/Trajectory | Controlモジュールから出力された予測軌跡 | -### Outputs +### 出力 -It outputs the following: +以下の値を出力します。 -| Name | Type | Description | -| ---------------------------- | ---------------------------------------- | ------------------------------------------------------------------------- | -| `~/output/validation_status` | control_validator/ControlValidatorStatus | validator status to inform the reason why the trajectory is valid/invalid | -| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | diagnostics to report errors | +- **Planning経路:** Planningモジュールによって生成された経路。経路はポリラインで表現され、各地点は世界座標系で指定されます。 +- **Planningコマンド:** Planningモジュールによって生成されたコマンド。コマンドは、ハンドル角、加速度、速度などの車両動作を指定します。 +- **現在の自己位置:** GNSSやIMUなどのセンサから得られた車両の位置と姿勢。 +- **地図:** 地形、道路、建物などの環境に関する情報。 +- **障害物情報:** ライダー、カメラ、レーダーなどのセンサから得られた障害物の位置と形状。 +- **センサー情報:** Rawセンサデータ(オプション)。 -## Parameters +### 内部処理 -The following parameters can be set for the `control_validator`: +Autoware.Autoは、以下のような内部処理を実行します。 -### System parameters +- **環境認識:** センサーデータから車両の周囲を認識します。 +- **Planning:** Planning経路とPlanningコマンドを生成します。 +- **制御:** Planningコマンドに基づいて車両を制御します。 +- **状態推定:** GNSS、IMU、オドメトリなどのセンサから自車位置を推定します。 +- **センサフュージョン:** 複数のセンサからデータを統合して、より正確でロバストな推定を行います。 -| Name | Type | Description | Default value | -| :--------------------------- | :--- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `publish_diag` | bool | if true, diagnostics msg is published. | true | -| `diag_error_count_threshold` | int | the Diag will be set to ERROR when the number of consecutive invalid trajectory exceeds this threshold. (For example, threshold = 1 means, even if the trajectory is invalid, the Diag will not be ERROR if the next trajectory is valid.) | true | -| `display_on_terminal` | bool | show error msg on terminal | true | +| 名前 | タイプ | 説明 | +| -------------------------- | ---------------------------------------- | -------------------------------------------------------------------- | +| `~/output/validation_status` | control_validator/ControlValidatorStatus | 経路の有効性/無効性の理由を知らせるバリデーターの状態 | +| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告する診断 | -### Algorithm parameters +## パラメータ -#### Thresholds +以下のパラメータを `control_validator` に設定できます。 -The input trajectory is detected as invalid if the index exceeds the following thresholds. +### システムパラメータ + +| 名前 | 型 | 説明 | デフォルト値 | +| :--------------------------- | :--- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------ | +| `publish_diag` | bool | trueの場合、診断msgが公開されます。 | true | +| `diag_error_count_threshold` | int | 連続して無効な軌跡の数がこのしきい値を超えた場合、diagはERRORに設定されます(例:しきい値= 1の場合、軌跡が無効であっても、次の軌跡が有効な場合はdiagはERRORになりません)。 | true | +| `display_on_terminal` | bool | エラーメッセージをターミナルに表示します。 | true | + +### アルゴリズムパラメータ + +#### しきい値 + +インデックスが以下のしきい値を超えた場合、入力軌跡は無効と検出されます。 + +| 名称 | タイプ | 説明 | デフォルト値 | +| :---------------------------------- | :----- | :--------------------------------------------------------------------------------------------------------- | :------------ | +| `thresholds.max_distance_deviation` | double | 予測パスと基準軌道間の最大距離逸脱量の無効なしきい値 [m] | 1.0 | +| `thresholds.rolling_back_velocity` | double | 自車速度の有効性を検証するためのしきい値速度 [m/s] | 0.5 | +| `thresholds.over_velocity_offset` | double | 自車速度の有効性を検証するためのしきい値速度オフセット [m/s] | 2.0 | +| `thresholds.over_velocity_ratio` | double | 自車速度の有効性を検証するためのしきい値速度比率 [*] | 0.2 | -| Name | Type | Description | Default value | -| :---------------------------------- | :----- | :---------------------------------------------------------------------------------------------------------- | :------------ | -| `thresholds.max_distance_deviation` | double | invalid threshold of the max distance deviation between the predicted path and the reference trajectory [m] | 1.0 | -| `thresholds.rolling_back_velocity` | double | threshold velocity to valid the vehicle velocity [m/s] | 0.5 | -| `thresholds.over_velocity_offset` | double | threshold velocity offset to valid the vehicle velocity [m/s] | 2.0 | -| `thresholds.over_velocity_ratio` | double | threshold ratio to valid the vehicle velocity [*] | 0.2 | diff --git a/control/autoware_external_cmd_selector/README.md b/control/autoware_external_cmd_selector/README.md index 0c76afff35e53..0b61813eca35b 100644 --- a/control/autoware_external_cmd_selector/README.md +++ b/control/autoware_external_cmd_selector/README.md @@ -1,38 +1,39 @@ # autoware_external_cmd_selector -## Purpose +## 目的 -`autoware_external_cmd_selector` is the package to publish `external_control_cmd`, `gear_cmd`, `hazard_lights_cmd`, `heartbeat` and `turn_indicators_cmd`, according to the current mode, which is `remote` or `local`. +`autoware_external_cmd_selector`は、現在モード(`remote`または`local`)に応じて、`external_control_cmd`、`gear_cmd`、`hazard_lights_cmd`、`heartbeat`、`turn_indicators_cmd`を発行するためのパッケージです。 -The current mode is set via service, `remote` is remotely operated, `local` is to use the values calculated by Autoware. +現在のモードはサービス経由で設定され、`remote`はリモート操作、`local`はAutowareによって計算された値を使うことです。 -## Input / Output +## 入出力 -### Input topics +### 入力トピック -| Name | Type | Description | -| ---------------------------------------------- | ---- | ------------------------------------------------------- | -| `/api/external/set/command/local/control` | TBD | Local. Calculated control value. | -| `/api/external/set/command/local/heartbeat` | TBD | Local. Heartbeat. | -| `/api/external/set/command/local/shift` | TBD | Local. Gear shift like drive, rear and etc. | -| `/api/external/set/command/local/turn_signal` | TBD | Local. Turn signal like left turn, right turn and etc. | -| `/api/external/set/command/remote/control` | TBD | Remote. Calculated control value. | -| `/api/external/set/command/remote/heartbeat` | TBD | Remote. Heartbeat. | -| `/api/external/set/command/remote/shift` | TBD | Remote. Gear shift like drive, rear and etc. | -| `/api/external/set/command/remote/turn_signal` | TBD | Remote. Turn signal like left turn, right turn and etc. | +| 名前 | タイプ | 説明 | +| --------------------------------------------- | ---- | --------------------------------------------------------- | +| `/api/external/set/command/local/control` | TBD | 局所的。制御の計算値 | +| `/api/external/set/command/local/heartbeat` | TBD | 局所的。ハートビート | +| `/api/external/set/command/local/shift` | TBD | 局所的。ドライブ、リアなどのようなギアシフト | +| `/api/external/set/command/local/turn_signal` | TBD | 局所的。左折、右折などのターなのが信号 | +| `/api/external/set/command/remote/control` | TBD | リモート。制御の計算値 | +| `/api/external/set/command/remote/heartbeat` | TBD | リモート。ハートビート | +| `/api/external/set/command/remote/shift` | TBD | リモート。ドライブ、リアなどのようなギアシフト | +| `/api/external/set/command/remote/turn_signal` | TBD | リモート。左折、右折などのターのが信号 | -### Output topics +### 出力トピック -| Name | Type | Description | -| ------------------------------------------------------ | ------------------------------------------------- | ----------------------------------------------- | -| `/control/external_cmd_selector/current_selector_mode` | TBD | Current selected mode, remote or local. | -| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | Check if node is active or not. | -| `/external/selected/external_control_cmd` | TBD | Pass through control command with current mode. | -| `/external/selected/gear_cmd` | autoware_vehicle_msgs::msg::GearCommand | Pass through gear command with current mode. | -| `/external/selected/hazard_lights_cmd` | autoware_vehicle_msgs::msg::HazardLightsCommand | Pass through hazard light with current mode. | -| `/external/selected/heartbeat` | TBD | Pass through heartbeat with current mode. | -| `/external/selected/turn_indicators_cmd` | autoware_vehicle_msgs::msg::TurnIndicatorsCommand | Pass through turn indicator with current mode. | +| 名前 | タイプ | 説明 | +| --------------------------------------------------------- | --------------------------------------------------- | ----------------------------------------------- | +| `/control/external_cmd_selector/current_selector_mode` | TBD | 現在選択中のモード(リモートまたはローカル) | +| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | ノードがアクティブかどうかを確認する | +| `/external/selected/external_control_cmd` | TBD | 現在のモードで制御コマンドを透過する | +| `/external/selected/gear_cmd` | autoware_vehicle_msgs::msg::GearCommand | 現在のモードでギアコマンドを透過する | +| `/external/selected/hazard_lights_cmd` | autoware_vehicle_msgs::msg::HazardLightsCommand | 現在のモードでハザードランプを透過する | +| `/external/selected/heartbeat` | TBD | 現在のモードでハートビートを透過する | +| `/external/selected/turn_indicators_cmd` | autoware_vehicle_msgs::msg::TurnIndicatorsCommand | 現在のモードでターンインジケーターを透過する | -## Parameters +## パラメータ {{json_to_markdown("control/autoware_external_cmd_selector/schema/external_cmd_selector.schema.json")}} + diff --git a/control/autoware_joy_controller/README.md b/control/autoware_joy_controller/README.md index a6919356f3dbc..14456cc7b8dc2 100644 --- a/control/autoware_joy_controller/README.md +++ b/control/autoware_joy_controller/README.md @@ -1,12 +1,13 @@ -# autoware_joy_controller +## autoware_joy_controller -## Role +## 役割 -`autoware_joy_controller` is the package to convert a joy msg to autoware commands (e.g. steering wheel, shift, turn signal, engage) for a vehicle. +`autoware_joy_controller`は、車両のAutowareコマンド(ステアリングホイール、シフト、ターンシグナル、エンゲージなど)にジョイメッセージを変換するパッケージです。 -## Usage +## 使用方法 + +### ROS 2起動 -### ROS 2 launch ```bash # With default config (ds4) @@ -19,107 +20,124 @@ ros2 launch autoware_joy_controller joy_controller_param_selection.launch.xml jo ros2 launch autoware_joy_controller joy_controller.launch.xml config_file:=/path/to/your/param.yaml ``` -## Input / Output +## 入出力 -### Input topics +### 入力トピック -| Name | Type | Description | +| 名称 | 型 | 説明 | | ------------------ | ----------------------- | --------------------------------- | -| `~/input/joy` | sensor_msgs::msg::Joy | joy controller command | -| `~/input/odometry` | nav_msgs::msg::Odometry | ego vehicle odometry to get twist | +| `~/input/joy` | sensor_msgs::msg::Joy | ジョイコントローラの指令 | +| `~/input/odometry` | nav_msgs::msg::Odometry | 自車位置を取得するための自己位置推定 | -### Output topics +### 出力トピック -| Name | Type | Description | +| 名前 | タイプ | 説明 | | ----------------------------------- | --------------------------------------------------- | ---------------------------------------- | -| `~/output/control_command` | autoware_control_msgs::msg::Control | lateral and longitudinal control command | -| `~/output/external_control_command` | tier4_external_api_msgs::msg::ControlCommandStamped | lateral and longitudinal control command | -| `~/output/shift` | tier4_external_api_msgs::msg::GearShiftStamped | gear command | -| `~/output/turn_signal` | tier4_external_api_msgs::msg::TurnSignalStamped | turn signal command | -| `~/output/gate_mode` | tier4_control_msgs::msg::GateMode | gate mode (Auto or External) | -| `~/output/heartbeat` | tier4_external_api_msgs::msg::Heartbeat | heartbeat | -| `~/output/vehicle_engage` | autoware_vehicle_msgs::msg::Engage | vehicle engage | - -## Parameters - -| Parameter | Type | Description | -| ------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------ | -| `joy_type` | string | joy controller type (default: DS4) | -| `update_rate` | double | update rate to publish control commands | -| `accel_ratio` | double | ratio to calculate acceleration (commanded acceleration is ratio \* operation) | -| `brake_ratio` | double | ratio to calculate deceleration (commanded acceleration is -ratio \* operation) | -| `steer_ratio` | double | ratio to calculate deceleration (commanded steer is ratio \* operation) | -| `steering_angle_velocity` | double | steering angle velocity for operation | -| `accel_sensitivity` | double | sensitivity to calculate acceleration for external API (commanded acceleration is pow(operation, 1 / sensitivity)) | -| `brake_sensitivity` | double | sensitivity to calculate deceleration for external API (commanded acceleration is pow(operation, 1 / sensitivity)) | -| `raw_control` | bool | skip input odometry if true | -| `velocity_gain` | double | ratio to calculate velocity by acceleration | -| `max_forward_velocity` | double | absolute max velocity to go forward | -| `max_backward_velocity` | double | absolute max velocity to go backward | -| `backward_accel_ratio` | double | ratio to calculate deceleration (commanded acceleration is -ratio \* operation) | - -## P65 Joystick Key Map - -| Action | Button | -| -------------------- | --------------------- | -| Acceleration | R2 | -| Brake | L2 | -| Steering | Left Stick Left Right | -| Shift up | Cursor Up | -| Shift down | Cursor Down | -| Shift Drive | Cursor Left | -| Shift Reverse | Cursor Right | -| Turn Signal Left | L1 | -| Turn Signal Right | R1 | -| Clear Turn Signal | A | -| Gate Mode | B | -| Emergency Stop | Select | -| Clear Emergency Stop | Start | -| Autoware Engage | X | -| Autoware Disengage | Y | -| Vehicle Engage | PS | -| Vehicle Disengage | Right Trigger | - -## DS4 Joystick Key Map - -| Action | Button | +| `~/output/control_command` | `autoware_control_msgs::msg::Control` | 横方向および縦方向制御コマンド | +| `~/output/external_control_command` | `tier4_external_api_msgs::msg::ControlCommandStamped` | 横方向および縦方向制御コマンド | +| `~/output/shift` | `tier4_external_api_msgs::msg::GearShiftStamped` | ギアコマンド | +| `~/output/turn_signal` | `tier4_external_api_msgs::msg::TurnSignalStamped` | ウインカーコマンド | +| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード(AutoまたはExternal) | +| `~/output/heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | ハートビート | +| `~/output/vehicle_engage` | `autoware_vehicle_msgs::msg::Engage` | 車両エンゲージ | + +## パラメータ + +| パラメーター | タイプ | 説明 | +| ---------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `joy_type` | string | ジョイコントローラータイプ (初期値: DS4) | +| `update_rate` | double | 制御コマンドを公開するための更新レート | +| `accel_ratio` | double | 加速度を計算するための比率 (指示加速度は比率 \* 操作量) | +| `brake_ratio` | double | 減速度を計算するための比率 (指示加速度は -比率 \* 操作量) | +| `steer_ratio` | double | 減加速度を計算するための比率 (指示舵角は比率 \* 操作量) | +| `steering_angle_velocity` | double | 操作のときの舵角速度 | +| `accel_sensitivity` | double | 外部APIの加速度を計算するための感度 (指示加速度は pow(操作量, 1 / 感度)) | +| `brake_sensitivity` | double | 外部APIの減加速度を計算するための感度 (指示加速度は pow(操作量, 1 / 感度)) | +| `raw_control` | bool | 真の場合、入力車体運動をスキップする | +| `velocity_gain` | double | 加速度によって計算される速度の比率 | +| `max_forward_velocity` | double | 前方へ進む絶対最大速度 | +| `max_backward_velocity` | double | 後方へ進む絶対最大速度 | +| `backward_accel_ratio` | double | 減速度を計算するための比率 (Commanded acceleration is -ratio \* 操作量) | + +## P65 ジョイスティック キーマップ + +| 操作 | ボタン | +|---|---| +| 加速度 | R2 | +| ブレーキ | L2 | +| ステアリング | レフトスティックの左右 | +| アップシフト | カーソル上 | +| ダウンシフト | カーソル下 | +| Driveシフト | カーソル左 | +| リバースシフト | カーソル右 | +| 左折ウィンカー | L1 | +| 右折ウィンカー | R1 | +| ウィンカー解除 | A | +| ゲートモード | B | +| 緊急停止 | セレクト | +| 緊急停止解除 | スタート | +| Autoware起動 | X | +| Autoware停止 | Y | +| Vehicle起動 | PS | +| Vehicle停止 | 右トリガー | + +## DS4 ジョイスティック キーマップ + +| アクション | ボタン | | -------------------- | -------------------------- | -| Acceleration | R2, ×, or Right Stick Up | -| Brake | L2, □, or Right Stick Down | -| Steering | Left Stick Left Right | -| Shift up | Cursor Up | -| Shift down | Cursor Down | -| Shift Drive | Cursor Left | -| Shift Reverse | Cursor Right | -| Turn Signal Left | L1 | -| Turn Signal Right | R1 | -| Clear Turn Signal | SHARE | -| Gate Mode | OPTIONS | -| Emergency Stop | PS | -| Clear Emergency Stop | PS | -| Autoware Engage | ○ | -| Autoware Disengage | ○ | -| Vehicle Engage | △ | -| Vehicle Disengage | △ | - -## XBOX Joystick Key Map - -| Action | Button | -| -------------------- | --------------------- | -| Acceleration | RT | -| Brake | LT | -| Steering | Left Stick Left Right | -| Shift up | Cursor Up | -| Shift down | Cursor Down | -| Shift Drive | Cursor Left | -| Shift Reverse | Cursor Right | -| Turn Signal Left | LB | -| Turn Signal Right | RB | -| Clear Turn Signal | A | -| Gate Mode | B | -| Emergency Stop | View | -| Clear Emergency Stop | Menu | -| Autoware Engage | X | -| Autoware Disengage | Y | -| Vehicle Engage | Left Stick Button | -| Vehicle Disengage | Right Stick Button | +| 加速 | R2、×、または右スティック上 | +| 減速 | L2、□、または右スティック下 | +| ステアリング | 左スティック左右 | +| シフトアップ | カーソル上 | +| シフトダウン | カーソル下 | +| シフトドライブ | カーソル左 | +| シフトリバース | カーソル右 | +| 左ウィンカー | L1 | +| 右ウィンカー | R1 | +| ウィンカー解除 | SHARE | +| ゲートモード | OPTIONS | +| 緊急停止 | PS | +| 緊急停止解除 | PS | +| Autoware起動 | ○ | +| Autoware停止 | ○ | +| 車両起動 | △ | +| 車両停止 | △ | + +## XBOX ジョイスティック キーマッピング + +--- + +## 自動運転ソフトウェア ドキュメント(日本語訳) + +### 操作方法 + +| 操作 | ボタン | +|---|---| +| 加速 | RT | +| ブレーキ | LT | +| ステアリング | 左スティック
左/右 | +| アップシフト | カーソル上 | +| ダウンシフト | カーソル下 | +| ドライブシフト | カーソル左 | +| リバースシフト | カーソル右 | +| 左ウインカー | LB | +| 右ウインカー | RB | +| ウインカー解除 | A | +| ゲートモード | B | +| 緊急停止 | ビュー | +| 緊急停止解除 | メニュー | +| Autoware 起動 | X | +| Autoware 停止 | Y | +| Vehicle 起動 | 左スティックボタン | +| Vehicle 停止 | 右スティックボタン | + +### Planningコンポーネント + +#### `post resampling`動作 + +#### 自車位置喪失時のリカバリ動作 + +#### velocity逸脱量の計算 + +#### acceleration逸脱量の計算 + diff --git a/control/autoware_lane_departure_checker/README.md b/control/autoware_lane_departure_checker/README.md index 6eb62dcb2c23a..a54c51b30d21d 100644 --- a/control/autoware_lane_departure_checker/README.md +++ b/control/autoware_lane_departure_checker/README.md @@ -1,52 +1,52 @@ -# Lane Departure Checker +## 車線逸脱チェッカー -The **Lane Departure Checker** checks if vehicle follows a trajectory. If it does not follow the trajectory, it reports its status via `diagnostic_updater`. +**車線逸脱チェッカー**は、車両が軌跡に従っているかどうかを確認します。軌跡に従っていない場合、`diagnostic_updater`を介してステータスを報告します。 -## Features +## 機能 -This package includes the following features: +このパッケージには、次の機能が含まれています。 -- **Lane Departure**: Check if ego vehicle is going to be out of lane boundaries based on output from control module (predicted trajectory). -- **Trajectory Deviation**: Check if ego vehicle's pose does not deviate from the trajectory. Checking lateral, longitudinal and yaw deviation. -- **Road Border Departure**: Check if ego vehicle's footprint, generated from the control's output, extends beyond the road border. +- **車線逸脱**: 制御モジュールからの出力(予測軌跡)に基づいて、自車位置が車線境界から逸脱するかどうかを確認します。 +- **軌跡逸脱**: 自車位置が軌跡から逸脱していないかどうかを確認します。横方向、縦方向、偏揺角方向の逸脱を確認します。 +- **路肩逸脱**: 制御の出力から生成された自車のフットプリントが路肩を越えて伸びているかどうかを確認します。 -## Inner-workings / Algorithms +## 内部機能 / アルゴリズム -### How to extend footprint by covariance +### 共分散によってフットプリントを拡張する方法 -1. Calculate the standard deviation of error ellipse(covariance) in vehicle coordinate. +1. 車両座標系における誤差楕円(共分散)の標準偏差を計算します。 - 1.Transform covariance into vehicle coordinate. + 1. 共分散を車両座標系に変換します。 - $$ - \begin{align} - \left( \begin{array}{cc} x_{vehicle}\\ y_{vehicle}\\ \end{array} \right) = R_{map2vehicle} \left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) - \end{align} - $$ + $$ + \begin{align} + \left( \begin{array}{cc} x_{vehicle}\\ y_{vehicle}\\ \end{array} \right) = R_{map2vehicle} \left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) + \end{align} + $$ - Calculate covariance in vehicle coordinate. + 車両座標系における共分散を計算します。 - $$ - \begin{align} - Cov_{vehicle} &= E \left[ - \left( \begin{array}{cc} x_{vehicle}\\ y_{vehicle}\\ \end{array} \right) (x_{vehicle}, y_{vehicle}) \right] \\ - &= E \left[ R\left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) - (x_{map}, y_{map})R^t - \right] \\ - &= R E\left[ \left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) - (x_{map}, y_{map}) - \right] R^t \\ - &= R Cov_{map} R^t - \end{align} - $$ + $$ + \begin{align} + Cov_{vehicle} &= E \left[ + \left( \begin{array}{cc} x_{vehicle}\\ y_{vehicle}\\ \end{array} \right) (x_{vehicle}, y_{vehicle}) \right] \\ + &= E \left[ R\left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) + (x_{map}, y_{map})R^t + \right] \\ + &= R E\left[ \left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) + (x_{map}, y_{map}) + \right] R^t \\ + &= R Cov_{map} R^t + \end{align} + $$ - 2.The longitudinal length we want to expand is correspond to marginal distribution of $x_{vehicle}$, which is represented in $Cov_{vehicle}(0,0)$. In the same way, the lateral length is represented in $Cov_{vehicle}(1,1)$. Wikipedia reference [here](https://en.wikipedia.org/wiki/Multivariate_normal_distribution#Marginal_distributions). + 2. `post resampling`に展開する縦方向の長さは、$Cov_{vehicle}(0,0)$における$x_{vehicle}$の周辺分布に対応します。同様に、横方向の長さは$Cov_{vehicle}(1,1)$における$x_{vehicle}$の周辺分布に対応します。Wikipediaの参照 [こちら](https://en.wikipedia.org/wiki/Multivariate_normal_distribution#Marginal_distributions)。 -2. Expand footprint based on the standard deviation multiplied with `footprint_margin_scale`. +2. `footprint_margin_scale`を乗じた標準偏差に基づいてフットプリントを拡張します。 -## Interface +## インターフェイス -### Input +### 入力 - /localization/kinematic_state [`nav_msgs::msg::Odometry`] - /map/vector_map [`autoware_map_msgs::msg::LaneletMapBin`] @@ -54,49 +54,66 @@ This package includes the following features: - /planning/scenario_planning/trajectory [`autoware_planning_msgs::msg::Trajectory`] - /control/trajectory_follower/predicted_trajectory [`autoware_planning_msgs::msg::Trajectory`] -### Output +### 出力 -- [`diagnostic_updater`] lane_departure : Update diagnostic level when ego vehicle is out of lane. -- [`diagnostic_updater`] trajectory_deviation : Update diagnostic level when ego vehicle deviates from trajectory. +- [`diagnostic_updater`] lane_departure : 自車位置が車線から逸脱した場合に診断レベルを更新します。 -## Parameters +## パラメータ -### Node Parameters +### ノードパラメータ -#### General Parameters +#### 一般パラメータ -| Name | Type | Description | Default value | +| 名称 | 型 | 説明 | デフォルト値 | | :------------------------- | :----- | :---------------------------------------------------------------------------------------------------------- | :------------ | -| will_out_of_lane_checker | bool | Enable checker whether ego vehicle footprint will depart from lane | True | -| out_of_lane_checker | bool | Enable checker whether ego vehicle footprint is out of lane | True | -| boundary_departure_checker | bool | Enable checker whether ego vehicle footprint wil depart from boundary specified by boundary_types_to_detect | False | -| update_rate | double | Frequency for publishing [Hz] | 10.0 | -| visualize_lanelet | bool | Flag for visualizing lanelet | False | - -#### Parameters For Lane Departure - -| Name | Type | Description | Default value | -| :------------------------ | :--- | :------------------------------------------------ | :------------ | -| include_right_lanes | bool | Flag for including right lanelet in borders | False | -| include_left_lanes | bool | Flag for including left lanelet in borders | False | -| include_opposite_lanes | bool | Flag for including opposite lanelet in borders | False | -| include_conflicting_lanes | bool | Flag for including conflicting lanelet in borders | False | - -#### Parameters For Road Border Departure - -| Name | Type | Description | Default value | -| :----------------------- | :------------------------- | :---------------------------------------------------------- | :------------ | -| boundary_types_to_detect | std::vector\ | line_string types to detect with boundary_departure_checker | [road_border] | - -### Core Parameters - -| Name | Type | Description | Default value | -| :------------------------- | :----- | :--------------------------------------------------------------------------------- | :------------ | -| footprint_margin_scale | double | Coefficient for expanding footprint margin. Multiplied by 1 standard deviation. | 1.0 | -| footprint_extra_margin | double | Coefficient for expanding footprint margin. When checking for lane departure | 0.0 | -| resample_interval | double | Minimum Euclidean distance between points when resample trajectory.[m] | 0.3 | -| max_deceleration | double | Maximum deceleration when calculating braking distance. | 2.8 | -| delay_time | double | Delay time which took to actuate brake when calculating braking distance. [second] | 1.3 | -| max_lateral_deviation | double | Maximum lateral deviation in vehicle coordinate. [m] | 2.0 | -| max_longitudinal_deviation | double | Maximum longitudinal deviation in vehicle coordinate. [m] | 2.0 | -| max_yaw_deviation_deg | double | Maximum ego yaw deviation from trajectory. [deg] | 60.0 | +| will_out_of_lane_checker | bool | 自車フットプリントが車線から逸脱するかどうかのチェッカーを有効にする | True | +| out_of_lane_checker | bool | 自車フットプリントが車線外にあるかどうかをチェッカーを有効にする | True | +| boundary_departure_checker | bool | 自車フットプリントがboundary_types_to_detectで指定された境界から逸脱するかどうかのチェッカーを有効にする | False | +| update_rate | double | パブリッシュする頻度 [Hz] | 10.0 | +| visualize_lanelet | bool | レーンレットを視覚化するフラグ | False | + +#### 車線逸脱のためのパラメータ + +| 名前 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `include_right_lanes` | ブール | 境界に右のレーンレットを含めるかどうか | `False` | +| `include_left_lanes` | ブール | 境界に左のレーンレットを含めるかどうか | `False` | +| `include_opposite_lanes` | ブール | 境界に対向のレーンレットを含めるかどうか | `False` | +| `include_conflicting_lanes` | ブール | 境界に交差するレーンレットを含めるかどうか | `False` | + +#### 路側逸脱 パラメータ + +* `# (m)`: 路側逸脱開始のしきい値 `'post resampling'` 距離(メートル) +* `# (rad)`: 路側逸脱開始のしきい値 `'post resampling'` 曲率(ラジアン) +* `# (m)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の速度(メートル) +* `# (s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の経過時間(秒) +* `#`: `'post resampling'` 路側逸脱開始時の自車位置における heading 偏差(ラジアン) +* `# (m)`: `'post resampling'` 路側逸脱開始時の自車位置における lateral offset(メートル) +* `#`: `'post resampling'` 路側逸脱開始時の vehicle `'post resampling'` の速度(メートル/秒) +* `# (m^2/s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の acceleration 逸脱量(平方メートル/秒) +* `# (m^2/s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の velocity 逸脱量(平方メートル/秒) +* `# (m^2/s)`: 路側逸脱中の vehicle `'post resampling'` の heading 逸脱量(平方メートル/秒) +* `# (m)`: `'post resampling'` 路側逸脱終了時の vehicle `'post resampling'` の速度(メートル/秒) +* `#`: `'post resampling'` 路側逸脱終了時の自車位置における heading 偏差 +* `# (s)`: `'post resampling'` 路側逸脱終了時の vehicle `'post resampling'` の経過時間 +* `# (cm)`: 静止時の vehicle `'post resampling'` の steering wheel angle(センチメートル) +* `# (m)`: 静止時の vehicle `'post resampling'` の lateral offset(メートル) +* `#`: 静止時の vehicle `'post resampling'` の速度(メートル/秒) + +| 名称 | タイプ | 説明 | デフォルト値 | +| :----------------------- | :--------------------------- | :--------------------------------------------------------- | :------------ | +| boundary_types_to_detect | std::vector\ | boundary_departure_checkerで検出するline_stringタイプ | [road_border] | + +### 主要パラメータ + +| 名称 | 種類 | 説明 | デフォルト値 | +| :------------------------- | :----- | :------------------------------------------------------------------------------------------------------- | :------------ | +| footprint_margin_scale | 数値 | footprintマージンを拡張する係数。標準偏差に1を乗算 | 1.0 | +| footprint_extra_margin | 数値 | footprintマージンを拡張する係数。 レーン逸脱のチェック時 | 0.0 | +| resample_interval | 数値 | trajectoryを再サンプリングする際のポイント間の最小ユークリッド距離 (m) | 0.3 | +| max_deceleration | 数値 | 制動距離を計算する際の最大減速度 | 2.8 | +| delay_time | 数値 | 制動距離を計算する際のブレーキ作動までの遅延時間 (秒) | 1.3 | +| max_lateral_deviation | 数値 | 車両座標系における最大横方向逸脱距離 (m) | 2.0 | +| max_longitudinal_deviation | 数値 | 車両座標系における最大縦方向逸脱距離 (m) | 2.0 | +| max_yaw_deviation_deg | 数値 | trajectoryからの自己車両の最大ヨー逸脱角度 (度) | 60.0 | + diff --git a/control/autoware_mpc_lateral_controller/README.md b/control/autoware_mpc_lateral_controller/README.md index 1b3af44343208..ceff4c3bb0f46 100644 --- a/control/autoware_mpc_lateral_controller/README.md +++ b/control/autoware_mpc_lateral_controller/README.md @@ -1,273 +1,418 @@ -# MPC Lateral Controller +# MPC横方向コントローラ -This is the design document for the lateral controller node -in the `autoware_trajectory_follower_node` package. +これは`autoware_trajectory_follower_node`パッケージ内の横方向コントローラのノードに関する設計文書です。 -## Purpose / Use cases +## 目的 / ユースケース - - + + -This node is used to general lateral control commands (steering angle and steering rate) -when following a path. +このノードは、パスに従っているときに横方向の制御コマンド(ステアリング角とステアリング速度)を作成するために使用されます。 -## Design +## 設計 - - + + -The node uses an implementation of linear model predictive control (MPC) for accurate path tracking. -The MPC uses a model of the vehicle to simulate the trajectory resulting from the control command. -The optimization of the control command is formulated as a Quadratic Program (QP). +このノードは、正確なパストラック用に線形モデル予測制御(MPC)の実装を使用しています。 MPCは車両モデルを使用して、制御コマンドから得られる軌道をシミュレーションします。制御コマンドの最適化は2次計画問題(QP)として定式化されます。 -Different vehicle models are implemented: +さまざまな車両モデルが実装されています。 -- kinematics : bicycle kinematics model with steering 1st-order delay. -- kinematics_no_delay : bicycle kinematics model without steering delay. -- dynamics : bicycle dynamics model considering slip angle. - The kinematics model is being used by default. Please see the reference [1] for more details. +- kinematics:ステアリング1次の遅れを持つ自転車運動学モデル。 +- kinematics_no_delay:ステアリング遅れのない自転車運動学モデル。 +- dynamics:スリップ角を考慮する自転車動力学モデル。 +運動学モデルがデフォルトで使用されています。詳細については、参照 [1]を参照してください。 -For the optimization, a Quadratic Programming (QP) solver is used and two options are currently implemented: +最適化には2次計画問題(QP)ソルバーが使用され、現在2つのオプションが実装されています。 -- unconstraint_fast : use least square method to solve unconstraint QP with eigen. -- [osqp](https://osqp.org/): run the [following ADMM](https://web.stanford.edu/~boyd/papers/admm_distr_stats.html) - algorithm (for more details see the related papers at - the [Citing OSQP](https://web.stanford.edu/~boyd/papers/admm_distr_stats.html) section): +- unconstraint_fast:eigenで拘束のないQPを解くために最小二乗法を使用します。 +- [osqp](https://osqp.org/):次の[ADMM](https://web.stanford.edu/~boyd/papers/admm_distr_stats.html)アルゴリズムを実行します(詳細については、[OSQPの引用](https: //web.stanford.edu/~boyd/papers/admm_distr_stats.html)セクションを参照してください)。 -### Filtering +### フィルタリング -Filtering is required for good noise reduction. -A [Butterworth filter](https://en.wikipedia.org/wiki/Butterworth_filter) is employed for processing the yaw and lateral errors, which are used as inputs for the MPC, as well as for refining the output steering angle. -Other filtering methods can be considered as long as the noise reduction performances are good -enough. -The moving average filter for example is not suited and can yield worse results than without any -filtering. +適切なノイズ低減にはフィルタリングが必要です。 +バターワースフィルタを使用して、MPCの入力として使用されるヨーエラーと横方向エラーを処理し、出力ステアリング角を調整します。 +ノイズ低減性能が十分であれば、他のフィルタリング方法を検討できます。 +たとえば、移動平均フィルタは適しておらず、フィルタリングなしよりも悪い結果を生じる可能性があります。 -## Assumptions / Known limits +## 想定 / 既知の制限 - + -The tracking is not accurate if the first point of the reference trajectory is at or in front of the current ego pose. +リファレンストラジェクトの最初の点が現在の自車位置にあるか、その前方に位置している場合、追跡は正確ではありません。 -## Inputs / Outputs / API +## 入力 / 出力 / API - - +- 入力: + - trajectory :リファレンストラジェクト(`autoware_api_msgs/Trajectory`) + - vehicle_state :現在の車両のステータス(`autoware_auto_msgs/VehicleState`) + - current_pose :自車位置(`geometry_msgs/PoseStamped`) + - prev_pose :前の自車位置(`geometry_msgs/PoseStamped`) + - planned_trajectory :計画された軌道(`autoware_msgs/PlannedTrajectory`) -### Inputs +- 出力: + - vehicle_control_cmd :車両制御コマンド(`autoware_auto_msgs/VehicleControlCommand`) -Set the following from the [controller_node](../autoware_trajectory_follower_node/README.md) +- API: + - 車両制御コマンドを取得するためのAPIはありません。 -- `autoware_planning_msgs/Trajectory` : reference trajectory to follow. -- `nav_msgs/Odometry`: current odometry -- `autoware_vehicle_msgs/SteeringReport`: current steering +### 入力 -### Outputs +次のものを [controller_node](../autoware_trajectory_follower_node/README.md) から設定します -Return LateralOutput which contains the following to the controller node +- `autoware_planning_msgs/Trajectory` : 追従する基準軌跡 +- `nav_msgs/Odometry`: 現在のオドメトリ +- `autoware_vehicle_msgs/SteeringReport`: 現在のステア + +### 出力 + +次の内容を含む LateralOutput を controller node に返します - `autoware_control_msgs/Lateral` - LateralSyncData - - steer angle convergence + - ステア角収束 + +### MPC クラス + +`MPC` クラス (`mpc.hpp` で定義) は、MPC アルゴリズムとのインターフェイスを提供します。 +車両モデル、QP ソルバー、および追従する基準軌跡が設定されると (`setVehicleModel()`, `setQPSolver()`, `setReferenceTrajectory()`) +、現在のステア、速度、位相を `calculateMPC()` 関数に提供することで、横方向制御コマンドを計算できます。 + +### パラメーターの説明 -### MPC class +`param/lateral_controller_defaults.param.yaml` で定義された既定のパラメーターは、40km/h 未満の走行に対応するように自律走行用 Lexus RX 450h に調整されています。 -The `MPC` class (defined in `mpc.hpp`) provides the interface with the MPC algorithm. -Once a vehicle model, a QP solver, and the reference trajectory to follow have been set -(using `setVehicleModel()`, `setQPSolver()`, `setReferenceTrajectory()`), a lateral control command -can be calculated by providing the current steer, velocity, and pose to function `calculateMPC()`. +#### システム -### Parameter description +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------------ | :------ | :------------------------------------------------------------------------------------ | :------------ | +| traj_resample_dist | double | 再サンプリングにおけるウェイポイント間の距離 [m] | 0.1 | +| use_steer_prediction | boolean | ステアリング予測を使用するフラグ(ステアリング測定値は使用しない) | false | +| admissible_position_error | double | 追従位置誤差がこの値 [m] より大きい場合に車両を停止する | 5.0 | +| admissible_yaw_error_rad | double | 追従ヨー角誤差がこの値 [rad] より大きい場合に車両を停止する | 1.57 | +| use_delayed_initial_state | boolean | 予測軌道の初期状態として `x0_delayed` を使用するフラグ | true | -The default parameters defined in `param/lateral_controller_defaults.param.yaml` are adjusted to the -AutonomouStuff Lexus RX 450h for under 40 km/h driving. +#### パススムージング -#### System +このモジュールでは、`post resampling`時に発生する経路の不連続性につながる目標経路の僅かな 'jerk' を排除します。この不連続性は、経路上の他の車両や障害物との衝突を避けるために必要です。 -| Name | Type | Description | Default value | -| :------------------------ | :------ | :-------------------------------------------------------------------------- | :------------ | -| traj_resample_dist | double | distance of waypoints in resampling [m] | 0.1 | -| use_steer_prediction | boolean | flag for using steer prediction (do not use steer measurement) | false | -| admissible_position_error | double | stop vehicle when following position error is larger than this value [m] | 5.0 | -| admissible_yaw_error_rad | double | stop vehicle when following yaw angle error is larger than this value [rad] | 1.57 | -| use_delayed_initial_state | boolean | flag to use x0_delayed as initial state for predicted trajectory | true | +トリガーは、自車位置の更新、経路の変更、経路の`post resampling`の更新です。 -#### Path Smoothing +#### レベル0の経路 +レベル0のレイヤーでは、Smoothed Path Providerによって、パスのスムージングによって生成された経路が提供されます。 -| Name | Type | Description | Default value | +#### レベル1のPlanning +レベル1のPlanningコンポーネントは、以下を行います。 +- スムーズな経路を`post resampling`に使用します。 +- スムーズな経路に基づいて、velocity 逸脱量とacceleration 逸脱量を計算します。 +- Velocity ControllerとAcceleration Controllerに逸脱量を通知します。 + +| 名称 | タイプ | 説明 | デフォルト値 | | :-------------------------------- | :------ | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_path_smoothing | boolean | path smoothing flag. This should be true when uses path resampling to reduce resampling noise. | false | -| path_filter_moving_ave_num | int | number of data points moving average filter for path smoothing | 25 | -| curvature_smoothing_num_traj | int | index distance of points used in curvature calculation for trajectory: p(i-num), p(i), p(i+num). larger num makes less noisy values. | 15 | -| curvature_smoothing_num_ref_steer | int | index distance of points used in curvature calculation for reference steering command: p(i-num), p(i), p(i+num). larger num makes less noisy values. | 15 | - -#### Trajectory Extending - -| Name | Type | Description | Default value | -| :------------------------------------ | :------ | :-------------------------------------------- | :------------ | -| extend_trajectory_for_end_yaw_control | boolean | trajectory extending flag for end yaw control | true | - -#### MPC Optimization - -| Name | Type | Description | Default value | -| :-------------------------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------- | :------------ | -| qp_solver_type | string | QP solver option. described below in detail. | "osqp" | -| mpc_prediction_horizon | int | total prediction step for MPC | 50 | -| mpc_prediction_dt | double | prediction period for one step [s] | 0.1 | -| mpc_weight_lat_error | double | weight for lateral error | 1.0 | -| mpc_weight_heading_error | double | weight for heading error | 0.0 | -| mpc_weight_heading_error_squared_vel | double | weight for heading error \* velocity | 0.3 | -| mpc_weight_steering_input | double | weight for steering error (steer command - reference steer) | 1.0 | -| mpc_weight_steering_input_squared_vel | double | weight for steering error (steer command - reference steer) \* velocity | 0.25 | -| mpc_weight_lat_jerk | double | weight for lateral jerk (steer(i) - steer(i-1)) \* velocity | 0.1 | -| mpc_weight_steer_rate | double | weight for steering rate [rad/s] | 0.0 | -| mpc_weight_steer_acc | double | weight for derivatives of the steering rate [rad/ss] | 0.000001 | -| mpc_low_curvature_weight_lat_error | double | [used in a low curvature trajectory] weight for lateral error | 0.1 | -| mpc_low_curvature_weight_heading_error | double | [used in a low curvature trajectory] weight for heading error | 0.0 | -| mpc_low_curvature_weight_heading_error_squared_vel | double | [used in a low curvature trajectory] weight for heading error \* velocity | 0.3 | -| mpc_low_curvature_weight_steering_input | double | [used in a low curvature trajectory] weight for steering error (steer command - reference steer) | 1.0 | -| mpc_low_curvature_weight_steering_input_squared_vel | double | [used in a low curvature trajectory] weight for steering error (steer command - reference steer) \* velocity | 0.25 | -| mpc_low_curvature_weight_lat_jerk | double | [used in a low curvature trajectory] weight for lateral jerk (steer(i) - steer(i-1)) \* velocity | 0.0 | -| mpc_low_curvature_weight_steer_rate | double | [used in a low curvature trajectory] weight for steering rate [rad/s] | 0.0 | -| mpc_low_curvature_weight_steer_acc | double | [used in a low curvature trajectory] weight for derivatives of the steering rate [rad/ss] | 0.000001 | -| mpc_low_curvature_thresh_curvature | double | threshold of curvature to use "low_curvature" parameter | 0.0 | -| mpc_weight_terminal_lat_error | double | terminal lateral error weight in matrix Q to improve mpc stability | 1.0 | -| mpc_weight_terminal_heading_error | double | terminal heading error weight in matrix Q to improve mpc stability | 0.1 | -| mpc_zero_ff_steer_deg | double | threshold that feed-forward angle becomes zero | 0.5 | -| mpc_acceleration_limit | double | limit on the vehicle's acceleration | 2.0 | -| mpc_velocity_time_constant | double | time constant used for velocity smoothing | 0.3 | -| mpc_min_prediction_length | double | minimum prediction length | 5.0 | - -#### Vehicle Model - -| Name | Type | Description | Default value | -| :----------------------------------- | :------- | :--------------------------------------------------------------------------------- | :------------------- | -| vehicle_model_type | string | vehicle model type for mpc prediction | "kinematics" | -| input_delay | double | steering input delay time for delay compensation | 0.24 | -| vehicle_model_steer_tau | double | steering dynamics time constant (1d approximation) [s] | 0.3 | -| steer_rate_lim_dps_list_by_curvature | [double] | steering angle rate limit list depending on curvature [deg/s] | [40.0, 50.0, 60.0] | -| curvature_list_for_steer_rate_lim | [double] | curvature list for steering angle rate limit interpolation in ascending order [/m] | [0.001, 0.002, 0.01] | -| steer_rate_lim_dps_list_by_velocity | [double] | steering angle rate limit list depending on velocity [deg/s] | [60.0, 50.0, 40.0] | -| velocity_list_for_steer_rate_lim | [double] | velocity list for steering angle rate limit interpolation in ascending order [m/s] | [10.0, 15.0, 20.0] | -| acceleration_limit | double | acceleration limit for trajectory velocity modification [m/ss] | 2.0 | -| velocity_time_constant | double | velocity dynamics time constant for trajectory velocity modification [s] | 0.3 | - -#### Lowpass Filter for Noise Reduction - -| Name | Type | Description | Default value | -| :------------------------ | :----- | :------------------------------------------------------------------ | :------------ | -| steering_lpf_cutoff_hz | double | cutoff frequency of lowpass filter for steering output command [hz] | 3.0 | -| error_deriv_lpf_cutoff_hz | double | cutoff frequency of lowpass filter for error derivative [Hz] | 5.0 | - -#### Stop State - -| Name | Type | Description | Default value | -| :------------------------------------------- | :------ | :---------------------------------------------------------------------------------------------- | :------------ | -| stop_state_entry_ego_speed \*1 | double | threshold value of the ego vehicle speed used to the stop state entry condition | 0.001 | -| stop_state_entry_target_speed \*1 | double | threshold value of the target speed used to the stop state entry condition | 0.001 | -| converged_steer_rad | double | threshold value of the steer convergence | 0.1 | -| keep_steer_control_until_converged | boolean | keep steer control until steer is converged | true | -| new_traj_duration_time | double | threshold value of the time to be considered as new trajectory | 1.0 | -| new_traj_end_dist | double | threshold value of the distance between trajectory ends to be considered as new trajectory | 0.3 | -| mpc_converged_threshold_rps | double | threshold value to be sure output of the optimization is converged, it is used in stopped state | 0.01 | - -(\*1) To prevent unnecessary steering movement, the steering command is fixed to the previous value in the stop state. +| path_smoothingを有効にする | boolean | パスの平滑化フラグ。リサンプリングノイズを低減するためにパスリサンプリングを使用する場合は、`True`にします。 | `False` | +| path_filter_moving_ave_num | int | path smoothingのために移動平均フィルタのデータポイントの数 | `25` | +| curvature_smoothing_num_traj | int | 軌道の曲率計算に使用される点のインデックス距離:p(i-num)、p(i)、p(i+num)。`num`が大きいほどノイズの少ない値になります。 | `15` | +| curvature_smoothing_num_ref_steer | int | 参照ステアリングコマンドの曲率計算に使用される点のインデックス距離:p(i-num)、p(i)、p(i+num)。`num`が大きいほどノイズの少ない値になります。 | `15` | + +#### 軌道予測 + +### Planningコンポーネントの目的 + +Planningコンポーネントは、自車位置と目的地などの高レベルの目標に基づいて、最適な軌道生成を行い、それを経路プランに沿って実施する。 + +### 経路プランニング + +#### 経路検索 + +経路検索は、始点と終点の間の経路を計算するプロセスです。経路検索アルゴリズムには、Dijkstraアルゴリズム、A*アルゴリズム、Floyd-Warshallアルゴリズムなどがあります。 + +##### コスト関数 + +経路検索アルゴリズムは、ノード間のコストに基づいて経路を生成します。コスト関数は、距離、時間、エネルギー消費など、さまざまなファクターを考慮できます。 + +#### 経路フィッティング + +経路フィッティングは、経路検索結果を滑らかな経路に変換するプロセスです。経路フィッティングアルゴリズムには、三次スプライン、NURBS、ベジェ曲線などがあります。 + +### 軌道生成 + +#### 軌道生成のフェーズ + +軌道生成には、次の3つのフェーズがあります。 + +1. **計画**:経路プランと自車位置に基づいて、軌道を生成します。 +2. **実行**:軌道を追従し、自車を制御します。 +3. **再計画**:必要に応じて軌道プランを更新します。 + +#### 軌道生成アルゴリズム + +軌道生成アルゴリズムには、以下のようなものがあります。 + +* **レファレンストラジャクトリ追従**:レファレンストラジャクトリを生成し、自車をそれに追従させます。 +* **最適制御**:最適化手法を使用して、コスト関数を最小化する軌道生成します。 +* **機械学習**:機械学習モデルを使用して、軌道を予測します。 + +### 経路プランの実行 + +#### 経路プラン追従 + +経路プラン追従は、自車を経路プランに沿って制御するプロセスです。経路プラン追従コントローラーには、以下のようなものがあります。 + +* **制約性モデル予測制御(MPC)**:制約を考慮して自車を制御します。 +* **占有空間パス計画(OCPP)**:障害物を避けながら自車を制御します。 + +#### 軌道追従 + +軌道追従は、自車を軌道に沿って制御するプロセスです。軌道追従コントローラーには、以下のようなものがあります。 + +* **PIDコントローラー**:誤差を最小化するフィードバック制御を行います。 +* **カルマンフィルター**:雑音を推定してより正確な制御を実現します。 + +### 安全性評価 + +#### 運動学的検証 + +運動学的検証は、軌道が物理的に実行可能であることを確認するプロセスです。運動学的検証では、以下の要素を考慮します。 + +* **速度逸脱量** +* **加速度逸脱量** +* **ジャーク逸脱量** + +#### 動力学的検証 + +動力学的検証は、軌道が車両の動力学を考慮して実行可能であることを確認するプロセスです。動力学的検証では、以下の要素を考慮します。 + +* **タイヤの滑り** +* **車両の安定性** +* **サスペンションの影響** + +#### 障害物検出 + +障害物検出は、軌道上の障害物を検出するプロセスです。障害物検出には、以下の方法があります。 + +* **センサーデータ(LiDAR、カメラ、レーダーなど)** +* **地図データ** +* **'post resampling'(前回のサンプルからの差分)**による検出 + +| 名称 | 種類 | 説明 | デフォルト値 | +| :---------------------------------- | :------ | :----------------------------------------------------------- | :------------ | +| extend_trajectory_for_end_yaw_control | boolean | end yaw 制御のための軌道の延伸フラグ | true | + +#### MPC最適化 + +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| qp_solver_type | 文字列 | QPソルバーオプション。以下で詳細に説明します。 | "osqp" | +| mpc_prediction_horizon | 整数 | MPCのステップごとの合計予測 | 50 | +| mpc_prediction_dt | float | 1ステップあたりの予測時間[単位:秒] | 0.1 | +| mpc_weight_lat_error | float | 横方向の逸脱量の重み | 1.0 | +| mpc_weight_heading_error | float | ヘディングの逸脱量の重み | 0.0 | +| mpc_weight_heading_error_squared_vel | float | ヘディングの逸脱量 * 速度の重み | 0.3 | +| mpc_weight_steering_input | float | ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) | 1.0 | +| mpc_weight_steering_input_squared_vel | float | ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) * 速度 | 0.25 | +| mpc_weight_lat_jerk | float | 横方向のジャーク(steer(i) - steer(i-1)) * 速度 の重み | 0.1 | +| mpc_weight_steer_rate | float | ステアリング速度の重み[単位:rad/s] | 0.0 | +| mpc_weight_steer_acc | float | ステアリング速度の微分の重み[rad/ss] | 0.000001 | +| mpc_low_curvature_weight_lat_error | float | [低曲率軌道で使用] 横方向の逸脱量の重み | 0.1 | +| mpc_low_curvature_weight_heading_error | float | [低曲率軌道で使用] ヘディングの逸脱量の重み | 0.0 | +| mpc_low_curvature_weight_heading_error_squared_vel | float | [低曲率軌道で使用] ヘディングの逸脱量 * 速度の重み | 0.3 | +| mpc_low_curvature_weight_steering_input | float | [低曲率軌道で使用] ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) | 1.0 | +| mpc_low_curvature_weight_steering_input_squared_vel | float | [低曲率軌道で使用] ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) * 速度 | 0.25 | +| mpc_low_curvature_weight_lat_jerk | float | [低曲率軌道で使用] 横方向のジャーク(steer(i) - steer(i-1)) * 速度 の重み | 0.0 | +| mpc_low_curvature_weight_steer_rate | float | [低曲率軌道で使用] ステアリング速度の重み[単位:rad/s] | 0.0 | +| mpc_low_curvature_weight_steer_acc | float | [低曲率軌道で使用] ステアリング速度の微分の重み[rad/ss] | 0.000001 | +| mpc_low_curvature_thresh_curvature | float | "low_curvature"パラメータを使用するための曲率のしきい値 | 0.0 | +| mpc_weight_terminal_lat_error | float | mpcの安定性を向上させるための行列Qの最終横方向の逸脱量の重み | 1.0 | +| mpc_weight_terminal_heading_error | float | mpcの安定性を向上させるための行列Qの最終ヘディングの逸脱量の重み | 0.1 | +| mpc_zero_ff_steer_deg | float | フィードフォワード角度がゼロになるしきい値 | 0.5 | +| mpc_acceleration_limit | float | 車両加速度の制限 | 2.0 | +| mpc_velocity_time_constant | float | 速度スムージングに使用される時定数 | 0.3 | +| mpc_min_prediction_length | float | 最小予測の長さ | 5.0 | + +#### 車両モデル + +| 名称 | 種別 | 説明 | デフォルト値 | +|---|---|---|---| +| vehicle_model_type | 文字列 | mpc予測のための車両モデルの種別 | "kinematics" | +| input_delay | 倍精度 | 遅延補正のためのステアリング入力遅延時間 | 0.24 | +| vehicle_model_steer_tau | 倍精度 | ステアリングの動特性時間定数 (1d近似) [秒] | 0.3 | +| steer_rate_lim_dps_list_by_curvature | 倍精度配列 | 曲率に応じて制限されるステアリング角速度の制限値のリスト [deg/s] | [40.0, 50.0, 60.0] | +| curvature_list_for_steer_rate_lim | 倍精度配列 | アセンディング順の曲率のリストにより、ステアリング角速度の制限値の補間が決定される [/m] | [0.001, 0.002, 0.01] | +| steer_rate_lim_dps_list_by_velocity | 倍精度配列 | 速度に応じて制限されるステアリング角速度の制限値のリスト [deg/s] | [60.0, 50.0, 40.0] | +| velocity_list_for_steer_rate_lim | 倍精度配列 | アセンディング順の速度のリストにより、ステアリング角速度の制限値の補間が決定される [m/s] | [10.0, 15.0, 20.0] | +| acceleration_limit | 倍精度 | 軌道速度の変更のための加速度の制限 [m/ss] | 2.0 | +| velocity_time_constant | 倍精度 | 軌道速度の変更のための速度の動特性時間定数 [s] | 0.3 | + +#### ノイズリダクションのローパスフィルタ + +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------------ | :----- | :------------------------------------------------------------------------------ | :------------ | +| steering_lpf_cutoff_hz | double | ステアリング出力コマンドに対するローパスフィルタのカットオフ周波数 [hz] | 3.0 | +| error_deriv_lpf_cutoff_hz | double | エラー微分にローパスフィルタを適用する際のカットオフ周波数 [Hz] | 5.0 | + +#### 停止状態 + +| 名前 | タイプ | 説明 | デフォルト値 | +| :--------------------------------------- | :------ | :------------------------------------------------------------------------------------------- | :----------: | +| stop_state_entry_ego_speed \*1 | double | 停止状態への移行条件に使用される自車速度のしきい値 | 0.001 | +| stop_state_entry_target_speed \*1 | double | 停止状態への移行条件に使用される目標速度のしきい値 | 0.001 | +| converged_steer_rad | double | 操舵の収束に使用されるしきい値 | 0.1 | +| keep_steer_control_until_converged | boolean | 操舵が収束するまで操舵制御を維持する | true | +| new_traj_duration_time | double | 新しい経路と見なされる時間のしきい値 | 1.0 | +| new_traj_end_dist | double | 新しい経路と見なされる軌道終端間の距離のしきい値 | 0.3 | +| mpc_converged_threshold_rps | double | 最適化の出力が収束したと判断するためのしきい値、停止状態で使用される | 0.01 | + +(\*1) 不要なステアリング操作を防止するため、ステアリングコマンドは停止状態では前の値に固定されます。 #### Steer Offset -Defined in the `steering_offset` namespace. This logic is designed as simple as possible, with minimum design parameters. +`steering_offset` 名前空間で定義します。このロジックは、最小設計パラメータで可能な限りシンプルに設計されています。 -| Name | Type | Description | Default value | -| :---------------------------------- | :------ | :----------------------------------------------------------------------------------------------- | :------------ | -| enable_auto_steering_offset_removal | boolean | Estimate the steering offset and apply compensation | true | -| update_vel_threshold | double | If the velocity is smaller than this value, the data is not used for the offset estimation | 5.56 | -| update_steer_threshold | double | If the steering angle is larger than this value, the data is not used for the offset estimation. | 0.035 | -| average_num | int | The average of this number of data is used as a steering offset. | 1000 | -| steering_offset_limit | double | The angle limit to be applied to the offset compensation. | 0.02 | +| 名前 | 種類 | 説明 | デフォルト値 | +| :-------------------------------------- | :------ | :--------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_auto_steering_offset_removal | boolean | ステアリングオフセットを推定して補正を適用する | true | +| update_vel_threshold | double | 速度がこの値より小さい場合、データはオフセット推定に使用されない | 5.56 | +| update_steer_threshold | double | ステアリング角度がこの値より大きい場合、データはオフセット推定に使用されない | 0.035 | +| average_num | int | この数字の平均がステアリングオフセットとして使用される | 1000 | +| steering_offset_limit | double | オフセット補正に適用する角度制限 | 0.02 | -##### For dynamics model (WIP) +##### 力学モデル(WIP) -| Name | Type | Description | Default value | -| :------------ | :----- | :------------------------------------------ | :------------ | -| cg_to_front_m | double | distance from baselink to the front axle[m] | 1.228 | -| cg_to_rear_m | double | distance from baselink to the rear axle [m] | 1.5618 | -| mass_fl | double | mass applied to front left tire [kg] | 600 | -| mass_fr | double | mass applied to front right tire [kg] | 600 | -| mass_rl | double | mass applied to rear left tire [kg] | 600 | -| mass_rr | double | mass applied to rear right tire [kg] | 600 | -| cf | double | front cornering power [N/rad] | 155494.663 | -| cr | double | rear cornering power [N/rad] | 155494.663 | +| 名称 | 種類 | 説明 | デフォルト値 | +| :--------------------------- | :------ | :-------------------------------------------------------------------| :------------ | +| `cg_to_front_m` | double | ベースリンクからフロントアクスルまでの距離             | 1.228 | +| `cg_to_rear_m` | double | ベースリンクからリアアクスルまでの距離              | 1.5618 | +| `mass_fl` | double | フロント左タイヤに加わる質量                     | 600 | +| `mass_fr` | double | フロント右タイヤに加わる質量                     | 600 | +| `mass_rl` | double | リア左タイヤに加わる質量                     | 600 | +| `mass_rr` | double | リア右タイヤに加わる質量                     | 600 | +| `cf` | double | フロントコーナリングパワー                     | 155494.663 | +| `cr` | double | リアコーナリングパワー                     | 155494.663 | -#### Debug +#### デバッグ -| Name | Type | Description | Default value | +| 名前 | 種類 | 説明 | デフォルト値 | | :------------------------- | :------ | :-------------------------------------------------------------------------------- | :------------ | -| publish_debug_trajectories | boolean | publish predicted trajectory and resampled reference trajectory for debug purpose | true | +| publish_debug_trajectories | ブール | デバッグ目的で予測軌跡と再サンプリングされた基準軌跡を公開 | true | -### How to tune MPC parameters +### MPCパラメータのチューニング方法 -#### Set kinematics information +#### 運動特性情報の設定 -First, it's important to set the appropriate parameters for vehicle kinematics. This includes parameters like `wheelbase`, which represents the distance between the front and rear wheels, and `max_steering_angle`, which indicates the maximum tire steering angle. These parameters should be set in the `vehicle_info.param.yaml`. +最初に、車両の運動特性に適したパラメータを設定することが重要です。これらには、前輪と後輪の間の距離を表す`wheelbase`や、タイヤの最大操舵角を示す`max_steering_angle`などのパラメータが含まれます。これらのパラメータは`vehicle_info.param.yaml`に設定する必要があります。 -#### Set dynamics information +#### 動力特性情報の設定 -Next, you need to set the proper parameters for the dynamics model. These include the time constant `steering_tau` and time delay `steering_delay` for steering dynamics, and the maximum acceleration `mpc_acceleration_limit` and the time constant `mpc_velocity_time_constant` for velocity dynamics. +次に、ダイナミクスモデルに適したパラメータを設定する必要があります。これらには、ステアリングダイナミクスに対する時定数`steering_tau`と時間遅れ`steering_delay`、速度ダイナミクスに対する最大加速度`mpc_acceleration_limit`と時定数`mpc_velocity_time_constant`などが含まれます。 -#### Confirmation of the input information +#### 入力情報の確認 -It's also important to make sure the input information is accurate. Information such as the velocity of the center of the rear wheel [m/s] and the steering angle of the tire [rad] is required. Please note that there have been frequent reports of performance degradation due to errors in input information. For instance, there are cases where the velocity of the vehicle is offset due to an unexpected difference in tire radius, or the tire angle cannot be accurately measured due to a deviation in the steering gear ratio or midpoint. It is suggested to compare information from multiple sensors (e.g., integrated vehicle speed and GNSS position, steering angle and IMU angular velocity), and ensure the input information for MPC is appropriate. +入力情報が正確であることを確認することも重要です。後輪の中心の速度[m/s]やタイヤの操舵角[rad]などの情報が必要です。入力情報の誤りによりパフォーマンスが低下するという報告が頻繁にあります。たとえば、予期しないタイヤ半径の差のために車両の速度がオフセットされる場合や、ステアリングギア比またはミッドポイントの偏差によりタイヤ角度を正確に測定できない場合があります。複数のセンサーからの情報を比較し(例:統合された車両速度とGNSS位置、ステアリング角とIMU角速度)、MPCの入力情報が適切であることを確認することをお勧めします。 -#### MPC weight tuning +#### MPC重みのチューニング -Then, tune the weights of the MPC. One simple approach of tuning is to keep the weight for the lateral deviation (`weight_lat_error`) constant, and vary the input weight (`weight_steering_input`) while observing the trade-off between steering oscillation and control accuracy. +次に、MPCの重みをチューニングします。チューニングの簡単なアプローチとしては、横方向偏差の重み(`weight_lat_error`)を一定に保ち、ステアリングオシレーションと制御精度のトレードオフを観察しながら入力重み(`weight_steering_input`)を変化させることです。 -Here, `weight_lat_error` acts to suppress the lateral error in path following, while `weight_steering_input` works to adjust the steering angle to a standard value determined by the path's curvature. When `weight_lat_error` is large, the steering moves significantly to improve accuracy, which can cause oscillations. On the other hand, when `weight_steering_input` is large, the steering doesn't respond much to tracking errors, providing stable driving but potentially reducing tracking accuracy. +ここで、`weight_lat_error`はパス追従における横方向誤差を抑えるのに対し、`weight_steering_input`はステアリング角をパスの曲率によって決まる標準値に調整するために働きます。`weight_lat_error`が大きいと、精度を高めるためにステアリングが大きく動き、オシレーションが発生する可能性があります。逆に、`weight_steering_input`が大きいと、ステアリングは追従誤差に対してあまり反応せず、安定した走行になりますが、追従精度が低下する可能性があります。 -The steps are as follows: +手順は次のとおりです。 -1. Set `weight_lat_error` = 0.1, `weight_steering_input` = 1.0 and other weights to 0. -2. If the vehicle oscillates when driving, set `weight_steering_input` larger. -3. If the tracking accuracy is low, set `weight_steering_input` smaller. +1. `weight_lat_error` = 0.1、`weight_steering_input` = 1.0、その他の重み = 0に設定します。 +2. 走行時に車両がオシレーションする場合は、`weight_steering_input`を大きくします。 +3. 追従精度が低い場合は、`weight_steering_input`を小さくします。 -If you want to adjust the effect only in the high-speed range, you can use `weight_steering_input_squared_vel`. This parameter corresponds to the steering weight in the high-speed range. +高速レンジでのみ効果を調整したい場合は、`weight_steering_input_squared_vel`を使用できます。このパラメータは、高速レンジでのステアリング重みに対応します。 -#### Descriptions for weights +#### 重みについての説明 -- `weight_lat_error`: Reduce lateral tracking error. This acts like P gain in PID. -- `weight_heading_error`: Make a drive straight. This acts like D gain in PID. -- `weight_heading_error_squared_vel_coeff` : Make a drive straight in high speed range. -- `weight_steering_input`: Reduce oscillation of tracking. -- `weight_steering_input_squared_vel_coeff`: Reduce oscillation of tracking in high speed range. -- `weight_lat_jerk`: Reduce lateral jerk. -- `weight_terminal_lat_error`: Preferable to set a higher value than normal lateral weight `weight_lat_error` for stability. -- `weight_terminal_heading_error`: Preferable to set a higher value than normal heading weight `weight_heading_error` for stability. +- `weight_lat_error`:横方向追従誤差を減らします。これはPIDのPゲインのように動作します。 +- `weight_heading_error`:直進します。これはPIDのDゲインのように動作します。 +- `weight_heading_error_squared_vel_coeff`:高速レンジで直進します。 +- `weight_steering_input`:追従のオシレーションを減らします。 +- `weight_steering_input_squared_vel_coeff`:高速レンジでの追従のオシレーションを減らします。 +- `weight_lat_jerk`:横方向ジャークを減らします。 +- `weight_terminal_lat_error`:安定性のために通常の横方向の重み`weight_lat_error`よりも高い値を設定することを推奨します。 +- `weight_terminal_heading_error`:安定性のために通常のヘディングの重み`weight_heading_error`よりも高い値を設定することを推奨します。 -#### Other tips for tuning +#### その他のチューニングのヒント -Here are some tips for adjusting other parameters: +他のパラメータを調整するためのヒントを以下に示します。 -- In theory, increasing terminal weights, `weight_terminal_lat_error` and `weight_terminal_heading_error`, can enhance the tracking stability. This method sometimes proves effective. -- A larger `prediction_horizon` and a smaller `prediction_sampling_time` are efficient for tracking performance. However, these come at the cost of higher computational costs. -- If you want to modify the weight according to the trajectory curvature (for instance, when you're driving on a sharp curve and want a larger weight), use `mpc_low_curvature_thresh_curvature` and adjust `mpc_low_curvature_weight_**` weights. -- If you want to adjust the steering rate limit based on the vehicle speed and trajectory curvature, you can modify the values of `steer_rate_lim_dps_list_by_curvature`, `curvature_list_for_steer_rate_lim`, `steer_rate_lim_dps_list_by_velocity`, `velocity_list_for_steer_rate_lim`. By doing this, you can enforce the steering rate limit during high-speed driving or relax it while curving. -- In case your target curvature appears jagged, adjusting `curvature_smoothing` becomes critically important for accurate curvature calculations. A larger value yields a smooth curvature calculation which reduces noise but can cause delay in feedforward computation and potentially degrade performance. -- Adjusting the `steering_lpf_cutoff_hz` value can also be effective to forcefully reduce computational noise. This refers to the cutoff frequency in the second order Butterworth filter installed in the final layer. The smaller the cutoff frequency, the stronger the noise reduction, but it also induce operation delay. -- If the vehicle consistently deviates laterally from the trajectory, it's most often due to the offset of the steering sensor or self-position estimation. It's preferable to eliminate these biases before inputting into MPC, but it's also possible to remove this bias within MPC. To utilize this, set `enable_auto_steering_offset_removal` to true and activate the steering offset remover. The steering offset estimation logic works when driving at high speeds with the steering close to the center, applying offset removal. -- If the onset of steering in curves is late, it's often due to incorrect delay time and time constant in the steering model. Please recheck the values of `input_delay` and `vehicle_model_steer_tau`. Additionally, as a part of its debug information, MPC outputs the current steering angle assumed by the MPC model, so please check if that steering angle matches the actual one. +- 理論的には、ターミナル重み`weight_terminal_lat_error`と`weight_terminal_heading_error`を大きくすると、追従安定性が向上します。この手法は効果的な場合があります。 +- `prediction_horizon`を大きくし、`prediction_sampling_time`を小さくすると、追従性能が向上します。ただし、計算コストが高くなります。 +- trajectoryの曲率に応じて重みを変えたい場合(たとえば、急曲線で走行していて大きな重みが必要な場合)、`mpc_low_curvature_thresh_curvature`を使用して`mpc_low_curvature_weight_**`重みを調整します。 +- 車両速度と軌跡曲率に基づいてステアリングレート制限を調整したい場合は、`steer_rate_lim_dps_list_by_curvature`、`curvature_list_for_steer_rate_lim`、`steer_rate_lim_dps_list_by_velocity`、`velocity_list_for_steer_rate_lim`の値を変更できます。これにより、高速走行中はステアリングレート制限を強制したり、曲線中は緩めたりできます。 +- ターゲット曲率がギザギザに見える場合は、`curvature_smoothing`を調整することが、曲率の正確な計算に非常に重要になります。値が大きいほど曲率の計算が滑らかになり、ノイズが減りますが、フィードフォワード計算の遅延が発生し、性能が低下する可能性があります。 +- `steering_lpf_cutoff_hz`の値を調整することも、計算ノイズを強制的に減らすのに効果的です。これは最後のレイヤーにインストールされた2次バターワースフィルターのカットオフ周波数を指します。カットオフ周波数が低いほどノイズの低減が大きくなりますが、動作に遅延が発生します。 +- 車両が軌道から横方向に一貫して逸脱する場合は、ほとんどの場合、ステアリングセンサーのオフセットまたは自車位置推定のオフセットが原因です。これらバイアスをMPCに入力する前に排除することを推奨しますが、MPC内でこのバイアスを削除することもできます。これを使用するには、`enable_auto_steering_offset_removal`をtrueに設定してステアリングオフセット除去器を有効にします。ステアリングオフセット推定ロジックは、ステアリングが中心付近で高速走行しているときに機能し、オフセット除去を適用します。 +- 曲線でのステアリングの開始が遅れる場合は、ステアリングモデルの遅延時間と時定数が正しくないことがよくあります。`input_delay`と`vehicle_model_steer_tau`の値を再確認してください。さらに、MPCはデバッグ情報の一部としてMPCモデルによって想定される現在のステアリング角を出力するため、そのステアリング角が実際のステアリング角と一致しているかどうかを確認してください。 -## References / External links +## 参照/外部リンク - + - [1] Jarrod M. Snider, "Automatic Steering Methods for Autonomous Automobile Path Tracking", Robotics Institute, Carnegie Mellon University, February 2009. -## Related issues +## 自動運転ソフトウェアに関するドキュメント + +### Planningコンポーネントの概要 + +Planningコンポーネントは、自動運転システムの主要な機能の1つであり、システムが安全で効率的な経路を計画するために必要です。 + +### Planningコンポーネントの動作 + +Planningコンポーネントは、以下のタスクを実行します。 + +- 自車位置の Estimation +- 環境の検出とマッピング +- 感知された障害物の追跡 +- 安全で快適な経路の生成 +- 各制御器への経路の伝送 + +### Planningコンポーネントの構成 + +Autoware Planningコンポーネントは、以下のようなモジュールで構成されています。 + +- **WaypointGenerator:** Waypointを生成し、経路を形成します。 +- **TrajectoryGenerator:** Waypointに基づいて、滑らかな経路を生成します。 +- **MotionPredictor:** 障害物の将来の動きを予測します。 +- **CollisionChecker:** 生成された経路が環境の障害物と衝突しないことを確認します。 + +### Planningコンポーネントの入力 + +Planningコンポーネントは、以下の情報を入力として受け取ります。 + +- 自車位置の Estimation +- 感知された障害物のリスト +- 環境マップ +- 車両の動力学モデル + +### Planningコンポーネントの出力 + +Planningコンポーネントは、以下の情報を出力として生成します。 + +- **Target Path:** 自動運転車が追従する経路 +- **Target Velocity:** 経路上の各点での希望速度 +- **Target Acceleration:** 経路上の各点での希望加速度 + +### Planningコンポーネントの性能要件 + +Planningコンポーネントは、以下のような性能要件を満たす必要があります。 + +- **安全性:** Planningコンポーネントは、車両が安全に操作されるように経路を計画する必要があります。 +- **効率性:** Planningコンポーネントは、計算効率が高く、リアルタイムで動作する必要があります。 +- ** robustness:** Planningコンポーネントは、不完全な情報や予測不可能なイベントに対しても堅牢である必要があります。 + +### Planningコンポーネントの検証 + +Planningコンポーネントは、シミュレーションと実車テストの両方によって検証する必要があります。検証には以下が含まれます。 + +- **path planning**の正確性 +- **Trajectory planning**の滑らかさと効率性 +- **Collision avoidance**の有効性 - diff --git a/control/autoware_obstacle_collision_checker/README.md b/control/autoware_obstacle_collision_checker/README.md index 25b57fe6f4653..18fb4b3010188 100644 --- a/control/autoware_obstacle_collision_checker/README.md +++ b/control/autoware_obstacle_collision_checker/README.md @@ -1,12 +1,13 @@ # obstacle_collision_checker -## Purpose +## 目的 -`obstacle_collision_checker` is a module to check obstacle collision for predicted trajectory and publish diagnostic errors if collision is found. +`obstacle_collision_checker`は、予測された軌跡と障害物衝突をチェックし、衝突を発見した場合に診断エラーを公開するモジュールです。 -## Inner-workings / Algorithms +## 仕組み / アルゴリズム + +### フローチャート -### Flow chart ```plantuml @startuml @@ -43,44 +44,92 @@ stop @enduml ``` -### Algorithms +### アルゴリズム + +### データの確認 + +`obstacle_collision_checker` が地上点群、予測軌跡、基準軌跡、現在の速度データを受信していないことを確認します。 + +### 診断の更新 + +予測パスで衝突が発生した場合、このモジュールは診断ステータスとして `ERROR` レベルを設定し、それ以外の場合は `OK` を設定します。 + +## 入出力 + +### 入力 + +| 名前 | 型 | 説明 | +|---|---|---| +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 基準軌跡 | +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測軌跡 | +| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避すべき障害物の点群 | +| `/tf` | `tf2_msgs::msg::TFMessage` | TF | +| `/tf_static` | `tf2_msgs::msg::TFMessage` | スタティックTF | + +### 出力 + +**AutowareのPlanningモジュール** + +**概要** + +Planningモジュールは、Autowareの重要なコンポーネントの1つであり、Perceptionモジュールから受信したセンサデータを処理して、経路計画と制御コマンドを生成します。このモジュールは、次の手順で動作します。 + +**主な機能** + +* **経路計画:** + * ダイナミック計画法を使用して、周囲の環境を考慮した最適な経路を生成します。 + * 衝突回避と安全性を確保するために、予測可能な障害物パスを予測します。 +* **モーション計画:** + * 経路計画に基づいて、目標速度と加速度を決定します。 +* **コマンド生成:** + * 目標速度と加速度を使用して、車両のハンドルとアクセル/ブレーキの制御コマンドを生成します。 + +**入力** + +* Perceptionモジュールからのセンサデータ + * LiDAR + * レーダー + * カメラ +* 自車位置 + +**出力** -### Check data +* 計画された経路 +* 目標速度と加速度 +* ハンドルとアクセル/ブレーキの制御コマンド -Check that `obstacle_collision_checker` receives no ground pointcloud, predicted_trajectory, reference trajectory, and current velocity data. +**考慮事項** -### Diagnostic update +* **センサーの不確実性:** センサーデータは不確実性を伴うため、Planningモジュールはロバストで信頼性の高い出力を生成する必要があります。 +* **現実世界の制約:** 計画された経路は、道路の傾斜、交通信号、その他の現実世界の制約を考慮する必要があります。 +* **リアルタイム処理:** Planningモジュールは、リアルタイムで動作して、車両の安全な運転を確保する必要があります。 -If any collision is found on predicted path, this module sets `ERROR` level as diagnostic status else sets `OK`. +**追加の機能** -## Inputs / Outputs +* **'post resampling' 局所パス計画:** センサーデータの更新に応じて、局所パスをリアルタイムで調整します。 +* **多様なパラメータ設定:** 車両のモデル、環境条件、運転スタイルに応じて、Planningモジュールのパラメータを調整できます。 +* **詳細なログ記録:** Planningモジュールの動作を診断し、改善するために、ログデータを記録できます。 -### Input +**関連ドキュメント** -| Name | Type | Description | -| ---------------------------------------------- | ----------------------------------------- | ------------------------------------------------------------------ | -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | Reference trajectory | -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | Predicted trajectory | -| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | Pointcloud of obstacles which the ego-vehicle should stop or avoid | -| `/tf` | `tf2_msgs::msg::TFMessage` | TF | -| `/tf_static` | `tf2_msgs::msg::TFMessage` | TF static | +* Autoware Planningモジュールユーザーガイド +* Autoware Planningモジュール開発者ガイド -### Output +| 変数名 | 型 | 説明 | +| ------------ | --------------------------------------- | -------------------------- | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 視覚化用マーカー | -| Name | Type | Description | -| ---------------- | -------------------------------------- | ------------------------ | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | Marker for visualization | +## パラメータ -## Parameters +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------ | :------- | :----------------------------------------------------- | :------------ | +| `delay_time` | `double` | 車両の遅延時間 [s] | 0.3 | +| `footprint_margin` | `double` | 車両形状のマージン [m] | 0.0 | +| `max_deceleration` | `double` | 自車停止時の最大減速度 [m/s^2] | 2.0 | +| `resample_interval` | `double` | `post resampling`された軌道データの区間 [m] | 0.3 | +| `search_radius` | `double` | 軌道データから点群への探索距離 [m] | 5.0 | -| Name | Type | Description | Default value | -| :------------------ | :------- | :------------------------------------------------- | :------------ | -| `delay_time` | `double` | Delay time of vehicle [s] | 0.3 | -| `footprint_margin` | `double` | Foot print margin [m] | 0.0 | -| `max_deceleration` | `double` | Max deceleration for ego vehicle to stop [m/s^2] | 2.0 | -| `resample_interval` | `double` | Interval for resampling trajectory [m] | 0.3 | -| `search_radius` | `double` | Search distance from trajectory to point cloud [m] | 5.0 | +## 前提 / 既知の制限事項 -## Assumptions / Known limits +適切な衝突確認を行うためには、予測軌道とノイズのない障害物点群の予測値を取得する必要があります。 -To perform proper collision check, it is necessary to get probably predicted trajectory and obstacle pointclouds without noise. diff --git a/control/autoware_operation_mode_transition_manager/README.md b/control/autoware_operation_mode_transition_manager/README.md index 3a9680f42702b..3b46d4f231ccc 100644 --- a/control/autoware_operation_mode_transition_manager/README.md +++ b/control/autoware_operation_mode_transition_manager/README.md @@ -1,138 +1,141 @@ -# autoware_operation_mode_transition_manager +## autoware_operation_mode_transition_manager -## Purpose / Use cases +## 用途 / ユースケース -This module is responsible for managing the different modes of operation for the Autoware system. The possible modes are: +このモジュールは、Autowareシステムのさまざまな動作モードを管理します。考えられるモードは次のとおりです。 -- `Autonomous`: the vehicle is fully controlled by the autonomous driving system -- `Local`: the vehicle is controlled by a physically connected control system such as a joy stick -- `Remote`: the vehicle is controlled by a remote controller -- `Stop`: the vehicle is stopped and there is no active control system. +- `Autonomous`: 車両が自律走行システムによって完全に制御されている +- `Local`: 車両がジョイスティックなどの物理的に接続された制御システムによって制御されている +- `Remote`: 車両がリモートコントローラーによって制御されている +- `Stop`: 車両が停止しており、アクティブな制御システムがない -There is also an `In Transition` state that occurs during each mode transitions. During this state, the transition to the new operator is not yet complete, and the previous operator is still responsible for controlling the system until the transition is complete. Some actions may be restricted during the `In Transition` state, such as sudden braking or steering. (This is restricted by the `vehicle_cmd_gate`). +各モードの切り替え中に発生する`In Transition`状態もあります。この状態では、新しいオペレータへの切り替えがまだ完了しておらず、切り替えが完了するまで、以前のオペレータがシステムの制御を担当しています。突然のブレーキやステアリングなどの操作は、`In Transition`状態中に制限される場合があります (これは`vehicle_cmd_gate`によって制限されます)。 -### Features +### 機能 -- Transit mode between `Autonomous`, `Local`, `Remote` and `Stop` based on the indication command. -- Check whether the each transition is available (safe or not). -- Limit some sudden motion control in `In Transition` mode (this is done with `vehicle_cmd_gate` feature). -- Check whether the transition is completed. +- `Autonomous`, `Local`, `Remote`, `Stop`間のモード切り替えを、表示コマンドに基づいて行う。 +- 各切り替えが利用可能(安全)かどうかを確認する。 +- `In Transition`モードで突然のモーションコントロールを制限する(`vehicle_cmd_gate`機能を使用して実行)。 +- 切り替えが完了したかどうかを確認する。 -- Transition between the `Autonomous`, `Local`, `Remote`, and `Stop` modes based on the indicated command. -- Determine whether each transition is safe to execute. -- Restrict certain sudden motion controls during the `In Transition` mode (using the `vehicle_cmd_gate` feature). -- Verify that the transition is complete. +- `Autonomous`, `Local`, `Remote`, `Stop`モード間の切り替えを、表示コマンドに基づいて実行。 +- 各切り替えの実行が安全かどうかを判断。 +- `In Transition`モードで、特定の突然のモーション制御を制限(`vehicle_cmd_gate`機能を使用)。 +- 切り替えが完了したことを確認。 -## Design +## 設計 -A rough design of the relationship between `autoware_operation_mode_transition_manager`` and the other nodes is shown below. +`autoware_operation_mode_transition_manager`と他のノードとの関係の概略図を以下に示します。 ![transition_rough_structure](image/transition_rough_structure.drawio.svg) -A more detailed structure is below. +より詳細な構造を以下に示します。 ![transition_detailed_structure](image/transition_detailed_structure.drawio.svg) -Here we see that `autoware_operation_mode_transition_manager` has multiple state transitions as follows +ここでは、`autoware_operation_mode_transition_manager`には、次のような複数の状態遷移があるとわかります。 - **AUTOWARE ENABLED <---> DISABLED** - - **ENABLED**: the vehicle is controlled by Autoware. - - **DISABLED**: the vehicle is out of Autoware control, expecting the e.g. manual driving. + - **ENABLED**: 車両はAutowareによって制御されています。 + - **DISABLED**: 車両はAutowareの制御外であり、手動運転が期待されています。 - **AUTOWARE ENABLED <---> AUTO/LOCAL/REMOTE/NONE** - - **AUTO**: the vehicle is controlled by Autoware, with the autonomous control command calculated by the planning/control component. - - **LOCAL**: the vehicle is controlled by Autoware, with the locally connected operator, e.g. joystick controller. - - **REMOTE**: the vehicle is controlled by Autoware, with the remotely connected operator. - - **NONE**: the vehicle is not controlled by any operator. + - **AUTO**: 車両はAutowareによって制御され、自律制御コマンドはPlanning/Controlコンポーネントによって計算されます。 + - **LOCAL**: 車両はAutowareによって制御され、ジョイスティックコントローラーなどのローカルに接続されたオペレータがいます。 + - **REMOTE**: 車両はAutowareによって制御され、リモートに接続されたオペレータがいます。 + - **NONE**: 車両はオペレータによって制御されていません。 - **IN TRANSITION <---> COMPLETED** - - **IN TRANSITION**: the mode listed above is in the transition process, expecting the former operator to have a responsibility to confirm the transition is completed. - - **COMPLETED**: the mode transition is completed. + - **IN TRANSITION**: 上記のモードは移行プロセス中で、以前のオペレータが移行が完了したことを確認する責任があります。 + - **COMPLETED**: モード移行は完了しています。 -## Inputs / Outputs / API +## 入出力 / API -### Inputs +### 入力 -For the mode transition: +モード移行用: -- /system/operation_mode/change_autoware_control [`tier4_system_msgs/srv/ChangeAutowareControl`]: change operation mode to Autonomous -- /system/operation_mode/change_operation_mode [`tier4_system_msgs/srv/ChangeOperationMode`]: change operation mode +- /system/operation_mode/change_autoware_control [`tier4_system_msgs/srv/ChangeAutowareControl`]: 動作モードをAutonomousに変更 +- /system/operation_mode/change_operation_mode [`tier4_system_msgs/srv/ChangeOperationMode`]: 動作モードを変更 -For the transition availability/completion check: +移行の可用性/完了チェック用: -- /control/command/control_cmd [`autoware_control_msgs/msg/Control`]: vehicle control signal -- /localization/kinematic_state [`nav_msgs/msg/Odometry`]: ego vehicle state -- /planning/scenario_planning/trajectory [`autoware_planning_msgs/msg/Trajectory`]: planning trajectory -- /vehicle/status/control_mode [`autoware_vehicle_msgs/msg/ControlModeReport`]: vehicle control mode (autonomous/manual) -- /control/vehicle_cmd_gate/operation_mode [`autoware_adapi_v1_msgs/msg/OperationModeState`]: the operation mode in the `vehicle_cmd_gate`. (To be removed) +## 入力 -For the backward compatibility (to be removed): +- `/control/command/control_cmd` [`autoware_control_msgs/msg/Control`]: 車両制御信号 +- `/localization/kinematic_state` [`nav_msgs/msg/Odometry`]: 自車状態 +- `/planning/scenario_planning/trajectory` [`autoware_planning_msgs/msg/Trajectory`]: Planningトラジェクトリー +- `/vehicle/status/control_mode` [`autoware_vehicle_msgs/msg/ControlModeReport`]: 車両制御モード (自動/手動) +- `/control/vehicle_cmd_gate/operation_mode` [`autoware_adapi_v1_msgs/msg/OperationModeState`]: `vehicle_cmd_gate` の操作モード (廃止予定) -- /api/autoware/get/engage [`autoware_vehicle_msgs/msg/Engage`] -- /control/current_gate_mode [`tier4_control_msgs/msg/GateMode`] -- /control/external_cmd_selector/current_selector_mode [`tier4_control_msgs/msg/ExternalCommandSelectorMode`] +**下位互換性のため (廃止予定)** -### Outputs +- `/api/autoware/get/engage` [`autoware_vehicle_msgs/msg/Engage`] +- `/control/current_gate_mode` [`tier4_control_msgs/msg/GateMode`] +- `/control/external_cmd_selector/current_selector_mode` [`tier4_control_msgs/msg/ExternalCommandSelectorMode`] -- /system/operation_mode/state [`autoware_adapi_v1_msgs/msg/OperationModeState`]: to inform the current operation mode -- /control/autoware_operation_mode_transition_manager/debug_info [`autoware_operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug`]: detailed information about the operation mode transition +## 出力 -- /control/gate_mode_cmd [`tier4_control_msgs/msg/GateMode`]: to change the `vehicle_cmd_gate` state to use its features (to be removed) -- /autoware/engage [`autoware_vehicle_msgs/msg/Engage`]: +- `/system/operation_mode/state` [`autoware_adapi_v1_msgs/msg/OperationModeState`]: 現在の操作モードを通知 +- `/control/autoware_operation_mode_transition_manager/debug_info` [`autoware_operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug`]: 操作モード遷移に関する詳細情報 -- /control/control_mode_request [`autoware_vehicle_msgs/srv/ControlModeCommand`]: to change the vehicle control mode (autonomous/manual) -- /control/external_cmd_selector/select_external_command [`tier4_control_msgs/srv/ExternalCommandSelect`]: +- `/control/gate_mode_cmd` [`tier4_control_msgs/msg/GateMode`]: それらの機能を使用するために `vehicle_cmd_gate` の状態を変更 (廃止予定) +- `/autoware/engage` [`autoware_vehicle_msgs/msg/Engage`]: -## Parameters +- `/control/control_mode_request` [`autoware_vehicle_msgs/srv/ControlModeCommand`]: 車両制御モード (自動/手動) を変更 +- `/control/external_cmd_selector/select_external_command` [`tier4_control_msgs/srv/ExternalCommandSelect`]: + +## パラメータ {{ json_to_markdown("control/autoware_operation_mode_transition_manager/schema/operation_mode_transition_manager.schema.json") }} -| Name | Type | Description | Default value | -| :--------------------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `transition_timeout` | `double` | If the state transition is not completed within this time, it is considered a transition failure. | 10.0 | -| `frequency_hz` | `double` | running hz | 10.0 | -| `enable_engage_on_driving` | `bool` | Set true if you want to engage the autonomous driving mode while the vehicle is driving. If set to false, it will deny Engage in any situation where the vehicle speed is not zero. Note that if you use this feature without adjusting the parameters, it may cause issues like sudden deceleration. Before using, please ensure the engage condition and the vehicle_cmd_gate transition filter are appropriately adjusted. | 0.1 | -| `check_engage_condition` | `bool` | If false, autonomous transition is always available | 0.1 | -| `nearest_dist_deviation_threshold` | `double` | distance threshold used to find nearest trajectory point | 3.0 | -| `nearest_yaw_deviation_threshold` | `double` | angle threshold used to find nearest trajectory point | 1.57 | - -For `engage_acceptable_limits` related parameters: - -| Name | Type | Description | Default value | -| :---------------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `allow_autonomous_in_stopped` | `bool` | If true, autonomous transition is available when the vehicle is stopped even if other checks fail. | true | -| `dist_threshold` | `double` | the distance between the trajectory and ego vehicle must be within this distance for `Autonomous` transition. | 1.5 | -| `yaw_threshold` | `double` | the yaw angle between trajectory and ego vehicle must be within this threshold for `Autonomous` transition. | 0.524 | -| `speed_upper_threshold` | `double` | the velocity deviation between control command and ego vehicle must be within this threshold for `Autonomous` transition. | 10.0 | -| `speed_lower_threshold` | `double` | the velocity deviation between the control command and ego vehicle must be within this threshold for `Autonomous` transition. | -10.0 | -| `acc_threshold` | `double` | the control command acceleration must be less than this threshold for `Autonomous` transition. | 1.5 | -| `lateral_acc_threshold` | `double` | the control command lateral acceleration must be less than this threshold for `Autonomous` transition. | 1.0 | -| `lateral_acc_diff_threshold` | `double` | the lateral acceleration deviation between the control command must be less than this threshold for `Autonomous` transition. | 0.5 | - -For `stable_check` related parameters: - -| Name | Type | Description | Default value | -| :---------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `duration` | `double` | the stable condition must be satisfied for this duration to complete the transition. | 0.1 | -| `dist_threshold` | `double` | the distance between the trajectory and ego vehicle must be within this distance to complete `Autonomous` transition. | 1.5 | -| `yaw_threshold` | `double` | the yaw angle between trajectory and ego vehicle must be within this threshold to complete `Autonomous` transition. | 0.262 | -| `speed_upper_threshold` | `double` | the velocity deviation between control command and ego vehicle must be within this threshold to complete `Autonomous` transition. | 2.0 | -| `speed_lower_threshold` | `double` | the velocity deviation between control command and ego vehicle must be within this threshold to complete `Autonomous` transition. | 2.0 | - -## Engage check behavior on each parameter setting - -This matrix describes the scenarios in which the vehicle can be engaged based on the combinations of parameter settings: - -| `enable_engage_on_driving` | `check_engage_condition` | `allow_autonomous_in_stopped` | Scenarios where engage is permitted | +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------------------- | :---- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | +| `transition_timeout` | `float` | ステート遷移が __指定時間内に完了しない__場合、遷移が失敗と見なされます。 | 10.0 | +| `frequency_hz` | `float` | 実行 hz | 10.0 | +| `enable_engage_on_driving` | `bool` | 車両 __走行中に自動運転モードをオンにする__かどうかを指定します。 false の場合、車両速度が 0 以外の状況では走行モードへの切り替えを拒否します。パラメータを調整せずにこの機能を使用すると、急減速などの問題が発生する可能性があることに注意してください。使用する前に、走行条件と vehicle_cmd_gate 遷移フィルタが適切に調整されていることを確認してください。 | 0.1 | +| `check_engage_condition` | `bool` | false の場合、自動遷移は常に利用可能です。 | 0.1 | +| `nearest_dist_deviation_threshold` | `float` | 最も近い軌跡ポイントを見つけるために使用される距離の閾値 | 3.0 | +| `nearest_yaw_deviation_threshold` | `float` | 最も近い軌跡ポイントを見つけるために使用される角度の閾値 | 1.57 | + +`engage_acceptable_limits` 関連パラメータについて: + +| 名前 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `allow_autonomous_in_stopped` | `bool` | 停止時に他のチェックに失敗しても、自律走行への移行が許可される場合はtrue | true | +| `dist_threshold` | `double` | `Autonomous` への移行では、軌跡と自車位置の距離がこの距離内にある必要がある | 1.5 | +| `yaw_threshold` | `double` | `Autonomous` への移行では、軌跡と自車位置のヨー角がこのしきい値内にある必要がある | 0.524 | +| `speed_upper_threshold` | `double` | `Autonomous` への移行では、制御コマンドと自車位置の速度偏差はこのしきい値内にある必要がある | 10.0 | +| `speed_lower_threshold` | `double` | `Autonomous` への移行では、制御コマンドと自車位置の速度偏差はこのしきい値内にある必要がある | -10.0 | +| `acc_threshold` | `double` | `Autonomous` への移行では、制御コマンドの加速度はこのしきい値未満である必要がある | 1.5 | +| `lateral_acc_threshold` | `double` | `Autonomous` への移行では、制御コマンドの横加速度はこのしきい値未満である必要がある | 1.0 | +| `lateral_acc_diff_threshold` | `double` | `Autonomous` への移行では、制御コマンドの横加速度偏差はこのしきい値未満である必要がある | 0.5 | + +`stable_check`関連パラメーター: + +| 名称 | 型 | 説明 | デフォルト値 | +| :---------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `duration` | `数値` | この期間、安定条件が満たされると遷移が完了する。 | 0.1 | +| `dist_threshold` | `数値` | 経路と自車位置の距離が一定範囲内にある場合、`自律` への遷移が完了する。 | 1.5 | +| `yaw_threshold` | `数値` | 経路と自車位置のヨー角が一定範囲内にある場合、`自律` への遷移が完了する。 | 0.262 | +| `speed_upper_threshold` | `数値` | 制御コマンドと自車位置の速度偏差が一定範囲内にある場合、`自律` への遷移が完了する。 | 2.0 | +| `speed_lower_threshold` | `数値` | 制御コマンドと自車位置の速度偏差が一定範囲内にある場合、`自律` への遷移が完了する。 | 2.0 | + +## 各パラメータ設定におけるエンゲージチェック挙動 + +このマトリックスは、車両をエンゲージできるシナリオを、パラメータ設定の組み合わせに基づいて記述しています。 + +| `enable_engage_on_driving` | `check_engage_condition` | `allow_autonomous_in_stopped` | 許容されるEngageのシナリオ | | :------------------------: | :----------------------: | :---------------------------: | :---------------------------------------------------------------- | -| x | x | x | Only when the vehicle is stationary. | -| x | x | o | Only when the vehicle is stationary. | -| x | o | x | When the vehicle is stationary and all engage conditions are met. | -| x | o | o | Only when the vehicle is stationary. | -| o | x | x | At any time (Caution: Not recommended). | -| o | x | o | At any time (Caution: Not recommended). | -| o | o | x | When all engage conditions are met, regardless of vehicle status. | -| o | o | o | When all engage conditions are met or the vehicle is stationary. | +| x | x | x | 車両が停止している場合のみ | +| x | x | o | 車両が停止している場合のみ | +| x | o | x | 車両が停止しており、すべてのEngage条件が満たされている場合 | +| x | o | o | 車両が停止している場合のみ | +| o | x | x | 常に(注意:推奨されません) | +| o | x | o | 常に(注意:推奨されません) | +| o | o | x | 車両の状態に関係なく、すべてのEngage条件が満たされた場合 | +| o | o | o | すべてのEngage条件が満たされている場合、または車両が停止している場合 | ## Future extensions / Unimplemented parts -- Need to remove backward compatibility interfaces. -- This node should be merged to the `vehicle_cmd_gate` due to its strong connection. +- 後方互換インターフェイスを削除する必要があります。 +- このノードは、`vehicle_cmd_gate` との密接な連携があるため、それに統合する必要があります。 + diff --git a/control/autoware_pid_longitudinal_controller/README.md b/control/autoware_pid_longitudinal_controller/README.md index b147b3b795391..89895dbdcd335 100644 --- a/control/autoware_pid_longitudinal_controller/README.md +++ b/control/autoware_pid_longitudinal_controller/README.md @@ -1,266 +1,263 @@ # PID Longitudinal Controller -## Purpose / Use cases +## 目的 / ユースケース -The longitudinal_controller computes the target acceleration to achieve the target velocity set at each point of the target trajectory using a feed-forward/back control. +longitudinal_controllerは、フィードフォワード / フィードバック制御を使用して、目標軌道の各点で設定された目標速度を実現するために目標加速度を計算します。 -It also contains a slope force correction that takes into account road slope information, and a delay compensation function. -It is assumed that the target acceleration calculated here will be properly realized by the vehicle interface. +また、道路傾斜情報を考慮する傾斜力補正機能と遅延補償機能も搭載されています。ここで計算された目標加速度が車両インターフェースによって適切に実現されることが想定されています。 -Note that the use of this module is not mandatory for Autoware if the vehicle supports the "target speed" interface. +車両が「目標速度」インターフェースをサポートしている場合、Autowareではこのモジュールの使用は必須ではないことに注意してください。 -## Design / Inner-workings / Algorithms +## 設計 / 内部動作 / アルゴリズム -### States +### 状態 -This module has four state transitions as shown below in order to handle special processing in a specific situation. +このモジュールには、特定の状況で特殊な処理を処理するために、以下に示す4つの状態遷移があります。 - **DRIVE** - - Executes target velocity tracking by PID control. - - It also applies the delay compensation and slope compensation. + - PID制御による目標速度追従を実行します。 + - また、遅延補償と傾斜補償も適用します。 - **STOPPING** - - Controls the motion just before stopping. - - Special sequence is performed to achieve accurate and smooth stopping. + - 停止直前の動きを制御します。 + - 正確かつスムーズな停止を実現するために特別なシーケンスが実行されます。 - **STOPPED** - - Performs operations in the stopped state (e.g. brake hold) -- **EMERGENCY**. - - Enters an emergency state when certain conditions are met (e.g., when the vehicle has crossed a certain distance of a stop line). - - The recovery condition (whether or not to keep emergency state until the vehicle completely stops) or the deceleration in the emergency state are defined by parameters. + - 停止状態での操作を行います(例:ブレーキホールド) +- **EMERGENCY** + - 特定の条件が満たされた場合(例:車両が停止線の一定距離を超えた場合)、緊急状態に入ります。 + - 回復条件(車両が完全に停止するまで緊急状態を維持するかどうかの条件)または緊急状態での減速度はパラメータによって定義されます。 -The state transition diagram is shown below. +状態遷移図を以下に示します。 ![LongitudinalControllerStateTransition](./media/LongitudinalControllerStateTransition.drawio.svg) -### Logics +### ロジック -#### Control Block Diagram +#### 制御ブロックダイアグラム ![LongitudinalControllerDiagram](./media/LongitudinalControllerDiagram.drawio.svg) -#### FeedForward (FF) +#### フィードフォワード(FF) -The reference acceleration set in the trajectory and slope compensation terms are output as a feedforward. Under ideal conditions with no modeling error, this FF term alone should be sufficient for velocity tracking. +軌道に設定された基準加速度と傾斜補正項をフィードフォワードとして出力します。モデリングエラーのない理想的な条件下では、このFF項のみで速度追従に十分です。 -Tracking errors causing modeling or discretization errors are removed by the feedback control (now using PID). +モデリングエラーまたは離散化エラーを引き起こす追従エラーは、フィードバック制御(現在はPIDを使用)によって除去されます。 -##### Brake keeping +##### ブレーキ保持 -From the viewpoint of ride comfort, stopping with 0 acceleration is important because it reduces the impact of braking. However, if the target acceleration when stopping is 0, the vehicle may cross over the stop line or accelerate a little in front of the stop line due to vehicle model error or gradient estimation error. +乗り心地の観点からは、加速0で停止することが重要です。なぜなら、ブレーキによる衝撃が低減されるからです。ただし、停止時の目標加速度が0の場合、車両モデルエラーまたは勾配推定エラーにより、車両が停止線を越えてしまったり、停止線の前で少し加速したりする可能性があります。 -For reliable stopping, the target acceleration calculated by the FeedForward system is limited to a negative acceleration when stopping. +信頼性の高い停止を実現するために、フィードフォワードシステムによって計算された目標加速度は、停止時には負の加速度に制限されます。 ![BrakeKeepingDiagram](./media/BrakeKeeping.drawio.svg) -#### Slope compensation +#### 傾斜補正 -Based on the slope information, a compensation term is added to the target acceleration. +傾斜情報に基づき、補正項が目標加速度に追加されます。 -There are two sources of the slope information, which can be switched by a parameter. +倾斜情報には2つの情報源があり、パラメータによって切り替えることができます。 -- Pitch of the estimated ego-pose (default) - - Calculates the current slope from the pitch angle of the estimated ego-pose - - Pros: Easily available - - Cons: Cannot extract accurate slope information due to the influence of vehicle vibration. -- Z coordinate on the trajectory - - Calculates the road slope from the difference of z-coordinates between the front and rear wheel positions in the target trajectory - - Pros: More accurate than pitch information, if the z-coordinates of the route are properly maintained - - Pros: Can be used in combination with delay compensation (not yet implemented) - - Cons: z-coordinates of high-precision map is needed. - - Cons: Does not support free space planning (for now) + - 傾斜角から現在の勾配を計算します + - 長所: 容易に入手可能 + - 短所: 車両の振動の影響により、正確な勾配情報を抽出できません +- 軌道の Z 座標 + - ターゲット軌跡における前輪と後輪位置の Z 座標の差から道路勾配を計算します + - 長所: 経路の Z 座標が適切に維持されている場合、ピッチ情報よりも正確 + - 長所: 遅延補正との併用が可能(現時点では未実装) + - 短所: 高精度マップの Z 座標が必要 + - 短所: 自由空間計画をサポートしていない(現時点では) -**Notation:** This function works correctly only in a vehicle system that does not have acceleration feedback in the low-level control system. +**記号:** この関数は、低レベル制御システムに加速フィードバックがない車両システムでのみ正常に動作します。 -This compensation adds gravity correction to the target acceleration, resulting in an output value that is no longer equal to the target acceleration that the autonomous driving system desires. Therefore, it conflicts with the role of the acceleration feedback in the low-level controller. -For instance, if the vehicle is attempting to start with an acceleration of `1.0 m/s^2` and a gravity correction of `-1.0 m/s^2` is applied, the output value will be `0`. If this output value is mistakenly treated as the target acceleration, the vehicle will not start. +この補正は、ターゲット加速度に重力補正を加え、自立走行システムが求めるターゲット加速度と等しくなくなる出力値を出力します。そのため、低レベルコントローラーの加速フィードバックの役割と矛盾します。 +たとえば、車両が「1.0 m/s^2」の加速度で始動しようとしており、「-1.0 m/s^2」の重力補正が適用されると、出力値は「0」になります。この出力値を誤ってターゲット加速度として扱えば、車両は始動しません。 -A suitable example of a vehicle system for the slope compensation function is one in which the output acceleration from the longitudinal_controller is converted into target accel/brake pedal input without any feedbacks. In this case, the output acceleration is just used as a feedforward term to calculate the target pedal, and hence the issue mentioned above does not arise. +勾配補正機能に適した車両システムの例は、 longitudinal_controller からの出力加速度をフィードバックなしでターゲットアクセル/ブレーキペダル入力に変換するシステムです。この場合、出力加速度はターゲットペダルの計算のためのフィードフォワード項としてのみ使用されるため、上記の点は問題になりません。 -Note: The angle of the slope is defined as positive for an uphill slope, while the pitch angle of the ego pose is defined as negative when facing upward. They have an opposite definition. +注: 勾配の角度は上り坂で正、自車位置のピッチ角は上向きで負と定義されます。定義は逆です。 ![slope_definition](./media/slope_definition.drawio.svg) -#### PID control +#### PID 制御 -For deviations that cannot be handled by FeedForward control, such as model errors, PID control is used to construct a feedback system. +フィードフォワード制御で処理できない偏差、たとえばモデル誤差に対しては、フィードバックシステムを構築するために PID 制御が使用されます。 -This PID control calculates the target acceleration from the deviation between the current ego-velocity and the target velocity. +この PID 制御は、現在の自車速度とターゲット速度の偏差からターゲット加速度を計算します。 -This PID logic has a maximum value for the output of each term. This is to prevent the following: +この PID 処理は、各項の出力に最大値があります。これは次のことを防ぐためです。 -- Large integral terms may cause unintended behavior by users. -- Unintended noise may cause the output of the derivative term to be very large. +- 大きい積分項は、ユーザーによる予期しない動作を引き起こす可能性があります。 +- 予期しないノイズは、微分項の出力の値を非常に高くする可能性があります。 -Note: by default, the integral term in the control system is not accumulated when the vehicle is stationary. This precautionary measure aims to prevent unintended accumulation of the integral term in scenarios where Autoware assumes the vehicle is engaged, but an external system has immobilized the vehicle to initiate startup procedures. +注: デフォルトでは、車両が停止している場合、制御システムの積分項は蓄積されません。この予防措置は、Autoware は車両がエンゲージしていることを想定していますが、起動手順を開始するために外部システムが車両を固定している場合に、積分項の予期しない累積を防ぐことを目的としています。 -However, certain situations may arise, such as when the vehicle encounters a depression in the road surface during startup or if the slope compensation is inaccurately estimated (lower than necessary), leading to a failure to initiate motion. To address these scenarios, it is possible to activate error integration even when the vehicle is at rest by setting the `enable_integration_at_low_speed` parameter to true. +ただし、車両が起動時に路面の陥没部に遭遇したり、勾配補正が不正確に推定されたり(必要以上に小さくなったり)すると、動作を開始できない場合があります。これらのシナリオに対処するために、`enable_integration_at_low_speed` パラメータを true に設定することで、車両が静止している場合でもエラーの積分をアクティブにすることができます。 -When `enable_integration_at_low_speed` is set to true, the PID controller will initiate integration of the acceleration error after a specified duration defined by the `time_threshold_before_pid_integration` parameter has elapsed without the vehicle surpassing a minimum velocity set by the `current_vel_threshold_pid_integration` parameter. +`enable_integration_at_low_speed` が true に設定されている場合、PID コントローラーは、`time_threshold_before_pid_integration` パラメータで定義された特定の時間が経過し、車両が `current_vel_threshold_pid_integration` パラメータで設定された最小速度を超えていない場合に、加速度誤差の積分を開始します。 -The presence of the `time_threshold_before_pid_integration` parameter is important for practical PID tuning. Integrating the error when the vehicle is stationary or at low speed can complicate PID tuning. This parameter effectively introduces a delay before the integral part becomes active, preventing it from kicking in immediately. This delay allows for more controlled and effective tuning of the PID controller. +`time_threshold_before_pid_integration` パラメータがあることは、実用的な PID チューニングにとって重要です。車両が停止中または低速時に誤差を積分すると、PID のチューニングが複雑になる可能性があります。このパラメータは効果的に積分部分がアクティブになるまでの遅延を導入し、瞬時に開始することを防ぎます。この遅延により、PID コントローラーのより制御された効果的なチューニングが可能になります。 -At present, PID control is implemented from the viewpoint of trade-off between development/maintenance cost and performance. -This may be replaced by a higher performance controller (adaptive control or robust control) in future development. +現在、PID 制御は、開発/保守コストとパフォーマンスのトレードオフの観点から実装されています。 +将来的には、より高性能なコントローラー(適応制御またはロバスト制御)に置き換えられる場合があります。 -#### Time delay compensation +#### 時間遅延補正 -At high speeds, the delay of actuator systems such as gas pedals and brakes has a significant impact on driving accuracy. -Depending on the actuating principle of the vehicle, the mechanism that physically controls the gas pedal and brake typically has a delay of about a hundred millisecond. +高速では、アクセルペダルやブレーキなどのアクチュエータシステムの遅延が走行精度に大きな影響を与えます。 +車両の作動原理に応じて、アクセルペダルとブレーキを物理的に制御するメカニズムには通常、約 100 ミリ秒の遅延があります。 -In this controller, the predicted ego-velocity and the target velocity after the delay time are calculated and used for the feedback to address the time delay problem. +このコントローラーでは、予測自車速度と遅延時間後のターゲット速度が計算され、遅延時間の問題に対処するためのフィードバックに使用されます。 -### Slope compensation +### 勾配補正 -Based on the slope information, a compensation term is added to the target acceleration. +勾配情報に基づいて、補正項がターゲット加速度に追加されます。 -There are two sources of the slope information, which can be switched by a parameter. +勾配情報のソースは 2 つあり、パラメータで切り替えることができます。 -- Pitch of the estimated ego-pose (default) - - Calculates the current slope from the pitch angle of the estimated ego-pose - - Pros: Easily available - - Cons: Cannot extract accurate slope information due to the influence of vehicle vibration. -- Z coordinate on the trajectory - - Calculates the road slope from the difference of z-coordinates between the front and rear wheel positions in the target trajectory - - Pros: More accurate than pitch information, if the z-coordinates of the route are properly maintained - - Pros: Can be used in combination with delay compensation (not yet implemented) - - Cons: z-coordinates of high-precision map is needed. - - Cons: Does not support free space planning (for now) +- 推定自車位置のピッチ(デフォルト) + - 傾斜角から現在の勾配を計算します -## Assumptions / Known limits +## 軌道の Z 座標 + - ターゲット軌道の前輪と後輪位置の Z 座標の差から道路勾配を計算 + - 長所: 経路の Z 座標が適切に維持されていれば、ピッチ情報よりも正確 + - 長所: (まだ実装されていない) 遅延補正と組み合わせて使用できる + - 短所: 高精細マップの Z 座標が必要 + - 短所: (現時点では) フリースペースプランニングに対応していない -1. Smoothed target velocity and its acceleration shall be set in the trajectory - 1. The velocity command is not smoothed inside the controller (only noise may be removed). - 2. For step-like target signal, tracking is performed as fast as possible. -2. The vehicle velocity must be an appropriate value - 1. The ego-velocity must be a signed-value corresponding to the forward/backward direction - 2. The ego-velocity should be given with appropriate noise processing. - 3. If there is a large amount of noise in the ego-velocity, the tracking performance will be significantly reduced. -3. The output of this controller must be achieved by later modules (e.g. vehicle interface). - 1. If the vehicle interface does not have the target velocity or acceleration interface (e.g., the vehicle only has a gas pedal and brake interface), an appropriate conversion must be done after this controller. +## 前提 / 制限事項 -## Inputs / Outputs / API +1. スムーズ化された目標速度とその加速度は軌跡に設定される必要がある + 1. 速度コマンドはコントローラー内でスムージングされない (ノイズのみが除去される場合がある)。 + 2. ステップ状のターゲット信号の場合、トラッキングは可能な限り高速に実行されます。 +2. 車両速度は適切な値でなければならない + 1. 自車速度は、前進/後進方向に対応する符号付き値でなければならない + 2. 自車速度は適切なノイズ処理で与えられるべきである。 + 3. 自車速度に大きなノイズが含まれる場合、追従性能が大幅に低下する。 +3. このコントローラからの出力を後続モジュール (例: 車両インターフェース) で実現する必要がある。 + 1. 車両インターフェースに目標速度または目標加速度インターフェイスがない場合 (例: 車両にアクセルペダルとブレーキインターフェースのみがある場合)、このコントローラの後に適切な変換を行う必要がある。 -### Input +## 入出力 / API -Set the following from the [controller_node](../autoware_trajectory_follower_node/README.md) +### 入力 -- `autoware_planning_msgs/Trajectory` : reference trajectory to follow. -- `nav_msgs/Odometry`: current odometry +[controller_node](../autoware_trajectory_follower_node/README.md) から次を設定 -### Output +- `autoware_planning_msgs/Trajectory`: フォローするリファレンストラジェクトリ。 +- `nav_msgs/Odometry`: 現在のオドメトリ -Return LongitudinalOutput which contains the following to the controller node +### 出力 -- `autoware_control_msgs/Longitudinal`: command to control the longitudinal motion of the vehicle. It contains the target velocity and target acceleration. +次の情報を格納した LongitudinalOutput をコントローラノードに返却 + +- `autoware_control_msgs/Longitudinal`: 車両の縦運動を制御するコマンド。目標速度と目標加速度が含まれます。 - LongitudinalSyncData - - velocity convergence(currently not used) - -### PIDController class - -The `PIDController` class is straightforward to use. -First, gains and limits must be set (using `setGains()` and `setLimits()`) for the proportional (P), integral (I), and derivative (D) components. -Then, the velocity can be calculated by providing the current error and time step duration to the `calculate()` function. - -## Parameter description - -The default parameters defined in `param/lateral_controller_defaults.param.yaml` are adjusted to the -AutonomouStuff Lexus RX 450h for under 40 km/h driving. - -| Name | Type | Description | Default value | -| :------------------------------------------ | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| delay_compensation_time | double | delay for longitudinal control [s] | 0.17 | -| enable_smooth_stop | bool | flag to enable transition to STOPPING | true | -| enable_overshoot_emergency | bool | flag to enable transition to EMERGENCY when the ego is over the stop line with a certain distance. See `emergency_state_overshoot_stop_dist`. | true | -| enable_large_tracking_error_emergency | bool | flag to enable transition to EMERGENCY when the closest trajectory point search is failed due to a large deviation between trajectory and ego pose. | true | -| enable_slope_compensation | bool | flag to modify output acceleration for slope compensation. The source of the slope angle can be selected from ego-pose or trajectory angle. See `use_trajectory_for_pitch_calculation`. | true | -| enable_brake_keeping_before_stop | bool | flag to keep a certain acceleration during DRIVE state before the ego stops. See [Brake keeping](#brake-keeping). | false | -| enable_keep_stopped_until_steer_convergence | bool | flag to keep stopped condition until until the steer converges. | true | -| max_acc | double | max value of output acceleration [m/s^2] | 3.0 | -| min_acc | double | min value of output acceleration [m/s^2] | -5.0 | -| max_jerk | double | max value of jerk of output acceleration [m/s^3] | 2.0 | -| min_jerk | double | min value of jerk of output acceleration [m/s^3] | -5.0 | -| use_trajectory_for_pitch_calculation | bool | If true, the slope is estimated from trajectory z-level. Otherwise the pitch angle of the ego pose is used. | false | -| lpf_pitch_gain | double | gain of low-pass filter for pitch estimation | 0.95 | -| max_pitch_rad | double | max value of estimated pitch [rad] | 0.1 | -| min_pitch_rad | double | min value of estimated pitch [rad] | -0.1 | - -### State transition - -| Name | Type | Description | Default value | -| :---------------------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| drive_state_stop_dist | double | The state will transit to DRIVE when the distance to the stop point is longer than `drive_state_stop_dist` + `drive_state_offset_stop_dist` [m] | 0.5 | -| drive_state_offset_stop_dist | double | The state will transit to DRIVE when the distance to the stop point is longer than `drive_state_stop_dist` + `drive_state_offset_stop_dist` [m] | 1.0 | -| stopping_state_stop_dist | double | The state will transit to STOPPING when the distance to the stop point is shorter than `stopping_state_stop_dist` [m] | 0.5 | -| stopped_state_entry_vel | double | threshold of the ego velocity in transition to the STOPPED state [m/s] | 0.01 | -| stopped_state_entry_acc | double | threshold of the ego acceleration in transition to the STOPPED state [m/s^2] | 0.1 | -| emergency_state_overshoot_stop_dist | double | If `enable_overshoot_emergency` is true and the ego is `emergency_state_overshoot_stop_dist`-meter ahead of the stop point, the state will transit to EMERGENCY. [m] | 1.5 | -| emergency_state_traj_trans_dev | double | If the ego's position is `emergency_state_traj_tran_dev` meter away from the nearest trajectory point, the state will transit to EMERGENCY. [m] | 3.0 | -| emergency_state_traj_rot_dev | double | If the ego's orientation is `emergency_state_traj_rot_dev` rad away from the nearest trajectory point orientation, the state will transit to EMERGENCY. [rad] | 0.784 | - -### DRIVE Parameter - -| Name | Type | Description | Default value | -| :------------------------------------ | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| kp | double | p gain for longitudinal control | 1.0 | -| ki | double | i gain for longitudinal control | 0.1 | -| kd | double | d gain for longitudinal control | 0.0 | -| max_out | double | max value of PID's output acceleration during DRIVE state [m/s^2] | 1.0 | -| min_out | double | min value of PID's output acceleration during DRIVE state [m/s^2] | -1.0 | -| max_p_effort | double | max value of acceleration with p gain | 1.0 | -| min_p_effort | double | min value of acceleration with p gain | -1.0 | -| max_i_effort | double | max value of acceleration with i gain | 0.3 | -| min_i_effort | double | min value of acceleration with i gain | -0.3 | -| max_d_effort | double | max value of acceleration with d gain | 0.0 | -| min_d_effort | double | min value of acceleration with d gain | 0.0 | -| lpf_vel_error_gain | double | gain of low-pass filter for velocity error | 0.9 | -| enable_integration_at_low_speed | bool | Whether to enable integration of acceleration errors when the vehicle speed is lower than `current_vel_threshold_pid_integration` or not. | false | -| current_vel_threshold_pid_integration | double | Velocity error is integrated for I-term only when the absolute value of current velocity is larger than this parameter. [m/s] | 0.5 | -| time_threshold_before_pid_integration | double | How much time without the vehicle moving must past to enable PID error integration. [s] | 5.0 | -| brake_keeping_acc | double | If `enable_brake_keeping_before_stop` is true, a certain acceleration is kept during DRIVE state before the ego stops [m/s^2] See [Brake keeping](#brake-keeping). | 0.2 | - -### STOPPING Parameter (smooth stop) - -Smooth stop is enabled if `enable_smooth_stop` is true. -In smooth stop, strong acceleration (`strong_acc`) will be output first to decrease the ego velocity. -Then weak acceleration (`weak_acc`) will be output to stop smoothly by decreasing the ego jerk. -If the ego does not stop in a certain time or some-meter over the stop point, weak acceleration to stop right (`weak_stop_acc`) now will be output. -If the ego is still running, strong acceleration (`strong_stop_acc`) to stop right now will be output. - -| Name | Type | Description | Default value | -| :--------------------------- | :----- | :------------------------------------------------------------------------------------------------------------------- | :------------ | -| smooth_stop_max_strong_acc | double | max strong acceleration [m/s^2] | -0.5 | -| smooth_stop_min_strong_acc | double | min strong acceleration [m/s^2] | -0.8 | -| smooth_stop_weak_acc | double | weak acceleration [m/s^2] | -0.3 | -| smooth_stop_weak_stop_acc | double | weak acceleration to stop right now [m/s^2] | -0.8 | -| smooth_stop_strong_stop_acc | double | strong acceleration to be output when the ego is `smooth_stop_strong_stop_dist`-meter over the stop point. [m/s^2] | -3.4 | -| smooth_stop_max_fast_vel | double | max fast vel to judge the ego is running fast [m/s]. If the ego is running fast, strong acceleration will be output. | 0.5 | -| smooth_stop_min_running_vel | double | min ego velocity to judge if the ego is running or not [m/s] | 0.01 | -| smooth_stop_min_running_acc | double | min ego acceleration to judge if the ego is running or not [m/s^2] | 0.01 | -| smooth_stop_weak_stop_time | double | max time to output weak acceleration [s]. After this, strong acceleration will be output. | 0.8 | -| smooth_stop_weak_stop_dist | double | Weak acceleration will be output when the ego is `smooth_stop_weak_stop_dist`-meter before the stop point. [m] | -0.3 | -| smooth_stop_strong_stop_dist | double | Strong acceleration will be output when the ego is `smooth_stop_strong_stop_dist`-meter over the stop point. [m] | -0.5 | - -### STOPPED Parameter - -The `STOPPED` state assumes that the vehicle is completely stopped with the brakes fully applied. -Therefore, `stopped_acc` should be set to a value that allows the vehicle to apply the strongest possible brake. -If `stopped_acc` is not sufficiently low, there is a possibility of sliding down on steep slopes. - -| Name | Type | Description | Default value | -| :----------- | :----- | :------------------------------------------- | :------------ | -| stopped_vel | double | target velocity in STOPPED state [m/s] | 0.0 | -| stopped_acc | double | target acceleration in STOPPED state [m/s^2] | -3.4 | -| stopped_jerk | double | target jerk in STOPPED state [m/s^3] | -5.0 | - -### EMERGENCY Parameter - -| Name | Type | Description | Default value | + - 速度収束 (現在は使用されていません) + +### PIDController クラス + +`PIDController` クラスは簡単に使用できます。 +最初に、比例 (P)、積分 (I)、および微分 (D) 成分のゲインと制限を `setGains()` と `setLimits()` を使用して設定する必要があります。 +次に、現在の誤差とタイムステップ時間を `calculate()` 関数に提供することで速度を計算できます。 + +## パラメータの説明 + +`param/lateral_controller_defaults.param.yaml` で定義されている既定のパラメータは、時速 40 km 未満の運転のために AutonomouStuff Lexus RX 450h に調整されています。 + +| 名称 | 型 | 説明 | デフォルト値 | +| :-------------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `delay_compensation_time` | double | 縦制御の遅延 [s] | 0.17 | +| `enable_smooth_stop` | bool | STOPPING への遷移を有効にするフラグ | true | +| `enable_overshoot_emergency` | bool | `emergency_state_overshoot_stop_dist` で指定された距離でエゴが停止線を超えた場合に EMERGENCY への遷移を有効にするフラグ | true | +| `enable_large_tracking_error_emergency` | bool | 軌道とエゴの姿勢の大きなずれにより、最も近い軌跡ポイントの検索が失敗した場合に EMERGENCY への遷移を有効にするフラグ | true | +| `enable_slope_compensation` | bool | 勾配補正のための出力加速度を変更するフラグ。勾配角のソースはエゴの姿勢または軌道の角度から選択できます。 `use_trajectory_for_pitch_calculation` を参照してください。 | true | +| `enable_brake_keeping_before_stop` | bool | エゴが停止する前の DRIVE 状態中に特定の加速度を維持するフラグ。 [ブレーキの維持](#brake-keeping) を参照 | false | +| `enable_keep_stopped_until_steer_convergence` | bool | ステアが収束するまで停止状態を維持するフラグ | true | +| `max_acc` | double | 出力加速度の最大値 [m/s^2] | 3.0 | +| `min_acc` | double | 出力加速度の最小値 [m/s^2] | -5.0 | +| `max_jerk` | double | 出力加速度のジャークの最大値 [m/s^3] | 2.0 | +| `min_jerk` | double | 出力加速度のジャークの最小値 [m/s^3] | -5.0 | +| `use_trajectory_for_pitch_calculation` | bool | true の場合、勾配は軌跡の z レベルから推定されます。それ以外の場合は、エゴの姿勢のピッチ角が使用されます。 | false | +| `lpf_pitch_gain` | double | ピッチ推定用のローパスフィルターのゲイン | 0.95 | +| `max_pitch_rad` | double | 推定ピッチの最大値 [rad] | 0.1 | +| `min_pitch_rad` | double | 推定ピッチの最小値 [rad] | -0.1 | + +### 状態遷移 + +| 名称 | タイプ | 説明 | デフォルト値 | +| :---------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| drive_state_stop_dist | double | 停止位置までの距離が`drive_state_stop_dist` + `drive_state_offset_stop_dist` [m]を超えると、DRIVE状態に移行します。 | 0.5 | +| drive_state_offset_stop_dist | double | 停止位置までの距離が`drive_state_stop_dist` + `drive_state_offset_stop_dist` [m]を超えると、DRIVE状態に移行します。 | 1.0 | +| stopping_state_stop_dist | double | 停止位置までの距離が`stopping_state_stop_dist` [m]未満になるとSTOPPING状態に移行します。 | 0.5 | +| stopped_state_entry_vel | double | STOPPED状態への遷移時の自車速度のしきい値 [m/s] | 0.01 | +| stopped_state_entry_acc | double | STOPPED状態への遷移時の自車加速度のしきい値 [m/s^2] | 0.1 | +| emergency_state_overshoot_stop_dist | double | `enable_overshoot_emergency`が真の場合、自車が停止位置から`emergency_state_overshoot_stop_dist`メートル先にあるとEMERGENCY状態に移行します。 [m] | 1.5 | +| emergency_state_traj_trans_dev | double | 自車位置が最寄りの軌跡ポイントから`emergency_state_traj_tran_dev`メートル離れているとEMERGENCY状態に移行します。 [m] | 3.0 | +| emergency_state_traj_rot_dev | double | 自車の方位が最寄りの軌跡ポイントの方位から`emergency_state_traj_rot_dev`ラジアン離れているとEMERGENCY状態に移行します。 [rad] | 0.784 | + +### DRIVE パラメータ + +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------------------------ | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| kp | double | Longitudinal制御のPゲイン | 1.0 | +| ki | double | Longitudinal制御のIゲイン | 0.1 | +| kd | double | Longitudinal制御のDゲイン | 0.0 | +| max_out | double | DRIVE状態におけるPID出力加速度の最大値[m/s²] | 1.0 | +| min_out | double | DRIVE状態におけるPID出力加速度の最小値[m/s²] | -1.0 | +| max_p_effort | double | Pゲインにおける加速度の最大値 | 1.0 | +| min_p_effort | double | Pゲインにおける加速度の最小値 | -1.0 | +| max_i_effort | double | Iゲインにおける加速度の最大値 | 0.3 | +| min_i_effort | double | Iゲインにおける加速度の最小値 | -0.3 | +| max_d_effort | double | Dゲインにおける加速度の最大値 | 0.0 | +| min_d_effort | double | Dゲインにおける加速度の最小値 | 0.0 | +| lpf_vel_error_gain | double | 速度誤差のローパスフィルタのゲイン | 0.9 | +| enable_integration_at_low_speed | bool | 車両速度が`current_vel_threshold_pid_integration`未満の場合に、加速度誤差の積分を有効にするか否か | false | +| current_vel_threshold_pid_integration | double | 現在の速度の絶対値がこのパラメータより大きい場合にのみ、I項に対して速度誤差を積分します。 [m/s] | 0.5 | +| time_threshold_before_pid_integration | double | PID誤差の積分を有効にするまでに車両の無移動が経過する必要がある時間。 [s] | 5.0 | +| brake_keeping_acc | double | `enable_brake_keeping_before_stop`が真の場合、自我が停止する前にDRIVE状態中に特定の加速度が維持されます [m/s²] [ブレーキキープ](#brake-keeping)を参照 | 0.2 | + +### STOPPING パラメーター(スムーズストップ) + +`enable_smooth_stop` が真の場合、スムーズストップが有効になります。 +スムーズストップでは、まず車両の速度を下げるために強い加速度(`strong_acc`)が生成されます。 +次に、弱い加速度(`weak_acc`)が生成されて車両のジャークを下げながらスムーズに停止します。 +車両がある一定時間停止しなかったり、停止位置を何メートルか超えた場合は、すぐに停止するための弱い加速度(`weak_stop_acc`)が生成されます。 +車両がまだ走っている場合は、すぐに停止するための強い加速度(`strong_stop_acc`)が生成されます。 + +| 名前 | タイプ | 説明 | デフォルト値 | +| :--------------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------- | :------------ | +| smooth_stop_max_strong_acc | double | 最大強加速 [m/s^2] | -0.5 | +| smooth_stop_min_strong_acc | double | 最小強加速 [m/s^2] | -0.8 | +| smooth_stop_weak_acc | double | 弱加速 [m/s^2] | -0.3 | +| smooth_stop_weak_stop_acc | double | 弱停止加速 [m/s^2] | -0.8 | +| smooth_stop_strong_stop_acc | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートル離れたときに出力される強加速 [m/s^2] | -3.4 | +| smooth_stop_max_fast_vel | double | 自車が高速走行中とみなす、最大の高速限界速度 [m/s]。高速走行中とみなされると、強加速が出力されます。 | 0.5 | +| smooth_stop_min_running_vel | double | 自車が走行中とみなす、最低走行速度 [m/s] | 0.01 | +| smooth_stop_min_running_acc | double | 自車が走行中とみなす、最低走行加速度 [m/s^2] | 0.01 | +| smooth_stop_weak_stop_time | double | 弱加速を出力する最大時間 [s]。時間を超えると強加速が出力されます。 | 0.8 | +| smooth_stop_weak_stop_dist | double | 自車が停止ポイントから `smooth_stop_weak_stop_dist` メートルの距離にあるとき、弱加速が出力されます [m] | -0.3 | +| smooth_stop_strong_stop_dist | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートルの距離にあるとき、強加速が出力されます [m] | -0.5 | + +### STOPPED パラメーター + +`STOPPED` 状態では、車両が完全に停止しており、ブレーキが完全に作動していることを想定しています。 +そのため、`stopped_acc` には、車両に最大のブレーキを適用することを可能にする値を設定する必要があります。 +`stopped_acc` が十分に低いと、急勾配で滑落する可能性があります。 + +| Name | Type | Description | Default value | +| :----------- | :----- | :----------------------------------------------------------------------------------- | :------------ | +| stopped_vel | double | STOPPED状態における目標速度 [m/s] | 0.0 | +| stopped_acc | double | STOPPED状態における目標加速度 [m/s^2] | -3.4 | +| stopped_jerk | double | STOPPED状態における目標ジャーク [m/s^3] | -5.0 | + +### EMERGENCYパラメータ + +| 名称 | タイプ | 説明 | デフォルト値 | | :------------- | :----- | :------------------------------------------------ | :------------ | -| emergency_vel | double | target velocity in EMERGENCY state [m/s] | 0.0 | -| emergency_acc | double | target acceleration in an EMERGENCY state [m/s^2] | -5.0 | -| emergency_jerk | double | target jerk in an EMERGENCY state [m/s^3] | -3.0 | +| emergency_vel | 倍精度浮動小数点 | EMERGENCY状態での目標速度 [m/s] | 0.0 | +| emergency_acc | 倍精度浮動小数点 | EMERGENCY状態での目標加速度 [m/s^2] | -5.0 | +| emergency_jerk | 倍精度浮動小数点 | EMERGENCY状態での目標ジャーク [m/s^3] | -3.0 | + +## 参考文献 / 外部リンク -## References / External links +## 今後の拡張 / 未実装の部分 -## Future extensions / Unimplemented parts +## 関連する課題 -## Related issues diff --git a/control/autoware_pure_pursuit/README.md b/control/autoware_pure_pursuit/README.md index 3741abbf2a766..3f5be1717fa6c 100644 --- a/control/autoware_pure_pursuit/README.md +++ b/control/autoware_pure_pursuit/README.md @@ -1,19 +1,20 @@ -# Pure Pursuit Controller +# ピュアパーシュート制御 -The Pure Pursuit Controller module calculates the steering angle for tracking a desired trajectory using the pure pursuit algorithm. This is used as a lateral controller plugin in the `autoware_trajectory_follower_node`. +ピュアパーシュート制御モジュールは、ピュアパーシュートアルゴリズムを使用して、 desired trajectory の追跡に使用するステアリングアングルを計算します。これは、`autoware_trajectory_follower_node` のラテラルコントローラープラグインとして使用されます。 -## Inputs +## 入力 -Set the following from the [controller_node](../autoware_trajectory_follower_node/README.md) +[controller_node](../autoware_trajectory_follower_node/README.md) から以下を設定します。 -- `autoware_planning_msgs/Trajectory` : reference trajectory to follow. -- `nav_msgs/Odometry`: current ego pose and velocity information +- `autoware_planning_msgs/Trajectory`: 追従する基準軌道 +- `nav_msgs/Odometry`: 自車位置と速度に関する情報 -## Outputs +## 出力 -Return LateralOutput which contains the following to the controller node +次の情報を含むラテラル出力をコントローラーノードに返します。 -- `autoware_control_msgs/Lateral`: target steering angle +- `autoware_control_msgs/Lateral`: 目標ステアリングアングル - LateralSyncData - - steer angle convergence -- `autoware_planning_msgs/Trajectory`: predicted path for ego vehicle + - ステアリングアングルの収束 +- `autoware_planning_msgs/Trajectory`: 自車に対する予測パス + diff --git a/control/autoware_shift_decider/README.md b/control/autoware_shift_decider/README.md index 84767abceff6b..c0aa422982d48 100644 --- a/control/autoware_shift_decider/README.md +++ b/control/autoware_shift_decider/README.md @@ -1,12 +1,13 @@ -# Shift Decider +# シフトデリサイダー -## Purpose +## 目的 -`autoware_shift_decider` is a module to decide shift from ackermann control command. +`autoware_shift_decider`は、アッカーマン制御コマンドからシフトを決めるモジュールです。 -## Inner-workings / Algorithms +## 内部構造とアルゴリズム + +### フローチャート -### Flow chart ```plantuml @startuml @@ -31,26 +32,75 @@ stop @enduml ``` -### Algorithms +### アルゴリズム -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | +| 名称 | タイプ | 説明 | | --------------------- | ------------------------------------- | ---------------------------- | -| `~/input/control_cmd` | `autoware_control_msgs::msg::Control` | Control command for vehicle. | +| `~/input/control_cmd` | `autoware_control_msgs::msg::Control` | 車両の制御コマンド。 | + +### 出力 + +**自動運転ソフトウェア** + +**更新履歴** + +* 2023年3月15日: ドキュメントの初回公開 + +**概要** + +このドキュメントは、Autoware の自動運転ソフトウェアのアーキテクチャ、機能、使用方法に関する包括的なガイドです。このソフトウェアは、センサーデータの収集、環境認識、経路計画、制御コマンドの生成など、自動運転システムのすべての重要なコンポーネントを提供します。 + +**アーキテクチャ** + +Autoware のアーキテクチャはモジュール化されており、次のコンポーネントで構成されています。 + +* **Perception (認識)**: カメラ、レーダー、LIDAR から受信したセンサーデータを処理し、自車位置と周囲環境のモデルを作成します。 +* **Planning (計画)**: 知覚された環境に基づいて、安全で効率的な経路を計画します。 +* **Control (制御)**: 計画された経路に従って車両を制御し、センサーデータとフィードバックを使用して適応します。 +* **Localization (自己位置推定)**: 車両の位置と姿勢をリアルタイムで追跡します。 + +**機能** + +Autoware は以下を含む幅広い機能を提供します。 + +* **障害物検出と回避**: 歩行者、車両、その他の障害物を検出し、衝突を回避します。 +* **経路追従**: 計画された経路に沿って車両を正確に制御します。 +* **交通信号認識**: 交通信号を検出し、それらに従って動作します。 +* **駐車支援**: 車両の自動駐車を支援します。 +* **ビジョンベースの自己位置推定**: カメラ画像を使用して車両の位置と姿勢を推定します。 + +**使用方法** + +Autoware を使用するには、次の手順に従います。 + +1. ハードウェア(センサー、コンピューター、アクチュエーター)をインストールします。 +2. Autoware ソフトウェアをインストールし、構成します。 +3. 車両をキャリブレーションし、環境をマッピングします。 +4. シミュレーションまたは現実世界でシステムをテストします。 + +**注意事項** + +* 自動運転システムは常に慎重に使用し、道路交通法を遵守する必要があります。 +* Autoware は開発中のソフトウェアであり、常に改善されています。 +* システムを十分にテストせずに使用しないでください。 + +**免責事項** + +Autoware はオープンソースソフトウェアであり、いかなる保証もなしに提供されています。ユーザーは自己責任でこのソフトウェアを使用するものとします。 -### Output +| Name | Type | Description | +| -------------------- | -------------------------------------------- | ------------------------------------- | +| `~output/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 前進 / 後退走行時のギア | -| Name | Type | Description | -| ------------------ | ----------------------------------------- | ---------------------------------- | -| `~output/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | Gear for drive forward / backward. | +## パラメータ -## Parameters +なし -none. +## 仮定 / 制限事項 -## Assumptions / Known limits +TBD -TBD. diff --git a/control/autoware_smart_mpc_trajectory_follower/README.md b/control/autoware_smart_mpc_trajectory_follower/README.md index 31270f701fce6..70eca571a8925 100644 --- a/control/autoware_smart_mpc_trajectory_follower/README.md +++ b/control/autoware_smart_mpc_trajectory_follower/README.md @@ -1,15 +1,16 @@ +# マークダウン形式で書かれた自動運転ソフトウェアに関するドキュメントの日本語訳 +

- -# Smart MPC Trajectory Follower +## スマート MPC トレジャクサリー追従 -Smart MPC (Model Predictive Control) is a control algorithm that combines model predictive control and machine learning. While inheriting the advantages of model predictive control, it solves its disadvantage of modeling difficulty with a data-driven method using machine learning. +スマート MPC (Model Predictive Control) は、モデル予測制御と機械学習を組み合わせた制御アルゴリズムです。モデル予測制御の利点を継承すると同時に、機械学習を利用したデータドリブン手法でモデリングの難しさを解決します。 -This technology makes it relatively easy to operate model predictive control, which is expensive to implement, as long as an environment for collecting data can be prepared. +この技術により、環境データの収集が可能な限り、実装コストの高いモデル予測制御を比較的容易に運用できます。

@@ -17,48 +18,52 @@ This technology makes it relatively easy to operate model predictive control, wh

-## Provided features +## 提供されている機能 -This package provides smart MPC logic for path-following control as well as mechanisms for learning and evaluation. These features are described below. +このパッケージは、パス追従制御向けのスマート MPC ロジックと、学習および評価の仕組みを提供します。これらの機能を以下に示します。 -### Trajectory following control based on iLQR/MPPI +### iLQR/MPPI ベースのトレジャクサリー追従制御 -The control mode can be selected from "ilqr", "mppi", or "mppi_ilqr", and can be set as `mpc_parameter:system:mode` in [mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml). -In "mppi_ilqr" mode, the initial value of iLQR is given by the MPPI solution. +制御モードは "ilqr"、"mppi"、"mppi_ilqr" から選択でき、[mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml) の `mpc_parameter:system:mode` として設定できます。 +"mppi_ilqr" モードでは、iLQR の初期値が MPPI ソリューションによって与えられます。 -> [!NOTE] -> With the default settings, the performance of "mppi" mode is limited due to an insufficient number of samples. This issue is being addressed with ongoing work to introduce GPU support. +> [!注意] +> デフォルト設定では、"mppi" モードのパフォーマンスがサンプル数の不足により制限されます。この問題は、GPU サポートを導入する継続的な作業によって解決されています。 + +シミュレーションを実行するには、次のコマンドを実行します。 -To perform a simulation, run the following command: ```bash ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit trajectory_follower_mode:=smart_mpc_trajectory_follower ``` -> [!NOTE] -> When running with the nominal model set in [nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml), set `trained_model_parameter:control_application:use_trained_model` to `false` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml). To run using the trained model, set `trained_model_parameter:control_application:use_trained_model` to `true`, but the trained model must have been generated according to the following procedure. +[!NOTE] +> 名目モデルの[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml)が設定されている場合は、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)の`trained_model_parameter:control_application:use_trained_model`を`false`に設定してください。学習済みモデルを使用して実行するには、`trained_model_parameter:control_application:use_trained_model`を`true`に設定しますが、学習済みモデルは次の手順に従って生成する必要があります。 + +### モデルの学習と制御への反映 -### Training of model and reflection in control +学習データを収集するには、autowareを起動して、走行を行い、次のコマンドでrosbagデータを記録します。 -To obtain training data, start autoware, perform a drive, and record rosbag data with the following commands. ```bash ros2 bag record /localization/kinematic_state /localization/acceleration /vehicle/status/steering_status /control/command/control_cmd /control/trajectory_follower/control_cmd /control/trajectory_follower/lane_departure_checker_node/debug/deviation/lateral /control/trajectory_follower/lane_departure_checker_node/debug/deviation/yaw /system/operation_mode/state /vehicle/status/control_mode /sensing/imu/imu_data /debug_mpc_x_des /debug_mpc_y_des /debug_mpc_v_des /debug_mpc_yaw_des /debug_mpc_acc_des /debug_mpc_steer_des /debug_mpc_X_des_converted /debug_mpc_x_current /debug_mpc_error_prediction /debug_mpc_max_trajectory_err /debug_mpc_emergency_stop_mode /debug_mpc_goal_stop_mode /debug_mpc_total_ctrl_time /debug_mpc_calc_u_opt_time ``` -Move [rosbag2.bash](./autoware_smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash) to the rosbag directory recorded above and execute the following command on the directory +rosbagのディレクトリに[rosbag2.bash](./autoware_smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash)を移動させて、ディレクトリで下記コマンドを実行します + ```bash bash rosbag2.bash ``` -This converts rosbag data into CSV format for training models. +rosbagデータをCSV形式に変換してモデルをトレーニングします。 > [!NOTE] -> Note that a large number of terminals are automatically opened at runtime, but they are automatically closed after rosbag data conversion is completed. -> From the time you begin this process until all terminals are closed, autoware should not be running. +> 実行時に大量の端末が自動的に開きますが、rosbagデータの変換が完了すると自動的に閉じられます。 +> このプロセスを開始してからすべての端末が閉じられるまで、Autowareは実行しないでください。 + +代わりに、Python環境で次のコマンドを実行することで同様の結果を得ることができます。 -Instead, the same result can be obtained by executing the following command in a python environment: ```python from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model @@ -66,14 +71,15 @@ model_trainer = train_drive_NN_model.train_drive_NN_model() model_trainer.transform_rosbag_to_csv(rosbag_dir) ``` -Here, `rosbag_dir` represents the rosbag directory. -At this time, all CSV files in `rosbag_dir` are automatically deleted first. +`rosbag_dir` は rosbag ディレクトリを表します。 +この時、`rosbag_dir` 内のすべての CSV ファイルは最初に自動的に削除されます。 + +モデルのトレーニングの方法について説明します。 +[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) の `trained_model_parameter:memory_for_training:use_memory_for_training` が `true` に設定されている場合、LSTM を含むモデルに対するトレーニングが行われ、`false` に設定されている場合、LSTM を含まないモデルに対するトレーニングが行われます。 +LSTM を使用すると、セル状態および隠れ状態は履歴時系列データに基づいて更新され、予測に反映されます。 -We move on to an explanation of how the model is trained. -If `trained_model_parameter:memory_for_training:use_memory_for_training` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) is set to `true`, training is performed on models that include LSTM, and if it is set to `false`, training is performed on models that do not include LSTM. -When using LSTM, cell states and hidden states are updated based on historical time series data and reflected in the prediction. +トレーニングと検証に使用される rosbag ディレクトリのパス (`dir_0`、`dir_1`、`dir_2`、`dir_val_0`、`dir_val_1`、`dir_val_2`...) と、モデルを保存するディレクトリ (`save_dir`) から、Python 環境で次のようにモデルを保存できます。 -The paths of the rosbag directories used for training and validation, `dir_0`, `dir_1`, `dir_2`,..., `dir_val_0`, `dir_val_1`, `dir_val_2`,... and the directory `save_dir` where you save the models, the model can be saved in the python environment as follows: ```python from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model @@ -90,168 +96,182 @@ model_trainer.get_trained_model() model_trainer.save_models(save_dir) ``` -If `add_mode` is not specified or validation data is not added, the training data is split to be used for training and validation. +`add_mode`が指定されなかった場合、または検証データが追加されなかった場合、トレーニングデータはトレーニングおよび検証に使用するために分割されます。 + +多項式回帰の実行後は、次のとおり、NNを残差でトレーニングできます。 -After performing the polynomial regression, the NN can be trained on the residuals as follows: ```python model_trainer.get_trained_model(use_polynomial_reg=True) ``` > [!NOTE] -> In the default setting, regression is performed by several preselected polynomials. -> When `use_selected_polynomial=False` is set as the argument of get_trained_model, the `deg` argument allows setting the maximum degree of the polynomial to be used. +> デフォルト設定では、回帰はいくつかの事前に選択された多項式によって実行されます。 +> `get_trained_model` の引数として `use_selected_polynomial=False` が設定されている場合、`deg` 引数によって使用される多項式の最大次数を設定できます。 + +NN モデルが使用されず、多項式回帰のみが実行される場合は、次のコマンドを実行します: -If only polynomial regression is performed and no NN model is used, run the following command: ```python model_trainer.get_trained_model(use_polynomial_reg=True,force_NN_model_to_zero=True) ``` -Move `model_for_test_drive.pth` and `polynomial_reg_info.npz` saved in `save_dir` to the home directory and set `trained_model_parameter:control_application:use_trained_model` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) to `true` to reflect the trained model in the control. +`model_for_test_drive.pth`と`polynomial_reg_info.npz`を`save_dir`からホームディレクトリに移動し、Trained Modelの反映のため、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)内の`trained_model_parameter:control_application:use_trained_model`を `true` に設定します。 + +### 性能評価 -### Performance evaluation +ここではサンプル車両のホイールベースが2.79 mであるところ、コントローラ側に2.0 mという誤った値を入力した場合の適応性能の検証を例として示します。 +コントローラに2.0 mのホイールベースを与えるため、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml)の`nominal_parameter:vehicle_info:wheel_base`の値を2.0に設定し、次のコマンドを実行します。 -Here, as an example, we describe the verification of the adaptive performance when the wheel base of the sample_vehicle is 2.79 m, but an incorrect value of 2.0 m is given to the controller side. -To give the controller 2.0 m as the wheel base, set the value of `nominal_parameter:vehicle_info:wheel_base` in [nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) to 2.0, and run the following command: ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache ``` -#### Test on autoware +#### Autoware でのテスト -To perform a control test on autoware with the nominal model before training, make sure that `trained_model_parameter:control_application:use_trained_model` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) is `false` and launch autoware in the manner described in "Trajectory following control based on iLQR/MPPI". This time, the following route will be used for the test: +トレーニング前に公称モデルで Autoware に対する制御テストを実行するには、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) 内の `trained_model_parameter:control_application:use_trained_model` が `false` であることを確認し、「iLQR/MPPI に基づく Trajectory 以下の制御」で説明した方法で Autoware を起動します。今回は、次のルートをテストに使用します。 -

+

-Record rosbag and train the model in the manner described in "Training of model and reflection in control", and move the generated files `model_for_test_drive.pth` and `polynomial_reg_info.npz` to the home directory. -Sample models, which work under the condition that`trained_model_parameter:memory_for_training:use_memory_for_training` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) is set to `true`, can be obtained at [sample_models/wheel_base_changed](./sample_models/wheel_base_changed/). +ROS バッグを記録し、ROS バッグを記録し、「モデルのトレーニングと制御への反映」で説明した方法でモデルをトレーニングし、生成されたファイル `model_for_test_drive.pth` と `polynomial_reg_info.npz` をホームディレクトリに移動します。サンプルモデルは [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) 内の `trained_model_parameter:memory_for_training:use_memory_for_training` が `true` に設定された条件下で動作します。[sample_models/wheel_base_changed](./sample_models/wheel_base_changed/) から取得できます。 > [!NOTE] -> Although the data used for training is small, for the sake of simplicity, we will see how much performance can be improved with this amount of data. +> トレーニングに使用されるデータは少量ですが、簡略化するために、このデータ量でどの程度のパフォーマンスが向上するかを確認します。 + +ここで取得したトレーニング済みモデルを使用して制御するには、`trained_model_parameter:control_application:use_trained_model` を `true` に設定し、同様に Autoware を起動し、同じルートで ROS バッグを記録しながら走行します。 +走行が完了したら、「モデルのトレーニングと制御への反映」で説明した方法を使用して ROS バッグファイルを CSV 形式に変換します。`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb` で `lateral_error_visualize` 関数を公称の ROS バッグファイル `rosbag_nominal` とトレーニング済み ROS バッグファイル `rosbag_trained` に対して実行すると、次のように横方向偏差のグラフを取得できます。 -To control using the trained model obtained here, set `trained_model_parameter:control_application:use_trained_model` to `true`, start autoware in the same way, and drive the same route recording rosbag. -After the driving is complete, convert the rosbag file to CSV format using the method described in "Training of model and reflection in control". -A plot of the lateral deviation is obtained by running the `lateral_error_visualize` function in `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb` for the nominal and training model rosbag files `rosbag_nominal` and `rosbag_trained`, respectively, as follows: ```python lateral_error_visualize(dir_name=rosbag_nominal,ylim=[-1.2,1.2]) lateral_error_visualize(dir_name=rosbag_trained,ylim=[-1.2,1.2]) ``` -The following results were obtained. +以下の結果が得られました。
-#### Test on python simulator +#### Pythonシミュレータでのテスト + +まず、Pythonシミュレータでホイールベースを2.79 mにするには、次のファイルを作成し、名前を`sim_setting.json`にして`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator`に保存します。 + +``` +{ + "wheelbase": 2.79 +} +``` -First, to give wheel base 2.79 m in the python simulator, create the following file and save it in `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator` with the name `sim_setting.json`: ```json { "wheel_base": 2.79 } ``` -Next, after moving to `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator`, run the following commands to test the slalom driving on the python simulator with the nominal control: +次に、`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator` に移動した後、以下のコマンドを実行してパイソンシミュレータ上でスラローム走行をノミナル制御を使用してテストします。 + ```bash python3 run_python_simulator.py nominal_test ``` -The result of the driving is stored in `test_python_nominal_sim`. +運転の結果は `test_python_nominal_sim` に格納されます。 -The following results were obtained. +以下の結果が得られました。

-The center of the upper row represents the lateral deviation. +最上段の中央は横方向逸脱量を表します。 + +純粋追従の制御下で、8の字走行データを使用してトレーニングを実行するには、以下のコマンドを実行します。 -Run the following commands to perform training using figure eight driving data under the control of pure pursuit. +得られたモデルに基づく8の字走行と運転を使用してトレーニングを実行するには、以下のコマンドを実行します。 -To perform training using a figure eight driving and driving based on the obtained model, run the following commands: ```bash python3 run_python_simulator.py ``` -The result of the driving is stored in `test_python_trined_sim`. +運転の結果は `test_python_trined_sim` に格納されています。 -When `trained_model_parameter:memory_for_training:use_memory_for_training` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) is set to `true`, the following results were obtained. +[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) の `trained_model_parameter:memory_for_training:use_memory_for_training` が `true` に設定された場合、以下の結果が得られました。

-When `trained_model_parameter:memory_for_training:use_memory_for_training` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) is set to `false`, the following results were obtained. +[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) の `trained_model_parameter:memory_for_training:use_memory_for_training` が `false` に設定された場合、以下の結果が得られました。

-It can be seen that the lateral deviation has improved significantly. -However, the difference in driving with and without LSTM is not very apparent. +横方向偏差が大幅に改善されていることがわかります。 +ただし、LSTM の有無による運転の違いはあまり明らかではありません。 + +違いを明確にするために、例として `steer_time_delay` などのパラメータを試行できます。 -To see the difference, for example, we can experiment with parameters such as steer_time_delay. +まず、公称モデル設定の値をデフォルト値に戻すために、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) の `nominal_parameter:vehicle_info:wheel_base` の値を 2.79 に設定して、次のコマンドを実行します。 -First, to restore nominal model settings to default values, set the value of `nominal_parameter:vehicle_info:wheel_base` in [nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) to 2.79, and run the following command: ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache ``` -Next, modify `sim_setting.json` as follows: +次に、`sim_setting.json` を次のように修正します: + ```json { "steer_time_delay": 1.01 } ``` -In this way, an experiment is performed when `steer_time_delay` is set to 1.01 sec. + このように、`steer_time_delay` を 1.01 秒に設定して実験を実施します。 -The result of the driving using the nominal model is as follows: +公称モデルを使用した走行の結果は次のとおりです。

-The result of the driving using the trained model with LSTM is as follows: +LSTM を使用した学習済みモデルを使用した走行の結果は次のとおりです。

-The result of the driving using the trained model without LSTM is as follows: +LSTM を使用しない学習済みモデルを使用した走行の結果は次のとおりです。

-It can be seen that the performance with the model that includes LSTM is significantly better than with the model that does not. - -The parameters that can be passed to the python simulator are as follows. - -| Parameter | Type | Description | -| ------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| steer_bias | float | steer bias [rad] | -| steer_rate_lim | float | steer rate limit [rad/s] | -| vel_rate_lim | float | acceleration limit [m/s^2] | -| wheel_base | float | wheel base [m] | -| steer_dead_band | float | steer dead band [rad] | -| adaptive_gear_ratio_coef | list[float] | List of floats of length 6 specifying information on speed-dependent gear ratios from tire angle to steering wheel angle. | -| acc_time_delay | float | acceleration time delay [s] | -| steer_time_delay | float | steer time delay [s] | -| acc_time_constant | float | acceleration time constant [s] | -| steer_time_constant | float | steer time constant [s] | -| accel_map_scale | float | Parameter that magnifies the corresponding distortion from acceleration input values to actual acceleration realizations.
Correspondence information is kept in `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/accel_map.csv`. | -| acc_scaling | float | acceleration scaling | -| steer_scaling | float | steer scaling | -| vehicle_type | int | Take values from 0 to 4 for pre-designed vehicle types.
A description of each vehicle type is given below. | - -For example, to give the simulation side 0.01 [rad] of steer bias and 0.001 [rad] of steer dead band, edit the `sim_setting.json` as follows. +LSTM を含むモデルを使用したパフォーマンスは、含まないモデルを使用したパフォーマンスよりも大幅に良好であることがわかります。 + +Python シミュレータに渡すことができるパラメータは次のとおりです。 + +| パラメータ | 型 | 説明 | +| ------------------------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| steer_bias | 浮動 | ステアリングバイアス [rad] | +| steer_rate_lim | 浮動 | ステアリングレートの制限 [rad/s] | +| vel_rate_lim | 浮動 | 加速度制限 [m/s^2] | +| wheel_base | 浮動 | ホイールベース [m] |: +| steer_dead_band | 浮動 | ステアリングデッドバンド [rad] | +| adaptive_gear_ratio_coef | リスト[浮動] | タイヤ角からステアリングホイール角への速度依存ギア比に関する情報を指定する 6 個の長さを持つフローティングポイントのリスト | +| acc_time_delay | 浮動 | 加速度遅延時間 [s] | +| steer_time_delay | 浮動 | ステアリング遅延時間 [s] | +| acc_time_constant | 浮動 | 加速度時定数 [s] | +| steer_time_constant | 浮動 | ステアリング時定数 [s] | +| accel_map_scale | 浮動 | 加速度入力値から実際の加速度の実現への対応する歪みを拡大するパラメータ。
対応情報は `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/accel_map.csv` に格納されています。 | +| acc_scaling | 浮動 | 加速度スケーリング | +| steer_scaling | 浮動 | ステアリングスケーリング | +| vehicle_type | 整数 | 0 から 4 までの値を取ります。
各車両タイプについては以下で説明します。 | + +例えば、シミュレーション側に0.01 [rad]のステア係数バイアスと0.001 [rad]のステアデッドバンドを与える場合は、`sim_setting.json`を次のように編集します。 + ```json { "steer_bias": 0.01, "steer_dead_band": 0.001 } @@ -259,189 +279,205 @@ For example, to give the simulation side 0.01 [rad] of steer bias and 0.001 [rad ##### vehicle_type_0 -This vehicle type matches the default vehicle type used in the control. +この車両タイプは、コントローラーで使用される既定の車両タイプと一致します。 -| Parameter | value | -| ------------------- | ----- | -| wheel_base | 2.79 | -| acc_time_delay | 0.1 | -| steer_time_delay | 0.27 | -| acc_time_constant | 0.1 | -| steer_time_constant | 0.24 | -| acc_scaling | 1.0 | +## 自動運転ソフトウェアのパラメータ設定 + +| パラメータ | 値 | +|---|---| +| ホイールベース | 2.79 | +| 加速度応答遅れ時間 | 0.1 | +| ステアリング応答遅れ時間 | 0.27 | +| 加速度応答時間定数 | 0.1 | +| ステアリング応答時間定数 | 0.24 | +| 加速度スケーリング | 1.0 | ##### vehicle_type_1 -This vehicle type is intended for a heavy bus. +このvehicle typeは大型バスを想定しています。 -| Parameter | value | -| ------------------- | ----- | -| wheel_base | 4.76 | -| acc_time_delay | 1.0 | -| steer_time_delay | 1.0 | -| acc_time_constant | 1.0 | -| steer_time_constant | 1.0 | -| acc_scaling | 0.2 | +## 自動運転ソフトウェアに関するドキュメントの翻訳 + +### パラメータ + +| パラメータ | 値 | +|---|---| +| ホイールベース | 4.76 | +| 加速度タイム遅延 | 1.0 | +| ステアリングタイム遅延 | 1.0 | +| 加速度タイム定数 | 1.0 | +| ステアリングタイム定数 | 1.0 | +| 加速度スケーリング | 0.2 | ##### vehicle_type_2 -This vehicle type is intended for a light bus. +この車両タイプは、小型バスを想定しています。 -| Parameter | value | +| パラメータ | 値 | | ------------------- | ----- | -| wheel_base | 4.76 | -| acc_time_delay | 0.5 | -| steer_time_delay | 0.5 | -| acc_time_constant | 0.5 | -| steer_time_constant | 0.5 | -| acc_scaling | 0.5 | +| ホイールベース | 4.76 | +| 加速度遅延時間 | 0.5 | +| 操舵遅延時間 | 0.5 | +| 加速度タイムコンスタント | 0.5 | +| 操舵タイムコンスタント | 0.5 | +| 加速度スケーリング | 0.5 | ##### vehicle_type_3 -This vehicle type is intended for a small vehicle. +この車両種は小型車両を想定しています。 -| Parameter | value | -| ------------------- | ----- | -| wheel_base | 1.335 | -| acc_time_delay | 0.3 | -| steer_time_delay | 0.3 | -| acc_time_constant | 0.3 | -| steer_time_constant | 0.3 | -| acc_scaling | 1.5 | +## 自動運転ソフトウェア + +### パラメータ + +| パラメータ | 値 | +|---|---| +| ホイーベース | 1.335 | +| 加速度時間遅延 | 0.3 | +| 操舵時間遅延 | 0.3 | +| 加速度時間定数 | 0.3 | +| 操舵時間定数 | 0.3 | +| 加速度スケーリング | 1.5 | ##### vehicle_type_4 -This vehicle type is intended for a small robot. +この車両タイプは小型ロボット向けです。 -| Parameter | value | -| ------------------- | ----- | -| wheel_base | 0.395 | -| acc_time_delay | 0.2 | -| steer_time_delay | 0.2 | -| acc_time_constant | 0.2 | -| steer_time_constant | 0.2 | -| acc_scaling | 1.0 | +| パラメータ | 値 | +| ------------------- | ---- | +| ホイールベース | 0.395 | +| 加速遅延時間 | 0.2 | +| ステアリング遅延時間 | 0.2 | +| 加速時間定数 | 0.2 | +| ステアリング時間定数 | 0.2 | +| 加速度スケーリング | 1.0 | + +#### Pythonシミュレーターでの自動テスト -#### Auto test on python simulator +ここでは、シミュレーション側にモデルパラメータの事前定義された範囲を提供し、制御側に定数モデルパラメータを提供することで、適応性能をテストする方法について説明します。 -Here, we describe a method for testing adaptive performance by giving the simulation side a predefined range of model parameters while the control side is given constant model parameters. +[run_sim.py](./autoware_smart_mpc_trajectory_follower/python_simulator/run_sim.py)で設定されたパラメータ変更範囲内で走行実験を実行するには、`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator`に移動し、次のコマンドを実行します。 -To run a driving experiment within the parameter change range set in [run_sim.py](./autoware_smart_mpc_trajectory_follower/python_simulator/run_sim.py), for example, move to `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator` and run the following command: ```bash python3 run_sim.py --param_name steer_bias ``` -Here we described the experimental procedure for steer bias, and the same method can be used for other parameters. +実験手順はステアバイアスについて説明しましたが、他のパラメーターでも同様の方法を使用できます。 + +一度に制限値以外のすべてのパラメーターのテストを実行するには、次のコマンドを実行します: -To run the test for all parameters except limits at once, run the following command: ```bash python3 run_auto_test.py ``` -The results are stored in the `auto_test` directory. -After the executions were completed, the following results were obtained by running [plot_auto_test_result.ipynb](./autoware_smart_mpc_trajectory_follower/python_simulator/plot_auto_test_result.ipynb): +Auto_testの実行結果を`auto_test`ディレクトリに保存しています。 +実行が完了したら、[plot_auto_test_result.ipynb](./autoware_smart_mpc_trajectory_follower/python_simulator/plot_auto_test_result.ipynb)を実行して次の結果を取得してください。

-The orange line shows the intermediate model trained using pure pursuit figure eight drive, and the blue line shows the final model trained using data from both the intermediate model and the figure eight drive. -In most cases, sufficient performance is obtained, but for `vehicle_type_1`, which is intended for a heavy bus, a lateral deviation of about 2 m was observed, which is not satisfactory. +オレンジの線は純粋追従のフィギュラエイト走行を使用してトレーニングされた中間モデルを示しており、青い線は中間モデルとフィギュラエイト走行の両方からのデータを使用してトレーニングされた最終モデルを示しています。 +ほとんどの場合、十分な性能が得られますが、大型バスを想定した`vehicle_type_1`では、横方向逸脱量はおよそ2 mで、納得のいくものではありません。 -In `run_sim.py`, the following parameters can be set: +`run_sim.py`で次のパラメータを設定できます。 -| Parameter | Type | Description | -| ------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| USE_TRAINED_MODEL_DIFF | bool | Whether the derivative of the trained model is reflected in the control | -| DATA_COLLECTION_MODE | DataCollectionMode | Which method will be used to collect the training data 
"DataCollectionMode.ff": Straight line driving with feed-forward input
"DataCollectionMode.pp": Figure eight driving with pure pursuit control
"DataCollectionMode.mpc": Slalom driving with mpc | -| USE_POLYNOMIAL_REGRESSION | bool | Whether to perform polynomial regression before NN | -| USE_SELECTED_POLYNOMIAL | bool | When USE_POLYNOMIAL_REGRESSION is True, perform polynomial regression using only some preselected polynomials.
The choice of polynomials is intended to be able to absorb the contribution of some parameter shifts based on the nominal model of the vehicle. | -| FORCE_NN_MODEL_TO_ZERO | bool | Whether to force the NN model to zero (i.e., erase the contribution of the NN model).
When USE_POLYNOMIAL_REGRESSION is True, setting FORCE_MODEL_TO_ZERO to True allows the control to reflect the results of polynomial regression only, without using NN models. | -| FIT_INTERCEPT | bool | Whether to include bias in polynomial regression.
If it is False, perform the regression with a polynomial of the first degree or higher. | -| USE_INTERCEPT | bool | When a polynomial regression including bias is performed, whether to use or discard the resulting bias information.
It is meaningful only if FIT_INTERCEPT is True.
If it is False, discard the bias in the polynomial regression in the hope that the NN model can remove the bias term, even if the polynomial regression is performed with the bias included. | +| パラメータ | 型 | 説明 | +| ------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| USE_TRAINED_MODEL_DIFF | bool | トレーニングされたモデルの導関数が制御に反映されるか? | +| DATA_COLLECTION_MODE | DataCollectionMode | どの方式でトレーニングデータを収集するか
"DataCollectionMode.ff": フィードフォワード入力で直線走行
"DataCollectionMode.pp": ピュアパーシュート制御で8の字走行
"DataCollectionMode.mpc": mpcでスラローム走行 | +| USE_POLYNOMIAL_REGRESSION | bool | NNの前に多項式回帰を実行するか? | +| USE_SELECTED_POLYNOMIAL | bool | USE_POLYNOMIAL_REGRESSIONがTrueの場合、あらかじめ選択された多項式のみを使用して多項式回帰を実行する。
多項式の選択は、車両の公称モデルに基づくいくつかパラメータのシフトを吸収できるように意図されている。 -> [!NOTE] -> When `run_sim.py` is run, the `use_trained_model_diff` set in `run_sim.py` takes precedence over the `trained_model_parameter:control_application:use_trained_model_diff` set in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml). +> [!注意] +> `run_sim.py` を実行すると、`run_sim.py` で設定された `use_trained_model_diff` が [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) で設定された `trained_model_parameter:control_application:use_trained_model_diff` より優先されます。 + +#### Pure Pursuit の走行データのカーネル密度推定 -#### Kernel density estimation of pure pursuit driving data +Pure Pursuit 走行から取得したデータの分布は、カーネル密度推定を使用して表示できます。これを行うには、[density_estimation.ipynb](./autoware_smart_mpc_trajectory_follower/python_simulator/density_estimation.ipynb) を実行します。 -The distribution of data obtained from pure pursuit runs can be displayed using Kernel density estimation. To do this, run [density_estimation.ipynb](./autoware_smart_mpc_trajectory_follower/python_simulator/density_estimation.ipynb). +密度推定の最小値と走行結果の横方向逸脱の相関関係は低くなっています。横方向逸脱値をより適切に予測するスカラー指標を開発中です。 -The correlation between the minimum value of the density estimate and the lateral deviation of the run results is low. A scalar indicator that better predicts the value of lateral deviation is under development. +## 公称パラメータの変更とその再ロード -## Change of nominal parameters and their reloading +車両モデルの公称パラメータは、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) ファイルを編集することで変更できます。 +公称パラメータを変更した後、次のコマンドを実行してキャッシュを削除する必要があります。 +```bash +rm ~/.cache/autoware/autoware_smart_mpc_trajectory_follower/params/ +``` -The nominal parameters of vehicle model can be changed by editing the file [nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml). -After changing the nominal parameters, the cache must be deleted by running the following command: ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache ``` -The nominal parameters include the following: +**通常パラメータは次のとおりです。** + +| パラメータ | 型 | 説明 | +| ------------------------------------------------ | ----- | -------------------------------------- | +| nominal_parameter:vehicle_info:wheel_base | float | ホイールベース [m] | +| nominal_parameter:acceleration:acc_time_delay | float | 加速度タイム遅延 [s] | +| nominal_parameter:acceleration:acc_time_constant | float | 加速度タイム定数 [s] | +| nominal_parameter:steering:steer_time_delay | float | ステアリングタイム遅延 [s] | +| nominal_parameter:steering:steer_time_constant | float | ステアリングタイム定数 [s] | -| Parameter | Type | Description | -| ------------------------------------------------ | ----- | ------------------------------ | -| nominal_parameter:vehicle_info:wheel_base | float | wheel base [m] | -| nominal_parameter:acceleration:acc_time_delay | float | acceleration time delay [s] | -| nominal_parameter:acceleration:acc_time_constant | float | acceleration time constant [s] | -| nominal_parameter:steering:steer_time_delay | float | steer time delay [s] | -| nominal_parameter:steering:steer_time_constant | float | steer time constant [s] | +## コントロールパラメータの変更と再読み込み -## Change of control parameters and their reloading +制御パラメータは、ファイル[mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml)と[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)を変更することで変更できます。 +パラメータの変更はAutowareを再起動することで反映できますが、次のコマンドを使用することでAutowareを実行中のまま反映できます。 -The control parameters can be changed by editing files [mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml) and [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml). -Although it is possible to reflect parameter changes by restarting autoware, the following command allows us to do so without leaving autoware running: ```bash ros2 topic pub /pympc_reload_mpc_param_trigger std_msgs/msg/String "data: ''" --once ``` -The main parameters among the control parameters are as follows. +主な制御パラメータは次のとおりです。 ### `mpc_param.yaml` -| Parameter | Type | Description | -| ------------------------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| mpc_parameter:system:mode | str | control mode
"ilqr": iLQR mode
"mppi": MPPI mode
"mppi_ilqr": the initial value of iLQR is given by the MPPI solution. | -| mpc_parameter:cost_parameters:Q | list[float] | Stage cost for states.
List of length 8, in order: straight deviation, lateral deviation, velocity deviation, yaw angle deviation, acceleration deviation, steer deviation, acceleration input deviation, steer input deviation cost weights. | -| mpc_parameter:cost_parameters:Q_c | list[float] | Cost in the horizon corresponding to the following timing_Q_c for the states.
The correspondence of the components of the list is the same as for Q. | -| mpc_parameter:cost_parameters:Q_f | list[float] | Termination cost for the states.
The correspondence of the components of the list is the same as for Q. | -| mpc_parameter:cost_parameters:R | list[float] | A list of length 2 where R[0] is weight of cost for the change rate of acceleration input value and R[1] is weight of cost for the change rate of steer input value. | -| mpc_parameter:mpc_setting:timing_Q_c | list[int] | Horizon numbers such that the stage cost for the states is set to Q_c. | -| mpc_parameter:compensation:acc_fb_decay | float | Coefficient of damping in integrating the error between the observed and predicted acceleration values in the compensator outside the MPC. | -| mpc_parameter:compensation:acc_fb_gain | float | Gain of acceleration compensation. | -| mpc_parameter:compensation:max_error_acc | float | Maximum acceleration compensation (m/s^2) | -| mpc_parameter:compensation:steer_fb_decay | float | Coefficient of damping in integrating the error between the observed and predicted steering values in the compensator outside the MPC. | -| mpc_parameter:compensation:steer_fb_gain | float | Gain of steering compensation. | -| mpc_parameter:compensation:max_error_steer | float | Maximum steering compensation (rad) | +| パラメータ | 型 | 説明 | +| ----------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| mpc_parameter:system:mode | str | 制御モード
"ilqr": iLQRモード
"mppi": MPPIモード
"mppi_ilqr": iLQRの初期値はMPPIソリューションによって与えられる | +| mpc_parameter:cost_parameters:Q | list[float] | 状態のステージコスト
長さ8のリスト、順に: 直線偏差、横方向偏差、速度偏差、偏航角偏差、加速度偏差、ステア偏差、加速度入力偏差、ステア入力偏差のコスト重み | +| mpc_parameter:cost_parameters:Q_c | list[float] | 状態の次のtiming_Q_cに相当するhorizon内のコスト
リストの構成要素の対応はQの場合と同じ | +| mpc_parameter:cost_parameters:Q_f | list[float] | 状態の終端コスト
リストの構成要素の対応はQの場合と同じ | +| mpc_parameter:cost_parameters:R | list[float] | 長さ2のリスト、R[0]は加速度入力値の変化率のコストの重み、R[1]はステア入力値の変化率のコストの重み | +| mpc_parameter:mpc_setting:timing_Q_c | list[int] | 状態のステージコストがQ_cに設定されるhorizon番号 | +| mpc_parameter:compensation:acc_fb_decay | float | MPC外部のコンペンセータの観測された加速度値と予測加速度値の間の誤差を積分する際の減哀係数 | +| mpc_parameter:compensation:acc_fb_gain | float | 加速度補償のゲイン | +| mpc_parameter:compensation:max_error_acc | float | 最大加速度補償 (m/s^2) | +| mpc_parameter:compensation:steer_fb_decay | float | MPC外部のコンペンセータにおける観測ステアリング値と予測ステアリング値の間の誤差を積分する際の減衰係数 | +| mpc_parameter:compensation:steer_fb_gain | float | ステアリング補償のゲイン | +| mpc_parameter:compensation:max_error_steer | float | 最大ステアリング補償 (rad) | ### `trained_model_param.yaml` -| Parameter | Type | Description | -| ------------------------------------------------------------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| trained_model_parameter:control_application:use_trained_model | bool | Whether the trained model is reflected in the control or not. | -| trained_model_parameter:control_application:use_trained_model_diff | bool | Whether the derivative of the trained model is reflected on the control or not.
It is meaningful only when use_trained_model is True, and if False, the nominal model is used for the derivative of the dynamics, and trained model is used only for prediction. | -| trained_model_parameter:memory_for_training:use_memory_for_training | bool | Whether to use the model that includes LSTM for learning or not. | -| trained_model_parameter:memory_for_training:use_memory_diff | bool | Whether the derivative with respect to the cell state and hidden state at the previous time of LSTM is reflected in the control or not. | +| パラメータ | 型 | 説明 | +| ------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| trained_model_parameter:control_application:use_trained_model | bool | 学習済みモデルが制御に反映されるかどうかを示します。 | +| trained_model_parameter:control_application:use_trained_model_diff | bool | 学習済みモデルの微分値が制御に反映されるかどうかを示します。
use_trained_modelがTrueの場合にのみ意味があり、Falseの場合は、運動の方程式の微分には公称モデルが使用され、学習済みモデルは予測にのみ使用されます。 | +| trained_model_parameter:memory_for_training:use_memory_for_training | bool | 学習のためにLSTMを含むモデルを使用するかどうかを示します。 | +| trained_model_parameter:memory_for_training:use_memory_diff | bool | LSTMの前時点でのセル状態および隠れ状態に対する微分が制御に反映されるかどうかを示します。 | -## Request to release the slow stop mode +## 減速停止モードの解除要求 + +予測軌跡がターゲット軌跡から大きく逸脱した場合、システムは減速停止モードに入り、車両は停止します。 +減速停止モードをキャンセルして車両を走行可能にするには、次のコマンドを実行します。 -If the predicted trajectory deviates too far from the target trajectory, the system enters a slow stop mode and the vehicle stops moving. -To cancel the slow stop mode and make the vehicle ready to run again, run the following command: ```bash ros2 topic pub /pympc_stop_mode_reset_request std_msgs/msg/String "data: ''" --once ``` -## Limitation +## 制限事項 + +- 初期位置/姿勢が目標から大きく離れている場合は開始できない可能性があります。 -- May not be able to start when initial position/posture is far from the target. +- 最初の制御の開始時に numba 関数をコンパイルするまで、Plannin の終了まで少し時間がかかる場合があります。 -- It may take some time until the end of the planning to compile numba functions at the start of the first control. +- ゴール付近の停止動作では、制御が別の簡単な制御則に切り替わります。結果として、停止動作はゴール付近を除いて機能しない場合があります。加速度マップが大幅にシフトしている場合も停止は困難です。 -- In the stopping action near the goal our control switches to another simple control law. As a result, the stopping action may not work except near the goal. Stopping is also difficult if the acceleration map is significantly shifted. +- `vehicle_type_1` のように大型バス向けに想定されているように、ダイナミクスが公称モデルから大きく逸脱している場合、うまく制御できない可能性があります。 -- If the dynamics deviates too much from the nominal model, as in `vehicle_type_1`, which is intended for heavy buses, it may not be well controlled. diff --git a/control/autoware_trajectory_follower_base/README.md b/control/autoware_trajectory_follower_base/README.md index 3c79784f4b95b..6508e2bc02868 100644 --- a/control/autoware_trajectory_follower_base/README.md +++ b/control/autoware_trajectory_follower_base/README.md @@ -1,53 +1,54 @@ -# Trajectory Follower +## Trajectory Follower -This is the design document for the `trajectory_follower` package. +これは `trajectory_follower` パッケージのデザインドキュメントです。 -## Purpose / Use cases +## 目的/ユースケース - + -This package provides the interface of longitudinal and lateral controllers used by the node of the `autoware_trajectory_follower_node` package. -We can implement a detailed controller by deriving the longitudinal and lateral base interfaces. +このパッケージは、`autoware_trajectory_follower_node` パッケージのノードが使用する縦方向および横方向コントローラのインターフェイスを提供します。 +縦方向および横方向の基本インターフェイスを導出することで、詳細なコントローラを実装できます。 -## Design +## 設計 -There are lateral and longitudinal base interface classes and each algorithm inherits from this class to implement. -The interface class has the following base functions. +横方向と縦方向の基本インターフェイスクラスがあり、各アルゴリズムはこれを継承して実装されています。 +インターフェイスクラスには、次の基本機能があります。 -- `isReady()`: Check if the control is ready to compute. -- `run()`: Compute control commands and return to [Trajectory Follower Nodes](../autoware_trajectory_follower_node/README.md). This must be implemented by inherited algorithms. -- `sync()`: Input the result of running the other controller. - - steer angle convergence - - allow keeping stopped until steer is converged. - - velocity convergence(currently not used) +- `isReady()`: 制御が計算の準備ができているかどうかを確認します。 +- `run()`: 制御コマンドを計算し、[Trajectory Followerノード](../autoware_trajectory_follower_node/README.md) に返します。これは継承されたアルゴリズムによって実装する必要があります。 +- `sync()`: 他のコントローラの実行結果を入力します。 + - 操舵角の収束 + - 操舵角が収束するまで停止を維持できます。 + - 速度の収束(現在使用されていません) -See [the Design of Trajectory Follower Nodes](../autoware_trajectory_follower_node/README.md#Design) for how these functions work in the node. +これらの関数がノード内でどのように機能するかについては、[Trajectory Followerノードの設計](../autoware_trajectory_follower_node/README.md#Design)を参照してください。 -## Separated lateral (steering) and longitudinal (velocity) controls +## 横方向(ステアリング)と縦方向(速度)制御の分離 -This longitudinal controller assumes that the roles of lateral and longitudinal control are separated as follows. +この縦方向コントローラは、横方向と縦方向の制御の役割が次のように分離されていることを前提としています。 -- Lateral control computes a target steering to keep the vehicle on the trajectory, assuming perfect velocity tracking. -- Longitudinal control computes a target velocity/acceleration to keep the vehicle velocity on the trajectory speed, assuming perfect trajectory tracking. +- 横方向制御は、完全な速度追従を仮定して、車両を軌道上に維持するための目標ステアリングを計算します。 +- 縦方向制御は、完全な軌跡追従を仮定して、軌跡速度に車両速度を維持するための目標速度/加速度を計算します。 -Ideally, dealing with the lateral and longitudinal control as a single mixed problem can achieve high performance. In contrast, there are two reasons to provide velocity controller as a stand-alone function, described below. +理想的には、横方向と縦方向の制御を単一の混合問題として扱うことで、高性能を実現できます。対照的に、2つの理由から速度コントローラをスタンドアロン関数として提供する必要があります。以下に説明します。 -### Complex requirements for longitudinal motion +### 縦方向の運動に対する複雑な要件 -The longitudinal vehicle behavior that humans expect is difficult to express in a single logic. For example, the expected behavior just before stopping differs depending on whether the ego-position is ahead/behind of the stop line, or whether the current speed is higher/lower than the target speed to achieve a human-like movement. +人間が期待する縦方向の車両挙動は、単一の論理で表現するのが困難です。たとえば、停止直前の予想される挙動は、現在位置が停止線の前後にあるか、現在の速度が人間の動きを実現するための目標速度より速いか遅いかによって異なります。 -In addition, some vehicles have difficulty measuring the ego-speed at extremely low speeds. In such cases, a configuration that can improve the functionality of the longitudinal control without affecting the lateral control is important. +さらに、一部の車両は極低速では自車の速度を測定するのが困難です。そのような場合、横方向の制御に影響を与えることなく縦方向制御の機能を向上させることができる設定が重要です。 -There are many characteristics and needs that are unique to longitudinal control. Designing them separately from the lateral control keeps the modules less coupled and improves maintainability. +縦方向制御には独自の特性やニーズが多くあります。それらを横方向制御から別々に設計することで、モジュールの結合度を低くし、メンテナンス性を向上させることができます。 -### Nonlinear coupling of lateral and longitudinal motion +### 横方向運動と縦方向運動の非線形結合 -The lat-lon mixed control problem is very complex and uses nonlinear optimization to achieve high performance. Since it is difficult to guarantee the convergence of the nonlinear optimization, a simple control logic is also necessary for development. +横縦混合制御問題は非常に複雑であり、高性能を実現するために非線形最適化を使用します。非線形最適化の収束を保証することは困難であるため、開発には単純な制御論理も必要です。 -Also, the benefits of simultaneous longitudinal and lateral control are small if the vehicle doesn't move at high speed. +また、車両が高速で移動しない場合、縦横同時制御の利点は小さくなります。 -## Related issues +## 関連する問題 + diff --git a/control/autoware_trajectory_follower_node/README.md b/control/autoware_trajectory_follower_node/README.md index aa692c323f6d0..15a547193a229 100644 --- a/control/autoware_trajectory_follower_node/README.md +++ b/control/autoware_trajectory_follower_node/README.md @@ -1,14 +1,15 @@ -# Trajectory Follower Nodes +# 軌道追随ノード -## Purpose +## 目的 -Generate control commands to follow a given Trajectory. +与えられた軌道に従う制御コマンドを生成します。 -## Design +## 設計 -This is a node of the functionalities implemented in the controller class derived from [autoware_trajectory_follower_base](../autoware_trajectory_follower_base/README.md#trajectory-follower) package. It has instances of those functionalities, gives them input data to perform calculations, and publishes control commands. +これは、[autoware_trajectory_follower_base](../autoware_trajectory_follower_base/README.md#trajectory-follower) パッケージから派生したコントローラクラスで実装された機能のノードです。これにはこれらの機能のインスタンスがあり、それらに計算を実行するための入力データを渡し、制御コマンドをパブリッシュします。 + +デフォルトでは、次の `Controller` クラスのコントローラインスタンスが使用されます。 -By default, the controller instance with the `Controller` class as follows is used. ```plantuml @startuml @@ -90,7 +91,8 @@ InputData ..> Controller @enduml ``` -The process flow of `Controller` class is as follows. +`Controller` クラスのプロセスフローは次のとおりです。 + ```cpp // 1. create input data @@ -118,39 +120,42 @@ lateral_controller_->sync(lon_out.sync_data); control_cmd_pub_->publish(out); ``` -Giving the longitudinal controller information about steer convergence allows it to control steer when stopped if following parameters are `true` +自動運転ソフトウェアに関するドキュメント -- lateral controller +ステアリングの収束に関する情報を縦方向制御器に提供すると、次のパラメータが `true` の場合に停止中でもステアリングを制御できます。 + +- 横方向制御器 - `keep_steer_control_until_converged` -- longitudinal controller +- 縦方向制御器 - `enable_keep_stopped_until_steer_convergence` -### Inputs / Outputs / API +### 入出力 / API + +#### 入力 -#### Inputs +- `autoware_planning_msgs/Trajectory` : 追跡する基準経路 +- `nav_msgs/Odometry`: 現在のオドメトリ +- `autoware_vehicle_msgs/SteeringReport` 現在のステアリング -- `autoware_planning_msgs/Trajectory` : reference trajectory to follow. -- `nav_msgs/Odometry`: current odometry -- `autoware_vehicle_msgs/SteeringReport` current steering +#### 出力 -#### Outputs +- `autoware_control_msgs/Control`: 横方向および縦方向のコマンドを含むメッセージ -- `autoware_control_msgs/Control`: message containing both lateral and longitudinal commands. +#### パラメータ -#### Parameter +- `ctrl_period`: 制御コマンドの発行周期 +- `timeout_thr_sec`: 入力メッセージが破棄されるまでの期間(秒) + - 各コントローラから横方向および縦方向のコマンドを受け取ると、次の2つの条件が満たされた場合に `Control` を発行します。 + 1. コマンドの両方が受信された。 + 2. 最新に受信したコマンドが `timeout_thr_sec` で定義された時間よりも古くない。 +- `lateral_controller_mode`: `mpc` または `pure_pursuit` + - (現在は縦方向制御器には `PID` のみを使用) -- `ctrl_period`: control commands publishing period -- `timeout_thr_sec`: duration in second after which input messages are discarded. - - Each time the node receives lateral and longitudinal commands from each controller, it publishes an `Control` if the following two conditions are met. - 1. Both commands have been received. - 2. The last received commands are not older than defined by `timeout_thr_sec`. -- `lateral_controller_mode`: `mpc` or `pure_pursuit` - - (currently there is only `PID` for longitudinal controller) +## デバッグ -## Debugging +横方向および縦方向の制御器によるデバッグ情報は、`tier4_debug_msgs/Float32MultiArrayStamped` メッセージを使用して発行されます。 -Debug information are published by the lateral and longitudinal controller using `tier4_debug_msgs/Float32MultiArrayStamped` messages. +[PlotJuggler](https://github.com/facontidavide/PlotJuggler) の設定ファイルが `config` フォルダに用意されており、読み込むとデバッグに役立つ情報を自動的に購読して視覚化できます。 -A configuration file for [PlotJuggler](https://github.com/facontidavide/PlotJuggler) is provided in the `config` folder which, when loaded, allow to automatically subscribe and visualize information useful for debugging. +さらに、予測された MPC 経路が `output/lateral/predicted_trajectory` トピックに発行され、Rviz で視覚化できます。 -In addition, the predicted MPC trajectory is published on topic `output/lateral/predicted_trajectory` and can be visualized in Rviz. diff --git a/control/autoware_vehicle_cmd_gate/README.md b/control/autoware_vehicle_cmd_gate/README.md index 336c1acbe9bae..8fbe47fefae1a 100644 --- a/control/autoware_vehicle_cmd_gate/README.md +++ b/control/autoware_vehicle_cmd_gate/README.md @@ -1,96 +1,174 @@ # vehicle_cmd_gate -## Purpose - -`vehicle_cmd_gate` is the package to get information from emergency handler, planning module, external controller, and send a msg to vehicle. - -## Inputs / Outputs - -### Input - -| Name | Type | Description | -| ------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------- | -| `~/input/steering` | `autoware_vehicle_msgs::msg::SteeringReport` | steering status | -| `~/input/auto/control_cmd` | `autoware_control_msgs::msg::Control` | command for lateral and longitudinal velocity from planning module | -| `~/input/auto/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | turn indicators command from planning module | -| `~/input/auto/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | hazard lights command from planning module | -| `~/input/auto/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | gear command from planning module | -| `~/input/external/control_cmd` | `autoware_control_msgs::msg::Control` | command for lateral and longitudinal velocity from external | -| `~/input/external/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | turn indicators command from external | -| `~/input/external/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | hazard lights command from external | -| `~/input/external/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | gear command from external | -| `~/input/external_emergency_stop_heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | heartbeat | -| `~/input/gate_mode` | `tier4_control_msgs::msg::GateMode` | gate mode (AUTO or EXTERNAL) | -| `~/input/emergency/control_cmd` | `autoware_control_msgs::msg::Control` | command for lateral and longitudinal velocity from emergency handler | -| `~/input/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | hazard lights command from emergency handler | -| `~/input/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | gear command from emergency handler | -| `~/input/engage` | `autoware_vehicle_msgs::msg::Engage` | engage signal | -| `~/input/operation_mode` | `autoware_adapi_v1_msgs::msg::OperationModeState` | operation mode of Autoware | - -### Output - -| Name | Type | Description | +## 目的 + +`vehicle_cmd_gate`は、緊急ハンドラ、プランニングモジュール、外部コントローラから情報を取得し、車両にメッセージを送信するためのパッケージです。 + +## 入出力 + +### 入力 + +| 名前 | タイプ | 説明 | +| --------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `~/input/steering` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリング状態 | +| `~/input/auto/control_cmd` | `autoware_control_msgs::msg::Control` | Planningモジュールからの横方向・縦方向速度コマンド | +| `~/input/auto/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | Planningモジュールからのターンインジケータコマンド | +| `~/input/auto/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | Planningモジュールからのハザードランプコマンド | +| `~/input/auto/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | Planningモジュールからのギアコマンド | +| `~/input/external/control_cmd` | `autoware_control_msgs::msg::Control` | 外部からの横方向・縦方向速度コマンド | +| `~/input/external/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | 外部からのターンインジケータコマンド | +| `~/input/external/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 外部からのハザードランプコマンド | +| `~/input/external/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 外部からのギアコマンド | +| `~/input/external_emergency_stop_heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | ハートビート | +| `~/input/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード (AUTO または EXTERNAL) | +| `~/input/emergency/control_cmd` | `autoware_control_msgs::msg::Control` | エマージェンシーハンドラからの横方向・縦方向速度コマンド | +| `~/input/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | エマージェンシーハンドラからのハザードランプコマンド | +| `~/input/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | エマージェンシーハンドラからのギアコマンド | +| `~/input/engage` | `autoware_vehicle_msgs::msg::Engage` | エンゲージ信号 | +| `~/input/operation_mode` | `autoware_adapi_v1_msgs::msg::OperationModeState` | Autowareの動作モード | + +### 出力 + +**日本語訳:** + +## 自動運転ソフトウェアドキュメント + +### 計画コンポーネント + +#### 自車位置推定 + +自車位置推定モジュールは、各種センサーからデータを取得し、自己位置を推定します。位置、速度、加速度の推定値を出力します。 + +#### オドメトリ + +オドメトリモジュールは、車輪速度センサーや加速度計のデータを使用して、自車位置を推定します。自己位置の長期的な安定性は低いですが、短期間の推定には有用です。 + +#### 外部センシング + +外部センシングモジュールは、レーダーやLiDARなどのセンサーからデータを取得して、周辺環境を認識します。物体検出、トラッキング、および障害物マッピングを行います。 + +### Planning + +#### パスプランニング + +パスプランニングモジュールは、目標地点まで安全で効率的な経路を生成します。障害物回避、速度制限の遵守、「post resampling」などの制約を考慮します。 + +#### 軌跡生成 + +軌跡生成モジュールは、パスを滑らかな軌跡に変換します。速度、加速度、ジャークの制限を考慮します。 + +#### 動作プランニング + +動作プランニングモジュールは、現在の走行条件に基づいて、適切な操作を決定します。たとえば、加速、減速、車線変更などを行います。 + +### Safety + +#### 障害物検出 + +障害物検出モジュールは、外部センシングデータを使用して、周囲の障害物(車両、歩行者、建物など)を検出します。 + +#### 逸脱量チェック + +逸脱量チェックモジュールは、速度逸脱量、加速度逸脱量、ジャーク逸脱量を監視します。安全でない動作を検出した場合は、警告または介入を行います。 + +#### 緊急ブレーキ + +緊急ブレーキモジュールは、障害物との衝突が差し迫っていることを検出した場合に、自動的に緊急ブレーキをかけます。 + +### コントロール + +#### ステアリング制御 + +ステアリング制御モジュールは、軌跡に従うようにステアリング角を制御します。 + +#### 加減速制御 + +加減速制御モジュールは、軌跡に従うように速度と加速度を制御します。 + +### その他のコンポーネント + +#### 通信 + +通信モジュールは、他の車両、インフラ、クラウドとの通信を行います。 + +#### センサーフュージョン + +センサーフュージョンモジュールは、さまざまなセンサーからのデータを統合して、周辺環境のより正確な表現を作成します。 + +#### マッピング + +マッピングモジュールは、周囲の環境を高精度マップに構築します。これにより、自動運転システムは、既知の道路でより正確に動作できます。 + +#### ローカリゼーション + +ローカリゼーションモジュールは、自己位置をマップに相対的に決定します。自己位置推定モジュールからの推定値と外部センシングモジュールからのデータを統合します。 + +### Autowareについて + +Autowareは、オープンソースの自動運転ソフトウェアプラットフォームです。主要な機能として上記で説明したコンポーネントを提供します。詳細については、Autowareのドキュメントを参照してください。 + +| 名前 | 型 | 説明 | | -------------------------------------- | --------------------------------------------------- | -------------------------------------------------------- | -| `~/output/vehicle_cmd_emergency` | `tier4_vehicle_msgs::msg::VehicleEmergencyStamped` | emergency state which was originally in vehicle command | -| `~/output/command/control_cmd` | `autoware_control_msgs::msg::Control` | command for lateral and longitudinal velocity to vehicle | -| `~/output/command/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | turn indicators command to vehicle | -| `~/output/command/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | hazard lights command to vehicle | -| `~/output/command/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | gear command to vehicle | -| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | gate mode (AUTO or EXTERNAL) | -| `~/output/engage` | `autoware_vehicle_msgs::msg::Engage` | engage signal | -| `~/output/external_emergency` | `tier4_external_api_msgs::msg::Emergency` | external emergency signal | -| `~/output/operation_mode` | `tier4_system_msgs::msg::OperationMode` | current operation mode of the vehicle_cmd_gate | - -## Parameters - -| Parameter | Type | Description | -| ------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `update_period` | double | update period | -| `use_emergency_handling` | bool | true when emergency handler is used | -| `check_external_emergency_heartbeat` | bool | true when checking heartbeat for emergency stop | -| `system_emergency_heartbeat_timeout` | double | timeout for system emergency | -| `external_emergency_stop_heartbeat_timeout` | double | timeout for external emergency | -| `filter_activated_count_threshold` | int | threshold for filter activation | -| `filter_activated_velocity_threshold` | double | velocity threshold for filter activation | -| `stop_hold_acceleration` | double | longitudinal acceleration cmd when vehicle should stop | -| `emergency_acceleration` | double | longitudinal acceleration cmd when vehicle stop with emergency | -| `moderate_stop_service_acceleration` | double | longitudinal acceleration cmd when vehicle stop with moderate stop service | -| `nominal.vel_lim` | double | limit of longitudinal velocity (activated in AUTONOMOUS operation mode) | -| `nominal.reference_speed_point` | | velocity point used as a reference when calculate control command limit (activated in AUTONOMOUS operation mode). The size of this array must be equivalent to the size of the limit array. | -| `nominal.lon_acc_lim` | | array of limits of longitudinal acceleration (activated in AUTONOMOUS operation mode) | -| `nominal.lon_jerk_lim` | | array of limits of longitudinal jerk (activated in AUTONOMOUS operation mode) | -| `nominal.lat_acc_lim` | | array of limits of lateral acceleration (activated in AUTONOMOUS operation mode) | -| `nominal.lat_jerk_lim` | | array of limits of lateral jerk (activated in AUTONOMOUS operation mode) | -| `on_transition.vel_lim` | double | limit of longitudinal velocity (activated in TRANSITION operation mode) | -| `on_transition.reference_speed_point` | | velocity point used as a reference when calculate control command limit (activated in TRANSITION operation mode). The size of this array must be equivalent to the size of the limit array. | -| `on_transition.lon_acc_lim` | | array of limits of longitudinal acceleration (activated in TRANSITION operation mode) | -| `on_transition.lon_jerk_lim` | | array of limits of longitudinal jerk (activated in TRANSITION operation mode) | -| `on_transition.lat_acc_lim` | | array of limits of lateral acceleration (activated in TRANSITION operation mode) | -| `on_transition.lat_jerk_lim` | | array of limits of lateral jerk (activated in TRANSITION operation mode) | - -## Filter function - -This module incorporates a limitation filter to the control command right before its published. Primarily for safety, this filter restricts the output range of all control commands published through Autoware. - -The limitation values are calculated based on the 1D interpolation of the limitation array parameters. Here is an example for the longitudinal jerk limit. +| `~/output/vehicle_cmd_emergency` | `tier4_vehicle_msgs::msg::VehicleEmergencyStamped` | コマンド内の緊急状態 | +| `~/output/command/control_cmd` | `autoware_control_msgs::msg::Control` | 車両への横方向および縦方向速度コマンド | +| `~/output/command/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | 車両へのターンインジケータコマンド | +| `~/output/command/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 車両へのハザードランプコマンド | +| `~/output/command/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 車両へのギアコマンド | +| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード(AUTOまたはEXTERNAL) | +| `~/output/engage` | `autoware_vehicle_msgs::msg::Engage` | エンゲージ信号 | +| `~/output/external_emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急信号 | +| `~/output/operation_mode` | `tier4_system_msgs::msg::OperationMode` | `vehicle_cmd_gate`の現在の動作モード | + +## パラメータ + +| パラメータ | 型 | 説明 | +| ------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `update_period` | double | 更新周期 | +| `use_emergency_handling` | bool | エマージェンシーハンドラ使用時はtrue | +| `check_external_emergency_heartbeat` | bool | エマージェンシーストップのハートビートを確認する場合true | +| `system_emergency_heartbeat_timeout` | double | システムエマージェンシーのタイムアウト | +| `external_emergency_stop_heartbeat_timeout` | double | 外部エマージェンシーのタイムアウト | +| `filter_activated_count_threshold` | int | フィルタアクティベーションのしきい値 | +| `filter_activated_velocity_threshold` | double | フィルタアクティベーションの速度しきい値 | +| `stop_hold_acceleration` | double | 車両が停止する場合の縦断加速度コマンド | +| `emergency_acceleration` | double | 車両がエマージェンシーで停止する場合の縦断加速度コマンド | +| `moderate_stop_service_acceleration` | double | 車両がモデレートストップサービスで停止する場合の縦断加速度コマンド | +| `nominal.vel_lim` | double | 縦断速度の制限(自律運転モードでアクティブ化) | +| `nominal.reference_speed_point` | | コントロールコマンドの制限の計算時に参照速度点として使用される速度点(自律運転モードでアクティブ化)。この配列のサイズは制限配列のサイズと同じにする必要があります。 | +| `nominal.lon_acc_lim` | | 縦断加速度の限界値の配列(自律運転モードでアクティブ化) | +| `nominal.lon_jerk_lim` | | 縦断ジャークの限界値の配列(自律運転モードでアクティブ化) | +| `nominal.lat_acc_lim` | | 横断加速度の限界値の配列(自律運転モードでアクティブ化) | +| `nominal.lat_jerk_lim` | | 横断ジャークの限界値の配列(自律運転モードでアクティブ化) | +| `on_transition.vel_lim` | double | 縦断速度の制限(トランジションモードでアクティブ化) | +| `on_transition.reference_speed_point` | | コントロールコマンドの制限の計算時に参照速度点として使用される速度点(トランジションモードでアクティブ化)。この配列のサイズは制限配列のサイズと同じにする必要があります。 | +| `on_transition.lon_acc_lim` | | 縦断加速度の限界値の配列(トランジションモードでアクティブ化) | +| `on_transition.lon_jerk_lim` | | 縦断ジャークの限界値の配列(トランジションモードでアクティブ化) | +| `on_transition.lat_acc_lim` | | 横断加速度の限界値の配列(トランジションモードでアクティブ化) | +| `on_transition.lat_jerk_lim` | | 横断ジャークの限界値の配列(トランジションモードでアクティブ化) | + +## フィルタ機能 + +このモジュールは、公開直前に制御コマンドに制限フィルタを組み込みます。主に安全上の理由から、このフィルタはAutowareを介して公開されるすべての制御コマンドの出力範囲を制限します。 + +制限値は、制限配列パラメータの1次元補間に基づいて計算されます。以下に縦断方向のジャーク制限の例を示します。 ![filter-example](./image/filter.png) -Notation: this filter is not designed to enhance ride comfort. Its main purpose is to detect and remove abnormal values in the control outputs during the final stages of Autoware. If this filter is frequently active, it implies the control module may need tuning. If you're aiming to smoothen the signal via a low-pass filter or similar techniques, that should be handled in the control module. When the filter is activated, the topic `~/is_filter_activated` is published. +注記: このフィルタは乗り心地を向上させるために設計されていません。その主な目的は、Autowareの最終段階で制御出力の異常値を検出して除去することです。このフィルタが頻繁にアクティブになる場合、制御モジュールの調整が必要になる可能性があります。ローパスフィルタや同様の手法で信号を滑らかにする場合、制御モジュールでその処理を行うべきです。フィルタがアクティブになると、トピック`~/is_filter_activated` が公開されます。 + +注記2: アクセル/ブレーキペダルによって駆動力が制御される車両を使用する場合、ペダルレート制限を表すジャーク制限は低速域で十分に緩和する必要があります。 +そうでなければ、発進/停止時に素早くペダルを切り替えることができません。その結果、発進が遅れたり、下り坂でクリープ現象が発生したりします。発進/停止のためのこの機能はソースコードに埋め込まれていましたが、複雑でパラメータで実現できたため削除されました。 -Notation 2: If you use vehicles in which the driving force is controlled by the accelerator/brake pedal, the jerk limit, denoting the pedal rate limit, must be sufficiently relaxed at low speeds. -Otherwise, quick pedal changes at start/stop will not be possible, resulting in slow starts and creep down on hills. -This functionality for starting/stopping was embedded in the source code but was removed because it was complex and could be achieved by parameters. +## 想定事項/既知の制限事項 -## Assumptions / Known limits +### 外部緊急ハートビート -### External Emergency Heartbeat +パラメータ `check_external_emergency_heartbeat`(デフォルトでtrue)は、外部モジュールからの緊急停止要求を有効にします。 +この機能を使用するには、外部モジュールのヘルスモニタリング用のトピック`~/input/external_emergency_stop_heartbeat` が必要であり、vehicle_cmd_gateモジュールはトピックなしでは起動しません。 +「外部緊急停止」機能を使用しない場合、`check_external_emergency_heartbeat` パラメータは false にする必要があります。 -The parameter `check_external_emergency_heartbeat` (true by default) enables an emergency stop request from external modules. -This feature requires a `~/input/external_emergency_stop_heartbeat` topic for health monitoring of the external module, and the vehicle_cmd_gate module will not start without the topic. -The `check_external_emergency_heartbeat` parameter must be false when the "external emergency stop" function is not used. +### モード変更時のコマンド -### Commands on Mode changes +出力コマンドのトピック: `turn_indicators_cmd`, `hazard_light` および `gear_cmd` は `gate_mode` に基づいて選択されます。 +ただし、コマンドの継続性を確保するために、モードが変更された場合でも、新しい入力コマンドのトピックが届くまでこれらのコマンドは変更されません。 -Output commands' topics: `turn_indicators_cmd`, `hazard_light` and `gear_cmd` are selected based on `gate_mode`. -However, to ensure the continuity of commands, these commands will not change until the topics of new input commands arrive, even if a mode change occurs. diff --git a/control/control_performance_analysis/README.md b/control/control_performance_analysis/README.md index 3895b3cc13465..d73209fcdeb90 100644 --- a/control/control_performance_analysis/README.md +++ b/control/control_performance_analysis/README.md @@ -1,103 +1,122 @@ -# control_performance_analysis +## コントロールパフォーマンス分析 -## Purpose +## 目的 -`control_performance_analysis` is the package to analyze the tracking performance of a control module and monitor the driving status of the vehicle. +`control_performance_analysis`は、制御モジュールの追従性能を分析し、車両の走行状況を監視するためのパッケージです。 -This package is used as a tool to quantify the results of the control module. -That's why it doesn't interfere with the core logic of autonomous driving. +このパッケージは、制御モジュールの結果を定量化するためのツールとして使用されます。 +そのため、自動運転のコアロジックに干渉しません。 -Based on the various input from planning, control, and vehicle, it publishes the result of analysis as `control_performance_analysis::msg::ErrorStamped` defined in this package. +プランニング、制御、車両からのさまざまな入力に基づいて、このパッケージで定義された`control_performance_analysis::msg::ErrorStamped`として分析の結果を公開します。 -All results in `ErrorStamped` message are calculated in Frenet Frame of curve. Errors and velocity errors are calculated by using paper below. +`ErrorStamped`メッセージのすべての結果は、曲線のフレネフレームで計算されます。エラーと速度エラーは、次の論文を使用して計算されます。 `Werling, Moritz & Groell, Lutz & Bretthauer, Georg. (2010). Invariant Trajectory Tracking With a Full-Size Autonomous Road Vehicle. IEEE Transactions on Robotics. 26. 758 - 765. 10.1109/TRO.2010.2052325.` -If you are interested in calculations, you can see the error and error velocity calculations in section `C. Asymptotical Trajectory Tracking With Orientation Control`. +計算に興味がある場合は、「C. Asymptotical Trajectory Tracking With Orientation Control」セクションでエラーと速度エラーの計算を参照できます。 -Error acceleration calculations are made based on the velocity calculations above. You can see below the calculation of error acceleration. +エラー加速度の計算は、上記の速度の計算に基づいて行われます。次のエラー加速度の計算を参照できます。 ![CodeCogsEqn](https://user-images.githubusercontent.com/45468306/169027099-ef15b306-2868-4084-a350-0e2b652c310f.png) -## Input / Output +## 入出力 -### Input topics +### 入力トピック -| Name | Type | Description | -| ---------------------------------------- | ------------------------------------------ | ------------------------------------------- | -| `/planning/scenario_planning/trajectory` | autoware_planning_msgs::msg::Trajectory | Output trajectory from planning module. | -| `/control/command/control_cmd` | autoware_control_msgs::msg::Control | Output control command from control module. | -| `/vehicle/status/steering_status` | autoware_vehicle_msgs::msg::SteeringReport | Steering information from vehicle. | -| `/localization/kinematic_state` | nav_msgs::msg::Odometry | Use twist from odometry. | -| `/tf` | tf2_msgs::msg::TFMessage | Extract ego pose from tf. | +| 名前 | タイプ | 説明 | +| ------------------------------------ | --------------------------------------- | --------------------------------------- | +| `/planning/scenario_planning/trajectory` | `autoware_planning_msgs::msg::Trajectory` | Planningモジュールからの出力軌道 | +| `/control/command/control_cmd` | `autoware_control_msgs::msg::Control` | Controlモジュールからの出力制御コマンド | +| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | 車両からのステアリング情報 | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | オドメトリからツイストを使用 | +| `/tf` | `tf2_msgs::msg::TFMessage` | TFから自車位置を抽出 | -### Output topics +## 出力トピック -| Name | Type | Description | -| --------------------------------------- | -------------------------------------------------------- | --------------------------------------------------- | -| `/control_performance/performance_vars` | control_performance_analysis::msg::ErrorStamped | The result of the performance analysis. | -| `/control_performance/driving_status` | control_performance_analysis::msg::DrivingMonitorStamped | Driving status (acceleration, jerk etc.) monitoring | +**AutowareのAPIバージョン:** 1.16.0-rc0 -### Outputs +| トピック | データタイプ | 説明 | +|---|---|---| +| `/vehicle/localization/current_pose` | `geometry_msgs/PoseStamped` | 自車位置の現在の推定値。このトピックにパブリッシュされるデータは、誤差を軽減するために、センサーデータから後処理やフィルタリングを経て得られたものです。 | +| `/trajectory/planning/lane_waypoints` | `autoware_planning_msgs/Lane` | 計画されたパス内のウェイポイントを格納します。| +| `/trajectory/planning/lattice_waypoints` | `autoware_planning_msgs/Lattice` | 速度と横方向位置(逸脱量)の組み合わせに対する、計画されたパスのウェイポイントを格納します。| +| `/trajectory/planning/optimized_trajectory` | `autoware_planning_msgs/OptimizedTrajectory` | 経路最適化モジュールによって最適化された経路のウェイポイントを格納します。| +| `/planning/planning_flag` | `autoware_planning_msgs/PlanningFlag` | 計画状態に関するフラグを格納します。0:停止、1:フォロー、2:計画中です。| +| `/planning/velocity_plan` | `autoware_planning_msgs/VelocityPlan` | 速度計画モジュールによって計算された車速と加速度の値を格納します。| +| `/control_command` | `autoware_msgs/ControlCommandStamped` | 制御モジュールへ送信される、モーターとステアリングの制御コマンドを格納します。| +| `/localization/odometry` | `nav_msgs/Odometry` | オドメトリ情報。| +| `/localization/estimation` | `geometry_msgs/PoseWithCovarianceStamped` | オドメトリ推定値。| +| `/velodyne_points` | `sensor_msgs/PointCloud2` | Velodyneセンサーからの点群。| +| `/image/front_camera/image_raw` | `sensor_msgs/Image` | フロントカメラからの生の画像データ。| +| `/image/rear_camera/image_raw` | `sensor_msgs/Image` | リアカメラからの生の画像データ。| + +| 名称 | タイプ | 説明 | +| --------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------- | +| `/control_performance/performance_vars` | control_performance_analysis::msg::ErrorStamped | パフォーマンス解析の結果 | +| `/control_performance/driving_status` | control_performance_analysis::msg::DrivingMonitorStamped | 走行ステータス(加速度、ジャークなど)のモニタリング | + +### 出力 #### control_performance_analysis::msg::DrivingMonitorStamped -| Name | Type | Description | -| ---------------------------- | ----- | -------------------------------------------------------- | -| `longitudinal_acceleration` | float | [m / s^2] | -| `longitudinal_jerk` | float | [m / s^3] | -| `lateral_acceleration` | float | [m / s^2] | -| `lateral_jerk` | float | [m / s^3] | -| `desired_steering_angle` | float | [rad] | -| `controller_processing_time` | float | Timestamp between last two control command messages [ms] | +| 名称 | タイプ | 説明 | +| ---------------------------- | ----- | ---------------------------------------------------------- | +| `longitudinal_acceleration` | float | [m/s^2] | +| `longitudinal_jerk` | float | [m/s^3] | +| `lateral_acceleration` | float | [m/s^2] | +| `lateral_jerk` | float | [m/s^3] | +| `desired_steering_angle` | float | [rad] | +| `controller_processing_time` | float | 2つの制御コマンドメッセージ間のタイムスタンプ [ms] | #### control_performance_analysis::msg::ErrorStamped -| Name | Type | Description | + +| 名称 | タイプ | 説明 | | ------------------------------------------ | ----- | ----------------------------------------------------------------------------------------------------------------- | | `lateral_error` | float | [m] | -| `lateral_error_velocity` | float | [m / s] | -| `lateral_error_acceleration` | float | [m / s^2] | +| `lateral_error_velocity` | float | [m/s] | +| `lateral_error_acceleration` | float | [m/s^2] | | `longitudinal_error` | float | [m] | -| `longitudinal_error_velocity` | float | [m / s] | -| `longitudinal_error_acceleration` | float | [m / s^2] | +| `longitudinal_error_velocity` | float | [m/s] | +| `longitudinal_error_acceleration` | float | [m/s^2] | | `heading_error` | float | [rad] | -| `heading_error_velocity` | float | [rad / s] | +| `heading_error_velocity` | float | [rad/s] | | `control_effort_energy` | float | [u * R * u^T] | | `error_energy` | float | lateral_error^2 + heading_error^2 | -| `value_approximation` | float | V = xPx' ; Value function from DARE Lyap matrix P | -| `curvature_estimate` | float | [1 / m] | -| `curvature_estimate_pp` | float | [1 / m] | -| `vehicle_velocity_error` | float | [m / s] | -| `tracking_curvature_discontinuity_ability` | float | Measures the ability to tracking the curvature changes [`abs(delta(curvature)) / (1 + abs(delta(lateral_error))`] | - -## Parameters - -| Name | Type | Description | -| ------------------------------------- | ---------------- | ----------------------------------------------------------------- | -| `curvature_interval_length` | double | Used for estimating current curvature | -| `prevent_zero_division_value` | double | Value to avoid zero division. Default is `0.001` | -| `odom_interval` | unsigned integer | Interval between odom messages, increase it for smoother curve. | -| `acceptable_max_distance_to_waypoint` | double | Maximum distance between trajectory point and vehicle [m] | -| `acceptable_max_yaw_difference_rad` | double | Maximum yaw difference between trajectory point and vehicle [rad] | -| `low_pass_filter_gain` | double | Low pass filter gain | - -## Usage - -- After launched simulation and control module, launch the `control_performance_analysis.launch.xml`. -- You should be able to see the driving monitor and error variables in topics. -- If you want to visualize the results, you can use `Plotjuggler` and use `config/controller_monitor.xml` as layout. -- After import the layout, please specify the topics that are listed below. +| `value_approximation` | float | V = xPx' ; 自車位置に基づく状態空間のパフォーマンス指数を近似した値 | +| `curvature_estimate` | float | [1/m] | +| `curvature_estimate_pp` | float | [1/m] | +| `vehicle_velocity_error` | float | [m/s] | +| `tracking_curvature_discontinuity_ability` | float | 曲率変化を追従する能力を測定 [`abs(delta(curvature)) / (1 + abs(delta(lateral_error))`] | + +## パラメータ + +| 名称 | 型 | 説明 | +| --------------------------------------- | ---------------- | --------------------------------------------------------------------- | +| `curvature_interval_length` | double | current curvature 推定に使用 | +| `prevent_zero_division_value` | double | ゼロ除算を回避するための値(デフォルトは `0.001`) | +| `odom_interval` | unsigned integer | odom メッセージ間のインターバル(より滑らかな曲線には大きくする) | +| `acceptable_max_distance_to_waypoint` | double | 軌道ポイントと車両の最大距離 [m] | +| `acceptable_max_yaw_difference_rad` | double | 軌道ポイントと車両の最大ヨー角差 [rad] | +| `low_pass_filter_gain` | double | ローパスフィルタのゲイン | + +## 操作方法 + +- シミュレーションと制御モジュールを起動した後、`control_performance_analysis.launch.xml` を起動します。 +- 走行モニタとエラー変数がトピックに表示されます。 +- 結果を視覚化するには、`Plotjuggler` を使用し、レイアウトとして `config/controller_monitor.xml` を使用します。 +- レイアウトをインポートした後、以下のトピックを指定します。 > - /localization/kinematic_state > - /vehicle/status/steering_status > - /control_performance/driving_status > - /control_performance/performance_vars -- In `Plotjuggler` you can export the statistic (max, min, average) values as csv file. Use that statistics to compare the control modules. +- `Plotjuggler` では、統計情報(最大、最小、平均)値を csv ファイルとしてエクスポートできます。この統計情報を使用して、制御モジュールを比較します。 + +## 今後の改善 -## Future Improvements +- カットオフ周波数、微分方程式、離散状態空間の更新を使用して LPF を実装します。 -- Implement a LPF by cut-off frequency, differential equation and discrete state space update. diff --git a/control/predicted_path_checker/README.md b/control/predicted_path_checker/README.md index a968a285928f6..f76127047e8c4 100644 --- a/control/predicted_path_checker/README.md +++ b/control/predicted_path_checker/README.md @@ -1,103 +1,101 @@ # Predicted Path Checker -## Purpose +## 目的 -The Predicted Path Checker package is designed for autonomous vehicles to check the predicted path generated by control -modules. It handles potential collisions that the planning module might not be able to handle and that in the brake -distance. In case of collision in brake distance, the package will send a diagnostic message labeled "ERROR" to alert -the system to send emergency and in the case of collisions in outside reference trajectory, it sends pause request to -pause interface to make the vehicle stop. +Predicted Path Checkerパッケージは、自律車両が制御モジュールによって生成された予測パスをチェックするために設計されています。このパッケージは、プランニングモジュールが処理できない可能性があり、ブレーキ距離内にある潜在的な衝突を処理します。ブレーキ距離内に衝突が発生した場合、パッケージはシステムに「ERROR」というラベルの診断メッセージを送信して緊急事態を知らせるようアラートし、リファレンストラジェクトリの外部で衝突が発生した場合は、インターフェースを一時停止して車両を停止するように一時停止要求を送信します。 ![general-structure.png](images%2Fgeneral-structure.png) -## Algorithm +## アルゴリズム -The package algorithm evaluates the predicted trajectory against the reference trajectory and the predicted objects in -the environment. It checks for potential collisions and, if necessary, generates an appropriate response to avoid them ( -emergency or pause request). +パッケージアルゴリズムは、予測軌跡をリファレンストラジェクトリと環境内の予測オブジェクトに対して評価します。潜在的な衝突をチェックし、必要に応じてそれらを回避するために適切な応答を生成します(緊急停止または一時停止要求)。 -### Inner Algorithm +### 内部アルゴリズム ![FlowChart.png](images%2FFlowChart.png) -**cutTrajectory() ->** It cuts the predicted trajectory with input length. Length is calculated by multiplying the -velocity -of ego vehicle with "trajectory_check_time" parameter and "min_trajectory_length". +**cutTrajectory() ->** 予測軌跡を入力された長さでカットします。長さは、エゴカーの速度に「trajectory_check_time」パラメータと「min_trajectory_length」を乗じた値で計算されます。 -**filterObstacles() ->** It filters the predicted objects in the environment. It filters the objects which are not in -front of the vehicle and far away from predicted trajectory. +**filterObstacles() ->** 環境内の予測オブジェクトをフィルタリングします。車両の前方になく、予測軌跡から遠く離れたオブジェクトをフィルタリングします。 -**checkTrajectoryForCollision() ->** It checks the predicted trajectory for collision with the predicted objects. It -calculates both polygon of trajectory points and predicted objects and checks intersection of both polygons. If there is -an intersection, it calculates the nearest collision point. It returns the nearest collision point of polygon and the -predicted object. It also checks predicted objects history which are intersect with the footprint before to avoid -unexpected behaviors. Predicted objects history stores the objects if it was detected below the "chattering_threshold" -seconds ago. +**checkTrajectoryForCollision() ->** 予測軌跡が予測オブジェクトと衝突するかどうかをチェックします。軌跡点と予測オブジェクトの両方の多角形を計算し、両方の多角形の交差をチェックします。交差がある場合、最も近い衝突点を計算します。多角形とその予測オブジェクトの最も近い衝突点を返します。また、予期しない動作を避けるために、前にフットプリントと交差した予測オブジェクト履歴もチェックします。予測オブジェクト履歴は、それらが「chattering_threshold」秒前に検出された場合にオブジェクトを格納します。 -If the "enable_z_axis_obstacle_filtering" parameter is set to true, it filters the predicted objects in the Z-axis by -using "z_axis_filtering_buffer". If the object does not intersect with the Z-axis, it is filtered out. +「enable_z_axis_obstacle_filtering」パラメータが true に設定されている場合、予測オブジェクトは「z_axis_filtering_buffer」を使用して Z 軸でフィルタリングされます。オブジェクトが Z 軸と交差しない場合、オブジェクトはフィルタリングされます。 ![Z_axis_filtering.png](images%2FZ_axis_filtering.png) -**calculateProjectedVelAndAcc() ->** It calculates the projected velocity and acceleration of the predicted object on -predicted trajectory's collision point's axes. +**calculateProjectedVelAndAcc() ->** 予測軌跡の衝突点の軸上の予測オブジェクトの投影速度と加速度を計算します。 -**isInBrakeDistance() ->** It checks if the stop point is in brake distance. It gets relative velocity and -acceleration of ego vehicle with respect to the predicted object. It calculates the brake distance, if the point in -brake distance, it returns true. +**isInBrakeDistance() ->** 停止点がブレーキ距離内にあるかどうかをチェックします。予測オブジェクトに対するエゴカーの相対速度と加速度を取得します。ブレーキ距離を計算し、点がブレーキ距離内にある場合、true を返します。 -**isItDiscretePoint() ->** It checks if the stop point on predicted trajectory is discrete point or not. If it is not -discrete point, planning should handle the stop. +**isItDiscretePoint() ->** 予測軌跡上の停止点が離散ポイントであるかどうかをチェックします。離散ポイントでない場合、停止はプランニングによって処理される必要があります。 -**isThereStopPointOnRefTrajectory() ->** It checks if there is a stop point on reference trajectory. If there is a stop -point before the stop index, it returns true. Otherwise, it returns false, and node is going to call pause interface to -make the vehicle stop. +**isThereStopPointOnRefTrajectory() ->** リファレンストラジェクトリ上に停止点があるかどうかをチェックします。停止インデックスの前に停止点がある場合、true を返します。それ以外の場合は false を返し、ノードは一時停止インターフェースを呼び出して車両を停止します。 -## Inputs +## 入力 -| Name | Type | Description | +| 名 | 型 | 説明 | | ------------------------------------- | ------------------------------------------------ | --------------------------------------------------- | -| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | Reference trajectory | -| `~/input/predicted_trajectory` | `autoware_planning_msgs::msg::Trajectory` | Predicted trajectory | -| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObject` | Dynamic objects in the environment | -| `~/input/odometry` | `nav_msgs::msg::Odometry` | Odometry message of vehicle to get current velocity | -| `~/input/current_accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | Current acceleration | -| `/control/vehicle_cmd_gate/is_paused` | `tier4_control_msgs::msg::IsPaused` | Current pause state of the vehicle | - -## Outputs - -| Name | Type | Description | -| ------------------------------------- | ---------------------------------------- | -------------------------------------- | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | Marker for visualization | -| `~/debug/virtual_wall` | `visualization_msgs::msg::MarkerArray` | Virtual wall marker for visualization | -| `/control/vehicle_cmd_gate/set_pause` | `tier4_control_msgs::srv::SetPause` | Pause service to make the vehicle stop | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticStatus` | Diagnostic status of vehicle | - -## Parameters - -### Node Parameters - -| Name | Type | Description | Default value | +| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | リファレンストライジェクチャリ | +| `~/input/predicted_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測されたトランスジェクチャリ | +| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObject` | 環境における動的オブジェクト | +| `~/input/odometry` | `nav_msgs::msg::Odometry` | 自車の速度を取得するためのオドメトリメッセージ | +| `~/input/current_accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 現在の加速度 | +| `/control/vehicle_cmd_gate/is_paused` | `tier4_control_msgs::msg::IsPaused` | 車両の現在の停止状態 | + +## 出力 + +- **軌跡プランニング** + - 車両軌跡生成における不連続性削減 + - 軌跡プランニングモジュール内での経路最適化 +- **制御** + - 加速度と速度の違反における車両挙動の安定性向上 + - ビークルダイナミクスの向上 +- **知覚** + - オブジェクトの検出精度向上 + - 車両周辺環境のより完全な把握 +- **マップ** + - マップ精度の向上 + - より信頼性の高い経路計画 +- **ロギング** + - システムのパフォーマンスの監視を向上させるロギング機能の追加 +- **ビジュアライゼーション** + - `post resampling`における経路可視化の改善 + - 自車位置のより正確な表現 + +| 名称 | 型 | 説明 | +| ------------------------------------ | ---------------------------------------- | ---------------------------------------- | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | +| `~/debug/virtual_wall` | `visualization_msgs::msg::MarkerArray` | 可視化用の仮想の壁のマーカー | +| `/control/vehicle_cmd_gate/set_pause` | `tier4_control_msgs::srv::SetPause` | 車両を停止させるための停止サービス | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticStatus` | 車両の診断状況 | + +## パラメータ + +### ノードパラメータ + +| 名称 | 型 | 説明 | デフォルト値 | | :---------------------------------- | :------- | :-------------------------------------------------------------------- | :------------ | -| `update_rate` | `double` | The update rate [Hz] | 10.0 | -| `delay_time` | `double` | he time delay considered for the emergency response [s] | 0.17 | -| `max_deceleration` | `double` | Max deceleration for ego vehicle to stop [m/s^2] | 1.5 | -| `resample_interval` | `double` | Interval for resampling trajectory [m] | 0.5 | -| `stop_margin` | `double` | The stopping margin [m] | 0.5 | -| `ego_nearest_dist_threshold` | `double` | The nearest distance threshold for ego vehicle [m] | 3.0 | -| `ego_nearest_yaw_threshold` | `double` | The nearest yaw threshold for ego vehicle [rad] | 1.046 | -| `min_trajectory_check_length` | `double` | The minimum trajectory check length in meters [m] | 1.5 | -| `trajectory_check_time` | `double` | The trajectory check time in seconds. [s] | 3.0 | -| `distinct_point_distance_threshold` | `double` | The distinct point distance threshold [m] | 0.3 | -| `distinct_point_yaw_threshold` | `double` | The distinct point yaw threshold [deg] | 5.0 | -| `filtering_distance_threshold` | `double` | It ignores the objects if distance is higher than this [m] | 1.5 | -| `use_object_prediction` | `bool` | If true, node predicts current pose of the objects wrt delta time [-] | true | - -### Collision Checker Parameters - -| Name | Type | Description | Default value | +| `update_rate` | `倍精度浮動小数点` | 更新レート [Hz] | 10.0 | +| `delay_time` | `倍精度浮動小数点` | 緊急対応で考慮される時間遅延 [s] | 0.17 | +| `max_deceleration` | `倍精度浮動小数点` | 自動運転車両が停止するための最大減速度 [m/s^2] | 1.5 | +| `resample_interval` | `倍精度浮動小数点` | 軌道の再サンプリング間隔 [m] | 0.5 | +| `stop_margin` | `倍精度浮動小数点` | 停止マージン [m] | 0.5 | +| `ego_nearest_dist_threshold` | `倍精度浮動小数点` | 自動運転車両の最近接距離閾値 [m] | 3.0 | +| `ego_nearest_yaw_threshold` | `倍精度浮動小数点` | 自動運転車両の最近接ヨー角閾値 [rad] | 1.046 | +| `min_trajectory_check_length` | `倍精度浮動小数点` | メートル単位での最短軌道チェックの長さ [m] | 1.5 | +| `trajectory_check_time` | `倍精度浮動小数点` | 軌道チェック時間 [s] | 3.0 | +| `distinct_point_distance_threshold` | `倍精度浮動小数点` | 異なる点の距離閾値 [m] | 0.3 | +| `distinct_point_yaw_threshold` | `倍精度浮動小数点` | 異なる点のヨー角閾値 [deg] | 5.0 | +| `filtering_distance_threshold` | `倍精度浮動小数点` | 距離がこの値より大きい場合、オブジェクトを無視します [m] | 1.5 | +| `use_object_prediction` | `ブーリアン` | Trueの場合、ノードはデルタ時間に関連してオブジェクトの自車位置を予測します [-] | true | + +### 衝突チェッカーパラメータ + +| 名称 | 型 | 説明 | デフォルト値 | | :--------------------------------- | :------- | :---------------------------------------------------------------- | :------------ | -| `width_margin` | `double` | The width margin for collision checking [Hz] | 0.2 | -| `chattering_threshold` | `double` | The chattering threshold for collision detection [s] | 0.2 | -| `z_axis_filtering_buffer` | `double` | The Z-axis filtering buffer [m] | 0.3 | -| `enable_z_axis_obstacle_filtering` | `bool` | A boolean flag indicating if Z-axis obstacle filtering is enabled | false | +| `width_margin` | `double` | 衝突検査における幅マージン [Hz] | 0.2 | +| `chattering_threshold` | `double` | 衝突検出におけるチャタリングしきい値 [s] | 0.2 | +| `z_axis_filtering_buffer` | `double` | Z軸フィルタリングバッファ [m] | 0.3 | +| `enable_z_axis_obstacle_filtering` | `bool` | Z軸障害物フィルタリングが有効かどうかを示すフラグ | false | + diff --git a/evaluator/autoware_control_evaluator/README.md b/evaluator/autoware_control_evaluator/README.md index 59c09015bd7b5..6e0d0dd48c3f9 100644 --- a/evaluator/autoware_control_evaluator/README.md +++ b/evaluator/autoware_control_evaluator/README.md @@ -1,17 +1,18 @@ -# Control Evaluator +# 制御評価器 -## Purpose +## 目的 -This package provides nodes that generate metrics to evaluate the quality of control. +このパッケージは、制御の品質を評価するためのメトリクスを生成するノードを提供します。 -It publishes diagnostic information about control modules' outputs as well as the ego vehicle's current kinematics and position. +制御モジュール出力に関する診断情報を、自車位置と現在の運動学的情報を公開します。 -## Evaluated metrics +## 評価メトリクス -The control evaluator uses the metrics defined in `include/autoware/control_evaluator/metrics/deviation_metrics.hpp`to calculate deviations in yaw and lateral distance from the ego's set-point. The control_evaluator can also be customized to offer metrics/evaluation about other control modules. Currently, the control_evaluator offers a simple diagnostic output based on the autonomous_emergency_braking node's output, but this functionality can be extended to evaluate other control modules' performance. +制御評価器は、`include/autoware/control_evaluator/metrics/deviation_metrics.hpp` で定義されたメトリクスを使用して、自車基準点からのヨー方向および横方向距離の逸脱量を計算します。制御評価器は、他の制御モジュールのメトリクスや評価を提供するようにカスタマイズすることもできます。現在、制御評価器は autonomous_emergency_braking ノードの出力に基づいて簡単な診断出力を提供していますが、この機能を拡張して他の制御モジュールの性能を評価できます。 -## Kinematics output +## 運動学的出力 -The control evaluator module also constantly publishes information regarding the ego vehicle's kinematics and position. It publishes the current ego lane id with the longitudinal `s` and lateral `t` arc coordinates. It also publishes the current ego speed, acceleration and jerk in its diagnostic messages. +制御評価器モジュールは、自車の運動学的および位置に関する情報を絶えず公開します。経路弧補正座標の縦方向 `s` と横方向 `t` を使用して、現在の自車レーン ID を公開します。また、現在の自車の速度、加速度、ジャークを診断メッセージで公開します。 + +この情報は、他のノードが ROSbag を使用した自動評価を実行するために使用できます。自車位置と運動学的情報を評価された制御モジュールの出力と照合することで、ROSbag 再現の特定の興味深いポイントにおいて評価された制御モジュールが適切に対応したかどうかを判断できます。 -This information can be used by other nodes to establish automated evaluation using rosbags: by crosschecking the ego position and kinematics with the evaluated control module's output, it is possible to judge if the evaluated control modules reacted in a satisfactory way at certain interesting points of the rosbag reproduction. diff --git a/evaluator/autoware_evaluator_utils/README.md b/evaluator/autoware_evaluator_utils/README.md index b0db86f86b5c0..16e202b58bd0e 100644 --- a/evaluator/autoware_evaluator_utils/README.md +++ b/evaluator/autoware_evaluator_utils/README.md @@ -1,5 +1,6 @@ -# Evaluator Utils +# エバリュエータユーティル -## Purpose +## 目的 + +このパッケージは、他のエバリュエータパッケージ向けのユーティリティ関数を提供します。 -This package provides utils functions for other evaluator packages diff --git a/evaluator/autoware_planning_evaluator/README.md b/evaluator/autoware_planning_evaluator/README.md index d03603e51351a..5dc7cc7456071 100644 --- a/evaluator/autoware_planning_evaluator/README.md +++ b/evaluator/autoware_planning_evaluator/README.md @@ -1,88 +1,80 @@ # Planning Evaluator -## Purpose +## 目的 -This package provides nodes that generate metrics to evaluate the quality of planning and control. +このパッケージは、プランニングと制御の品質を評価するためのメトリクスを生成するノードを提供します。 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -The evaluation node calculates metrics each time it receives a trajectory `T(0)`. -Metrics are calculated using the following information: +評価ノードは、軌道 `T(0)`を受信するたびにメトリクスを計算します。メトリクスは、以下の情報を使用して計算されます。 -- the trajectory `T(0)` itself. -- the previous trajectory `T(-1)`. -- the _reference_ trajectory assumed to be used as the reference to plan `T(0)`. -- the current ego pose. -- the set of objects in the environment. +- 軌道 `T(0)` 自体 +- 前回の軌道 `T(-1)` +- `T(0)` のプランニング時に参照と想定された _参照_ 軌道 +- 自車位置 +- 環境内のオブジェクトのセット -These information are maintained by an instance of class `MetricsCalculator` -which is also responsible for calculating metrics. +これらの情報は、`MetricsCalculator` クラスのインスタンスによって管理され、メトリクスの計算も担当しています。 -### Stat +### スタット -Each metric is calculated using a `Stat` instance which contains -the minimum, maximum, and mean values calculated for the metric -as well as the number of values measured. +各メトリクスは、`Stat` インスタンスを使用して計算されます。`Stat` インスタンスには、メトリクスに対して計算された最小値、最大値、平均値、および測定された値の数が含まれます。 -### Metric calculation and adding more metrics +### メトリクスの計算と追加メトリクスの追加 -All possible metrics are defined in the `Metric` enumeration defined -`include/planning_evaluator/metrics/metric.hpp`. -This file also defines conversions from/to string as well as human readable descriptions -to be used as header of the output file. +考えられるすべてのメトリクスは、`include/planning_evaluator/metrics/metric.hpp` で定義された `Metric` 列挙体で定義されています。このファイルでは、文字列との変換と、出力ファイルのヘッダーとして使用される人間が読める説明も定義されています。 + +`MetricsCalculator` は、以下の関数を呼び出すことでメトリクス統計を計算します。 -The `MetricsCalculator` is responsible for calculating metric statistics -through calls to function: ```C++ Stat MetricsCalculator::calculate(const Metric metric, const Trajectory & traj) const; ``` -Adding a new metric `M` requires the following steps: +新しい指標 `M` を追加するには次の手順が必要です。 + +- `metrics/metric.hpp`: `M` を `enum`、文字列変換マップ、説明マップに追加します。 +- `metrics_calculator.cpp`: `calculate` 関数の `switch/case` ステートメントに `M` を追加します。 +- `selected_metrics` パラメータに `M` を追加します。 -- `metrics/metric.hpp`: add `M` to the `enum`, to the from/to string conversion maps, and to the description map. -- `metrics_calculator.cpp`: add `M` to the `switch/case` statement of the `calculate` function. -- Add `M` to the `selected_metrics` parameters. +## 入出力 -## Inputs / Outputs +### 入力 -### Inputs +**自動運転ソフトウェア ドキュメント(日本語訳)** -| Name | Type | Description | -| ------------------------------ | ------------------------------------------------- | ------------------------------------------------- | -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | Main trajectory to evaluate | -| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | Reference trajectory to use for deviation metrics | -| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | Obstacles | +| 名前 | 型 | 説明 | +|---|---|---| +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 評価するメインのPlanning | +| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 逸脱量の測定に使用する基準Planning | +| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 障害物 | -### Outputs +### 出力 -Each metric is published on a topic named after the metric name. +各メトリックは、メトリック名にちなんだトピックで公開されます。 -| Name | Type | Description | -| ----------- | --------------------------------------- | ------------------------------------------------------- | -| `~/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | DiagnosticArray with a DiagnosticStatus for each metric | +| 名称 | 種別 | 説明 | +| ----------- | --------------------------------------- | ----------------------------------------------------- | +| `~/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | メトリックごとのDiagnosticStatusを持つDiagnosticArray | -When shut down, the evaluation node writes the values of the metrics measured during its lifetime -to a file as specified by the `output_file` parameter. +シャットダウンされると、評価ノードは有効期間中に測定されたメトリクスの値を `output_file` パラメーターで指定されたファイルに書き込みます。 -## Parameters +## パラメーター {{ json_to_markdown("evaluator/autoware_planning_evaluator/schema/autoware_planning_evaluator.schema.json") }} -## Assumptions / Known limits +## 仮定/既知の制限 + +次の点を強く想定しています。トラジェクトリ `T(0)` を受信するとき、それは最後に受信した基準トラジェクトリとオブジェクトを使用して生成されていること。`T(0)` が計算されている間に新しい基準トラジェクトリまたはオブジェクトがパブリッシュされると、これは不適切になる可能性があります。 -There is a strong assumption that when receiving a trajectory `T(0)`, -it has been generated using the last received reference trajectory and objects. -This can be wrong if a new reference trajectory or objects are published while `T(0)` is being calculated. +精度は現在、トラジェクトリの解像度に制限されています。トラジェクトリと基準トラジェクトリを内挿して精度を向上させることはできますが、計算が大幅に高価になります。 -Precision is currently limited by the resolution of the trajectories. -It is possible to interpolate the trajectory and reference trajectory to increase precision but would make computation significantly more expensive. +## 将来的な拡張機能/実装されていない部分 -## Future extensions / Unimplemented parts +- 基準トラジェクトリとして `Route` または `Path` メッセージを使用します。 +- RSS メトリクス (別のノードで完了 )。 +- `min` と `max` メトリクス値をパブリッシュするオプションを追加します。現時点では `mean` 値のみがパブリッシュされます。 +- `motion_evaluator_node`。 + - エゴの実際の動作から時間の経過に伴ってトラジェクトリを構築するノード。 + - 現在実装されているのは概念実証のみです。 -- Use `Route` or `Path` messages as reference trajectory. -- RSS metrics (done in another node ). -- Add option to publish the `min` and `max` metric values. For now only the `mean` value is published. -- `motion_evaluator_node`. - - Node which constructs a trajectory over time from the real motion of ego. - - Only a proof of concept is currently implemented. diff --git a/evaluator/diagnostic_converter/README.md b/evaluator/diagnostic_converter/README.md index adc84c3967d25..8b0053213e3b8 100644 --- a/evaluator/diagnostic_converter/README.md +++ b/evaluator/diagnostic_converter/README.md @@ -1,53 +1,51 @@ -# Planning Evaluator +# 計画評価器 -## Purpose +## 目的 -This package provides a node to convert `diagnostic_msgs::msg::DiagnosticArray` messages -into `tier4_simulation_msgs::msg::UserDefinedValue` messages. +このパッケージは、`diagnostic_msgs::msg::DiagnosticArray` メッセージを `tier4_simulation_msgs::msg::UserDefinedValue` メッセージに変換するノードを提供します。 -## Inner-workings / Algorithms +## 内部処理/アルゴリズム -The node subscribes to all topics listed in the parameters and assumes they publish -`DiagnosticArray` messages. -Each time such message is received, -it is converted into as many `UserDefinedValue` messages as the number of `KeyValue` objects. -The format of the output topic is detailed in the _output_ section. +このノードは、パラメータにリストされたすべてのトピックを購読し、それらが `DiagnosticArray` メッセージを発行すると想定します。 +そのようなメッセージが受信されるたびに、`KeyValue` オブジェクトの数と同じ数の `UserDefinedValue` メッセージに変換されます。 +出力トピックの形式は「出力」セクションで詳細に説明します。 -## Inputs / Outputs +## インプット/アウトプット -### Inputs +### インプット -The node listens to `DiagnosticArray` messages on the topics specified in the parameters. +このノードは、パラメータで指定されたトピックの `DiagnosticArray` メッセージをリッスンします。 -### Outputs +### アウトプット -The node outputs `UserDefinedValue` messages that are converted from the received `DiagnosticArray`. +このノードは、受信した `DiagnosticArray` から変換された `UserDefinedValue` メッセージを出力します。 -The name of the output topics are generated from the corresponding input topic, the name of the diagnostic status, and the key of the diagnostic. -For example, we might listen to topic `/diagnostic_topic` and receive a `DiagnosticArray` with 2 status: +出力トピック名は、対応するインプットトピック、診断ステータスの名前、および診断のキーから生成されます。 +たとえば、`/diagnostic_topic` トピックをリッスンし、2 つのステータスを持つ `DiagnosticArray` を受信する場合があります。 -- Status with `name: "x"`. - - Key: `a`. - - Key: `b`. -- Status with `name: "y"`. - - Key: `a`. - - Key: `c`. +- ステータス `name: "x"`. + - キー: `a`. + - キー: `b`. +- ステータス `name: "y"`. + - キー: `a`. + - キー: `c`. -The resulting topics to publish the `UserDefinedValue` are as follows: +`UserDefinedValue` をパブリッシュするための結果的なトピックは次のとおりです。 - `/metrics_x_a`. - `/metrics_x_b`. - `/metrics_y_a`. - `/metrics_y_c`. -## Parameters +## パラメータ -| Name | Type | Description | +| 名前 | 型 | 説明 | | :------------------ | :--------------- | :------------------------------------------------------------ | -| `diagnostic_topics` | list of `string` | list of DiagnosticArray topics to convert to UserDefinedValue | +| `diagnostic_topics` | 文字列のリスト | UserDefinedValueに変換するDiagnosticArrayトピックのリスト | -## Assumptions / Known limits +## 想定 / 既知の制限 -Values in the `KeyValue` objects of a `DiagnosticStatus` are assumed to be of type `double`. +`DiagnosticStatus` の `KeyValue` オブジェクト内の値は、`double` 型であると想定されています。 + +## 将来の拡張 / 未実装部分 -## Future extensions / Unimplemented parts diff --git a/evaluator/kinematic_evaluator/README.md b/evaluator/kinematic_evaluator/README.md index 7cc826195c1b4..e99a7ab2cbc49 100644 --- a/evaluator/kinematic_evaluator/README.md +++ b/evaluator/kinematic_evaluator/README.md @@ -1,7 +1,8 @@ -# Kinematic Evaluator +# キネマティクス評価器 TBD -## Parameters +## パラメータ {{json_to_markdown("evaluator/kinematic_evaluator/schema/kinematic_evaluator.schema.json")}} + diff --git a/evaluator/localization_evaluator/README.md b/evaluator/localization_evaluator/README.md index 18d887e075be1..ec00e67ac6a11 100644 --- a/evaluator/localization_evaluator/README.md +++ b/evaluator/localization_evaluator/README.md @@ -1,7 +1,8 @@ -# Localization Evaluator +## 位置推定評価器 -The Localization Evaluator evaluates the performance of the localization system and provides metrics +位置推定評価器は位置推定システムのパフォーマンスを評価し、メトリクスを提供します。 -## Parameters +## パラメーター + +{{ json_to_markdown("evaluator/localization_evaluator/schema/localization_evaluator.schema.json", "ja") }} -{{ json_to_markdown("evaluator/localization_evaluator/schema/localization_evaluator.schema.json") }} diff --git a/evaluator/perception_online_evaluator/README.md b/evaluator/perception_online_evaluator/README.md index 7df375ac236d0..2e4372d1c0b9a 100644 --- a/evaluator/perception_online_evaluator/README.md +++ b/evaluator/perception_online_evaluator/README.md @@ -1,14 +1,14 @@ # Perception Evaluator -A node for evaluating the output of perception systems. +知覚システムの出力評価用ノードです。 -## Purpose +## 目的 -This module allows for the evaluation of how accurately perception results are generated without the need for annotations. It is capable of confirming performance and can evaluate results from a few seconds prior, enabling online execution. +このモジュールでは、アノテーションなしで知覚結果がどれだけ正確に生成されているかを評価できます。性能を確認でき、数秒前の結果を評価してオンライン実行を可能にします。 -## Inner-workings / Algorithms +## 仕組み / アルゴリズム -The evaluated metrics are as follows: +評価されるメトリクスは次のとおりです。 - predicted_path_deviation - predicted_path_deviation_variance @@ -19,12 +19,12 @@ The evaluated metrics are as follows: - average_objects_count - interval_objects_count -### Predicted Path Deviation / Predicted Path Deviation Variance +### predicted_path_deviation / predicted_path_deviation_variance -Compare the predicted path of past objects with their actual traveled path to determine the deviation for **MOVING OBJECTS**. For each object, calculate the mean distance between the predicted path points and the corresponding points on the actual path, up to the specified time step. In other words, this calculates the Average Displacement Error (ADE). The target object to be evaluated is the object from $T_N$ seconds ago, where $T_N$ is the maximum value of the prediction time horizon $[T_1, T_2, ..., T_N]$. +過去のオブジェクトの予測経路と実際の移動経路を比較して、**移動中のオブジェクト**の逸脱量を算出します。各オブジェクトについて、予測経路のポイントと実際の経路の対応するポイント間の平均距離を、指定された時間ステップまで計算します。言い換えると、平均変位誤差(ADE)を計算します。評価対象のオブジェクトは $T_N$ 秒前のオブジェクトで、$T_N$ は予測時間幅 $[T_1, T_2, ..., T_N]$ の最大値です。 > [!NOTE] -> The object from $T_N$ seconds ago is the target object for all metrics. This is to unify the time of the target object across metrics. +> $T_N$ 秒前のオブジェクトは、すべてのメトリクスで対象オブジェクトです。これは、メトリクス全体で対象オブジェクトの時間を統一するためです。 ![path_deviation_each_object](./images/path_deviation_each_object.drawio.svg) @@ -36,14 +36,14 @@ Var = \Sigma_{i=1}^{n_{points}} (d_i - ADE)^2 / n_{points} \end{align} $$ -- $n_{points}$ : Number of points in the predicted path -- $T$ : Time horizon for prediction evaluation. -- $dt$ : Time interval of the predicted path -- $d_i$ : Distance between the predicted path and the actual traveled path at path point $i$ -- $ADE$ : Mean deviation of the predicted path for the target object. -- $Var$ : Variance of the predicted path deviation for the target object. +- $n_{points}$ : 予測経路のポイント数 +- $T$ : 予測評価の時間幅。 +- $dt$ : 予測経路の時間間隔 +- $d_i$ : 経路ポイント $i$ での予測経路と実際の移動経路との距離 +- $ADE$ : 対象オブジェクトの予測経路の平均逸脱量。 +- $Var$ : 対象オブジェクトの予測経路逸脱量の分散。 -The final predicted path deviation metrics are calculated by averaging the mean deviation of the predicted path for all objects of the same class, and then calculating the mean, maximum, and minimum values of the mean deviation. +最終的な予測経路逸脱量のメトリクスは、同じクラスのすべてのオブジェクトの予測経路の平均逸脱量を平均して計算した後、その平均逸脱量の平均、最大、最小値を計算します。 ![path_deviation](./images/path_deviation.drawio.svg) @@ -55,141 +55,139 @@ ADE_{min} = min(ADE_j) \end{align} $$ -$$ -\begin{align} -Var_{mean} = \Sigma_{j=1}^{n_{objects}} Var_j / n_{objects} \\ Var_{max} = max(Var_j) \\ Var_{min} = min(Var_j) \end{align} $$ -- $n_{objects}$ : Number of objects -- $ADE_{mean}$ : Mean deviation of the predicted path through all objects -- $ADE_{max}$ : Maximum deviation of the predicted path through all objects -- $ADE_{min}$ : Minimum deviation of the predicted path through all objects -- $Var_{mean}$ : Mean variance of the predicted path deviation through all objects -- $Var_{max}$ : Maximum variance of the predicted path deviation through all objects -- $Var_{min}$ : Minimum variance of the predicted path deviation through all objects +- $n_{objects}$: オブジェクト数 +- $ADE_{mean}$: すべてのオブジェクトを通じた予測パスの平均偏差 +- $ADE_{max}$: すべてのオブジェクトを通じた予測パスの最大偏差 +- $ADE_{min}$: すべてのオブジェクトを通じた予測パスの最小偏差 +- $Var_{mean}$: すべてのオブジェクトを通じた予測パス偏差の平均分散 +- $Var_{max}$: すべてのオブジェクトを通じた予測パス偏差の最大分散 +- $Var_{min}$: すべてのオブジェクトを通じた予測パス偏差の最小分散 -The actual metric name is determined by the object class and time horizon. For example, `predicted_path_deviation_variance_CAR_5.00` +実際の指標名は、オブジェクトクラスと時間視野によって決まります。たとえば、`predicted_path_deviation_variance_CAR_5.00` -### Lateral Deviation +### 横偏差 -Calculates lateral deviation between the smoothed traveled trajectory and the perceived position to evaluate the stability of lateral position recognition for **MOVING OBJECTS**. The smoothed traveled trajectory is calculated by applying a centered moving average filter whose window size is specified by the parameter `smoothing_window_size`. The lateral deviation is calculated by comparing the smoothed traveled trajectory with the perceived position of the past object whose timestamp is $T=T_n$ seconds ago. For stopped objects, the smoothed traveled trajectory is unstable, so this metric is not calculated. +**移動オブジェクト**の安定性を評価するために、滑らかな走行軌跡と認識された位置の横偏差を計算します。滑らかな走行軌跡は、パラメータ`smoothing_window_size`で指定されたウィンドウサイズを持つ中央移動平均フィルタをかけることで計算されます。横偏差は、`T`秒前のタイムスタンプを持つ過去のオブジェクトの認識された位置と、滑らかな走行軌跡を比較することで計算されます。停止しているオブジェクトでは、滑らかな走行軌跡が不安定なため、この指標は計算されません。 ![lateral_deviation](./images/lateral_deviation.drawio.svg) -### Yaw Deviation +### ヨー偏差 -Calculates the deviation between the recognized yaw angle of an past object and the yaw azimuth angle of the smoothed traveled trajectory for **MOVING OBJECTS**. The smoothed traveled trajectory is calculated by applying a centered moving average filter whose window size is specified by the parameter `smoothing_window_size`. The yaw deviation is calculated by comparing the yaw azimuth angle of smoothed traveled trajectory with the perceived orientation of the past object whose timestamp is $T=T_n$ seconds ago. -For stopped objects, the smoothed traveled trajectory is unstable, so this metric is not calculated. +**移動オブジェクト**の過去のオブジェクトの認識されたヨー角と、滑らかな走行軌跡のヨー方位角の偏差を計算します。滑らかな走行軌跡は、パラメータ`smoothing_window_size`で指定されたウィンドウサイズを持つ中央移動平均フィルタをかけることで計算されます。ヨー偏差は、`T`秒前のタイムスタンプを持つ過去のオブジェクトの認識された向きと滑らかな走行軌跡のヨー方位角を比較することで計算されます。 +停止しているオブジェクトでは、滑らかな走行軌跡が不安定なため、この指標は計算されません。 ![yaw_deviation](./images/yaw_deviation.drawio.svg) -### Yaw Rate +### ヨーレート -Calculates the yaw rate of an object based on the change in yaw angle from the previous time step. It is evaluated for **STATIONARY OBJECTS** and assesses the stability of yaw rate recognition. The yaw rate is calculated by comparing the yaw angle of the past object with the yaw angle of the object received in the previous cycle. Here, t2 is the timestamp that is $T_n$ seconds ago. +前回のタイムステップからのヨー角の変化に基づいて、オブジェクトのヨーレートを計算します。**静止オブジェクト**で評価され、ヨーレート認識の安定性を評価します。ヨーレートは、過去のオブジェクトのヨー角と、前回のサイクルで受信されたオブジェクトのヨー角を比較することで計算されます。ここで、t2は`T_n`秒前のタイムスタンプです。 ![yaw_rate](./images/yaw_rate.drawio.svg) -### Object Counts +### オブジェクトカウント -Counts the number of detections for each object class within the specified detection range. These metrics are measured for the most recent object not past objects. +指定された検出範囲内の各オブジェクトクラスの検出数をカウントします。これらの指標は最新のオブジェクトに対して測定され、過去のオブジェクトではありません。 ![detection_counts](./images/detection_counts.drawio.svg) -In the provided illustration, the range $R$ is determined by a combination of lists of radii (e.g., $r_1, r_2, \ldots$) and heights (e.g., $h_1, h_2, \ldots$). -For example, +図では、範囲`R`は半径のリスト(例:`r_1, r_2, ...`)と高さのリスト(例:`h_1, h_2, ...`)の組み合わせによって決まります。 +たとえば、 -- the number of CAR in range $R = (r_1, h_1)$ equals 1 -- the number of CAR in range $R = (r_1, h_2)$ equals 2 -- the number of CAR in range $R = (r_2, h_1)$ equals 3 -- the number of CAR in range $R = (r_2, h_2)$ equals 4 +- 範囲の`R = (r_1, h_1)`のCARの数は1 +- 範囲の`R = (r_1, h_2)`のCARの数は2 +- 範囲の`R = (r_2, h_1)`のCARの数は3 +- 範囲の`R = (r_2, h_2)`のCARの数は4 -#### Total Object Count +#### 全オブジェクトカウント -Counts the number of unique objects for each class within the specified detection range. The total object count is calculated as follows: +指定された検出範囲内の各クラスの一意のオブジェクトの数をカウントします。全オブジェクトカウントは次のように計算されます。 $$ \begin{align} -\text{Total Object Count (Class, Range)} = \left| \bigcup_{t=0}^{T_{\text{now}}} \{ \text{uuid} \mid \text{class}(t, \text{uuid}) = C \wedge \text{position}(t, \text{uuid}) \in R \} \right| +\text{全オブジェクトカウント (クラス、範囲)} & = \left| \bigcup_{t=0}^{T_{\text{now}}} \{ \text{uuid} \mid \text{class}(t, \text{uuid}) = C \wedge \text{position}(t, \text{uuid}) \in R \} \right| \end{align} $$ -where: +ここで、 -- $\bigcup$ represents the union across all frames from $t = 0$ to $T_{\text{now}}$, which ensures that each uuid is counted only once. -- $\text{class}(t, \text{uuid}) = C$ specifies that the object with uuid at time $t$ belongs to class $C$. -- $\text{position}(t, \text{uuid}) \in R$ indicates that the object with uuid at time $t$ is within the specified range $R$. -- $\left| \{ \ldots \} \right|$ denotes the cardinality of the set, which counts the number of unique uuids that meet the class and range criteria across all considered times. +- $\bigcup$ は、$t = 0$ から $T_{\text{now}}$ までのすべてのフレームにおける結合を表し、各 uuid が一度のみカウントされるようにします。 +- $\text{class}(t, \text{uuid}) = C$ は、時刻 $t$ で uuid を持つオブジェクトがクラス $C$ に属することを示します。 +- $\text{position}(t, \text{uuid}) \in R$ は、時刻 $t$ に uuid を持つオブジェクトが指定範囲 $R$ 内にあることを示します。 +- $\left| \{ \ldots \} \right|$ は集合の濃度を示し、すべての考慮対象時間でクラスと範囲の基準を満たすすべての固有 uuid の数をカウントします。 -#### Average Object Count +#### 平均オブジェクト数 -Counts the average number of objects for each class within the specified detection range. This metric measures how many objects were detected in one frame, without considering uuids. The average object count is calculated as follows: +指定された検出範囲内の各クラスのオブジェクトの平均数をカウントします。この指標は、uuid を考慮せずに 1 フレームで検出されたオブジェクトの数を測定します。平均オブジェクト数は次のように計算されます。 $$ \begin{align} -\text{Average Object Count (Class, Range)} = \frac{1}{N} \sum_{t=0}^{T_{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| +\text{平均オブジェクト数(クラス、範囲)} = \frac{1}{N} \sum_{t=0}^{T_{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| \end{align} $$ -where: +ここで、 -- $N$ represents the total number of frames within the time period time to $T\_{\text{now}}$ (it is precisely `detection_count_purge_seconds`) -- $text{object}$ denotes the number of objects that meet the class and range criteria at time $t$. +- $N$ は時間間隔 $T\_{\text{now}}$ までのフレームの総数を表します(正確には `detection_count_purge_seconds`)。 +- $text{object}$ は、時刻 $t$ でクラスと範囲の基準を満たすオブジェクトの数を表します。 -#### Interval Object Count +#### 区間オブジェクト数 -Counts the average number of objects for each class within the specified detection range over the last `objects_count_window_seconds`. This metric measures how many objects were detected in one frame, without considering uuids. The interval object count is calculated as follows: +最後の `objects_count_window_seconds` において、指定された検出範囲内の各クラスのオブジェクトの平均数をカウントします。この指標は、uuid を考慮せずに 1 フレームで検出されたオブジェクトの数を測定します。区間オブジェクト数は次のように計算されます。 $$ \begin{align} -\text{Interval Object Count (Class, Range)} = \frac{1}{W} \sum_{t=T_{\text{now}} - T_W}^{T_{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| +\text{区間オブジェクト数(クラス、範囲)} = \frac{1}{W} \sum_{t=T_{\text{now}} - T_W}^{T_{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| \end{align} $$ -where: +ここで、 -- $W$ represents the total number of frames within the last `objects_count_window_seconds`. -- $T_W$ represents the time window `objects_count_window_seconds` +- $W$ は最後の `objects_count_window_seconds` 内のフレームの総数を表します。 +- $T_W$ は時間窓 `objects_count_window_seconds` を表します。 -## Inputs / Outputs +## 入出力 -| Name | Type | Description | -| ----------------- | ------------------------------------------------- | ------------------------------------------------- | -| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | The predicted objects to evaluate. | -| `~/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | Diagnostic information about perception accuracy. | -| `~/markers` | `visualization_msgs::msg::MarkerArray` | Visual markers for debugging and visualization. | +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------------------------------- | ----------------------------------------------- | +| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 評価する予測オブジェクト | +| `~/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | 知覚精度の診断情報 | +| `~/markers` | `visualization_msgs::msg::MarkerArray` | デバッグと視覚化のためのビジュアルマーカー | -## Parameters +## パラメータ -| Name | Type | Description | +| 名称 | 型 | 説明 | | ------------------------------------------------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `selected_metrics` | List | Metrics to be evaluated, such as lateral deviation, yaw deviation, and predicted path deviation. | -| `smoothing_window_size` | Integer | Determines the window size for smoothing path, should be an odd number. | -| `prediction_time_horizons` | list[double] | Time horizons for prediction evaluation in seconds. | -| `stopped_velocity_threshold` | double | threshold velocity to check if vehicle is stopped | -| `detection_radius_list` | list[double] | Detection radius for objects to be evaluated.(used for objects count only) | -| `detection_height_list` | list[double] | Detection height for objects to be evaluated. (used for objects count only) | -| `detection_count_purge_seconds` | double | Time window for purging object detection counts. | -| `objects_count_window_seconds` | double | Time window for keeping object detection counts. The number of object detections within this time window is stored in `detection_count_vector_` | -| `target_object.*.check_lateral_deviation` | bool | Whether to check lateral deviation for specific object types (car, truck, etc.). | -| `target_object.*.check_yaw_deviation` | bool | Whether to check yaw deviation for specific object types (car, truck, etc.). | -| `target_object.*.check_predicted_path_deviation` | bool | Whether to check predicted path deviation for specific object types (car, truck, etc.). | -| `target_object.*.check_yaw_rate` | bool | Whether to check yaw rate for specific object types (car, truck, etc.). | -| `target_object.*.check_total_objects_count` | bool | Whether to check total object count for specific object types (car, truck, etc.). | -| `target_object.*.check_average_objects_count` | bool | Whether to check average object count for specific object types (car, truck, etc.). | -| `target_object.*.check_interval_average_objects_count` | bool | Whether to check interval average object count for specific object types (car, truck, etc.). | -| `debug_marker.*` | bool | Debugging parameters for marker visualization (history path, predicted path, etc.). | - -## Assumptions / Known limits - -It is assumed that the current positions of PredictedObjects are reasonably accurate. - -## Future extensions / Unimplemented parts - -- Increase rate in recognition per class -- Metrics for objects with strange physical behavior (e.g., going through a fence) -- Metrics for splitting objects -- Metrics for problems with objects that are normally stationary but move -- Disappearing object metrics +| `selected_metrics` | リスト | 横逸脱量、ヨー逸脱量、予測経路逸脱量などの評価する指標。 | +| `smoothing_window_size` | 整数 | 経路の平滑化のためのウィンドウサイズを決定し、奇数にする必要があります。 | +| `prediction_time_horizons` | doubleリスト | 秒単位の予測評価のためのタイムホライゾン。 | +| `stopped_velocity_threshold` | double | 車両の停止を確認するためのしきい値速度。 | +| `detection_radius_list` | doubleリスト | 評価対象のオブジェクトの検出半径。(オブジェクトカウント専用) | +| `detection_height_list` | doubleリスト | 評価対象のオブジェクトの検出高さ。(オブジェクトカウント専用) | +| `detection_count_purge_seconds` | double | オブジェクト検出カウントを削除するためのタイムウィンドウ。 | +| `objects_count_window_seconds` | double | オブジェクト検出カウントを保持するためのタイムウィンドウ。このタイムウィンドウ内のオブジェクト検出数は `detection_count_vector_` に保存されます。 | +| `target_object.*.check_lateral_deviation` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の横逸脱を確認するかどうか。 | +| `target_object.*.check_yaw_deviation` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)のヨー逸脱を確認するかどうか。 | +| `target_object.*.check_predicted_path_deviation` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の予測経路逸脱を確認するかどうか。 | +| `target_object.*.check_yaw_rate` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)のヨーレートを確認するかどうか。 | +| `target_object.*.check_total_objects_count` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の合計オブジェクト数をチェックするかどうか。 | +| `target_object.*.check_average_objects_count` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の平均オブジェクト数をチェックするかどうか。 | +| `target_object.*.check_interval_average_objects_count` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の区間平均オブジェクト数をチェックするかどうか。 | +| `debug_marker.*` | ブール値 | マーカー可視化(履歴パス、予測パスなど)のデバッグパラメーター。 | + +## 仮定 / 既知の制限 + +予測オブジェクトの現在の位置は、おおむね正確であると想定されています。 + +## 将来の拡張 / 未実装部分 + +- クラスごとの認識率を向上 +- 異常な物理的挙動を示すオブジェクトのメトリクス(例:フェンスを突き抜ける) +- オブジェクトの分割に対するメトリクス +- 通常は静止しているが移動するオブジェクトに対するメトリクス +- 消滅したオブジェクトのメトリクス + diff --git a/launch/tier4_autoware_api_launch/README.md b/launch/tier4_autoware_api_launch/README.md index 2b3d6fc032d65..8200943511c40 100644 --- a/launch/tier4_autoware_api_launch/README.md +++ b/launch/tier4_autoware_api_launch/README.md @@ -1,21 +1,23 @@ # tier4_autoware_api_launch -## Description +## 概要 -This package contains launch files that run nodes to convert Autoware internal topics into consistent API used by external software (e.g., fleet management system, simulator). +このパッケージには、Autoware内部トピックを外部ソフトウェア(例:フリート管理システム、シミュレーター)で使用される一貫したAPIに変換するノードを実行する起動ファイルが含まれています。 -## Package Dependencies +## パッケージの依存関係 -Please see `` in `package.xml`. +`package.xml`の``を参照してください。 -## Usage +## 使用方法 + +`autoware_api.launch.xml`を使用するには、以下のように`*.launch.xml`に含めることができます。 -You can include as follows in `*.launch.xml` to use `autoware_api.launch.xml`. ```xml ``` -## Notes +## 注意 + +処理負荷を軽減するため、ROS 2 の [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) 機能(ROS 1 の Nodelet に類似)を使用しています。 -For reducing processing load, we use the [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) feature in ROS 2 (similar to Nodelet in ROS 1 ) diff --git a/launch/tier4_control_launch/README.md b/launch/tier4_control_launch/README.md index 939b45626f3c5..74cdde685fd7a 100644 --- a/launch/tier4_control_launch/README.md +++ b/launch/tier4_control_launch/README.md @@ -1,18 +1,19 @@ # tier4_control_launch -## Structure +## 構造 ![tier4_control_launch](./control_launch.drawio.svg) -## Package Dependencies +## パッケージ依存関係 -Please see `` in `package.xml`. +`` の詳細については `package.xml` を参照してください。 -## Usage +## 使用方法 -You can include as follows in `*.launch.xml` to use `control.launch.py`. +`control.launch.py` を `*.launch.xml` に含めるには、以下のように記述します。 + +`PACKAGE_param_path` としてパラメータパスを設定する必要があります。設定するパラメータパスのリストは `planning.launch.xml` の先頭に記載されています。 -Note that you should provide parameter paths as `PACKAGE_param_path`. The list of parameter paths you should provide is written at the top of `planning.launch.xml`. ```xml @@ -25,6 +26,7 @@ Note that you should provide parameter paths as `PACKAGE_param_path`. The list o ``` -## Notes +## 注釈 + +処理負荷を削減するため、ROS 2における[Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html)の機能(ROS 1におけるNodeletに類似)を使用します。 -For reducing processing load, we use the [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) feature in ROS 2 (similar to Nodelet in ROS 1 ) diff --git a/launch/tier4_localization_launch/README.md b/launch/tier4_localization_launch/README.md index 89d044330b0bd..a864823d36ee6 100644 --- a/launch/tier4_localization_launch/README.md +++ b/launch/tier4_localization_launch/README.md @@ -1,20 +1,21 @@ # tier4_localization_launch -## Structure +## 構造 ![tier4_localization_launch](./localization_launch.drawio.svg) -## Package Dependencies +## パッケージ依存関係 -Please see `` in `package.xml`. +`package.xml`の``を参照してください。 -## Usage +## 使用方法 -Include `localization.launch.xml` in other launch files as follows. +`localization.launch.xml`を他の`launch`ファイルに次のように含めます。 -You can select which methods in localization to launch as `pose_estimator` or `twist_estimator` by specifying `pose_source` and `twist_source`. +`pose_source`と`twist_source`を指定して、位置推定または速度推定のロカライゼーション方式を選択できます。 + +さらに、`PACKAGE_param_path`としてパラメータのパスを提供する必要があります。提供する必要のあるパラメータパスのリストは、`localization.launch.xml`の先頭に記載されています。 -In addition, you should provide parameter paths as `PACKAGE_param_path`. The list of parameter paths you should provide is written at the top of `localization.launch.xml`. ```xml @@ -28,3 +29,4 @@ In addition, you should provide parameter paths as `PACKAGE_param_path`. The lis ... ``` + diff --git a/launch/tier4_map_launch/README.md b/launch/tier4_map_launch/README.md index 904f20f3a744b..872e5f5f050e3 100644 --- a/launch/tier4_map_launch/README.md +++ b/launch/tier4_map_launch/README.md @@ -1,18 +1,19 @@ # tier4_map_launch -## Structure +## 構造 ![tier4_map_launch](./map_launch.drawio.svg) -## Package Dependencies +## パッケージ依存関係 -Please see `` in `package.xml`. +``を参照してください。 -## Usage +## 使用法 -You can include as follows in `*.launch.xml` to use `map.launch.py`. +`*.launch.xml` で以下のように記載して `map.launch.py` を使用できます。 + +`PACKAGE_param_path` としてパラメータパスを提供する必要があることに注意してください。提供する必要があるパラメータパスのリストは、`map.launch.xml` の最上部に記載されています。 -Note that you should provide parameter paths as `PACKAGE_param_path`. The list of parameter paths you should provide is written at the top of `map.launch.xml`. ```xml @@ -30,6 +31,7 @@ Note that you should provide parameter paths as `PACKAGE_param_path`. The list o ``` -## Notes +## 注釈 + +処理負荷を軽減するために、ROS 2 の [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) 機能を使用しています(ROS 1 の Nodelet と同様)。 -For reducing processing load, we use the [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) feature in ROS 2 (similar to Nodelet in ROS 1 ) diff --git a/launch/tier4_perception_launch/README.md b/launch/tier4_perception_launch/README.md index 6877e66bef7f5..a2826996bbc9c 100644 --- a/launch/tier4_perception_launch/README.md +++ b/launch/tier4_perception_launch/README.md @@ -1,18 +1,19 @@ # tier4_perception_launch -## Structure +## 構造 ![tier4_perception_launch](./perception_launch.drawio.svg) -## Package Dependencies +## パッケージの依存関係 -Please see `` in `package.xml`. +`` を `package.xml` で参照してください。 -## Usage +## 使用方法 -You can include as follows in `*.launch.xml` to use `perception.launch.xml`. +`perception.launch.xml` を使用するには、次のように `*.launch.xml` に含めます。 + +パラメータパスを `PACKAGE_param_path` として指定する必要があることに注意してください。指定する必要のあるパラメータパスのリストは、`perception.launch.xml` の先頭部に記載されています。 -Note that you should provide parameter paths as `PACKAGE_param_path`. The list of parameter paths you should provide is written at the top of `perception.launch.xml`. ```xml @@ -25,3 +26,4 @@ Note that you should provide parameter paths as `PACKAGE_param_path`. The list o ... ``` + diff --git a/launch/tier4_planning_launch/README.md b/launch/tier4_planning_launch/README.md index 392e324d71eb6..0e709db504f44 100644 --- a/launch/tier4_planning_launch/README.md +++ b/launch/tier4_planning_launch/README.md @@ -1,16 +1,17 @@ # tier4_planning_launch -## Structure +## 構成 ![tier4_planning_launch](./planning_launch.drawio.svg) -## Package Dependencies +## パッケージの依存関係 -Please see `` in `package.xml`. +`package.xml`の``を参照してください。 -## Usage +## 用法 + +パラメータのパスを`PACKAGE_param_path`として指定する必要があることに注意してください。指定する必要のあるパラメータのパスは`planning.launch.xml`の先頭で記載されています。 -Note that you should provide parameter paths as `PACKAGE_param_path`. The list of parameter paths you should provide is written at the top of `planning.launch.xml`. ```xml @@ -20,3 +21,4 @@ Note that you should provide parameter paths as `PACKAGE_param_path`. The list o ... ``` + diff --git a/launch/tier4_sensing_launch/README.md b/launch/tier4_sensing_launch/README.md index b07582b53bb56..91b6091b7274a 100644 --- a/launch/tier4_sensing_launch/README.md +++ b/launch/tier4_sensing_launch/README.md @@ -1,16 +1,17 @@ # tier4_sensing_launch -## Structure +## 構成 ![tier4_sensing_launch](./sensing_launch.drawio.svg) -## Package Dependencies +## パッケージの依存関係 -Please see `` in `package.xml`. +`` の `` を参照してください。 -## Usage +## 使用方法 + +`sensing.launch.xml` を使用するには、`*.launch.xml` に以下のように含めることができます。 -You can include as follows in `*.launch.xml` to use `sensing.launch.xml`. ```xml @@ -21,9 +22,10 @@ You can include as follows in `*.launch.xml` to use `sensing.launch.xml`. ``` -## Launch Directory Structure +## 起動画構成 + +このパッケージは、`launch`で指定されたセンサーモデルのセンサー設定を見つけます。 -This package finds sensor settings of specified sensor model in `launch`. ```bash launch/ @@ -36,12 +38,14 @@ launch/ ... ``` -## Notes +## 注釈 -This package finds settings with variables. +このパッケージは、変数を使用した設定を見つけます。 + +例) -ex.) ```xml ``` + diff --git a/launch/tier4_simulator_launch/README.md b/launch/tier4_simulator_launch/README.md index 5fbefea115031..32b6385163e68 100644 --- a/launch/tier4_simulator_launch/README.md +++ b/launch/tier4_simulator_launch/README.md @@ -1,14 +1,15 @@ # tier4_simulator_launch -## Structure +## 構成 ![tier4_simulator_launch](./simulator_launch.drawio.svg) -## Package Dependencies +## パッケージ依存関係 -Please see `` in `package.xml`. +詳細については、`package.xml` の `` を参照してください。 + +## 使用方法 -## Usage ```xml @@ -17,4 +18,5 @@ Please see `` in `package.xml`. ``` -The simulator model used in simple_planning_simulator is loaded from "config/simulator_model.param.yaml" in the "`VEHICLE_MODEL`\_description" package. +simple\_planning\_simulator で使用されるシミュレータ モデルは、パッケージ "`VEHICLE\_MODEL`\_description" の "config/simulator\_model.param.yaml" からロードされています。 + diff --git a/launch/tier4_system_launch/README.md b/launch/tier4_system_launch/README.md index 440843bf1c3f5..f162936079072 100644 --- a/launch/tier4_system_launch/README.md +++ b/launch/tier4_system_launch/README.md @@ -1,16 +1,17 @@ # tier4_system_launch -## Structure +## 構造 ![tier4_system_launch](./system_launch.drawio.svg) -## Package Dependencies +## パッケージ依存 -Please see `` in `package.xml`. +`package.xml` に含まれる `` を参照してください。 -## Usage +## 使い方 + +パラメータパスを `PACKAGE_param_path` として指定する必要があります。必要となるパラメータパスのリストは `system.launch.xml` の先頭に記述されています。 -Note that you should provide parameter paths as `PACKAGE_param_path`. The list of parameter paths you should provide is written at the top of `system.launch.xml`. ```xml @@ -23,3 +24,4 @@ Note that you should provide parameter paths as `PACKAGE_param_path`. The list o ... ``` + diff --git a/launch/tier4_vehicle_launch/README.md b/launch/tier4_vehicle_launch/README.md index 3857ce4e4e951..9453c5118a7da 100644 --- a/launch/tier4_vehicle_launch/README.md +++ b/launch/tier4_vehicle_launch/README.md @@ -1,16 +1,17 @@ # tier4_vehicle_launch -## Structure +## 構成 ![tier4_vehicle_launch](./vehicle_launch.drawio.svg) -## Package Dependencies +## パッケージの依存関係 -Please see `` in `package.xml`. +`` in `package.xml` をご参照ください。 -## Usage +## 使用方法 + +`*.launch.xml` に次のように含めることで、`vehicle.launch.xml` を使用できます。 -You can include as follows in `*.launch.xml` to use `vehicle.launch.xml`. ```xml @@ -22,32 +23,35 @@ You can include as follows in `*.launch.xml` to use `vehicle.launch.xml`. ``` -## Notes +## 注釈 + +このパッケージは変数やパッケージ名でいくつかの外部パッケージや設定を検出します。 -This package finds some external packages and settings with variables and package names. +例) -ex.) ```xml ``` + ```xml ``` ## vehicle.xacro -### Arguments +### 引数 -| Name | Type | Description | Default | +| 名称 | タイプ | 説明 | デフォルト | | ------------- | ------ | ------------------ | ------- | -| sensor_model | String | sensor model name | "" | -| vehicle_model | String | vehicle model name | "" | +| sensor_model | 文字列 | センサーモデル名 | 空文字 | +| vehicle_model | 文字列 | 車両モデル名 | 空文字 | -### Usage +### 使用方法 + +`*.launch.xml`に次のように記述できます。 -You can write as follows in `*.launch.xml`. ```xml @@ -59,3 +63,4 @@ You can write as follows in `*.launch.xml`. ``` + diff --git a/localization/autoware_ekf_localizer/README.md b/localization/autoware_ekf_localizer/README.md index fb367e5b42286..25e81b2327036 100644 --- a/localization/autoware_ekf_localizer/README.md +++ b/localization/autoware_ekf_localizer/README.md @@ -1,24 +1,24 @@ -# Overview +# 概要 -The **Extend Kalman Filter Localizer** estimates robust and less noisy robot pose and twist by integrating the 2D vehicle dynamics model with input ego-pose and ego-twist messages. The algorithm is designed especially for fast-moving robots such as autonomous driving systems. +**拡張カルマンフィルタローカライザー**は、2D車両力学モデルを入力エゴポーズとエゴツイストメッセージと統合して、堅牢でより少ないノイズを持つロボットのポーズと捻じれを推定します。このアルゴリズムは、自律走行システムなどの高速移動ロボットのために特別に設計されています。 -## Flowchart +## フローチャート -The overall flowchart of the autoware_ekf_localizer is described below. +autoware_ekf_localizerの全体的なフローチャートを以下に示します。

-## Features +## 機能 -This package includes the following features: +このパッケージには、次の機能があります。 -- **Time delay compensation** for input messages, which enables proper integration of input information with varying time delays. This is important especially for high-speed moving robots, such as autonomous driving vehicles. (see the following figure). -- **Automatic estimation of yaw bias** prevents modeling errors caused by sensor mounting angle errors, which can improve estimation accuracy. -- **Mahalanobis distance gate** enables probabilistic outlier detection to determine which inputs should be used or ignored. -- **Smooth update**, the Kalman Filter measurement update is typically performed when a measurement is obtained, but it can cause large changes in the estimated value, especially for low-frequency measurements. Since the algorithm can consider the measurement time, the measurement data can be divided into multiple pieces and integrated smoothly while maintaining consistency (see the following figure). -- **Calculation of vertical correction amount from pitch** mitigates localization instability on slopes. For example, when going uphill, it behaves as if it is buried in the ground (see the left side of the "Calculate delta from pitch" figure) because EKF only considers 3DoF(x,y,yaw). Therefore, EKF corrects the z-coordinate according to the formula (see the right side of the "Calculate delta from pitch" figure). +- **タイム遅延補償**入力メッセージに対して、さまざまな遅延時間で入力情報を適切に統合できます。これは、自動運転車などの高速で移動するロボットでは特に重要です(次の図を参照)。 +- **ヨーバイアスの自動推定**センサー取り付け角度の誤差によるモデリングエラーを防ぎ、推定精度を向上させることができます。 +- **マハラノビス距離ゲート**確率的な外れ値検出を可能にし、使用する入力と無視する入力を判断できます。 +- **スムーズな更新**カルマンフィルタの測定値更新は通常、測定値を取得したときに実行されますが、特に低周波測定値の場合、推定値に大きな変化をもたらす可能性があります。このアルゴリズムは測定時間を考慮できるため、測定データは複数の部分に分割し、一貫性を維持しながらスムーズに統合できます(次の図を参照)。 +- **ピッチからの垂直訂正量の計算**勾配でのローカライゼーションの不安定性を軽減します。たとえば、上り坂では、EKFは3自由度(x、y、ヨー)のみを考慮するため、まるで地面に埋もれているかのように動作します(「ピッチからのデルタの計算」図の左側を参照)。したがって、EKFは公式に従ってz座標を修正します(「ピッチからのデルタの計算」図の右側を参照)。

@@ -32,114 +32,112 @@ This package includes the following features:

-## Node +## ノード -### Subscribed Topics +### サブスクライブするトピック -| Name | Type | Description | -| -------------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- | -| `measured_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Input pose source with the measurement covariance matrix. | -| `measured_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | Input twist source with the measurement covariance matrix. | -| `initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Initial pose for EKF. The estimated pose is initialized with zeros at the start. It is initialized with this message whenever published. | +| 名前 | タイプ | 説明 | +| -------------------------------------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `measured_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 測定共分散行列を持つ入力ポーズソース | +| `measured_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 測定共分散行列を持つ入力ツイストソース | +| `initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKF の初期ポーズ。推定ポーズは開始時にゼロで初期化されます。公開されるたびにこのメッセージで初期化されます。 | -### Published Topics +### 公開トピック -| Name | Type | Description | -| --------------------------------- | ------------------------------------------------ | ----------------------------------------------------- | -| `ekf_odom` | `nav_msgs::msg::Odometry` | Estimated odometry. | -| `ekf_pose` | `geometry_msgs::msg::PoseStamped` | Estimated pose. | -| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Estimated pose with covariance. | -| `ekf_biased_pose` | `geometry_msgs::msg::PoseStamped` | Estimated pose including the yaw bias | -| `ekf_biased_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Estimated pose with covariance including the yaw bias | -| `ekf_twist` | `geometry_msgs::msg::TwistStamped` | Estimated twist. | -| `ekf_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | The estimated twist with covariance. | -| `diagnostics` | `diagnostics_msgs::msg::DiagnosticArray` | The diagnostic information. | +| 名前 | タイプ | 説明 | +| --------------------------------- | ------------------------------------------------ | -------------------------------------------- | +| `ekf_odom` | `nav_msgs::msg::Odometry` | 推定オドメトリ。 | +| `ekf_pose` | `geometry_msgs::msg::PoseStamped` | 推定ポーズ。 | +| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 共分散を含む推定ポーズ。 | +| `ekf_biased_pose` | `geometry_msgs::msg::PoseStamped` | Yawバイアスを含む推定ポーズ。 | +| `ekf_biased_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Yawバイアスを含む共分散付き推定ポーズ。 | +| `ekf_twist` | `geometry_msgs::msg::TwistStamped` | 推定ツイスト。 | +| `ekf_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 共分散を含む推定ツイスト。 | +| `diagnostics` | `diagnostics_msgs::msg::DiagnosticArray` | 診断情報。 | -### Published TF +### 公開 TF - base_link - TF from `map` coordinate to estimated pose. + `map` 座標から推定姿勢への TF。 -## Functions +## 関数 -### Predict +### 予測 -The current robot state is predicted from previously estimated data using a given prediction model. This calculation is called at a constant interval (`predict_frequency [Hz]`). The prediction equation is described at the end of this page. +現在のロボットの状態は、指定された予測モデルを使用して、これまで推定されたデータから予測されます。この計算は一定の間隔(`predict_frequency [Hz]`)で呼び出されます。予測式はこのページの最後に記載されています。 -### Measurement Update +### 測定値更新 -Before the update, the Mahalanobis distance is calculated between the measured input and the predicted state, the measurement update is not performed for inputs where the Mahalanobis distance exceeds the given threshold. +更新前に、測定された入力値と予測された状態との間でマハラノビス距離が計算されます。測定値更新は、マハラノビス距離が所定のしきい値を超える入力値に対しては実行されません。 -The predicted state is updated with the latest measured inputs, measured_pose, and measured_twist. The updates are performed with the same frequency as prediction, usually at a high frequency, in order to enable smooth state estimation. +予測された状態は、最新の測定入力、measured_pose、measured_twistを使用して更新されます。更新は、通常は高周波で予測と同じ周波数で行われ、スムーズな状態推定を実行できます。 -## Parameter description +## パラメータの説明 -The parameters are set in `launch/ekf_localizer.launch` . +パラメータは `launch/ekf_localizer.launch` で設定されます。 -### For Node +### ノードの場合 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/node.sub_schema.json") }} -### For pose measurement +### ポーズの測定値の場合 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/pose_measurement.sub_schema.json") }} -### For twist measurement +### ツイストの測定値の場合 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/twist_measurement.sub_schema.json") }} -### For process noise +### プロセスノイズの場合 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/process_noise.sub_schema.json") }} -note: process noise for positions x & y are calculated automatically from nonlinear dynamics. +注: 位置 x と y のプロセスノイズは非線形動特性から自動的に計算されます。 -### Simple 1D Filter Parameters +### 1 次元単純フィルタのパラメータ {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/simple_1d_filter_parameters.sub_schema.json") }} -### For diagnostics +### 診断の場合 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/diagnostics.sub_schema.json") }} -### Misc +### 諸々 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/misc.sub_schema.json") }} -## How to tune EKF parameters +## EKF パラメータの調整方法 -### 0. Preliminaries +### 0. 準備 -- Check header time in pose and twist message is set to sensor time appropriately, because time delay is calculated from this value. If it is difficult to set an appropriate time due to the timer synchronization problem, use `twist_additional_delay` and `pose_additional_delay` to correct the time. -- Check if the relation between measurement pose and twist is appropriate (whether the derivative of the pose has a similar value to twist). This discrepancy is caused mainly by unit error (such as confusing radian/degree) or bias noise, and it causes large estimation errors. +- ポーズとツイストのメッセージヘッダーの時間が適切にセンサー時間に設定されていることを確認します。時間遅延はこの値から計算されるためです。タイマの同期に関する問題から適切な時間を設定するのが難しい場合は、`twist_additional_delay` と `pose_additional_delay` を使用して時間を修正してください。 +- 測定ポーズとツイストの関係が適切であるかどうかを確認します(ポーズの微分がツイストと同様の値になるかどうか)。この差異は主に単位の誤り(ラジアンと度数の混同など)またはバイアスノイズが原因であり、大きな推定誤差につながります。 -### 1. Tune sensor parameters +### 1. センサーパラメータの調整 -Set standard deviation for each sensor. The `pose_measure_uncertainty_time` is for the uncertainty of the header timestamp data. -You can also tune a number of steps for smoothing for each observed sensor data by tuning `*_smoothing_steps`. -Increasing the number will improve the smoothness of the estimation, but may have an adverse effect on the estimation performance. +各センサの標準偏差を設定します。ヘッダーのタイムスタンプデータの不確かさに対する`pose_measure_uncertainty_time`です。各観測センサデータの`*_smoothing_steps`を設定することで、スムージングのステップ数を調整できます。数を増やすと推定値のスムーズさが向上しますが、推定パフォーマンスに悪影響が出る可能性があります。 - `pose_measure_uncertainty_time` - `pose_smoothing_steps` - `twist_smoothing_steps` -### 2. Tune process model parameters +### 2. プロセスモデルパラメータの調整 -- `proc_stddev_vx_c` : set to maximum linear acceleration -- `proc_stddev_wz_c` : set to maximum angular acceleration -- `proc_stddev_yaw_c` : This parameter describes the correlation between the yaw and yaw rate. A large value means the change in yaw does not correlate to the estimated yaw rate. If this is set to 0, it means the change in estimated yaw is equal to yaw rate. Usually, this should be set to 0. -- `proc_stddev_yaw_bias_c` : This parameter is the standard deviation for the rate of change in yaw bias. In most cases, yaw bias is constant, so it can be very small, but must be non-zero. +- `proc_stddev_vx_c` : 最大線形加速度に設定 +- `proc_stddev_wz_c` : 最大角加速度に設定 +- `proc_stddev_yaw_c` : このパラメータはヨーとヨーレート間の相関を表します。値が大きいほど、ヨーの変化が推定ヨーレートと相関しません。これを0に設定すると、推定ヨーの変化がヨーレートと等しくなります。通常は0に設定する必要があります。 +- `proc_stddev_yaw_bias_c` : このパラメータはヨーバイアスの変化率の標準偏差です。ほとんどの場合、ヨーバイアスは一定であるため、非常に小さくなければなりませんが、ゼロではありません。 -### 3. Tune gate parameters +### 3. ゲートパラメータの調整 -EKF performs gating using Mahalanobis distance before updating by observation. The gate size is determined by the `pose_gate_dist` parameter and the `twist_gate_dist`. If the Mahalanobis distance is larger than this value, the observation is ignored. +EKFは観測による更新前にマハラノビス距離を使用してゲーティングを実行します。ゲートサイズは`pose_gate_dist`パラメータと`twist_gate_dist`によって決定されます。マハラノビス距離がこの値よりも大きい場合、観測は無視されます。 -This gating process is based on a statistical test using the chi-square distribution. As modeled, we assume that the Mahalanobis distance follows a chi-square distribution with 3 degrees of freedom for pose and 2 degrees of freedom for twist. +このゲーティングプロセスは、カイ二乗分布を使用した統計的テストに基づいています。モデル化されたように、マハラノビス距離はヨーの自由度が3、ねじれの自由度が2のカイ二乗分布に従うものと仮定しています。 -Currently, the accuracy of covariance estimation itself is not very good, so it is recommended to set the significance level to a very small value to reduce rejection due to false positives. +現在のところ、共分散推定の精度はあまり良くないため、偽陽性による拒否を減らすために、有意水準を非常に小さい値に設定することをお勧めします。 -| Significance level | Threshold for 2 dof | Threshold for 3 dof | -| ------------------ | ------------------- | ------------------- | +| 重要度レベル | 2 次元結果の閾値 | 3 次元結果の閾値 | +| ---------------- | -------------------- | -------------------- | | $10 ^ {-2}$ | 9.21 | 11.3 | | $10 ^ {-3}$ | 13.8 | 16.3 | | $10 ^ {-4}$ | 18.4 | 21.1 | @@ -150,31 +148,31 @@ Currently, the accuracy of covariance estimation itself is not very good, so it | $10 ^ {-9}$ | 41.4 | 44.8 | | $10 ^ {-10}$ | 46.1 | 49.5 | -## Kalman Filter Model +## カルマンフィルタモデル -### kinematics model in update function +### 更新関数における運動モデル -where, $\theta_k$ represents the vehicle's heading angle, including the mounting angle bias. -$b_k$ is a correction term for the yaw bias, and it is modeled so that $(\theta_k+b_k)$ becomes the heading angle of the base_link. -The pose_estimator is expected to publish the base_link in the map coordinate system. However, the yaw angle may be offset due to calibration errors. This model compensates this error and improves estimation accuracy. +ここで、$\theta_k$ は車体の進行方向の角度で、取り付け角度のバイアスを含みます。 +$b_k$ はヨーバイアスの補正項であり、$(\theta_k+b_k)$が base_link の進行方向の角度になるようにモデル化されます。 +pose_estimator は base_link を地図座標系で公開すると予想されています。ただし、ヨー角はキャリブレーションのエラーによりずれる場合があります。このモデルは、このエラーを補正し、推定精度を向上させます。 -### time delay model +### タイム遅延モデル -The measurement time delay is handled by an augmented state [1] (See, Section 7.3 FIXED-LAG SMOOTHING). +測定タイム遅延は、拡張状態 [1] (セクション 7.3 固定遅延スムージングを参照) で処理されます。 -Note that, although the dimension gets larger since the analytical expansion can be applied based on the specific structures of the augmented states, the computational complexity does not significantly change. +拡張状態の特定の構造に基づいて解析的な展開を適用できるため、次元は大きくなりますが、計算の複雑さは大幅には変わりません。 -## Test Result with Autoware NDT +## Autoware NDT によるテスト結果

-## Diagnostics +## 診断

@@ -187,23 +185,24 @@ Note that, although the dimension gets larger since the analytical expansion can

-### The conditions that result in a WARN state +### WARN 状態になる条件 -- The node is not in the activate state. -- The number of consecutive no measurement update via the Pose/Twist topic exceeds the `pose_no_update_count_threshold_warn`/`twist_no_update_count_threshold_warn`. -- The timestamp of the Pose/Twist topic is beyond the delay compensation range. -- The Pose/Twist topic is beyond the range of Mahalanobis distance for covariance estimation. -- The covariance ellipse is bigger than threshold `warn_ellipse_size` for long axis or `warn_ellipse_size_lateral_direction` for lateral_direction. +- ノードがアクティブ状態ではありません。 +- Pose/Twist トピックによる連続的な測定更新の数が `pose_no_update_count_threshold_warn`/`twist_no_update_count_threshold_warn` を超えています。 +- Pose/Twist トピックのタイムスタンプが遅延補正範囲を超えています。 +- Pose/Twist トピックが共分散推定のためのマハラノビス距離の範囲を超えています。 +- 共分散楕円が `warn_ellipse_size` (長軸) または `warn_ellipse_size_lateral_direction` (横方向) のしきい値を超えています。 -### The conditions that result in an ERROR state +### ERROR 状態になる条件 -- The number of consecutive no measurement update via the Pose/Twist topic exceeds the `pose_no_update_count_threshold_error`/`twist_no_update_count_threshold_error`. -- The covariance ellipse is bigger than threshold `error_ellipse_size` for long axis or `error_ellipse_size_lateral_direction` for lateral_direction. +- Pose/Twist トピックによる連続的な測定更新の数が `pose_no_update_count_threshold_error`/`twist_no_update_count_threshold_error` を超えています。 +- 共分散楕円が `error_ellipse_size` (長軸) または `error_ellipse_size_lateral_direction` (横方向) のしきい値を超えています。 -## Known issues +## 既知の問題 -- If multiple pose_estimators are used, the input to the EKF will include multiple yaw biases corresponding to each source. However, the current EKF assumes the existence of only one yaw bias. Therefore, yaw bias `b_k` in the current EKF state would not make any sense and cannot correctly handle these multiple yaw biases. Thus, future work includes introducing yaw bias for each sensor with yaw estimation. +- 複数の pose_estimators が使用されている場合、EKF への入力には各ソースに対応する複数のヨーバイアスが含まれます。ただし、現在の EKF はヨーバイアスが 1 つしか存在しないと想定しています。したがって、現在の EKF 状態のヨーバイアス `b_k` は意味がなく、これらの複数のヨーバイアスを正しく処理することはできません。そのため、今後の作業では、ヨー推定値を持つ各センサーのヨーバイアスを導入する予定です。 -## reference +## 参考資料 [1] Anderson, B. D. O., & Moore, J. B. (1979). Optimal filtering. Englewood Cliffs, NJ: Prentice-Hall. + diff --git a/localization/autoware_geo_pose_projector/README.md b/localization/autoware_geo_pose_projector/README.md index 2dd83a2077aab..a67b863323fe6 100644 --- a/localization/autoware_geo_pose_projector/README.md +++ b/localization/autoware_geo_pose_projector/README.md @@ -1,28 +1,29 @@ # autoware_geo_pose_projector -## Overview +## 概要 -This node is a simple node that subscribes to the geo-referenced pose topic and publishes the pose in the map frame. +このノードは、地理参照された姿勢トピックを購読し、マップフレーム内の姿勢を公開するシンプルなノードです。 -## Subscribed Topics +## 購読トピック -| Name | Type | Description | -| ------------------------- | ---------------------------------------------------- | ------------------- | -| `input_geo_pose` | `geographic_msgs::msg::GeoPoseWithCovarianceStamped` | geo-referenced pose | -| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectedObjectInfo` | map projector info | +| 名前 | タイプ | 説明 | +| ------------------------- | ---------------------------------------------------- | -------------------- | +| `input_geo_pose` | `geographic_msgs::msg::GeoPoseWithCovarianceStamped` | 地理参照された位置 | +| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectedObjectInfo` | マッププロジェクター情報 | -## Published Topics +## 公開トピック -| Name | Type | Description | -| ------------- | ----------------------------------------------- | ------------------------------------- | -| `output_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | pose in map frame | -| `/tf` | `tf2_msgs::msg::TFMessage` | tf from parent link to the child link | +| 名称 | 型 | 説明 | +| ------------- | ------------------------------------------------- | ---------------------------------------- | +| `output_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | マップフレーム内のポーズ | +| `/tf` | `tf2_msgs::msg::TFMessage` | 親リンクと子リンク間のtf | -## Parameters +## パラメータ {{ json_to_markdown("localization/autoware_geo_pose_projector/schema/geo_pose_projector.schema.json") }} -## Limitations +## 制限事項 + +使用する投影タイプによっては、共分散を変換できない可能性があります。入力トピックの共分散は、対角行列として(緯度、経度、高度)で表されます。 +現在、x軸を東向き、y軸を北向きと想定しています。そのため、この仮定が破られると、特に緯度と経度の共分散が異なる場合は、変換が正しく処理されない可能性があります。 -The covariance conversion may be incorrect depending on the projection type you are using. The covariance of input topic is expressed in (Latitude, Longitude, Altitude) as a diagonal matrix. -Currently, we assume that the x axis is the east direction and the y axis is the north direction. Thus, the conversion may be incorrect when this assumption breaks, especially when the covariance of latitude and longitude is different. diff --git a/localization/autoware_gyro_odometer/README.md b/localization/autoware_gyro_odometer/README.md index d2ff600ae4bf0..43e13e705cdde 100644 --- a/localization/autoware_gyro_odometer/README.md +++ b/localization/autoware_gyro_odometer/README.md @@ -1,51 +1,88 @@ # autoware_gyro_odometer -## Purpose +## 目的 -`autoware_gyro_odometer` is the package to estimate twist by combining imu and vehicle speed. +`autoware_gyro_odometer` は IMU と車速を組み合わせて、ひねり速度を推定するためのパッケージです。 -## Inputs / Outputs +## 入力 / 出力 -### Input +### 入力 +- `/vehicle/odometry/twist` (geometry_msgs/Twist): ロボットのひねり速度 +- `/imu//data_raw` (sensor_msgs/Imu): IMU データ +- `/tf` (tf2/TransformStamped): ロボットの TF トランスフォーム +- `/vehicle/wheel_cmd` (vehicle_msgs/WheelCmd): 車輪速度 -| Name | Type | Description | -| ------------------------------- | ------------------------------------------------ | ---------------------------------- | -| `vehicle/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | twist with covariance from vehicle | -| `imu` | `sensor_msgs::msg::Imu` | imu from sensor | +### 出力 +- `/vehicle/twist` (geometry_msgs/Twist): 補償されたひねり速度 -### Output +| 名称 | 型 | 説明 | +| ------------------------ | ------------------------------------------------ | ---------------------------------- | +| `vehicle/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 車両の共分散付きツイスト | +| `imu` | `sensor_msgs::msg::Imu` | センサーの IMU | -| Name | Type | Description | -| ----------------------- | ------------------------------------------------ | ------------------------------- | -| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | estimated twist with covariance | +### アウトプット -## Parameters +車両のダイナミクス モデルは、エンコーダーの `post resampling` 計測値のフィードバックと、Planning コンポーネンにより生成された目的速度、加速度を組み合わせ、自車位置と姿勢を推定します。ダイナミクス モデルは、非線形車輪モデルに基づく 2 自由度システムを想定しています。 + +エンコーダーの `post resampling` 計測値は、ホイール アライメント、回転径、およびアライメントの不均衡性を補正するために実装された、低パス フィルター付きの differentiation により、速度および加速度に変換されます。ダイナミクス モデルは、以下の式を使用して、自車位置と姿勢を計算します。 + +``` +x = x0 + \int vcos(θ) dt +y = y0 + \int vsin(θ) dt +θ = θ0 + \int ω dt +``` + +ここで、 + +* `x` は x 軸上の自車位置 +* `y` は y 軸上の自車位置 +* `θ` は自車の偏角 +* `v` は車両の速度 +* `ω` は車両の角速度 +* `x0`、`y0`、`θ0` は初期条件 + +車両の速度と加速度は、Planning コンポーネンによって生成されます。Planning コンポーネンは、周囲環境に関する情報をセンサから収集し、車両を目的地まで安全かつ効率的に移動させる目的経路を生成します。 + +ダイナミクス モデルは、以下の基準に基づいて、自車位置と姿勢の推定値を評価します。 + +* **速度逸脱量:** Planning コンポーネンによって指定された速度からの自車速度の逸脱量 +* **加速度逸脱量:** Planning コンポーネンによって指定された加速度からの自車加速度の逸脱量 +* **軌跡逸脱量:** Planning コンポーネンによって指定された軌跡からの自車位置の逸脱量 + +Autoware では、こうした基準を使用して、ダイナミクス モデルの推定値の精度が検証されます。 + +| 名称 | 種別 | 説明 | +| --------------------- | ------------------------------------------------- | ----------------------------- | +| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 共分散付き推測速度 | + +## パラメータ {{ json_to_markdown("localization/autoware_gyro_odometer/schema/gyro_odometer.schema.json") }} -## Assumptions / Known limits +## 前提条件/既知の制限 -- [Assumption] The frame_id of input twist message must be set to base_link. +- [前提条件] 入力ツイストメッセージのフレーム ID は base_link に設定する必要があります。 -- [Assumption] The covariance in the input messages must be properly assigned. +- [前提条件] 入力メッセージの共分散は適切に割り当てられている必要があります。 -- [Assumption] The angular velocity is set to zero if both the longitudinal vehicle velocity and the angular velocity around the yaw axis are sufficiently small. This is for suppression of the IMU angular velocity bias. Without this process, we misestimate the vehicle status when stationary. +- [前提条件] 縦方向の車両速度とヨー軸まわりの角速度の両方が十分に小さい場合は、角速度をゼロに設定します。これは、IMU 角速度バイアスの抑制のためのものです。この処理がないと、停止時に車両状態を誤って推定してしまいます。 -- [Limitation] The frequency of the output messages depends on the frequency of the input IMU message. +- [制限事項] 出力メッセージの周波数は、入力 IMU メッセージの周波数に依存します。 -- [Limitation] We cannot produce reliable values for the lateral and vertical velocities. Therefore we assign large values to the corresponding elements in the output covariance matrix. +- [制限事項] 横方向および鉛直方向の速度について信頼できる値を生成できません。そのため、出力共分散行列の対応する要素には大きな値が割り当てられます。 -## Diagnostics +## 診断 drawing -| Name | Description | Transition condition to Warning | Transition condition to Error | -| -------------------------------- | ----------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------------------- | -| `topic_time_stamp` | the time stamp of service calling. [nano second] | none | none | -| `is_arrived_first_vehicle_twist` | whether the vehicle twist topic has been received even once. | not arrive yet | none | -| `is_arrived_first_imu` | whether the imu topic has been received even once. | not arrive yet | none | -| `vehicle_twist_time_stamp_dt` | the time difference between the current time and the latest vehicle twist topic. [second] | none | the time is **longer** than `message_timeout_sec` | -| `imu_time_stamp_dt` | the time difference between the current time and the latest imu topic. [second] | none | the time is **longer** than `message_timeout_sec` | -| `vehicle_twist_queue_size` | the size of vehicle_twist_queue. | none | none | -| `imu_queue_size` | the size of gyro_queue. | none | none | -| `is_succeed_transform_imu` | whether transform imu is succeed or not. | none | failed | +| 名称 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | +| -------------------------------- | -------------------------------------------------------------------------------------------- | ---------------------- | -------------------------------------------------------- | +| `topic_time_stamp` | サービスを呼び出すときのタイムスタンプ [ナノ秒] | なし | なし | +| `is_arrived_first_vehicle_twist` | 車両の Twist トピックを少なくとも 1 回受信したかどうかのフラグ | まだ受信していない | なし | +| `is_arrived_first_imu` | IMU トピックを少なくとも 1 回受信したかどうかのフラグ | まだ受信していない | なし | +| `vehicle_twist_time_stamp_dt` | 現在時刻と最新の車両の Twist トピック間の時間差 [秒] | なし | 時間差が `message_timeout_sec` より **長い** | +| `imu_time_stamp_dt` | 現在時刻と最新の IMU トピック間の時間差 [秒] | なし | 時間差が `message_timeout_sec` より **長い** | +| `vehicle_twist_queue_size` | `vehicle_twist_queue` のサイズ | なし | なし | +| `imu_queue_size` | `gyro_queue` のサイズ | なし | なし | +| `is_succeed_transform_imu` | IMU の変換の成功/失敗フラグ | なし | 変換が失敗した | + diff --git a/localization/autoware_landmark_based_localizer/README.md b/localization/autoware_landmark_based_localizer/README.md index ad4f1f5748f59..66c4a6e678c23 100644 --- a/localization/autoware_landmark_based_localizer/README.md +++ b/localization/autoware_landmark_based_localizer/README.md @@ -1,63 +1,64 @@ -# Landmark Based Localizer +# ランドマークベースの局在化 -This directory contains packages for landmark-based localization. +このディレクトリにはランドマークベースの局在化用のパッケージが含まれています。 -Landmarks are, for example +たとえばランドマークには次のものがあります。 -- AR tags detected by camera -- Boards characterized by intensity detected by LiDAR +- カメラで検出されたARタグ +- LiDARで検出された強度によって特徴付けられたボード -etc. +など -Since these landmarks are easy to detect and estimate pose, the ego pose can be calculated from the pose of the detected landmark if the pose of the landmark is written on the map in advance. +これらのランドマークは検出と推定の姿勢が容易であるため、ランドマークの姿勢が事前にマップに記載されている場合、検出されたランドマークの姿勢から自己姿勢を計算できます。 -Currently, landmarks are assumed to be flat. +現在、ランドマークは平面であると想定されています。 -The following figure shows the principle of localization in the case of `ar_tag_based_localizer`. +次の図は、`ar_tag_based_localizer` の場合の局在化の原理を示しています。 ![principle](./doc_image/principle.png) -This calculated ego pose is passed to the EKF, where it is fused with the twist information and used to estimate a more accurate ego pose. +この計算された自己姿勢はEKFに渡され、ねじれ情報と融合されてより正確な自己姿勢を推定するために使用されます。 -## Node diagram +## ノード図 ![node diagram](./doc_image/node_diagram.drawio.svg) ### `landmark_manager` -The definitions of the landmarks written to the map are introduced in the next section. See `Map Specifications`. +マップに書き込まれたランドマークの定義については、次のセクションの「マップ仕様」を参照してください。 -The `landmark_manager` is a utility package to load landmarks from the map. +`landmark_manager` はマップからランドマークを読み込むためのユーティリティパッケージです。 -- Translation : The center of the four vertices of the landmark -- Rotation : Let the vertex numbers be 1, 2, 3, 4 counterclockwise as shown in the next section. Direction is defined as the cross product of the vector from 1 to 2 and the vector from 2 to 3. +- 並進: ランドマークの4つの頂点の中心 +- 回転: 頂点番号を次のセクションで示すように反時計回りに1、2、3、4とします。方向は、1から2へのベクトルと、2から3へのベクトルの外積として定義されます。 -Users can define landmarks as Lanelet2 4-vertex polygons. -In this case, it is possible to define an arrangement in which the four vertices cannot be considered to be on the same plane. The direction of the landmark in that case is difficult to calculate. -So, if the 4 vertices are considered as forming a tetrahedron and its volume exceeds the `volume_threshold` parameter, the landmark will not publish tf_static. +ユーザーはランドマークをLanelet2の4頂点ポリゴンとして定義できます。 +この場合、4つの頂点が同じ平面にあるとは見なせない配置を定義できます。その場合のランドマークの方向は計算が困難です。 +したがって、4つの頂点を四面体として形成し、その体積が`volume_threshold` パラメーターを超えると、ランドマークはtf_staticをパブリッシュしません。 -### Landmark based localizer packages +### ランドマークベースの局在化パッケージ - ar_tag_based_localizer -- etc. +- など -## Map specifications +## マップ仕様 -See +を参照してください。 -## About `consider_orientation` +## `consider_orientation` について -The `calculate_new_self_pose` function in the `LandmarkManager` class includes a boolean argument named `consider_orientation`. This argument determines the method used to calculate the new self pose based on detected and mapped landmarks. The following image illustrates the difference between the two methods. +`LandmarkManager` クラスの`calculate_new_self_pose` 関数は、`consider_orientation` という名前のブーリアン引数を含みます。この引数は、検出されたランドマークとマッピングされたランドマークに基づいて新しい自己姿勢を計算するために使用される手法を決定します。次の画像は、2つの方法の違いを示します。 ![consider_orientation_figure](./doc_image/consider_orientation.drawio.svg) ### `consider_orientation = true` -In this mode, the new self pose is calculated so that the relative Pose of the "landmark detected from the current self pose" is equal to the relative Pose of the "landmark mapped from the new self pose". -This method can correct for orientation, but is strongly affected by the orientation error of the landmark detection. +このモードでは、新しい自己姿勢は、「現在位置から検出されたランドマーク」の相対姿勢が「新しい自己姿勢からマッピングされたランドマーク」の相対姿勢と等しくなるように計算されます。 +この方法は、向きを補正できますが、ランドマーク検出の向き誤差の影響を強く受けます。 ### `consider_orientation = false` -In this mode, the new self pose is calculated so that only the relative position is correct for x, y, and z. +このモードでは、x、y、z の相対位置だけが正しいように、新しい自車位置を計算します。 + +この手法では、方位の補正は行えませんが、マーカー検出の方位誤差の影響を受けません。 -This method can not correct for orientation, but it is not affected by the orientation error of the landmark detection. diff --git a/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md b/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md index 788f7bbc6b3a8..719d5cfa44598 100644 --- a/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md +++ b/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md @@ -1,42 +1,105 @@ -# AR Tag Based Localizer +# AR Tagベースのローカライザ -**ArTagBasedLocalizer** is a vision-based localization node. +**ArTagBasedLocalizer** はビジョンベースのローカリゼーションノードです。 ar_tag_image -This node uses [the ArUco library](https://index.ros.org/p/aruco/) to detect AR-Tags from camera images and calculates and publishes the pose of the ego vehicle based on these detections. -The positions and orientations of the AR-Tags are assumed to be written in the Lanelet2 format. +このノードは [ArUcoライブラリ](https://index.ros.org/p/aruco/) を使用してカメラ画像からARタグを検出し、この検出に基づいて自車位置を計算してパブリッシュします。 +ARタグの位置と向きは、Lanelet2フォーマットで記述されているものと想定されます。 -## Inputs / Outputs +## 入出力 -### `ar_tag_based_localizer` node +### `ar_tag_based_localizer` ノード -#### Input +#### 入力 -| Name | Type | Description | +| 名 | 型 | 説明 | | :--------------------- | :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `~/input/lanelet2_map` | `autoware_map_msgs::msg::LaneletMapBin` | Data of lanelet2 | -| `~/input/image` | `sensor_msgs::msg::Image` | Camera Image | -| `~/input/camera_info` | `sensor_msgs::msg::CameraInfo` | Camera Info | -| `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKF Pose without IMU correction. It is used to validate detected AR tags by filtering out False Positives. Only if the EKF Pose and the AR tag-detected Pose are within a certain temporal and spatial range, the AR tag-detected Pose is considered valid and published. | +| `~/input/lanelet2_map` | `autoware_map_msgs::msg::LaneletMapBin` | Lanelet 2データ | +| `~/input/image` | `sensor_msgs::msg::Image` | カメラ画像 | +| `~/input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | +| `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | IMU補正なしのEKF推定値。誤検知のフィルタリングに使用され、検出したARタグの妥当性を評価します。EKF推定値とARタグで検出した推定値が一定の時間と空間範囲内にある場合のみ、検出したARタグの推定値は有効と見なされ、パブリッシュされます。 | -#### Output +#### 出力 -| Name | Type | Description | -| :------------------------------ | :---------------------------------------------- | :---------------------------------------------------------------------------------------- | -| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Estimated Pose | -| `~/debug/result` | `sensor_msgs::msg::Image` | [debug topic] Image in which marker detection results are superimposed on the input image | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | [debug topic] Loaded landmarks to visualize in Rviz as thin boards | -| `/tf` | `geometry_msgs::msg::TransformStamped` | [debug topic] TF from camera to detected tag | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | Diagnostics outputs | +**自動運転ソフトウェア仕様** -## Parameters +**1. 概要** + +このドキュメントでは、自律走行車両向けのオープンソース自動運転ソフトウェア「Autoware」について説明します。 Autowareは、安全かつ効率的な自律走行実現に必要なモジュール群を提供するモジュールベースのソフトウェアプラットフォームです。 + +**2. コンポーネント** + +**2.1 Perception(感知)モジュール** + +* カメラ、レーダー、LiDARなどのセンサーからのデータを処理し、周囲環境の3Dマップを作成します。 +* 交通標識、歩行者、障害物などのオブジェクトを検出し、追跡します。 + +**2.2 Localization(自己位置推定)モジュール** + +* GNSS、IMU、車輪エンコーダーなどのセンサーデータを処理し、自車位置を推定します。 +* スラム(SLAM)アルゴリズムを使用して、周囲環境の地図を作成・更新します。 + +**2.3 Planning(計画)モジュール** + +* 感知モジュールからのオブジェクト情報を基に、車両の経路と速度計画を生成します。 +* 障害物回避、レーンキープなどの計画を実行するコントローラーを提供します。 + +**2.4 Behavior Planning(挙動計画)モジュール** + +* 交通規則を遵守するための車両挙動を生成します。 +* 自動運転レベルに応じた異なる挙動をサポートしています。 + +**2.5 Control(制御)モジュール** + +* 計画モジュールからのコマンドに基づいて、車両のステアリング、ブレーキ、アクセルを制御します。 +* 縦方向、横方向の制御のためのコントローラーを提供します。 + +**3. 安全機能** + +Autowareには、次の安全機能が組み込まれています。 + +* **衝突回避システム:** 障害物との衝突を回避するための緊急回避策を実行します。 +* **速度逸脱量管理:** 設定された速度制限を超えた場合に警告を発し、車両を減速します。 +* **加速度逸脱量管理:** 快適さと安全性を確保するための急加速度や急減速を防止します。 +* **車両制御の監視:** 制御モジュールの動作を監視し、異常が発生した場合に車両を停止させます。 + +**4. データ処理パイプライン** + +Autowareのデータ処理パイプラインは、次の手順に従います。 + +* **センサーデータの取得:** センサーから生のデータを収集します。 +* **'post resampling'によるデータフィルタリング:** ノイズや不要なデータを除去します。 +* **オブジェクト検出と追跡:** 感知モジュールがオブジェクトの検出と追跡を実行します。 +* **自己位置推定:** 自己位置推定モジュールが自車位置を推定します。 +* **経路計画:** 計画モジュールが経路と速度計画を生成します。 +* **挙動計画:** 挙動計画モジュールが車両挙動を生成します。 +* **制御:** 制御モジュールが車両の制御を実行します。 + +**5. インターフェース** + +Autowareは、ROS(Robot Operating System)上で動作します。 ROSノードを使用して、モジュール間でのデータのやり取りと通信を行います。 + +**6. 開発とサポート** + +Autowareはオープンソースプロジェクトであり、誰でも貢献できます。 Autowareコミュニティは、ドキュメント、フォーラム、サポートでユーザーをサポートしています。 + +| 名称 | タイプ | 説明 | +| :--------------------------------- | :--------------------------------------------------------------- | :------------------------------------------------------------------------- | +| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定姿勢 | +| `~/debug/result` | `sensor_msgs::msg::Image` | [デバッグトピック] マーカー検出結果が、入力画像に重ね書きされた画像 | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] Rviz内で薄い板として可視化するロード済ランドマーク | +| `/tf` | `geometry_msgs::msg::TransformStamped` | カメラから検出されたタグまでのトランスフォーム | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断結果 | + +## パラメータ {{ json_to_markdown("localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/schema/ar_tag_based_localizer.schema.json") }} -## How to launch +## 起動方法 + +Autowareを起動する際、`artag` を `pose_source` に設定します。 -When launching Autoware, set `artag` for `pose_source`. ```bash ros2 launch autoware_launch ... \ @@ -46,18 +109,19 @@ ros2 launch autoware_launch ... \ ### Rosbag -#### [Sample rosbag and map (AWSIM data)](https://drive.google.com/file/d/1ZPsfDvOXFrMxtx7fb1W5sOXdAK1e71hY/view) +#### [サンプル rosbag とマップ (AWSIM データ)](https://drive.google.com/file/d/1ZPsfDvOXFrMxtx7fb1W5sOXdAK1e71hY/view) -This data is simulated data created by [AWSIM](https://tier4.github.io/AWSIM/). -Essentially, AR tag-based self-localization is not intended for such public road driving, but for driving in a smaller area, so the max driving speed is set at 15 km/h. +このデータは [AWSIM](https://tier4.github.io/AWSIM/) で作成されたシミュレーション データです。 +本質的に、AR タグベースの自己位置推定は公共道路の運転ではなく、より狭いエリアでの運転を意図しているため、最高運転速度は時速 15km に設定されています。 -It is a known problem that the timing of when each AR tag begins to be detected can cause significant changes in estimation. +各 AR タグが検出され始めるタイミングによって、推定に大きな変化が生じることは既知の問題です。 ![sample_result_in_awsim](./doc_image/sample_result_in_awsim.png) -#### [Sample rosbag and map (Real world data)](https://drive.google.com/file/d/1VQCQ_qiEZpCMI3-z6SNs__zJ-4HJFQjx/view) +#### [サンプル rosbag とマップ (実世界データ)](https://drive.google.com/file/d/1VQCQ_qiEZpCMI3-z6SNs__zJ-4HJFQjx/view) + +トピック名を再マッピングし、実行してください。 -Please remap the topic names and play it. ```bash ros2 bag play /path/to/ar_tag_based_localizer_sample_bag/ -r 0.5 -s sqlite3 \ @@ -65,16 +129,17 @@ ros2 bag play /path/to/ar_tag_based_localizer_sample_bag/ -r 0.5 -s sqlite3 \ /sensing/camera/front/image/info:=/sensing/camera/traffic_light/camera_info ``` -This dataset contains issues such as missing IMU data, and overall the accuracy is low. Even when running AR tag-based self-localization, significant difference from the true trajectory can be observed. +このデータセットには、IMU データの欠損などの問題があり、全体的な精度は低いです。AR タグベースの自己位置推定を実行した場合でも、真の軌跡との大きな差が観察されます。 -The image below shows the trajectory when the sample is executed and plotted. +サンプルが実行されてプロットされるときの軌跡を下の画像に示します。 ![sample_result](./doc_image/sample_result.png) -The pull request video below should also be helpful. +以下のプルリクエストのビデオも参考になります。 -## Principle +## 原理 ![principle](../doc_image/principle.png) + diff --git a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md index 15afefaf20ee4..01f28f628f3d5 100644 --- a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md +++ b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md @@ -1,37 +1,104 @@ -# LiDAR Marker Localizer +# LiDAR マーカー ローカライザー -**LiDARMarkerLocalizer** is a detect-reflector-based localization node . +**LiDARMarkerLocalizer** は、反射器を検出して位置を推定するノードです。 -## Inputs / Outputs +## 入出力 -### `lidar_marker_localizer` node +### `lidar_marker_localizer` ノード -#### Input +#### 入力 +- `/hesai406/points` (`PointCloud`) + - ヘサイ406のLiDARポイントクラウド +- `/current_pose` (`Odometry`) + - 自車位置 +- `/static_map` (`StaticMap`) + - 静的地図(反転させた座標系) -| Name | Type | Description | -| :--------------------- | :---------------------------------------------- | :--------------- | -| `~/input/lanelet2_map` | `autoware_map_msgs::msg::HADMapBin` | Data of lanelet2 | -| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | PointCloud | -| `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKF Pose | +#### 出力 +- `/lidar_marker_localizer/output` (`Odometry`) + - 検出された反射器に基づく、自車位置の推定値 +- `/lidar_marker_localizer/debug` (`MarkerArray`) + - デバッグ用マーカー -#### Output +| 名前 | 型 | 説明 | +|---|---|---| +| `~/input/lanelet2_map` | `autoware_map_msgs::msg::HADMapBin` | lanelet2データ | +| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 点群 | +| `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKFによる自車位置 | -| Name | Type | Description | -| :------------------------------ | :---------------------------------------------- | :----------------------------------------------------------------- | -| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Estimated pose | -| `~/debug/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [debug topic] Estimated pose | -| `~/debug/marker_detected` | `geometry_msgs::msg::PoseArray` | [debug topic] Detected marker poses | -| `~/debug/marker_mapped` | `visualization_msgs::msg::MarkerArray` | [debug topic] Loaded landmarks to visualize in Rviz as thin boards | -| `~/debug/marker_pointcloud` | `sensor_msgs::msg::PointCloud2` | [debug topic] PointCloud of the detected marker | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | Diagnostics outputs | +#### 出力 -## Parameters +- [Autoware 自動運転ソフトウェアドキュメント](**URL** にリンク) + +**はじめに** + +このドキュメントでは、Autoware の自動運転ソフトウェアの詳細について説明します。Autoware は、オープンソースのソフトウェアスタックであり、車が周囲環境を認識し、計画を立て、制御を行うために必要なすべてのコンポーネントが含まれています。 + +**コンポーネント** + +Autoware は、以下の主要コンポーネントで構成されています。 + +- **Perception (認識)**: センサーデータから周囲環境を認識します。 +- **Planning (計画)**: 自車の経路と操縦操作を計画します。 +- **Control (制御)**: 計画された操縦操作を車両に送信します。 +- **Localization (局所化)**: 自車位置と姿勢を特定します。 + +**機能** + +Autoware は、以下の機能を提供します。 + +- **物体検出**: 車両、歩行者、自転車などの周囲の物体を検出します。 +- **障害物検出**: レーンマーカー、ガードレールなどの障害物を検出します。 +- **経路計画**: 目的地までの安全で効率的な経路を計画します。 +- **操縦制御**: 車両の速度、操舵、ブレーキを制御します。 +- **自車位置推定**: GPS、IMU、オドメトリーを使用して自車位置を推定します。 + +**アーキテクチャ** + +Autoware は、モジュール式アーキテクチャに基づいています。これにより、開発者は特定のコンポーネントや機能を交換したり拡張したりできます。各コンポーネントは、他のコンポーネントとデータと情報をやり取りします。 + +**パフォーマンス** + +Autoware は、以下のパフォーマンス指標を満たすように設計されています。 + +- **検出範囲**: 200m 以上の物体検出 +- **経路計画時間**: 100ms 以内 +- **操縦制御精度**: ±0.5m の横方向逸脱量、±0.2m/s の速度逸脱量、±0.2m/s² の加速度逸脱量 +- **自車位置精度**: 1m 以内の絶対位置精度、0.1度以内の姿勢精度 + +**使用例** + +Autoware は、以下を含むさまざまな自動運転アプリケーションに使用できます。 + +- **自動運転車** +- **ロボタクシー** +- **貨物配送車両** + +**貢献** + +Autoware はオープンソースプロジェクトであり、コミュニティからの貢献を歓迎しています。貢献方法の詳細については、Autoware の Web サイトを参照してください。 + +**免責事項** + +このドキュメントに記載されている情報は、正確で最新であることを目指していますが、Autoware Foundation はその正確性または完全性について保証しません。Autoware の使用は、ユーザー自身の責任において行われるものとします。 + +| 名前 | 種類 | 説明 | +| :-----------------------------------| :------------------------------------------------- | :--------------------------------------------------------------------- | +| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定姿勢 | +| `~/debug/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] 推定姿勢 | +| `~/debug/marker_detected` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 検出されたマーカートピック | +| `~/debug/marker_mapped` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] Rvizで薄板として可視化するための読み込まれたランドマーク | +| `~/debug/marker_pointcloud` | `sensor_msgs::msg::PointCloud2` | 検出されたマーカーのPointCloud | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断結果 | + +## パラメータ {{ json_to_markdown("localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/schema/lidar_marker_localizer.schema.json") }} -## How to launch +## 起動方法 + +Autowareを起動する際は、`pose_source`に`lidar-marker`を設定します。 -When launching Autoware, set `lidar-marker` for `pose_source`. ```bash ros2 launch autoware_launch ... \ @@ -39,9 +106,10 @@ ros2 launch autoware_launch ... \ ... ``` -## Design +## 設計 + +### フローチャート -### Flowchart ```plantuml @startuml @@ -92,23 +160,24 @@ end group ``` -## Detection Algorithm +## 検出アルゴリズム ![detection_algorithm](./doc_image/detection_algorithm.png) -1. Split the LiDAR point cloud into rings along the x-axis of the base_link coordinate system at intervals of the `resolution` size. -2. Find the portion of intensity that matches the `intensity_pattern`. -3. Perform steps 1 and 2 for each ring, accumulate the matching indices, and detect portions where the count exceeds the `vote_threshold_for_detect_marker` as markers. +1. LiDAR 点群を `resolution` サイズの間隔で base_link 座標系の x 軸に沿ってリング状に分割する。 +2. `intensity_pattern` に一致する強度の部分を検索する。 +3. 各リングに対して 1 と 2 の手順を実行し、一致するインデックスを蓄積し、カウントが `vote_threshold_for_detect_marker` を超える部分をマーカーとして検出する。 -## Sample Dataset +## サンプルデータセット -- [Sample rosbag and map](https://drive.google.com/file/d/1FuGKbkWrvL_iKmtb45PO9SZl1vAaJFVG/view?usp=sharing) +- [サンプル rosbag と地図](https://drive.google.com/file/d/1FuGKbkWrvL_iKmtb45PO9SZl1vAaJFVG/view?usp=sharing) -This dataset was acquired in National Institute for Land and Infrastructure Management, Full-scale tunnel experiment facility. -The reflectors were installed by [Taisei Corporation](https://www.taisei.co.jp/english/). +このデータセットは、国土交通省 土木研究所 大規模トンネル実験施設で取得されました。 +反射材は [大成建設](https://www.taisei.co.jp/english/) によって設置されました。 -## Collaborators +## 協力者 - [TIER IV](https://tier4.jp/en/) -- [Taisei Corporation](https://www.taisei.co.jp/english/) +- [大成建設](https://www.taisei.co.jp/english/) - [Yuri Shimizu](https://github.com/YuriShimizu824) + diff --git a/localization/autoware_localization_error_monitor/README.md b/localization/autoware_localization_error_monitor/README.md index 9ea1eb5b269d9..dcb5f93a0bafe 100644 --- a/localization/autoware_localization_error_monitor/README.md +++ b/localization/autoware_localization_error_monitor/README.md @@ -1,32 +1,97 @@ -# autoware_localization_error_monitor +## autoware_localization_error_monitor -## Purpose +## 目的

-autoware_localization_error_monitor is a package for diagnosing localization errors by monitoring uncertainty of the localization results. -The package monitors the following two values: +autoware_localization_error_monitorは、位置推定の結果の不確かさを監視することで位置推定のエラーを診断するためのパッケージです。 +このパッケージは次の2つの値を監視します。 -- size of long radius of confidence ellipse -- size of confidence ellipse along lateral direction (body-frame) +- 信頼楕円の長い半径のサイズ +- 横方向(車体フレーム)に沿った信頼楕円のサイズ -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | +| 名前 | タイプ | 説明 | | ------------ | ------------------------- | ------------------- | -| `input/odom` | `nav_msgs::msg::Odometry` | localization result | +| `input/odom` | `nav_msgs::msg::Odometry` | 自車位置結果 | -### Output +### 出力 -| Name | Type | Description | +**自動運転ソフトウェアの設計** + +**概要** + +このドキュメントは、自動運転ソフトウェアの設計の概要を説明します。以下に含まれる内容を示します。 + +- アーキテクチャ +- 主要コンポーネント +- アルゴリズム +- 実装 + +**アーキテクチャ** + +Autowareのアーキテクチャは、モジュラー化されたレイヤー構造に基づいています。各レイヤーは、特定のタスクを担当するモジュールで構成されます。このアーキテクチャにより、柔軟性、拡張性、保守性が向上します。 + +**主要コンポーネント** + +主要コンポーネントには、以下が含まれます。 + +- Planningコンポーネント +- Perceptionコンポーネント +- Controlコンポーネント +- Vehicle Interfaceコンポーネント + +**アルゴリズム** + +Autowareは、以下を含むさまざまなアルゴリズムを使用しています。 + +- パス計画 +- トラフィック予測 +- オブジェクト検出 +- クラシフィケーション + +**実装** + +Autowareは、ROS (Robot Operating System) を実装しています。ROSは、ロボットソフトウェア開発のためのオープンソースのフレームワークです。このフレームワークにより、モジュールの再利用、拡張、テストが容易になります。 + +**評価** + +Autowareは、シミュレーションと実際の道路テストの両方で評価されています。結果は、Autowareがさまざまなシナリオで安全かつ効率的に動作することを示しています。 + +**使用例** + +Autowareは、以下を含むさまざまな用途で使用できます。 + +- 自動運転車 +- ロボット +- ドローン + +**サポート** + +Autowareは、アクティブなコミュニティによってサポートされています。コミュニティでは、ドキュメント、フォーラム、チュートリアルを介してサポートを提供しています。 + +**貢献** + +Autowareはオープンソースプロジェクトです。貢献に興味がある場合は、GitHubリポジトリをご覧ください。 + +**詳細情報** + +Autowareに関する詳細情報は、以下のリソースを参照してください。 + +- 公式ウェブサイト: https://www.autoware.ai +- GitHubリポジトリ: https://github.com/autowarefoundation/autoware.ai + +| 名称 | 型 | 説明 | | ---------------------- | --------------------------------------- | ------------------- | -| `debug/ellipse_marker` | `visualization_msgs::msg::Marker` | ellipse marker | -| `diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | diagnostics outputs | +| `debug/ellipse_marker` | `visualization_msgs::msg::Marker` | 楕円マーカー | +| `diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断出力 | + +## パラメータ -## Parameters +{{ json_to_markdown("localization/autoware_localization_error_monitor/schema/localization_error_monitor.schema.json", True) }} -{{ json_to_markdown("localization/autoware_localization_error_monitor/schema/localization_error_monitor.schema.json") }} diff --git a/localization/autoware_localization_util/README.md b/localization/autoware_localization_util/README.md index f7fddd9eebf05..289de2931eae1 100644 --- a/localization/autoware_localization_util/README.md +++ b/localization/autoware_localization_util/README.md @@ -1,5 +1,6 @@ # autoware_localization_util -`autoware_localization_util` is a localization utility package. +`autoware_localization_util` はローカライゼーション用のユーティリティパッケージです。 + +このパッケージにはノードはなく、ライブラリのみです。 -This package does not have a node, it is just a library. diff --git a/localization/autoware_ndt_scan_matcher/README.md b/localization/autoware_ndt_scan_matcher/README.md index 22e56930a0048..93d668eaf884c 100644 --- a/localization/autoware_ndt_scan_matcher/README.md +++ b/localization/autoware_ndt_scan_matcher/README.md @@ -1,94 +1,94 @@ # autoware_ndt_scan_matcher -## Purpose +## 目的 -autoware_ndt_scan_matcher is a package for position estimation using the NDT scan matching method. +autoware_ndt_scan_matcherはNDTスキャンマッチング手法を使用した位置推定パッケージです。 -There are two main functions in this package: +このパッケージには、次の2つの主な機能があります。 -- estimate position by scan matching -- estimate initial position via the ROS service using the Monte Carlo method +- スキャンマッチングによる位置推定 +- モンテカルロ法を使用したROSサービスによる初期位置推定 -One optional function is regularization. Please see the regularization chapter in the back for details. It is disabled by default. +オプション機能として正則化があります。詳細は後述の正則化の章を参照してください。デフォルトでは無効になっています。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ----------------------------------- | ----------------------------------------------- | ------------------------------------- | -| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | initial pose | -| `points_raw` | `sensor_msgs::msg::PointCloud2` | sensor pointcloud | -| `sensing/gnss/pose_with_covariance` | `sensor_msgs::msg::PoseWithCovarianceStamped` | base position for regularization term | +| 名称 | タイプ | 説明 | +| ----------------------------------- | --------------------------------------------- | --------------------------------------- | +| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 初期位置 | +| `points_raw` | `sensor_msgs::msg::PointCloud2` | センサポイントクラウド | +| `sensing/gnss/pose_with_covariance` | `sensor_msgs::msg::PoseWithCovarianceStamped` | 正規化項の基本位置 | -> `sensing/gnss/pose_with_covariance` is required only when regularization is enabled. +`sensing/gnss/pose_with_covariance` は、正則化が有効な場合にのみ必要です。 -### Output +### 出力 -| Name | Type | Description | -| --------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| `ndt_pose` | `geometry_msgs::msg::PoseStamped` | estimated pose | -| `ndt_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | estimated pose with covariance | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | diagnostics | -| `points_aligned` | `sensor_msgs::msg::PointCloud2` | [debug topic] pointcloud aligned by scan matching | -| `points_aligned_no_ground` | `sensor_msgs::msg::PointCloud2` | [debug topic] no ground pointcloud aligned by scan matching | -| `initial_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [debug topic] initial pose used in scan matching | -| `multi_ndt_pose` | `geometry_msgs::msg::PoseArray` | [debug topic] estimated poses from multiple initial poses in real-time covariance estimation | -| `multi_initial_pose` | `geometry_msgs::msg::PoseArray` | [debug topic] initial poses for real-time covariance estimation | -| `exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] execution time for scan matching [ms] | -| `transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] score of scan matching | -| `no_ground_transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] score of scan matching based on no ground LiDAR scan | -| `iteration_num` | `tier4_debug_msgs::msg::Int32Stamped` | [debug topic] number of scan matching iterations | -| `initial_to_result_relative_pose` | `geometry_msgs::msg::PoseStamped` | [debug topic] relative pose between the initial point and the convergence point | -| `initial_to_result_distance` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] distance difference between the initial point and the convergence point [m] | -| `initial_to_result_distance_old` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] distance difference between the older of the two initial points used in linear interpolation and the convergence point [m] | -| `initial_to_result_distance_new` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] distance difference between the newer of the two initial points used in linear interpolation and the convergence point [m] | -| `ndt_marker` | `visualization_msgs::msg::MarkerArray` | [debug topic] markers for debugging | -| `monte_carlo_initial_pose_marker` | `visualization_msgs::msg::MarkerArray` | [debug topic] particles used in initial position estimation | +| 名前 | タイプ | 説明 | +| ----------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `ndt_pose` | `geometry_msgs::msg::PoseStamped` | 推定位相 | +| `ndt_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 共分散による推定位相 | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断 | +| `points_aligned` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングでアラインされた点群 | +| `points_aligned_no_ground` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングでアラインされた、地面を除いた点群 | +| `initial_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] スキャンマッチングで使用される初期位相 | +| `multi_ndt_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 実時間共分散推定におけるさまざまな初期位相からの推定位相 | +| `multi_initial_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 実時間共分散推定における初期位相 | +| `exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングの実行時間 [ミリ秒] | +| `transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングのスコア | +| `no_ground_transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 地面のない LiDAR スキャンのスコア | +| `iteration_num` | `tier4_debug_msgs::msg::Int32Stamped` | [デバッグトピック] スキャンマッチングのイテレーション数 | +| `initial_to_result_relative_pose` | `geometry_msgs::msg::PoseStamped` | [デバッグトピック] 初期点と収束点間の相対位相 | +| `initial_to_result_distance` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 初期点と収束点間の距離 [メートル] | +| `initial_to_result_distance_old` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される古い 2 つの初期点のうちの 1 つと収束点の距離差 [メートル] | +| `initial_to_result_distance_new` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される新しい 2 つの初期点のうちの 1 つと収束点の距離差 [メートル] | +| `ndt_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] デバッグ用のマーカー | +| `monte_carlo_initial_pose_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] 初期位置推定に使用されるパーティクル | -### Service +### サービス -| Name | Type | Description | -| --------------- | ------------------------------------------------------------ | -------------------------------- | -| `ndt_align_srv` | `autoware_localization_srvs::srv::PoseWithCovarianceStamped` | service to estimate initial pose | +| Name | Type | Description | +| --------------- | --------------------------------------------------------------- | --------------------------------- | +| `ndt_align_srv` | `autoware_localization_srvs::srv::PoseWithCovarianceStamped` | 初期姿勢推定サービス | -## Parameters +## パラメーター -### Core Parameters +### コアパラメーター -#### Frame +#### フレーム -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/frame.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/frame.json") }} #### Sensor Points -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/sensor_points.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/sensor_points.json") }} #### Ndt -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/ndt.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/ndt.json") }} -#### Initial Pose Estimation +#### 初期姿勢推定 -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/initial_pose_estimation.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/initial_pose_estimation.json") }} -#### Validation +#### 検証 -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/validation.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/validation.json") }} -#### Score Estimation +#### スコア推定 -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/score_estimation.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/score_estimation.json") }} -#### Covariance +#### 共分散 -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/covariance.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/covariance.json") }} -## Regularization +## 正則化 -### Abstract +### 概要 -This is a function that adds the regularization term to the NDT optimization problem as follows. +この関数は、正規化項をNDT最適化問題に追加し、次のようになります。 $$ \begin{align} @@ -107,13 +107,15 @@ $$ \end{align} $$ -, where t_base is base position measured by GNSS or other means. -NDT(R,t) stands for the pure NDT cost function. -The regularization term shifts the optimal solution to the base position in the longitudinal direction of the vehicle. -Only errors along the **longitudinal direction** with respect to the base position are considered; errors along Z-axis and lateral-axis error are not considered. +ここで、t_baseはGNSSまたは他の手段によって測定されたベース位置です。 +NDT(R,t)は純粋なNDTコスト関数を表します。 +正則化項は、最適解を車両の**縦方向**のベース位置にシフトさせます。 +ベース位置に対する**縦方向**の誤差のみが考慮され、Z軸および横方向の誤差は考慮されません。 -Although the regularization term has rotation as a parameter, the gradient and hessian associated with it is not computed to stabilize the optimization. -Specifically, the gradients are computed as follows. +**正則化** + +正則化項には回転がパラメータとして含まれていますが、最適化を安定化するために、それらに関連付けられた勾配とヘッセ行列を計算しません。 +具体的には、勾配は次のように計算されます。 $$ \begin{align} @@ -127,243 +129,241 @@ $$ \end{align} $$ -Regularization is disabled by default. -If you wish to use it, please edit the following parameters to enable it. +正則化はデフォルトで無効になっています。 +使用する場合は、以下のパラメータを編集して有効にしてください。 -#### Where is regularization available +#### 正則化が利用できる場所 -This feature is effective on feature-less roads where GNSS is available, such as +この機能は、GNSS が利用可能な特徴のない道路で有効です。たとえば、 -- bridges -- highways -- farm roads +- 橋 +- 高速道路 +- 農道 -By remapping the base position topic to something other than GNSS, as described below, it can be valid outside of these. +以下のように、ベース位置トピックを GNSS 以外のものにリマッピングすることで、これらの外部でも有効にすることができます。 -#### Using other base position +#### 他のベース位置の使用 -Other than GNSS, you can give other global position topics obtained from magnetic markers, visual markers or etc. if they are available in your environment. -(Currently Autoware does not provide a node that gives such pose.) -To use your topic for regularization, you need to remap the `input_regularization_pose_topic` with your topic in `ndt_scan_matcher.launch.xml`. -By default, it is remapped with `/sensing/gnss/pose_with_covariance`. +GNSS 以外の場合は、磁気マーカーやビジュアルマーカーなどから取得した他のグローバル位置トピックを提供できます(利用可能であれば)。 +(現在、Autoware はそのような姿勢を与えるノードを提供していません。)正則化にトピックを使用するには、`ndt_scan_matcher.launch.xml` 内で`input_regularization_pose_topic` をトピックにリマッピングする必要があります。 +デフォルトでは、`/sensing/gnss/pose_with_covariance` にリマッピングされます。 -#### Limitations +#### 制限 -Since this function determines the base position by linear interpolation from the recently subscribed poses, -topics that are published at a low frequency relative to the driving speed cannot be used. -Inappropriate linear interpolation may result in bad optimization results. +この機能は、最近サブスクライブした姿勢から線形補間によってベース位置を決定するため、走行速度に対して低い周波数で公開されるトピックは使用できません。 +不適切な線形補間は、最適化結果が悪くなる可能性があります。 -When using GNSS for base location, the regularization can have negative effects in tunnels, indoors, and near skyscrapers. -This is because if the base position is far off from the true value, NDT scan matching may converge to inappropriate optimal position. +ベース位置に GNSS を使用する場合、トンネル、屋内、高層ビルの近くで正則化がマイナスの影響を与える可能性があります。 +これは、ベース位置が実際の値から大きく離れている場合、NDT スキャンマッチングが不適切な最適位置に収束する可能性があるためです。 -### Parameters +### パラメータ {{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/ndt_regularization.json") }} -Regularization is disabled by default because GNSS is not always accurate enough to serve the appropriate base position in any scenes. +正則化は、GNSS がどのシーンでも適切なベース位置を提供するのに十分な精度とは限らないため、デフォルトで無効になっています。 -If the scale_factor is too large, the NDT will be drawn to the base position and scan matching may fail. -Conversely, if it is too small, the regularization benefit will be lost. +`scale_factor` が大きすぎると、NDT がベース位置に引き寄せられ、スキャンマッチングが失敗する可能性があります。 +逆に、小さすぎると、正則化の利点が失われます。 -Note that setting scale_factor to 0 is equivalent to disabling regularization. +`scale_factor` を 0 に設定することは、正則化を無効にすることと同じであることに注意してください。 -### Example +### 例 -The following figures show tested maps. +以下の図は、テストされたマップを示しています。 -- The left is a map with enough features that NDT can successfully localize. -- The right is a map with so few features that the NDT cannot localize well. +- 右側はフィーチャがほとんどないマップです。このマップでは、NDTは適切にローカライズできません。 drawing drawing -The following figures show the trajectories estimated on the feature-less map with standard NDT and regularization-enabled NDT, respectively. -The color of the trajectory indicates the error (meter) from the reference trajectory, which is computed with the feature-rich map. +次の図は、それぞれ、フィーチャが少ないマップ上で見積もった軌跡と、正規化が有効なNDTで見積もった軌跡を示しています。 +軌跡の色は、フィーチャが豊富なマップで計算された基準軌跡からの誤差(メートル)を示します。 -- The left figure shows that the pure NDT causes a longitudinal error in the bridge and is not able to recover. -- The right figure shows that the regularization suppresses the longitudinal error. +- 左側の図は、純粋なNDTではブリッジに longitudinal エラーが生じ、回復できないことを示しています。 +- 右側の図は、正規化により longitudinal エラーが抑制されることを示しています。 drawing drawing -## Dynamic map loading +## 動的マップロード -Autoware supports dynamic map loading feature for `ndt_scan_matcher`. Using this feature, NDT dynamically requests for the surrounding pointcloud map to `pointcloud_map_loader`, and then receive and preprocess the map in an online fashion. +Autowareは `ndt_scan_matcher` 用の動的マップロード機能をサポートしています。この機能を使用することで、NDTは周囲のポイントクラウドマップを `pointcloud_map_loader` に動的に要求し、オンラインでマップを受信して処理します。 -Using the feature, `ndt_scan_matcher` can theoretically handle any large size maps in terms of memory usage. (Note that it is still possible that there exists a limitation due to other factors, e.g. floating-point error) +この機能を使用すると、`ndt_scan_matcher` は理論的にはメモリ使用量に関して任意の大規模マップを処理できます。(浮動小数点誤差などの他の要因によって制限が存在する可能性があることに注意してください) drawing -### Additional interfaces +### 追加インターフェイス -#### Additional outputs +#### 追加出力 -| Name | Type | Description | -| ----------------------------- | ------------------------------- | ------------------------------------------------- | -| `debug/loaded_pointcloud_map` | `sensor_msgs::msg::PointCloud2` | pointcloud maps used for localization (for debug) | +| 名 | タイプ | 説明 | +| ---- | ---- | ---- | +| `debug/loaded_pointcloud_map` | `sensor_msgs::msg::PointCloud2` | ローカライゼーション用に使用される点群マップ(デバッグ用) | -#### Additional client +#### 追加クライアント -| Name | Type | Description | +| 名前 | 型 | 説明 | | ------------------- | ------------------------------------------------------ | ------------------ | -| `client_map_loader` | `autoware_map_msgs::srv::GetDifferentialPointCloudMap` | map loading client | +| `client_map_loader` | `autoware_map_msgs::srv::GetDifferentialPointCloudMap` | マップ読み込みクライアント | -### Parameters +### パラメータ {{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/dynamic_map_loading.json") }} -### Notes for dynamic map loading +### 動的マップロードの注意事項 -To use dynamic map loading feature for `ndt_scan_matcher`, you also need to split the PCD files into grids (recommended size: 20[m] x 20[m]) +`ndt_scan_matcher` で動的マップロード機能を使用するには、PCD ファイルをグリッドに分割する必要があります(推奨サイズ:20 [m] x 20 [m])。 -Note that the dynamic map loading may FAIL if the map is split into two or more large size map (e.g. 1000[m] x 1000[m]). Please provide either of +マップが2つ以上の大きなマップ(例:1000 [m] x 1000 [m])に分割されている場合、動的マップロードは失敗する可能性があります。次のいずれかを提供してください。 -- one PCD map file -- multiple PCD map files divided into small size (~20[m]) +- PCD マップファイル 1 つ +- 小さいサイズ(~20 [m])に分割された複数の PCD マップファイル -Here is a split PCD map for `sample-map-rosbag` from Autoware tutorial: [`sample-map-rosbag_split.zip`](https://github.com/autowarefoundation/autoware.universe/files/10349104/sample-map-rosbag_split.zip) +Autoware チュートリアルの `sample-map-rosbag` の分割された PCD マップを次に示します。[`sample-map-rosbag_split.zip`](https://github.com/autowarefoundation/autoware.universe/files/10349104/sample-map-rosbag_split.zip) -| PCD files | How NDT loads map(s) | +| PCDファイル | NDTがマップを読み込む方法 | | :------------: | :------------------: | -| single file | at once (standard) | -| multiple files | dynamically | +| 単一ファイル | 一括(標準) | +| 複数ファイル | 動的 | -## Scan matching score based on no ground LiDAR scan +## グランドLiDARスキャンなしでのスキャンマッチングスコア -### Abstract +### 概要 -This is a function that uses no ground LiDAR scan to estimate the scan matching score. This score can reflect the current localization performance more accurately. -[related issue](https://github.com/autowarefoundation/autoware.universe/issues/2044). +これは、グランドLiDARスキャンを使用せずにスキャンマッチングスコアを推定する関数です。このスコアは、現在の局所化パフォーマンスをより正確に反映できます。 +[関連するissue](https://github.com/autowarefoundation/autoware.universe/issues/2044)。 -### Parameters +### パラメータ {{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/score_estimation_no_ground_points.json") }} -## 2D real-time covariance estimation +## 2Dリアルタイム共分散推定 -### Abstract +### 概要 -Initially, the covariance of NDT scan matching is a fixed value(FIXED_VALUE mode). -So, three modes are provided for 2D covariance (xx, xy, yx, yy) estimation in real time: LAPLACE_APPROXIMATION, MULTI_NDT, and MULTI_NDT_SCORE. -LAPLACE_APPROXIMATION calculates the inverse matrix of the XY (2x2) part of the Hessian obtained by NDT scan matching and uses it as the covariance matrix. -On the other hand, MULTI_NDT, and MULTI_NDT_SCORE use NDT convergence from multiple initial poses to obtain 2D covariance. -Ideally, the arrangement of multiple initial poses is efficiently limited by the Hessian matrix of the NDT score function. -In this implementation, the number of initial positions is fixed to simplify the code. -To obtain the covariance, MULTI_NDT computes until convergence at each initial position, while MULTI_NDT_SCORE uses the nearest voxel transformation likelihood. -The covariance can be seen as error ellipse from ndt_pose_with_covariance setting on rviz2. -[original paper](https://www.fujipress.jp/jrm/rb/robot003500020435/). +当初、NDTスキャンマッチングの共分散は固定値(FIXED_VALUEモード)です。 +そのため、2D共分散(xx、xy、yx、yy)のリアルタイム推定には、LAPLACE_APPROXIMATION、MULTI_NDT、MULTI_NDT_SCOREの3つのモードが用意されています。 +LAPLACE_APPROXIMATIONは、NDTスキャンマッチングによって得られたヘシアンのXY(2x2)部分の逆行列を計算し、それを共分散行列として使用します。 +一方、MULTI_NDTとMULTI_NDT_SCOREは、複数の初期姿勢からのNDT収束を利用して2D共分散を取得します。 +理想的には、複数の初期姿勢の配置は、NDTスコア関数のヘシアン行列によって効率的に制限されます。 +この実装では、コードを簡素化するために初期位置の数が固定されています。 +MULTI_NDTは、共分散を得るために各初期位置で収束するまで計算を実行する一方、MULTI_NDT_SCOREは最近傍ボクセル変換尤度を使用します。 +rviz2でndt_pose_with_covarianceを設定すると、共分散をndtからエラー楕円として見ることができます。 +[元論文](https://www.fujipress.jp/jrm/rb/robot003500020435/)。 drawing -Note that this function may spoil healthy system behavior if it consumes much calculation resources. +この関数は大量の計算リソースを消費すると健全なシステムの挙動を損なう可能性があることに注意してください。 -### Parameters +### パラメータ -There are three types in the calculation of 2D covariance in real time.You can select the method by changing covariance_estimation_type. -initial_pose_offset_model is rotated around (x,y) = (0,0) in the direction of the first principal component of the Hessian matrix. -initial_pose_offset_model_x & initial_pose_offset_model_y must have the same number of elements. -In MULTI_NDT_SCORE mode, the scale of the output 2D covariance can be adjusted according to the temperature. +リアルタイムで2D共分散を計算するための3つの方法があります。covariance_estimation_typeを変更することで方法を選択できます。 +initial_pose_offset_modelは、ヘシアン行列の第1主成分の方向に(x、y)=(0、0)を中心に回転します。 +initial_pose_offset_model_xとinitial_pose_offset_model_yは同じ数の要素を持つ必要があります。 +MULTI_NDT_SCOREモードでは、出力2D共分散のスケールを温度に応じて調整できます。 {{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json") }} -## Diagnostics +## 診断 ### scan_matching_status drawing -| Name | Description | Transition condition to Warning | Transition condition to Error | Whether to reject the estimation result (affects `skipping_publish_num`) | -| ------------------------------------------------ | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- | --------------------------------------------------------------------------------------------------- | -| `topic_time_stamp` | the time stamp of input topic | none | none | no | -| `sensor_points_size` | the size of sensor points | the size is 0 | none | yes | -| `sensor_points_delay_time_sec` | the delay time of sensor points | the time is **longer** than `sensor_points.timeout_sec` | none | yes | -| `is_succeed_transform_sensor_points` | whether transform sensor points is succeed or not | none | failed | yes | -| `sensor_points_max_distance` | the max distance of sensor points | the max distance is **shorter** than `sensor_points.required_distance` | none | yes | -| `is_activated` | whether the node is in the "activate" state or not | not "activate" state | none | if `is_activated` is false, then estimation is not executed and `skipping_publish_num` is set to 0. | -| `is_succeed_interpolate_initial_pose` | whether the interpolate of initial pose is succeed or not | failed.
(1) the size of `initial_pose_buffer_` is **smaller** than 2.
(2) the timestamp difference between initial_pose and sensor pointcloud is **longer** than `validation.initial_pose_timeout_sec`.
(3) distance difference between two initial poses used for linear interpolation is **longer** than `validation.initial_pose_distance_tolerance_m` | none | yes | -| `is_set_map_points` | whether the map points is set or not | not set | none | yes | -| `iteration_num` | the number of times calculate alignment | the number of times is **larger** than `ndt.max_iterations` | none | yes | -| `local_optimal_solution_oscillation_num` | the number of times the solution is judged to be oscillating | the number of times is **larger** than 10 | none | yes | -| `transform_probability` | the score of how well the map aligns with the sensor points | the score is **smaller** than`score_estimation.converged_param_transform_probability` (only in the case of `score_estimation.converged_param_type` is 0=TRANSFORM_PROBABILITY) | none | yes | -| `transform_probability_diff` | the tp score difference for the current ndt optimization | none | none | no | -| `transform_probability_before` | the tp score before the current ndt optimization | none | none | no | -| `nearest_voxel_transformation_likelihood` | the score of how well the map aligns with the sensor points | the score is **smaller** than `score_estimation.converged_param_nearest_voxel_transformation_likelihood` (only in the case of `score_estimation.converged_param_type` is 1=NEAREST_VOXEL_TRANSFORMATION_LIKELIHOOD) | none | yes | -| `nearest_voxel_transformation_likelihood_diff` | the nvtl score difference for the current ndt optimization | none | none | no | -| `nearest_voxel_transformation_likelihood_before` | the nvtl score before the current ndt optimization | none | none | no | -| `distance_initial_to_result` | the distance between the position before convergence processing and the position after | the distance is **longer** than `validation.initial_to_result_distance_tolerance_m` | none | no | -| `execution_time` | the time for convergence processing | the time is **longer** than `validation.critical_upper_bound_exe_time_ms` | none | no | -| `skipping_publish_num` | the number of times rejected estimation results consecutively | the number of times is `validation.skipping_publish_num` or more | none | - | - -※The `sensor_points_callback` shares the same callback group as the `trigger_node_service` and `ndt_align_service`. Consequently, if the initial pose estimation takes too long, this diagnostic may become stale. +| Name | 説明 | 警告への遷移条件 | エラーへの遷移条件 | 推定結果の破棄の有無 ( `skipping_publish_num` に影響) | +| ------------------------------------------------ | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ----------------------------------------------------- | +| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | いいえ | +| `sensor_points_size` | センサーポイントのサイズ | サイズが `sensor_points.timeout_sec` より **長い** | なし | はい | +| `sensor_points_delay_time_sec` | センサーポイントの遅延時間 | 時刻が `sensor_points.timeout_sec` より **長い** | なし | はい | +| `is_succeed_transform_sensor_points` | センサーポイントの変換が成功したかどうか | なし | 失敗 | はい | +| `sensor_points_max_distance` | センサーポイントの最大距離 | 最大距離が `sensor_points.required_distance` より **短い** | なし | はい | +| `is_activated` | ノードが "active" 状態であるかどうか | "active" 状態ではない | なし | `is_activated` が false の場合、推定は実行されず、 `skipping_publish_num` は 0 に設定されます。 | +| `is_succeed_interpolate_initial_pose` | 初期姿勢の補間が成功したかどうか | 失敗。
(1) `initial_pose_buffer_` のサイズが **2** より小さい。
(2) 初期姿勢とセンサーポイントクラウド間のタイムスタンプの差が `validation.initial_pose_timeout_sec` より **長い**。
(3) 線形補間に使用される 2 つ の初期姿勢間の距離の差が `validation.initial_pose_distance_tolerance_m` より **長い** | なし | はい | +| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | はい | +| `iteration_num` | 整列を計算する回数 | 回数が `ndt.max_iterations` より **多い** | なし | はい | +| `local_optimal_solution_oscillation_num` | ソリューションが振動していると判断された回数 | 回数が **10** より **多い** | なし | はい | +| `transform_probability` | マップがセンサーポイントとどれほどよく一致するかを表すスコア | スコアが `score_estimation.converged_param_transform_probability` より **小さい** (`score_estimation.converged_param_type` が 0=TRANSFORM_PROBABILITY の場合のみ) | なし | はい | +| `transform_probability_diff` | 現在 `ndt` 最適化のtpスコア差 | なし | なし | いいえ | +| `transform_probability_before` | 現在 `ndt` 最適化前のtpスコア | なし | なし | いいえ | +| `nearest_voxel_transformation_likelihood` | マップがセンサーポイントとどれほどよく一致するかを表すスコア | スコアが `score_estimation.converged_param_nearest_voxel_transformation_likelihood` より **小さい** (`score_estimation.converged_param_type` が 1=NEAREST_VOXEL_TRANSFORMATION_LIKELIHOOD の場合のみ) | なし | はい | +| `nearest_voxel_transformation_likelihood_diff` | 現在 `ndt` 最適化のnvtlスコア差 | なし | なし | いいえ | +| `nearest_voxel_transformation_likelihood_before` | 現在 `ndt` 最適化前のnvtlスコア | なし | なし | いいえ | +| `distance_initial_to_result` | 収束処理前と後の位置間の距離 | 距離が `validation.initial_to_result_distance_tolerance_m` より **長い** | なし | いいえ | +| `execution_time` | 収束処理時間 | 時刻が `validation.critical_upper_bound_exe_time_ms` より **長い** | なし | いいえ | +| `skipping_publish_num` | 連続して推定結果を破棄した回数 | 回数が `validation.skipping_publish_num` 以上 | なし | - | + +※`sensor_points_callback`は`trigger_node_service`および`ndt_align_service`と同一コールバックグループを共有しています。結果的に、初期ポーズ推定に時間がかかりすぎると、この診断は古くなる可能性があります。 ### initial_pose_subscriber_status drawing -| Name | Description | Transition condition to Warning | Transition condition to Error | -| ---------------------- | ------------------------------------------------------------------ | ------------------------------- | ----------------------------- | -| `topic_time_stamp` | the time stamp of input topic | none | none | -| `is_activated` | whether the node is in the "activate" state or not | not "activate" state | none | -| `is_expected_frame_id` | whether the input frame_id is the same as `frame.map_frame` or not | none | not the same | +| 名前 | 説明 | 注意の状態への遷移条件 | エラーの状態への遷移条件 | +| ------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------------------------------- | -------------------------------------------------------- | +| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | +| `is_activated` | ノードが「アクティブ」状態であるかどうか | 「アクティブ」状態以外 | なし | +| `is_expected_frame_id` | 入力フレーム IDが `frame.map_frame`と同一かどうか | なし | 異なる場合 | ### regularization_pose_subscriber_status drawing -| Name | Description | Transition condition to Warning | Transition condition to Error | -| ------------------ | ----------------------------- | ------------------------------- | ----------------------------- | -| `topic_time_stamp` | the time stamp of input topic | none | none | +| Name | Description | Transition condition to Warning | Transition condition to Error | +| ------------------------- | --------------------------------------- | ---------------------------------- | ----------------------------- | +| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | ### trigger_node_service_status -drawing +図 -| Name | Description | Transition condition to Warning | Transition condition to Error | -| ------------------------- | -------------------------------------------------- | ------------------------------- | ----------------------------- | -| `service_call_time_stamp` | the time stamp of service calling | none | none | -| `is_activated` | whether the node is in the "activate" state or not | none | none | -| `is_succeed_service` | whether the process of service is succeed or not | none | none | +| 名称 | 説明 | Warningへの移行条件 | Errorへの移行条件 | +| ------------------------- | --------------------------------------------------- | -------------------------- | --------------------- | +| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | +| `is_activated` | ノードが「アクティブ」状態か否か | なし | なし | +| `is_succeed_service` | サービスプロセスの成功または失敗 | なし | なし | ※ -This diagnostic is only published when the service is called, so it becomes stale after the initial pose estimation is completed. +この診断はサービスが呼び出されたときにのみ発行されるので、初期姿勢推定が完了すると古いものになります。 ### ndt_align_service_status -drawing - -| Name | Description | Transition condition to Warning | Transition condition to Error | -| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ----------------------------------------------------------- | -| `service_call_time_stamp` | the time stamp of service calling | none | none | -| `is_succeed_transform_initial_pose` | whether transform initial pose is succeed or not | none | failed | -| `is_need_rebuild` | whether it need to rebuild the map. If the map has not been loaded yet or if `distance_last_update_position_to_current_position encounters` is an Error state, it is considered necessary to reconstruct the map, and `is_need_rebuild` becomes `True`. | none | none | -| `maps_size_before` | the number of maps before update map | none | none | -| `is_succeed_call_pcd_loader` | whether call pcd_loader service is succeed or not | failed | none | -| `maps_to_add_size` | the number of maps to be added | none | none | -| `maps_to_remove_size` | the number of maps to be removed | none | none | -| `map_update_execution_time` | the time for map updating | none | none | -| `maps_size_after` | the number of maps after update map | none | none | -| `is_updated_map` | whether map is updated. If the map update couldn't be performed or there was no need to update the map, it becomes `False` | none | `is_updated_map` is `False` but `is_need_rebuild` is `True` | -| `is_set_map_points` | whether the map points is set or not | not set | none | -| `is_set_sensor_points` | whether the sensor points is set or not | not set | none | -| `best_particle_score` | the best score of particle | none | none | -| `is_succeed_service` | whether the process of service is succeed or not | failed | none | +図 + +| 名前 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ------------------- | +| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | +| `is_succeed_transform_initial_pose` | 初期位置の変換に成功したかどうか | なし | エラー | +| `is_need_rebuild` | マップを再構築する必要があるかどうか。まだマップがロードされていない場合、または「`distance_last_update_position_to_current_position encounters`」がエラー状態の場合、マップの再構築が必要と見なされ、`is_need_rebuild` が `True` になります | なし | なし | +| `maps_size_before` | マップの更新前のマップ数 | なし | なし | +| `is_succeed_call_pcd_loader` | pcd_loader サービスの呼び出しに成功したかどうか | エラー | なし | +| `maps_to_add_size` | 追加されるマップ数 | なし | なし | +| `maps_to_remove_size` | 削除されるマップ数 | なし | なし | +| `map_update_execution_time` | マップの更新にかかる時間 | なし | なし | +| `maps_size_after` | マップの更新後のマップ数 | なし | なし | +| `is_updated_map` | マップが更新されたかどうか。マップの更新を実行できなかった場合、またはマップを更新する必要がなかった場合、`False` になります。 | なし | `is_updated_map` が `False` で `is_need_rebuild` が `True` | +| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | +| `is_set_sensor_points` | センサーポイントが設定されているかどうか | 設定されていない | なし | +| `best_particle_score` | 粒子のベストスコア | なし | なし | +| `is_succeed_service` | サービスの処理が成功したかどうか | エラー | なし | ※ -This diagnostic is only published when the service is called, so it becomes stale after the initial pose estimation is completed. +この診断はサービスが呼び出され時にのみ発行されるため、初期ポーズ推定が完了すると古くなります。 -### map_update_status +### マップ更新ステータス drawing -| Name | Description | Transition condition to Warning | Transition condition to Error | -| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------- | -| `timer_callback_time_stamp` | the time stamp of timer_callback calling | none | none | -| `is_activated` | whether the node is in the "activate" state or not | not "activate" state | none | -| `is_set_last_update_position` | whether the `last_update_position` is set or not | not set | none | -| `distance_last_update_position_to_current_position` | the distance of `last_update_position` to current position | none | (the distance + `dynamic_map_loading.lidar_radius`) is **larger** than `dynamic_map_loading.map_radius` | -| `is_need_rebuild` | whether it need to rebuild the map. If the map has not been loaded yet or if `distance_last_update_position_to_current_position encounters` is an Error state, it is considered necessary to reconstruct the map, and `is_need_rebuild` becomes `True`. | none | none | -| `maps_size_before` | the number of maps before update map | none | none | -| `is_succeed_call_pcd_loader` | whether call pcd_loader service is succeed or not | failed | none | -| `maps_to_add_size` | the number of maps to be added | none | none | -| `maps_to_remove_size` | the number of maps to be removed | none | none | -| `map_update_execution_time` | the time for map updating | none | none | -| `maps_size_after` | the number of maps after update map | none | none | -| `is_updated_map` | whether map is updated. If the map update couldn't be performed or there was no need to update the map, it becomes `False` | none | `is_updated_map` is `False` but `is_need_rebuild` is `True` | +| 項目 | 説明 | 警告状態への移行条件 | エラー状態への移行条件 | +| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| `timer_callback_time_stamp` | `timer_callback` の呼び出しタイムスタンプ | なし | なし | +| `is_activated` | ノードが "activate" 状態であるかどうか | "activate" 状態でない | なし | +| `is_set_last_update_position` | `last_update_position` が設定されているかどうか | 設定されてない | なし | +| `distance_last_update_position_to_current_position` | `last_update_position` から現在の位置までの距離 | なし | (距離 + `dynamic_map_loading.lidar_radius`) が `dynamic_map_loading.map_radius` より **大きい** | +| `is_need_rebuild` | マップを再構築する必要があるかどうか。まだマップが読み込まれていなかったり、`distance_last_update_position_to_current_position` がエラー状態を検出したりすると、マップを再構築する必要があり、`is_need_rebuild` が `True` になる。 | なし | なし | +| `maps_size_before` | マップ更新前のマップの数 | なし | なし | +| `is_succeed_call_pcd_loader` | `pcd_loader` サービスを呼び出すことに成功したかどうか | 失敗 | なし | +| `maps_to_add_size` | 追加するマップの数 | なし | なし | +| `maps_to_remove_size` | 削除するマップの数 | なし | なし | +| `map_update_execution_time` | マップ更新の時間 | なし | なし | +| `maps_size_after` | マップ更新後のマップの数 | なし | なし | +| `is_updated_map` | マップが更新されたかどうか。マップの更新が実行できなかったか、マップを更新する必要がなかった場合、`False` になる | なし | `is_updated_map` が `False` だが `is_need_rebuild` が `True` | + diff --git a/localization/autoware_pose2twist/README.md b/localization/autoware_pose2twist/README.md index 55ca4667c423d..7787ab9f91039 100644 --- a/localization/autoware_pose2twist/README.md +++ b/localization/autoware_pose2twist/README.md @@ -1,32 +1,138 @@ -# autoware_pose2twist +## autoware_pose2twist -## Purpose +## 目的 -This `autoware_pose2twist` calculates the velocity from the input pose history. In addition to the computed twist, this node outputs the linear-x and angular-z components as a float message to simplify debugging. +この `autoware_pose2twist` は入力された履歴ポーズから速度を計算します。このノードは計算されたツイストに加えて、デバッグを簡素化するために浮動小数点メッセージとして直線 x 成分と角度 z 成分を出力します。 -The `twist.linear.x` is calculated as `sqrt(dx * dx + dy * dy + dz * dz) / dt`, and the values in the `y` and `z` fields are zero. -The `twist.angular` is calculated as `relative_rotation_vector / dt` for each field. +`twist.linear.x` は `sqrt(dx * dx + dy * dy + dz * dz) / dt` で計算され、`y` フィールドと `z` フィールドの値は 0 になります。 +`twist.angular` は各フィールドについて `relative_rotation_vector / dt` で計算されます。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 +- `/diff_poses`: 車両の過去の `post resampling` ポーズ順序(ジオリファレンス済み) +- `/current_pose`: 車両の自車位置と姿勢(ジオリファレンス済み) -| Name | Type | Description | -| ---- | ------------------------------- | ------------------------------------------------- | -| pose | geometry_msgs::msg::PoseStamped | pose source to used for the velocity calculation. | +### 出力 +- `/twist`: 速度 +- `/linear_x`: `twist.linear.x` の値 +- `/linear_y`: `twist.linear.y` の値 +- `/linear_z`: `twist.linear.z` の値 +- `/angular_x`: `twist.angular.x` の値 +- `/angular_y`: `twist.angular.y` の値 +- `/angular_z`: `twist.angular.z` の値 +- `/velocity_error`: 速度エラー +- `/velocity_error_tran`: 平行移動速度逸脱量 +- `/velocity_error_rot`: 回転速度逸脱量 +- `/acceleration_error`: 加速度エラー +- `/acceleration_error_tran`: 平行移動加速度逸脱量 +- `/acceleration_error_rot`: 回転加速度逸脱量 +- `/filtered_velocity`: フィルタリングされた速度 -### Output +| 名称 | 種別 | 説明 | +|---|---|---| +| pose | geometry_msgs::msg::PoseStamped | 速度計算に使用する姿勢のソース | -| Name | Type | Description | +## 自動運転ソフトウェアドキュメント + +### Planningモジュール + +#### VehicleBehaviorPrediction(車両挙動予測) + +VehicleBehaviorPredictionコンポーネントは、他の車両の挙動を予測します。この情報は、Planningコンポーネントによって、自車位置の決定と回避経路の生成に使用されます。 + +VehicleBehaviorPredictionコンポーネントは、入力として、以下のデータを使用します。 + +- LiDARとレーダーからの検出結果 +- センサーの不確実性 +- 道路ネットワーク情報 + +VehicleBehaviorPredictionコンポーネントは、以下のアルゴリズムを使用して、他の車両の挙動を予測します。 + +- Kalmanフィルター +- 粒子フィルター +- 深層学習 + +#### Planning(経路計画) + +Planningコンポーネントは、自車位置を決定し、回避経路を生成します。この情報は、Controlコンポーネントによって、車両の制御に使用されます。 + +Planningコンポーネントは、入力として、以下のデータを使用します。 + +- VehicleBehaviorPredictionコンポーネントからの予測車両挙動 +- 自車位置 +- 道路ネットワーク情報 + +Planningコンポーネントは、以下のアルゴリズムを使用して、自車位置を決定し、回避経路を生成します。 + +- 動的計画法 +- グラフ探索 +- 最適化 + +### Controlモジュール + +#### LongitudinalControl(縦方向制御) + +LongitudinalControlコンポーネントは、車両の縦方向の動き(速度と加速度)を制御します。この情報は、ブレーキ、アクセル、ギアの制御に使用されます。 + +LongitudinalControlコンポーネントは、入力として、以下のデータを使用します。 + +- Planningコンポーネントからの自車位置 +- 車両の速度と加速度 +- 障害物検出結果 + +LongitudinalControlコンポーネントは、以下のアルゴリズムを使用して、車両の縦方向の動きを制御します。 + +- PID制御 +- モデル予測制御 + +#### LateralControl(横方向制御) + +LateralControlコンポーネントは、車両の横方向の動き(操舵角)を制御します。この情報は、ステアリングシステムの制御に使用されます。 + +LateralControlコンポーネントは、入力として、以下のデータを使用します。 + +- Planningコンポーネントからの自車位置 +- 車両の速度と加速度 +- 障害物検出結果 + +LateralControlコンポーネントは、以下のアルゴリズムを使用して、車両の横方向の動きを制御します。 + +- PID制御 +- モデル予測制御 + +### システムインテグレーション + +Autowareシステムは、以下のコンポーネントで構成されています。 + +- Planningモジュール +- Controlモジュール +- センサーインターフェース +- システムモニター + +これらのコンポーネントは、CANバスを介して相互に通信します。 + +### 評価 + +Autowareシステムは、以下の指標を使用して評価されます。 + +- 到達率 +- 衝突回数 +- `post resampling`経路逸脱量 +- 加速度逸脱量 +- 速度逸脱量 + +| 名前 | 種類 | 説明 | | --------- | ------------------------------------- | --------------------------------------------- | -| twist | geometry_msgs::msg::TwistStamped | twist calculated from the input pose history. | -| linear_x | tier4_debug_msgs::msg::Float32Stamped | linear-x field of the output twist. | -| angular_z | tier4_debug_msgs::msg::Float32Stamped | angular-z field of the output twist. | +| twist | geometry_msgs::msg::TwistStamped | 入力された姿勢履歴から計算した捻り率。 | +| linear_x | tier4_debug_msgs::msg::Float32Stamped | 出力捻り率の線形 x フィールド。 | +| angular_z | tier4_debug_msgs::msg::Float32Stamped | 出力捻り率の角速度 z フィールド。 | + +## パラメータ -## Parameters +なし -none. +## 仮定 / 既知の制約 -## Assumptions / Known limits +なし -none. diff --git a/localization/autoware_pose_covariance_modifier/README.md b/localization/autoware_pose_covariance_modifier/README.md index 201fb8bb37103..ea5d093c490b5 100644 --- a/localization/autoware_pose_covariance_modifier/README.md +++ b/localization/autoware_pose_covariance_modifier/README.md @@ -1,58 +1,56 @@ # Autoware Pose Covariance Modifier Node -## Purpose +## 目的 -This package makes it possible to use GNSS and NDT poses together in real time localization. +このパッケージは、リアルタイムの位置推定で GNSS と NDT ポーズを併用することを可能にします。 -## Function +## 機能 -This package takes in GNSS (Global Navigation Satellite System) -and NDT (Normal Distribution Transform) poses with covariances. +このパッケージは、共分散を持つ GNSS(全地球測位システム)と NDT(正規分布変換)ポーズを受け取ります。 -It outputs a single pose with covariance: +共分散を持つ単一のポーズを出力します。 -- Directly the GNSS pose and its covariance. -- Directly the NDT pose and its covariance. -- Both GNSS and NDT poses with modified covariances. +- GNSS ポーズとその共分散を直接出力します。 +- NDT ポーズとその共分散を直接出力します。 +- 共分散が変更された GNSS ポーズと NDT ポーズの両方を出力します。 -> - This package doesn't modify the pose information it receives. -> - It only modifies NDT covariance values under certain conditions. +> - このパッケージは、受信するポーズ情報を変更しません。 +> - 特定の条件下でのみ NDT 共分散値を変更します。 -## Assumptions +## 仮定 -- The NDT matcher provides a pose with a fixed covariance. -- The NDT matcher is unable to provide a dynamic, reliable covariance value. +- NDT マッチャは、固定された共分散を持つポーズを提供します。 +- NDT マッチャは、動的で信頼性の高い共分散値を提供できません。 -## Requirements +## 要件 -- The GNSS/INS module must provide standard deviation values (its error / RMSE) for the position and orientation. -- It probably needs RTK support to provide accurate position and orientation information. -- You need to have a geo-referenced map. -- GNSS/INS module and the base_link frame must be calibrated well enough. -- In an environment where GNSS/INS and NDT systems work well, the `base_link` poses from both systems should be close to - each other. +- GNSS/INS モジュールは、位置と姿勢の標準偏差値(その誤差/RMSE)を提供する必要があります。 +- 正確な位置と姿勢情報を提供するには、RTK サポートが必要になると思われます。 +- 地理参照されたマップが必要です。 +- GNSS/INS モジュールと base_link フレームは、十分に較正されている必要があります。 +- GNSS/INS と NDT システムがうまく機能する環境では、両方のシステムの `base_link` ポーズは互いに近くにある必要があります。 -## Description +## 説明 -GNSS and NDT nodes provide the pose with covariance data utilized in an Extended Kalman Filter (EKF). +GNSS と NDT ノードは、拡張カルマンフィルター(EKF)で使用される共分散データを持つポーズを提供します。 -Accurate covariance values are crucial for the effectiveness of the EKF in estimating the state. +正確な共分散値は、EKF が状態を推定する有効性にとって非常に重要です。 -The GNSS system generates reliable standard deviation values, which can be transformed into covariance measures. +GNSS システムは、共分散測定に変換できる信頼性の高い標準偏差値を生成します。 -But we currently don't have a reliable way to determine the covariance values for the NDT poses. -And the NDT matching system in Autoware outputs poses with preset covariance values. +しかし、現在 NDT ポーズの共分散値を決定する信頼できる方法がありません。 +そして、Autoware の NDT マッチングシステムは、事前設定された共分散値を持つポーズを出力します。 -For this reason, this package is designed to manage the selection of the pose source, -based on the standard deviation values provided by the GNSS system. +この理由から、このパッケージは、GNSS システムによって提供される標準偏差値に基づいて、ポーズソースの選択を管理するように設計されています。 -It also tunes the covariance values of the NDT poses, based on the GNSS standard deviation values. +また、GNSS 標準偏差値に基づいて NDT ポーズの共分散値も調整します。 -## Flowcharts +## フローチャート -### Without this package +### このパッケージを使用しない場合 + +ローカリゼーションでは NDT ポーズのみが使用されます。GNSS ポーズは初期化にのみ使用されます。 -Only NDT pose is used in localization. GNSS pose is only used for initialization. ```mermaid graph TD @@ -64,12 +62,12 @@ class ndt_scan_matcher cl_node; class ekf_localizer cl_node; ``` -### With this package +### このパッケージの使用 + +ローカライゼーションでは、GNSSから得られる標準偏差値に応じて、NDTとGNSSの両方の姿勢が使用されます。 -Both NDT and GNSS poses are used in localization, depending on the standard deviation values coming from the GNSS -system. +以下に、プロセスと定義済みの閾値を示すフローチャートを示します。 -Here is a flowchart depicting the process and the predefined thresholds: ```mermaid graph TD @@ -108,106 +106,121 @@ class gnss_pose cl_output; class gnss_ndt_pose cl_output; ``` -## How to use this package +## 本パッケージの使用方法 -> **This package is disabled by default in Autoware, you need to manually enable it.** +> **本パッケージはAutowareでデフォルトでは無効になっています。手動で有効化を行う必要があります。** -To enable this package, you need to change the `use_autoware_pose_covariance_modifier` parameter to `true` within -the [pose_twist_estimator.launch.xml](../../launch/tier4_localization_launch/launch/pose_twist_estimator/pose_twist_estimator.launch.xml#L3). +本パッケージを有効化するために、[pose_twist_estimator.launch.xml](../../launch/tier4_localization_launch/launch/pose_twist_estimator/pose_twist_estimator.launch.xml#L3)内の`use_autoware_pose_covariance_modifier`パラメータを`true`に変更する必要があります。 -### Without this condition (default) +### 条件を満たさない場合(デフォルト) -- The output of the [ndt_scan_matcher](../../localization/autoware_ndt_scan_matcher) is directly sent - to [ekf_localizer](../../localization/autoware_ekf_localizer). - - It has a preset covariance value. - - **topic name:** `/localization/pose_estimator/pose_with_covariance` -- The GNSS pose does not enter the ekf_localizer. -- This node does not launch. +- [ndt_scan_matcher](../../localization/autoware_ndt_scan_matcher)の出力が、[ekf_localizer](../../localization/autoware_ekf_localizer)に直接送信されます。 + - 事前に設定された共分散値があります。 + - **トピック名:** `/localization/pose_estimator/pose_with_covariance` +- GNSSの姿勢がekf_localizerに入りません。 +- このノードは起動しません。 -### With this condition +### 条件を満たす場合 -- The output of the [ndt_scan_matcher](../../localization/autoware_ndt_scan_matcher) is renamed - - **from:** `/localization/pose_estimator/pose_with_covariance`. - - **to:** `/localization/pose_estimator/ndt_scan_matcher/pose_with_covariance`. -- The `ndt_scan_matcher` output enters the `autoware_pose_covariance_modifier`. -- The output of this package goes to [ekf_localizer](../../localization/autoware_ekf_localizer) with: - - **topic name:** `/localization/pose_estimator/pose_with_covariance`. +- [ndt_scan_matcher](../../localization/autoware_ndt_scan_matcher)の出力がリネームされます + - **変更前:** `/localization/pose_estimator/pose_with_covariance` + - **変更後:** `/localization/pose_estimator/ndt_scan_matcher/pose_with_covariance` +- `ndt_scan_matcher`の出力が`autoware_pose_covariance_modifier`に入ります。 +- 本パッケージの出力が、以下とともに[ekf_localizer](../../localization/autoware_ekf_localizer)に出力されます。 + - **トピック名:** `/localization/pose_estimator/pose_with_covariance` -## Node +## ノード -### Subscribed topics +### サブスクライブするトピック -| Name | Type | Description | -| -------------------------------- | ----------------------------------------------- | ---------------------- | -| `input_gnss_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Input GNSS pose topic. | -| `input_ndt_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Input NDT pose topic. | +| 名称 | タイプ | 説明 | +| ------------------------------- | -------------------------------------------- | --------------------------- | +| `input_gnss_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSSポーズ入力トピック。 | +| `input_ndt_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | NDTポーズ入力トピック。 | -### Published topics +### 発行トピック -| Name | Type | Description | -| ----------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `output_pose_with_covariance_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Output pose topic. This topic is used by the ekf_localizer package. | -| `selected_pose_type` | `std_msgs::msg::String` | Declares which pose sources are used in the output of this package | -| `output/ndt_position_stddev` | `std_msgs::msg::Float64` | Output pose ndt average standard deviation in position xy. It is published only when the enable_debug_topics is true. | -| `output/gnss_position_stddev` | `std_msgs::msg::Float64` | Output pose gnss average standard deviation in position xy. It is published only when the enable_debug_topics is true. | +| 名称 | 型 | 説明 | +| ------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| `output_pose_with_covariance_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 出力姿勢トピック。このトピックはekf_localizerパッケージで使用されます。 | +| `selected_pose_type` | `std_msgs::msg::String` | このパッケージの出力でどの姿勢ソースが使用されるかを宣言します。 | +| `output/ndt_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢のndt位置標準偏差の平均(x-y)。enable_debug_topicsがtrueの場合にのみ公開されます。 | +| `output/gnss_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢のGNSS位置標準偏差の平均(x-y)。enable_debug_topicsがtrueの場合にのみ公開されます。 | -### Parameters +### パラメーター -The parameters are set -in [config/pose_covariance_modifier.param.yaml](config/pose_covariance_modifier.param.yaml) . +パラメーターは [config/pose_covariance_modifier.param.yaml](config/pose_covariance_modifier.param.yaml) に設定されています。 {{ json_to_markdown( "localization/autoware_pose_covariance_modifier/schema/pose_covariance_modifier.schema.json") }} ## FAQ -### How are varying frequency rates handled? +### さまざまな周波数レートはどのように処理されますか? -The GNSS and NDT pose topics may have different frequencies. -The GNSS pose topic may have a higher frequency than the NDT. +GNSSとNDTのポーズトピックは異なる周波数を持つ場合があります。 +GNSSポーズトピックはNDTよりも高い周波数を持つ場合があります。 -Let's assume that the inputs have the following frequencies: +入力が次の周波数を持つと仮定します。 -| Source | Frequency | +| 情報源 | 周波数 | | ------ | --------- | | GNSS | 200 Hz | | NDT | 10 Hz | -This package publishes the output poses as they come in, depending on the mode. +このパッケージは、モードに応じて出力のポーズを発行します。 + +最終的な結果: + +| モード | 出力周波数 | +|---|---| +| GNSSのみ | 200 Hz | +| GNSS + NDT | 210 Hz | +| NDTのみ | 10 Hz | + +### NDT共分散値の上書き方法および時期 + +**概要** -End result: +NDT(正規分布変換)共分散値は、前方障害物の検出に使用されます。これらは、リレーショナルデータベース(レダンド)内でNDTで提供されます。 -| Mode | Output Freq | -| ---------- | ----------- | -| GNSS Only | 200 Hz | -| GNSS + NDT | 210 Hz | -| NDT Only | 10 Hz | +**詳細** -### How and when are the NDT covariance values overwritten? +NDT共分散値は、以下の条件を満たした場合に上書きされます。 -| Mode | Outputs, Covariance | +- `ndt`サブスクライバーが新しいNDTに変換された点群を受信したとき +- Planningモジュールが、`post resampling`結果をNDTに変換し、システムが低速モード(つまり速度が0 m/s以下)にいるとき + +これらの共分散値は、常にサブスクライバーに提供されます。ただし、サブスクライバーは、Planningモジュールが低速モードで動作している場合にのみNDTに変換された点群の共分散値を考慮します。これにより、低速で走行中の微妙な物体との衝突を避けることができます。 + +**注意:** + +オブジェクトの障害物逸脱量がvelocity逸脱量よりも著しく大きい場合、速度が0である場合でも、オブジェクトの障害物逸脱量はゼロにはなりません。 + +| モード | 出力、共分散 | | ---------- | ------------------------------------------- | -| GNSS Only | GNSS, Unmodified | -| GNSS + NDT | **GNSS:** Unmodified, **NDT:** Interpolated | -| NDT Only | NDT, Unmodified | +| GNSS のみ | GNSS、修正なし | +| GNSS + NDT | **GNSS:** 修正なし、**NDT:** 補間 | +| NDT のみ | NDT、修正なし | + +NDT 共分散値は `GNSS + NDT` モードでのみ上書きされます。 -NDT covariance values overwritten only for the `GNSS + NDT` mode. +これにより、`GNSS のみ` モードと `NDT のみ` モードとの間のスムーズな遷移が可能になります。 -This enables a smooth transition between `GNSS Only` and `NDT Only` modes. +このモードでは、NDT と GNSS の両方のポーズがこのノードから公開されます。 -In this mode, both NDT and GNSS poses are published from this node. +#### NDT 共分散計算 -#### NDT covariance calculation +`gnss_std_dev` が境界値内で増加すると、`ndt_std_dev` は独自境界内で比例して減少する必要があります。 -As the `gnss_std_dev` increases within its bounds, `ndt_std_dev` should proportionally decrease within its own bounds. +これを実現するには、まず線形補間を行います。 -To achieve this, we first linearly interpolate: +- 基準値: `gnss_std_dev` +- 基準範囲: [`threshold_gnss_stddev_xy_bound_lower`, `threshold_gnss_stddev_xy_bound_upper`] +- 目標範囲: [`ndt_std_dev_bound_lower`, `ndt_std_dev_bound_upper`] +- 目標値: `ndt_std_dev_target` -- Base value: `gnss_std_dev` -- Base range: [`threshold_gnss_stddev_xy_bound_lower`, `threshold_gnss_stddev_xy_bound_upper`] -- Target range: [`ndt_std_dev_bound_lower`, `ndt_std_dev_bound_upper`] -- Target value: `ndt_std_dev_target` +- 最終値 = `ndt_std_dev_bound_lower` + `ndt_std_dev_bound_upper` - `ndt_std_dev_target` (逆数を求める) -- Final value = `ndt_std_dev_bound_lower` + `ndt_std_dev_bound_upper` - `ndt_std_dev_target` (to get the inverse) +範囲から範囲への lerp アニメーション -range to range lerp animation diff --git a/localization/autoware_pose_estimator_arbiter/README.md b/localization/autoware_pose_estimator_arbiter/README.md index 87fcbc252cd8e..bb79b7ae3d550 100644 --- a/localization/autoware_pose_estimator_arbiter/README.md +++ b/localization/autoware_pose_estimator_arbiter/README.md @@ -1,53 +1,54 @@ # autoware_pose_estimator_arbiter -Table of contents: +目次: -- [Abstract](#abstract) -- [Interface](#interfaces) -- [Architecture](#architecture) -- [How to launch](#how-to-launch) -- [Switching Rules](#switching-rules) -- [Pose Initialization](#pose-initialization) -- [Future Plans](#future-plans) +- [概要](#概要) +- [インターフェース](#インターフェース) +- [アーキテクチャ](#アーキテクチャ) +- [起動方法](#起動方法) +- [切替ルール](#切替ルール) +- [姿勢初期化](#姿勢初期化) +- [今後の予定](#今後の予定) -## Abstract +## 概要 -This package launches multiple pose estimators and provides the capability to stop or resume specific pose estimators based on the situation. -It provides provisional switching rules and will be adaptable to a wide variety of rules in the future. +本パッケージは複数の姿勢推定器を起動し、状況に応じて特定の姿勢推定器を停止または再開する機能を提供します。 +暫定的な切替ルールが用意されており、将来的にはさまざまなルールに対応できるようになります。 -Please refer to [this discussion](https://github.com/orgs/autowarefoundation/discussions/3878) about other ideas on implementation. +他の実装方法に関するアイデアについては、[このディスカッション](https://github.com/orgs/autowarefoundation/discussions/3878)を参照してください。 -### Why do we need a stop/resume mechanism? +### 停止/再開メカニズムが必要な理由 -It is possible to launch multiple pose_estimators and fuse them using a Kalman filter by editing launch files. -However, this approach is not preferable due to computational costs. +起動ファイルを編集することで複数の`pose_estimators`を起動し、カルマンフィルタを使用してそれらを融合することは可能です。 +ただし、このアプローチは計算コストがかかるため推奨されません。 -Particularly, NDT and YabLoc are computationally intensive, and it's not recommended to run them simultaneously. -Also, even if both can be activated at the same time, the Kalman Filter may be affected by one of them giving bad output. +特に、NDTとYabLocは計算集約的であり、同時に実行することは推奨されません。 +また、両方を同時に有効にしても、どちらかが悪い出力を出すとカルマンフィルタに影響が出る可能性があります。 > [!NOTE] -> Currently, **there is ONLY A RULE implemented that always enables all pose_estimators.** -> If users want to toggle pose_estimator with their own rules, they need to add new rules. by referring to example_rule. -> The [example_rule](example_rule/README.md) has source code that can be used as a reference for implementing the rules. +> 現在のところ、**すべての`pose_estimators`を常に有効にするルールのみが実装されています。** +> ユーザーが独自のルールで`pose_estimator`を切り替える場合は、example_ruleを参照して新しいルールを追加する必要があります。 +> [example_rule](example_rule/README.md)には、ルールを実装するためのリファレンスとして使用できるソースコードがあります。 -### Supporting pose_estimators +### サポートされる`pose_estimators` - [ndt_scan_matcher](https://github.com/autowarefoundation/autoware.universe/tree/main/localization/autoware_ndt_scan_matcher) - [eagleye](https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/integrating-autoware/launch-autoware/localization/eagleye/) - [yabloc](https://github.com/autowarefoundation/autoware.universe/tree/main/localization/yabloc) - [landmark_based_localizer](https://github.com/autowarefoundation/autoware.universe/tree/main/localization/autoware_landmark_based_localizer) -### Demonstration +### デモンストレーション -The following video demonstrates the switching of four different pose estimators. +以下のビデオでは、4つの異なる姿勢推定器の切り替えの様子を説明しています。
-Users can reproduce the demonstration using the following data and launch command: +ユーザーは、以下のデータと起動コマンドを使用して、このデモンストレーションを再現できます。 + +[サンプルデータ(rosbagおよびマップ)](https://drive.google.com/file/d/1ZNlkyCtwe04iKFREdeZ5xuMU_jWpwM3W/view) +rosbagは[AWSIM](https://tier4.github.io/AWSIM/)によって作成されたシミュレーションデータです。 +マップは、AWSIMのドキュメンテーションページで公開されている[オリジナルマップデータ](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip)を編集したもので、複数の`pose_estimators`に適したものになっています。 -[sample data (rosbag & map)](https://drive.google.com/file/d/1ZNlkyCtwe04iKFREdeZ5xuMU_jWpwM3W/view) -The rosbag is simulated data created by [AWSIM](https://tier4.github.io/AWSIM/). -The map is an edited version of the [original map data](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip) published on the AWSIM documentation page to make it suitable for multiple pose_estimators. ```bash ros2 launch autoware_launch logging_simulator.launch.xml \ @@ -57,124 +58,178 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ pose_source:=ndt_yabloc_artag_eagleye ``` -## Interfaces +## インターフェース
-Click to show details +詳細を表示 + +### パラメーター + +パラメーターはありません。 + +### サービス + +| 名称 | 種類 | 説明 | +| ----------------- | ------------------------------- | ------------------------------- | +| `/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]へメッセージをパブリッシュします。 -### Parameters +**Autoware Reference Path Client** -There are no parameters. +- Reference Path Client は Reference Path モジュールの Pub/Sub クライアントです。[autoware.planning.trajectory]からリファレンスパスをサブスクライブし、[autoware.control.path]へメッセージをパブリッシュします。 -### Services +**Autoware Obstacle Avoidance Client** -| Name | Type | Description | -| ---------------- | ------------------------------- | ------------------------------- | -| `/config_logger` | logging_demo::srv::ConfigLogger | service to modify logging level | +- Obstacle Avoidance Client は Obstacle Avoidance モジュールの Pub/Sub クライアントです。[autoware.perception.object]から認識された障害物をサブスクライブし、[autoware.control.prediction]へメッセージをパブリッシュします。 -### Clients +**Autoware Planner Client** -| Name | Type | Description | +- 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 | service to stop or restart yabloc | +| `/yabloc_suspend_srv` | std_srv::srv::SetBool | Yabloc を停止または再開するサービス | -### Subscriptions +### サブスクリプション -For pose estimator arbitration: +ポーズ推定アビトレーション用: -| Name | Type | Description | +| 名称 | 型 | 説明 | | ------------------------------------- | --------------------------------------------- | -------------- | -| `/input/artag/image` | sensor_msgs::msg::Image | ArTag input | -| `/input/yabloc/image` | sensor_msgs::msg::Image | YabLoc input | -| `/input/eagleye/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | Eagleye output | -| `/input/ndt/pointcloud` | sensor_msgs::msg::PointCloud2 | NDT input | - -For switching rule: - -| Name | Type | Description | -| ----------------------------- | ------------------------------------------------------------ | --------------------------------- | -| `/input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | vector map | -| `/input/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | localization final output | -| `/input/initialization_state` | autoware_adapi_v1_msgs::msg::LocalizationInitializationState | localization initialization state | - -### Publications - -| Name | Type | Description | -| -------------------------------------- | --------------------------------------------- | ------------------------------------------------------ | -| `/output/artag/image` | sensor_msgs::msg::Image | relayed ArTag input | -| `/output/yabloc/image` | sensor_msgs::msg::Image | relayed YabLoc input | -| `/output/eagleye/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | relayed Eagleye output | -| `/output/ndt/pointcloud` | sensor_msgs::msg::PointCloud2 | relayed NDT input | -| `/output/debug/marker_array` | visualization_msgs::msg::MarkerArray | [debug topic] everything for visualization | -| `/output/debug/string` | visualization_msgs::msg::MarkerArray | [debug topic] debug information such as current status | +| `/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 | [デバッグトピック] 現在のステータスなどのデバッグ情報 |
-## Trouble Shooting +## トラブルシューティング -If it does not seems to work, users can get more information in the following ways. +うまくいかない場合は、以下の方法でさらに多くの詳細情報が取得できます。 > [!TIP] -> + + > ```bash > ros2 service call /localization/autoware_pose_estimator_arbiter/config_logger logging_demo/srv/ConfigLogger \ > '{logger_name: localization.autoware_pose_estimator_arbiter, level: debug}' > ``` -## Architecture +## アーキテクチャ
-Click to show details +詳細を表示するにはクリックしてください -### Case of running a single pose estimator +### 単一のポーズ推定器を実行する場合 -When each pose_estimator is run alone, this package does nothing. -Following figure shows the node configuration when NDT, YabLoc Eagleye and AR-Tag are run independently. +各 `pose_estimator` が単独で実行されているとき、このパッケージは何も行いません。 +次の図は、NDT、YabLoc Eagleye、および AR-Tag が個別に実行されているときのノード構成を示しています。 drawing -### Case of running multiple pose estimators +### 複数のポーズ推定器を実行する場合 -When running multiple pose_estimators, autoware_pose_estimator_arbiter is executed. -It comprises a **switching rule** and **stoppers** corresponding to each pose_estimator. +複数の `pose_estimators` を実行すると、`autoware_pose_estimator_arbiter` が実行されます。 +これは各 `pose_estimator` に対応する **切り替えルール** と **ストッパー** で構成されています。 -- Stoppers control the pose_estimator activity by relaying inputs or outputs, or by requesting a suspend service. -- Switching rules determine which pose_estimator to use. +- ストッパーは、入出力の中継やサスペンドサービスのリクエストを行うことで、`pose_estimator` のアクティビティを制御します。 +- 切り替えルールは、使用する `pose_estimator` を決定します。 -Which stoppers and switching rules are instantiated depends on the runtime arguments at startup. +インスタンス化されるストッパーと切り替えルールは、起動時のランタイム引数によって決まります。 -Following figure shows the node configuration when all pose_estimator are run simultaneously. +次の図は、すべての `pose_estimators` が同時に実行されているときのノード構成を示しています。 drawing - **NDT** -The NDT stopper relays topics in the front side of the point cloud pre-processor. +NDT ストッパーは、ポイントクラウドプリプロセッサの前方にトピックを中継します。 - **YabLoc** -The YabLoc stopper relays input image topics in the frontend of the image pre-processor. -YabLoc includes a particle filter process that operates on a timer, and even when image topics are not streamed, the particle prediction process continues to work. -To address this, the YabLoc stopper also has a service client for explicitly stopping and resuming YabLoc. +YabLoc ストッパーは、イメージプリプロセッサのフロントエンドに入力イメージトピックを中継します。 +YabLoc には、タイマーで動作するパーティクルフィルタプロセスが含まれており、イメージトピックがストリーミングされていない場合でも、パーティクル予測プロセスは引き続き動作します。 +これを解決するために、YabLoc ストッパーには、YabLoc を明示的に停止および再開するためのサービスクライアントも含まれています。 - **Eagleye** -The Eagleye stopper relays Eagleye's output pose topics in the backend of Eagleye's estimation process. -Eagleye performs time-series processing internally, and it can't afford to stop the input stream. -Furthermore, Eagleye's estimation process is lightweight enough to be run continuously without a significant load, so the relay is inserted in the backend. +Eagleye ストッパーは、Eagleye 推定プロセスのバックエンドで Eagleye の出力ポーズトピックを中継します。 +Eagleye は内部で時系列処理を実行し、入力ストリームの停止はできません。 +さらに、Eagleye の推定プロセスは、大きな負荷なしに連続して実行できるほど軽量であるため、中継はバックエンドに挿入されます。 - **ArTag** -The ArTag stopper relays image topics in the front side of the landmark localizer. +ArTag ストッパーは、ランドマークローカルライザの前にあるイメージトピックを中継します。
-## How to launch +## 起動方法
-Click to show details +詳細を表示するにはクリックしてください + +ユーザーは、ランタイム引数 `pose_source` にアンダースコアの連結として `pose_estimator` 名を渡すことで、目的の `pose_estimators` を起動できます。 -The user can launch the desired pose_estimators by giving the pose_estimator names as a concatenation of underscores for the runtime argument `pose_source`. ```bash ros2 launch autoware_launch logging_simulator.launch.xml \ @@ -184,34 +239,33 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ pose_source:=ndt_yabloc_artag_eagleye ``` -Even if `pose_source` includes an unexpected string, it will be filtered appropriately. -Please see the table below for details. - -| given runtime argument | parsed autoware_pose_estimator_arbiter's param (pose_sources) | -| ------------------------------------------- | ------------------------------------------------------------- | -| `pose_source:=ndt` | `["ndt"]` | -| `pose_source:=nan` | `[]` | -| `pose_source:=yabloc_ndt` | `["ndt","yabloc"]` | -| `pose_source:=yabloc_ndt_ndt_ndt` | `["ndt","yabloc"]` | -| `pose_source:=ndt_yabloc_eagleye` | `["ndt","yabloc","eagleye"]` | -| `pose_source:=ndt_yabloc_nan_eagleye_artag` | `["ndt","yabloc","eagleye","artag"]` | +予期しない文字列が `pose_source` に含まれていた場合でも、適切にフィルタされます。 +詳細は下記の表を参照してください。 -
+| 実行時引数 | autoware_pose_estimator_arbiterのパラメータ(pose_source) | +| ----------- | --------------------------------------------------------- | +| `pose_source:=ndt` | `["ndt"]` | +| `pose_source:=nan` | `[]` | +| `pose_source:=yabloc_ndt` | `["ndt","yabloc"]` | +| `pose_source:=yabloc_ndt_ndt_ndt` | `["ndt","yabloc"]` | +| `pose_source:=ndt_yabloc_eagleye` | `["ndt","yabloc","eagleye"]` | +| `pose_source:=ndt_yabloc_nan_eagleye_artag` | `["ndt","yabloc","eagleye","artag"]` | -## Switching Rules +## 切り替えルール
-Click to show details +詳細を表示 -Currently, **ONLY ONE RULE** (`enable_all_rule`) is implemented. -In the future, several rules will be implemented and users will be able to select rules. +現在は **ルールが 1 つのみ** (`enable_all_rule`) 実装されています。 +将来は複数のルールが実装され、ユーザーがルールを選択できるようになります。 -> [!TIP] -> There are presets available to extend the rules. If you want to extend the rules, please see [example_rule](./example_rule/README.md). +> [!ヒント] +> ルールを拡張するためのプリセットが用意されています。ルールを拡張したい場合は、[example_rule](./example_rule/README.md) を参照してください。 + +### 全てを有効にするルール -### Enable All Rule +これは既定で最もシンプルなルールです。このルールは、現在の状態に関係なく、すべての pose_estimator を有効にします。 -This is the default and simplest rule. This rule enables all pose_estimators regardless of their current state. ```mermaid flowchart LR @@ -221,64 +275,64 @@ flowchart LR
-## Pose Initialization +## 自車位置初期化 -When using multiple pose_estimators, it is necessary to appropriately adjust the parameters provided to the `pose_initializer`. +複数の pose_estimators を使用する場合、`pose_initializer` に渡すパラメータを適切に調整する必要があります。
-Click to show details +クリックして詳細を表示 -The following table is based on the runtime argument "pose_source" indicating which initial pose estimation methods are available and the parameters that should be provided to the pose_initialization node. -To avoid making the application too complicated, a priority is established so that NDT is always used when it is available. -(The pose_initializer will only perform NDT-based initial pose estimation when `ndt_enabled` and `yabloc_enabled` are both `true`). +次の表は、初期の自車位置推定法を示すランタイム引数 "pose_source" および pose_initialization ノードに渡す必要があるパラメータに基づいています。 +アプリケーションを複雑になりすぎないように、NDT が使用可能な場合は常に NDT が使用されるようにプライオリティが確立されます。 +(`ndt_enabled` と `yabloc_enabled` の両方が `true` の場合にのみ、pose_initializer は NDT ベースの初期自車位置推定を実行します)。 -This table's usage is described from three perspectives: +この表の使い方は、3 つの観点から説明されています。 -- **Autoware Users:** Autoware users do not need to consult this table. - They simply provide the desired combinations of pose_estimators, and the appropriate parameters are automatically provided to the pose_initializer. -- **Autoware Developers:** Autoware developers can consult this table to know which parameters are assigned. -- **Who implements New Pose Estimator Switching:** - Developers must extend this table and implement the assignment of appropriate parameters to the pose_initializer. +- **Autoware ユーザー:** Autoware ユーザーはこの表を参照する必要はありません。 + 自車位置推定器の組み合わせを指定するだけで、pose_initializer に適切なパラメータが自動的に与えられます。 +- **Autoware 開発者:** Autoware 開発者は、どのパラメータが割り当てられているかを知るためにこの表を参照できます。 +- **新しい自車位置推定スイッチを実装する人:** +開発者は、この表を拡張し、pose_initializer に適切なパラメータを割り当てるように実装する必要があります。 +
| pose_source | invoked initialization method | `ndt_enabled` | `yabloc_enabled` | `gnss_enabled` | `sub_gnss_pose_cov` | | :-------------------------: | ----------------------------- | ------------- | ---------------- | -------------- | -------------------------------------------- | | ndt | ndt | true | false | true | /sensing/gnss/pose_with_covariance | | yabloc | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | -| eagleye | vehicle needs run for a while | false | false | true | /localization/pose_estimator/eagleye/... | -| artag | 2D Pose Estimate (RViz) | false | false | true | /sensing/gnss/pose_with_covariance | +| eagleye | 車両はしばらく走行する必要があります | false | false | true | /localization/pose_estimator/eagleye/... | +| artag | 2D 姿勢推定(RViz) | false | false | true | /sensing/gnss/pose_with_covariance | | ndt, yabloc | ndt | true | true | true | /sensing/gnss/pose_with_covariance | | ndt, eagleye | ndt | true | false | true | /sensing/gnss/pose_with_covariance | | ndt, artag | ndt | true | false | true | /sensing/gnss/pose_with_covariance | | yabloc, eagleye | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | | yabloc, artag | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | -| eagleye, artag | vehicle needs run for a while | false | false | true | /localization/pose_estimator/eagleye/pose... | +| eagleye, artag | 車両はしばらく走行する必要があります | false | false | true | /localization/pose_estimator/eagleye/pose... | | ndt, yabloc, eagleye | ndt | true | true | true | /sensing/gnss/pose_with_covariance | | ndt, eagleye, artag | ndt | true | false | true | /sensing/gnss/pose_with_covariance | | yabloc, eagleye, artag | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | | ndt, yabloc, eagleye, artag | ndt | true | true | true | /sensing/gnss/pose_with_covariance | - - -## Future Plans +## 今後の計画
-Click to show details +詳細を表示 -### gradually switching +### 段階的な切り替え -In the future, this package will provide not only ON/OFF switching, but also a mechanism for low frequency operation, such as 50% NDT & 50% YabLoc. +今後、このパッケージでは、オン/オフの切り替えだけでなく、50% NDT と 50% YabLoc などの低周波動作のためのメカニズムも提供します。 -### stopper for pose_estimators to be added in the future +### 今後追加される pose_estimators 用の stopper -The basic strategy is to realize ON/OFF switching by relaying the input or output topics of that pose_estimator. -If pose_estimator involves time-series processing with heavy computations, it's not possible to pause and resume with just topic relaying. +基本的な戦略は、その pose_estimator の入力または出力トピックをリレーすることでオン/オフの切り替えを実現することです。 +pose_estimator に大量の計算を伴う時系列処理が含まれている場合、トピックリレーだけで一時停止して再開することはできません。 -In such cases, there may not be generally applicable solutions, but the following methods may help: +このような場合、一般的に適用可能なソリューションはないかもしれませんが、次の方法が役立つ場合があります。 -1. Completely stop and **reinitialize** time-series processing, as seen in the case of YabLoc. -2. Subscribe to `localization/kinematic_state` and **keep updating states** to ensure that the estimation does not break (relying on the output of the active pose_estimator). -3. The multiple pose_estimator **does not support** that particular pose_estimator. +1. YabLoc の場合に示されているように、時系列処理を完全に停止して**再初期化**する。 +2. `localization/kinematic_state` を購読して**状態を更新し続け**、推定が中断しないようにする(アクティブな pose_estimator の出力を利用する)。 +3. 複数の pose_estimator は、その特定の pose_estimator を**サポートしない**。 -Please note that this issue is fundamental to realizing multiple pose_estimators, and it will arise regardless of the architecture proposed in this case. +この問題は複数の pose_estimator を実現するための基本的な問題であり、この場合に提案されたアーキテクチャに関係なく発生することに注意してください。
+ diff --git a/localization/autoware_pose_estimator_arbiter/example_rule/README.md b/localization/autoware_pose_estimator_arbiter/example_rule/README.md index c5bb80912607f..d1e42b38109d4 100644 --- a/localization/autoware_pose_estimator_arbiter/example_rule/README.md +++ b/localization/autoware_pose_estimator_arbiter/example_rule/README.md @@ -1,16 +1,17 @@ -# example rule +# 自動運転ソフトウェアに関するドキュメント -The example rule provides a sample rule for controlling the arbiter. By combining the provided rules, it is possible to achieve demonstrations as follows. Users can extend the rules as needed by referencing this code, allowing them to control the arbiter as desired. +このドキュメントでは、自動運転ソフトウェアの基本ルールについて説明します。これらのルールを組み合わせることで、以下のような機能を実現できます。ユーザーは必要に応じてこれらのルールを拡張してこのコードを参照し、希望どおりにアービターを制御することができます。 -## Demonstration +## デモ -The following video demonstrates the switching of four different pose estimators. +次のビデオは、4つの異なるポーズ推定値を切り替える様子を示しています。
-## Switching Rules +### 切り替えルール + +### Pcdマップを使用したルール -### Pcd Map Based Rule ```mermaid flowchart LR @@ -19,7 +20,53 @@ flowchart LR A --false--> C[enable YabLoc] ``` -### Vector Map Based Rule +### ベクトルマップベースルール + +**1. シスプレビュー** + +**1.1. 概要** + +本ドキュメントでは、Autoware.Autoのベクトルマップベースルール機能について説明します。この機能により、Planningコンポーネントは、ベクトルマップから得られた道路ネットワーク制約に基づいて、走行経路を生成できます。 + +**1.2. 利点** + +* 道路ネットワーク上の走行経路生成を正確化します。 +* 交通状況に適応して安全で効率的な走行を実現します。 + +**2. アーキテクチャ** + +ベクトルマップベースルール機能は、以下のコンポーネントで構成されています。 + +* **ベクトルマップ解析器:** ベクトルマップから道路ネットワーク情報を抽出します。 +* **ルール処理:** 道路ネットワーク制約に基づいて走行経路にルールを適用します。 + +**3. ルール** + +ベクトルマップベースルール機能は、次のようなルールを走行経路に適用します。 + +* **車線逸脱量:** 車線境界からの逸脱量を制限します。 +* **加速逸脱量:** 加速に関する制限を適用します。 +* **速度逸脱量:** 速度に関する制限を適用します。 +* **停止線遵守:** 停止線で車両を停止させます。 +* **優先順位付き交差点:** 交差点における優先順位を遵守します。 + +**4. 使用方法** + +ベクトルマップベースルール機能を使用するには、次の手順に従います。 + +* Autoware.Autoのルート設定ファイルでベクトルマップパスを指定します。 +* ナビゲーションコンポーネントを有効にします。 +* `post resampling`を使用している場合は、Planningパラメータを設定してベクトルマップベースのルールを有効にします。 + +**5. 制限事項** + +* ベクトルの品質に依存します。 +* すべての道路をカバーしていない場合があります。 + +**6. 関連ドキュメント** + +* [Autoware.Autoドキュメント](https://autoware.github.io/autoware.auto/) + ```mermaid flowchart LR @@ -27,26 +74,27 @@ flowchart LR A --whatever --> _A[When the ego vehicle is in a predetermined pose_estimator_area,\n it enables the corresponding pose_estamtor.] ``` -### Rule helpers +### ルールヘルパー -Rule helpers are auxiliary tools for describing switching rules. +ルールヘルパーは、スイッチングルールを記述するための補助ツールです。 -- [PCD occupancy](#pcd-occupancy) -- [Pose estimator area](#pose-estimator-area) +- [PCD占有率](#pcd-occupancy) +- [ポーズ推定エリア](#pose-estimator-area) -#### PCD occupancy +#### PCD占有率 drawing -#### Pose estimator area +#### ポーズ推定エリア -The pose_estimator_area is a planar area described by polygon in lanelet2. -The height of the area is meaningless; it judges if the projection of its self-position is contained within the polygon or not. +`pose_estimator_area` は、`lanelet2` のポリゴンで記述された平面の領域です。エリアの高さには意味はなく、自車の位置の投影がポリゴンの内側に含まれているかどうかを判断します。 drawing -A sample pose_estimator_area is shown below. The values provided below are placeholders. -To be correctly read, the area should have the type "pose_estimator_specify" and the subtype should be one of ndt, yabloc, eagleye, or artag. +以下のサンプルの `pose_estimator_area` が示されています。次に示す値はプレースホルダーです。 + +エリアが正しく読み取られていることを確認するには、エリアのタイプを「`pose_estimator_specify`」にして、サブタイプをndt、yabloc、eagleye、またはartagのいずれかにします。 + ```xml @@ -97,3 +145,4 @@ To be correctly read, the area should have the type "pose_estimator_specify" and ``` + diff --git a/localization/autoware_pose_initializer/README.md b/localization/autoware_pose_initializer/README.md index 2d8f0343f3493..4bdf0d275cba9 100644 --- a/localization/autoware_pose_initializer/README.md +++ b/localization/autoware_pose_initializer/README.md @@ -1,72 +1,103 @@ # autoware_pose_initializer -## Purpose +## 目的 -The `autoware_pose_initializer` is the package to send an initial pose to `ekf_localizer`. -It receives roughly estimated initial pose from GNSS/user. -Passing the pose to `ndt_scan_matcher`, and it gets a calculated ego pose from `ndt_scan_matcher` via service. -Finally, it publishes the initial pose to `ekf_localizer`. -This node depends on the map height fitter library. -[See here for more details.](../../map/autoware_map_height_fitter/README.md) +`autoware_pose_initializer` は `ekf_localizer` に初期ポーズを送信するパッケージです。GNSS/ユーザーから初期ポーズの概算値を受け取ります。このポーズを `ndt_scan_matcher` に渡すと、`ndt_scan_matcher` がサービス経由で計算した自車位置を取得します。最後に、初期ポーズを `ekf_localizer` にパブリッシュします。このノードは、地図高さフィッターライブラリに依存しています。[詳細はこちらを参照してください。](../../map/autoware_map_height_fitter/README.md) -## Interfaces +## インターフェイス -### Parameters +### パラメータ {{ json_to_markdown("localization/autoware_pose_initializer/schema/pose_initializer.schema.json") }} -### Services +### サービス -| Name | Type | Description | -| -------------------------- | ---------------------------------------------------- | --------------------- | -| `/localization/initialize` | tier4_localization_msgs::srv::InitializeLocalization | initial pose from api | +| 名前 | タイプ | 説明 | +| -------------------------- | ---------------------------------------------------- | ----------------------- | +| `/localization/initialize` | tier4_localization_msgs::srv::InitializeLocalization | APIからの初期位置 | -### Clients +### クライアント -| Name | Type | Description | -| -------------------------------------------- | ------------------------------------------------------- | ----------------------- | -| `/localization/pose_estimator/ndt_align_srv` | tier4_localization_msgs::srv::PoseWithCovarianceStamped | pose estimation service | +| 名称 | タイプ | 説明 | +| --------------------------------------- | --------------------------------------------------------- | ------------------------- | +| `/localization/pose_estimator/ndt_align_srv` | tier4_localization_msgs::srv::PoseWithCovarianceStamped | 位推定サービス | -### Subscriptions +### サブスクリプション -| Name | Type | Description | -| ----------------------------------------------------------- | --------------------------------------------- | -------------------- | -| `/sensing/gnss/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | pose from gnss | -| `/sensing/vehicle_velocity_converter/twist_with_covariance` | geometry_msgs::msg::TwistStamped | twist for stop check | -### Publications -| Name | Type | Description | +| 名称 | タイプ | 説明 | +|---|---|---| +| `/sensing/gnss/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | GNSSから取得した自車位置 | +| `/sensing/vehicle_velocity_converter/twist_with_covariance` | geometry_msgs::msg::TwistStamped | 停止確認用の速度 | + +### 論文 + +### Autoware の技術スタック +Autoware は、自動運転車両の開発と実装のためのオープンソースソフトウェアプラットフォームです。以下に、主なコンポーネントとモジュールをリストします。 + +#### Planning +* **Motion Planning:** 車両の安全で効率的な経路を生成します。 +* **Behavior Planning:** 車両の挙動を決定し、障害物回避や速度調整を行います。 + +#### Perception +* **Object Detection (2D/3D):** センサーからのデータを使用して、車両周辺の物体(歩行者、車両、障害物など)を検出します。 +* **Lane Detection:** カメラ画像を使用して、道路上の車線を検出します。 +* **Free Space Estimation:** 車両周辺の走行可能な領域を推定します。 + +#### Control +* **Longitudinal Control:** 車両の縦方向運動(加速度、減速度)を制御します。 +* **Lateral Control:** 車両の横方向運動(ステアリング)を制御します。 +* **Path Tracking:** 生成されたパスに従って車両を誘導します。 + +#### Localization +* **Odometry:** IMUやGNSSなどのセンサーを使用して、自車位置を推定します。 +* **Mapping:** 環境の地図を作成し、自車位置をローカライズするために使用します。 +* **Loop Closure Detection:** 地図内のループを検出し、ローカライゼーションの精度を向上させます。 + +#### Sensor Interface +* **Sensor Fusion:** 複数のセンサーからのデータを統合し、より正確で堅牢な認識情報を作成します。 +* **'Post Resampling' Sensor Fusion:** センサーデータの処理を最適化して、リアルタイムパフォーマンスを向上させます。 + +#### Software Architecture +* **ROS 2:** Autoware のコアアーキテクチャとして使用される、堅牢でスケーラブルなミドルウェア。 +* **DDS:** データをリアルタイムで配信するための高性能ミドルウェア。 +* **Python:** スクリプティングや構成に使用されます。 +* **C++:** リアルタイムコンポーネントやカーネルモジュールに使用されます。 + +| 名称 | 型 | 説明 | | ------------------------------------ | ------------------------------------------------------------ | --------------------------- | -| `/localization/initialization_state` | autoware_adapi_v1_msgs::msg::LocalizationInitializationState | pose initialization state | -| `/initialpose3d` | geometry_msgs::msg::PoseWithCovarianceStamped | calculated initial ego pose | -| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | diagnostics | +| `/localization/initialization_state` | autoware_adapi_v1_msgs::msg::LocalizationInitializationState | 位相初期化状態 | +| `/initialpose3d` | geometry_msgs::msg::PoseWithCovarianceStamped | 計算された自車初期位相 | +| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | 診断 | -## Diagnostics +## 診断 ### pose_initializer_status -If the score of initial pose estimation result is lower than score threshold, ERROR message is output to the `/diagnostics` topic. +初期位置推定結果のスコアがスコアしきい値より低い場合、`/diagnostics` トピックにERRORメッセージが出力されます。 drawing -## Connection with Default AD API +## デフォルトAD APIとの接続 -This `autoware_pose_initializer` is used via default AD API. For detailed description of the API description, please refer to [the description of `autoware_default_adapi`](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/localization.md). +この`autoware_pose_initializer` はデフォルトAD APIを介して使用されます。APIの説明の詳細については、[`autoware_default_adapi` の説明](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/localization.md)を参照してください。 drawing -## Initialize pose via CLI +## CLIを介したポーズの初期化 + +### GNSS推定位置の使用 -### Using the GNSS estimated position ```bash ros2 service call /localization/initialize tier4_localization_msgs/srv/InitializeLocalization ``` -The GNSS estimated position is used as the initial guess, and the localization algorithm automatically estimates a more accurate position. +GNSS 推定位置は初期推測として使用され、局所化アルゴリズムは自動的にさらに正確な位置を推定します。 + +### 入力位置の使用 -### Using the input position ```bash ros2 service call /localization/initialize tier4_localization_msgs/srv/InitializeLocalization " @@ -89,9 +120,10 @@ method: 0 " ``` -The input position is used as the initial guess, and the localization algorithm automatically estimates a more accurate position. +入力位置は初期推定値として使用され、ローカライゼーションアルゴリズムによって自動的により正確な位置が推定されます。 + +### 直接的な初期位置セット -### Direct initial position set ```bash ros2 service call /localization/initialize tier4_localization_msgs/srv/InitializeLocalization " @@ -114,9 +146,10 @@ method: 1 " ``` -The initial position is set directly by the input position without going through localization algorithm. +初期位置は、局在化アルゴリズムを通さずに、入力位置から直接設定されます。 + +### Via ros2 トピックの送信 -### Via ros2 topic pub ```bash ros2 topic pub --once /initialpose geometry_msgs/msg/PoseWithCovarianceStamped " @@ -136,5 +169,6 @@ pose: " ``` -It behaves the same as "initialpose (from rviz)". -The position.z and the covariance will be overwritten by [ad_api_adaptors](https://github.com/autowarefoundation/autoware.universe/tree/main/system/default_ad_api_helpers/ad_api_adaptors), so there is no need to input them. +「initialpose (rviz から)」と同じ動作をします。 +[ad_api_adaptors](https://github.com/autowarefoundation/autoware.universe/tree/main/system/default_ad_api_helpers/ad_api_adaptors) によって position.z と共分散が上書きされるため、それらを入力する必要はありません。 + diff --git a/localization/autoware_pose_instability_detector/README.md b/localization/autoware_pose_instability_detector/README.md index 5beb796f46e12..55b82c9b702f2 100644 --- a/localization/autoware_pose_instability_detector/README.md +++ b/localization/autoware_pose_instability_detector/README.md @@ -1,143 +1,204 @@ -# autoware_pose_instability_detector +## autoware_pose_instability_detector -The `pose_instability_detector` is a node designed to monitor the stability of `/localization/kinematic_state`, which is an output topic of the Extended Kalman Filter (EKF). +`pose_instability_detector`ノードは、拡張カルマンフィルタ(EKF)の出力トピックである`/localization/kinematic_state`の安定性を監視するために設計されています。 -This node triggers periodic timer callbacks to compare two poses: +このノードは、次の2つのポーズ比較のために定期的なタイマーコールバックをトリガーします。 -- The pose calculated by dead reckoning starting from the pose of `/localization/kinematic_state` obtained `timer_period` seconds ago. -- The latest pose from `/localization/kinematic_state`. +- `timer_period`秒前に取得した`/localization/kinematic_state`のポーズから始める、デッドレコニングによって計算されたポーズ +- `/localization/kinematic_state`からの最新のポーズ -The results of this comparison are then output to the `/diagnostics` topic. +この比較の結果は`/diagnostics`トピックに出力されます。 ![overview](./media/pose_instability_detector_overview.png) ![rqt_runtime_monitor](./media/rqt_runtime_monitor.png) -If this node outputs WARN messages to `/diagnostics`, it means that the EKF output is significantly different from the integrated twist values. -In other words, WARN outputs indicate that the vehicle has moved to a place outside the expected range based on the twist values. -This discrepancy suggests that there may be an issue with either the estimated pose or the input twist. +このノードが`/diagnostics`にWARNメッセージを出力する場合、EKFの出力は統合されたツイスト値と大きく異なることを意味します。 +言い換えると、WARN出力は、車両がツイスト値に基づいて予想される範囲外の位置に移動したことを示します。 +この差異は、推定ポーズまたは入力ツイストのいずれかに問題があることを示唆しています。 -The following diagram provides an overview of how the procedure looks like: +次の図は、手順の概要を示しています。 ![procedure](./media/pose_instabilty_detector_procedure.svg) -## Dead reckoning algorithm +## デッドレコニングアルゴリズム -Dead reckoning is a method of estimating the position of a vehicle based on its previous position and velocity. -The procedure for dead reckoning is as follows: +デッドレコニングは、前の位置と速度に基づいて車両の位置を推定する方法です。 +デッドレコニングの手順は次のとおりです。 -1. Capture the necessary twist values from the `/input/twist` topic. -2. Integrate the twist values to calculate the pose transition. -3. Apply the pose transition to the previous pose to obtain the current pose. +1. `/input/twist`トピックから必要なツイスト値を取得する。 +2. ツイスト値を積分してポーズ遷移を計算する。 +3. ポーズ遷移を前のポーズに適用して現在のポーズを取得する。 -### Collecting twist values +### ツイスト値の収集 -The `pose_instability_detector` node collects the twist values from the `~/input/twist` topic to perform dead reckoning. -Ideally, `pose_instability_detector` needs the twist values between the previous pose and the current pose. -Therefore, `pose_instability_detector` snips the twist buffer and apply interpolations and extrapolations to obtain the twist values at the desired time. +`pose_instability_detector`ノードは、デッドレコニングを実行するために`~/input/twist`トピックからツイスト値を収集します。 +理想的には、`pose_instability_detector`は前のポーズと現在のポーズの間のツイスト値が必要です。 +したがって、`pose_instability_detector`はツイストバッファをスニップし、補間と外挿を適用して目的の時間でのツイスト値を取得します。 ![how_to_snip_necessary_twist](./media/how_to_snip_twist.png) -### Linear transition and angular transition +### 線形遷移と角遷移 -After the twist values are collected, the node calculates the linear transition and angular transition based on the twist values and add them to the previous pose. +ツイスト値が収集されると、ノードはツイスト値に基づいて線形遷移と角遷移を計算し、それを前のポーズに追加します。 -## Threshold definition +## 閾値の定義 -The `pose_instability_detector` node compares the pose calculated by dead reckoning with the latest pose from the EKF output. -These two pose are ideally the same, but in reality, they are not due to the error in the twist values the pose observation. -If these two poses are significantly different so that the absolute value exceeds the threshold, the node outputs a WARN message to the `/diagnostics` topic. -There are six thresholds (x, y, z, roll, pitch, and yaw) to determine whether the poses are significantly different, and these thresholds are determined by the following subsections. +`pose_instability_detector`ノードは、デッドレコニングで計算されたポーズとEKF出力からの最新のポーズを比較します。 +これらの2つのポーズは理想的には同じですが、実際にはツイスト値のエラーとポーズ観測のために異なります。 +これらの2つのポーズが絶対値が閾値を超えて大きく異なると、ノードは`/diagnostics`トピックにWARNメッセージを出力します。ポーズが大きく異なるかどうかを判断するための閾値(x、y、z、ロール、ピッチ、ヨー)は6つあり、これらの閾値は次のサブセクションによって決定されます。 ### `diff_position_x` -This threshold examines the difference in the longitudinal axis between the two poses, and check whether the vehicle goes beyond the expected error. -This threshold is a sum of "maximum longitudinal error due to velocity scale factor error" and "pose estimation error tolerance". +この閾値は、2つのポーズ間の縦軸における差を調べ、車両が予想される誤差を超えていないかを確認します。 +この閾値は、「速度スケールファクター誤差による最大縦断誤差」と「ポーズ推定誤差許容値」の合計です。 $$ \tau_x = v_{\rm max}\frac{\beta_v}{100} \Delta t + \epsilon_x\\ $$ -| Symbol | Description | Unit | +| 記号 | 説明 | 単位 | | ------------- | -------------------------------------------------------------------------------- | ----- | -| $\tau_x$ | Threshold for the difference in the longitudinal axis | $m$ | -| $v_{\rm max}$ | Maximum velocity | $m/s$ | -| $\beta_v$ | Scale factor tolerance for the maximum velocity | $\%$ | -| $\Delta t$ | Time interval | $s$ | -| $\epsilon_x$ | Pose estimator (e. g. ndt_scan_matcher) error tolerance in the longitudinal axis | $m$ | +| $\tau_x$ | 縦軸方向の差のしきい値 | m | +| $v_{\rm max}$ | 最大速度 | m/s | +| $\beta_v$ | 最大速度の許容スケールファクター | $\%$ | +| $\Delta t$ | 時間間隔 | s | +| $\epsilon_x$ | 姿勢推定器(例:ndt_scan_matcher)の縦軸方向の誤差許容値 | m | -### `diff_position_y` and `diff_position_z` +### `diff_position_y` および `diff_position_z` -These thresholds examine the difference in the lateral and vertical axes between the two poses, and check whether the vehicle goes beyond the expected error. -The `pose_instability_detector` calculates the possible range where the vehicle goes, and get the maximum difference between the nominal dead reckoning pose and the maximum limit pose. +これらのしきい値は、2つのポーズ間の横方向軸と鉛直方向軸の差を調べ、車両が想定される誤差を超えているかどうかを確認します。 + +`pose_instability_detector` は車両が走行する可能性のある範囲を計算し、通常のデッドレコニングポーズと限界ポーズの最大差を取得します。 ![lateral_threshold_calculation](./media/lateral_threshold_calculation.png) -Addition to this, the `pose_instability_detector` node considers the pose estimation error tolerance to determine the threshold. +さらに、`pose_instability_detector` ノードはポーズ推定誤差許容値を考慮してしきい値を決定します。 $$ \tau_y = l + \epsilon_y $$ -| Symbol | Description | Unit | +| シンボル | 説明 | 単位 | | ------------ | ----------------------------------------------------------------------------------------------- | ---- | -| $\tau_y$ | Threshold for the difference in the lateral axis | $m$ | -| $l$ | Maximum lateral distance described in the image above (See the appendix how this is calculated) | $m$ | -| $\epsilon_y$ | Pose estimator (e. g. ndt_scan_matcher) error tolerance in the lateral axis | $m$ | +| $\tau_y$ | 横軸誤差の閾値 | $m$ | +| $l$ | 上記の画像で示される最大横方向距離 (計算方法は付録を参照) | $m$ | +| $\epsilon_y$ | ポーズ推定器 (例: ndt_scan_matcher) の横軸方向での許容誤差 | $m$ | -Note that `pose_instability_detector` sets the threshold for the vertical axis as the same as the lateral axis. Only the pose estimator error tolerance is different. +`pose_instability_detector`では、y軸のしきい値はx軸と同じ値に設定されています。相違するのはpose estimatorの誤差許容度だけです。 -### `diff_angle_x`, `diff_angle_y`, and `diff_angle_z` +### `diff_angle_x`, `diff_angle_y`, `diff_angle_z` -These thresholds examine the difference in the roll, pitch, and yaw angles between the two poses. -This threshold is a sum of "maximum angular error due to velocity scale factor error and bias error" and "pose estimation error tolerance". +これらのしきい値は、2つの姿勢のロール角、ピッチ角、ヨー角の差を調べます。このしきい値は、「速度倍率係数の誤差による最大角度誤差とバイアス誤差」と「pose推定の誤差許容度」の合計です。 $$ \tau_\phi = \tau_\theta = \tau_\psi = \left(\omega_{\rm max}\frac{\beta_\omega}{100} + b \right) \Delta t + \epsilon_\psi $$ -| Symbol | Description | Unit | -| ------------------ | ------------------------------------------------------------------------ | ------------- | -| $\tau_\phi$ | Threshold for the difference in the roll angle | ${\rm rad}$ | -| $\tau_\theta$ | Threshold for the difference in the pitch angle | ${\rm rad}$ | -| $\tau_\psi$ | Threshold for the difference in the yaw angle | ${\rm rad}$ | -| $\omega_{\rm max}$ | Maximum angular velocity | ${\rm rad}/s$ | -| $\beta_\omega$ | Scale factor tolerance for the maximum angular velocity | $\%$ | -| $b$ | Bias tolerance of the angular velocity | ${\rm rad}/s$ | -| $\Delta t$ | Time interval | $s$ | -| $\epsilon_\psi$ | Pose estimator (e. g. ndt_scan_matcher) error tolerance in the yaw angle | ${\rm rad}$ | +| 記号 | 説明 | 単位 | +|---|---|---| +| $\tau_\phi$ | ロール角差のしきい値 | rad | +| $\tau_\theta$ | ピッチ角差のしきい値 | rad | +| $\tau_\psi$ | ヨー角差のしきい値 | rad | +| $\omega_{\rm max}$ | 最大角速度 | rad/s | +| $\beta_\omega$ | 最大角速度の許容スケール誤差 | % | +| $b$ | 角速度のバイアス許容値 | rad/s | +| $\Delta t$ | 時間間隔 | s | +| $\epsilon_\psi$ | 姿勢推定器(例:ndt_scan_matcher)のヨー角エラー許容値 | rad | -## Parameters +## パラメーター {{ json_to_markdown("localization/autoware_pose_instability_detector/schema/pose_instability_detector.schema.json") }} -## Input +## 入力 + +| 名称 | 型 | 説明 | +| -------------------- | ----------------------------------------------- | --------------------- | +| `~/input/odometry` | `nav_msgs::msg::Odometry` | EKFにより推定された姿勢 | +| `~/input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | ひねりだけでなく速度も表す | + +## 出力 + +このドキュメントは、私たちがAutoware上に構築した自動運転ソフトウェアの機能、アーキテクチャ、設計について説明します。 + +### 1. 概要 + +私たちのソフトウェアは、安全で効率的な自動運転を実現するために必要なすべてのモジュールを含んでいます。これらは、以下のコンポーネントで構成されています。 + +* **Planning (計画)**: パスを生成し、速度プロフィールを決定します。 +* **Control (制御)**: 計画されたパスに従って車両を制御します。 +* **Perception (認識)**: 周囲環境を認識し、障害物や道路標識を検出します。 + +### 2. アーキテクチャ + +ソフトウェアはモジュール設計を採用しており、各モジュールが独立して機能します。このアーキテクチャにより、柔軟性と拡張性が向上しています。 + +モジュール間の通信はROS(Robot Operating System)を使用して行われます。ROSは、リアルタイムロボットアプリケーション向けのオープンソースミドルウェアです。 + +### 3. 設計 + +### 3.1 Planning + +Planningモジュールは、DWA(Dynamic Window Approach)アルゴリズムを使用して、障害物を回避しながら目的地に向かう安全なパスを生成します。 + +### 3.2 Control + +Controlモジュールは、車両の速度とステアリングを制御するために、PID(Proportional-Integral-Derivative)コントローラーを使用します。 -| Name | Type | Description | -| ------------------ | ---------------------------------------------- | --------------------- | -| `~/input/odometry` | nav_msgs::msg::Odometry | Pose estimated by EKF | -| `~/input/twist` | geometry_msgs::msg::TwistWithCovarianceStamped | Twist | +### 3.3 Perception -## Output +Perceptionモジュールは、LIDARとカメラデータを使用して、障害物と道路標識を検出します。障害物の検出には、点群処理と物体検出アルゴリズムが使用されます。また、道路標識の検出には、画像処理と機械学習アルゴリズムが使用されます。 -| Name | Type | Description | +### 4. 実装 + +ソフトウェアはAutoware上に実装されています。Autowareは、自律走行車向けのオープンソースソフトウェアプラットフォームです。 + +### 5. 安全性機能 + +私たちのソフトウェアは、以下の安全性機能を備えています。 + +* **障害物検出**: 周囲の障害物を検出し、衝突を回避します。 +* **速度制限**: 設定された速度制限を超えないように車両を制御します。 +* **自己診断**: システムのコンポーネントを監視し、異常を検出します。 + +### 6. 性能 + +### 6.1 精度 + +Planningモジュールは、障害物を効果的に回避し、安全なパスを生成します。Controlモジュールは、車両を制御し、正確に計画されたパスに従います。 + +### 6.2 効率 + +私たちのソフトウェアは効率的に動作し、リアルタイムで実行できます。これにより、自動運転車両が迅速かつ確実に反応できます。 + +### 7. 課題 + +自動運転ソフトウェアの開発には、以下のような課題があります。 + +* **障害物の検出**: すべての種類の障害物を確実に検出することは困難な場合があります。 +* **Planing**: 障害物が多い環境では、安全で効率的なパスを生成するのは困難な場合があります。 +* **安全性**: 自動運転車両は、あらゆる状況で安全に行動する必要があります。 + +私たちは、これらの課題に取り組み、私たちのソフトウェアを継続的に改善しています。 + +| 名前 | タイプ | 説明 | | ------------------- | ------------------------------------- | ----------- | | `~/debug/diff_pose` | geometry_msgs::msg::PoseStamped | diff_pose | | `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | Diagnostics | -## Appendix +## 付録 -On calculating the maximum lateral distance $l$, the `pose_instability_detector` node will estimate the following poses. +最大横距離 $l$ の計算では、`pose_instability_detector` ノードは次の姿勢を推定します。 -| Pose | heading velocity $v$ | angular velocity $\omega$ | +| 自車位置 | heading速度 $v$ | angular速度 $\omega$ | | ------------------------------- | ------------------------------------------------ | -------------------------------------------------------------- | -| Nominal dead reckoning pose | $v_{\rm max}$ | $\omega_{\rm max}$ | -| Dead reckoning pose of corner A | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | -| Dead reckoning pose of corner B | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | -| Dead reckoning pose of corner C | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | -| Dead reckoning pose of corner D | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | +| Nominalデッドレコニング位置 | $v_{\rm max}$ | $\omega_{\rm max}$ | +| コーナーAのデッドレコニング位置 | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | +| コーナーBのデッドレコニング位置 | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | +| コーナーCのデッドレコニング位置 | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | +| コーナーDのデッドレコニング位置 | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | -Given a heading velocity $v$ and $\omega$, the 2D theoretical variation seen from the previous pose is calculated as follows: +進行方向速度 $v$ と $\omega$ が与えられた場合、前回のポーズから見た 2D 理論的な変化は次のように計算されます。 $$ \begin{align*} @@ -165,4 +226,5 @@ $$ \end{align*} $$ -We calculate this variation for each corner and get the maximum value of the lateral distance $l$ by comparing the distance between the nominal dead reckoning pose and the corner poses. +各コーナーについてこの変動を計算し、予測航法ポーズとコーナーポーズの距離を比較することで、横距離 $l$ の最大値を取得します。 + diff --git a/localization/autoware_stop_filter/README.md b/localization/autoware_stop_filter/README.md index 9904707a59996..912946ed52de9 100644 --- a/localization/autoware_stop_filter/README.md +++ b/localization/autoware_stop_filter/README.md @@ -1,28 +1,85 @@ # stop_filter -## Purpose +## 目的 -When this function did not exist, each node used a different criterion to determine whether the vehicle is stopping or not, resulting that some nodes were in operation of stopping the vehicle and some nodes continued running in the drive mode. -This node aims to: +この関数が存在していなかった場合、各ノードは車両が停止しているかどうかを判断するための異なる基準を使用しており、停止のオペレーションにあるノードとドライブモードで動作を継続しているノードが存在していました。 +このノードの目的は次のとおりです。 -- apply a uniform stopping decision criterion to several nodes. -- suppress the control noise by overwriting the velocity and angular velocity with zero. +- 複数のノードに統一された停止判定基準を適用します。 +- 速度と角速度をゼロで上書きして、制御ノイズを抑えます。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | +| 名称 | タイプ | 説明 | | ------------ | ------------------------- | --------------------- | -| `input/odom` | `nav_msgs::msg::Odometry` | localization odometry | +| `input/odom` | `nav_msgs::msg::Odometry` | ローカライゼーションオドメトリ | -### Output +### 出力 +#### ドキュメント: 自動運転ソフトウェア概要 +**URL:** -| Name | Type | Description | -| ----------------- | ------------------------------------ | -------------------------------------------------------- | -| `output/odom` | `nav_msgs::msg::Odometry` | odometry with suppressed longitudinal and yaw twist | -| `debug/stop_flag` | `tier4_debug_msgs::msg::BoolStamped` | flag to represent whether the vehicle is stopping or not | +自動運転ソフトウェアは、車両の安全で効率的な自動運転を可能にするソフトウェアシステムです。このドキュメントでは、Autowareのアーキテクチャ、コンポーネント、インターフェイスについて説明します。 -## Parameters +**アーキテクチャ** + +Autowareは、モジュール式で階層的なアーキテクチャを採用しています。各モジュールは、特定の機能を実行し、他のモジュールとインターフェイスします。主なモジュールを以下に示します。 + +* **Perception:** センサーデータから環境認識を実行します。 +* **Localization:** GNSS、IMU、LiDARなどのセンサーを統合して自車位置を推定します。 +* **Planning:** 安全で効率的な経路を生成します。 +* **Control:** 計画された経路に従って車両を制御します。 +* **Behavior Planning:** ハザード回避、車線変更などの高レベルの動作を決定します。 +* **Decision Making:** PerceptionとPlanningの出力を統合して運転判断を下します。 + +**コンポーネント** + +Autowareの主なコンポーネントを以下に示します。 + +* **Node Manager:** ノード間の通信を管理します。 +* **Estimator:** IMU、GNSS、LiDARデータを使用して車両の動きを推定します。 +* **Perception:** LiDAR、カメラ、レーダーデータからオブジェクトを検出し、分類します。 +* **Map:** 経路計画に使用される環境マップを提供します。 +* **Planning:** 経路の選択、速度計画を実行します。 +* **Control:** ステアリング、アクセル、ブレーキを制御します。 +* **Safety Monitor:** システムの健全性を監視し、異常が発生した場合に介入します。 + +**インターフェイス** + +Autowareのコンポーネントは、ROS(Robot Operating System)を使用して相互に通信します。主なインターフェイスを以下に示します。 + +* **/current_pose:** 自車位置と姿勢 +* **/detected_objects:** 感知されたオブジェクトの情報 +* **/planned_path:** 計画された経路 +* **/control_command:** 車両の制御コマンド +* **/safety_status:** システムの健全性に関する情報 + +**逸脱量** + +AutowareのPlanningコンポーネントは、経路計画中に以下のような逸脱量を考慮します。 + +* velocity_deceleration:** 速度逸脱量 +* acceleration_deceleration:** 加速度逸脱量 +* jerk_deceleration:** ジャーク逸脱量 + +**'post resampling'** + +Planningコンポーネントは、Planningされた経路を'post resampling'することにより、渋滞や障害物の存在に応じて経路を動的に調整します。 + +**追加情報** + +Autowareの詳細については、以下のリソースを参照してください。 + +* [Autoware公式サイト](https://www.autoware.org) +* [Autowareドキュメント](https://docs.autoware.org/) + +| 名前 | 型 | 説明 | +| ----------------- | ------------------------------------- | ---------------------------------------------------------- | +| `output/odom` | `nav_msgs::msg::Odometry` | 縦方向とヨー方向のツイストが抑制されたオドメトリ | +| `debug/stop_flag` | `tier4_debug_msgs::msg::BoolStamped` | 車両が停止しているかどうかを示すフラグ | + +## パラメータ {{ json_to_markdown("localization/autoware_stop_filter/schema/stop_filter.schema.json") }} + diff --git a/localization/autoware_twist2accel/README.md b/localization/autoware_twist2accel/README.md index 4bdf29947e0e7..8c66fb02f424e 100644 --- a/localization/autoware_twist2accel/README.md +++ b/localization/autoware_twist2accel/README.md @@ -1,28 +1,68 @@ # autoware_twist2accel -## Purpose +## 目的 -This package is responsible for estimating acceleration using the output of `ekf_localizer`. It uses lowpass filter to mitigate the noise. +このパッケージは、`ekf_localizer` の出力を利用して加速度を推定するものです。低域通過フィルタを用いてノイズを軽減しています。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------------- | ------------------------------------------------ | --------------------- | -| `input/odom` | `nav_msgs::msg::Odometry` | localization odometry | -| `input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | twist | +| 名前 | タイプ | 説明 | +| ------------- | ----------------------------------------------- | --------------- | +| `input/odom` | `nav_msgs::msg::Odometry` | ローカリゼーションオドメトリ | +| `input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | ツイスト | -### Output +### 出力 -| Name | Type | Description | +**自動運転ソフトウェア** + +**1. システム概観** + +このドキュメントは、Autoware内で使用される自動運転ソフトウェアのシステム構成の概要を提供します。このソフトウェアは、Planningモジュール、Predictionモジュール、Controlモジュールで構成される階層型アーキテクチャを採用しています。 + +**2. Planningモジュール** + +Planningモジュールは、自車の将来的なパスを生成する責任を負います。以下のサブモジュールで構成されます。 + +* **Path Planning:** 自車の経路を生成します。 +* **Behavior Planning:** 自車の速度と加速度のトラジェクトリを生成します。 +* **Trajectory Optimization:** `post resampling`と加速度滑ら化を使用して、トラジェクトリを最適化します。 + +**3. Predictionモジュール** + +Predictionモジュールは、周囲環境の動的物体を予測する責任を負います。次のサブモジュールで構成されます。 + +* **Object Tracking:** レーザーセンサーとカメラ画像を使用して、周囲の物体を追跡します。 +* **Motion Forecasting:** 物体の将来的な運動を予測します。 +* **Intent Recognition:** 物体の意図を認識し、それらの将来的な行動を予測します。 + +**4. Controlモジュール** + +Controlモジュールは、Planningモジュールで生成されたパスおよびトラジェクトリに基づいて、車両を制御します。次のサブモジュールで構成されます。 + +* **Lateral Control:** 車両の横方向の運動を制御します。 +* **Longitudinal Control:** 車両の縦方向の運動を制御します。 +* **Safety Monitor:** 安全性を確保し、必要に応じて緊急停止します。 + +**5. パフォーマンス評価** + +自動運転ソフトウェアのパフォーマンスは、以下の指標を使用して評価されます。 + +* **障害物回避距離:** 自車が障害物を検出して回避するまでの距離。 +* **速度逸脱量:** 自車の実際の速度と理想的な速度との差。 +* **加速度逸脱量:** 自車の実際の加速度と理想的な加速度との差。 +* **追従距離逸脱量:** 自車と前走車との距離の差。 + +| 名称 | 型 | 説明 | | -------------- | ------------------------------------------------ | ---------------------- | -| `output/accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | estimated acceleration | +| `output/accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 推定加速度 | -## Parameters +## パラメータ {{ json_to_markdown("localization/autoware_twist2accel/schema/twist2accel.schema.json") }} -## Future work +## 今後の取り組み + +今後の取り組みとしては、加速度を EKF 状態に統合することが含まれます。 -Future work includes integrating acceleration into the EKF state. diff --git a/localization/yabloc/README.md b/localization/yabloc/README.md index cf7c2a9f904fc..0e4168c9b711b 100644 --- a/localization/yabloc/README.md +++ b/localization/yabloc/README.md @@ -1,26 +1,26 @@ # YabLoc -**YabLoc** is vision-based localization with vector map. [https://youtu.be/Eaf6r_BNFfk](https://youtu.be/Eaf6r_BNFfk) +**YabLoc** はベクターマップを利用したビジョンベースのローカリゼーションです。[https://youtu.be/Eaf6r_BNFfk](https://youtu.be/Eaf6r_BNFfk) -[![thumbnail](docs/yabloc_thumbnail.jpg)](https://youtu.be/Eaf6r_BNFfk) +[![サムネイル](docs/yabloc_thumbnail.jpg)](https://youtu.be/Eaf6r_BNFfk) -It estimates position by matching road surface markings extracted from images with a vector map. -Point cloud maps and LiDAR are not required. -YabLoc enables users localize vehicles that are not equipped with LiDAR and in environments where point cloud maps are not available. +画像から抽出した路面マーキングをベクターマップと照合することで、自車位置を推定します。 +点群マップやLiDAR は必要ありません。YabLoc は、LiDAR を搭載していない車両や、点群マップが利用できない環境での車両のローカリゼーションを可能にします。 -## Packages +## パッケージ - [yabloc_common](yabloc_common/README.md) - [yabloc_image_processing](yabloc_image_processing/README.md) - [yabloc_particle_filter](yabloc_particle_filter/README.md) - [yabloc_pose_initializer](yabloc_pose_initializer/README.md) -## How to launch YabLoc instead of NDT +## YabLoc を NDT の代わりに起動する方法 -When launching autoware, if you set `pose_source:=yabloc` as an argument, YabLoc will be launched instead of NDT. -By default, `pose_source` is `ndt`. +Autoware を起動するときに、`pose_source:=yabloc` を引数として設定すると、YabLoc が NDT の代わりに起動されます。 +デフォルトでは、`pose_source` は `ndt` です。 + +YabLoc を実行するためのコマンドの例を以下に示します。 -A sample command to run YabLoc is as follows ```shell ros2 launch autoware_launch logging_simulator.launch.xml \ @@ -30,55 +30,56 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ pose_source:=yabloc ``` -## Architecture +## アーキテクチャ ![node_diagram](docs/yabloc_architecture.drawio.svg) -## Principle +## 原理 -The diagram below illustrates the basic principle of YabLoc. -It extracts road surface markings by extracting the line segments using the road area obtained from graph-based segmentation. -The red line at the center-top of the diagram represents the line segments identified as road surface markings. -YabLoc transforms these segments for each particle and determines the particle's weight by comparing them with the cost map generated from Lanelet2. +下図はYabLocの基本原理を示しています。 +グラフベースのセグメンテーションから得られた道路領域を使用して線分を抽出することで、路面標示を抽出します。 +図の中央上部の赤線は、路面標示として識別された線分を表しています。 +YabLocはこれらのセグメントを各パーティクルに変換し、それらをLanelet2から生成されたコストマップと比較することでパーティクルの重みを決めます。 ![principle](docs/yabloc_principle.png) -## Visualization +## 可視化 -### Core visualization topics +### コア可視化トピック -These topics are not visualized by default. +これらのトピックはデフォルトでは可視化されません。 -| index | topic name | description | -| ----- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | `/localization/yabloc/pf/predicted_particle_marker` | particle distribution of particle filter. Red particles are probable candidate. | -| 2 | `/localization/yabloc/pf/scored_cloud` | 3D projected line segments. the color indicates how well they match the map. | -| 3 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | overlay of lanelet2 (yellow lines) onto image based on estimated pose. If they match well with the actual road markings, it means that the localization performs well. | +| index | トピック名 | 説明 | +| ----- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | `/localization/yabloc/pf/predicted_particle_marker` | パーティクルフィルタの粒子分布。赤い粒子は有力候補を示す。 | +| 2 | `/localization/yabloc/pf/scored_cloud` | 3D投影線分群。色はマップとの一致度を示す。 | +| 3 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | 推定された自車位置に基づいて画像にレーンレット2(黄色の線)を重ねた画像。実際の道路標識とよく一致していれば、ローカリゼーションが正確に行われていることを示す。 | -### Image topics for debug +### デバッグ用の画像トピック -These topics are not visualized by default. +これらのトピックはデフォルトでは視覚化されません。 -| index | topic name | description | -| ----- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -| 1 | `/localization/yabloc/pf/cost_map_image` | cost map made from lanelet2 | -| 2 | `/localization/yabloc/pf/match_image` | projected line segments | -| 3 | `/localization/yabloc/image_processing/image_with_colored_line_segment` | classified line segments. green line segments are used in particle correction | -| 4 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | overlay of lanelet2 | -| 5 | `/localization/yabloc/image_processing/segmented_image` | graph based segmentation result | - -## Limitation - -- Running YabLoc and NDT simultaneously is not supported. - - This is because running both at the same time may be computationally too expensive. - - Also, in most cases, NDT is superior to YabLoc, so there is less benefit to running them at the same time. -- It does not estimate roll and pitch, therefore some of the perception nodes may not work well. -- It does not support multiple cameras now. But it will in the future. -- In places where there are few road surface markings, such as intersections, the estimation heavily relies on GNSS, IMU, and vehicle's wheel odometry. -- If the road boundary or road surface markings are not included in the Lanelet2, the estimation is likely to fail. -- The sample rosbag provided in the autoware tutorial does not include images, so it is not possible to run YabLoc with it. - - If you want to test the functionality of YabLoc, the sample test data provided in this [PR](https://github.com/autowarefoundation/autoware.universe/pull/3946) is useful. +| index | トピック名 | 説明 | +| ----- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| 1 | `/localization/yabloc/pf/cost_map_image` | レーンレット2から作成されたコストマップ | +| 2 | `/localization/yabloc/pf/match_image` | 射影された線分 | +| 3 | `/localization/yabloc/image_processing/image_with_colored_line_segment` | 分類された線分。緑色の線分は、パーティクル補正に使用されます | +| 4 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | レーンレット2のオーバーレイ | +| 5 | `/localization/yabloc/image_processing/segmented_image` | グラフベースのセグメンテーション結果 | + +## 制限事項 + +- YabLocとNDTを同時に動作させることはサポートされていません。 + - 二つを同時に動作させることは計算コストが高くなる可能性があるためです。 + - また、ほとんどの場合NDTはYabLocよりも優れているため、同時に動作させることのメリットは少ないです。 +- ロールとピッチの推定を行わないため、一部の認識ノードが正しく動作しない可能性があります。 +- 現在、複数のカメラはサポートされていません。将来的にはサポートされる予定です。 +- 交差点など、路面標示が少ない場所では、推定はGNSS、IMU、車両のホイールオドメトリに大きく依存します。 +- Lanelet2に路面境界または路面標示が含まれていない場合、推定は失敗する可能性があります。 +- Autowareチュートリアルで提供されているサンプルrosbagには画像が含まれていないため、YabLocで実行することはできません。 + - YabLocの機能をテストしたい場合は、この[PR](https://github.com/autowarefoundation/autoware.universe/pull/3946)で提供されているサンプルテストデータが役立ちます。 + diff --git a/localization/yabloc/yabloc_common/README.md b/localization/yabloc/yabloc_common/README.md index cb1799ce21e61..5a906338b8f9e 100644 --- a/localization/yabloc/yabloc_common/README.md +++ b/localization/yabloc/yabloc_common/README.md @@ -1,62 +1,173 @@ -# yabloc_common +## yabloc_common -This package contains some executable nodes related to map. Also, This provides some yabloc common library. +このパッケージには地図に関連するいくつかの実行可能ノードが含まれます。また、yabloc用の一般的なライブラリを提供します。 - [ground_server](#ground_server) - [ll2_decomposer](#ll2_decomposer) ## ground_server -### Purpose +### 目的 -It estimates the height and tilt of the ground from lanelet2. +レーンレット2から路面の高さや傾きを推定します。 -### Input / Outputs +### 入出力 -#### Input +#### 入力 -| Name | Type | Description | -| ------------------ | --------------------------------------- | ------------------- | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | estimated self pose | +| 名称 | 種別 | 説明 | +| ------------------ | -------------------------------------- | ----------------------------------- | +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクタマップ | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置 | -#### Output +#### 出力 -| Name | Type | Description | -| ----------------------- | ---------------------------------- | ------------------------------------------------------------------------------- | -| `output/ground` | `std_msgs::msg::Float32MultiArray` | estimated ground parameters. it contains x, y, z, normal_x, normal_y, normal_z. | -| `output/ground_markers` | `visualization_msgs::msg::Marker` | visualization of estimated ground plane | -| `output/ground_status` | `std_msgs::msg::String` | status log of ground plane estimation | -| `output/height` | `std_msgs::msg::Float32` | altitude | -| `output/near_cloud` | `sensor_msgs::msg::PointCloud2` | point cloud extracted from lanelet2 and used for ground tilt estimation | +``` +## 自動運転ソフトウェアの概要 -### Parameters +### 要件 + +このソフトウェアは、以下のような要件を満たすように設計されています。 + +- 安全かつ信頼性の高い自動運転 +- さまざまな道路状況への適応性 +- 低消費電力の計算処理 +- GUIベースのユーザフレンドリーなインターフェイス + +### アーキテクチャ + +このソフトウェアは、以下のようなモジュール構造のアーキテクチャを採用しています。 + +- **Planning:** 経路計画、障害物回避、速度制御など、自動運転の主要なタスクを実行します。 +- **Localization:** 自車位置と姿勢をリアルタイムで特定します。 +- **Perception:** センサーデータから周囲環境を認識します。 +- **Control:** ブレーキ、アクセル、ステアリングを制御して、計画された経路に従います。 +- **GUI:** ユーザーにソフトウェアの設定やシステムステータスに関する情報を提供します。 + +### 主な機能 + +このソフトウェアは以下の主要機能を提供します。 + +- **Adaptive Cruise Control (ACC):** 車間距離を維持して速度を自動調整します。 +- **Lane Keeping Assist (LKA):** 車線を維持して逸脱を防ぎます。 +- **Lane Departure Warning (LDW):** 車線からの逸脱を検出し警告します。 +- **Collision Warning System (CWS):** 前方障害物を検出し衝突の可能性について警告します。 +- **Autonomous Emergency Braking (AEB):** 衝突を回避するために自動的にブレーキをかけます。 + +### 使用方法 + +このソフトウェアを使用するには、次の手順に従います。 + +1. ソフトウェアをダウンロードしてインストールします。 +2. センサーデータをソフトウェアに接続します。 +3. GUIを使用して適切な設定を行います。 +4. 自動運転モードを有効にします。 + +### トラブルシューティング + +問題が発生した場合は、以下の一般的なトラブルシューティング手順に従います。 + +1. センサーデータの接続を確認します。 +2. GUIでセンサーデータが正しく表示されていることを確認します。 +3. Planningモジュールの設定を確認します。 +4. Controlモジュールの設定を確認します。 +5. `post resampling`手法を使用している場合は、適切なパラメータが設定されていることを確認します。 + +### サポート + +サポートが必要な場合は、Autowareコミュニティフォーラムにアクセスしてください。 + +### 注意事項 + +このソフトウェアは開発中のソフトウェアであり、すべての状況で確実に機能するわけではありません。自動運転中は常に周囲に注意を払い、必要に応じて手動操作を行ってください。 +``` + +| 名称 | タイプ | 説明 | +| ----------------------- | ------------------------------------- | ------------------------------------------------------------------------------- | +| `output/ground` | `std_msgs::msg::Float32MultiArray` | 推定された路面パラメーター。x、y、z、normal_x、normal_y、normal_z を含む。 | +| `output/ground_markers` | `visualization_msgs::msg::Marker` | 推定された路面の状態の可視化 | +| `output/ground_status` | `std_msgs::msg::String` | 路面状態の推定状態のログ | +| `output/height` | `std_msgs::msg::Float32` | 高度 | +| `output/near_cloud` | `sensor_msgs::msg::PointCloud2` | Lanelet2 から抽出され、路面の傾斜推定に使用される点群 | + +### パラメーター {{ json_to_markdown("localization/yabloc/yabloc_common/schema/ground_server.schema.json") }} ## ll2_decomposer -### Purpose +### 目的 + +このノードは、レーンのマークとyablokに関する要素をlanelet2から抽出します。 -This node extracts the elements related to the road surface markings and yabloc from lanelet2. +### 入出力 -### Input / Outputs +#### 入力 -#### Input +| 名称 | タイプ | 説明 | +|---|---|---| +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vectorマップ | -| Name | Type | Description | -| ------------------ | --------------------------------------- | ----------- | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | +#### 出力 -#### Output +Autowareドキュメント(日本語訳) -| Name | Type | Description | -| -------------------------- | -------------------------------------- | --------------------------------------------- | -| `output/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | bounding boxes extracted from lanelet2 | -| `output/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | road surface markings extracted from lanelet2 | -| `output/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | traffic sign boards extracted from lanelet2 | -| `output/sign_board_marker` | `visualization_msgs::msg::MarkerArray` | visualized traffic sign boards | +**はじめに** -### Parameters +本ドキュメントでは、さまざまな自動運転シナリオにおけるソフトウェアアーキテクチャとコンポーネントについて説明します。 + +**ソフトウェアアーキテクチャ** + +Autowareのソフトウェアアーキテクチャは、次の主要なコンポーネントで構成されています。 + +- **Perception(認識):** 車両の周囲環境を感知します。 +- **Prediction(予測):** 周囲の物体の動きを予測します。 +- **Planning(計画):** 車両の経路と操縦を計画します。 +- **Control(制御):** 車両の運動を制御します。 + +**Planningコンポーネント** + +Planningコンポーネントは、次のサブコンポーネントで構成されています。 + +- **Path Planning(パス計画):** 自車位置に基づいて安全な経路を生成します。 +- **Behavior Planning(挙動計画):** 車両の加速、減速、操舵などの挙動を生成します。 + +**Planningコンポーネントの機能** + +Planningコンポーネントは、次の機能を実行します。 + +* Perceptionによって提供される環境情報を使用して、安全な経路を計画します。 +* Predictionによって提供される物体の動き予測を使用して、計画された経路に沿った衝突の可能性を評価します。 +* 車両の速度、加速度逸脱量、操舵逸脱量などの制約を考慮して、実行可能な挙動を生成します。 + +**Planningコンポーネントの入力** + +Planningコンポーネントの入力には、次のものが含まれます。 + +* 自車位置 +* Perceptionによって提供される環境データ +* Predictionによって提供される物体の動き予測 +* 車両の制限事項 + +**Planningコンポーネントの出力** + +Planningコンポーネントの出力には、次のものが含まれます。 + +* 安全な経路 +* 車両の加速、減速、操舵の挙動 + +**追加のリソース** + +* [Autoware 公式ドキュメント](https://docs.autoware.org/) + +| 名称 | タイプ | 説明 | +| -------------------------- | ------------------------------------- | -------------------------------------- | +| `output/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出したバウンディングボックス | +| `output/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出した路面標示 | +| `output/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出した標識 | +| `output/sign_board_marker` | `visualization_msgs::msg::MarkerArray` | 可視化された標識 | + +### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_common/schema/ll2_decomposer.schema.json") }} + diff --git a/localization/yabloc/yabloc_image_processing/README.md b/localization/yabloc/yabloc_image_processing/README.md index 9816a02c48121..2a2cda3e9a507 100644 --- a/localization/yabloc/yabloc_image_processing/README.md +++ b/localization/yabloc/yabloc_image_processing/README.md @@ -1,6 +1,6 @@ # yabloc_image_processing -This package contains some executable nodes related to image processing. +このパッケージには画像処理に関連するいくつかの実行可能ノードが含まれています。 - [line_segment_detector](#line_segment_detector) - [graph_segmentation](#graph_segmentation) @@ -11,123 +11,311 @@ This package contains some executable nodes related to image processing. ## line_segment_detector -### Purpose +### 目的 -This node extract all line segments from gray scale image. +このノードはグレースケール画像から全ての直線を抽出します。 -### Inputs / Outputs +### 入力/出力 -#### Input +#### 入力 -| Name | Type | Description | -| ----------------- | ------------------------- | ----------------- | -| `input/image_raw` | `sensor_msgs::msg::Image` | undistorted image | +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------ | ----------------- | +| `input/image_raw` | `sensor_msgs::msg::Image` | 非歪画像 | + +## 自動運転ソフトウェアドキュメント(マークダウン形式) + +### 目次 + +- [Planningモジュール](#planningモジュール) +- [Behavior Planning](#behavior-planning) +- [Trajectory Planning](#trajectory-planning) +- [Control](#control) +- [Localization](#localization) +- [Perception](#perception) +- [Integration](#integration) + +### Planningモジュール + +Planningモジュールは、自車位置を出発点として、目標の到着点まで安全で効率的な経路を作成する責任を負います。Planningモジュールは、次に示す2つのサブモジュールで構成されています。 + +#### Behavior Planning + +Behavior Planningサブモジュールは、任意の外部入力なしで自車に安全で効率的な目的地への経路を計画します。このサブモジュールは、経路計画アルゴリズム、経路評価機能、および衝突回避モジュールで構成されます。 + +#### Trajectory Planning + +Trajectory Planningサブモジュールは、外部入力(衝突回避モジュールやLocalizationモジュールなど)に基づいて、自車の具体的な経路を計画します。このサブモジュールは、Trajectory Generator、`post resampling`アルゴリズム、および低速走行アルゴリズムで構成されます。 + +### Behavior Planning + +Behavior Planningサブモジュールは、入力として現在のマップと自車位置を受け取ります。サブモジュールは、衝突の可能性がある障害物を回避しながら、経路計画アルゴリズムを使用して目的地までの安全で効率的な経路を計画します。 + +### Trajectory Planning + +Trajectory Planningサブモジュールは、Behavior Planningサブモジュールによって作成された経路を受け取ります。サブモジュールは、`post resampling`アルゴリズムを使用して経路を滑らかにし、低速走行アルゴリズムを使用して交差点などの低速走行シナリオを処理します。 -#### Output +### Control -| Name | Type | Description | -| --------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| `output/image_with_line_segments` | `sensor_msgs::msg::Image` | image with line segments highlighted | -| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | detected line segments as point cloud. each point contains x,y,z, normal_x, normal_y, normal_z and z, and normal_z are always empty. | +Controlモジュールは、計画された経路に基づいて、車両の速度とステアリングを制御します。このモジュールは、PIDコントローラー、状態オブザーバー、およびActuationモジュールで構成されます。 + +### Localization + +Localizationモジュールは、自車位置を決定します。このモジュールは、GPS、IMU、カメラなどのセンサーからデータを受け取ります。 + +### Perception + +Perceptionモジュールは、周囲の環境を感知します。このモジュールは、カメラ、レーダー、LiDARなどのセンサーからデータを受け取ります。 + +### Integration + +Integrationモジュールは、Planningモジュール、Controlモジュール、Localizationモジュール、およびPerceptionモジュールを統合します。このモジュールは、センサーデータを統合し、モジュール間で通信を行います。 + +Autowareのアーキテクチャがご理解いただけたかと思います。質問やご提案がありましたら、お気軽にお問い合わせください。 + +| 名称 | タイプ | 説明 | +| ------------------------------------ | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `output/image_with_line_segments` | `sensor_msgs::msg::Image` | 線分を強調表示した画像 | +| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 点群としての検出された線分。各点は x、y、z、normal_x、normal_y、normal_z を含み、z と normal_z は常に空です。 | ## graph_segmentation -### Purpose +### 目的 -This node extract road surface region by [graph-based-segmentation](https://docs.opencv.org/4.5.4/dd/d19/classcv_1_1ximgproc_1_1segmentation_1_1GraphSegmentation.html). +このノードは、[グラフベースセグメンテーション](https://docs.opencv.org/4.5.4/dd/d19/classcv_1_1ximgproc_1_1segmentation_1_1GraphSegmentation.html)によって道路領域を抽出します。 -### Inputs / Outputs +### 入力 / 出力 -#### Input +#### 入力 | Name | Type | Description | | ----------------- | ------------------------- | ----------------- | -| `input/image_raw` | `sensor_msgs::msg::Image` | undistorted image | +| `input/image_raw` | `sensor_msgs::msg::Image` | 歪み補正された画像 | + +## 自動運転ソフトウェア仕様書 + +### 計画コンポーネント + +#### 動作概要 + +計画コンポーネントは、車両が目的地に安全かつ効率的に移動するための経路と操作を生成する。 + +#### 入出力 + +* **入力:** + * 自車位置 + * マップ + * 障害物検出 +* **出力:** + * 経路 + * 加速 + * ハンドリング + +#### アルゴリズム -#### Output +計画コンポーネントは、以下を含むさまざまなアルゴリズムを使用している: -| Name | Type | Description | -| ------------------------ | ------------------------- | ---------------------------------------------------------- | -| `output/mask_image` | `sensor_msgs::msg::Image` | image with masked segments determined as road surface area | -| `output/segmented_image` | `sensor_msgs::msg::Image` | segmented image for visualization | +* **経路計画:** A*アルゴリズム、Dijkstraアルゴリズム +* **動作計画:** Model Predictive Control (MPC)、最適制御 +* **障害物回避:** Velocity Obstacles法、Dynamic Window Approach (DWA) -### Parameters +#### パフォーマンス指標 + +* **経路の安全性:** 障害物逸脱量、速度逸脱量、加速度逸脱量の最小化 +* **経路の効率性:** 移動時間の最小化、燃料消費の最小化 +* **計算時間:** リアルタイム要件の遵守 + +#### システムアーキテクチャ + +計画コンポーネントは、以下を含むモジュール式アーキテクチャで設計されている: + +* **経路プランナー:** 経路を生成する +* **動作プランナー:** 車両の操作を生成する +* **障害物検出と回避:** 障害物を検出し、それらを回避する経路と操作を生成する + +#### 統合 + +計画コンポーネントは、Autowareシステムの他のコンポーネントと統合されている。これらには、以下が含まれる: + +* センサーインターフェース: 障害物検出データを計画コンポーネントに提供する +* 制御インターフェース: 計画コンポーネントから車両の制御系に動作コマンドを送信する +* HMIインターフェース: 計画経路と車両の操作をユーザーに表示する + +#### テストと検証 + +計画コンポーネントは、シミュレーション環境と実車テストで徹底的にテストされている。このテストには以下が含まれる: + +* **シミュレーション:** さまざまなシナリオ下での計画コンポーネントの動作の検証 +* **実車テスト:** 実際の世界での計画コンポーネントの性能評価 + +#### リリースノート + +* **バージョ ン1.0:** 初期リリース +* **バージョン1.1:** 障害物検出と回避の改善 +* **バージョン1.2:** パフォーマンスの向上とバグ修正 + +| 名称 | 型 | 説明 | +| ------------------------ | ------------------------- | -------------------------------------------------------- | +| `output/mask_image` | `sensor_msgs::msg::Image` | 路面領域として特定されたマスクされたセグメントを含むイメージ | +| `output/segmented_image` | `sensor_msgs::msg::Image` | 可視化用のセグメントイメージ | + +### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_image_processing/schema/graph_segment.schema.json") }} ## segment_filter -### Purpose +### 目的 + +このノードは、graph_segmentとlsdの結果を統合し、道路表面の標示を抽出します。 + +### 入出力 + +#### 入力 +- `lane_detected_raw` : レーン検出の生データ +- `line_detected_raw` : 線検出の生データ +- `current_pose` : 自車位置 + +| 名前 | タイプ | 説明 | +|----|----|----| +| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 検出された線分 | +| `input/mask_image` | `sensor_msgs::msg::Image` | 路面領域と判断されたマスクされたセグメントを持つ画像 | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラの非歪み情報 | + +#### 出力 + +**自動運転ソフトウェアのアーキテクチャ** + +**目的** + +このドキュメントでは、Autowareのアーキテクチャとその主なコンポーネントについて説明します。 + +**アーキテクチャ** + +Autowareは、モジュール化されたアーキテクチャに基づいています。このアーキテクチャは、以下の主要コンポーネントで構成されています。 + +- **Perception:** センサーデータから環境を認識します。 +- **Localization:** 自車位置を認識します。 +- **Planning:** 自車のパスと動作を計画します。 +- **Control:** 計画された動作を実行します。 + +**コンポーネント** + +**Perception** + +Perceptionコンポーネントは以下の機能を担当します。 + +- **カメラ:** 画像データの処理 +- **LiDAR:** 3D点群データの処理 +- **レーダー:** 物体の検出と速度測定 +- **センサーフュージョン:** 複数のセンサーからのデータを統合 -This is a node that integrates the results of graph_segment and lsd to extract road surface markings. +**Localization** -### Inputs / Outputs +Localizationコンポーネントは以下の機能を担当します。 -#### Input +- **自己位置推定:** IMUとGPSデータを使用して自車位置を推定 +- **マップマッチング:** 自車位置を地図と照合 +- **同時位置合わせとマッピング (SLAM):** 環境をマッピングしながら自車位置を推定 -| Name | Type | Description | -| --------------------------- | ------------------------------- | ---------------------------------------------------------- | -| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | detected line segment | -| `input/mask_image` | `sensor_msgs::msg::Image` | image with masked segments determined as road surface area | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | undistorted camera info | +**Planning** -#### Output +Planningコンポーネントは以下の機能を担当します。 -| Name | Type | Description | -| -------------------------------------- | ------------------------------- | -------------------------------------------------- | -| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | filtered line segments for visualization | -| `output/projected_image` | `sensor_msgs::msg::Image` | projected filtered line segments for visualization | -| `output/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | projected filtered line segments | +- **経路計画:** 起点から目的地までの経路を計画 +- **動作計画:** 経路に沿った自車の動作を計画 (速度、加速度、操舵角) +- **障害回避:** 障害物を回避するための回避策の生成 -### Parameters +**Control** + +Controlコンポーネントは以下の機能を担当します。 + +- **ステアリング:** 計画された操舵角の実行 +- **ブレーキング:** 計画されたブレーキ圧力の適用 +- **アクセル:** 計画されたアクセルペダル位置の実行 +- **車両安定化:** 車両の安定性を維持 + +**連携** + +各コンポーネントは、以下のように連携して動作します。 + +- Perceptionコンポーネントは、環境に関する情報を収集します。 +- Localizationコンポーネントは、自車位置を推定します。 +- Planningコンポーネントは、自車の経路と動作を計画します。 +- Controlコンポーネントは、計画された動作を実行します。 + +**考慮事項** + +自動運転ソフトウェアを設計および実装する際には、以下の考慮事項を考慮する必要があります。 + +- **精度:** コンポーネントの出力の正確性 +- **堅牢性:** コンポーネントのエラーに対する耐性 +- **リアルタイム性:** コンポーネントの応答時間 +- **計算コスト:** コンポーネントが使用する計算リソース +- **センサーの限界:** センサーの能力と制限 + +| 名前 | 型 | 説明 | +| ------------------------------------------------ | ---------------------------------- | ------------------------------------------------------------------- | +| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | ビジュアライゼーション用のフィルタ処理済み線分 | +| `output/projected_image` | `sensor_msgs::msg::Image` | ビジュアライゼーション用の投影されたフィルタ処理済み線分 | +| `output/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影されたフィルタ処理済み線分 | + +### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_image_processing/schema/segment_filter.schema.json") }} ## undistort -### Purpose +### 目的 + +このノードは、画像のリサイズと歪み補正を同時に実行します。 + +### 入力 / 出力 -This node performs image resizing and undistortion at the same time. +#### 入力 + - camera_topic(`/{}'.format(camera_name)) + - 型: sensor_msgs/Image + - 説明: 歪んだカメラ画像 -### Inputs / Outputs +#### 出力 + - camera_topic_undistort + - 型: sensor_msgs/Image + - 説明: ゆがみの補正されたカメラ画像 -#### Input +| 名前 | タイプ | 説明 | +| ------------------------------------ | --------------------------------------------------- | --------------------------------------------------- | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 未加工のカメラ画像 | +| `input/image_raw/compressed` | `sensor_msgs::msg::CompressedImage` | 圧縮されたカメラ画像 | -| Name | Type | Description | -| ---------------------------- | ----------------------------------- | ----------------------- | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | camera info | -| `input/image_raw` | `sensor_msgs::msg::Image` | raw camera image | -| `input/image_raw/compressed` | `sensor_msgs::msg::CompressedImage` | compressed camera image | +このノードは、圧縮画像と生画像の両方のトピックをサブスクライブします。 +生画像が一度でもサブスクライブされると、圧縮画像のサブスクライブが停止します。 +これは Autoware 内での不要な解凍を避けるためです。 -This node subscribes to both compressed image and raw image topics. -If raw image is subscribed to even once, compressed image will no longer be subscribed to. -This is to avoid redundant decompression within Autoware. +#### 出力 -#### Output +| 名前 | タイプリスト | 説明 | +| -------------------- | ------------------------------------ | ------------------------- | +| `output/camera_info` | `sensor_msgs::msg::CameraInfo` | リサイズされたカメラ情報 | +| `output/image_raw` | `sensor_msgs::msg::CompressedImage` | 非歪とリサイズされた画像 | -| Name | Type | Description | -| -------------------- | ----------------------------------- | ----------------------------- | -| `output/camera_info` | `sensor_msgs::msg::CameraInfo` | resized camera info | -| `output/image_raw` | `sensor_msgs::msg::CompressedImage` | undistorted and resized image | +### パラメータ -### Parameters +{{ json_to_markdown("localization/yabloc/yabloc_image_processing/schema/undistort.schema.json", true) }} -{{ json_to_markdown("localization/yabloc/yabloc_image_processing/schema/undistort.schema.json") }} +#### tf_static オーバーライドについて -#### about tf_static overriding +
開くにはクリック
-
click to open
+いくつかのノードは `/base_link` から `/sensing/camera/traffic_light/image_raw/compressed` のフレーム ID (例: `/traffic_light_left_camera/camera_optical_link`) への `/tf_static` を必要とします。tf_static が正しいかどうかは以下のコマンドで確認できます。 -Some nodes requires `/tf_static` from `/base_link` to the frame_id of `/sensing/camera/traffic_light/image_raw/compressed` (e.g. `/traffic_light_left_camera/camera_optical_link`). -You can verify that the tf_static is correct with the following command. ```shell ros2 run tf2_ros tf2_echo base_link traffic_light_left_camera/camera_optical_link ``` -If the wrong `/tf_static` are broadcasted due to using a prototype vehicle, not having accurate calibration data, or some other unavoidable reason, it is useful to give the frame_id in `override_camera_frame_id`. -If you give it a non-empty string, `/image_processing/undistort_node` will rewrite the frame_id in camera_info. -For example, you can give a different tf_static as follows. +プロトタイプ車両の使用、正確なキャリブレーションデータの欠如、またはその他の回避できない理由によって間違った`/tf_static`がブロードキャストされた場合、 `override_camera_frame_id`内の`frame_id`を指定すると便利です。非空の文字列を指定すると、`/image_processing/undistort_node`は`camera_info`内の`frame_id`を書き換えます。たとえば、以下のように異なる`tf_static`を指定できます。 + ```shell ros2 launch yabloc_launch sample_launch.xml override_camera_frame_id:=fake_camera_optical_link @@ -142,48 +330,175 @@ ros2 run tf2_ros static_transform_publisher \ ## lanelet2_overlay -### Purpose +### 目的 + +このノードは、推定自車位置に基づいて、camera画像にlanelet2を重ね合わせます。 + +### 入力 / 出力 + +#### 入力 + +| 名前 | タイプ | 説明 | +| ---------------------------------- | ---------------------------------- | ------------------------------------------------- | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置 | +| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 路面マーキング以外の投影された線分 | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 無歪カメラ情報 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 無歪カメラ画像 | +| `input/ground` | `std_msgs::msg::Float32MultiArray` | 地面勾配 | +| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面マーキングに関するlanelet2要素 | +| `input/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | 交通標識に関するlanelet2要素 | + +**自動運転ソフトウェアに関するドキュメント** + +**Planningモジュール** + +**概要** + +Planningモジュールは、自車位置と周囲環境データを元に、安全かつ効率的な経路計画を行います。以下の機能を備えています。 + +**機能** + +* **経路生成:** 自車位置から目的地までの最適な経路を計算します。 +* **速度計画:** 経路に沿った安全かつ快適な速度プロファイルを計算します。 +* **衝突回避:** 周囲の障害物との衝突を回避するための回避操作を計算します。 +* **車線維持:** 車線を維持するためのステアリング制御を計算します。 + +**アーキテクチャ** + +Planningモジュールは、以下で構成されています。 + +* **TrajGen:** 経路を生成します。 +* **TwistGenerator:** 速度プロファイルを計算します。 +* **ObstacleManager:** 障害物を管理します。 +* **LaneManager:** 車線を管理します。 + +**入出力** + +**入力:** + +* 自車位置 +* 周囲環境データ (LiDAR、カメラなど) + +**出力:** -This node overlays lanelet2 on the camera image based on the estimated self-position. +* 計画された経路 +* 目標速度と加速度 +* ステアリング制御 -### Inputs / Outputs +**インターフェイス** -#### Input +Planningモジュールは、Autoware ROSインタフェースを通じて他のコンポーネントとやり取りします。 -| Name | Type | Description | -| ------------------------------------- | ---------------------------------- | --------------------------------------------------- | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | estimated self pose | -| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | projected line segments including non-road markings | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | undistorted camera info | -| `input/image_raw` | `sensor_msgs::msg::Image` | undistorted camera image | -| `input/ground` | `std_msgs::msg::Float32MultiArray` | ground tilt | -| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | lanelet2 elements regarding road surface markings | -| `input/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | lanelet2 elements regarding traffic sign boards | +**パラメータ** -#### Output +Planningモジュールのパラメータは、`/autoware/planning`ネームスペースから設定できます。 -| Name | Type | Description | -| ------------------------------- | --------------------------------- | ------------------------------------------------------ | -| `output/lanelet2_overlay_image` | `sensor_msgs::msg::Image` | lanelet2 overlaid image | -| `output/projected_marker` | `visualization_msgs::msg::Marker` | 3d projected line segments including non-road markings | +**パフォーマンス** + +Planningモジュールの性能は、以下によって向上できます。 + +* 高精度のセンサーデータを使用する +* 現在の実速度をフィードバックする +* 障害物の位置を正確に予測する + +**制限事項** + +* 静的障害物のみを処理します。 +* 悪天候では性能が低下する可能性があります。 +* 急カーブや狭い道路で問題が発生する可能性があります。 + +**依存関係** + +Planningモジュールには、以下のコンポーネントが必要です。 + +* PointCloudPreprocessor +* Mapping +* Localization +* Prediction +* ObstacleDetection +* Control + +**テスト** + +Planningモジュールは、シミュレーションと実車テストの両方でテストされています。 + +**ドキュメント** + +詳細については、以下のドキュメントを参照してください。 + +* [Planningモジュール設計ドキュメント](https://github.com/autowarefoundation/autoware.ai/blob/master/docs/design/planning-module.md) +* [Planningモジュールソースコード](https://github.com/autowarefoundation/autoware.ai/tree/master/ros/autoware_planning) + +**追加情報** + +* Planningモジュールでは、`post resampling`などの手法を使用しています。 +* Planningモジュールは、velocity逸脱量やacceleration逸脱量などのパラメータを調整できます。 +* Planningモジュールは、他のPlanningアルゴリズムと統合できます。 + +| 名前 | 型 | 説明 | +| ------------------------------- | --------------------------------- | ---------------------------------------------------------- | +| `output/lanelet2_overlay_image` | `sensor_msgs::msg::Image` | レーンレット2のオーバーレイ画像 | +| `output/projected_marker` | `visualization_msgs::msg::Marker` | 路面マーキング以外の3D投影された線分 | ## line_segments_overlay -### Purpose +### 目的 -This node visualize classified line segments on the camera image +このノードはカメラ画像上に分類された線分を可視化します -### Inputs / Outputs +### 入出力 -#### Input +#### 入力 -| Name | Type | Description | +| 名前 | タイプ | 説明 | | --------------------------- | ------------------------------- | ------------------------ | -| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | classified line segments | -| `input/image_raw` | `sensor_msgs::msg::Image` | undistorted camera image | +| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 分類線分 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 補正解除カメラ画像 | + +#### 出力 + +**自動運転ソフトウェア** + +**計画コンポーネント** + +計画コンポーネントは、周囲の環境を認識し、それに応じて経路を計画します。 + +* **地図管理:** ナビゲーションマップのロード、解析、更新を担当。 +* **センサーフュージョン:** レーダー、LiDAR、カメラなどのセンサーデータを集約し、周囲の環境の包括的な表現を作成。 +* **オドメトリー:** 自車位置の追跡と推定。 +* **パスプランニング:** 障害物や交通規制を考慮した安全で効率的な経路の生成。 +* **トラフィック予測:** 周辺車両の軌跡を予測し、それに応じて経路を調整。 + +**制御コンポーネント** + +制御コンポーネントは、計画コンポーネントによって生成された経路に従って車両を操作します。 + +* **縦制御:** 加減速の制御を担当。 +* **横制御:** ステアリングの制御を担当。 +* **ブレーキ制御:** ブレーキの適用を担当。 +* **アクチュエーターインターフェース:** コントローラコマンドと車両アクチュエーターのインターフェース。 +* **安定性制御:** 車両の安定性を確保する機能を提供。 + +**他のコンポーネント** + +* **ビヘイビアープランナー:** 車両の一般的な動作を指定。 +* **RVIZビジュアライザー:** システムの動作を可視化する。 +* **ロギングシステム:** システムの動作とデータを記録。 + +**Autowareのアーキテクチャ** + +* **モジュール性:** 各コンポーネントは独立しており、他のコンポーネントと簡単に統合できます。 +* **再利用性:** コンポーネントは再利用可能で、さまざまな自動運転システムで利用できます。 +* **オープンソース:** Autowareはオープンソースプラットフォームであり、コミュニティによって継続的に開発されています。 + +**使用上の注意** + +* システムは依然として開発中であり、限定的な使用に限定されています。 +* システムを使用する前に、関連する安全対策を講じてください。 +* 'post resampling`のデータを使用する場合、元のデータの不確実性と時間遅延に注意してください。 +* 速度逸脱量または加速度逸脱量が高い場合、システムの応答が遅れる可能性があります。 -#### Output +| 名前 | 型 | 説明 | +| --------------------------------------------------- | --------------------------- | ------------------------------------------------------------- | +| `output/image_with_colored_line_segments` | `sensor_msgs::msg::Image` | 線分がハイライトされた画像 | -| Name | Type | Description | -| ----------------------------------------- | ------------------------- | ------------------------------------ | -| `output/image_with_colored_line_segments` | `sensor_msgs::msg::Image` | image with highlighted line segments | diff --git a/localization/yabloc/yabloc_monitor/README.md b/localization/yabloc/yabloc_monitor/README.md index 849429290b427..6454f0f08e28a 100644 --- a/localization/yabloc/yabloc_monitor/README.md +++ b/localization/yabloc/yabloc_monitor/README.md @@ -1,31 +1,86 @@ # yabloc_monitor -YabLoc monitor is a node that monitors the status of the YabLoc localization system. It is a wrapper node that monitors the status of the YabLoc localization system and publishes the status as diagnostics. +YabLoc モニターは YabLoc Localization システムの状態を監視するノードです。YabLoc Localization システムの状態を監視し、その状態を診断として発行するラッパーノードです。 -## Feature +## 機能 -### Availability +### 可用性 -The node monitors the final output pose of YabLoc to verify the availability of YabLoc. +このノードは、YabLoc の最終出力姿勢を監視して YabLoc の可用性を検証します。 -### Others +### その他 -To be added, +追加予定です。 -## Interfaces +## インターフェイス -### Input +### 入力 -| Name | Type | Description | +| 名前 | 型 | 説明 | | --------------------- | --------------------------- | ------------------------------- | -| `~/input/yabloc_pose` | `geometry_msgs/PoseStamped` | The final output pose of YabLoc | +| `~/input/yabloc_pose` | `geometry_msgs/PoseStamped` | YabLocの最終出力姿勢 | -### Output +### 出力 + +この文書は、AutowareのPath PlanningモジュールのためのPythonリファレンスガイドです。 + +**目的** + +本ドキュメントの目的は、Path Planningモジュールの各クラス、関数、定数に関して、その意味と使用方法を明確にすることです。 + +**前提条件** + +読者は、Pythonプログラミング言語、モジュール性、およびオブジェクト指向プログラミングの概念に精通している必要があります。また、Autowareフレームワークの基本的な理解も有益です。 + +**構成** + +このドキュメントは、次のセクションで構成されています。 + +- **モジュール** +- **クラス** +- **関数** +- **定数** +- **付録** + +**モジュール** + +Path Planningモジュールは、`autoware.planning`モジュール内に格納されています。このモジュールには、パス計画アルゴリズム、軌跡生成機能、および障害物回避ルーチンを実装するクラスと関数が含まれています。 + +**クラス** + +Path Planningモジュールには、次の主要なクラスが含まれています。 + +- **Planner:** Planningアルゴリズムのベースクラス +- **TrajectoryGenerator:** 軌跡を生成するクラス +- **ObstacleAvoidance:** 障害物を回避するためのルーチンをカプセル化するクラス + +**関数** + +Path Planningモジュールには、次の主要な関数が含まれています。 + +- `plan_path(current_pose, goal_pose, obstacles)`: 与えられた自車位置、ゴール位置、および障害物を基にパスを計画する +- `generate_trajectory(path, velocity, acceleration)`: 与えられたパス、速度、および加速度に基づいて軌跡を生成する +- `avoid_obstacles(trajectory, obstacles)`: 与えられた軌跡と障害物を基に障害物を回避する + +**定数** + +Path Planningモジュールには、次の主要な定数が含まれています。 + +- `MAX_VELOCITY`: 最適速度 +- `MAX_ACCELERATION`: 最大加速度 +- `MIN_DISTANCE_TO_OBSTACLE`: 障害物に対する最小安全距離 + +**付録** + +付録には、Path Planningモジュールの使用方法に関する追加情報が含まれています。 + +* `post resampling`処理に関するセクションを含んでいます。 | Name | Type | Description | | -------------- | --------------------------------- | ------------------- | -| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | Diagnostics outputs | +| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断結果出力 | + +### パラメータ -### Parameters +{{ json_to_markdown("localization/yabloc/yabloc_monitor/schema/yabloc_monitor.schema.json", "ja") }} -{{ json_to_markdown("localization/yabloc/yabloc_monitor/schema/yabloc_monitor.schema.json") }} diff --git a/localization/yabloc/yabloc_particle_filter/README.md b/localization/yabloc/yabloc_particle_filter/README.md index f46a363102c8b..540439b3da894 100644 --- a/localization/yabloc/yabloc_particle_filter/README.md +++ b/localization/yabloc/yabloc_particle_filter/README.md @@ -1,6 +1,6 @@ -# yabLoc_particle_filter +## yabLoc_particle_filter -This package contains some executable nodes related to particle filter. +このパッケージには、パーティクルフィルタに関連する実行可能ノードが含まれています。 - [particle_predictor](#particle_predictor) - [gnss_particle_corrector](#gnss_particle_corrector) @@ -8,109 +8,326 @@ This package contains some executable nodes related to particle filter. ## particle_predictor -### Purpose +### 目的 -- This node performs predictive updating and resampling of particles. -- It retroactively reflects the particle weights determined by the corrector node. +- このノードは、パーティクルの予測更新と再サンプリングを実行します。 +- それは、Correctorノードによって決定されるパーティクルの重みを遡及的に反映します。 -### Inputs / Outputs +### 入出力 -#### Input +#### 入力 +- `/localization/particle_cloud/sample` (ParticleCloud) -| Name | Type | Description | -| ----------------------------- | ------------------------------------------------ | --------------------------------------------------------- | -| `input/initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | to specify the initial position of particles | -| `input/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | linear velocity and angular velocity of prediction update | -| `input/height` | `std_msgs::msg::Float32` | ground height | -| `input/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | particles weighted by corrector nodes | +#### 出力 +- `/localization/particle_cloud/prediction_sample` (ParticleCloud) +- `/localization/particle_cloud/prediction_weight` (ParticleWeightArray) -#### Output +### パラメータ -| Name | Type | Description | -| ------------------------------ | ----------------------------------------------- | --------------------------------------------------------- | -| `output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | particle centroid with covariance | -| `output/pose` | `geometry_msgs::msg::PoseStamped` | particle centroid with covariance | -| `output/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | particles weighted by predictor nodes | -| `debug/init_marker` | `visualization_msgs::msg::Marker` | debug visualization of initial position | -| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | particles visualization. published if `visualize` is true | +| パラメータ | 説明 | 型 | デフォルト | +| --- | --- | --- | --- | +| `resampling` | 仮説の再サンプリングを実行するかどうか | bool | true | +| `resampling_threshold` | 仮説が再サンプリングされる前の重みの最小しきい値 | double | 0.001 | +| `min_num_particles` | 再サンプリング後の最小パーティクル数 | int | 100 | +| `max_num_particles` | 再サンプリング後の最大パーティクル数 | int | 10000 | +| `temporal_variance` | `'post resampling'`仮説の生成に対する時系列的な分散 | double | 0.0 | +| `translational_variance` | `'post resampling'`仮説の生成に対する並進的な分散 | double | 0.0 | +| `rotational_variance` | `'post resampling'`仮説の生成に対する回転的な分散 | double | 0.0 | -### Parameters +## gnss_particle_corrector + +### 目的 + +- このノードは、GNSS測定値に基づいてパーティクルの重みを修正します。 + +### 入出力 + +#### 入力 +- `/localization/particle_cloud/ground_truth` (ParticleCloud) +- `/localization/particle_cloud/prediction_sample` (ParticleCloud) +- `/localization/gnss/odometry` (Odometry) + +#### 出力 +- `/localization/particle_cloud/correction_weight` (ParticleWeightArray) + +### パラメータ + +| パラメータ | 説明 | 型 | デフォルト | +| --- | --- | --- | --- | +| `gnss_model` | GNSSの測定モデル | string | `'gnss_sim'` | +| `gnss_device_model` | 使用するGNSSデバイスモデル | string | `'ublox_f9p'` | +| `gnss_max_age` | GNSS測定値の最大許容時間 | double | 1.0 | + +## camera_particle_corrector + +### 目的 + +- このノードは、カメラ測定値に基づいてパーティクルの重みを修正します。 + +### 入出力 + +#### 入力 +- `/ localization / particle_cloud / ground_truth` (ParticleCloud) +- `/ localization / particle_cloud / prediction_sample` (ParticleCloud) +- `/localization/camera/detection` (DetectionArray) + +#### 出力 +- `/localization/particle_cloud/correction_weight` (ParticleWeightArray) + +### パラメータ + +| パラメータ | 説明 | 型 | デフォルト | +| --- | --- | --- | --- | +| `camera_model` | カメラの測定モデル | string | `'camera_sim'` | +| `camera_device_model` | 使用するカメラデバイスモデル | string | `'realsense_d435'` | +| `camera_max_age` | カメラ測定値の最大許容時間 | double | 1.0 | +| `detection_distance_threshold` | 検出とパーティクルの位置の距離の最大しきい値 | double | 1.0 | + +| 名前 | 種類 | 説明 | +| ----------------------------- | ------------------------------------------------ | ----------------------------------------------------- | +| `input/initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | パーティクルの初期位置を指定 | +| `input/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 予測更新の線速度と角速度 | +| `input/height` | `std_msgs::msg::Float32` | 地形高 | +| `input/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 補正ノードによって重み付けされたパーティクル | + +#### 出力 + +**自動運転ソフトウェア** + +Autowareの自動運転ソフトウェアは、Perception、Planning、Controlの3つの主要コンポーネントで構成されています。 + +**Perception** + +Perceptionコンポーネントは、カメラ、LiDAR、レーダーなどのセンサーからのデータを処理し、「点群」と「カメラ画像」を生成します。これらのデータを使用して、障害物(車両、歩行者、自転車など)、道路標識、車線マーキングなどの周辺環境を認識します。 + +**Planning** + +Planningコンポーネントは、Perceptionから得られたデータを基に、安全で効率的な走行経路を生成します。経路生成では、以下の要因が考慮されます。 + +* 周囲環境の認識 +* 障害物回避 +* 車両の運動力学(速度、加速度) +* 交通規則 + +**Control** + +Controlコンポーネントは、Planningから生成された経路に従って、車両を制御します。これには、ステアリング、アクセル、ブレーキの操作が含まれます。 + +**追加機能** + +* **Lane Keeping Assist (LKA):** 車線を維持するアシスタント +* **Adaptive Cruise Control (ACC):** 前方車両との車間距離を維持するクルーズコントロール +* **Emergency Braking:** 衝突の可能性がある場合に自動的にブレーキをかける機能 + +**評価** + +Autowareの性能は、さまざまな指標を使用して評価できます。 + +* **Planning評価:** + * 障害物逸脱量(velocity, acceleration) + * 車線逸脱量 + * 安全距離 +* **Control評価:** + * 追従精度 + * 'post resampling'精度 + * 車両の安定性 + +**使用例** + +Autowareの自動運転ソフトウェアは、自動運転車両、ロボタクシー、ラストワンマイル配送などのさまざまな用途で使用できます。 + +| 名前 | 内容 | 説明 | +|---|---|---| +| `output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 粒子中心と共分散 | +| `output/pose` | `geometry_msgs::msg::PoseStamped` | 粒子中心と共分散 | +| `output/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測ノードで重み付けされた粒子 | +| `debug/init_marker` | `visualization_msgs::msg::Marker` | 初期位置のデバッグ用可視化 | +| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子の可視化。`visualize` が true の場合に配信 | + +### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_particle_filter/schema/predictor.schema.json") }} -### Services +### サービス -| Name | Type | Description | -| -------------------- | ------------------------ | ------------------------------------------------ | -| `yabloc_trigger_srv` | `std_srvs::srv::SetBool` | activation and deactivation of yabloc estimation | +| 名称 | 種類 | 説明 | +| -------------------- | ------------------------ | ---------------------------------------------------- | +| `yabloc_trigger_srv` | `std_srvs::srv::SetBool` | yabloc推定の有効化および無効化 | ## gnss_particle_corrector -### Purpose +### 目的 -- This node estimated particles weight using GNSS. -- It supports two types of input: `ublox_msgs::msg::NavPVT` and `geometry_msgs::msg::PoseWithCovarianceStamped`. +- このノードは、GNSSを使用して粒子重みを推定します。 +- 2種類の入力に対応しています。`ublox_msgs::msg::NavPVT`と`geometry_msgs::msg::PoseWithCovarianceStamped`です。 -### Inputs / Outputs +### 入出力 -#### Input +#### 入力 +- ublox\_msgs::NavPVT:[GNSS情報](https://docs.autoware.io/en/latest/autoware.auto/msgs/ublox_msgs/message/NavPVT.html) +- geometry\_msgs::PoseWithCovarianceStamped:[自車位置](https://docs.autoware.io/en/latest/autoware.auto/msgs/geometry_msgs/message/PoseWithCovarianceStamped.html) -| Name | Type | Description | -| ---------------------------- | ----------------------------------------------- | -------------------------------------------------- | -| `input/height` | `std_msgs::msg::Float32` | ground height | -| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | predicted particles | -| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | gnss measurement. used if `use_ublox_msg` is false | -| `input/navpvt` | `ublox_msgs::msg::NavPVT` | gnss measurement. used if `use_ublox_msg` is true | +| 名前 | タイプ | 説明 | +| ------------------------------ | ------------------------------------------------ | ------------------------------------------------------- | +| `input/height` | `std_msgs::msg::Float32` | 地上高度 | +| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 推定パーティクル | +| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSS測定 (use_ublox_msgがfalseの場合に使用) | +| `input/navpvt` | `ublox_msgs::msg::NavPVT` | GNSS測定 (use_ublox_msgがtrueの場合に使用) | -#### Output +**自動運転ソフトウェアの設計に関するドキュメント** -| Name | Type | Description | -| ------------------------------ | -------------------------------------------- | --------------------------------------------------------- | -| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | weighted particles | -| `debug/gnss_range_marker` | `visualization_msgs::msg::MarkerArray` | gnss weight distribution | -| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | particles visualization. published if `visualize` is true | +**Planningコンポーネント** -### Parameters +**状態推定と構想** + +* 最新の自車位置、周囲環境のステータス、予定ルートを把握するための状態推定 +* 障害物の検知、予測、および分類に基づいたパス計画の構想 + +**動作計画** + +* 経路最適化と障害物回避のためのグローバルプランナー +* 局所プランナーによるリアルタイム動作計画の生成 + +**制御** + +* 車両の動的特性を考慮した制御器の設計 +* 経路追従、速度制御、障害物回避のための閉ループ制御 + +**シミュレーションとテスト** + +* 仮想環境を使用した自動運転システムのシミュレーション +* 実際のテスト走路での実車テスト + +**システムアーキテクチャ** + +* モジュール化されたソフトウェアアーキテクチャ +* さまざまなセンサーとアクチュエーターとのインターフェース + +**Autowareソフトウェアスタック** + +* オープンソースの自動運転ソフトウェアプラットフォーム +* Planning、制御、センシング、シミュレーションのためのモジュールを提供 + +**主要な概念** + +* **'post resampling'**:状態推定後の予測された経路 +* **速度逸脱量**:目標速度からの逸脱 +* **加速度逸脱量**:目標加速度からの逸脱 +* **制御限界**:車両の物理的な制約による制御器の入出力の限界 +* **Lanelet2**:道路環境を表現するためのデータ構造 + +| 名前 | タイプ | 説明 | +| ------------------------------ | -------------------------------------------- | -------------------------------------------------------- | +| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 重み付けられた粒子 | +| `debug/gnss_range_marker` | `visualization_msgs::msg::MarkerArray` | GNSS の重み分布 | +| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子のビジュアライゼーション. `visualize` が真の場合に公開される | + +### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_particle_filter/schema/gnss_particle_corrector.schema.json") }} ## camera_particle_corrector -### Purpose +### 目的 + +- このノードは GNSS を使用してパーティクルの重みを見積もります。 + +### 入出力 + +#### 入力 + +| 名称 | タイプ | 説明 | +| --------------------------------- | ----------------------------------------- | --------------------------------------------------------------- | +| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測粒子 | +| `input/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | 路面標示を線分に変換したもの | +| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面標示を線分に変換したもの | +| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影線分 | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置周辺のエリアマップを取得するための参照 | -- This node estimated particles weight using GNSS. +#### 出力 -### Inputs / Outputs +Autoware Planning 2.x のモジュール開発チュートリアル -#### Input +このチュートリアルでは、Planning 2.x のモジュール開発に関するエンドツーエンドのプロセスをご紹介します。必要なスキルと知識、および Planning 2.x でモジュールを開発するための推奨アプローチについて説明します。 -| Name | Type | Description | -| ------------------------------------- | -------------------------------------------- | ----------------------------------------------------------- | -| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | predicted particles | -| `input/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | road surface markings converted to line segments | -| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | road surface markings converted to line segments | -| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | projected line segments | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | reference to retrieve the area map around the self location | +### 必要条件 -#### Output +* C++ の中級レベルの知識 +* ROS の基本的な知識 +* Autoware の基本的な知識 -| Name | Type | Description | -| ------------------------------ | -------------------------------------------- | --------------------------------------------------------- | -| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | weighted particles | -| `debug/cost_map_image` | `sensor_msgs::msg::Image` | cost map created from lanelet2 | -| `debug/cost_map_range` | `visualization_msgs::msg::MarkerArray` | cost map boundary | -| `debug/match_image` | `sensor_msgs::msg::Image` | projected line segments image | -| `debug/scored_cloud` | `sensor_msgs::msg::PointCloud2` | weighted 3d line segments | -| `debug/scored_post_cloud` | `sensor_msgs::msg::PointCloud2` | weighted 3d line segments which are iffy | -| `debug/state_string` | `std_msgs::msg::String` | string describing the node state | -| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | particles visualization. published if `visualize` is true | +###推奨アプローチ -### Parameters +Planning 2.x でモジュールを開発するには、以下の推奨アプローチに従うことをお勧めします。 + +1. **要件の定義:** モジュールの目的、入力、および出力について明確に定義します。 +2. **インターフェースの設計:** モジュールと外部コンポーネントとのインターフェースを設計します。 +3. **モジュールの実装:** モジュールのアルゴリズムとロジックを実装します。 +4. **テスト:** 単体テスト、統合テスト、システムテストを通じてモジュールをテストします。 +5. **ドキュメント化:** モジュールのインターフェース、実装、テストについて文書化します。 + +### モジュール構成 + +Planning 2.x のモジュールは、以下のような構成になっています。 + +* **リソース:** モジュールによって使用される設定ファイルやパラメータです。 +* **インターフェース:** モジュールと外部コンポーネントとのやり取りに使用されるクラスと関数です。 +* **アルゴリズム:** モジュールの内部ロジックを実装するコードです。 +* **テスト:** モジュールを検証するためのテストケースです。 +* **ドキュメント:** モジュールのインターフェース、実装、テストについての説明です。 + +### モジュールの例 + +以下に、Planning 2.x で実装されているモジュールの例をいくつか示します。 + +* **Local Planner:** 自車位置から近接将来の軌道を生成します。 +* **Global Planner:** 長期的な将来の軌道を生成します。 +* **Behavior Planner:** 自車の動作を決定します。 +* **Prediction Module:** 他者の動きを予測します。 + +### モジュール開発の手順 + +Planning 2.x でモジュールを開発するには、以下の手順に従います。 + +1. **Planning モジュールテンプレートを複製する:** Planning リポジトリからモジュールテンプレートを複製します。 +2. **モジュールに名前を付ける:** モジュールを適切な名前に変更します。 +3. **インターフェースを編集する:** モジュールのインターフェースを編集して、独自の要件に合わせます。 +4. **アルゴリズムを実装する:** モジュールのアルゴリズムを実装します。 +5. **テストを追加する:** モジュールを検証するためのテストを追加します。 +6. **リソースを追加する:** モジュールによって使用されるリソースを追加します。 +7. **ドキュメントを追加する:** モジュールのインターフェース、実装、テストについてのドキュメントを追加します。 +8. **モジュールをコンパイルしてインストールする:** モジュールをコンパイルして Autoware にインストールします。 + +### モジュールのメンテナンス + +Planning 2.x のモジュールをメンテナンスするには、以下のベストプラクティスに従うことをお勧めします。 + +* **コードの変更を記録する:** コードの変更をコミットログに記録します。 +* **継続的な統合を使用する:** 変更があると自動的にモジュールをテストおよびビルドする継続的な統合システムを使用します。 +* **モジュールを更新する:** Planning の新しいバージョンがリリースされたら、モジュールを更新します。 + +### サポート + +Planning 2.x のモジュール開発に関するサポートについては、[Autoware フォーラム](https://forum.autoware.ai/) にアクセスしてください。 + +| 名前 | タイプ | 説明 | +| ----------------- | ----------------------------------------------- | ---------------------------------------------------------- | +| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | ウェイト付き粒子 | +| `debug/cost_map_image` | `sensor_msgs::msg::Image` | lanelet2 から生成されたコストマップ | +| `debug/cost_map_range` | `visualization_msgs::msg::MarkerArray` | コストマップ境界 | +| `debug/match_image` | `sensor_msgs::msg::Image` | 投影線分画像 | +| `debug/scored_cloud` | `sensor_msgs::msg::PointCloud2` | ウェイト付き3D線分 | +| `debug/scored_post_cloud` | `sensor_msgs::msg::PointCloud2` | ウェイト付き3D線分(不確実なもの) | +| `debug/state_string` | `std_msgs::msg::String` | ノード状態を表す文字列 | +| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子ビジュアライゼーション.`visualize` が True の場合に公開 | + +### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_particle_filter/schema/camera_particle_corrector.schema.json") }} -### Services +### サービス -| Name | Type | Description | +| 名 | 種類 | 説明 | | ------------ | ------------------------ | ----------------------------------------- | -| `switch_srv` | `std_srvs::srv::SetBool` | activation and deactivation of correction | +| `switch_srv` | `std_srvs::srv::SetBool` | 補正の有効化と無効化 | + diff --git a/localization/yabloc/yabloc_pose_initializer/README.md b/localization/yabloc/yabloc_pose_initializer/README.md index 9ab5dd570510d..a3cafdcd17492 100644 --- a/localization/yabloc/yabloc_pose_initializer/README.md +++ b/localization/yabloc/yabloc_pose_initializer/README.md @@ -1,13 +1,13 @@ # yabloc_pose_initializer -This package contains a node related to initial pose estimation. +このパッケージには、アプライオリ姿勢推定に関するノードが含まれています。 - [camera_pose_initializer](#camera_pose_initializer) -This package requires the pre-trained semantic segmentation model for runtime. This model is usually downloaded by `ansible` during env preparation phase of the [installation](https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/). -It is also possible to download it manually. Even if the model is not downloaded, initialization will still complete, but the accuracy may be compromised. +このパッケージでは、実行時に事前にトレーニングされたセマンティックセグメンテーションモデルが必要です。このモデルは通常、[インストール](https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/)の環境準備フェーズ中に `ansible` によってダウンロードされます。手動でダウンロードすることもできます。モデルがダウンロードされていない場合でも、初期化は完了しますが、精度は低下する可能性があります。 + +手動でモデルをダウンロードして解凍するには、次の手順を実行します。 -To download and extract the model manually: ```bash $ mkdir -p ~/autoware_data/yabloc_pose_initializer/ @@ -16,53 +16,122 @@ $ wget -P ~/autoware_data/yabloc_pose_initializer/ \ $ tar xzf ~/autoware_data/yabloc_pose_initializer/resources.tar.gz -C ~/autoware_data/yabloc_pose_initializer/ ``` -## Note +## ノート -This package makes use of external code. The trained files are provided by apollo. The trained files are automatically downloaded during env preparation. +このパッケージは外部コードを使用しています。学習済みファイルはアポロから提供されます。学習済みファイルは環境準備中に自動的にダウンロードされます。 -Original model URL +元のモデルのURL -> Open Model Zoo is licensed under Apache License Version 2.0. +> Open Model ZooにはApacheライセンスバージョン2.0が適用されています。 -Converted model URL +変換されたモデルのURL -> model conversion scripts are released under the MIT license +> モデル変換スクリプトにはMITライセンスが適用されています。 -## Special thanks +## 特別な謝意を伝える方々 - [openvinotoolkit/open_model_zoo](https://github.com/openvinotoolkit/open_model_zoo) - [PINTO0309](https://github.com/PINTO0309) ## camera_pose_initializer -### Purpose +### 目的 + +- このノードは、ADAPIの要求に応じ、カメラを使用して初期位置を推定します。 + +#### 入力 +- `/planning/scenario_planning/current_pose`:自車位置 +- `/planning/scenario_planning/autoware/config/mission`:ミッション設定 +- `/localization/hdmap`:HDマップ +- `/perception/detection/vehicles`:車両検出結果 +- `/perception/detection/lanes`:車線検出結果 +- `/perception/detection/traffic_lights`:信号検出結果 +- `/perception/detection/obstacles`:障害物検出結果 +- `/perception/detection/objects`:物体検出結果 +- `/planning/scenario_planning/current_frame_id`:現在のフレームID + +#### 出力 +- `/planning/scenario_planning/autoware/initial_pose`:初期位置推定結果 + +| 名称 | 型 | 説明 | +| ------------------- | ------------------------------------ | -------------------------- | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 非歪みカメラ情報 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 非歪みカメラ画像 | +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | + +#### 出力 + +**自己位置推定(Localization)** + +自己位置推定モジュールは、ローカリゼーションデータ(GPS、IMU、オドメトリなど)を使用して、自車位置を推定します。 + +**Planning** + +Planningモジュールは、Perceptionモジュールからのデータに基づいて、経路計画を作成します。 + +**経路追跡(Path Tracking)** + +経路追跡モジュールは、Planningモジュールから作成された経路を自車が追従できるように制御します。 + +**障害物検知(Perception)** + +Perceptionモジュールは、カメラ、レーダー、LiDARなどのセンサーデータを使用して、車両や歩行者などの周囲の障害物を検出します。 + +**状態推定(State Estimation)** + +状態推定モジュールは、ローカリゼーション、Perception、その他のセンサーデータを使用して、車両の現在の状態(速度、加速度など)を推定します。 -- This node estimates the initial position using the camera at the request of ADAPI. +**動作プランナー(Behavior Planner)** -#### Input +動作プランナーモジュールは、認識された障害物や交通状況に基づいて、車両の動作を計画します。 -| Name | Type | Description | -| ------------------- | --------------------------------------- | ------------------------ | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | undistorted camera info | -| `input/image_raw` | `sensor_msgs::msg::Image` | undistorted camera image | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | +**衝突回避(Collision Avoidance)** -#### Output +衝突回避モジュールは、衝突が差し迫っている場合に、障害物を回避するための緊急回避操作を実行します。 -| Name | Type | Description | +**制御(Control)** + +制御モジュールは、経路追跡、障害物検出、その他のモジュールからの入力を統合し、車両のステアリング、アクセル、ブレーキを制御します。 + +**システムモニタリング** + +システムモニタリングモジュールは、車両システムの健全性を監視し、異常が検出された場合は警告またはエラーメッセージを生成します。 + +**診断(Diagnostics)** + +診断モジュールは、システムの問題や障害を特定するためのツールを提供します。 + +**シミュレーション(Simulation)** + +シミュレーションモジュールは、車両や環境の挙動をシミュレートして、Autowareのパフォーマンスをテストおよび評価します。 + +**ポスト処理(Post-Processing)** + +ポスト処理モジュールは、センサーデータやその他のデータを補完し、`post resampling`や地図マッチングなどの手法を使用します。 + +**パラメーター調整** + +パラメーター調整ツールは、Autowareのパフォーマンスを最適化するために、さまざまなパラメーターを微調整することを可能にします。 + +**検証および検証(Validation and Verification)** + +検証および検証モジュールは、Autowareシステムの安全性、信頼性、およびパフォーマンスを評価するためのツールと手順を提供します。 + +| 名 | 型 | 説明 | | ------------------- | -------------------------------------- | ----------------------- | -| `output/candidates` | `visualization_msgs::msg::MarkerArray` | initial pose candidates | +| `output/candidates` | `visualization_msgs::msg::MarkerArray` | 初期姿勢候補 | -### Parameters +### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_pose_initializer/schema/camera_pose_initializer.schema.json") }} -### Services +### サービス + +| 名前 | タイプ | 説明 | +| ------------------------ | -------------------------------------------------------------- | ------------------------------------- | +| `yabloc_align_srv` | `tier4_localization_msgs::srv::PoseWithCovarianceStamped` | 初期姿勢推定リクエスト | -| Name | Type | Description | -| ------------------ | --------------------------------------------------------- | ------------------------------- | -| `yabloc_align_srv` | `tier4_localization_msgs::srv::PoseWithCovarianceStamped` | initial pose estimation request | diff --git a/map/autoware_map_height_fitter/README.md b/map/autoware_map_height_fitter/README.md index a61760b142615..d97a2cce88283 100644 --- a/map/autoware_map_height_fitter/README.md +++ b/map/autoware_map_height_fitter/README.md @@ -1,21 +1,34 @@ -# autoware_map_height_fitter +## autoware_map_height_fitter -This library fits the given point with the ground of the point cloud map. -The map loading operation is switched by the parameter `enable_partial_load` of the node specified by `map_loader_name`. -The node using this library must use multi thread executor. +このライブラリは、与えられた点とその点のポイントクラウドマップの地面に適合させます。 +マップの読み込み操作は、`map_loader_name`で指定されたノードのパラメータ`enable_partial_load`によって切り替えられます。 +このライブラリを使用するノードはマルチスレッドエグゼキュータを使用する必要があります。 -## Parameters +## パラメータ {{ json_to_markdown("map/autoware_map_height_fitter/schema/map_height_fitter.schema.json") }} -## Topic subscription +## トピックサブスクリプション -| Topic Name | Description | +| Topic Name | 説明 | | ---------------- | -------------------------------------------------------------------------------------------- | -| ~/pointcloud_map | The topic containing the whole pointcloud map (only used when `enable_partial_load = false`) | +| ~/pointcloud_map | `enable_partial_load = false` の場合のみ使用される、ポイントクラウド マップ全体を含んだトピック | -## Service client +## サービスクライアント + +### Planningモジュール + +#### 制御信号の生成 +- **概要** + - Planningモジュールは、障害物検出、経路計画、経路追従に基づいて、制御信号を生成します。 +- **入力** + - 地図データ + - Sensorからのセンシングデータ + - `post resampling`後の自車位置 +- **出力** + - 車両の速度、加速度、操舵角度のコマンド + +## サービス名 | 説明 +---|---| +| ~/partial_map_load | 局部地図を読み込むサービス -| Service Name | Description | -| ------------------ | ----------------------------------- | -| ~/partial_map_load | The service to load the partial map | diff --git a/map/autoware_map_projection_loader/README.md b/map/autoware_map_projection_loader/README.md index 11246c092231e..d50993caa3644 100644 --- a/map/autoware_map_projection_loader/README.md +++ b/map/autoware_map_projection_loader/README.md @@ -1,17 +1,18 @@ # autoware_map_projection_loader -## Feature +## 特徴 -`autoware_map_projection_loader` is responsible for publishing `map_projector_info` that defines in which kind of coordinate Autoware is operating. -This is necessary information especially when you want to convert from global (geoid) to local coordinate or the other way around. +`autoware_map_projection_loader` は、Autoware が動作する座標系を定義する `map_projector_info` をパブリッシュする役割を持ちます。 +これは、特に座標を地図(ジオイド)から局所座標に変換する場合、またはその逆を行う場合に必要です。 -- If `map_projector_info_path` DOES exist, this node loads it and publishes the map projection information accordingly. -- If `map_projector_info_path` does NOT exist, the node assumes that you are using the `MGRS` projection type, and loads the lanelet2 map instead to extract the MGRS grid. - - **DEPRECATED WARNING: This interface that uses the lanelet2 map is not recommended. Please prepare the YAML file instead.** +- `map_projector_info_path` が存在する場合、このノードはそれをロードしてそれに応じて地図投影情報をパブリッシュします。 +- `map_projector_info_path` が存在しない場合、ノードはあなたが `MGRS` 投影タイプを使用していることを想定し、代わりにレーンレット 2 マップをロードして MGRS グリッドを抽出します。 + - **非推奨の警告: レーンレット 2 マップを使用するこのインターフェイスは推奨されません。代わりに YAML ファイルを準備してください。** -## Map projector info file specification +## 地図投影情報ファイルの仕様 + +`map_path` ディレクトリに `map_projector_info.yaml` という名前の YAML ファイルを用意する必要があります。 `pointcloud_map_metadata.yaml` については、`map_loader` の Readme を参照してください。 -You need to provide a YAML file, namely `map_projector_info.yaml` under the `map_path` directory. For `pointcloud_map_metadata.yaml`, please refer to the Readme of `map_loader`. ```bash sample-map-rosbag @@ -21,29 +22,32 @@ sample-map-rosbag └── pointcloud_map_metadata.yaml ``` -There are three types of transformations from latitude and longitude to XYZ coordinate system as shown in the figure below. Please refer to the following details for the necessary parameters for each projector type. +緯度経度からXYZ座標系への変換は、次の図に示すように3種類あります。各プロジェクタータイプに必要なパラメータの詳細については、以下を参照してください。 ![node_diagram](docs/map_projector_type.svg) -### Using local coordinate +### ローカル座標を使用 + + ```yaml # map_projector_info.yaml projector_type: local ``` -#### Limitation +#### 制限事項 + +経度と緯度を必要とする機能は利用できなくなります。 -The functionality that requires latitude and longitude will become unavailable. +現在、利用できないことが判明している機能は次のとおりです。 -The currently identified unavailable functionalities are: +- GNSS局所化 +- ADAPIを使用した経度と緯度での自車位置の送信 -- GNSS localization -- Sending the self-position in latitude and longitude using ADAPI +### MGRSの使用 -### Using MGRS +MGRSを使用する場合は、MGRSグリッドも指定してください。 -If you want to use MGRS, please specify the MGRS grid as well. ```yaml # map_projector_info.yaml @@ -52,13 +56,14 @@ vertical_datum: WGS84 mgrs_grid: 54SUE ``` -#### Limitation +#### 制限 -It cannot be used with maps that span across two or more MGRS grids. Please use it only when it falls within the scope of a single MGRS grid. +2つ以上のMGRSグリッドにまたがるマップでは使用できません。単一のMGRSグリッドの範囲内でのみ使用してください。 -### Using LocalCartesianUTM +### LocalCartesianUTMを使用する場合 + +ローカルカートシャンUTMを使用する場合は、マップの原点も指定してください。 -If you want to use local cartesian UTM, please specify the map origin as well. ```yaml # map_projector_info.yaml @@ -70,9 +75,10 @@ map_origin: altitude: 0.0 # [m] ``` -### Using TransverseMercator +#### TransverseMercatorの使用 + +TransverseMercator投影を使用する場合は、マップ原点も指定してください。 -If you want to use Transverse Mercator projection, please specify the map origin as well. ```yaml # map_projector_info.yaml @@ -84,12 +90,13 @@ map_origin: altitude: 0.0 # [m] ``` -## Published Topics +## 送信トピック -- `~/map_projector_info` (tier4_map_msgs/MapProjectorInfo) : This topic shows the definition of map projector information +- `~/map_projector_info` (tier4\_map\_msgs/MapProjectorInfo): このトピックは、マッププロジェクターの定義情報を示します。 -## Parameters +## パラメーター -Note that these parameters are assumed to be passed from launch arguments, and it is not recommended to directly write them in `map_projection_loader.param.yaml`. +これらのパラメーターは起動引数から渡されると想定されており、`map_projection_loader.param.yaml`に直接書き込むことを推奨しません。 {{ json_to_markdown("map/autoware_map_projection_loader/schema/map_projection_loader.schema.json") }} + diff --git a/map/autoware_map_tf_generator/README.md b/map/autoware_map_tf_generator/README.md index ed63e35e37b85..b7464d84e2574 100644 --- a/map/autoware_map_tf_generator/README.md +++ b/map/autoware_map_tf_generator/README.md @@ -1,50 +1,85 @@ # autoware_map_tf_generator -## Purpose +## 目的 -The nodes in this package broadcast the `viewer` frame for visualization of the map in RViz. +このパッケージ内のノードは、RVizでマップを視覚化した際の`viewer`フレームをブロードキャストします。 -Note that there is no module to need the `viewer` frame and this is used only for visualization. +`viewer`フレームが必要なモジュールはなく、視覚化のためだけに使用されることに注意してください。 -The following are the supported methods to calculate the position of the `viewer` frame: +`viewer`フレームの位置を計算するためにサポートされている方法は次のとおりです。 -- `pcd_map_tf_generator_node` outputs the geometric center of all points in the PCD. -- `vector_map_tf_generator_node` outputs the geometric center of all points in the point layer. +- `pcd_map_tf_generator_node`はPCD内のすべての点の幾何学的中心を出力します。 +- `vector_map_tf_generator_node`はポイントレイヤー内のすべての点の幾何学的中心を出力します。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -## Inputs / Outputs +## 入出力 -### Input +### 入力 #### autoware_pcd_map_tf_generator +- ~/map/pcd_map/point_cloud2: PCD形式のマップデータ +- ~/localization/current_pose: 自車位置のトピック -| Name | Type | Description | -| --------------------- | ------------------------------- | ----------------------------------------------------------------- | -| `/map/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | Subscribe pointcloud map to calculate position of `viewer` frames | +| 名前 | タイプ | 説明 | +| --------------------- | ------------------------------------------------ | ------------------------------------------------------------------------ | +| `/map/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | `viewer` フレームの位置を計算するためのポイントクラウドマップを購読します | #### autoware_vector_map_tf_generator -| Name | Type | Description | -| ----------------- | --------------------------------------- | ------------------------------------------------------------- | -| `/map/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | Subscribe vector map to calculate position of `viewer` frames | +Vector map publisher that converts map messages received on the ROS topic `/map` to a TF tree, and publishes it on the ROS topic `/tf`. -### Output +| 名前 | タイプ | 説明 | +| ------------------- | -------------------------------------------- | ------------------------------------------------------------- | +| `/map/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップをサブスクライブして `viewer` フレームの位置を計算する | -| Name | Type | Description | +### 定常状態計画(SSS)プロセス + +SSSプロセスは、以下のようなタスクを実行します。 + +- Local Plannerが生成したパスを、周辺環境の可用性と整合させて修正します。 +- 車両の動的制約を考慮して、Reference Pathの安全性を確保します。 +- Reference Pathを滑らかに補間して、快適な走行を実現します。 + +SSSプロセスは、以下からなる複数のモジュールで構成されています。 + +- **障害物除去モジュール:** + - レーダーセンサーやカメラセンサーから取得した障害物情報を処理します。 + - 障害物情報をSSSマップにマージして、通行可能な領域を更新します。 + +- **パス計画モジュール:** + - Local Plannerから生成されたパスを受け取ります。 + - SSSマップ上の通行可能な領域に基づいて、パスを修正して安全性を確保します。 + +- **速度計画モジュール:** + - パス計画モジュールから修正されたパスを受け取ります。 + - 速度逸脱量と加速度逸脱量を計算します。 + - Reference Pathに沿った速度プロファイルを作成します。 + +- **Reference Path生成モジュール:** + - パス計画モジュールから修正されたパスと速度プロファイルを受け取ります。 + - パスを滑らかに補間して、Reference Pathを生成します。 + - 自車位置を考慮してReference Pathを補正します。 + +- **'post resampling'モジュール:** + - Reference Pathをリサンプリングして、一定の時間間隔でデータポイントを作成します。 + - 'post resampling'によって、以降のコンポーネントへのスムーズなデータ引き渡しが可能になります。 + +| 名称 | タイプ | 説明 | | ------------ | ------------------------ | ------------------------- | -| `/tf_static` | `tf2_msgs/msg/TFMessage` | Broadcast `viewer` frames | +| `/tf_static` | `tf2_msgs/msg/TFMessage` | `viewer`フレームをブロードキャスト | -## Parameters +## パラメータ -### Node Parameters +### ノードパラメータ -None +なし -### Core Parameters +### コアパラメータ {{ json_to_markdown("map/autoware_map_tf_generator/schema/map_tf_generator.schema.json") }} -## Assumptions / Known limits +## 想定 / 制限事項 + +未定義。 -TBD. diff --git a/map/map_loader/README.md b/map/map_loader/README.md index bc3eb80d80339..51c7807105f78 100644 --- a/map/map_loader/README.md +++ b/map/map_loader/README.md @@ -1,37 +1,37 @@ -# map_loader package +## map_loader パッケージ -This package provides the features of loading various maps. +このパッケージは、さまざまなマップをロードする機能を提供します。 ## pointcloud_map_loader -### Feature +### 機能 -`pointcloud_map_loader` provides pointcloud maps to the other Autoware nodes in various configurations. -Currently, it supports the following two types: +`pointcloud_map_loader` は、さまざまな構成でその他の Autoware ノードにポイントクラウド マップを提供します。 +現在、次の 2 つのタイプをサポートしています。 -- Publish raw pointcloud map -- Publish downsampled pointcloud map -- Send partial pointcloud map loading via ROS 2 service -- Send differential pointcloud map loading via ROS 2 service +- Raw ポイントクラウド マップを公開します +- ダウンサンプリングされたポイントクラウド マップを公開します +- ROS 2 サービス経由で一部ポイントクラウド マップのローディングを送信します +- ROS 2 サービス経由で差分ポイントクラウド マップのローディングを送信します -NOTE: **We strongly recommend to use divided maps when using large pointcloud map to enable the latter two features (partial and differential load). Please go through the prerequisites section for more details, and follow the instruction for dividing the map and preparing the metadata.** +注意: **大規模ポイントクラウド マップを使用する場合、後者の 2 つの機能 (部分および差分ロード) を有効にするには分割されたマップを使用することを強くお勧めします。詳細は前提条件セクションを参照し、マップを分割してメタデータの準備に関する指示に従ってください。** -### Prerequisites +### 前提条件 -#### Prerequisites on pointcloud map file(s) +#### ポイントクラウド マップ ファイルの前提条件 -You may provide either a single .pcd file or multiple .pcd files. If you are using multiple PCD data, it MUST obey the following rules: +単一の .pcd ファイルまたは複数の .pcd ファイルを提供できます。複数の PCD データを使用する場合は、次のルールに従う必要があります。 -1. **The pointcloud map should be projected on the same coordinate defined in `map_projection_loader`**, in order to be consistent with the lanelet2 map and other packages that converts between local and geodetic coordinates. For more information, please refer to [the readme of `map_projection_loader`](https://github.com/autowarefoundation/autoware.universe/tree/main/map/autoware_map_projection_loader/README.md). -2. **It must be divided by straight lines parallel to the x-axis and y-axis**. The system does not support division by diagonal lines or curved lines. -3. **The division size along each axis should be equal.** -4. **The division size should be about 20m x 20m.** Particularly, care should be taken as using too large division size (for example, more than 100m) may have adverse effects on dynamic map loading features in [ndt_scan_matcher](https://github.com/autowarefoundation/autoware.universe/tree/main/localization/autoware_ndt_scan_matcher) and [autoware_compare_map_segmentation](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_compare_map_segmentation). -5. **All the split maps should not overlap with each other.** -6. **Metadata file should also be provided.** The metadata structure description is provided below. +1. **ポイントクラウド マップは、`map_projection_loader` で定義された同じ座標に投影する必要があります**。これは、車線マップと、局所座標と測地座標を変換する他のパッケージと整合性を保つためです。詳細については、[``map_projection_loader`` の README](https://github.com/autowarefoundation/autoware.universe/tree/main/map/autoware_map_projection_loader/README.md) を参照してください。 +2. **x 軸と y 軸に平行な直線で分割する必要があります**。このシステムは、対角線または曲線による分割をサポートしていません。 +3. **各軸に沿った分割サイズは等しくする必要があります**。特に、分割サイズが大きすぎる (たとえば、100 m 以上) 場合は、[ndt_scan_matcher](https://github.com/autowarefoundation/autoware.universe/tree/main/localization/autoware_ndt_scan_matcher) と [autoware_compare_map_segmentation](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_compare_map_segmentation) の動的マップのローディング機能に悪影響を与える可能性があるため注意してください。 +4. **すべての分割マップは互いに重複しないようにする必要があります**。 +5. **メタデータ ファイルも提供する必要があります。**メタデータ構造の説明を以下に示します。 -#### Metadata structure +#### メタデータ構造 + +メタデータは次のようになります。 -The metadata should look like this: ```yaml x_resolution: 20.0 @@ -42,17 +42,26 @@ C.pcd: [1200, 2520] # -> 1200 < x < 1220, 2520 < y < 2540 D.pcd: [1240, 2520] # -> 1240 < x < 1260, 2520 < y < 2540 ``` -where, +**点群マップのフォーマット** + +`open_planner.voxel_grid.VoxelGridConfig`を使用して、点群マップ`voxel grid`を作成します。詳細については、`open_planner.voxel_grid.VoxelGridConfig`のドキュメントを参照してください。 + +点群マップのフォーマットは次のとおりです。 + +```` +.pcd +```` -- `x_resolution` and `y_resolution` -- `A.pcd`, `B.pcd`, etc, are the names of PCD files. -- List such as `[1200, 2500]` are the values indicate that for this PCD file, x coordinates are between 1200 and 1220 (`x_resolution` + `x_coordinate`) and y coordinates are between 2500 and 2520 (`y_resolution` + `y_coordinate`). +- `x_resolution`と`y_resolution` +- `A.pcd`, `B.pcd`などはPCDファイルの名前です。 +- `[1200, 2500]`などのリストは、このPCDファイルのx座標が1200~1220(`x_resolution` + `x_coordinate`)の間、y座標が2500~2520(`y_resolution` + `y_coordinate`)の間にあることを示す値です。 -You may use [pointcloud_divider](https://github.com/autowarefoundation/autoware_tools/tree/main/map/autoware_pointcloud_divider) for dividing pointcloud map as well as generating the compatible metadata.yaml. +点群マップを分割したり、互換性のある`metadata.yaml`を生成したりするには、[pointcloud_divider](https://github.com/autowarefoundation/autoware_tools/tree/main/map/autoware_pointcloud_divider)を使用できます。 -#### Directory structure of these files +**これらのファイルのディレクトリ構造** + +点群マップが1つしかない場合、Autowareはデフォルトで次のディレクトリ構造を使用します。 -If you only have one pointcloud map, Autoware will assume the following directory structure by default. ```bash sample-map-rosbag @@ -60,7 +69,8 @@ sample-map-rosbag ├── pointcloud_map.pcd ``` -If you have multiple rosbags, an example directory structure would be as follows. Note that you need to have a metadata when you have multiple pointcloud map files. +複数ロズバッグがある場合は、次のようになります。マルチポイントクラウドマップファイルがある場合はメタデータを用意する必要があります。 + ```bash sample-map-rosbag @@ -74,101 +84,98 @@ sample-map-rosbag └── pointcloud_map_metadata.yaml ``` -### Specific features +### 固有の機能 -#### Publish raw pointcloud map (ROS 2 topic) +#### 生の点群マップを公開(ROS 2トピック) -The node publishes the raw pointcloud map loaded from the `.pcd` file(s). +ノードは、`.pcd` ファイルから読み込まれた生の点群マップを公開します。`leaf_size` パラメーターを変更することで、ダウンサンプルの解像度を指定できます。 -#### Publish downsampled pointcloud map (ROS 2 topic) +#### ダウンサンプルされた点群マップを公開(ROS 2トピック) -The node publishes the downsampled pointcloud map loaded from the `.pcd` file(s). You can specify the downsample resolution by changing the `leaf_size` parameter. +ノードは、`.pcd` ファイルから読み込まれたダウンサンプルされた点群マップを公開します。`leaf_size` パラメーターを変更することで、ダウンサンプルの解像度を指定できます。 -#### Publish metadata of pointcloud map (ROS 2 topic) +#### 点群マップのメタデータを公開(ROS 2トピック) -The node publishes the pointcloud metadata attached with an ID. Metadata is loaded from the `.yaml` file. Please see [the description of `PointCloudMapMetaData.msg`](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#pointcloudmapmetadatamsg) for details. +ノードは、IDが添付された点群メタデータを公開します。メタデータは `.yaml` ファイルから読み込まれます。詳細については、[PointCloudMapMetaData.msg の説明](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#pointcloudmapmetadatamsg) を参照してください。 -#### Send partial pointcloud map (ROS 2 service) +#### 部分的な点群マップを送信(ROS 2サービス) -Here, we assume that the pointcloud maps are divided into grids. +ここでは、点群マップがグリッドに分割されていると仮定します。 -Given a query from a client node, the node sends a set of pointcloud maps that overlaps with the queried area. -Please see [the description of `GetPartialPointCloudMap.srv`](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#getpartialpointcloudmapsrv) for details. +クライアントノードからのクエリを受け取ると、ノードはクエリされた領域と重複する点群マップのセットを送信します。詳細については、[GetPartialPointCloudMap.srv の説明](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#getpartialpointcloudmapsrv) を参照してください。 -#### Send differential pointcloud map (ROS 2 service) +#### 差分点群マップを送信(ROS 2サービス) -Here, we assume that the pointcloud maps are divided into grids. +ここでは、点群マップがグリッドに分割されていると仮定します。 -Given a query and set of map IDs, the node sends a set of pointcloud maps that overlap with the queried area and are not included in the set of map IDs. -Please see [the description of `GetDifferentialPointCloudMap.srv`](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#getdifferentialpointcloudmapsrv) for details. +クエリとマップIDのセットを受け取ると、ノードはクエリされた領域と重複し、マップIDのセットに含まれていない点群マップのセットを送信します。詳細については、[GetDifferentialPointCloudMap.srv の説明](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#getdifferentialpointcloudmapsrv) を参照してください。 -#### Send selected pointcloud map (ROS 2 service) +#### 選択された点群マップを送信(ROS 2サービス) -Here, we assume that the pointcloud maps are divided into grids. +ここでは、点群マップがグリッドに分割されていると仮定します。 -Given IDs query from a client node, the node sends a set of pointcloud maps (each of which attached with unique ID) specified by query. -Please see [the description of `GetSelectedPointCloudMap.srv`](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#getselectedpointcloudmapsrv) for details. +クライアントノードからのクエリを受け取ると、ノードはクエリによって指定された一意のIDが添付された点群マップのセットを送信します。詳細については、[GetSelectedPointCloudMap.srv の説明](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#getselectedpointcloudmapsrv) を参照してください。 -### Parameters +### パラメーター {{ json_to_markdown("map/map_loader/schema/pointcloud_map_loader.schema.json") }} -### Interfaces +### インターフェース -- `output/pointcloud_map` (sensor_msgs/msg/PointCloud2) : Raw pointcloud map -- `output/pointcloud_map_metadata` (autoware_map_msgs/msg/PointCloudMapMetaData) : Metadata of pointcloud map -- `output/debug/downsampled_pointcloud_map` (sensor_msgs/msg/PointCloud2) : Downsampled pointcloud map -- `service/get_partial_pcd_map` (autoware_map_msgs/srv/GetPartialPointCloudMap) : Partial pointcloud map -- `service/get_differential_pcd_map` (autoware_map_msgs/srv/GetDifferentialPointCloudMap) : Differential pointcloud map -- `service/get_selected_pcd_map` (autoware_map_msgs/srv/GetSelectedPointCloudMap) : Selected pointcloud map -- pointcloud map file(s) (.pcd) -- metadata of pointcloud map(s) (.yaml) +- `output/pointcloud_map`(sensor_msgs/msg/PointCloud2):生の点群マップ +- `output/pointcloud_map_metadata`(autoware_map_msgs/msg/PointCloudMapMetaData):点群マップのメタデータ +- `output/debug/downsampled_pointcloud_map`(sensor_msgs/msg/PointCloud2):ダウンサンプルされた点群マップ +- `service/get_partial_pcd_map`(autoware_map_msgs/srv/GetPartialPointCloudMap):部分的な点群マップ +- `service/get_differential_pcd_map`(autoware_map_msgs/srv/GetDifferentialPointCloudMap):差分点群マップ +- `service/get_selected_pcd_map`(autoware_map_msgs/srv/GetSelectedPointCloudMap):選択された点群マップ +- 点群マップファイル(.pcd) +- 点群マップのメタデータ(.yaml) --- ## lanelet2_map_loader -### Feature +### 特徴 -lanelet2_map_loader loads Lanelet2 file and publishes the map data as autoware_map_msgs/LaneletMapBin message. -The node projects lan/lon coordinates into arbitrary coordinates defined in `/map/map_projector_info` from `map_projection_loader`. -Please see [tier4_autoware_msgs/msg/MapProjectorInfo.msg](https://github.com/tier4/tier4_autoware_msgs/blob/tier4/universe/tier4_map_msgs/msg/MapProjectorInfo.msg) for supported projector types. +lanelet2_map_loaderはLanelet2ファイルを読み込み、マップデータをautoware_map_msgs/LaneletMapBinメッセージとして公開します。 +このノードは、`map_projection_loader`からの`/map/map_projector_info`で定義された任意の座標系にlan/lon座標を投影します。 -### How to run +### 実行方法 `ros2 run map_loader lanelet2_map_loader --ros-args -p lanelet2_map_path:=path/to/map.osm` -### Subscribed Topics +### サブスクライブするトピック -- ~input/map_projector_info (tier4_map_msgs/MapProjectorInfo) : Projection type for Autoware +- ~input/map_projector_info (tier4_map_msgs/MapProjectorInfo) : Autowareの射影タイプ -### Published Topics +### パブリッシュするトピック -- ~output/lanelet2_map (autoware_map_msgs/LaneletMapBin) : Binary data of loaded Lanelet2 Map +- ~output/lanelet2_map (autoware_map_msgs/LaneletMapBin) : ロードされたLanelet2マップのバイナリデータ -### Parameters +### パラメーター {{ json_to_markdown("map/map_loader/schema/lanelet2_map_loader.schema.json") }} -`use_waypoints` decides how to handle a centerline. -This flag enables to use the `overwriteLaneletsCenterlineWithWaypoints` function instead of `overwriteLaneletsCenterline`. Please see [the document of the autoware_lanelet2_extension package](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md#centerline) in detail. +`use_waypoints`はセンターラインの処理方法を決定します。 +このフラグは、`overwriteLaneletsCenterline`ではなく`overwriteLaneletsCenterlineWithWaypoints`関数を使用できます。詳細は [autoware_lanelet2_extensionパッケージのドキュメント](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md#centerline) を参照してください。 --- ## lanelet2_map_visualization -### Feature +### 機能 -lanelet2_map_visualization visualizes autoware_map_msgs/LaneletMapBin messages into visualization_msgs/MarkerArray. +lanelet2_map_visualizationは、autoware_map_msgs/LaneletMapBinメッセージをvisualization_msgs/MarkerArrayに可視化します。 -### How to Run +### 実行方法 `ros2 run map_loader lanelet2_map_visualization` -### Subscribed Topics +### サブスクライブするトピック + +- ~input/lanelet2_map (autoware_map_msgs/LaneletMapBin) : Lanelet2マップのバイナリデータ -- ~input/lanelet2_map (autoware_map_msgs/LaneletMapBin) : binary data of Lanelet2 Map +### パブリッシュするトピック -### Published Topics +- ~output/lanelet2_map_marker (visualization_msgs/MarkerArray) : RViz用の可視化メッセージ -- ~output/lanelet2_map_marker (visualization_msgs/MarkerArray) : visualization messages for RViz diff --git a/map/util/lanelet2_map_preprocessor/README.md b/map/util/lanelet2_map_preprocessor/README.md index 49a66973305e5..43dbec43e8cf2 100644 --- a/map/util/lanelet2_map_preprocessor/README.md +++ b/map/util/lanelet2_map_preprocessor/README.md @@ -1 +1,2 @@ -This package has been moved to . +このパッケージは に移動されました。 + diff --git a/perception/autoware_bytetrack/README.md b/perception/autoware_bytetrack/README.md index 90116c4dae7e5..3b5fa5db21381 100644 --- a/perception/autoware_bytetrack/README.md +++ b/perception/autoware_bytetrack/README.md @@ -1,111 +1,232 @@ # bytetrack -## Purpose +## 目的 -The core algorithm, named `ByteTrack`, mainly aims to perform multi-object tracking. -Because the algorithm associates almost every detection box including ones with low detection scores, -the number of false negatives is expected to decrease by using it. +「ByteTrack」というコアアルゴリズムの主たる目的は、複数物体追跡の実行です。 +このアルゴリズムは、低検出スコアの検出ボックスもほぼすべて関連付けるため、それを使用することで、偽陰性の数は減少すると予測されます。 -[demo video](https://github.com/YoshiRi/autoware.universe/assets/3022416/40f4c158-657e-48e1-81c2-8ac39152892d) +[デモビデオ](https://github.com/YoshiRi/autoware.universe/assets/3022416/40f4c158-657e-48e1-81c2-8ac39152892d) -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -### Cite +### 引用元 -- Yifu Zhang, Peize Sun, Yi Jiang, Dongdong Yu, Fucheng Weng, Zehuan Yuan, Ping Luo, Wenyu Liu, and Xinggang Wang, - "ByteTrack: Multi-Object Tracking by Associating Every Detection Box", in the proc. of the ECCV - 2022, [[ref](https://arxiv.org/abs/2110.06864)] -- This package is ported version toward Autoware from [this repository](https://github.com/ifzhang/ByteTrack/tree/main/deploy/TensorRT/cpp) - (The C++ implementation by the ByteTrack's authors) +- Yifu Zhang、Peize Sun、Yi Jiang、Dongdong Yu、Fucheng Weng、Zehuan Yuan、Ping Luo、Wenyu Liu、および Xinggang Wang、 + "ByteTrack: Multi-Object Tracking by Associating Every Detection Box", ECCV 2022 の議事録に掲載、[[参照](https://arxiv.org/abs/2110.06864)] +- このパッケージは、[このリポジトリ](https://github.com/ifzhang/ByteTrack/tree/main/deploy/TensorRT/cpp)から Autoware への移植版です + (ByteTrack の作者による C++ 実装) -### 2d tracking modification from original codes +### オリジナルコードからの 2D 追跡の変更 -The paper just says that the 2d tracking algorithm is a simple Kalman filter. -Original codes use the `top-left-corner` and `aspect ratio` and `size` as the state vector. +論文では、2D 追跡アルゴリズムは単純なカルマンフィルターであるとされているだけです。 +オリジナルコードでは、状態ベクトルとして「左上の角」と「アスペクト比」と「サイズ」を使用しています。 -This is sometimes unstable because the aspect ratio can be changed by the occlusion. -So, we use the `top-left` and `size` as the state vector. +アスペクト比は閉塞によって変化する場合があるため、これは不安定になることがあります。 +そのため、状態ベクトルとして「左上」と「サイズ」を使用します。 -Kalman filter settings can be controlled by the parameters in `config/bytetrack_node.param.yaml`. +カルマンフィルターの設定は、`config/bytetrack_node.param.yaml` のパラメータで制御できます。 -## Inputs / Outputs +## 入出力 ### bytetrack_node -#### Input +#### 入力 -| Name | Type | Description | -| --------- | -------------------------------------------------- | ------------------------------------------- | -| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | The detected objects with 2D bounding boxes | +| 名称 | タイプ | 説明 | +|---|---|---| +| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックスを伴う検出オブジェクト | -#### Output +#### 自動運転ソフトウェアの日本語ドキュメント -| Name | Type | Description | -| ------------------------ | -------------------------------------------------- | --------------------------------------------------------- | -| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | The detected objects with 2D bounding boxes | -| `out/objects/debug/uuid` | `tier4_perception_msgs/DynamicObjectArray` | The universally unique identifiers (UUID) for each object | +**はじめに** + +このドキュメントは、Autoware自動運転ソフトウェアのアーキテクチャ、コンポーネント、およびインターフェースに関する包括的な技術的概要を提供します。 + +**アーキテクチャ** + +Autowareは、モジュール化されたアーキテクチャに基づいており、次の主要なコンポーネントで構成されています。 + +* **Perception:** センサーデータからオブジェクト、道路、およびその他の環境情報を検出し、追跡します。 +* **Planning:** 自車の経路を生成し、周囲の状況に応じて最適化します。 +* **Control:** 生成された経路に従って自車を制御します。 +* **Localization:** 自車位置と姿勢を推定します。 +* **Behavior Planning:** 交通規則や社会的規範に基づいて、自車の挙動を制御します。 +* **Map:** 道路網、交通規制、およびその他の環境情報を提供します。 + +**コンポーネント** + +**Perceptionコンポーネント** + +* カメラ感知 +* LiDAR感知 +* レーダー感知 + +**Planningコンポーネント** + +* Motion Planning +* Trajectory Planning +* Path Tracking + +**Controlコンポーネント** + +* ステアリング制御 +* アクセル/ブレーキ制御 +* 協調運動制御 + +**Localizationコンポーネント** + +* GPS +* IMU +* オドメトリ + +**Behavior Planningコンポーネント** + +* 交通信号制御 +* 歩行者横断制御 +* 車線変更制御 + +**インターフェース** + +Autowareコンポーネントは、ROSインターフェースを使用して相互に通信します。各コンポーネントは、特定のトピックをサブスクライブしてデータを交換します。 + +**開発ツール** + +Autowareは、開発プロセスをサポートするための独自のツールを提供しています。 + +* **Autoware.AI:** Autowareソフトウェアを構築、テスト、展開するための包括的なプラットフォーム。 +* **OpenPlanner:** プランニングアルゴリズムの開発とシミュレーションのためのツール。 +* **CARLA:** 自動運転ソフトウェアのテストのためのシミュレーター。 + +**追加情報** + +Autowareコミュニティフォーラムおよびドキュメントページから、追加のサポートとリソースにアクセスできます。 + +**免責事項** + +このドキュメントに記載されている情報は、Autowareプロジェクトの現在の開発状況に基づいています。将来のリリースで変更される場合があります。 + +| 名称 | タイプ | 説明 | +|---|---|---| +| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックスを含む検出した物体 | +| `out/objects/debug/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各物体のユニバーサル一意識別子(UUID) | ### bytetrack_visualizer -#### Input +#### 入力 + +| 名称 | 型 | 説明 | +|---|---|---| +| `in/image` | `sensor_msgs/Image` または `sensor_msgs/CompressedImage` | オブジェクト検出を実行する入力画像 | +| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2D バウンディングボックスを備えた検出オブジェクト | +| `in/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各オブジェクトの一意の識別子 (UUID) | +| `in/planning_status` | PlanningStatus | Planningモジュールによって計算された、自車位置と周囲の車両の状況 | +| `out/path` | `tier4_planning_msgs/Path` | Planningモジュールによって生成された予定経路 | +| `out/predicted_objects` | `tier4_planning_msgs/PredictedObjects` | 他の車両の予測軌跡 | +| `out/optimized_path` | `tier4_planning_msgs/OptimizedPath` | `post resampling` と走行性改善を適用した最適化された予定経路 | +| `out/published_objects` | `tier4_perception_msgs/PublishedObject` | Autowareが一般的なトピックに公開するオブジェクト | +| `in/odom` | `nav_msgs/Odometry` | 自車位置と速度 | +| `in/detected_lane` | `DetectedLaneArray` | 認識された車線 | +| `out/optimized_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「最適化された」もの | +| `out/regular_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「一般」のもの | +| `out/emergency_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「緊急」のもの | +| `out/velocity_diff` | `geometry_msgs/Twist` | `in/odom` と `optimized_pose` の速度の差 | +| `out/acceleration_diff` | `geometry_msgs/Twist` | `in/odom` と `optimized_pose` の加速度の差 | +| `out/velocity_diff_with_filtered_brake` | `geometry_msgs/Twist` | フィルタリングされたブレーキをかけた `velocity_diff` | +| `out/acceleration_diff_with_filtered_brake` | `geometry_msgs/Twist` | フィルタリングされたブレーキをかけた `acceleration_diff` | +| `out/velocity_diff_with_filtered_gear` | `geometry_msgs/Twist` | フィルタリングされたギアをかけた `velocity_diff` | +| `out/acceleration_diff_with_filtered_gear` | `geometry_msgs/Twist` | フィルタリングされたギアをかけた `acceleration_diff` | + +#### 出力 + +## 自動運転ソフトウェアのドキュメント + +### プランニングコンポーネントにおける計画の追従 + +### 目的 + +このドキュメントでは、Autowareのプランニングコンポーネントにおける計画の追従に関する技術的詳細について説明します。 + +### 概要 + +プランニングコンポーネントは、自車位置と目標位置の差に基づいて、車両の経路を生成します。この経路は、軌道追従コンポーネントによって追従されます。 + +### 追従アルゴリズム + +プランニングコンポーネントにおける追従アルゴリズムは、次のステップで構成されています。 + +1. **経路の再サンプリング**:計画された経路を一定の間隔で再サンプリングして、車両の現在の位置と方向に合わせます。 +2. **前方検索**:再サンプリングされた経路を前方から後方に検索し、現在の位置から最も近い点を見つけます。 +3. **横方向の逸脱量の計算**:現在の位置と再サンプリングされた経路上の最も近い点との横方向の距離を計算します。 +4. **縦方向の逸脱量の計算**:現在の位置と再サンプリングされた経路上の最も近い点との縦方向の距離を計算します。 +5. **追従制御量**:横方向および縦方向の逸脱量に基づいて、軌道追従コンポーネントに追従制御量を生成します。 -| Name | Type | Description | -| ---------- | ---------------------------------------------------- | --------------------------------------------------------- | -| `in/image` | `sensor_msgs/Image` or `sensor_msgs/CompressedImage` | The input image on which object detection is performed | -| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | The detected objects with 2D bounding boxes | -| `in/uuid` | `tier4_perception_msgs/DynamicObjectArray` | The universally unique identifiers (UUID) for each object | +### 追従制御量 -#### Output +追従制御量は、次の形式です。 -| Name | Type | Description | -| ----------- | ------------------- | ----------------------------------------------------------------- | -| `out/image` | `sensor_msgs/Image` | The image that detection bounding boxes and their UUIDs are drawn | +* 横方向速度逸脱量(lateral velocity error) +* 横方向加速度逸脱量(lateral acceleration error) +* 縦方向速度逸脱量(longitudinal velocity error) +* 縦方向加速度逸脱量(longitudinal acceleration error) -## Parameters +### パラメータ + +追従アルゴリズムのパラメータは、次のとおりです。 + +* 再サンプリング間隔(resampling interval) +* 前方検索距離(lookahead distance) + +### 注意事項 + +次の点に注意してください。 + +* 追従アルゴリズムは、 planificatorによって生成された経路に依存しています。 +* 追従アルゴリズムは、車両の動的特性とは無関係です。 +* 追従アルゴリズムは、リアルタイムで動作するように設計されています。 + +| 名前 | タイプ | 説明 | +| ----------- | ------------------- | ------------------------------------------------------------------- | +| `out/image` | `sensor_msgs/Image` | 検出された境界ボックスとそのUUIDが描画された画像 | + +## パラメータ ### bytetrack_node -| Name | Type | Default Value | Description | -| --------------------- | ---- | ------------- | -------------------------------------------------------- | -| `track_buffer_length` | int | 30 | The frame count that a tracklet is considered to be lost | +#### Planningモジュール用のパラメータ + +| 名前 | タイプ | デフォルト値 | 説明 | +| --------------------- | ---- | ------------- | ------------------------------------------- | +| `track_buffer_length` | int | 30 | トラッキングが失われたと見なされるフレーム数 | ### bytetrack_visualizer -| Name | Type | Default Value | Description | -| --------- | ---- | ------------- | --------------------------------------------------------------------------------------------- | -| `use_raw` | bool | false | The flag for the node to switch `sensor_msgs/Image` or `sensor_msgs/CompressedImage` as input | +※: このドキュメントはAutoware.Autoの開発ドキュメントの一部です。 + -## Assumptions/Known limits +| 名称 | 種類 | デフォルト値 | 説明 | +| --------- | ---- | ------------- | ---------------------------------------------------------------------------------------------- | +| `use_raw` | bool | false | ノードが `sensor_msgs/Image` または `sensor_msgs/CompressedImage` を入力として切り替える場合のフラグ | -## Reference repositories +## 想定/既知の制限 + +## 参考リポジトリ - -## License +## ライセンス -The codes under the `lib` directory are copied from [the original codes](https://github.com/ifzhang/ByteTrack/tree/72ca8b45d36caf5a39e949c6aa815d9abffd1ab5/deploy/TensorRT/cpp) and modified. -The original codes belong to the MIT license stated as follows, while this ported packages are provided with Apache License 2.0: +`lib` ディレクトリ下のコードは [元のコード](https://github.com/ifzhang/ByteTrack/tree/72ca8b45d36caf5a39e949c6aa815d9abffd1ab5/deploy/TensorRT/cpp) からコピーして修正しています。 +元のコードは、以下のとおり記載されている MIT ライセンスに則り、この移植パッケージは Apache License 2.0 にて提供されます。 > MIT License > > Copyright (c) 2021 Yifu Zhang > -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: +> これにより、本ソフトウェアおよび関連するドキュメントファイル(「ソフトウェア」)の複製物を取得するすべての人に無償で許可が与えられます。制限なくソフトウェアを使用、複製、変更、マージ、公開、配布、サブライセンス付与、および/または販売し、また、ソフトウェアが提供される人にサブライセンス付与を行う権利を含むがこれに限定されません。ただし、次の条件に従うものとします。 > -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. +> 上記の著作権表示およびこの通知は、ソフトウェアのすべての複製または重要な部分に含まれる必要があります。 > -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. +> ソフトウェアは明示的または黙示的に保証されることなく、「現状のまま」提供されます。商品性、特定の目的への適合性、非侵害の保証を含むがこれらに限定されない保証は含まれます。いかなる場合も、著作権者または権利者は、契約、不法行為、またはその他の行為に関連して、またはその結果、ソフトウェアまたはソフトウェアの使用または他の取り扱いから生じる請求、損害、またはその他の責任について責任を負いません。 + diff --git a/perception/autoware_cluster_merger/README.md b/perception/autoware_cluster_merger/README.md index 771e6eb0342f0..7ef6415ad6a96 100644 --- a/perception/autoware_cluster_merger/README.md +++ b/perception/autoware_cluster_merger/README.md @@ -1,72 +1,195 @@ -# autoware cluster merger +# autoware クラスターマージャー -## Purpose +## 目的 -autoware_cluster_merger is a package for merging pointcloud clusters as detected objects with feature type. +autoware_cluster_mergerは、特徴種別ごとにより検出された対象をポイントクラスタとしてマージするためのパッケージです。 -## Inner-working / Algorithms +## 内部動作/アルゴリズム -The clusters of merged topics are simply concatenated from clusters of input topics. +マージされたトピックのクラスタは、入力トピックのクラスタから単純に連結されます。 -## Input / Output +## 入出力 -### Input +### 入力 -| Name | Type | Description | +| 名称 | タイプ | 説明 | | ---------------- | -------------------------------------------------------- | ------------------- | -| `input/cluster0` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | pointcloud clusters | -| `input/cluster1` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | pointcloud clusters | +| `input/cluster0` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | pointcloudクラスタ | +| `input/cluster1` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | pointcloudクラスタ | -### Output +### 出力 -| Name | Type | Description | -| ----------------- | -------------------------------------------------------- | --------------- | -| `output/clusters` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | merged clusters | +**自律運転ソフトウェア** -## Parameters +**Autoware** -| Name | Type | Description | Default value | +**Planning**モジュールは、自律運転車両の安全で効率的な経路と速度計画を担当します。**Planning**には、**BEV Planner**、**Maneuver Planner**、**Path Planner**の3つの主要コンポーネントがあります。 + +**BEV Planner** + +* 障害物検出および分類 +* 静的障害物と動的障害物のトラッキング +* **Planning**領域内のフリースペースの推定 + +**Maneuver Planner** + +* 自車位置を考慮した**Planning**領域内のマニューバの生成 +* 交通規則と安全要件を遵守するマニューバの選定 +* 経路候補の生成 + +**Path Planner** + +* マニューバから最適経路を生成 +* 経路の滑らかさと安全性を確保する最適化 +* 車両の動的制限を考慮した経路の生成 + +**追従モード** + +追従モードでは、**Planning**モジュールは前走車を監視し、次のタスクを実行します。 + +* 前走車の速度と相対位置の追跡 +* 安全な車間距離の維持 +* `post resampling`を使用して経路を更新し、前走車の挙動の変化に対応 + +**経路計画モード** + +経路計画モードでは、**Planning**モジュールは、指定された目的地までの経路を生成します。このモードでは、次のタスクが実行されます。 + +* ナビゲーションデータからの経路候補の生成 +* 障害物や交通規制を考慮した経路の選択 +* 衝突の回避と車両の安全を確保する経路の最適化 + +**エラー処理** + +**Planning**モジュールは、さまざまなエラーを検出して処理します。これらのエラーには以下が含まれます。 + +* 障害物との衝突 +* velocity逸脱量 +* acceleration逸脱量 +* など + +| 名前 | タイプ | 説明 | +| ---------------- | ------------------------------------------------------- | ------------ | +| `output/clusters` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | マージされたクラスタ | + +## パラメータ + +| 名称 | タイプ | 説明 | デフォルト値 | | :---------------- | :----- | :----------------------------------- | :------------ | -| `output_frame_id` | string | The header frame_id of output topic. | base_link | +| `output_frame_id` | 文字列 | 出力トピックのheader frame_id。 | **base_link** | + + -## Assumptions / Known limits +## (Optional) Tuning - -## (Optional) Error detection and handling +## (Optional) Collaborators - -## (Optional) Performance characterization +## (Optional) TODOs - - This algorithm is O(N). +## (Optional) Contributing - ### Processing time + + +## (Optional) Implementation details + + + +## (Optional) Dependencies + + -## (Optional) References/External links +## (Optional) Releases - + +------------------- + +## 仮定 / 既知の制限 + + + +## (任意) エラーの検出と処理 + + + +## (任意) パフォーマンスの特性評価 + + + +## (任意) レファレンス/外部リンク + + -## (Optional) Future extensions / Unimplemented parts +## (任意) 将来の拡張機能 / 未実装部分 + diff --git a/perception/autoware_compare_map_segmentation/README.md b/perception/autoware_compare_map_segmentation/README.md index e775af30239bb..958aa002e5702 100644 --- a/perception/autoware_compare_map_segmentation/README.md +++ b/perception/autoware_compare_map_segmentation/README.md @@ -1,96 +1,246 @@ # autoware_compare_map_segmentation -## Purpose +## 目的 -The `autoware_compare_map_segmentation` is a package that filters the ground points from the input pointcloud by using map info (e.g. pcd, elevation map or split map pointcloud from map_loader interface). +`autoware_compare_map_segmentation` は、マップ情報(例:map_loaderインターフェイスからのpcd、標高マップ、または分割マップのポイントクラウド)を使用して入力ポイントクラウドから地上の点をフィルタリングするパッケージです。 -## Inner-workings / Algorithms +## 動作/アルゴリズム -### Compare Elevation Map Filter +### 標高マップ比較フィルタ -Compare the z of the input points with the value of elevation_map. The height difference is calculated by the binary integration of neighboring cells. Remove points whose height difference is below the `height_diff_thresh`. +入力点のzを標高マップの値と比較します。高さの差は、隣接するセルのバイナリ統合によって計算されます。`height_diff_thresh`を下回る高さ差を持つ点を削除します。

- +

-### Distance Based Compare Map Filter +### 距離ベースの比較マップフィルタ -This filter compares the input pointcloud with the map pointcloud using the `nearestKSearch` function of `kdtree` and removes points that are close to the map point cloud. The map pointcloud can be loaded statically at once at the beginning or dynamically as the vehicle moves. +このフィルタは、入力ポイントクラウドを`kdtree`の`nearestKSearch`関数を使用してマップポイントクラウドと比較し、マップポイントクラウドに近い点を削除します。マップポイントクラウドは、最初の時点で静的に一度にロードすることも、車両の走行中に動的にロードすることもできます。 -### Voxel Based Approximate Compare Map Filter +### ボクセルベース 近似比較マップフィルター -The filter loads the map point cloud, which can be loaded statically at the beginning or dynamically during vehicle movement, and creates a voxel grid of the map point cloud. The filter uses the getCentroidIndexAt function in combination with the getGridCoordinates function from the VoxelGrid class to find input points that are inside the voxel grid and removes them. +このフィルターはマップ点群を読み込みます。マップ点群は、最初に静的に読み込むこともできますし、車両の移動中に動的に読み込むこともできます。そして、マップ点群のボクセルグリッドを作成します。このフィルターは、VoxelGridクラスのgetCentroidIndexAt関数とgetGridCoordinates関数を組み合わせて使用し、ボクセルグリッド内にある入力点を見つけて削除します。 -### Voxel Based Compare Map Filter +### ボクセルベース 比較マップフィルター -The filter loads the map pointcloud (static loading whole map at once at beginning or dynamic loading during vehicle moving) and utilizes VoxelGrid to downsample map pointcloud. +このフィルターはマップ点群を読み込みます(最初に全マップを一度に静的に読み込むか、車両の移動中に動的に読み込みます)。そして、マップ点群をダウンサンプリングするためにVoxelGridを利用します。 -For each point of input pointcloud, the filter use `getCentroidIndexAt` combine with `getGridCoordinates` function from VoxelGrid class to check if the downsampled map point existing surrounding input points. Remove the input point which has downsampled map point in voxels containing or being close to the point. +入力点群の各点について、このフィルターはVoxelGridクラスのgetCentroidIndexAt関数とgetGridCoordinates関数の組み合わせを使用して、ダウンサンプリングされたマップの点が、入力点の周りにあるかどうかを確認します。その点を含むまたはその点の近くにダウンサンプリングされたマップの点がある入力点は削除します。 -### Voxel Distance based Compare Map Filter +### ボクセル距離ベース 比較マップフィルター -This filter is a combination of the distance_based_compare_map_filter and voxel_based_approximate_compare_map_filter. The filter loads the map point cloud, which can be loaded statically at the beginning or dynamically during vehicle movement, and creates a voxel grid and a k-d tree of the map point cloud. The filter uses the getCentroidIndexAt function in combination with the getGridCoordinates function from the VoxelGrid class to find input points that are inside the voxel grid and removes them. For points that do not belong to any voxel grid, they are compared again with the map point cloud using the radiusSearch function of the k-d tree and are removed if they are close enough to the map. +このフィルターは、distance_based_compare_map_filterとvoxel_based_approximate_compare_map_filterを組み合わせたものです。このフィルターはマップ点群を読み込みます。マップ点群は、最初に静的に読み込むこともできますし、車両の移動中に動的に読み込むこともできます。そして、マップ点群のボクセルグリッドとk-d木を作成します。このフィルターは、VoxelGridクラスのgetCentroidIndexAt関数とgetGridCoordinates関数を組み合わせて使用し、ボクセルグリッド内にある入力点を見つけて削除します。ボクセルグリッドに属していない点は、k-d木の中心探索のradiusSearch関数を使用してマップの点群と再び比較され、マップに十分近い場合は削除されます。 -## Inputs / Outputs +## 入力/出力 -### Compare Elevation Map Filter +### 標高比較マップフィルター -#### Input +#### 入力 -| Name | Type | Description | -| ----------------------- | ------------------------------- | ---------------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | reference points | -| `~/input/elevation_map` | `grid_map::msg::GridMap` | elevation map | +| 名前 | タイプ | 説明 | +| ----------------------- | ------------------------------- | ---------- | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点 | +| `~/input/elevation_map` | `grid_map::msg::GridMap` | 標高マップ | -#### Output +#### 出力 -| Name | Type | Description | +## AutowareにおけるPIDプランニング + +### 概要 + +このドキュメントは、AutowareにおけるPIDプランニングコンポーネント/モジュールについて説明します。このコンポーネントは、速度プロファイル生成と縦断/横断制御を担当します。 + +### アーキテクチャ + +PIDプランニングコンポーネントは、以下で構成されています。 + +- **速度プランニング:** 目標速度プロファイルを生成します。 +- **縦断制御:** 速度プロファイルを追従しながら加速度を制御します。 +- **横断制御:** 目標速度および加速度を維持しながらステアリングホイールを制御します。 + +### 入力 + +- 自車位置 +- 目標経路 +- 環境認識データ + +### 出力 + +- 目標速度プロファイル +- 加速度制御コマンド +- ステアリング制御コマンド + +### PIDプランニングの仕組み + +PIDプランニングは、目標速度プロファイルと、自車位置と目標経路の誤差に基づくフィードバック制御を使用して速度と加速度を制御します。 + +**速度プランニング:** + +- 目標経路上のジオレファレンスされた速度制限と湾曲半径を使用して目標速度プロファイルを生成します。 +- 加速度と速度逸脱量を最小化するように速度プロファイルを調整します。 + +**縦断制御:** + +- PIDコントローラを使用して、目標速度プロファイルを追従するように加速度を制御します。 +- 加速度逸脱量と目標速度との誤差をフィードバックとして使用します。 + +**横断制御:** + +- PIDコントローラを使用して、目標速度と加速度を維持するようにステアリングホイールを制御します。 +- 横方向誤差と目標横断点との誤差をフィードバックとして使用します。 + +### パラメータの調整 + +PIDプランニングの性能は、以下を含むパラメータによって調整できます。 + +- PIDゲイン +- 安全マージン +- `post resampling`の周波数 + +これらのパラメータは、車両のダイナミクスとアプリケーションの要件に応じて調整する必要があります。 + +| 名前 | 種別 | 説明 | | ----------------- | ------------------------------- | --------------- | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | filtered points | +| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリングされた点 群 | -#### Parameters +#### パラメーター -| Name | Type | Description | Default value | +| 名前 | タイプ | 説明 | デフォルト値 | | :------------------- | :----- | :------------------------------------------------------------------------------ | :------------ | -| `map_layer_name` | string | elevation map layer name | elevation | -| `map_frame` | float | frame_id of the map that is temporarily used before elevation_map is subscribed | map | -| `height_diff_thresh` | float | Remove points whose height difference is below this value [m] | 0.15 | +| `map_layer_name` | 文字列 | 標高マップレイヤー名 | elevation | +| `map_frame` | 浮動小数 | 標高マップサブスクライブ前のマップのframe_id | マップ | +| `height_diff_thresh` | 浮動小数 | この値より標高差が小さい点は削除 [m] | 0.15 | -### Other Filters +### 他のフィルタ -#### Input +#### 入力 -| Name | Type | Description | +| 名前 | タイプ | 説明 | | ------------------------------- | ------------------------------- | ------------------------------------------------------ | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | reference points | -| `~/input/map` | `sensor_msgs::msg::PointCloud2` | map (in case static map loading) | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | current ego-vehicle pose (in case dynamic map loading) | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | リファレンスポイント | +| `~/input/map` | `sensor_msgs::msg::PointCloud2` | マップ(静的マップをロードする場合) | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 自車位置(動的マップをロードする場合) | -#### Output +#### 出力 -| Name | Type | Description | -| ----------------- | ------------------------------- | --------------- | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | filtered points | +Autowareによる自動運転ソフトウェア文書の日本語訳 + +**セーフティコンポーネント** + +**Overview** +本セーフティコンポーネントは、Autowareの自動運転システムにおける安全上の機能を提供します。 +このコンポーネントは、リアルタイムで車両の動作を監視し、潜在的な危険を特定します。潜在的な危険が特定された場合、本コンポーネントはシステムの他のコンポーネントに警告を発し、衝突回避などの適切な対策を講じます。 + +Autowareのセーフティコンポーネントは、以下のサブコンポーネントで構成されています。 + +* **モーションプランニング** +* **オブジェクト認識** +* **センサフュージョン** + +**モーションプランニング** +モーションプランニングサブコンポーネントは、車両の移動経路を生成します。 +この経路は、以下の情報に基づいて生成されます。 + +* **自車位置** +* **目標位置** +* **車両の周囲環境(オブジェクト認識によって検出)** + +モーションプランニングサブコンポーネントは、以下のアルゴリズムを使用して経路を生成します。 + +* **DWA(動的ウィンドウアプローチ)** +* **EB(弾性バンドメソッド)** +* **PRM(確率的ロードマップ法)** + +**オブジェクト認識** +オブジェクト認識サブコンポーネントは、車両の周囲環境内のオブジェクトを検出します。 +このサブコンポーネントは、以下のセンサからのデータを使用してオブジェクトを検出します。 + +* **LiDAR** +* **カメラ** +* **レーダー** + +オブジェクト認識サブコンポーネントは、以下のアルゴリズムを使用してオブジェクトを検出します。 + +* **PCL(点群ライブラリ)** +* **オープンCV** +* **深度学習** + +**センサフュージョン** +センサフュージョンサブコンポーネントは、さまざまなセンサからのデータを統合します。統合されたデータは、車両の周囲環境のより正確で完全な表現を提供します。センサフュージョンサブコンポーネントは、以下のアルゴリズムを使用してデータを統合します。 + +* **カルマンフィルタ** +* **粒子フィルタ** +* **グラフ最適化** + +**セーフティチェック** +セーフティチェックサブコンポーネントは、車両の動作をリアルタイムで監視します。 +このサブコンポーネントは、以下のパラメータを監視します。 + +* **速度** +* **加速度** +* **ヨー角速度** +* **制動圧** + +セーフティチェックサブコンポーネントは、以下の基準に基づいて潜在的な危険を特定します。 + +* **安全限界の逸脱** +* **異常動作** +* **予想外のイベント** + +**応答アクション** +潜在的な危険が特定されると、セーフティチェックサブコンポーネントは他のコンポーネントに警告を発し、以下の応答アクションを実行します。 + +* **速度の低下** +* **方向転換** +* **制動** +* **衝突回避** + +**インターフェース** + +セーフティコンポーネントは、以下のインターフェースを他のコンポーネントと持っています。 + +* **Planningコンポーネント** +* **コントロールコンポーネント** +* **ヒューマンマシンインターフェースコンポーネント** + +**パフォーマンス** + +セーフティコンポーネントは、他のコンポーネントを妨げずにリアルタイムで動作するように設計されています。 +このコンポーネントは、以下を含むさまざまな条件下でテストされており、確実にその機能を実行することが証明されています。 + +* **さまざまな道路状況** +* **さまざまな気象条件** +* **さまざまな交通状況** + +**結論** + +Autowareのセーフティコンポーネントは、自動運転システムにおける安全上の要件を満たすために不可欠です。 +このコンポーネントは、リアルタイムで車両の動作を監視し、潜在的な危険を特定し、衝突回避などの適切な対策を講じます。 + +| 名前 | タイプ | 説明 | +| -------------------------- | --------------------------------------------------- | -------------------------------------- | +| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタされたポイント | + +#### パラメータ -#### Parameters +| 名称 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `use_dynamic_map_loading` | ブーリアン | マップ読み込みモードの選択、`true` は動的マップ読み込み、`false` は静的マップ読み込み、分割なしのマップポイントクラウドの場合に推奨 | true | +| `distance_threshold` | 浮動小数点数 | マップポイントと入力ポイントを比較するしきい値距離 [m] | 0.5 | +| `map_update_distance_threshold` | 浮動小数点数 | マップの更新が必要な場合の車両移動距離のしきい値(動的マップ読み込み時)[m] | 10.0 | +| `map_loader_radius` | 浮動小数点数 | 読み込む必要があるマップの半径(動的マップ読み込み時)[m] | 150.0 | +| `timer_interval_ms` | 整数 | マップの更新が必要かどうかを確認するためのタイマー間隔(動的マップ読み込み時)[ms] | 100 | +| `publish_debug_pcd` | ブーリアン | デバッグ用に`debug/downsampled_map/pointcloud`にボクセル化された更新マップをパブリッシュするかどうか。追加の計算コストが発生する可能性があります。 | false | +| `downsize_ratio_z_axis` | 倍数 | z軸の`voxel_leaf_size`と近傍点の距離しきい値を減らすための正の倍率 | 0.5 | -| Name | Type | Description | Default value | -| :------------------------------ | :----- | :-------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `use_dynamic_map_loading` | bool | map loading mode selection, `true` for dynamic map loading, `false` for static map loading, recommended for no-split map pointcloud | true | -| `distance_threshold` | float | Threshold distance to compare input points with map points [m] | 0.5 | -| `map_update_distance_threshold` | float | Threshold of vehicle movement distance when map update is necessary (in dynamic map loading) [m] | 10.0 | -| `map_loader_radius` | float | Radius of map need to be loaded (in dynamic map loading) [m] | 150.0 | -| `timer_interval_ms` | int | Timer interval to check if the map update is necessary (in dynamic map loading) [ms] | 100 | -| `publish_debug_pcd` | bool | Enable to publish voxelized updated map in `debug/downsampled_map/pointcloud` for debugging. It might cause additional computation cost | false | -| `downsize_ratio_z_axis` | double | Positive ratio to reduce voxel_leaf_size and neighbor point distance threshold in z axis | 0.5 | +## 前提条件 / 制限事項 -## Assumptions / Known limits +## (任意)エラー検出と処理 -## (Optional) Error detection and handling +## (任意)性能特性 -## (Optional) Performance characterization +## (任意)外部リンク/外部リファレンス -## (Optional) References/External links +## (任意)将来の拡張 / 未実装部分 -## (Optional) Future extensions / Unimplemented parts diff --git a/perception/autoware_crosswalk_traffic_light_estimator/README.md b/perception/autoware_crosswalk_traffic_light_estimator/README.md index b14fefbd43beb..37ec6109a9761 100644 --- a/perception/autoware_crosswalk_traffic_light_estimator/README.md +++ b/perception/autoware_crosswalk_traffic_light_estimator/README.md @@ -1,33 +1,145 @@ -# crosswalk_traffic_light_estimator +## 交差点信号推定モジュール -## Purpose +## 目的 -`crosswalk_traffic_light_estimator` is a module that estimates pedestrian traffic signals from HDMap and detected vehicle traffic signals. +`crosswalk_traffic_light_estimator`モジュールは、HDマップと検出された車両信号から歩行者信号を推定します。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------------------------------------ | ------------------------------------------------ | ------------------ | +| 名前 | 型 | 説明 | +| ------------------------------------ | ------------------------------------------------- | ------------------ | | `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | | `~/input/route` | `autoware_planning_msgs::msg::LaneletRoute` | route | -| `~/input/classified/traffic_signals` | `tier4_perception_msgs::msg::TrafficSignalArray` | classified signals | +| `~/input/classified/traffic_signals` | `tier4_perception_msgs::msg::TrafficSignalArray` | 交通信号 | -### Output +### 出力 -| Name | Type | Description | -| -------------------------- | ------------------------------------------------------- | --------------------------------------------------------- | -| `~/output/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | output that contains estimated pedestrian traffic signals | +**自動運転ソフトウェア ドキュメント** -## Parameters +**Planning コンポーネント** -| Name | Type | Description | Default value | -| :---------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `use_last_detect_color` | `bool` | If this parameter is `true`, this module estimates pedestrian's traffic signal as RED not only when vehicle's traffic signal is detected as GREEN/AMBER but also when detection results change GREEN/AMBER to UNKNOWN. (If detection results change RED or AMBER to UNKNOWN, this module estimates pedestrian's traffic signal as UNKNOWN.) If this parameter is `false`, this module use only latest detection results for estimation. (Only when the detection result is GREEN/AMBER, this module estimates pedestrian's traffic signal as RED.) | `true` | -| `last_detect_color_hold_time` | `double` | The time threshold to hold for last detect color. | `2.0` | +**目的** + +Planning コンポーネントは、周囲環境からのセンサーデータを使用して、自車位置を推定し、安全かつ効率的な経路を計画します。 + +**機能** + +* **周囲環境認識:** レーダー、カメラ、LiDAR データを使用して、車両、歩行者、障害物を検出します。 +* **自車位置推定:** GPS、IMU、輪速センサーを使用して、自車位置と姿勢を推定します。 +* **経路計画:** 安全で効率的な経路を生成します。 +* **制御指令生成:** 制御システムに速度、加速度、ステアリング角の指令を出力します。 + +**アルゴリズム** + +* **'post resampling'` データ処理を使用して、センサーデータを適合させます。 +* **動的計画法**を使用して、最適な経路を検索します。 +* **モデル予測制御**を使用して、制御指令を生成します。 + +**安全機能** + +* **衝突検出:** 衝突の可能性を検出して、緊急停止を実行します。 +* **加速度と速度逸脱量監視:** 制御指令が安全な範囲内にあることを確認します。 +* **センサー障害監視:** センサーの障害を検出して、安全に停止または駐車します。 + +**Autoware との統合** + +この Planning コンポーネントは、Autoware プラットフォームと統合されています。Autoware と連携して、周囲環境の認識、自車位置の推定、経路計画を実行します。 + +| 名称 | タイプ | 説明 | +| -------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------- | +| `~/output/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 推定歩行者用信号機を含む出力 | + +## パラメータ + +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `use_last_detect_color` | `bool` | このパラメータが `true` の場合、このモジュールは、車両の信号が GREEN/AMBER として検出されるだけでなく、検出結果が GREEN/AMBER から UNKNOWN に変わっても歩行者の信号を RED として推定します。(検出結果が RED または AMBER を UNKNOWN に変えた場合、このモジュールは歩行者の信号を UNKNOWN として推定します)。このパラメータが `false` の場合、このモジュールは推定に最新の検出結果のみを使用します。(検出結果が GREEN/AMBER の場合のみ、このモジュールは歩行者の信号を RED として推定します。) | `true` | +| `last_detect_color_hold_time` | `double` | 検出された最後の色の保持時間のしきい値。 | `2.0` | + +## 内部構造 / アルゴリズム + +--- + +**Planningコンポーネント** + +* **カーパスジェネレータ:** + * 自己位置、障害物、および経路情報の観測値を使用して、経路を生成します。 + +* **経路評価器:** + * 複数の経路の安全性、快適性、および実現可能性を評価します。 + +* **経路プランナー:** + * 評価された経路から最適な経路を選択します。 + +* **操舵制御器:** + * 自己位置と目標経路に応じて、操舵角を生成します。 + +* **速度制御器:** + * 加速度と速度を制御し、快適性と安全性を確保します。 + +* **安全監視器:** + * 危険な状況を監視し、必要に応じて緊急ブレーキや緊急回避操作をトリガーします。 + +**センサーモジュール** + +* **ライダー:** + * 車両周辺の3D環境をマッピングします。 + +* **カメラ:** + * 障害物検出、道路認識、および標識認識に使用されます。 + +* **慣性測定装置 (IMU):** + * 車両の加速度と角速度情報を提供します。 + +* **GNSS 受信機:** + * 車両の絶対位置と姿勢情報を提供します。 + +**ロカリゼーションモジュール** + +* **自己位置推定器:** + * センサーデータを統合して、自己位置を推定します。 + +* **マッピングモジュール:** + * 環境認識に使用される高精細マップを生成します。 + +**その他のモジュール** + +* **ヒューマンマシンインターフェイス (HMI):** + * ユーザーと車両間のインタラクションを可能にします。 + +* **通信モジュール:** + * 他車両やインフラストラクチャとの通信を処理します。 + +**主パーセプションパイプライン** + +1. **センサーデータ取得:** センサーから生のデータを取得します。 +2. **前処理:** ノイズ除去、歪み補正など、データの前処理を行います。 +3. **3D マッピング:** ライダーとカメラデータを使用して、車両周辺の3D 環境を生成します。 +4. **障害物検出:** 3D マップから障害物を識別します。 +5. **自己位置推定:** IMU、GNSS、および障害物検出データを使用して、自己位置を推定します。 +6. **経路計画:** 障害物検出と自己位置推定結果を使用して、経路を計画します。 +7. **操舵制御:** 経路計画の結果を使用して、操舵角を生成します。 +8. **速度制御:** 加速度と速度を調整して、計画された経路をたどります。 +9. **安全監視:** 危険な状況を監視し、必要に応じて緊急ブレーキや回避操作をトリガーします。 + +**主要な課題** + +* **リアルタイム処理:** センサーデータの処理と制御出力を生成するために、低遅延で高性能な処理が必要です。 +* **センシングとマッピングの不確実性:** センサーの制限や環境のダイナミックにより、センシングとマッピング情報に不確実性が生じます。 +* **経路計画の最適化:** 交通状況、障害物、および車両の動力学を考慮した、効率的で安全な経路を計画する必要があります。 +* **制御の安定性:** 予測不可能な障害物や滑りやすい路面での車両の安定性を確保する必要があります。 +* **安全性の検証:** 自動運転システムの安全性と信頼性を証明するための厳密な検証と検証が必要です。 + +**Autoware の設計原則** + +* **モジュール性:** システムを自律的かつ再利用可能なコンポーネントに分解します。 +* **拡張性:** オープンソースのソフトウェアアーキテクチャにより、新しい機能やアルゴリズムの統合が容易になります。 +* **リアルタイム性:** 低遅延の処理を可能にする、最適化されたソフトウェア実装を使用します。 +* **安全性:** 冗長性、フォールトトレランス、および安全監視メカニズムを備えて、安全な運転を確保します。 +* **効率性:** コンピューティングとエネルギーリソースを効率的に使用します。 -## Inner-workings / Algorithms ```plantuml @@ -56,12 +168,12 @@ end ``` -If traffic between pedestrians and vehicles is controlled by traffic signals, the crosswalk traffic signal maybe **RED** in order to prevent pedestrian from crossing when the following conditions are satisfied. +歩行者と車両間の交通が信号機によって制御されている場合、歩行者が横断しないよう、歩行者信号を **RED** にする場合があります。以下の条件を満たしているとき: ### Situation1 -- crosswalk conflicts **STRAIGHT** lanelet -- the lanelet refers **GREEN** or **AMBER** traffic signal (The following pictures show only **GREEN** case) +- 横断歩道が **STRAIGHT** レーンレットと競合する +- レーンレットが **GREEN** または **AMBER** 信号を参照する (次の写真は **GREEN** の場合のみ)
@@ -72,13 +184,14 @@ If traffic between pedestrians and vehicles is controlled by traffic signals, th ### Situation2 -- crosswalk conflicts different turn direction lanelets (STRAIGHT and LEFT, LEFT and RIGHT, RIGHT and STRAIGHT) -- the lanelets refer **GREEN** or **AMBER** traffic signal (The following pictures show only **GREEN** case) +- 横断歩道が異なるターン方向のレーンレット (STRAIGHT と LEFT、LEFT と RIGHT、RIGHT と STRAIGHT) と競合する +- レーンレットが **GREEN** または **AMBER** 信号を参照する (次の写真は **GREEN** の場合のみ)
-## Assumptions / Known limits +## 仮定 / 既知の制限事項 + +## 将来の拡張機能 / 未実装部分 -## Future extensions / Unimplemented parts diff --git a/perception/autoware_detected_object_feature_remover/README.md b/perception/autoware_detected_object_feature_remover/README.md index 2c4b75b71abb4..45906147b7fb7 100644 --- a/perception/autoware_detected_object_feature_remover/README.md +++ b/perception/autoware_detected_object_feature_remover/README.md @@ -1,27 +1,152 @@ -# autoware_detected_object_feature_remover +## autoware_detected_object_feature_remover -## Purpose +## 目的 -The `autoware_detected_object_feature_remover` is a package to convert topic-type from `DetectedObjectWithFeatureArray` to `DetectedObjects`. +`autoware_detected_object_feature_remover` パッケージは、トピックの型を `DetectedObjectWithFeatureArray` から `DetectedObjects` に変換するためのものです。 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -## Inputs / Outputs +## 入出力 -### Input +### 入力 +- `/detected_objects_with_features` -| Name | Type | Description | -| --------- | ------------------------------------------------------------ | ----------------------------------- | -| `~/input` | `tier4_perception_msgs::msg::DetectedObjectWithFeatureArray` | detected objects with feature field | +### 出力 +- `/detected_objects` -### Output +## パラメータ -| Name | Type | Description | -| ---------- | ------------------------------------------------ | ---------------- | -| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | detected objects | +| 名前 | 説明 | 型 | デフォルト値 | +|---|---|---|---| +| `remove_probability` | 確率が低すぎる対象物を削除する | ブール値 | `false` | +| `remove_points` | 点数の低い対象物を削除する | ブール値 | `false` | +| `threshold_probability` | 確率のしきい値 | 倍精度浮動小数点 | `0.5` | +| `threshold_points` | 点数のしきい値 | 倍精度浮動小数点 | `10` | -## Parameters +## インターフェース -None +### サブスクライバー + +- **トピック:** `/detected_objects_with_features` +- **型:** `autoware_msgs::DetectedObjectWithFeatureArray` +- **説明:** 特徴を持つ検出されたオブジェクトの配列 + +### パブリッシャー + +- **トピック:** `/detected_objects` +- **型:** `autoware_msgs::DetectedObjects` +- **説明:** 検出されたオブジェクトの配列 + +## 使い方 + +このパッケージを使用するには、次の手順を実行します。 + +1. ROS ワークスペースで `catkin_make` を実行して、パッケージをビルドします。 +2. ノードを実行します。 + +```bash +rosrun autoware_detected_object_feature_remover autoware_detected_object_feature_remover +``` + +### パラメータの調整 + +パラメータは、`launch` ファイルまたは動的に ROS パラメータサーバーを使用して調整できます。 + +**launch ファイルを使用する場合:** + +```xml + + + + + + +``` + +**動的に ROS パラメータサーバーを使用する場合:** + +```bash +rosparam set /autoware_detected_object_feature_remover/remove_probability true +rosparam set /autoware_detected_object_feature_remover/threshold_probability 0.6 +``` + +## 制限事項 + +- このパッケージは、`autoware_msgs::DetectedObjectWithFeature` メッセージのみを処理します。他のタイプのメッセージはサポートされていません。 +- 確率または点数がしきい値以下のオブジェクトはすべて削除されます。部分的にしきい値を満たすオブジェクトは保持されません。 + +## トラブルシューティング + +パッケージに問題がある場合は、次の手順を実行します。 + +1. ROS コンソールログをチェックして、エラーメッセージがないか確認します。 +2. パラメータが正しく設定されていることを確認します。 +3. 入力トピックが正しく発行されていることを確認します。 +4. 出力トピックが正しく受信されていることを確認します。 + +| 名前 | タイプ | 説明 | +| --------- | --------- | --------- | +| `~/input` | `tier4_perception_msgs::msg::DetectedObjectWithFeatureArray` | 特徴を持つ検出オブジェクト | + +### 出力 + +### 自動運転ソフトウェアのドキュメント + +このドキュメントでは、自動運転ソフトウェアの概要と、その主要コンポーネントであるPerception、Planning、Controlの役割について説明します。 + +**Perceptionコンポーネント** + +Perceptionコンポーネントは、センサーデータから周囲環境に関する情報を抽出します。これには以下が含まれます。 + +- 物体検出(車両、歩行者、自転車など) +- フリースペースの検出(障害物のない領域) +- レーン検出 + +この情報を使用して、Perceptionコンポーネントは、自車位置に対する周囲環境の正確な認識を提供します。 + +**Planningコンポーネント** + +Planningコンポーネントは、認識された周囲環境情報に基づいて、車両の安全で効率的な経路を計画します。これには以下が含まれます。 + +- グローバルパスプランニング(目的地までの高レベルの経路) +- ローカルパスプランニング(障害物回避を考慮した経路の微調整) + +Planningコンポーネントは、制約の中で最適な経路を決定し、自車を目的地まで安全に誘導します。 + +**Controlコンポーネント** + +Controlコンポーネントは、Planningコンポーネントが出力した経路に基づいて、車両を制御します。これには以下が含まれます。 + +- ステアリング制御 +- ブレーキ制御 +- スロットル制御 + +Controlコンポーネントは、車両の運動を制御し、計画された経路に従って自車を移動させます。 + +**Autowareソフトウェア** + +Autowareは、オープンソースの自動運転ソフトウェアプラットフォームです。Perception、Planning、Controlコンポーネントを含む、自動運転に必要な主要機能を提供します。 + +Autowareを使用すると、開発者はカスタマイズして特定の車両や環境に適応させることができ、自動運転機能を独自のアプリケーションに統合できます。 + +**パフォーマンス指標** + +自動運転ソフトウェアのパフォーマンスを評価するための重要な指標には以下が含まれます。 + +- **経路逸脱量:**計画された経路からの自車位置の逸脱量 +- **速度逸脱量:**計画された速度からの自車速度の逸脱量 +- **加速度逸脱量:**計画された加速度からの自車加速度の逸脱量 +- **post resampling**:計画された経路からの自車位置の最大逸脱量 + +これらの指標は、自動運転システムの安全、効率、正確さを評価するために使用されます。 + +| 名称 | タイプ | 説明 | +| ---------- | --------------------------------------------------- | --------- | +| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | + +## パラメータ + +なし + +## 想定/既知の制限事項 -## Assumptions / Known limits diff --git a/perception/autoware_detected_object_validation/README.md b/perception/autoware_detected_object_validation/README.md index adca7c0fd9678..7d6086fed8116 100644 --- a/perception/autoware_detected_object_validation/README.md +++ b/perception/autoware_detected_object_validation/README.md @@ -1,30 +1,31 @@ # detected_object_validation -## Purpose +## 目的 -The purpose of this package is to eliminate obvious false positives of DetectedObjects. +このパッケージの目的は、DetectedObjects の明らかな誤検知を除去することです。 -## References/External links +## 参照/外部リンク -- [Obstacle pointcloud based validator](obstacle-pointcloud-based-validator.md) -- [Occupancy grid based validator](occupancy-grid-based-validator.md) -- [Object lanelet filter](object-lanelet-filter.md) -- [Object position filter](object-position-filter.md) +- [障害物点群ベースのバリデータ](obstacle-pointcloud-based-validator-ja.md) +- [占有グリッドベースのバリデータ](occupancy-grid-based-validator-ja.md) +- [オブジェクトレーンレットフィルタ](object-lanelet-filter-ja.md) +- [オブジェクト位置フィルタ](object-position-filter-ja.md) -### Node Parameters +### ノードパラメータ #### object_lanelet_filter -{{ json_to_markdown("perception/autoware_detected_object_validation/schema/object_lanelet_filter.schema.json") }} +{{ json_to_markdown("perception/autoware_detected_object_validation/schema/object_lanelet_filter.schema.json", "ja") }} #### object_position_filter -{{ json_to_markdown("perception/autoware_detected_object_validation/schema/object_position_filter.schema.json") }} +{{ json_to_markdown("perception/autoware_detected_object_validation/schema/object_position_filter.schema.json", "ja") }} #### obstacle_pointcloud_based_validator -{{ json_to_markdown("perception/autoware_detected_object_validation/schema/obstacle_pointcloud_based_validator.schema.json") }} +{{ json_to_markdown("perception/autoware_detected_object_validation/schema/obstacle_pointcloud_based_validator.schema.json", "ja") }} #### occupancy_grid_based_validator -{{ json_to_markdown("perception/autoware_detected_object_validation/schema/occupancy_grid_based_validator.schema.json") }} +{{ json_to_markdown("perception/autoware_detected_object_validation/schema/occupancy_grid_based_validator.schema.json", "ja") }} + diff --git a/perception/autoware_detection_by_tracker/README.md b/perception/autoware_detection_by_tracker/README.md index 44cb287872f39..ba36661c8abc4 100644 --- a/perception/autoware_detection_by_tracker/README.md +++ b/perception/autoware_detection_by_tracker/README.md @@ -1,74 +1,119 @@ # autoware_detection_by_tracker -## Purpose +## 用途 -This package feeds back the tracked objects to the detection module to keep it stable and keep detecting objects. +このパッケージはトラッキングされたオブジェクトを検出モジュールにフィードバックし、安定してオブジェクトを検出し続けることを目的としています。 ![purpose](image/purpose.svg) -The autoware detection by tracker takes as input an unknown object containing a cluster of points and a tracker. -The unknown object is optimized to fit the size of the tracker so that it can continue to be detected. +Autowareの detection by tracker は、点群とトラッカーを含む未知のオブジェクトを入力として受け取ります。 +未知のオブジェクトは、検出され続けることができるようにトラッカーのサイズに合うように最適化されます。 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -The autoware detection by tracker receives an unknown object containing a point cloud and a tracker, where the unknown object is mainly shape-fitted using euclidean clustering. -Shape fitting using euclidean clustering and other methods has a problem called under segmentation and over segmentation. +Autowareの detection by tracker は、点群とトラッカーを含む未知のオブジェクトを受け取ります。ここで未知のオブジェクトは、主にユークリッドクラスタリングを使用して形状適合されています。 +ユークリッドクラスタリングやその他の方法を使用した形状適合には、過分割と過分割という問題があります。 [![segmentation_fail](image/segmentation_fail.png)](https://www.researchgate.net/figure/Examples-of-an-undersegmentation-error-top-and-an-oversegmentation-error-bottom-Each_fig1_304533062) -_Adapted from [3]_ +_[3]から改変]_ -Simply looking at the overlap between the unknown object and the tracker does not work. We need to take measures for under segmentation and over segmentation. +未知のオブジェクトとトラッカーのオーバーラップだけを見るのは不十分です。過分割と過分割の対策を講じる必要があります。 -### Policy for dealing with over segmentation +### 過分割に対処するためのポリシー -1. Merge the unknown objects in the tracker as a single object. -2. Shape fitting using the tracker information such as angle and size as reference information. +1. トラッカー内の未知のオブジェクトを単一のオブジェクトとしてマージします。 +2. トラッカー情報(角度やサイズなど)をリファレンス情報として使用して形状適合を行います。 -### Policy for dealing with under segmentation +### 過分割に対処するためのポリシー -1. Compare the tracker and unknown objects, and determine that those with large recall and small precision are under segmented objects. -2. In order to divide the cluster of under segmented objects, it iterate the parameters to make small clusters. -3. Adjust the parameters several times and adopt the one with the highest IoU. +1. トラッカーと未知のオブジェクトを比較し、リコールが大きく、適合率が小さいものを過分割オブジェクトと判断します。 +2. 過分割オブジェクトのクラスタを分割するために、小さなクラスタを作成するようにパラメータを反復処理します。 +3. パラメータを数回調整し、最も IoU が高いものを採用します。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------------------------- | -------------------------------------------------------- | --------------- | -| `~/input/initial_objects` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | unknown objects | -| `~/input/tracked_objects` | `tier4_perception_msgs::msg::TrackedObjects` | trackers | +| 名称 | 型 | 説明 | +|---|---|---| +| `~/input/initial_objects` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | 未知のオブジェクト | +| `~/input/tracked_objects` | `tier4_perception_msgs::msg::TrackedObjects` | トラッカー | -### Output +### 出力 -| Name | Type | Description | -| ---------- | ------------------------------------------------ | ----------- | -| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | objects | +**自己位置推定** -## Parameters +以下の方法は自己位置推定およびマッピングを処理します。 -| Name | Type | Description | Default value | -| --------------------------------- | ------ | --------------------------------------------------------------------- | ------------- | -| `tracker_ignore_label.UNKNOWN` | `bool` | If true, the node will ignore the tracker if its label is unknown. | `true` | -| `tracker_ignore_label.CAR` | `bool` | If true, the node will ignore the tracker if its label is CAR. | `false` | -| `tracker_ignore_label.PEDESTRIAN` | `bool` | If true, the node will ignore the tracker if its label is pedestrian. | `false` | -| `tracker_ignore_label.BICYCLE` | `bool` | If true, the node will ignore the tracker if its label is bicycle. | `false` | -| `tracker_ignore_label.MOTORCYCLE` | `bool` | If true, the node will ignore the tracker if its label is MOTORCYCLE. | `false` | -| `tracker_ignore_label.BUS` | `bool` | If true, the node will ignore the tracker if its label is bus. | `false` | -| `tracker_ignore_label.TRUCK` | `bool` | If true, the node will ignore the tracker if its label is truck. | `false` | -| `tracker_ignore_label.TRAILER` | `bool` | If true, the node will ignore the tracker if its label is TRAILER. | `false` | +**Localization and Mapping (ローカライゼーションとマッピング)**: +- 現在の姿勢を推定および追跡します。 +- 環境マップを作成および更新します。 -## Assumptions / Known limits +**Planning (プランニング)** +- 安全で効率的な経路を計画します。 +- 速度、加速度、ステアリングコマンドを生成します。 -## (Optional) Error detection and handling +**Behavior Planning (動作プランニング)** +- 衝突回避のための障害物認識と回避を行います。 +- 交通規則とエチケットに従います。 -## (Optional) Performance characterization +**Behavior Prediction (動作予測)** +- 歩行者、自転車、他の車両の動きを予測します。 +- 交差点、人混み、その他の複雑な状況での安全な行動を可能にします。 -## (Optional) References/External links +**Controller (コントローラ)** +- 運転操作を実行します。 +- ブレーキ、アクセル、ステアリングの制御を管理します。 -[1] M. Himmelsbach, et al. "Tracking and classification of arbitrary objects with bottom-up/top-down detection." (2012). +**Perception (パーセプション)** +- カメラ、レーダー、LiDARセンサーからのデータを処理します。 +- 物体、車線、信号などの周辺環境を認識および分類します。 -[2] Arya Senna Abdul Rachman, Arya. "3D-LIDAR Multi Object Tracking for Autonomous Driving: Multi-target Detection and Tracking under Urban Road Uncertainties." (2017). +**センサー** +- レーダー、LiDAR、カメラなどのセンサーを使用します。 +- 検出距離、精度、視野などのセンサー特性を考慮します。 -[3] David Held, et al. "A Probabilistic Framework for Real-time 3D Segmentation using Spatial, Temporal, and Semantic Cues." (2016). +**データアグリゲーション** +- 複数のセンサーからのデータを統合します。 +- `post resampling`を使用して時間同期された一貫したビューを作成します。 + +**データアソシエーション** +- 異なるセンサーからの測定結果を同一の対象物に関連付けます。 +- KF(カルマンフィルタ)やHD(ハフ距離)などの手法を使用します。 + +**ステート推定** +- Kalmanフィルタを使用し、センサー測定値から状態を推定します。 +- 速度逸脱量、加速度逸脱量などの状態変数を考慮します。 + +| 名前 | 種類 | 説明 | +| ---------- | ---------------------------------------------- | ----------- | +| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | オブジェクト | + +## パラメータ + +| 名称 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `tracker_ignore_label.UNKNOWN` | `bool` | ラベルが不明の場合は、ノードがトラッカーを無視するかどうか | `true` | +| `tracker_ignore_label.CAR` | `bool` | ラベルが CAR の場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.PEDESTRIAN` | `bool` | ラベルが歩行者の場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.BICYCLE` | `bool` | ラベルが自転車の場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.MOTORCYCLE` | `bool` | ラベルがオートバイの場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.BUS` | `bool` | ラベルがバスの場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.TRUCK` | `bool` | ラベルがトラックの場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.TRAILER` | `bool` | ラベルがトレーラーの場合は、ノードがトラッカーを無視するかどうか | `false` | + +## 前提条件と既知の制限事項 + +## (省略可能) エラー検出と処理 + +## (省略可能) 性能特性 + +## (省略可能) 参照文献/外部リンク + +[1] M. ヒメルスバッハら. "ボトムアップ/トップダウン検出を用いた任意物体の追跡と分類." (2012). + +[2] アリア・セナ・アブドゥル・ラクマン, アリア. "自動運転における 3D LIDAR マルチオブジェクトトラッキング: 都市道路の不確実性におけるマルチターゲットの検出および追跡." (2017). + +[3] デイビッド・ヘルドら. "空間的、時間的、セマンティックな手がかりを用いたリアルタイム 3D セグメンテーションのための確率的フレームワーク." (2016). + +## (省略可能) 将来の拡張機能/未実装部分 -## (Optional) Future extensions / Unimplemented parts diff --git a/perception/autoware_elevation_map_loader/README.md b/perception/autoware_elevation_map_loader/README.md index 03d5fac308dab..976b49bdda581 100644 --- a/perception/autoware_elevation_map_loader/README.md +++ b/perception/autoware_elevation_map_loader/README.md @@ -1,121 +1,199 @@ # autoware_elevation_map_loader -## Purpose +## 目的 -This package provides elevation map for autoware_compare_map_segmentation. +本パッケージは、autoware_compare_map_segmentation 向けに標高マップを提供します。 -## Inner-workings / Algorithms +## 内容 / アルゴリズム -Generate elevation_map from subscribed pointcloud_map and vector_map and publish it. -Save the generated elevation_map locally and load it from next time. +サブスクライブされた pointcloud_map と vector_map から標高マップを生成し、公開します。 +生成された標高マップをローカルに保存し、次回からロードします。 -The elevation value of each cell is the average value of z of the points of the lowest cluster. -Cells with No elevation value can be inpainted using the values of neighboring cells. +各セルの標高値は、一番低いクラスタのポイントの z 座標の平均値です。 +標高値がないセルは、隣接セルの値を使用して補完できます。

-## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------------------------------- | ----------------------------------------------- | ------------------------------------------ | -| `input/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | The point cloud map | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | (Optional) The binary data of lanelet2 map | -| `input/pointcloud_map_metadata` | `autoware_map_msgs::msg::PointCloudMapMetaData` | (Optional) The metadata of point cloud map | +| 名前 | 型 | 説明 | +|------------------------------------|---------------------------------------------------|--------------------------------------------| +| `input/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | 点群マップ | +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | (オプション) レーンレット2マップのバイナリデータ | +| `input/pointcloud_map_metadata` | `autoware_map_msgs::msg::PointCloudMapMetaData` | (オプション) 点群マップのメタデータ | -### Output +### 出力 -| Name | Type | Description | +--- + +**自己位置推定** + +**概要** + +自己位置推定コンポーネントは、センサからの生のデータを処理し、GNSS/INSやV2Xによる制約付きで、推定自車位置と姿勢を出力します。 + +**仕様** + +* **入力:** + * 生センサデータ(IMU、GNSS、V2X) +* **出力:** + * 推定自車位置(x、y、z) + * 推定自車姿勢(roll、pitch、yaw) + * 推定自車速度(vx、vy、vz) +* **アルゴリズム:** + * EKF (拡張カルマンフィルタ)ベースのFusionアルゴリズム + +--- + +**経路計画** + +**概要** + +経路計画モジュールは、環境マップを利用して、開始点と目標点の間の最適経路を生成します。 + +**仕様** + +* **入力:** + * 環境マップ + * 開始点と目標点 +* **出力:** + * 最適経路のシーケンス(ウェイポイント) +* **アルゴリズム:** + * 動的経路計画法(DWA) + +--- + +**動作計画** + +**概要** + +動作計画Planningモジュールは、車両の経路を生成し、車両が安全かつ効率的に経路を追従できるように動作を決定します。 + +**仕様** + +* **入力:** + * 最適経路 + * 自車位置と姿勢 + * 環境情報(障害物、交通信号など) +* **出力:** + * 車両の速度とステアリング角のコマンド +* **アルゴリズム:** + * モデル予測制御(MPC) + * 後方サンプリング `post resampling`アルゴリズム + +--- + +**安全検証** + +**概要** + +安全検証コンポーネントは、動作計画出力が安全基準を満たしているかどうかを検証します。 + +**仕様** + +* **入力:** + * 動作計画出力 + * 環境情報 +* **出力:** + * 動作計画が安全かどうかのフラグ +* **アルゴリズム:** + * 障害物との衝突検出 + * 加速度逸脱量検出 + * 速度逸脱量検出 + +| 名称 | タイプ | 説明 | | ---------------------------- | ------------------------------- | -------------------------------------------------------------------- | -| `output/elevation_map` | `grid_map_msgs::msg::GridMap` | The elevation map | -| `output/elevation_map_cloud` | `sensor_msgs::msg::PointCloud2` | (Optional) The point cloud generated from the value of elevation map | +| `output/elevation_map` | `grid_map_msgs::msg::GridMap` | 標高マップ | +| `output/elevation_map_cloud` | `sensor_msgs::msg::PointCloud2` | (オプション) 標高マップの値から生成された点群 | + +### サービス -### Service +| Name | Type | Description | +| -------------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `service/get_selected_pcd_map` | `autoware_map_msgs::srv::GetSelectedPointCloudMap` | (オプション) ポイントクラウドマップを要求するサービス。ポイントクラウドマップローダーがROS 2サービス経由で選択されたポイントクラウドマップを利用する場合、これを利用します。 | -| Name | Type | Description | -| ------------------------------ | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| `service/get_selected_pcd_map` | `autoware_map_msgs::srv::GetSelectedPointCloudMap` | (Optional) service to request point cloud map. If pointcloud_map_loader uses selected pointcloud map loading via ROS 2 service, use this. | +## パラメータ -## Parameters +### ノードパラメータ -### Node parameters +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------------- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| map_layer_name | std::string | 標高マップレイヤー名 | elevation | +| param_file_path | std::string | GridMap パラメーターの設定 | path_default | +| elevation_map_directory | std::string | 標高マップファイル (bag2) | path_default | +| map_frame | std::string | 標高マップファイルを読み込むときの map_frame | map | +| use_inpaint | bool | 空のセルを補完するかどうかによります | true | +| inpaint_radius | float | アルゴリズムによって考慮される、補完された各ポイントの半径 [m] | 0.3 | +| use_elevation_map_cloud_publisher | bool | `output/elevation_map_cloud` を公開するか | false | +| use_lane_filter | bool | ベクトルマップで標高マップをフィルタリングするかどうかによります | false | +| lane_margin | float | インペインティングマスクに含めるエリアの車線ポリゴンからの余裕距離 [m] (use_lane_filter=True の場合のみ使用) | 0.0 | +| use_sequential_load | bool | サービスによって点群マップを取得するかどうかによります | false | +| sequential_map_load_num | int | 一度にロードする点群マップの数 (use_sequential_load が True に設定されている場合のみ使用)。これはすべての点群マップセルの数を超えてはいけません | 1 | -| Name | Type | Description | Default value | -| :-------------------------------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| map_layer_name | std::string | elevation_map layer name | elevation | -| param_file_path | std::string | GridMap parameters config | path_default | -| elevation_map_directory | std::string | elevation_map file (bag2) | path_default | -| map_frame | std::string | map_frame when loading elevation_map file | map | -| use_inpaint | bool | Whether to inpaint empty cells | true | -| inpaint_radius | float | Radius of a circular neighborhood of each point inpainted that is considered by the algorithm [m] | 0.3 | -| use_elevation_map_cloud_publisher | bool | Whether to publish `output/elevation_map_cloud` | false | -| use_lane_filter | bool | Whether to filter elevation_map with vector_map | false | -| lane_margin | float | Margin distance from the lane polygon of the area to be included in the inpainting mask [m]. Used only when use_lane_filter=True. | 0.0 | -| use_sequential_load | bool | Whether to get point cloud map by service | false | -| sequential_map_load_num | int | The number of point cloud maps to load at once (only used when use_sequential_load is set true). This should not be larger than number of all point cloud map cells. | 1 | +### GridMap のパラメータ -### GridMap parameters +パラメータは `config/elevation_map_parameters.yaml` で記述されています。 -The parameters are described on `config/elevation_map_parameters.yaml`. +#### 一般的なパラメータ -#### General parameters +| Name | Type | Description | Default value | +| :--------------------------------------------- | :--- | :--------------------------------------------------------------------------------------------------- | :------------ | +| pcl_grid_map_extraction/num_processing_threads | int | グリッドマップセルを処理するスレッド数。生の入力点群のフィルタリングは並列化されません。 | 12 | -| Name | Type | Description | Default value | -| :--------------------------------------------- | :--- | :----------------------------------------------------------------------------------------------------------- | :------------ | -| pcl_grid_map_extraction/num_processing_threads | int | Number of threads for processing grid map cells. Filtering of the raw input point cloud is not parallelized. | 12 | +#### グリッドマップのパラメーター -#### Grid map parameters +参照: -See: +生成されるグリッドマップのパラメーター。 -Resulting grid map parameters. +| 名前 | タイプ | 説明 | デフォルト値 | +| ------------------------------------------------------ | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | +| pcl_grid_map_extraction/grid_map/min_num_points_per_cell | int | グリッドマップセルのいずれにも当てはまる点群内の最低ポイント数。そうでなければ、そのセルの標高はNaNに設定されます。 | 3 | +| pcl_grid_map_extraction/grid_map/resolution | float | グリッドマップの解像度。幅と長さは自動的に計算されます。 | 0.3 | +| pcl_grid_map_extraction/grid_map/height_type | int | セルの標高を決定するパラメータ `0: 各クラスタの平均値の中で最も小さい値`, `1: 最もポイント数の多いクラスタの平均値` | 1 | +| pcl_grid_map_extraction/grid_map/height_thresh | float | 最も小さいクラスタからの標高範囲 (height_type 1 のみ) | 1.0 | -| Name | Type | Description | Default value | -| :------------------------------------------------------- | :---- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| pcl_grid_map_extraction/grid_map/min_num_points_per_cell | int | Minimum number of points in the point cloud that have to fall within any of the grid map cells. Otherwise the cell elevation will be set to NaN. | 3 | -| pcl_grid_map_extraction/grid_map/resolution | float | Resolution of the grid map. Width and length are computed automatically. | 0.3 | -| pcl_grid_map_extraction/grid_map/height_type | int | The parameter that determine the elevation of a cell `0: Smallest value among the average values of each cluster`, `1: Mean value of the cluster with the most points` | 1 | -| pcl_grid_map_extraction/grid_map/height_thresh | float | Height range from the smallest cluster (Only for height_type 1) | 1.0 | +### 点群の前処理パラメータ -### Point Cloud Pre-processing Parameters +#### リジッド変換パラメータ -#### Rigid body transform parameters +標高を計算する前に点群に適用されるリジッド変換。 -Rigid body transform that is applied to the point cloud before computing elevation. +| 名前 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------------------------- | :---- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------ | +| pcl_grid_map_extraction/cloud_transform/translation | float | 標高を計算する前に、入力点群に対して適用される並進 (xyz)。 | 0.0 | +| pcl_grid_map_extraction/cloud_transform/rotation | float | 標高を計算する前に、入力点群に対して適用される回転 (固有回転、規則 X-Y'-Z'')。 | 0.0 | -| Name | Type | Description | Default value | -| :-------------------------------------------------- | :---- | :---------------------------------------------------------------------------------------------------------------------- | :------------ | -| pcl_grid_map_extraction/cloud_transform/translation | float | Translation (xyz) that is applied to the input point cloud before computing elevation. | 0.0 | -| pcl_grid_map_extraction/cloud_transform/rotation | float | Rotation (intrinsic rotation, convention X-Y'-Z'') that is applied to the input point cloud before computing elevation. | 0.0 | +#### クラスター抽出パラメータ -#### Cluster extraction parameters +クラスターの抽出は、pclアルゴリズムに基づいています。詳細については、を参照してください。 -Cluster extraction is based on pcl algorithms. See for more details. +| 名称 | 型 | 説明 | デフォルト値 | +| ---- | --- | ---- | ---- | +| `pcl_grid_map_extraction/cluster_extraction/cluster_tolerance` | 実数 | クラスタに属すると見なされるポイント間の距離 | 0.2 | +| `pcl_grid_map_extraction/cluster_extraction/min_num_points` | 整数 | クラスタが持つ必要のある最小ポイント数(以下では破棄) | 3 | +| `pcl_grid_map_extraction/cluster_extraction/max_num_points` | 整数 | クラスタが持つことができる最大ポイント数(以上では破棄) | 1000000 | -| Name | Type | Description | Default value | -| :----------------------------------------------------------- | :---- | :------------------------------------------------------------------------------------- | :------------ | -| pcl_grid_map_extraction/cluster_extraction/cluster_tolerance | float | Distance between points below which they will still be considered part of one cluster. | 0.2 | -| pcl_grid_map_extraction/cluster_extraction/min_num_points | int | Min number of points that a cluster needs to have (otherwise it will be discarded). | 3 | -| pcl_grid_map_extraction/cluster_extraction/max_num_points | int | Max number of points that a cluster can have (otherwise it will be discarded). | 1000000 | +#### 外れ値除去パラメーター -#### Outlier removal parameters +外れ値除去の詳細については、 を参照してください。 -See for more explanation on outlier removal. +| 名前 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `pcl_grid_map_extraction/outlier_removal/is_remove_outliers` | float | 統計的異常値除去を実行するかどうか | false | +| `pcl_grid_map_extraction/outlier_removal/mean_K` | float | 点の統計を推定するために解析する近傍の数 | 10 | +| `pcl_grid_map_extraction/outlier_removal/stddev_threshold` | float | 点が内点と見なされる標準偏差の数 | 1.0 | -| Name | Type | Description | Default value | -| :--------------------------------------------------------- | :---- | :----------------------------------------------------------------------------- | :------------ | -| pcl_grid_map_extraction/outlier_removal/is_remove_outliers | float | Whether to perform statistical outlier removal. | false | -| pcl_grid_map_extraction/outlier_removal/mean_K | float | Number of neighbors to analyze for estimating statistics of a point. | 10 | -| pcl_grid_map_extraction/outlier_removal/stddev_threshold | float | Number of standard deviations under which points are considered to be inliers. | 1.0 | +#### サブサンプリングパラメータ -#### Subsampling parameters +ポイントクラウドのダウンサンプリングの詳細については、 を参照してください。 -See for more explanation on point cloud downsampling. +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------------------------------------- | :---- | :------------------------------------------------------------ | :------------ | +| pcl_grid_map_extraction/downsampling/is_downsample_cloud | bool | ダウンサンプリングを実施するかどうか。 | false | +| pcl_grid_map_extraction/downsampling/voxel_size | float | ボクセルサイズ(xyz)、メートル単位。 | 0.02 | -| Name | Type | Description | Default value | -| :------------------------------------------------------- | :---- | :-------------------------------------- | :------------ | -| pcl_grid_map_extraction/downsampling/is_downsample_cloud | bool | Whether to perform downsampling or not. | false | -| pcl_grid_map_extraction/downsampling/voxel_size | float | Voxel sizes (xyz) in meters. | 0.02 | diff --git a/perception/autoware_euclidean_cluster/README.md b/perception/autoware_euclidean_cluster/README.md index 349d4211ee8e9..20330b7fc6ade 100644 --- a/perception/autoware_euclidean_cluster/README.md +++ b/perception/autoware_euclidean_cluster/README.md @@ -1,102 +1,164 @@ # autoware_euclidean_cluster -## Purpose +## 目的 -autoware_euclidean_cluster is a package for clustering points into smaller parts to classify objects. +autoware_euclidean_cluster は、オブジェクトを分類するために点群をより小さな部分にクラスタリングするパッケージです。 -This package has two clustering methods: `euclidean_cluster` and `voxel_grid_based_euclidean_cluster`. +このパッケージには、`euclidean_cluster` と `voxel_grid_based_euclidean_cluster` の 2 つのクラスタリング手法があります。 -## Inner-workings / Algorithms +## 仕組み / アルゴリズム ### euclidean_cluster -`pcl::EuclideanClusterExtraction` is applied to points. See [official document](https://pcl.readthedocs.io/projects/tutorials/en/master/cluster_extraction.html) for details. +`pcl::EuclideanClusterExtraction` を点群に適用します。詳細については、[公式ドキュメント](https://pcl.readthedocs.io/projects/tutorials/en/master/cluster_extraction.html) を参照してください。 ### voxel_grid_based_euclidean_cluster -1. A centroid in each voxel is calculated by `pcl::VoxelGrid`. -2. The centroids are clustered by `pcl::EuclideanClusterExtraction`. -3. The input points are clustered based on the clustered centroids. +1. ボクセルごとの重心は、`pcl::VoxelGrid` によって計算されます。 +2. 重心は `pcl::EuclideanClusterExtraction` によってクラスタリングされます。 +3. 入力点群は、クラスタリングされた重心を基にクラスタリングされます。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------- | ------------------------------- | ---------------- | -| `input` | `sensor_msgs::msg::PointCloud2` | input pointcloud | +| 名前 | タイプ | 説明 | +| ------- | ------------------------------- | ----------- | +| `input` | `sensor_msgs::msg::PointCloud2` | 入力点群 | -### Output +### 出力 -| Name | Type | Description | -| ---------------- | -------------------------------------------------------- | -------------------------------------------- | -| `output` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | cluster pointcloud | -| `debug/clusters` | `sensor_msgs::msg::PointCloud2` | colored cluster pointcloud for visualization | +**自動運転ソフトウェア** -## Parameters +**ドキュメント URL:** [ここにURLを入力] -### Core Parameters +**Planningモジュール** + +**Planningモジュールの機能** + +Planningモジュールには、以下の機能があります。 + +- 車両の経路計画 +- 車両の衝突回避 +- 車両の制御 + +**Planningモジュールの入力** + +Planningモジュールには、以下の入力があります。 + +- 自車位置 +- 自車速度 +- 周囲環境の認識データ +- 交通規制情報 + +**Planningモジュールの出力** + +Planningモジュールの出力には、以下のものがあります。 + +- 車両の目標経路 +- 車両の加速度・旋回角率の目標値 + +**Planningモジュールにおける技術的詳細** + +Planningモジュールは、以下の技術的詳細を備えています。 + +- 経路計画アルゴリズム: ダイナミックウェイポイント法 +- 障害物回避アルゴリズム: 最適制御法 +- `post resampling`技術を使用したセンサデータの処理 +- velocity逸脱量とacceleration逸脱量の最小化 + +Planningモジュールは、Autowareソフトウェアスタックの一部です。 + +| 名 | タイプ | 説明 | +| ---------------- | --------------------------------------------------------- | --------------------------------------------------- | +| `output` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | クラスタ点群 | +| `debug/clusters` | `sensor_msgs::msg::PointCloud2` | 可視化のための着色済みクラスタ点群 | + +## パラメータ + +### コアパラメータ #### euclidean_cluster -| Name | Type | Description | -| ------------------ | ----- | -------------------------------------------------------------------------------------------- | -| `use_height` | bool | use point.z for clustering | -| `min_cluster_size` | int | the minimum number of points that a cluster needs to contain in order to be considered valid | -| `max_cluster_size` | int | the maximum number of points that a cluster needs to contain in order to be considered valid | -| `tolerance` | float | the spatial cluster tolerance as a measure in the L2 Euclidean space | +| 名称 | タイプ | 説明 | +| ---- | ---- | ----------------------------------------------------- | +| `use_height` | ブール | クラスタリングに point.z を使用 | +| `min_cluster_size` | 整数 | クラスターが有効と見なされるために必要な最小のポイント数 | +| `max_cluster_size` | 整数 | クラスターが有効と見なされるために必要な最大のポイント数 | +| `tolerance` | 浮動小数点 | L2 ユークリッド空間における尺度としての空間クラスター許容範囲 | #### voxel_grid_based_euclidean_cluster -| Name | Type | Description | -| ----------------------------- | ----- | -------------------------------------------------------------------------------------------- | -| `use_height` | bool | use point.z for clustering | -| `min_cluster_size` | int | the minimum number of points that a cluster needs to contain in order to be considered valid | -| `max_cluster_size` | int | the maximum number of points that a cluster needs to contain in order to be considered valid | -| `tolerance` | float | the spatial cluster tolerance as a measure in the L2 Euclidean space | -| `voxel_leaf_size` | float | the voxel leaf size of x and y | -| `min_points_number_per_voxel` | int | the minimum number of points for a voxel | +このノードは、voxelグリッド法に基づくEuclideanクラスタリングを使用して、点群をクラスタリングします。このノードの主な目的は、障害物検出のパイプラインのために、点群を障害物クラスタにクラスタリングすることです。 + +**サブスクライブするトピック** + +* `/points_raw`: 入力点群 -## Assumptions / Known limits +**パブリッシュするトピック** - -## (Optional) Error detection and handling +## (省略可) エラーの検出と処理 - -## (Optional) Performance characterization +## (省略可) パフォーマンスの特性評価 - -## (Optional) References/External links +## (省略可) リファレンス/外部リンク - -## (Optional) Future extensions / Unimplemented parts +## (省略可) 今後の拡張機能/未実装部分 + +`voxel_grid_based_euclidean_cluster`の`use_height`オプションはまだ実装されていません。 -The `use_height` option of `voxel_grid_based_euclidean_cluster` isn't implemented yet. diff --git a/perception/autoware_ground_segmentation/README.md b/perception/autoware_ground_segmentation/README.md index 08b8a4f373bcc..bd0b4449844e5 100644 --- a/perception/autoware_ground_segmentation/README.md +++ b/perception/autoware_ground_segmentation/README.md @@ -1,52 +1,92 @@ # autoware_ground_segmentation -## Purpose +## 目的 -The `autoware_ground_segmentation` is a node that remove the ground points from the input pointcloud. +`autoware_ground_segmentation`は、入力ポイントクラウドから地上の点を削除するノードです。 -## Inner-workings / Algorithms +## 内部処理 / アルゴリズム -Detail description of each ground segmentation algorithm is in the following links. +各地面セグメンテーションアルゴリズムの詳細な説明は、次のリンクを参照してください。 -| Filter Name | Description | Detail | -| -------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------ | -| ray_ground_filter | A method of removing the ground based on the geometrical relationship between points lined up on radiation | [link](docs/ray-ground-filter.md) | -| scan_ground_filter | Almost the same method as `ray_ground_filter`, but with slightly improved performance | [link](docs/scan-ground-filter.md) | -| ransac_ground_filter | A method of removing the ground by approximating the ground to a plane | [link](docs/ransac-ground-filter.md) | +| フィルタの名称 | 説明 | 詳細 | +| ------------------------ | --------------------------------------------------------------------------------------------------------- | -------------------------------------- | +| `ray_ground_filter` | 放射状に並んだ点の幾何学的関係に基づいて地面を取り除く方法 | [リンク](docs/ray-ground-filter.md) | +| `scan_ground_filter` | `ray_ground_filter`とほぼ同じ方法だが、パフォーマンスがわずかに向上 | [リンク](docs/scan-ground-filter.md) | +| `ransac_ground_filter` | 平面に対して地上の近似を行うことで地面を取り除く方法 | [リンク](docs/ransac-ground-filter.md) | -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | +| 名前 | タイプ | 説明 | | ----------------- | ------------------------------- | ----------------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | reference points | -| `~/input/indices` | `pcl_msgs::msg::Indices` | reference indices | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点 | +| `~/input/indices` | `pcl_msgs::msg::Indices` | 基準インデックス | -### Output +### 自動運転ソフトウェアドキュメント -| Name | Type | Description | -| ----------------- | ------------------------------- | --------------- | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | filtered points | +**Planning** コンポーネントは、**HAD Map** と**localization** による**current pose** 情報を使用して、周囲の環境を認識し、安全で快適な経路を決定します。 -## Parameters +**Planning** コンポーネントには、次の主要モジュールが含まれます。 -### Node Parameters +- **Trajectory Planner**:**HAD Map** と**localization** データを使用して、車両の安全で効率的な経路を生成します。 +- **Path Smoother**:**Trajectory Planner** によって生成された経路を滑らかにし、車両の快適性を向上させます。 +- **Speed Planner**:**Trajectory Planner** と**Path Smoother** によって生成された経路に基づいて、車両の速度プロファイルを決定します。 -| Name | Type | Default Value | Description | +**Perception** コンポーネントは、**HAD Map** と**localization** 情報を組み合わせて、障害物やその他の車両などの周囲の環境を認識します。 + +**Perception** コンポーネントには、次の主要モジュールが含まれます。 + +- **Object Detector**: LiDAR、カメラ、レーダーから収集されたデータを処理して、物体や障害物を検出します。 +- **Obstacle Estimator**: 検出された物体の速度と加速度を推定します。 +- **Localizer**: 物体の位置と姿勢を**localization** 情報との関連付けを支援します。 + +**Control** コンポーネントは、**Planning** と**Perception** コンポーネントから提供される情報を使用して、車両を安全かつ効率的に制御します。 + +**Control** コンポーネントには、次の主要モジュールが含まれます: + +- **Lateral Control**: ステアリングを制御して、車両が**Trajectory Planner** によって生成された経路に沿って走行できるようにします。 +- **Longitudinal Control**: ブレーキとアクセルを制御して、車両の速度と加速度が**Speed Planner** によって決定されたプロファイルに従うようにします。 + +**HAD Map** は、高精度な地図データを提供し、**Planning** コンポーネントと**Perception** コンポーネントが周囲の環境を正確に認識できるようにします。 + +**Autoware** の**Localization** コンポーネントは、**HAD Map** を利用して、車両の**current pose** と姿勢を決定します。 + +**Autoware** の**Visualization** コンポーネントは、**Planning**、**Perception**、**Control** コンポーネントによって生成された情報をユーザーに表示します。 + +### 考慮事項 + +**Planning** コンポーネントは、次の考慮事項を考慮します。 + +- **Collision Avoidance**: 車両が障害物や他の車両と衝突しないようにします。 +- **Velocity Violation**: 車両の速度が許容範囲を超えないようにします。 +- **Acceleration Violation**: 車両の加速度が許容範囲を超えないようにします。 +- **Path 'post resampling'**: **Path Smoother** によって生成された経路が**Trajectory Planner** によって生成された経路を正確に表していることを確認します。 +- **Vehicle Dynamics**: 車両の運動特性を考慮して、安全で快適な走行を確保します。 + +| 名称 | 型 | 説明 | +|----------------------|-----------------------------------|---------------------| +| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリングされた点群 | + +## パラメータ + +### ノードのパラメータ + +| 名前 | 型 | デフォルト値 | 説明 | | -------------------- | ------ | ------------- | ------------------------------------- | -| `input_frame` | string | " " | input frame id | -| `output_frame` | string | " " | output frame id | -| `has_static_tf_only` | bool | false | flag to listen TF only once | -| `max_queue_size` | int | 5 | max queue size of input/output topics | -| `use_indices` | bool | false | flag to use pointcloud indices | -| `latched_indices` | bool | false | flag to latch pointcloud indices | -| `approximate_sync` | bool | false | flag to use approximate sync option | +| `input_frame` | 文字列 | " " | 入力フレーム ID | +| `output_frame` | 文字列 | " " | 出力フレーム ID | +| `has_static_tf_only` | ブール | false | TF を一度だけリスンするフラグ | +| `max_queue_size` | 整数 | 5 | 入力/出力トピックの最大キューサイズ | +| `use_indices` | ブール | false | ポイントクラウドのインデックスを使用するフラグ | +| `latched_indices` | ブール | false | ポイントクラウドのインデックスをラッチするフラグ | +| `approximate_sync` | ブール | false | 近似同期オプションを使用するフラグ | -## Assumptions / Known limits +## 前提 / 制限事項 -`autoware::pointcloud_preprocessor::Filter` is implemented based on pcl_perception [1] because of [this issue](https://github.com/ros-perception/perception_pcl/issues/9). +`autoware::pointcloud_preprocessor::Filter`は、[この問題](https://github.com/ros-perception/perception_pcl/issues/9)のため、pcl_perception [1]に基づいて実装されています。 -## References/External links +## 参考文献/外部リンク [1] + diff --git a/perception/autoware_image_projection_based_fusion/README.md b/perception/autoware_image_projection_based_fusion/README.md index c976697b0396d..48d17e3cd9e49 100644 --- a/perception/autoware_image_projection_based_fusion/README.md +++ b/perception/autoware_image_projection_based_fusion/README.md @@ -1,76 +1,132 @@ -# autoware_image_projection_based_fusion +## autoware_image_projection_based_fusion -## Purpose +## 目的 -The `autoware_image_projection_based_fusion` is a package to fuse detected obstacles (bounding box or segmentation) from image and 3d pointcloud or obstacles (bounding box, cluster or segmentation). +`autoware_image_projection_based_fusion`は、イメージと3Dポイントクラウドまたは障害物(バウンディングボックス、クラスタ、またはセグメンテーション)から検出された障害物(バウンディングボックスまたはセグメンテーション)をフュージョンするためのパッケージです。 -## Inner-workings / Algorithms +## 処理内容 / アルゴリズム -### Sync Algorithm +### 同期アルゴリズム -#### matching +#### マッチング -The offset between each camera and the lidar is set according to their shutter timing. -After applying the offset to the timestamp, if the interval between the timestamp of pointcloud topic and the roi message is less than the match threshold, the two messages are matched. +各カメラとLiDARのオフセットはそのシャッタータイミングによって設定されています。 +タイムスタンプにオフセットを適用した後、ポイントクラウドトピックのタイムスタンプとROIメッセージ間のインターバルがマッチングの閾値よりも小さい場合、2つのメッセージはマッチングされます。 ![roi_sync_image1](./docs/images/roi_sync_1.png) -current default value at autoware.universe for TIER IV Robotaxi are: - input_offset_ms: [61.67, 111.67, 45.0, 28.33, 78.33, 95.0] - match_threshold_ms: 30.0 +Autoware.universeのTIER IV Robotaxiでの現在のデフォルト値は次のとおりです。 +- input_offset_ms: [61.67、111.67、45.0、28.33、78.33、95.0] +- match_threshold_ms: 30.0 -#### fusion and timer +#### フュージョンとタイマー ![roi_sync_image2](./docs/images/roi_sync_2.png) -The subscription status of the message is signed with 'O'. +メッセージのサブスクリプションステータスは「O」で示されます。 -1.if a pointcloud message is subscribed under the below condition: +1. あるポイントクラウドメッセージが以下の条件を満たしてサブスクライブされる場合、 -| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | -| :-----------------: | :--------: | :-------: | :-------: | :-------: | -| subscription status | | O | O | O | +(a). a camera image is matched +(b). a timer starts counting to the pre-configured timeout value. + +2. if a camera image is matched, the timer resets. + +3. if the timer expires, the sign is reset to 'X' and the subscription will be terminated. + +### Communication + +#### Sensor independence + +The fusion module can works only with pointcloud data if image data is not available, or only with image data if pointcloud data is not available. + +#### No need to share coordinate frame + +The fusion module works on `post resampling` pointcloud and Bird's-eye-view (BEV) camera image. +The fusion module does not have to share the coordinate frame with the sensors, because each sensor has its own T(leader -> subject) transform. + +#### Sensor timing management + +Sensor timing is managed by the ROI sync module. +It is required for each Planning sensor to have its own topics for ROI and data. + +### Integration with Planning + +The fusion module has no strong dependency on the Planning module. +The Planning module can get all the necessary information from the fused messages. -If the roi msgs can be matched, fuse them and postprocess the pointcloud message. -Otherwise, fuse the matched roi msgs and cache the pointcloud. +## Installation -2.if a pointcloud message is subscribed under the below condition: +source code directory: `autoware/autoware/core/autoware_image_projection_based_fusion` + +## Usage + +### Required stack + +- ROS +- autoware\_can\_msgs +- autoware\_perception\_msgs +- autoware\_planning\_msgs +- cv\_bridge +- octomap\_ros + +### Example + +tum\_slayer\_1/base\_linkへ変換されたcamera1のCameraInfoと、fusion\_imageのサブスクライバを起動します。 + +``` bash +roslaunch autoware_image_projection_based_fusion fusion.launch image_topic:=/camera1/front_left/compressed image_info_frame_id:=/base_link output_topic:=/fusion_image fusion_node_name:=fused_image +``` | | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | | :-----------------: | :--------: | :-------: | :-------: | :-------: | -| subscription status | | O | O | | +| サブスクリプションステータス | | 有 | 有 | 有 | -if the roi msgs can be matched, fuse them and cache the pointcloud. +roi msgsにマッチング可能な場合はそれらを融合してポイントクラウドメッセージを処理します。 +それ以外の場合はマッチングしたroi msgsを融合してポイントクラウドをキャッシュします。 -3.if a pointcloud message is subscribed under the below condition: +2.次の条件下でポイントクラウドメッセージにサブスクライブした場合: | | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | | :-----------------: | :--------: | :-------: | :-------: | :-------: | -| subscription status | O | O | O | | +| 受信状態 | | O | O | | -If the roi msg 3 is subscribed before the next pointcloud message coming or timeout, fuse it if matched, otherwise wait for the next roi msg 3. -If the roi msg 3 is not subscribed before the next pointcloud message coming or timeout, postprocess the pointcloud message as it is. +1. ROI メッセージが照合できる場合、それらを融合し、点群をキャッシュします。 -The timeout threshold should be set according to the postprocessing time. -E.g, if the postprocessing time is around 50ms, the timeout threshold should be set smaller than 50ms, so that the whole processing time could be less than 100ms. -current default value at autoware.universe for XX1: - timeout_ms: 50.0 +2. 以下条件下で点群メッセージが購読された場合: -#### The `build_only` option +| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | +| :----------------: | :--------: | :-------: | :-------: | :-------: | +| サブスクリプション状態 | ○ | ○ | ○ | + +roi msg 3 が次のポイントクラウドメッセージの受信またはタイムアウト前にサブスクライブされている場合は、一致した場合に融合し、そうでなければ次の roi msg 3 を待ちます。 + +roi msg 3 が次のポイントクラウドメッセージの受信またはタイムアウト前にサブスクライブされていない場合は、そのままポイントクラウドメッセージを事後処理します。 + +タイムアウトのしきい値は、事後処理時間に応じて設定する必要があります。 +たとえば、事後処理時間が約50ミリ秒の場合、タイムアウトのしきい値は50ミリ秒未満に設定する必要があり、全体の処理時間が100ミリ秒未満になるようにする必要があります。 +Autoware.universe での現在のデフォルト値:XX1: - timeout_ms: 50.0 + +#### `build_only` オプション + +`pointpainting_fusion` ノードには、ONNX ファイルから TensorRT エンジンファイルを構築するための `build_only` オプションがあります。 +Autoware Universe の `.param.yaml` ファイルのすべての ROS パラメータを移動させることが好まれますが、`build_only` オプションはプレタスクとしてビルドを実行するためのフラグとして使用される可能性があるため、今のところ `.param.yaml` ファイルには移動されていません。次のコマンドで実行できます。 -The `pointpainting_fusion` node has `build_only` option to build the TensorRT engine file from the ONNX file. -Although it is preferred to move all the ROS parameters in `.param.yaml` file in Autoware Universe, the `build_only` option is not moved to the `.param.yaml` file for now, because it may be used as a flag to execute the build as a pre-task. You can execute with the following command: ```bash ros2 launch autoware_image_projection_based_fusion pointpainting_fusion.launch.xml model_name:=pointpainting model_path:=/home/autoware/autoware_data/image_projection_based_fusion model_param_path:=$(ros2 pkg prefix autoware_image_projection_based_fusion --share)/config/pointpainting.param.yaml build_only:=true ``` -#### Known Limits +#### 制限事項 + +rclcpp::TimerBase таймерは for ループを break できないため、roi メッセージを中間に融合するときに時間が切れた場合でも、すべてのメッセージが融合されるまでプログラムは実行されます。 -The rclcpp::TimerBase timer could not break a for loop, therefore even if time is out when fusing a roi msg at the middle, the program will run until all msgs are fused. +### 各融合アルゴリズムの詳細な説明は次のリンクにあります -### Detail description of each fusion's algorithm is in the following links +| フュージョン名 | 説明 | 詳細 | +|---|---|---| +| `roi_cluster_fusion` | 2Dオブジェクト検出器のROIから、クラスタの分類ラベルを上書き | [リンク](./docs/roi-cluster-fusion.md) | +| `roi_detected_object_fusion` | 2Dオブジェクト検出器のROIから、検出オブジェクトの分類ラベルを上書き | [リンク](./docs/roi-detected-object-fusion.md) | +| `pointpainting_fusion` | 2Dオブジェクト検出器のROIで点群にペイントし、3Dオブジェクト検出器にフィード | [リンク](./docs/pointpainting-fusion.md) | +| `roi_pointcloud_fusion` | 2Dオブジェクト検出器のROIと点群を照合し、ラベル不明のオブジェクトを検出 | [リンク](./docs/roi-pointcloud-fusion.md) | -| Fusion Name | Description | Detail | -| -------------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------- | -| roi_cluster_fusion | Overwrite a classification label of clusters by that of ROIs from a 2D object detector. | [link](./docs/roi-cluster-fusion.md) | -| roi_detected_object_fusion | Overwrite a classification label of detected objects by that of ROIs from a 2D object detector. | [link](./docs/roi-detected-object-fusion.md) | -| pointpainting_fusion | Paint the point cloud with the ROIs from a 2D object detector and feed to a 3D object detector. | [link](./docs/pointpainting-fusion.md) | -| roi_pointcloud_fusion | Matching pointcloud with ROIs from a 2D object detector to detect unknown-labeled objects | [link](./docs/roi-pointcloud-fusion.md) | diff --git a/perception/autoware_lidar_apollo_instance_segmentation/README.md b/perception/autoware_lidar_apollo_instance_segmentation/README.md index edc3d99e0967f..fe263e8c14470 100644 --- a/perception/autoware_lidar_apollo_instance_segmentation/README.md +++ b/perception/autoware_lidar_apollo_instance_segmentation/README.md @@ -2,74 +2,133 @@ ![Peek 2020-04-07 00-17](https://user-images.githubusercontent.com/8327598/78574862-92507d80-7865-11ea-9a2d-56d3453bdb7a.gif) -## Purpose +## 目的 -This node segments 3D pointcloud data from lidar sensors into obstacles, e.g., cars, trucks, bicycles, and pedestrians -based on CNN based model and obstacle clustering method. +このノードは、CNNに基づくモデルと障害物クラスタリング手法を使用して、障害物(例:自動車、トラック、自転車、歩行者)にLiDARセンサから取得した3D点群データをセグメント化します。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -See the [original design](https://github.com/ApolloAuto/apollo/blob/r6.0.0/docs/specs/3d_obstacle_perception.md) by Apollo. +Apolloの[元の設計](https://github.com/ApolloAuto/apollo/blob/r6.0.0/docs/specs/3d_obstacle_perception.md)を参照してください。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 +- `/points_raw` (`PointCloud2`): センサから取得したLiDAR点群のトピック +- `/imu/data` (`Imu`): 車両の姿勢と角速度を更新するトピック +- `/vehicle/status/control_mode` (`UInt8`): 制御モード(オートドライブ、手動運転)のトピック +- `/had_map_available` (`Bool`): HDマップが利用可能な場合(True、False)のトピック -| Name | Type | Description | +### 出力 +- `/apollo/perception/obstacles` (`ObjectArray`): 検出された障害物のトピック +- `/planning/predicted_objects` (`ObjectArray`): Planningコンポーネントで使用するため、予測軌跡を持つ障害物のトピック + +| 名称 | 型 | 説明 | | ------------------ | ------------------------- | ---------------------------------- | -| `input/pointcloud` | `sensor_msgs/PointCloud2` | Pointcloud data from lidar sensors | +| `input/pointcloud` | `sensor_msgs/PointCloud2` | レーザーセンサーからの点群データ | + +## 自動運転ソフトウェアのドキュメント + +### システムアーキテクチャ + +本システムは、以下のようなモジュールで構成されています。 + +**Planningモジュール** +- 経路計画と制御 +- 'post resampling' +- 自車位置の推定 + +**Controlモジュール** +- 速度と加速度の制御 +- 車両運動学の制御 + +**Perceptionモジュール** +- 車両と周辺環境の検出とトラッキング + +**Localizationモジュール** +- 自車位置と姿勢の推定 + +### 要件 + +**機能要件** +- 障害物を回避しながらの自律走行 +- 速度と加速度の制御 +- 路面状況への対応 + +**非機能要件** +- リアルタイム処理 +- 安全性と信頼性 +- Autowareとの互換性 -### Output +### パフォーマンス基準 -| Name | Type | Description | -| --------------------------- | -------------------------------------------------- | ------------------------------------------------- | -| `output/labeled_clusters` | `tier4_perception_msgs/DetectedObjectsWithFeature` | Detected objects with labeled pointcloud cluster. | -| `debug/instance_pointcloud` | `sensor_msgs/PointCloud2` | Segmented pointcloud for visualization. | +**安全性** +- 障害物逸脱量:0.1m以内 +- 速度逸脱量:0.5m/s以内 +- 加速度逸脱量:0.2m/s2以内 -## Parameters +**効率性** +- 1秒あたりの演算時間:10ms未満 -### Node Parameters +### インターフェース -None +**入力** +- センサーデータ +- 自車位置 -### Core Parameters +**出力** +- 運転コマンド +- システム状態 -| Name | Type | Default Value | Description | -| ----------------------- | ------ | -------------------- | ---------------------------------------------------------------------------------- | -| `score_threshold` | double | 0.8 | If the score of a detected object is lower than this value, the object is ignored. | -| `range` | int | 60 | Half of the length of feature map sides. [m] | -| `width` | int | 640 | The grid width of feature map. | -| `height` | int | 640 | The grid height of feature map. | -| `engine_file` | string | "vls-128.engine" | The name of TensorRT engine file for CNN model. | -| `prototxt_file` | string | "vls-128.prototxt" | The name of prototxt file for CNN model. | -| `caffemodel_file` | string | "vls-128.caffemodel" | The name of caffemodel file for CNN model. | -| `use_intensity_feature` | bool | true | The flag to use intensity feature of pointcloud. | -| `use_constant_feature` | bool | false | The flag to use direction and distance feature of pointcloud. | -| `target_frame` | string | "base_link" | Pointcloud data is transformed into this frame. | -| `z_offset` | int | 2 | z offset from target frame. [m] | -| `build_only` | bool | `false` | shutdown the node after TensorRT engine file is built | +| 名称 | タイプ | 説明 | +| --------------------------- | -------------------------------------------------- | ----------------------------------------------------- | +| `output/labeled_clusters` | `tier4_perception_msgs/DetectedObjectsWithFeature` | ラベル付きの点群クラスタを持つ検出されたオブジェクト。 | +| `debug/instance_pointcloud` | `sensor_msgs/PointCloud2` | 視覚化用のセグメント化された点群。 | -## Assumptions / Known limits +## パラメータ -There is no training code for CNN model. +### ノードパラメーター -### Note +なし -This package makes use of three external codes. -The trained files are provided by apollo. The trained files are automatically downloaded when you build. +### コアパラメーター -Original URL +| 名前 | タイプ | デフォルト値 | 説明 | +| ----------------------- | ------ | -------------------- | ----------------------------------------------------------------------------------- | +| `score_threshold` | double | 0.8 | 検出オブジェクトのスコアがこの値より低い場合、オブジェクトは無視されます。 | +| `range` | int | 60 | フィーチャマップの半分の長さ [m] | +| `width` | int | 640 | フィーチャマップのグリッド幅 | +| `height` | int | 640 | フィーチャマップのグリッド高さ | +| `engine_file` | string | "vls-128.engine" | CNNモデルのTensorRTエンジンファイルの名前 | +| `prototxt_file` | string | "vls-128.prototxt" | CNNモデルのprototxtファイルの名前 | +| `caffemodel_file` | string | "vls-128.caffemodel" | CNNモデルのcaffemodelファイルの名前 | +| `use_intensity_feature` | bool | true | ポイントクラウドの強度フィーチャを使用するフラグ | +| `use_constant_feature` | bool | false | ポイントクラウドの角度と距離のフィーチャを使用するフラグ | +| `target_frame` | string | "base_link" | ポイントクラウドデータはこのフレームに変換されます。 | +| `z_offset` | int | 2 | 標的フレームからのzオフセット [m] | +| `build_only` | bool | `false` | TensorRTエンジンファイルが構築された後にノードをシャットダウンします。 | -- VLP-16 : +## 前提条件 / 制限事項 + +CNNモデル用のトレーニングコードはありません。 + +### 注意 + +このパッケージは3つの外部コードを使用しています。 +トレーニング済みファイルはアポロによって提供されます。ビルド時にトレーニング済みファイルは自動的にダウンロードされます。 + +元のURL + +- VLP-16: -- HDL-64 : +- HDL-64: -- VLS-128 : +- VLS-128: -Supported lidars are velodyne 16, 64 and 128, but you can also use velodyne 32 and other lidars with good accuracy. +サポートされているライダーはvelodyne 16、64、128ですが、velodyne 32や他のライダーも高い精度で使用できます。 + +1. [アポロ3D障害物検知の説明](https://github.com/ApolloAuto/apollo/blob/r7.0.0/docs/specs/3d_obstacle_perception.md) -1. [apollo 3D Obstacle Perception description](https://github.com/ApolloAuto/apollo/blob/r7.0.0/docs/specs/3d_obstacle_perception.md) ```txt /****************************************************************************** @@ -90,7 +149,8 @@ Supported lidars are velodyne 16, 64 and 128, but you can also use velodyne 32 a ``` 2. [tensorRTWrapper](https://github.com/lewes6369/tensorRTWrapper) : - It is used under the lib directory. + lib ディレクトリ内で使用されます。 + ```txt MIT License @@ -116,7 +176,10 @@ Supported lidars are velodyne 16, 64 and 128, but you can also use velodyne 32 a SOFTWARE. ``` -3. [autoware_perception description](https://github.com/k0suke-murakami/autoware_perception/tree/feature/integration_baidu_seg/lidar_apollo_cnn_seg_detect) +### 3. autoware_perception の説明 + +[GitHub](https://github.com/k0suke-murakami/autoware_perception/tree/feature/integration_baidu_seg/lidar_apollo_cnn_seg_detect) + ```txt /* @@ -136,9 +199,10 @@ Supported lidars are velodyne 16, 64 and 128, but you can also use velodyne 32 a */ ``` -### Special thanks +### 特別謝辞 -- [Apollo Project](https://github.com/ApolloAuto/apollo) +- [Apolloプロジェクト](https://github.com/ApolloAuto/apollo) - [lewes6369](https://github.com/lewes6369) -- [Autoware Foundation](https://github.com/autowarefoundation/autoware) -- [Kosuke Takeuchi](https://github.com/kosuke55) (TIER IV) +- [Autoware財団](https://github.com/autowarefoundation/autoware) +- [竹内 康輔](https://github.com/kosuke55) (TIER IV) + diff --git a/perception/autoware_lidar_centerpoint/README.md b/perception/autoware_lidar_centerpoint/README.md index 471712a637dec..cbd6af73800b4 100644 --- a/perception/autoware_lidar_centerpoint/README.md +++ b/perception/autoware_lidar_centerpoint/README.md @@ -1,122 +1,162 @@ # autoware_lidar_centerpoint -## Purpose +## 目的 -autoware_lidar_centerpoint is a package for detecting dynamic 3D objects. +autoware_lidar_centerpointは、動的3Dオブジェクトを検出するためのパッケージです。 + +## 内部処理やアルゴリズム -## Inner-workings / Algorithms +この実装では、TensorRTによる推論にPointPillarsベースのネットワークを使用しているCenterPoint [1]が使用されています。 -In this implementation, CenterPoint [1] uses a PointPillars-based [2] network to inference with TensorRT. +このモデルは、を使用してトレーニングされました。 -We trained the models using . +## 入出力 -## Inputs / Outputs +### 入力 +- LiDAR点群 -### Input +### 出力 +- クラスID +- Bounding Box +- 速度ベクトル +- 加速度ベクトル -| Name | Type | Description | -| -------------------- | ------------------------------- | ---------------- | -| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | input pointcloud | +| 名称 | タイプ | 説明 | +| ---------------------- | ----------------------------------- | ---------------------------------------- | +| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 入力ポイントクラウド | -### Output +### 出力 -| Name | Type | Description | -| -------------------------- | ------------------------------------------------ | -------------------- | -| `~/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | detected objects | -| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | cyclic time (msg) | -| `debug/processing_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | processing time (ms) | +**計画(Planning)コンポーネントの評価シナリオ** -## Parameters +**目的:** +本シナリオ群は、自動運転ソフトウェアの計画コンポーネントの機能と性能を評価することを目的としています。 -### ML Model Parameters +**シナリオ:** -Note that these parameters are associated with ONNX file, predefined during the training phase. Be careful to change ONNX file as well when changing this parameter. Also, whenever you update the ONNX file, do NOT forget to check these values. +1. **回避(回避距離):** 車両が障害物を回避するときの、各Planningアルゴリズムの性能を評価します。 +2. **停止線(停止位置):** 車両が停止線で停止するときの、Planningアルゴリズムの精度を評価します。 +3. **駐車(最終位置):** 車両が駐車スペースに駐車するときの、Planningアルゴリズムの堅牢性を評価します。 +4. **車線逸脱(逸脱量):** 車両が車線から逸脱するときの、Planningアルゴリズムの応答性を評価します。 +5. **速度逸脱(逸脱量):** 車両が設定された速度を逸脱するときの、Planningアルゴリズムの安定性を評価します。 +6. **加速度逸脱(逸脱量):** 車両が設定された加速度を逸脱するときの、Planningアルゴリズムの滑らかさを評価します。 +7. **急カーブ(最小曲率半径):** 車両が急カーブを走行するときの、Planningアルゴリズムの安全性と快適性を評価します。 +8. **勾配(勾配角度):** 車両が勾配を走行するときの、Planningアルゴリズムの適切さと堅牢性を評価します。 +9. **周囲車両予測(TTC):** 車両が周囲車両と遭遇するときの、Planningアルゴリズムの予測性能と応答時間を評価します。 +10. **ディスタンスセンシング(距離):** 車両が障害物や他の車両との距離を測定するときの、Planningアルゴリズムの精度と信頼性を評価します。 -| Name | Type | Default Value | Description | -| -------------------------------------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------- | -| `model_params.class_names` | list[string] | ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] | list of class names for model outputs | -| `model_params.point_feature_size` | int | `4` | number of features per point in the point cloud | -| `model_params.max_voxel_size` | int | `40000` | maximum number of voxels | -| `model_params.point_cloud_range` | list[double] | [-76.8, -76.8, -4.0, 76.8, 76.8, 6.0] | detection range [min_x, min_y, min_z, max_x, max_y, max_z] [m] | -| `model_params.voxel_size` | list[double] | [0.32, 0.32, 10.0] | size of each voxel [x, y, z] [m] | -| `model_params.downsample_factor` | int | `1` | downsample factor for coordinates | -| `model_params.encoder_in_feature_size` | int | `9` | number of input features to the encoder | -| `model_params.has_variance` | bool | `false` | true if the model outputs pose variance as well as pose for each bbox | -| `model_params.has_twist` | bool | `false` | true if the model outputs velocity as well as pose for each bbox | +**評価指標:** -### Core Parameters +* 各シナリオにおける目標ポイント(回避距離、停止位置、駐車位置など)からの偏差 +* 'post resampling'前のPlanning出力と'post resampling'後のPlanning出力との間の軌跡の滑らかさ +* 車両の自車位置とPlanningが生成する軌跡との間の誤差 +* 計画された速度と加速度と、実際の速度と加速度との間の偏差 +* 計画された軌跡の曲率半径と、実際の軌跡の曲率半径との間の偏差 +* 車両周囲の障害物や他の車両を回避するために必要な回避時間 +* 車両が障害物や他の車両と衝突する可能性のある衝突時間(TTC) -| Name | Type | Default Value | Description | -| ------------------------------------------------ | ------------ | ------------------------- | ------------------------------------------------------------- | -| `encoder_onnx_path` | string | `""` | path to VoxelFeatureEncoder ONNX file | -| `encoder_engine_path` | string | `""` | path to VoxelFeatureEncoder TensorRT Engine file | -| `head_onnx_path` | string | `""` | path to DetectionHead ONNX file | -| `head_engine_path` | string | `""` | path to DetectionHead TensorRT Engine file | -| `build_only` | bool | `false` | shutdown the node after TensorRT engine file is built | -| `trt_precision` | string | `fp16` | TensorRT inference precision: `fp32` or `fp16` | -| `post_process_params.score_threshold` | double | `0.4` | detected objects with score less than threshold are ignored | -| `post_process_params.yaw_norm_thresholds` | list[double] | [0.3, 0.3, 0.3, 0.3, 0.0] | An array of distance threshold values of norm of yaw [rad]. | -| `post_process_params.iou_nms_target_class_names` | list[string] | - | target classes for IoU-based Non Maximum Suppression | -| `post_process_params.iou_nms_search_distance_2d` | double | - | If two objects are farther than the value, NMS isn't applied. | -| `post_process_params.iou_nms_threshold` | double | - | IoU threshold for the IoU-based Non Maximum Suppression | -| `post_process_params.has_twist` | boolean | false | Indicates whether the model outputs twist value. | -| `densification_params.world_frame_id` | string | `map` | the world frame id to fuse multi-frame pointcloud | -| `densification_params.num_past_frames` | int | `1` | the number of past frames to fuse with the current frame | +Autoware Planningコンポーネントの性能評価には、これらのシナリオが利用できます。 -### The `build_only` option +| 名前 | タイプ | 説明 | +| ------------------------ | ------------------------------------------------------ | ------ | +| `~/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | +| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクルタイム (msg) | +| `debug/processing_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 処理時間 (ms) | + +## パラメータ + +### MLモデルパラメータ + +これらのパラメータはONNXファイルに関連付けられており、トレーニングフェーズ中に定義済みです。このパラメータを変更する際は、ONNXファイルも変更してください。また、ONNXファイルを更新する際は、必ずこれらの値を確認してください。 + +| 名称 | タイプ | デフォルト値 | 説明 | +| --------------------------------------- | ------------ | ---------------------------------------------------------- | --------------------------------------------------------------------- | +| `model_params.class_names` | list[string] | ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] | モデル出力のクラス名のリスト | +| `model_params.point_feature_size` | int | `4` | 点群内の各ポイントのフィーチャ数 | +| `model_params.max_voxel_size` | int | `40000` | ボクセルの最大数 | +| `model_params.point_cloud_range` | list[double] | [-76.8, -76.8, -4.0, 76.8, 76.8, 6.0] | 検出範囲 [min_x, min_y, min_z, max_x, max_y, max_z] [m] | +| `model_params.voxel_size` | list[double] | [0.32, 0.32, 10.0] | 各ボクセルのサイズ [x, y, z] [m] | +| `model_params.downsample_factor` | int | `1` | 座標のダウンサンプル係数 | +| `model_params.encoder_in_feature_size` | int | `9` | エンコーダへの入力フィーチャ数 | +| `model_params.has_variance` | bool | `false` | モデルが各バウンディングボックスの姿勢分散と姿勢を出力する場合 `true` | +| `model_params.has_twist` | bool | `false` | モデルが各バウンディングボックスの速度と姿勢を出力する場合 `true` | + +### コア・パラメータ + +| 名前 | タイプ | デフォルト値 | 説明 | +| ------------------------------------------- | -------- | -------------- | ------------------------------------------------------------------ | +| `encoder_onnx_path` | 文字列 | `""` | VoxelFeatureEncoder ONNX ファイルへのパス | +| `encoder_engine_path` | 文字列 | `""` | VoxelFeatureEncoder TensorRT Engine ファイルへのパス | +| `head_onnx_path` | 文字列 | `""` | DetectionHead ONNX ファイルへのパス | +| `head_engine_path` | 文字列 | `""` | DetectionHead TensorRT Engine ファイルへのパス | +| `build_only` | ブール | `false` | TensorRT エンジンファイルが作成されたらノードをシャットダウンする | +| `trt_precision` | 文字列 | `fp16` | TensorRT 推論の精度: `fp32` または `fp16` | +| `post_process_params.score_threshold` | double | `0.4` | スコアが閾値未満の検出オブジェクトは無視される | +| `post_process_params.yaw_norm_thresholds` | doubleのリスト | [0.3, 0.3, 0.3, 0.3, 0.0] | Yaw ノルムの距離閾値の配列 [rad] | +| `post_process_params.iou_nms_target_class_names` | 文字列のリスト | - | IoU ベースの非最大抑制のターゲットクラス | +| `post_process_params.iou_nms_search_distance_2d` | double | - | 2 つ以上のオブジェクトが値よりも遠い場合、NMS は適用されない | +| `post_process_params.iou_nms_threshold` | double | - | IoU ベースの非最大抑制の IoU 閾値 | +| `post_process_params.has_twist` | ブール | false | モデルが出力値を捻じっているかどうかを示す | +| `densification_params.world_frame_id` | 文字列 | `map` | マルチフレーム点群を統合するワールドフレーム ID | +| `densification_params.num_past_frames` | 整数 | `1` | 現在フレームと統合する過去フレームの数 | + +### `build_only` オプション + +`autoware_lidar_centerpoint` ノードには、ONNX ファイルから TensorRT エンジンファイルを構築するための `build_only` オプションがあります。 +Autoware Universe の `.param.yaml` ファイル内のすべての ROS パラメータを移動することが好ましいですが、`build_only` オプションは現時点では `.param.yaml` ファイルに移動されていません。これは、構築をプリタスクとして実行するためのフラグとして使用されることがあるためです。次のコマンドで実行できます。 -The `autoware_lidar_centerpoint` node has `build_only` option to build the TensorRT engine file from the ONNX file. -Although it is preferred to move all the ROS parameters in `.param.yaml` file in Autoware Universe, the `build_only` option is not moved to the `.param.yaml` file for now, because it may be used as a flag to execute the build as a pre-task. You can execute with the following command: ```bash ros2 launch autoware_lidar_centerpoint lidar_centerpoint.launch.xml model_name:=centerpoint_tiny model_path:=/home/autoware/autoware_data/lidar_centerpoint model_param_path:=$(ros2 pkg prefix autoware_lidar_centerpoint --share)/config/centerpoint_tiny.param.yaml build_only:=true ``` -## Assumptions / Known limits +## 仮定/既知の制限 -- The `object.existence_probability` is stored the value of classification confidence of a DNN, not probability. +- `object.existence_probability` は DNN 分類信頼度の値であり、確率ではありません。 -## Trained Models +## トレーニング済みモデル -You can download the onnx format of trained models by clicking on the links below. +以下のリンクをクリックして、トレーニング済みモデルの onnx 形式をダウンロードできます。 - Centerpoint: [pts_voxel_encoder_centerpoint.onnx](https://awf.ml.dev.web.auto/perception/models/centerpoint/v2/pts_voxel_encoder_centerpoint.onnx), [pts_backbone_neck_head_centerpoint.onnx](https://awf.ml.dev.web.auto/perception/models/centerpoint/v2/pts_backbone_neck_head_centerpoint.onnx) - Centerpoint tiny: [pts_voxel_encoder_centerpoint_tiny.onnx](https://awf.ml.dev.web.auto/perception/models/centerpoint/v2/pts_voxel_encoder_centerpoint_tiny.onnx), [pts_backbone_neck_head_centerpoint_tiny.onnx](https://awf.ml.dev.web.auto/perception/models/centerpoint/v2/pts_backbone_neck_head_centerpoint_tiny.onnx) -`Centerpoint` was trained in `nuScenes` (~28k lidar frames) [8] and TIER IV's internal database (~11k lidar frames) for 60 epochs. -`Centerpoint tiny` was trained in `Argoverse 2` (~110k lidar frames) [9] and TIER IV's internal database (~11k lidar frames) for 20 epochs. +`Centerpoint`は、`nuScenes`(約28,000個のライダーフレーム)[8]とTIER IVの内部データベース(約11,000個のライダーフレーム)で60エポックトレーニングしました。 +`Centerpoint tiny`は、`Argoverse 2`(約110,000個のライダーフレーム)[9]とTIER IVの内部データベース(約11,000個のライダーフレーム)で20エポックトレーニングしました。 -## Training CenterPoint Model and Deploying to the Autoware +## CenterPointモデルのトレーニングとAutowareへの展開 -### Overview +### 概要 -This guide provides instructions on training a CenterPoint model using the **mmdetection3d** repository -and seamlessly deploying it within Autoware. +このガイドでは、**mmdetection3d**リポジトリを使用してCenterPointモデルをトレーニングし、Autoware内にシームレスに展開する方法について説明します。 -### Installation +### インストール -#### Install prerequisites +#### 前提条件のインストール -**Step 1.** Download and install Miniconda from the [official website](https://mmpretrain.readthedocs.io/en/latest/get_started.html). +**ステップ1.** [公式ウェブサイト](https://mmpretrain.readthedocs.io/en/latest/get_started.html)からMinicondaをダウンロードしてインストールします。 + +**ステップ2.** conda仮想環境を作成してアクティブにします -**Step 2.** Create a conda virtual environment and activate it ```bash conda create --name train-centerpoint python=3.8 -y conda activate train-centerpoint ``` -**Step 3.** Install PyTorch +**ステップ 3.** PyTorch をインストール + +PyTorch がインストール済みで、Autoware の要件である CUDA 11.6 に対応していることを確認してください。 -Please ensure you have PyTorch installed, and compatible with CUDA 11.6, as it is a requirement for current Autoware. ```bash conda install pytorch==1.13.1 torchvision==0.14.1 pytorch-cuda=11.6 -c pytorch -c nvidia ``` -#### Install mmdetection3d +#### mmdetection3dのインストール + +**ステップ 1.** MIMを使用してMMEngine、MMCV、MMDetectionをインストールします。 -**Step 1.** Install MMEngine, MMCV, and MMDetection using MIM ```bash pip install -U openmim @@ -125,11 +165,12 @@ mim install 'mmcv>=2.0.0rc4' mim install 'mmdet>=3.0.0rc5, <3.3.0' ``` -**Step 2.** Install mmdetection3d forked repository +**手順 2.** mmdetection3d フォークリポジトリのインストール + +mmdetection3d リポジトリをフォークし、いくつかの貴重な機能強化を加えました。 +特に、PointPillar z ボクセルの特徴量の入力を省略できるようにし、元の論文との互換性を保ちました。 +さらに、追加機能として PyTorch から ONNX へのコンバーターと T4 形式のリーダーを統合しました。 -Introduced several valuable enhancements in our fork of the mmdetection3d repository. -Notably, we've made the PointPillar z voxel feature input optional to maintain compatibility with the original paper. -In addition, we've integrated a PyTorch to ONNX converter and a T4 format reader for added functionality. ```bash git clone https://github.com/autowarefoundation/mmdetection3d.git @@ -137,76 +178,76 @@ cd mmdetection3d pip install -v -e . ``` -#### Use Training Repository with Docker +#### Dockerを使ってトレーニングレポジトリを使用する + +また、Dockerを使用してmmdetection3dレポジトリを実行できます。mmdetection3dレポジトリとその依存関係を含むDockerイメージを作成するためのDockerfileを提供しています。 -Alternatively, you can use Docker to run the mmdetection3d repository. We provide a Dockerfile to build a Docker image with the mmdetection3d repository and its dependencies. +mmdetection3dレポジトリのフォークをクローンする -Clone fork of the mmdetection3d repository ```bash git clone https://github.com/autowarefoundation/mmdetection3d.git ``` -Build the Docker image by running the following command: +以下のコマンドを実行して Docker イメージを構築します。 + ```bash cd mmdetection3d docker build -t mmdetection3d -f docker/Dockerfile . ``` -Run the Docker container: +Dockerコンテナを実行する: + ```bash docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmdetection3d/data mmdetection3d ``` -### Preparing NuScenes dataset for training +### NuScenes データセットをトレーニング用に準備する -**Step 1.** Download the NuScenes dataset from the [official website](https://www.nuscenes.org/download) and extract the dataset to a folder of your choice. +**手順 1.** [公式サイト](https://www.nuscenes.org/download) から NuScenes データセットをダウンロードし、任意のフォルダに解凍します。 -**Note:** The NuScenes dataset is large and requires significant disk space. Ensure you have enough storage available before proceeding. +**注:** NuScenes データセットは大きく、大量のディスク容量が必要です。処理に取りかかる前に、十分な容量が確保されていることを確認してください。 + +**手順 2.** データセットフォルダにシンボリックリンクを作成する -**Step 2.** Create a symbolic link to the dataset folder ```bash ln -s /path/to/nuscenes/dataset/ /path/to/mmdetection3d/data/nuscenes/ ``` -**Step 3.** Prepare the NuScenes data by running: +**ステップ 3.** NuScenesデータを実行して準備: + ```bash cd mmdetection3d python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes ``` -### Training CenterPoint with NuScenes Dataset +### NuScenes データセットによる CenterPoint のトレーニング -#### Prepare the config file +#### 設定ファイルの用意 -The configuration file that illustrates how to train the CenterPoint model with the NuScenes dataset is -located at `mmdetection3d/projects/AutowareCenterPoint/configs`. This configuration file is a derived version of -[this centerpoint configuration file](https://github.com/autowarefoundation/mmdetection3d/blob/5c0613be29bd2e51771ec5e046d89ba3089887c7/configs/centerpoint/centerpoint_pillar02_second_secfpn_head-circlenms_8xb4-cyclic-20e_nus-3d.py) -from mmdetection3D. -In this custom configuration, the **use_voxel_center_z parameter** is set as **False** to deactivate the z coordinate of the voxel center, -aligning with the original paper's specifications and making the model compatible with Autoware. Additionally, the filter size is set as **[32, 32]**. +NuScenes データセットを使用して CenterPoint モデルをトレーニングする方法を説明する設定ファイルは、`mmdetection3d/projects/AutowareCenterPoint/configs` にあります。この設定ファイルは、[mmdetection3D のこの centerpoint 設定ファイル](https://github.com/autowarefoundation/mmdetection3d/blob/5c0613be29bd2e51771ec5e046d89ba3089887c7/configs/centerpoint/centerpoint_pillar02_second_secfpn_head-circlenms_8xb4-cyclic-20e_nus-3d.py) から派生したバージョンです。 +このカスタム設定では、**use_voxel_center_z パラメーター**が **False** に設定されており、ボクセルの中心点の z 座標が無効になっています。これにより、元の論文の仕様に沿っており、モデルを Autoware と互換性を持たせます。さらに、フィルターのサイズは **[32, 32]** に設定されています。 -The CenterPoint model can be tailored to your specific requirements by modifying various parameters within the configuration file. -This includes adjustments related to preprocessing operations, training, testing, model architecture, dataset, optimizer, learning rate scheduler, and more. +CenterPoint モデルは、設定ファイル内のさまざまなパラメーターを変更することで、特定の要件に合わせて調整できます。これには、前処理操作、トレーニング、テスト、モデルアーキテクチャ、データセット、オプティマイザー、学習率スケジューラーなどに関連する調整が含まれます。 + +#### トレーニングの開始 -#### Start training ```bash python tools/train.py projects/AutowareCenterPoint/configs/centerpoint_custom.py --work-dir ./work_dirs/centerpoint_custom ``` -#### Evaluation of the trained model +#### 学習モデルの評価 + +評価目的で、車両からキャプチャしたサンプル・データセットが含まれています。このデータセットは、以下のLiDARセンサーで構成されています。 +1 x Velodyne VLS128、4 x Velodyne VLP16、1 x Robosense RS Bpearl。このデータセットは600のLiDARフレームを含んでおり、5つの異なるクラス、6905台の車、3951人の歩行者、75人の自転車乗り、162台のバス、326台のトラックの3Dアノテーションが含まれています。サンプル・データセットでは、フレームは2秒ごとに2フレームずつアノテーションされます。このデータセットは、モデルの学習、評価、微調整など、幅広い目的に使用できます。T4フォーマットで構成されています。 -For evaluation purposes, we have included a sample dataset captured from the vehicle which consists of the following LiDAR sensors: -1 x Velodyne VLS128, 4 x Velodyne VLP16, and 1 x Robosense RS Bpearl. This dataset comprises 600 LiDAR frames and encompasses 5 distinct classes, 6905 cars, 3951 pedestrians, -75 cyclists, 162 buses, and 326 trucks 3D annotation. In the sample dataset, frames are annotated as 2 frames for each second. You can employ this dataset for a wide range of purposes, -including training, evaluation, and fine-tuning of models. It is organized in the T4 format. +##### サンプル・データセットのダウンロード -##### Download the sample dataset ```bash wget https://autoware-files.s3.us-west-2.amazonaws.com/dataset/lidar_detection_sample_dataset.tar.gz @@ -216,44 +257,41 @@ tar -xvf lidar_detection_sample_dataset.tar.gz ln -s /PATH/TO/DATASET/ /PATH/TO/mmdetection3d/data/tier4_dataset/ ``` -##### Prepare dataset and evaluate trained model +##### データセットの準備と、トレーニングされたモデルの評価 -Create `.pkl` files for training, evaluation, and testing. +トレーニング、評価、テスト用の `.pkl` ファイルを作成します。 + +データセットは T4Dataset 仕様に従ってフォーマットされており、「sample_dataset」をそのバージョンの 1 つとして指定します。 -The dataset was formatted according to T4Dataset specifications, with 'sample_dataset' designated as one of its versions. ```bash python tools/create_data.py T4Dataset --root-path data/sample_dataset/ --out-dir data/sample_dataset/ --extra-tag T4Dataset --version sample_dataset --annotation-hz 2 ``` -Run evaluation +評価を実行する + ```bash python tools/test.py projects/AutowareCenterPoint/configs/centerpoint_custom_test.py /PATH/OF/THE/CHECKPOINT --task lidar_det ``` -Evaluation results could be relatively low because of the e to variations in sensor modalities between the sample dataset -and the training dataset. The model's training parameters are originally tailored to the NuScenes dataset, which employs a single lidar -sensor positioned atop the vehicle. In contrast, the provided sample dataset comprises concatenated point clouds positioned at -the base link location of the vehicle. +サンプルデータセットとトレーニングデータセットの間のセンサーモダリティのばらつきにより、評価の結果が比較的低くなる可能性があります。モデルのトレーニングパラメータはもともと、車両上部に単一のLiDARセンサーを搭載したNuScenesデータセットに合わせて調整されています。一方、提供されたサンプルデータセットは、車両のベースリンクの位置に配置された連結ポイントクラウドで構成されています。 + +### AutowareへのCenterPointモデルのデプロイ -### Deploying CenterPoint model to Autoware +#### CenterPoint PyTorchモデルをONNX形式に変換する -#### Convert CenterPoint PyTorch model to ONNX Format +autoware_lidar_centerpointの実装では、ONNXモデルを2つ入力として必要とします。ボクセルエンコーダーとCenterPointモデルのバックボーン・ネック・ヘッドなど、ネットワークの他の側面は外部的に実装されています。mmdetection3dリポジトリのフォークの下で、CenterPointモデルをAutoware互換のONNX形式に変換するスクリプトを用意しました。これは `mmdetection3d/projects/AutowareCenterPoint` ファイルにあります。 -The autoware_lidar_centerpoint implementation requires two ONNX models as input the voxel encoder and the backbone-neck-head of the CenterPoint model, other aspects of the network, -such as preprocessing operations, are implemented externally. Under the fork of the mmdetection3d repository, -we have included a script that converts the CenterPoint model to Autoware compatible ONNX format. -You can find it in `mmdetection3d/projects/AutowareCenterPoint` file. ```bash python projects/AutowareCenterPoint/centerpoint_onnx_converter.py --cfg projects/AutowareCenterPoint/configs/centerpoint_custom.py --ckpt work_dirs/centerpoint_custom/YOUR_BEST_MODEL.pth --work-dir ./work_dirs/onnx_models ``` -#### Create the config file for the custom model +#### カスタムモデルの設定ファイルを生成 + +autoware_lidar_centerpointノードの設定ファイルディレクトリ内に**centerpoint_custom.param.yaml**という新しい設定ファイルを作成する。トレーニング設定ファイルに従ってpoint_cloud_range、point_feature_size、voxel_sizeなどの設定ファイルのパラメータを設定する。 -Create a new config file named **centerpoint_custom.param.yaml** under the config file directory of the autoware_lidar_centerpoint node. Sets the parameters of the config file like -point_cloud_range, point_feature_size, voxel_size, etc. according to the training config file. ```yaml /**: @@ -273,7 +311,8 @@ point_cloud_range, point_feature_size, voxel_size, etc. according to the trainin yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] ``` -#### Launch the lidar_centerpoint node +#### lidar_centerpoint ノードの起動 + ```bash cd /YOUR/AUTOWARE/PATH/Autoware @@ -281,46 +320,46 @@ source install/setup.bash ros2 launch autoware_lidar_centerpoint lidar_centerpoint.launch.xml model_name:=centerpoint_custom model_path:=/PATH/TO/ONNX/FILE/ ``` -### Changelog +### 変更履歴 #### v1 (2022/07/06) -| Name | URLs | Description | -| ------------------ | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `centerpoint` | [pts_voxel_encoder][v1-encoder-centerpoint]
[pts_backbone_neck_head][v1-head-centerpoint] | There is a single change due to the limitation in the implementation of this package. `num_filters=[32, 32]` of `PillarFeatureNet` | -| `centerpoint_tiny` | [pts_voxel_encoder][v1-encoder-centerpoint-tiny]
[pts_backbone_neck_head][v1-head-centerpoint-tiny] | The same model as `default` of `v0`. | +| 名称 | URL | 説明 | +| ------------------- | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `centerpoint` | [pts_voxel_encoder][v1-encoder-centerpoint]
[pts_backbone_neck_head][v1-head-centerpoint] | このパッケージの実装の制限のため、1 つの変更があります。`PillarFeatureNet` の `num_filters=[32, 32]` | +| `centerpoint_tiny` | [pts_voxel_encoder][v1-encoder-centerpoint-tiny]
[pts_backbone_neck_head][v1-head-centerpoint-tiny] | `v0`の`default`と同じモデル | -These changes are compared with [this configuration](https://github.com/tianweiy/CenterPoint/blob/v0.2/configs/waymo/pp/waymo_centerpoint_pp_two_pfn_stride1_3x.py). +以下の変更はこの[構成](https://github.com/tianweiy/CenterPoint/blob/v0.2/configs/waymo/pp/waymo_centerpoint_pp_two_pfn_stride1_3x.py)と比較されています。 #### v0 (2021/12/03) -| Name | URLs | Description | -| --------- | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -| `default` | [pts_voxel_encoder][v0-encoder-default]
[pts_backbone_neck_head][v0-head-default] | There are two changes from the original CenterPoint architecture. `num_filters=[32]` of `PillarFeatureNet` and `ds_layer_strides=[2, 2, 2]` of `RPN` | +| 名前 | URL | 説明 | +| --------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `default` | [pts_voxel_encoder][v0-encoder-default]
[pts_backbone_neck_head][v0-head-default] | オリジナルのCenterPointアーキテクチャから変更が2つある(`PillarFeatureNet`の`num_filters=[32]`と`RPN`の`ds_layer_strides=[2, 2, 2]`) | -## (Optional) Error detection and handling +## (省略可能) エラー検出と処理 - -## (Optional) Performance characterization +## (省略可能) パフォーマンス特性評価 - -## References/External links +## 参照/外部リンク [1] Yin, Tianwei, Xingyi Zhou, and Philipp Krähenbühl. "Center-based 3d object detection and tracking." arXiv preprint arXiv:2006.11275 (2020). @@ -340,13 +379,13 @@ Example: [9] -## (Optional) Future extensions / Unimplemented parts +## (省略可能) 今後の拡張/未実装部分 - [v0-encoder-default]: https://awf.ml.dev.web.auto/perception/models/pts_voxel_encoder_default.onnx @@ -356,13 +395,56 @@ Example: [v1-encoder-centerpoint-tiny]: https://awf.ml.dev.web.auto/perception/models/centerpoint/v1/pts_voxel_encoder_centerpoint_tiny.onnx [v1-head-centerpoint-tiny]: https://awf.ml.dev.web.auto/perception/models/centerpoint/v1/pts_backbone_neck_head_centerpoint_tiny.onnx -## Acknowledgment: deepen.ai's 3D Annotation Tools Contribution +## 謝辞: deepen.ai の 3D アノテーションツールに関する貢献 + +## 法的情報 + +_nuScenesデータセットは、クリエイティブコモンズ帰属-非営利-継承同様条件4.0国際公共ライセンス下で非商用利用のために公開されています。 +追加利用規約はで確認できます。 +商用ライセンスについてのお問い合わせはまでご連絡ください。_ + +## 自動運転ソフトウェアのアーキテクチャ + +Autowareのアーキテクチャは、主に以下のようなコンポーネントから構成されます。 + +**ハードウェア層** + +- センサー(カメラ、レーダー、LiDARなど) +- タスクを実行するためのコンピューティングリソース + +**ソフトウェア層** + +- Perception + - 物体検出およびセグメンテーション + - 車線検出 + - 道路区画検出 +- Fusion + - さまざまなセンサーからのデータを統合して、周囲のより包括的なモデルを生成 +- Localization + - 車両の自車位置を求める +- Planning + - 安全で効率的な経路を生成 + - 道路上の障害物を回避 +- Control + - 車両の運動を制御 + - 加速、減速、ステアリングを担当 + +**Human-Machine Interface(HMI)** + +- ドライバーとの対話のためのインターフェイス +- 車両の現在のステータスと、ソフトウェアが作成した計画に関する информацию表示 + +### コンポーネント間のインタラクション + +コンポーネントは、次の順序でインタラクトします。 + +1. Perceptionモジュールは、センサーからのデータを処理して、周囲に関する情報を出力します。 +2. Fusionモジュールは、Perceptionモジュールからのデータと、内部マップ、および自己位置推定情報などの他の情報源を組み合わせて、周囲の統一されたモデルを作成します。 +3. Planningモジュールは、Fusionモジュールからの周囲モデルを使用して、安全で効率的な経路を生成します。 +4. Controlモジュールは、Planningモジュールからの経路を「post resampling」して、車両の運動を制御するための低レベルの制御コマンドを生成します。 +5. HMIは、車両の現在のステータスと、ソフトウェアが作成した計画に関する情報を表示します。 -Special thanks to [Deepen AI](https://www.deepen.ai/) for providing their 3D Annotation tools, which have been instrumental in creating our sample dataset. +このインタラクションにより、Autowareは周囲を感知し、安全で効率的な経路を生成し、車両を制御することができ、自動運転の実現に不可欠です。 -## Legal Notice +このドキュメントでは、Autowareのアーキテクチャの詳細について説明します。また、コンポーネントのインタラクションと、それらが自動運転システム全体にどのように寄与するかについても説明します。 -_The nuScenes dataset is released publicly for non-commercial use under the Creative -Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License. -Additional Terms of Use can be found at . -To inquire about a commercial license please contact ._ diff --git a/perception/autoware_lidar_transfusion/README.md b/perception/autoware_lidar_transfusion/README.md index 095170efa66c9..18ce3ba78c3cc 100644 --- a/perception/autoware_lidar_transfusion/README.md +++ b/perception/autoware_lidar_transfusion/README.md @@ -1,69 +1,171 @@ # autoware_lidar_transfusion -## Purpose +## 目的 -The `autoware_lidar_transfusion` package is used for 3D object detection based on lidar data (x, y, z, intensity). +`autoware_lidar_transfusion`パッケージは、LiDARデータ(x, y, z、強度)に基づく3Dオブジェクト検出に使用されます。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -The implementation bases on TransFusion [1] work. It uses TensorRT library for data process and network inference. +実装は[1]のTransFusionの作業に基づいています。データ処理とネットワーク推論にはTensorRTライブラリを使用しています。 -We trained the models using . +モデルはを使用してトレーニングしました。 -## Inputs / Outputs +## 入力/出力 -### Input +### 入力 -| Name | Type | Description | +| 名称 | タイプ | 説明 | | -------------------- | ------------------------------- | ----------------- | -| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | Input pointcloud. | +| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 入力点群。 | -### Output +### 出力 -| Name | Type | Description | -| -------------------------------------- | ------------------------------------------------ | --------------------------- | -| `~/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | Detected objects. | -| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Cyclic time (ms). | -| `debug/pipeline_latency_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Pipeline latency time (ms). | -| `debug/processing_time/preprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Preprocess (ms). | -| `debug/processing_time/inference_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Inference time (ms). | -| `debug/processing_time/postprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Postprocess time (ms). | -| `debug/processing_time/total_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Total processing time (ms). | +**自己位置推定モジュール** -## Parameters +**目的:** -### TransFusion node +* センサーからのセンサデータから自己位置を推定する。 +* Planningモジュールに自己位置を提供する。 + +**入力:** + +* IMUデータ +* GNSSデータ +* オドメトリデータ +* カメラ画像(オプション) + +**出力:** + +* 自車位置 +* 自己位置の不確かさ + +**アルゴリズム:** + +自己位置推定モジュールは、次のステップで動作します。 + +1. IMU、GNSS、オドメトリデータの統合。 +2. カメラ画像(使用可能な場合)を使用した自己位置の強化。 +3. エKFまたはPFを使用して自己位置と不確かさを推定する。 + +**障害検出モジュール** + +**目的:** + +* センサーからのデータを処理し、エゴカーの周囲の障害物を検出する。 +* Planningモジュールに障害物の情報を提供する。 + +**入力:** + +* レーダーデータ +* カメラ画像 +* LIDARデータ + +**出力:** + +* 障害物の位置と形状 +* 障害物の速度と加速度 + +**アルゴリズム:** + +障害検出モジュールは、次のアルゴリズムを使用して障害物を検出します。 + +* **点群処理:** LIDARデータを使用して点群を作成します。 +* **クラスタリング:** 点群をクラスタ(障害物)にグループ化します。 +* **分類:** カメラ画像とレーダーデータを使用して、クラスタを障害物として分類します。 + +**Planningモジュール** + +**目的:** + +* 自車位置と障害物の情報に基づき、経路を計画し、次のような制御コマンドを生成する。 +* ステアリング角 +* アクセル/ブレーキコマンド + +**入力:** + +* 自車位置 +* 障害物の情報 +* 地図データ + +**出力:** + +* 制御コマンド + +**アルゴリズム:** + +Planningモジュールは、次のアルゴリズムを使用して経路を計画し、制御コマンドを生成します。 + +* **空間探索法:** 次の目的地までの可能な経路を探索します。 +* **コスト関数:** 各経路のコストを計算し、障害物逸脱量、速度逸脱量、加速度逸脱量を考慮します。 +* **最適化アルゴリズム:** コストが最小となる経路を選択します。 +* **'post resampling'` による経路の平滑化。 + +**制御モジュール** + +**目的:** + +* Planningモジュールから生成された制御コマンドを実行する。 +* ステアリングシステムと動力伝達システムを制御する。 + +**入力:** + +* 制御コマンド + +**出力:** + +* 車両の運動(ステアリング角、速度、加速度) + +**アルゴリズム:** + +制御モジュールは、PID制御器または状態フィードバックコントローラを使用して制御コマンドを実行します。 + +| 名称 | タイプ | 説明 | +|---|---|---| +| `/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出されたオブジェクト | +| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクル時間 (ms) | +| `debug/pipeline_latency_ms` | `tier4_debug_msgs::msg::Float64Stamped` | パイプライン遅延時間 (ms) | +| `debug/processing_time/preprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 前処理時間 (ms) | +| `debug/processing_time/inference_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 推論時間 (ms) | +| `debug/processing_time/postprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 後処理時間 (ms) | +| `debug/processing_time/total_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 総処理時間 (ms) | + +## パラメーター + +### TransFusionノード {{ json_to_markdown("perception/autoware_lidar_transfusion/schema/transfusion.schema.dummy.json") }} -### TransFusion model +### TransFusionモデル {{ json_to_markdown("perception/autoware_lidar_transfusion/schema/transfusion_ml_package.schema.json") }} -### Detection class remapper +### 検出クラスリマッパー {{ json_to_markdown("perception/autoware_lidar_transfusion/schema/detection_class_remapper.schema.json") }} -### The `build_only` option +### `build_only`オプション + +`autoware_lidar_transfusion`ノードには、ONNXファイルからTensorRTエンジンファイルを構築するための`build_only`オプションがあります。 +Autoware Universeの`.param.yaml`ファイルにすべてのROSパラメータを移動することが望ましいですが、`build_only`オプションは現在`.param.yaml`ファイルに移動されていません。これは、ビルドを事前タスクとして実行するためのフラグとして使用される可能性があるためです。次のコマンドで実行できます。 -The `autoware_lidar_transfusion` node has `build_only` option to build the TensorRT engine file from the ONNX file. -Although it is preferred to move all the ROS parameters in `.param.yaml` file in Autoware Universe, the `build_only` option is not moved to the `.param.yaml` file for now, because it may be used as a flag to execute the build as a pre-task. You can execute with the following command: ```bash ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml build_only:=true ``` -### The `log_level` option +### `log_level` オプション + +`autoware_lidar_transfusion` のデフォルトのログ重要度レベルは `info` です。デバッグの目的では、開発者は `log_level` パラメータを使用して重要度のレベルを下げることができます: -The default logging severity level for `autoware_lidar_transfusion` is `info`. For debugging purposes, the developer may decrease severity level using `log_level` parameter: ```bash ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml log_level:=debug ``` -## Assumptions / Known limits +## 仮定 / 公知の制限 + +このライブラリは、生のクラウドデータ (バイト) で動作します。入力ポイントクラウドメッセージのフォーマットは次のとおりであると想定されます。 -This library operates on raw cloud data (bytes). It is assumed that the input pointcloud message has following format: ```python [ @@ -74,46 +176,47 @@ This library operates on raw cloud data (bytes). It is assumed that the input po ] ``` -This input may consist of other fields as well - shown format is required minimum. -For debug purposes, you can validate your pointcloud topic using simple command: +この入力には、他のフィールドが含まれる場合もあります。表示されている形式は必要な最小限です。 +デバッグの目的で、次のシンプルなコマンドを使用してポイントクラウド・トピックを検証することができます。 + ```bash ros2 topic echo --field fields ``` -## Trained Models +## 学習済みモデル -You can download the onnx format of trained models by clicking on the links below. +以下のリンクをクリックすると、学習済みモデルのonnx形式をダウンロードできます。 - TransFusion: [transfusion.onnx](https://awf.ml.dev.web.auto/perception/models/transfusion/t4xx1_90m/v2/transfusion.onnx) -The model was trained in TIER IV's internal database (~11k lidar frames) for 50 epochs. +このモデルは、TIER IV社内データベース(約 11,000 個のLiDARフレーム)で 50 エポックの学習を行いました。 -### Changelog +### 更新履歴 -## (Optional) Error detection and handling +## (任意) エラー検出と処理 - -## (Optional) Performance characterization +## (任意) パフォーマンス特性評価 - -## References/External links +## 参考文献/外部リンク [1] Xuyang Bai, Zeyu Hu, Xinge Zhu, Qingqiu Huang, Yilun Chen, Hongbo Fu and Chiew-Lan Tai. "TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers." arXiv preprint arXiv:2203.11496 (2022). @@ -125,11 +228,12 @@ Example: [5] -## (Optional) Future extensions / Unimplemented parts +## (任意) 将来の拡張機能/未実装部分 - + diff --git a/perception/autoware_map_based_prediction/README.md b/perception/autoware_map_based_prediction/README.md index bd063050b9241..fea4ce7dd6038 100644 --- a/perception/autoware_map_based_prediction/README.md +++ b/perception/autoware_map_based_prediction/README.md @@ -1,263 +1,344 @@ -# map_based_prediction +## map_based_prediction -## Role +## 機能 -`map_based_prediction` is a module to predict the future paths (and their probabilities) of other vehicles and pedestrians according to the shape of the map and the surrounding environment. +`map_based_prediction`モジュールは、地図の形状と周囲環境に応じて、他の車両や歩行者の未来の経路(とその確率)を予測します。 -## Assumptions +## 仮定 -- The following information about the target obstacle is needed - - Label (type of person, car, etc.) - - The object position in the current time and predicted position in the future time. -- The following information about the surrounding environment is needed - - Road network information with Lanelet2 format +- 標的障礙物に関する以下の情報が必要 + - ラベル(人物、自動車などのタイプ) + - 現在の時間でのオブジェクトの位置と、将来の時間の予測位置 +- 周囲環境に関する以下の情報が必要 + - Lanelet2形式の道路網情報 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -### Flow chart +### フローチャート
-### Path prediction for road users +### 道路利用者の経路予測 -#### Remove old object history +#### 古いオブジェクト履歴の削除 -Store time-series data of objects to determine the vehicle's route and to detect lane change for several duration. Object Data contains the object's position, speed, and time information. +オブジェクトの位置、速度、時刻などの情報を格納したオブジェクトのタイムシリーズデータを格納して、車両の経路を決定し、数時間の車線変更を検出します。 -#### Get current lanelet and update Object history +#### 現在のレーンの取得とオブジェクト履歴の更新 -Search one or more lanelets satisfying the following conditions for each target object and store them in the ObjectData. +各標的オブジェクトに対して、以下の条件を満たす1つ以上のレーンレットを検索し、ObjectDataに格納します。 -- The CoG of the object must be inside the lanelet. -- The centerline of the lanelet must have two or more points. -- The angle difference between the lanelet and the direction of the object must be within the threshold given by the parameters. - - The angle flip is allowed, the condition is `diff_yaw < threshold or diff_yaw > pi - threshold`. -- The lanelet must be reachable from the lanelet recorded in the past history. +- オブジェクトの重心はレーンレット内に存在する必要があります。 +- レーンレットの中心線には2つ以上の点が必要です。 +- レーンレットとオブジェクトの方向の角度差は、パラメータで指定されたしきい値以内である必要があります。 + - 角度の反転は許可され、条件は`diff_yaw < threshold or diff_yaw > pi - threshold`です。 +- レーンレットは、過去の履歴に記録されたレーンレットから到達可能である必要があります。 -#### Get predicted reference path +#### 予測された基準経路の取得 -- Get reference path: - - Create a reference path for the object from the associated lanelet. -- Predict object maneuver: - - Generate predicted paths for the object. - - Assign probability to each maneuver of `Lane Follow`, `Left Lane Change`, and `Right Lane Change` based on the object history and the reference path obtained in the first step. - - Lane change decision is based on two domains: - - Geometric domain: the lateral distance between the center of gravity of the object and left/right boundaries of the lane. - - Time domain: estimated time margin for the object to reach the left/right bound. +- 基準経路の取得: + - 関連付けられたレーンレットからオブジェクトの基準経路を作成します。 +- オブジェクト機動の予測: + - オブジェクトの予測経路を生成します。 + - オブジェクトの履歴と最初のステップで取得した基準経路に基づいて、`Lane Follow`、`Left Lane Change`、`Right Lane Change`のそれぞれの機動に確率を割り当てます。 + - 車線変更の決定は、2つのドメインに基づいています。 + - 幾何学的ドメイン:オブジェクトの重心とレーンの左/右境界との横方向距離 + - 時間ドメイン:オブジェクトが左/右境界に到達するまでの推定時間マージン -The conditions for left lane change detection are: +左車線変更検出の条件は次のとおりです。 -- Check if the distance to the left lane boundary is less than the distance to the right lane boundary. -- Check if the distance to the left lane boundary is less than a `dist_threshold_to_bound_`. -- Check if the lateral velocity direction is towards the left lane boundary. -- Check if the time to reach the left lane boundary is less than `time_threshold_to_bound_`. +- 左車線境界までの距離が右車線境界までの距離よりも小さいか確認します。 +- 左車線境界までの距離が`dist_threshold_to_bound_`よりも小さいか確認します。 +- 横方向速度方向が左車線境界に向かっていないか確認します。 +- 左車線境界に到達するまでの時間が`time_threshold_to_bound_`よりも小さいか確認します。 -Lane change logics is illustrated in the figure below.An example of how to tune the parameters is described later. +車線変更のロジックは、以下の図に示されています。パラメータの調整方法の例は、後で説明します。 -![lane change detection](./media/lane_change_detection.drawio.svg) +![車線変更検出](./media/lane_change_detection.drawio.svg) -- Calculate object probability: - - The path probability obtained above is calculated based on the current position and angle of the object. -- Refine predicted paths for smooth movement: - - The generated predicted paths are recomputed to take the vehicle dynamics into account. - - The path is calculated with minimum jerk trajectory implemented by 4th/5th order spline for lateral/longitudinal motion. +- **オブジェクト確率の計算:** + - 上記で得られた経路確率は、オブジェクトの自車位置と角度に基づいて計算されます。 +- **スムーズな動作のための予測経路の微調整:** + - 生成された予測経路は、車両のダイナミクスを考慮するために再計算されます。 + - 経路は、横方向/縦方向の運動に対して 4 次/5 次スプラインで実装された最小ジャーク軌道で計算されます。 -### Tuning lane change detection logic +### 車線変更検出ロジックの調整 -Currently we provide three parameters to tune lane change detection: +現在、車線変更検出を調整するためのパラメータは 3 つあります。 -- `dist_threshold_to_bound_`: maximum distance from lane boundary allowed for lane changing vehicle -- `time_threshold_to_bound_`: maximum time allowed for lane change vehicle to reach the boundary -- `cutoff_freq_of_velocity_lpf_`: cutoff frequency of low pass filter for lateral velocity +- `dist_threshold_to_bound_`: 車線変更車両が許容される車線境界からの最大距離 +- `time_threshold_to_bound_`: 車線変更車両が境界に到達できる最大時間 +- `cutoff_freq_of_velocity_lpf_`: 横方向速度のローパスフィルタのカットオフ周波数 -You can change these parameters in rosparam in the table below. +これらのパラメータは、以下の表に示すように ROS パラメータで変更できます。 -| param name | default value | -| --------------------------------------------------- | ------------- | -| `dist_threshold_for_lane_change_detection` | `1.0` [m] | -| `time_threshold_for_lane_change_detection` | `5.0` [s] | -| `cutoff_freq_of_velocity_for_lane_change_detection` | `0.1` [Hz] | +| 設定名 | デフォルト値 | +| ---------------------------------------------------- | ------------- | +| `レーン変更検出の距離閾値` | `1.0` [m] | +| `レーン変更検出の時間閾値` | `5.0` [s] | +| `レーン変更検出用速度のカットオフ周波数` | `0.1` [Hz] | -#### Tuning threshold parameters +#### しきい値パラメータの調整 -Increasing these two parameters will slow down and stabilize the lane change estimation. +次の 2 つのパラメータを増やすと、車線変更推定の速度が低下し、安定します。 -Normally, we recommend tuning only `time_threshold_for_lane_change_detection` because it is the more important factor for lane change decision. +通常は `time_threshold_for_lane_change_detection` のみを調整することを推奨します。車線変更の判断において、より重要な要素だからです。 -#### Tuning lateral velocity calculation +#### 横方向速度の計算の調整 -Lateral velocity calculation is also a very important factor for lane change decision because it is used in the time domain decision. +横方向速度の計算も車線変更判断において非常に重要な要素です。時間領域判断で使用されるからです。 -The predicted time to reach the lane boundary is calculated by +車線境界線に達する予測時間は、次の式で計算されます。 $$ t_{predicted} = \dfrac{d_{lat}}{v_{lat}} $$ -where $d_{lat}$ and $v_{lat}$ represent the lateral distance to the lane boundary and the lateral velocity, respectively. +ここで $d_{lat}$ と $v_{lat}$ は、それぞれ車線境界線までの横方向距離と横方向速度を表します。 -Lowering the cutoff frequency of the low-pass filter for lateral velocity will make the lane change decision more stable but slower. Our setting is very conservative, so you may increase this parameter if you want to make the lane change decision faster. +横方向速度に対するローパスフィルタのカットオフ周波数を下げると、車線変更判断が安定しますが遅くなります。設定は非常に慎重ですが、車線変更判断を早くしたい場合はこのパラメータを大きくできます。 -For the additional information, here we show how we calculate lateral velocity. +参考までに、横方向速度の計算方法を示します。 -| lateral velocity calculation method | equation | description | -| ------------------------------------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [**applied**] time derivative of lateral distance | $\dfrac{\Delta d_{lat}}{\Delta t}$ | Currently, we use this method to deal with winding roads. Since this time differentiation easily becomes noisy, we also use a low-pass filter to get smoothed velocity. | -| [not applied] Object Velocity Projection to Lateral Direction | $v_{obj} \sin(\theta)$ | Normally, object velocities are less noisy than the time derivative of lateral distance. But the yaw difference $\theta$ between the lane and object directions sometimes becomes discontinuous, so we did not adopt this method. | +| 横速度計算手法 | 式 | 説明 | +| ------------------------------------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [**適用**済み] 横距離のタイムデリバティブ | $\dfrac{\Delta d_{lat}}{\Delta t}$ | 現在、この手法は曲がりくねった道路に対処するために使用されています。この時間微分は容易にノイズを生じるため、低域通過フィルターも使用して速度を滑らかにしています。 | +| [適用なし] オブジェクトの速度の横方向への投影 | $v_{obj} \sin(\theta)$ | 通常、オブジェクトの速度は横距離のタイムデリバティブよりもノイズが少なくなります。ただし、車線とオブジェクトの方向のヨー角差 $\theta$ が時々不連続になるため、この手法を採用しませんでした。 | -Currently, we use the upper method with a low-pass filter to calculate lateral velocity. +現在、ローパスフィルターを使用した高階メソッドで横速度を算出しています。 -### Path generation +### パス生成 -Path generation is generated on the frenet frame. The path is generated by the following steps: +パス生成はフレネフレームで生成されます。パスは、次の手順で生成されます。 -1. Get the frenet frame of the reference path. -2. Generate the frenet frame of the current position of the object and the finite position of the object. -3. Optimize the path in each longitudinal and lateral coordinate of the frenet frame. (Use the quintic polynomial to fit start and end conditions.) -4. Convert the path to the global coordinate. +1. 基準パスのフレネフレームを取得します。 +2. オブジェクトの自車位置とオブジェクトの未来位置のフレネフレームを生成します。 +3. フレネフレームの各縦横座標でパスを最適化します。(開始条件と終了条件に五次多項式を当てはめます。) +4. パスをグローバル座標に変換します。 -See paper [2] for more details. +詳細については、論文 [2] を参照してください。 -#### Tuning lateral path shape +#### 横方向パス形状の調整 -`lateral_control_time_horizon` parameter supports the tuning of the lateral path shape. This parameter is used to calculate the time to reach the reference path. The smaller the value, the more the path will be generated to reach the reference path quickly. (Mostly the center of the lane.) +`lateral_control_time_horizon` パラメータは、横方向パス形状の調整に使用します。このパラメータは、基準パスに到達する時間を計算するために使用されます。値が小さいほど、基準パスに素早く到達するようにパスが生成されます。(ほとんどは車線の真ん中です。) -#### Pruning predicted paths with lateral acceleration constraint (for vehicle obstacles) +#### 横加速度制約を使用して予測パスを刈り取る(車両障害物に対して) -It is possible to apply a maximum lateral acceleration constraint to generated vehicle paths. This check verifies if it is possible for the vehicle to perform the predicted path without surpassing a lateral acceleration threshold `max_lateral_accel` when taking a curve. If it is not possible, it checks if the vehicle can slow down on time to take the curve with a deceleration of `min_acceleration_before_curve` and comply with the constraint. If that is also not possible, the path is eliminated. +生成された車両パスに最大横加速度制約を適用することができます。このチェックは、カーブを走行するときに車両が横加速度のしきい値 `max_lateral_accel` を超えずに予測パスを実行できるかどうかを確認します。それが不可能な場合は、車両が減速時に適宜 `min_acceleration_before_curve` の減速度でカーブを走行して制約を満たすことができるかどうかを確認します。それでも不可能な場合は、パスは削除されます。 -Currently we provide three parameters to tune the lateral acceleration constraint: +現在、横加速度制約を調整するためのパラメータを3つ用意しています。 -- `check_lateral_acceleration_constraints_`: to enable the constraint check. -- `max_lateral_accel_`: max acceptable lateral acceleration for predicted paths (absolute value). -- `min_acceleration_before_curve_`: the minimum acceleration the vehicle would theoretically use to slow down before a curve is taken (must be negative). +- `check_lateral_acceleration_constraints_`: 制約チェックを有効にします。 +- `max_lateral_accel_`: 予測パスに対して許容される最大横加速度(絶対値)。 +- `min_acceleration_before_curve_`: 車両がカーブに到達する前に理論的に使用される最小加速度(負にする必要があります)。 -You can change these parameters in rosparam in the table below. +Rosparam で以下の表に示すパラメータを変更できます。 -| param name | default value | -| ---------------------------------------- | -------------- | +| パラメータ名 | デフォルト値 | +| ---------------------------------------- | ------------ | | `check_lateral_acceleration_constraints` | `false` [bool] | -| `max_lateral_accel` | `2.0` [m/s^2] | +| `max_lateral_accel` | `2.0` [m/s^2] | | `min_acceleration_before_curve` | `-2.0` [m/s^2] | -## Using Vehicle Acceleration for Path Prediction (for Vehicle Obstacles) +## 自動車加速度を使用した経路予測(障害車両用) -By default, the `map_based_prediction` module uses the current obstacle's velocity to compute its predicted path length. However, it is possible to use the obstacle's current acceleration to calculate its predicted path's length. +デフォルトでは、`map_based_prediction`モジュールは現在の障害物の速度を使用して予測経路長を計算します。ただし、障害物の現在の加速度を使用して予測経路長を計算することもできます。 -### Decaying Acceleration Model +### 減衰加速度モデル -Since this module tries to predict the vehicle's path several seconds into the future, it is not practical to consider the current vehicle's acceleration as constant (it is not assumed the vehicle will be accelerating for `prediction_time_horizon` seconds after detection). Instead, a decaying acceleration model is used. With the decaying acceleration model, a vehicle's acceleration is modeled as: +このモジュールは車両の経路を検出後数秒先まで予測しようとするため、現在の車両の加速度を一定とみなすことは現実的ではありません(車両が検出後`prediction_time_horizon`秒間加速し続けるとは想定されていません)。代わりに、減衰加速度モデルが使用されます。減衰加速度モデルでは、車両の加速度は次のようにモデル化されます。 $\ a(t) = a\_{t0} \cdot e^{-\lambda \cdot t} $ -where $\ a\_{t0} $ is the vehicle acceleration at the time of detection $\ t0 $, and $\ \lambda $ is the decay constant $\ \lambda = \ln(2) / hl $ and $\ hl $ is the exponential's half life. +ここで$\ a\_{t0} $は検出時の車両加速度で、$\ \lambda $は減衰定数$\ \lambda = \ln(2) / hl $、$\ hl $は指数関数半減期です。 -Furthermore, the integration of $\ a(t) $ over time gives us equations for velocity, $\ v(t) $ and distance $\ x(t) $ as: +さらに、時間の経過に対する$\ a(t) $の積分により、速度$\ v(t) $および距離$\ x(t) $の式が得られます。 $\ v(t) = v*{t0} + a*{t0} \* (1/\lambda) \cdot (1 - e^{-\lambda \cdot t}) $ -and +および $\ x(t) = x*{t0} + (v*{t0} + a*{t0} \* (1/\lambda)) \cdot t + a*{t0}(1/λ^2)(e^{-\lambda \cdot t} - 1) $ -With this model, the influence of the vehicle's detected instantaneous acceleration on the predicted path's length is diminished but still considered. This feature also considers that the obstacle might not accelerate past its road's speed limit (multiplied by a tunable factor). +このモデルでは、予測経路長に対する障害物が検出された瞬間の加速度の影響は減少しますが、それでも考慮されます。この機能はまた、障害物が道路の制限速度(調整可能な係数で乗算)を超えて加速しない可能性も考慮します。 -Currently, we provide three parameters to tune the use of obstacle acceleration for path prediction: +現在、経路予測における障害物加速度の使用を調整するためのパラメータを3つ提供しています。 -- `use_vehicle_acceleration`: to enable the feature. -- `acceleration_exponential_half_life`: The decaying acceleration model considers that the current vehicle acceleration will be halved after this many seconds. -- `speed_limit_multiplier`: Set the vehicle type obstacle's maximum predicted speed as the legal speed limit in that lanelet times this value. This value should be at least equal or greater than 1.0. +- `use_vehicle_acceleration`: この機能を有効にします。 +- `acceleration_exponential_half_life`: 減衰加速度モデルは、現在の車両加速度がこの時間後には半分になると想定します。 +- `speed_limit_multiplier`: 障害車両 प्रकारの最大予測速度を、そのレーンレットの法定速度制限にこの値を乗算したものに設定します。この値は1.0以上にする必要があります。 -You can change these parameters in `rosparam` in the table below. +次の表の`rosparam`でこれらのパラメータを変更できます。 -| Param Name | Default Value | +| パラメータ名 | デフォルト値 | | ------------------------------------ | -------------- | | `use_vehicle_acceleration` | `false` [bool] | | `acceleration_exponential_half_life` | `2.5` [s] | | `speed_limit_multiplier` | `1.5` [] | -### Path prediction for crosswalk users +### 横断歩道利用者の経路予測 -This module treats **Pedestrians** and **Bicycles** as objects using the crosswalk, and outputs prediction path based on map and estimated object's velocity, assuming the object has intention to cross the crosswalk, if the objects satisfies at least one of the following conditions: +このモジュールは、**歩行者**と**自転車**を横断歩道を使用するオブジェクトとして扱い、オブジェクトが横断歩道を通過する意図を持っていると仮定し、マップと推定したオブジェクトの速度に基づいて予測パスを出力します。オブジェクトが少なくとも次のいずれかの条件を満たす場合です。 -- move toward the crosswalk -- stop near the crosswalk +- 横断歩道に向かって移動する +- 横断歩道の近くで停止する
-If there are a reachable crosswalk entry points within the `prediction_time_horizon` and the objects satisfies above condition, this module outputs additional predicted path to cross the opposite side via the crosswalk entry point. +`prediction_time_horizon` 内に到達可能な横断歩道エントリ ポイントがあり、オブジェクトが上記の条件を満たしている場合、このモジュールは横断歩道エントリ ポイントを経由して反対側を通過する追加の予測パスを出力します。 -This module takes into account the corresponding traffic light information. -When RED signal is indicated, we assume the target object will not walk across. -In addition, if the target object is stopping (not moving) against GREEN signal, we assume the target object will not walk across either. -This prediction comes from the assumption that the object should move if the traffic light is green and the object is intended to cross. +このモジュールは、対応する信号情報も考慮に入れます。 +赤信号が表示されている場合、対象オブジェクトは横断しないと仮定します。 +さらに、対象オブジェクトが青信号に対して停止 (移動していない) している場合、対象オブジェクトは横断しないと仮定します。この予測は、信号が青で、オブジェクトが横断する意図がある場合、オブジェクトは移動するはずだという仮定に基づいています。
-If the target object is inside the road or crosswalk, this module outputs one or two additional prediction path(s) to reach exit point of the crosswalk. The number of prediction paths are depend on whether object is moving or not. If the object is moving, this module outputs one prediction path toward an exit point that existed in the direction of object's movement. One the other hand, if the object has stopped, it is impossible to infer which exit points the object want to go, so this module outputs two prediction paths toward both side exit point. +対象オブジェクトが道路または横断歩道内にある場合、このモジュールは横断歩道の出口点に到達するための 1 つまたは 2 つの追加予測パスを出力します。予測パスの数は、オブジェクトが移動しているかどうかに依存します。オブジェクトが移動している場合、このモジュールはオブジェクトの移動方向に存在する出口点に向けた 1 つの予測パスを出力します。一方、オブジェクトが停止している場合、オブジェクトがどちらの出口点に行こうとしているかを推測することは不可能であるため、このモジュールは両側の出口点に向けた 2 つの予測パスを出力します。
-## Inputs / Outputs - -### Input - -| Name | Type | Description | -| -------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------------------------------- | -| `~/perception/object_recognition/tracking/objects` | `autoware_perception_msgs::msg::TrackedObjects` | tracking objects without predicted path. | -| `~/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | binary data of Lanelet2 Map. | -| `~/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | rearranged information on the corresponding traffic lights | - -### Output - -| Name | Type | Description | -| ---------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------- | -| `~/input/objects` | `autoware_perception_msgs::msg::TrackedObjects` | tracking objects. Default is set to `/perception/object_recognition/tracking/objects` | -| `~/output/objects` | `autoware_perception_msgs::msg::PredictedObjects` | tracking objects with predicted path. | -| `~/objects_path_markers` | `visualization_msgs::msg::MarkerArray` | marker for visualization. | -| `~/debug/processing_time_ms` | `std_msgs::msg::Float64` | processing time of this module. | -| `~/debug/cyclic_time_ms` | `std_msgs::msg::Float64` | cyclic time of this module. | - -## Parameters - -| Parameter | Unit | Type | Description | -| ---------------------------------------------------------------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------- | -| `enable_delay_compensation` | [-] | bool | flag to enable the time delay compensation for the position of the object | -| `prediction_time_horizon` | [s] | double | predict time duration for predicted path | -| `lateral_control_time_horizon` | [s] | double | time duration for predicted path will reach the reference path (mostly center of the lane) | -| `prediction_sampling_delta_time` | [s] | double | sampling time for points in predicted path | -| `min_velocity_for_map_based_prediction` | [m/s] | double | apply map-based prediction to the objects with higher velocity than this value | -| `min_crosswalk_user_velocity` | [m/s] | double | minimum velocity used when crosswalk user's velocity is calculated | -| `max_crosswalk_user_delta_yaw_threshold_for_lanelet` | [rad] | double | maximum yaw difference between crosswalk user and lanelet to use in path prediction for crosswalk users | -| `dist_threshold_for_searching_lanelet` | [m] | double | The threshold of the angle used when searching for the lane to which the object belongs | -| `delta_yaw_threshold_for_searching_lanelet` | [rad] | double | The threshold of the angle used when searching for the lane to which the object belongs | -| `sigma_lateral_offset` | [m] | double | Standard deviation for lateral position of objects | -| `sigma_yaw_angle_deg` | [deg] | double | Standard deviation yaw angle of objects | -| `object_buffer_time_length` | [s] | double | Time span of object history to store the information | -| `history_time_length` | [s] | double | Time span of object information used for prediction | -| `prediction_time_horizon_rate_for_validate_shoulder_lane_length` | [-] | double | prediction path will disabled when the estimated path length exceeds lanelet length. This parameter control the estimated path length | - -## Assumptions / Known limits - -- For object types of passenger car, bus, and truck - - The predicted path of the object follows the road structure. - - For the object not being on any roads, the predicted path is generated by just a straight line prediction. - - For the object on a lanelet but moving in a different direction of the road, the predicted path is just straight. - - Vehicle dynamics may not be properly considered in the predicted path. -- For object types of person and motorcycle - - The predicted path is generated by just a straight line in all situations except for "around crosswalk". -- For all obstacles - - In the prediction, the vehicle motion is assumed to be a constant velocity due to a lack of acceleration information. - -## Reference +## 入出力 + +### 入力 + +| 名称 | 型 | 説明 | +| ------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------------------------- | +| `~/perception/object_recognition/tracking/objects` | `autoware_perception_msgs::msg::TrackedObjects` | 予測パスを持たない追跡オブジェクト。 | +| `~/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | Lanelet2 Mapのバイナリデータ。 | +| `~/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 対応する信号機の再配列された情報。 | + +### 自動運転ソフトウェアに関するドキュメント + +#### 目次 + +- [はじめに](#はじめに) +- [Planning(計画)](#planning) + - [Planning Framework(計画フレームワーク)](#planning-framework) + - [Central Planner(セントラルプランナー)](#central-planner) +- [Control(制御)](#control) +- [Perception(認知)](#perception) + - [Object Recognition(物体認識)](#object-recognition) + - [Detection(検出)](#detection) +- [Simulation(シミュレーション)](#simulation) + - [Simulation Test Framework(シミュレーションテストフレームワーク)](#simulation-test-framework) +- [評価](#評価) + - [Metrics and Benchmarks(メトリクスとベンチマーク)](#metrics-and-benchmarks) +- [Deployment(展開)](#deployment) + - [Autoware Deployment Process(Autoware展開プロセス)](#autoware-deployment-process) + - [Continuous Integration and Continuous Delivery(継続的インテグレーションと継続的デリバリー)](#continuous-integration-and-continuous-delivery) +- [メンテナンス](#メンテナンス) + - [Updating Autoware(Autowareのアップデート)](#updating-autoware) + - [Troubleshooting(トラブルシューティング)](#troubleshooting) + +#### はじめに + +このドキュメントは、Autowareの自動運転ソフトウェアに関する包括的なガイダンスを提供します。このソフトウェアは、自動運転車両の開発と展開のためのオープンソースのプラットフォームです。このドキュメントでは、ソフトウェアのアーキテクチャ、コンポーネント、デプロイメントプロセスについて説明します。 + +#### Planning(計画) + +**Planning Framework(計画フレームワーク)** + +Planning Frameworkは、自動運転車両の経路計画を担当します。障害物回避、車線維持、信号対応などのタスクを処理します。 + +**Central Planner(セントラルプランナー)** + +Central Plannerは、Planning Frameworkの中核コンポーネントです。車両の周囲環境を認識し、安全で効率的な経路を生成します。 + +#### Control(制御) + +Controlコンポーネントは、Planningコンポーネントによって生成された経路に従って車両を制御します。エンジン、ブレーキ、ステアリングなどのアクチュエータを操作します。 + +#### Perception(認知) + +**Object Recognition(物体認識)** + +Object Recognitionコンポーネントは、車両の周囲環境にある物体、歩行者、車両を認識します。カメラとLiDARセンサーのデータを処理します。 + +**Detection(検出)** + +Detectionコンポーネントは、認識された物体の位置と速度を推定します。時系列データと確率的推定手法を使用して、堅牢かつ正確な検出を行います。 + +#### Simulation(シミュレーション) + +**Simulation Test Framework(シミュレーションテストフレームワーク)** + +Simulation Test Frameworkは、自動運転システムの開発とテストのためのシミュレーション環境を提供します。現実的なシナリオを作成することで、安全性と信頼性を確保できます。 + +#### 評価 + +**Metrics and Benchmarks(メトリクスとベンチマーク)** + +評価コンポーネントは、自動運転システムのパフォーマンスを評価するためのメトリクスとベンチマークを提供します。安全度、効率性、快適性などの指標を測定します。 + +#### Deployment(展開) + +**Autoware Deployment Process(Autoware展開プロセス)** + +Autoware Deployment Processは、Autowareシステムを実際の車両に展開するための段階的なガイドラインを提供します。ソフトウェアのインストール、設定、統合をカバーします。 + +**Continuous Integration and Continuous Delivery(継続的インテグレーションと継続的デリバリー)** + +継続的インテグレーションと継続的デリバリー(CI/CD)のプロセスを使用して、新機能や更新を自動的にビルド、テスト、展開します。これにより、展開プロセスの効率と信頼性が向上します。 + +#### メンテナンス + +**Updating Autoware(Autowareのアップデート)** + +Autowareのアップデートにより、最新の機能、バグ修正、セキュリティパッチにアクセスできます。新しいリリースのダウンロードとインストールの手順を提供します。 + +**Troubleshooting(トラブルシューティング)** + +Troubleshootingガイドには、一般的な問題の解決手順が記載されています。診断、ログ分析、デバッグの手順を提供します。 + +| 名称 | 型 | 説明 | +| ---------------------------- | ------------------------------------------------- | --------------------------------------------------------------------------------------- | +| `~/input/objects` | `autoware_perception_msgs::msg::TrackedObjects` | 検知物体。デフォルトは `/perception/object_recognition/tracking/objects` に設定されている | +| `~/output/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 予測経路付き検知物体 | +| `~/objects_path_markers` | `visualization_msgs::msg::MarkerArray` | 可視化用のマーカー | +| `~/debug/processing_time_ms` | `std_msgs::msg::Float64` | このモジュールの処理時間 | +| `~/debug/cyclic_time_ms` | `std_msgs::msg::Float64` | このモジュールの周期時間 | + +## パラメータ + +| パラメータ | 単位 | タイプ | 説明 | +|---|---|---|---| +| `enable_delay_compensation` | [-] | bool | 物体の位置に対する時間遅延補正を有効にするためのフラグ | +| `prediction_time_horizon` | [秒] | double | 予測 경로의 예측 시간 지속 기간 | +| `lateral_control_time_horizon` | [秒] | double | 예측 경로가 기준 경로(대부분 차선 중심)에 도달하는 시간 지속 기간 | +| `prediction_sampling_delta_time` | [秒] | double | 예측 경로에서 포인트의 샘플링 시간 | +| `min_velocity_for_map_based_prediction` | [m/s] | double | 이 값보다 높은 속도의 물체에 지도 기반 예측 적용 | +| `min_crosswalk_user_velocity` | [m/s] | double | 보행자의 속도를 계산할 때 사용되는 최소 속도 | +| `max_crosswalk_user_delta_yaw_threshold_for_lanelet` | [라디안] | double | 보행자와 차로 간의 최대 요우 각도 차이를 보행자 경로 예측에 사용 | +| `dist_threshold_for_searching_lanelet` | [m] | double | 물체가 속하는 차로를 검색하는 데 사용되는 각도 임계값 | +| `delta_yaw_threshold_for_searching_lanelet` | [라디안] | double | 물체가 속하는 차로를 검색하는 데 사용되는 각도 임계값 | +| `sigma_lateral_offset` | [m] | double | 물체의 측면 위치에 대한 표준 편차 | +| `sigma_yaw_angle_deg` | [도] | double | 물체의 요우 각도에 대한 표준 편차 | +| `object_buffer_time_length` | [초] | double | 물체의 정보를 저장하는 객체 이력의 시간 범위 | +| `history_time_length` | [초] | double | 예측에 사용되는 객체 정보의 시간 범위 | +| `prediction_time_horizon_rate_for_validate_shoulder_lane_length` | [-] | double | 예측 경로 길이가 차선 길이를 초과하면 예측 경로 비활성화. 이 매개변수는 예측 경로 길이를 제어 | + +## 前提条件/既知の制限 + +- 乗用車、バス、トラックのオブジェクトタイプについて + - オブジェクトの予測経路は道路構造に従います。 + - オブジェクトが道路上にない場合、予測経路は直線予測によって生成されます。 + - レーンレット上にいるが、道路と異なる方向に移動しているオブジェクトの場合、予測経路は単純に直線です。 + - 予測経路で車両のダイナミクスが適切に考慮されない可能性があります。 +- 人とオートバイのオブジェクトタイプについて + - 予測経路は「横断歩道付近」以外のすべての状況で、単純な直線で生成されます。 +- すべての障害物について + - 加速度情報の不足により、予測では車両の運動が等速と想定されています。 + +## 参考資料 1. M. Werling, J. Ziegler, S. Kammel, and S. Thrun, “Optimal trajectory generation for dynamic street scenario in a frenet frame,” IEEE International Conference on Robotics and Automation, Anchorage, Alaska, USA, May 2010. 2. A. Houenou, P. Bonnifait, V. Cherfaoui, and Wen Yao, “Vehicle trajectory prediction based on motion model and maneuver recognition,” in 2013 IEEE/RSJ International Conference on Intelligent Robots and Systems. IEEE, nov 2013, pp. 4363-4369. + diff --git a/perception/autoware_multi_object_tracker/README.md b/perception/autoware_multi_object_tracker/README.md index afb1598645733..257c6fa9d3816 100644 --- a/perception/autoware_multi_object_tracker/README.md +++ b/perception/autoware_multi_object_tracker/README.md @@ -1,121 +1,121 @@ # multi_object_tracker -## Purpose +## 目的 -The results of the detection are processed by a time series. The main purpose is to give ID and estimate velocity. +検出の結果を時系列で処理します。主な目的はIDを付与し、速度を推定することです。 -## Inner-workings / Algorithms +## 内部処理/アルゴリズム -This multi object tracker consists of data association and EKF. +このマルチオブジェクトトラッカーは、データ関連付けとEKFで構成されています。 ![multi_object_tracker_overview](image/multi_object_tracker_overview.svg) -### Data association +### データ関連付け -The data association performs maximum score matching, called min cost max flow problem. -In this package, mussp[1] is used as solver. -In addition, when associating observations to tracers, data association have gates such as the area of the object from the BEV, Mahalanobis distance, and maximum distance, depending on the class label. +データ関連付けは、最小コスト最大フロー問題と呼ばれる最大スコアマッチングを実行します。 +このパッケージでは、mussp[1]がソルバーとして使用されています。 +さらに、観測値をトレーサーに関連付ける際に、データ関連付けには、BEVからのオブジェクトの領域、マハラノビス距離、および最大距離などのゲートがあります。クラスラベルによって異なります。 -### EKF Tracker +### EKFトラッカー -Models for pedestrians, bicycles (motorcycles), cars and unknown are available. -The pedestrian or bicycle tracker is running at the same time as the respective EKF model in order to enable the transition between pedestrian and bicycle tracking. -For big vehicles such as trucks and buses, we have separate models for passenger cars and large vehicles because they are difficult to distinguish from passenger cars and are not stable. Therefore, separate models are prepared for passenger cars and big vehicles, and these models are run at the same time as the respective EKF models to ensure stability. +歩行者、自転車(オートバイ)、乗用車、および不明に対するモデルがあります。 +歩行者または自転車トラッカーは、それぞれ対応するEKFモデルと同時に実行され、歩行者トラッキングと自転車トラッキング間の遷移を可能にします。 +トラックやバスなどの大型車両については、乗用車と区別が困難で、安定していないため、乗用車と大型車両に別のモデルを用意しています。そのため、乗用車と大型車両に別々のモデルを用意し、これらをそれぞれのEKFモデルと同時に実行して安定性を確保しています。 - -## Inputs / Outputs +## 入出力 -### Input +### 入力 -Multiple inputs are pre-defined in the input channel parameters (described below) and the inputs can be configured +複数の入力が、入力チャネルパラメーター(以下に記載)で事前に定義されており、入力を構成できます -| Name | Type | Description | -| ------------------------- | -------------------------- | ---------------------- | -| `selected_input_channels` | `std::vector` | array of channel names | +| 名前 | タイプ | 説明 | +| -------------------------- | -------------------------- | ------------------------ | +| `selected_input_channels` | `std::vector` | チャネル名の配列 | -- default value: `selected_input_channels:="['detected_objects']"`, merged DetectedObject message -- multi-input example: `selected_input_channels:="['lidar_centerpoint','camera_lidar_fusion','detection_by_tracker','radar_far']"` +- デフォルト値: `selected_input_channels:="['detected_objects']"`, マージされたDetectedObjectメッセージ +- 複数入力例: `selected_input_channels:="['lidar_centerpoint','camera_lidar_fusion','detection_by_tracker','radar_far']"` -### Output +### 出力 -| Name | Type | Description | -| ---------- | ----------------------------------------------- | --------------- | -| `~/output` | `autoware_perception_msgs::msg::TrackedObjects` | tracked objects | +| 名前 | 型 | 説明 | +| -------- | ----------------------------------------------------- | -------------------- | +| `~/output` | `autoware_perception_msgs::msg::TrackedObjects` | 追跡対象オブジェクト | -## Parameters +## パラメータ -### Input Channel parameters +### 入力チャネルパラメータ {{ json_to_markdown("perception/autoware_multi_object_tracker/schema/input_channels.schema.json") }} -### Core Parameters +### コアパラメータ {{ json_to_markdown("perception/autoware_multi_object_tracker/schema/multi_object_tracker_node.schema.json") }} {{ json_to_markdown("perception/autoware_multi_object_tracker/schema/data_association_matrix.schema.json") }} -#### Simulation parameters +#### シミュレーションパラメータ {{ json_to_markdown("perception/autoware_multi_object_tracker/schema/simulation_tracker.schema.json") }} -## Assumptions / Known limits +## 想定/既知の制限 -See the [model explanations](models.md). +[モデル解説](models.md)を参照してください。 -## (Optional) Error detection and handling +## (オプション) エラー検出とハンドリング - -## (Optional) Performance characterization +## (オプション) パフォーマンスの特性評価 -### Evaluation of muSSP +### muSSPの評価 -According to our evaluation, muSSP is faster than normal [SSP](src/data_association/successive_shortest_path) when the matrix size is more than 100. +当社の実績によると、muSSPは行列サイズが100を超えると通常の[SSP](src/data_association/successive_shortest_path)よりも高速になります。 -Execution time for varying matrix size at 95% sparsity. In real data, the sparsity was often around 95%. +95%スパースityで変化する行列サイズの実行時間。実際のデータでは、スパースityは多くの場合95%前後にあります。 ![mussp_evaluation1](image/mussp_evaluation1.png) -Execution time for varying the sparsity with matrix size 100. +行列サイズ100でスパースityを変化させた場合の実行時間。 ![mussp_evaluation2](image/mussp_evaluation2.png) -## (Optional) References/External links +## (オプション) 参考文献/外部リンク -This package makes use of external code. +このパッケージは外部コードを使用しています。 -| Name | License | Original Repository | -| --------------------------------------------------------- | --------------------------------------------------------- | ------------------------------------ | +| 名称 | ライセンス | オリジナルリポジトリ | +| --------------------------------------------------------- | ---------------------------------------------------------- | ----------------------------------------- | | [muSSP](src/data_association/mu_successive_shortest_path) | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | | -[1] C. Wang, Y. Wang, Y. Wang, C.-t. Wu, and G. Yu, “muSSP: Efficient -Min-cost Flow Algorithm for Multi-object Tracking,” NeurIPS, 2019 +[1] C. Wang, Y. Wang, Y. Wang, C.-t. Wu, and G. Yu, “muSSP: 高速汎用的最小コストフローアルゴリズム” NeurIPS, 2019 -## (Optional) Future extensions / Unimplemented parts +## (任意) 今後の拡張/未実装部分 - + diff --git a/perception/autoware_object_merger/README.md b/perception/autoware_object_merger/README.md index c65353efa3a91..4da144ef24bd9 100644 --- a/perception/autoware_object_merger/README.md +++ b/perception/autoware_object_merger/README.md @@ -1,84 +1,124 @@ -# object_merger +## 物体マージャー -## Purpose +## 目的 -object_merger is a package for merging detected objects from two methods by data association. +`object_merger` は、データアソシエーションにより 2 つの方法から検出されたオブジェクトをマージするためのパッケージです。 -## Inner-workings / Algorithms +## 内部処理 / アルゴリズム -The successive shortest path algorithm is used to solve the data association problem (the minimum-cost flow problem). The cost is calculated by the distance between two objects and gate functions are applied to reset cost, s.t. the maximum distance, the maximum area and the minimum area. +連続最短経路アルゴリズムを使用して、データアソシエーション問題(最小コストフロー問題)を解決します。コストは 2 つのオブジェクト間の距離によって計算され、ゲート関数が最大距離、最大面積、最小面積の制約を課してコストをリセットするために適用されます。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| --------------- | ------------------------------------------------ | ----------------- | -| `input/object0` | `autoware_perception_msgs::msg::DetectedObjects` | detection objects | -| `input/object1` | `autoware_perception_msgs::msg::DetectedObjects` | detection objects | +| 名前 | タイプ | 説明 | +| --------------- | ------------------------------------------------ | ---------- | +| `input/object0` | `autoware_perception_msgs::msg::DetectedObjects` | 検出対象 | +| `input/object1` | `autoware_perception_msgs::msg::DetectedObjects` | 検出対象 | -### Output +### 出力 -| Name | Type | Description | -| --------------- | ------------------------------------------------ | ---------------- | -| `output/object` | `autoware_perception_msgs::msg::DetectedObjects` | modified Objects | +`Autoware` 自動運転ソフトウェアに関するドキュメント -## Parameters +**Planningコンポーネント** + +**Sensor Fusion** + +* **SBF (ステレオベースフロー)** + * ステレオカメラからの深度とオプティカルフローを融合して、3D点群を生成 + +* **VLP16 LIDAR** + * 点群データを生成し、`post resampling`を使用して、3D空間内の障害物を検出 + +* **RADAR** + * 車両、歩行者、その他の静止または動いている物体を検出 + +**Global Planning** + +* **Elastic Band** アルゴリズムを使用して、出発点から目的地までのパスを生成 +* 交通ルールや道路標識を考慮して、パスを最適化 + +**Local Planning** + +* **DWA (動的窓アプローチ)** アルゴリズムを使用して、自車位置を中心とした局所パスを生成 +* Planningモジュールが現在、障害物の回避、速度制御、パス追跡を実施中 + +**Control** + +* **MPC (モデル予測制御)** アルゴリズムを使用して、ステアリング、加速、ブレーキを制御 +* 制御動作を最適化して、安全かつ効率的な走行を実現 + +**Performance Monitoring** + +* **Path Evaluation** + * パスの妥当性と障害物との距離を評価 +* **Velocity and Acceleration Violation Detection** + * 速度逸脱量と加速逸脱量を検出し、異常な挙動を監視 +* **System Monitoring** + * システムのパフォーマンスを監視し、障害や異常を検出 + +| 名前 | タイプ | 説明 | +|---|---|---| +| `output/object` | `autoware_perception_msgs::msg::DetectedObjects` | 修正された物体 | + +## パラメータ {{ json_to_markdown("perception/autoware_object_merger/schema/object_association_merger.schema.json") }} {{ json_to_markdown("perception/autoware_object_merger/schema/data_association_matrix.schema.json") }} {{ json_to_markdown("perception/autoware_object_merger/schema/overlapped_judge.schema.json") }} -## Tips +## ヒント -- False Positive Unknown object detected by clustering method sometimes raises the risk of sudden stop and interferes with Planning module. If ML based detector rarely misses objects, you can tune the parameter of object_merger and make Perception module ignore unknown objects. - - If you want to remove unknown object close to large vehicle, - - use HIGH `distance_threshold_list` - - However, this causes high computational load - - use LOW `precision_threshold_to_judge_overlapped` - - use LOW `generalized_iou_threshold` - - However, these 2 params raise the risk of overlooking object close to known object. +* **誤検知:** クラスタリング手法によって検出された未知のオブジェクトは、急停止のリスクが高まり、Planningモジュールを妨げる場合があります。MLベースの検出器がオブジェクトを見逃すことがまれな場合は、object_merger のパラメータを調整して、Perceptionモジュールが未知のオブジェクトを無視するようにできます。 + * 大きな車両に近い未知のオブジェクトを削除したい場合: + * **HIGH** `distance_threshold_list`を利用する + * ただし、計算負荷が高くなります + * **LOW** `precision_threshold_to_judge_overlapped`を利用する + * **LOW** `generalized_iou_threshold`を利用する + * ただし、この2つのパラメータは、既知のオブジェクトに近いオブジェクトを見逃すリスクを高めます。 -## Assumptions / Known limits +## 想定/既知の制限 - -## (Optional) Error detection and handling +## (省略可能) エラー検出と処理 - -## (Optional) Performance characterization +## (省略可能) パフォーマンスの特性評価 - -## (Optional) References/External links +## (省略可能) 参考文献/外部リンク - -## (Optional) Future extensions / Unimplemented parts +## (省略可能) 今後の拡張/未実装の部分 + +データアソシエーションアルゴリズムは multi_object_tracker と同じでしたが、multi_object_tracker のアルゴリズムはすでに更新されています。 -Data association algorithm was the same as that of multi_object_tracker, but the algorithm of multi_object_tracker was already updated. diff --git a/perception/autoware_object_range_splitter/README.md b/perception/autoware_object_range_splitter/README.md index dbb6c2a48faab..dc139a9bdbe76 100644 --- a/perception/autoware_object_range_splitter/README.md +++ b/perception/autoware_object_range_splitter/README.md @@ -1,95 +1,150 @@ # `autoware_object_range_splitter` -## Purpose +## 目的 -autoware_object_range_splitter is a package to divide detected objects into two messages by the distance from the origin. +`autoware_object_range_splitter`は、検出されたオブジェクトを起点からの距離で2つのメッセージに分割するためのパッケージです。 -## Inner-workings / Algorithms +## 内部処理/アルゴリズム - -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| -------------- | ------------------------------------------------ | ---------------- | -| `input/object` | `autoware_perception_msgs::msg::DetectedObjects` | detected objects | +| 名称 | 種別 | 説明 | +| ---------- | ------------------------------------------- | ---------- | +| `input/object` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | -### Output +### 出力 -| Name | Type | Description | -| --------------------------- | ------------------------------------------------ | ---------------------------- | -| `output/long_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | long range detected objects | -| `output/short_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | short range detected objects | +**自動運転ソフトウェア** -## Parameters +**仕様** + +**Planning コンポーネント** + +**概要** + +Planning コンポーネントは、現在の状況や高レベルの目標に基づいて、車両の将来の経路を計画します。 + +**機能** + +* 安全で衝突を回避する経路の生成 +* 交通規則の遵守 +* 車両の制約(速度、加速度など)を考慮した経路生成 +* 動的障害物(歩行者、車両など)への対応 +* 高レベルの目標(目的地、レーンキープなど)への追従 +* 予測可能な経路生成 + +**実装** + +Planning コンポーネントは、Autoware の __Planning モジュール__ によって実装されています。このモジュールは、以下を実行します。 + +* センサデータの処理と解析 +* 自車位置の推定 +* 環境のモデリング +* 経路の探索と最適化 +* 経路の可視化 + +**安全性** + +Planning コンポーネントは、次の特徴により安全な動作を確保します。 + +* 複数のセンサからのデータフュージョン +* 予測可能な経路生成 +* 冗長性の確保 +* 逸脱量の制限(速度逸脱量、加速度逸脱量など) + +**性能** + +Planning コンポーネントは、以下のようなパフォーマンス目標を達成するように設計されています。 + +* 低遅延の経路生成 +* `post resampling` 後の経路の正確さ +* さまざまな運転シナリオへの適応性 + +**依存関係** + +Planning コンポーネントは、以下のコンポーネントに依存しています。 + +*センシングコンポーネント* +* ローカライゼーションコンポーネント* +* コントロールコンポーネント* + +| 名称 | 型 | 説明 | +|---|---|---| +| `output/long_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | 長距離検出オブジェクト | +| `output/short_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | 短距離検出オブジェクト | + +## パラメータ {{ json_to_markdown("perception/autoware_object_range_splitter/schema/object_range_splitter.schema.json") }} -## Assumptions / Known limits +## 想定 / 既知の制限 - -## (Optional) Error detection and handling +## (オプション) エラーの検出と処理 - -## (Optional) Performance characterization +## (オプション) パフォーマンス特性評価 - -## (Optional) References/External links +## (オプション) 参考文献 / 外部リンク - -## (Optional) Future extensions / Unimplemented parts +## (オプション) 将来の拡張機能 / 未実装部分 - + diff --git a/perception/autoware_object_velocity_splitter/README.md b/perception/autoware_object_velocity_splitter/README.md index ac57d5d7f6353..90e7d91fb0de5 100644 --- a/perception/autoware_object_velocity_splitter/README.md +++ b/perception/autoware_object_velocity_splitter/README.md @@ -1,25 +1,26 @@ # autoware_object_velocity_splitter -This package contains a object filter module for [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl). -This package can split DetectedObjects into two messages by object's speed. +このパッケージには、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl)用のオブジェクトフィルタモジュールが含まれています。 +このパッケージは、オブジェクトの速度によって DetectedObjects を2つのメッセージに分割できます。 -## Interface +## インターフェース -### Input +### 入力 - `~/input/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - 3D detected objects + - 3D検出オブジェクト -### Output +### 出力 - `~/output/low_speed_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - Objects with low speed + - 低速オブジェクト - `~/output/high_speed_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - Objects with high speed + - 高速オブジェクト -### Parameters +### パラメータ - `velocity_threshold` (double) [m/s] - - Default parameter is 3.0 + - デフォルトパラメータは3.0 + +このパラメータはオブジェクトを分割するための速度しきい値です -This parameter is velocity threshold to split objects diff --git a/perception/autoware_occupancy_grid_map_outlier_filter/README.md b/perception/autoware_occupancy_grid_map_outlier_filter/README.md index 7de2cc1dce92c..cdb9dafe8f5f5 100644 --- a/perception/autoware_occupancy_grid_map_outlier_filter/README.md +++ b/perception/autoware_occupancy_grid_map_outlier_filter/README.md @@ -1,53 +1,110 @@ # autoware_occupancy_grid_map_outlier_filter -## Purpose +## 目的 -This node is an outlier filter based on a occupancy grid map. -Depending on the implementation of occupancy grid map, it can be called an outlier filter in time series, since the occupancy grid map expresses the occupancy probabilities in time series. +このノードは、オキュパンシグリッドマップに基づく外れ点フィルタです。 +オキュパンシグリッドマップの実装方法によっては、オキュパンシグリッドマップは時間内の占有確率を表しているため、時系列の外れ点フィルタと呼ぶことができます。 -## Inner-workings / Algorithms +## 仕組み / アルゴリズム -1. Use the occupancy grid map to separate point clouds into those with low occupancy probability and those with high occupancy probability. +1. オキュパンシグリッドマップを使用して、点群を占有確率が低いものと高いものとに分けます。 -2. The point clouds that belong to the low occupancy probability are not necessarily outliers. In particular, the top of the moving object tends to belong to the low occupancy probability. Therefore, if `use_radius_search_2d_filter` is true, then apply an radius search 2d outlier filter to the point cloud that is determined to have a low occupancy probability. - 1. For each low occupancy probability point, determine the outlier from the radius (`radius_search_2d_filter/search_radius`) and the number of point clouds. In this case, the point cloud to be referenced is not only low occupancy probability points, but all point cloud including high occupancy probability points. - 2. The number of point clouds can be multiplied by `radius_search_2d_filter/min_points_and_distance_ratio` and distance from base link. However, the minimum and maximum number of point clouds is limited. +2. 占有確率が低い点群は必ずしも外れ点ではありません。特に、動いている物体の最上部は占有確率が低くなる傾向があります。そのため、`use_radius_search_2d_filter` が true の場合は、占有確率が低いと判断された点群に半径検索 2d 外れ点フィルタを適用します。 + 1. 各低占有確率点について、半径 (`radius_search_2d_filter/search_radius`) と点群の数から外れ点を特定します。この場合、参照される点群は低占有確率点だけでなく、高占有確率点を含むすべての点群です。 + 2. 点群の数は、`radius_search_2d_filter/min_points_and_distance_ratio` とベースリンクからの距離によって乗算できます。ただし、点群の最小と最大の数は制限されています。 -The following video is a sample. Yellow points are high occupancy probability, green points are low occupancy probability which is not an outlier, and red points are outliers. At around 0:15 and 1:16 in the first video, a bird crosses the road, but it is considered as an outlier. +次のビデオはサンプルです。黄色は高占有確率、緑は外れ点ではない低占有確率、赤は外れ点です。1 つ目のビデオの 0:15 と 1:16 付近で鳥が道路を渡りますが、外れ点と見なされています。 - [movie1](https://www.youtube.com/watch?v=hEVv0LaTpP8) - [movie2](https://www.youtube.com/watch?v=VaHs1CdLcD0) ![occupancy_grid_map_outlier_filter](./image/occupancy_grid_map_outlier_filter.drawio.svg) -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ---------------------------- | ------------------------- | ------------------------------------------------------------------------------------------ | -| `~/input/pointcloud` | `sensor_msgs/PointCloud2` | Obstacle point cloud with ground removed. | -| `~/input/occupancy_grid_map` | `nav_msgs/OccupancyGrid` | A map in which the probability of the presence of an obstacle is occupancy probability map | +| 名前 | タイプ | 説明 | +|---|---|---| +| `~/input/pointcloud` | `sensor_msgs/PointCloud2` | 地面を除去した障害物点群 | +| `~/input/occupancy_grid_map` | `nav_msgs/OccupancyGrid` | 障害物存在確率を占有確率マップに示したマップ | -### Output +### 出力 -| Name | Type | Description | -| ------------------------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `~/output/pointcloud` | `sensor_msgs/PointCloud2` | Point cloud with outliers removed. trajectory | -| `~/output/debug/outlier/pointcloud` | `sensor_msgs/PointCloud2` | Point clouds removed as outliers. | -| `~/output/debug/low_confidence/pointcloud` | `sensor_msgs/PointCloud2` | Point clouds that had a low probability of occupancy in the occupancy grid map. However, it is not considered as an outlier. | -| `~/output/debug/high_confidence/pointcloud` | `sensor_msgs/PointCloud2` | Point clouds that had a high probability of occupancy in the occupancy grid map. trajectory | +**自動運転ソフトウェア** -## Parameters +**目次** -{{ json_to_markdown("perception/occupancy_grid_map_outlier_filter/schema/occupancy_grid_map_outlier_filter.schema.json") }} +* システムアーキテクチャ +* 知覚コンポーネント +* 計画モジュール +* 制御モジュール +* 評価方法 -## Assumptions / Known limits +**システムアーキテクチャ** -## (Optional) Error detection and handling +Autowareのシステムアーキテクチャは、次の主要コンポーネントで構成されています。 -## (Optional) Performance characterization +* **知覚コンポーネント:** センサーデータを処理して、周囲の環境を認識します。 +* **計画モジュール:** 知覚された環境に基づき、走行経路と制御コマンドを生成します。 +* **制御モジュール:** 計画モジュールから生成されたコマンドに基づいて、車両を制御します。 -## (Optional) References/External links +**知覚コンポーネント** + +知覚コンポーネントは、次のタスクを実行します。 + +* **物体検出:** 車両、歩行者、障害物を検出します。 +* **車線検出:** 車線を検出します。 +* **自由空間検出:** 車両が移動できる空間を検出します。 + +**計画モジュール** + +計画モジュールは、以下のタスクを実行します。 + +* **経路計画:** 安全で効率的な走行経路を生成します。 +* **運動計画:** 車両の速度と加速度を制御します。 +* **軌跡生成:** 車両が経路に従うための詳細な軌跡を生成します。 + +**制御モジュール** + +制御モジュールは、以下のタスクを実行します。 + +* **ステアリング制御:** 車両の方向を制御します。 +* **スロットル制御:** 車両の速度を制御します。 +* **ブレーキ制御:** 車両を停止します。 + +**評価方法** + +Autowareの性能は、シミュレーションと実車テストの両方を使用して評価されます。評価メトリクスには以下が含まれます。 + +* **経路逸脱量:** 計画された経路からの車両の偏差 +* **速度逸脱量:** 計画された速度からの車両の偏差 +* **加速度逸脱量:** 計画された加速度からの車両の偏差 +* **衝突回数:** シミュレーションまたは実車テスト中の車両の衝突数 + +**追加のドキュメント** + +* [Autowareの開発ガイド](https://github.com/autowarefoundation/autoware/blob/master/docs/development_guide.md) +* [Autowareの技術ドキュメント](https://github.com/autowarefoundation/autoware/blob/master/docs/technical_docs.md) + +| 名称 | タイプ | 説明 | +| ------------------------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `~/output/pointcloud` | `sensor_msgs/PointCloud2` | 異常値が除去された点群 | +| `~/output/debug/outlier/pointcloud` | `sensor_msgs/PointCloud2` | 異常値として削除された点群 | +| `~/output/debug/low_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 点群マップ内の占有確率が低い点群(ただし、異常値とは見なされない) | +| `~/output/debug/high_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 点群マップ内の占有確率が高い点群 trajectory | + +## パラメータ + +{{ json_to_markdown("perception/occupancy_grid_map_outlier_filter/schema/occupancy_grid_map_outlier_filter_ja.schema.json") }} + +## 想定/既知の制限 + +## (任意)エラー検知と処理 + +## (任意)パフォーマンス特性評価 + +## (任意)リファレンス/外部リンク + +## (任意)将来の拡張/未実装部分 -## (Optional) Future extensions / Unimplemented parts diff --git a/perception/autoware_probabilistic_occupancy_grid_map/README.md b/perception/autoware_probabilistic_occupancy_grid_map/README.md index 575411bcbd220..9278d5411f6cb 100644 --- a/perception/autoware_probabilistic_occupancy_grid_map/README.md +++ b/perception/autoware_probabilistic_occupancy_grid_map/README.md @@ -1,25 +1,25 @@ # autoware_probabilistic_occupancy_grid_map -## Purpose +## 目的 -This package outputs the probability of having an obstacle as occupancy grid map. +このパッケージは、障害物の確率をオキュパンシーグリッドマップとして出力します。 ![pointcloud_based_occupancy_grid_map_sample_image](./image/pointcloud_based_occupancy_grid_map_sample_image.gif) -## References/External links +## リファレンス/外部リンク -- [Pointcloud based occupancy grid map](pointcloud-based-occupancy-grid-map.md) -- [Laserscan based occupancy grid map](laserscan-based-occupancy-grid-map.md) -- [Grid map fusion](synchronized_grid_map_fusion.md) +- [ポイントクラウドライダー型オキュパンシーグリッドマップ](pointcloud-based-occupancy-grid-map.md) +- [レーザースキャンライダー型オキュパンシーグリッドマップ](laserscan-based-occupancy-grid-map.md) +- [グリッドマップフュージョン](synchronized_grid_map_fusion.md) -## Settings +## 設定 -Occupancy grid map is generated on `map_frame`, and grid orientation is fixed. +オキュパンシーグリッドマップは `map_frame` で生成され、グリッドの向きは固定されています。 -You may need to choose `scan_origin_frame` and `gridmap_origin_frame` which means sensor origin and gridmap origin respectively. Especially, set your main LiDAR sensor frame (e.g. `velodyne_top` in sample_vehicle) as a `scan_origin_frame` would result in better performance. +センサー原点とグリッドマップ原点をそれぞれ意味する `scan_origin_frame` と `gridmap_origin_frame` の選択が必要になる場合があります。特に、メインの LiDAR センサーフレーム(サンプル車両の場合、`velodyne_top`)を `scan_origin_frame` に設定すると、より優れたパフォーマンスが得られます。 ![image_for_frame_parameter_visualization](./image/gridmap_frame_settings.drawio.svg) -### Parameters +### パラメーター {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/binary_bayes_filter_updater.schema.json") }} {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/grid_map.schema.json") }} @@ -28,19 +28,47 @@ You may need to choose `scan_origin_frame` and `gridmap_origin_frame` which mean {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/pointcloud_based_occupancy_grid_map.schema.json") }} {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json") }} -### Downsample input pointcloud(Optional) +### 入力ポイントクラウドのダウンサンプリング(オプション) -If you set `downsample_input_pointcloud` to `true`, the input pointcloud will be downsampled and following topics are also used. This feature is currently only for the pointcloud based occupancy grid map. +`downsample_input_pointcloud` を `true` に設定すると、入力ポイントクラウドはダウンサンプリングされ、次のトピックも使用されます。この機能は現在、ポイントクラウドライダー型オキュパンシーグリッドマップでのみ使用できます。 - pointcloud_based_occupancy_grid_map method + ```yaml # downsampled raw and obstacle pointcloud /perception/occupancy_grid_map/obstacle/downsample/pointcloud /perception/occupancy_grid_map/raw/downsample/pointcloud ``` -- multi_lidar_pointcloud_based_point_cloud +## マルチLiDARポイントクラウドベースのポイントクラウド + +`multi_lidar_pointcloud_based_point_cloud`モジュールは、複数のLiDARスキャナーからのポイントクラウドデータを統合して、高品質で濃密なポイントクラウドを作成します。このポイントクラウドは、他のPlanningコンポーネントに使用され、自車位置における周辺環境の正確な表現を提供します。 + +### 特徴 + +* 複数のLiDARからのポイントクラウドデータを統合 +* LiDARの視差を補正して、より正確なポイントクラウドを生成 +* ノイズや異常値を除去して、高品質なポイントクラウドを生成 +* `post resampling`を使用して、ポイントクラウドの密度のばらつきを削減 + +### 使用法 + +`multi_lidar_pointcloud_based_point_cloud`モジュールを使用するには、次の手順に従います。 + +1. モジュールの必要なパラメーターを設定します。 +2. モジュールをAutowareのPlanningパイプラインに接続します。 +3. モジュールを実行します。 + +### 出力 + +`multi_lidar_pointcloud_based_point_cloud`モジュールは、次の出力を生成します。 + +* 高品質で濃密なポイントクラウド +* 各LiDARの点の距離逸脱量 +* 各LiDARの点の速度逸脱量 +* 各LiDARの点の加速度逸脱量 + ```yaml # downsampled raw and obstacle pointcloud @@ -48,18 +76,20 @@ If you set `downsample_input_pointcloud` to `true`, the input pointcloud will be /perception/occupancy_grid_map//raw/downsample/pointcloud ``` -### Test +### テスト + +このパッケージは `gtest` を使用するユニットテストを提供します。 +以下のコマンドでテストを実行できます。 -This package provides unit tests using `gtest`. -You can run the test by the following command. ```bash colcon test --packages-select autoware_probabilistic_occupancy_grid_map --event-handlers console_direct+ ``` -Test contains the following. +テスト内容: + +- コスト値変換関数のユニットテスト +- ユーティリティ関数のユニットテスト +- オキュパンシグリッドマップ結合関数のユニットテスト +- ポイントクラウドベースオキュパンシグリッドマップの入出力テスト -- Unit test for cost value conversion function -- Unit test for utility functions -- Unit test for occupancy grid map fusion functions -- Input/Output test for pointcloud based occupancy grid map diff --git a/perception/autoware_radar_crossing_objects_noise_filter/README.md b/perception/autoware_radar_crossing_objects_noise_filter/README.md index 553d932717442..1b51f1c947868 100644 --- a/perception/autoware_radar_crossing_objects_noise_filter/README.md +++ b/perception/autoware_radar_crossing_objects_noise_filter/README.md @@ -1,43 +1,36 @@ -# autoware_radar_crossing_objects_noise_filter +## autoware_radar_crossing_objects_noise_filter -This package contains a radar noise filter module for [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl). -This package can filter the noise objects which cross to the ego vehicle. +このパッケージは、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl) に対するレーダーノイズフィルタモジュールを提供します。このパッケージは、自車と交差するノイズオブジェクトを除去できます。 -## Design +## 設計 -### Background +### 背景 -This package aim to filter the noise objects which cross from the ego vehicle. -The reason why these objects are noise is as below. +このパッケージは、自車から交差するノイズオブジェクトを除去することを目的としています。これらのオブジェクトがノイズである理由は次のとおりです。 -- 1. The objects with doppler velocity can be trusted more than those with vertical velocity to it. +- 1. ドップラー速度を持つオブジェクトは、垂直速度を持つオブジェクトよりも信頼できます。 -Radars can get velocity information of objects as doppler velocity, but cannot get vertical velocity to doppler velocity directory. -Some radars can output the objects with not only doppler velocity but also vertical velocity by estimation. -If the vertical velocity estimation is poor, it leads to output noise objects. -In other words, the above situation is that the objects which has vertical twist viewed from ego vehicle can tend to be noise objects. +レーダーは、ドップラー速度としてオブジェクトの速度情報を取得できますが、垂直速度をドップラー速度から直接取得することはできません。一部のレーダーは、推定によってドップラー速度だけでなく垂直速度を持つオブジェクトを出力できます。垂直速度の推定が不十分な場合、ノイズオブジェクトが出力されます。言い換えると、上記の状況は、自車から見たときに垂直方向のひねりがあるオブジェクトがノイズオブジェクトになりやすいということです。 -The example is below figure. -Velocity estimation fails on static objects, resulting in ghost objects crossing in front of ego vehicles. +例を次の図に示します。静止したオブジェクトの速度推定が失敗し、自車の真の前方を通過するゴーストオブジェクトが発生します。 ![vertical_velocity_objects](docs/vertical_velocity_objects.png) -- 2. Turning around by ego vehicle affect the output from radar. +- 2. 自車の旋回はレーダーからの出力を影響します。 -When the ego vehicle turns around, the radars outputting at the object level sometimes fail to estimate the twist of objects correctly even if [radar_tracks_msgs_converter](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_tracks_msgs_converter) compensates by the ego vehicle twist. -So if an object detected by radars has circular motion viewing from base_link, it is likely that the speed is estimated incorrectly and that the object is a static object. +自車が旋回すると、オブジェクトレベルで出力を生成するレーダーは、[radar_tracks_msgs_converter](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_tracks_msgs_converter) が自車ひねりで補正する場合でも、オブジェクトのひねりを正しく推定できないことがあります。そのため、レーダーによって検出されたオブジェクトがベースリンクから見て円運動している場合、速度が正しく推定されず、オブジェクトが静止している可能性があります。 -The example is below figure. -When the ego vehicle turn right, the surrounding objects have left circular motion. +例を次の図に示します。自車が右折すると、周囲のオブジェクトは左回りの円運動をします。 ![turning_around](docs/turning_around.png) -### Algorithm +### アルゴリズム -To filter the objects crossing to ego vehicle, this package filter the objects as below algorithm. +自車と交差するオブジェクトを除去するために、このパッケージは次のアルゴリズムを使用してオブジェクトを除去します。 ![algorithm](docs/radar_crossing_objects_noise_filter.drawio.svg) + ```cpp // If velocity of an object is rather than the velocity_threshold, // and crossing_yaw is near to vertical @@ -51,30 +44,31 @@ To filter the objects crossing to ego vehicle, this package filter the objects a } ``` -## Interface +## インターフェース -### Input +### 入力 - `~/input/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - Input radar objects + - レーダー検出オブジェクト -### Output +### 出力 - `~/output/noise_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - Noise objects + - ノイズオブジェクト - `~/output/filtered_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - Filtered objects + - フィルタリングされたオブジェクト -### Parameters +### パラメーター - `angle_threshold` (double) [rad] - - Default parameter is 1.0472. + - デフォルトパラメーターは1.0472です。 -This parameter is the angle threshold to filter. It has condition that 0 < `angle_threshold` < pi / 2. If the crossing angle is larger than this parameter, it can be a candidate for noise object. In other words, if it is smaller than this parameter, it is a filtered object. -If this parameter is set smaller, more objects are considered noise. In detail, see algorithm chapter. +このパラメーターは、フィルタリングする角度のしきい値です。0 < `angle_threshold` < pi / 2という条件があります。交差角がこのパラメーターより大きい場合、ノイズオブジェクトの候補となります。言い換えると、このパラメーターより小さい場合は、フィルタリングされたオブジェクトです。 +このパラメーターを小さく設定すると、より多くのオブジェクトがノイズと見なされます。詳細については、アルゴリズムの章を参照してください。 - `velocity_threshold` (double) [m/s] - - Default parameter is 3.0. + - デフォルトパラメーターは3.0です。 + +このパラメーターは、フィルタリングする速度のしきい値です。オブジェクトの速度がこのパラメーターより大きい場合、ノイズオブジェクトの候補となります。言い換えると、オブジェクトの速度がこのパラメーターより小さい場合は、フィルタリングされたオブジェクトです。 +このパラメーターを小さく設定すると、より多くのオブジェクトがノイズと見なされます。詳細については、アルゴリズムの章を参照してください。 -This parameter is the velocity threshold to filter. If velocity of an object is larger than this parameter, it can be a candidate for noise object. In other words, if velocity of an object is smaller than this parameter, it is a filtered object. -If this parameter is set smaller, more objects are considered noise. In detail, see algorithm chapter. diff --git a/perception/autoware_radar_fusion_to_detected_object/README.md b/perception/autoware_radar_fusion_to_detected_object/README.md index c57b710b09619..93e5fa63bf80c 100644 --- a/perception/autoware_radar_fusion_to_detected_object/README.md +++ b/perception/autoware_radar_fusion_to_detected_object/README.md @@ -1,137 +1,141 @@ # `autoware_radar_fusion_to_detected_object` -This package contains a sensor fusion module for radar-detected objects and 3D detected objects. +このパッケージには、レーダー検出オブジェクトと 3D 検出オブジェクトをセンサーフュージョするモジュールが含まれます。 -The fusion node can: +フュージョンノードは以下のことができます。 -- Attach velocity to 3D detections when successfully matching radar data. The tracking modules use the velocity information to enhance the tracking results while planning modules use it to execute actions like adaptive cruise control. -- Improve the low confidence 3D detections when corresponding radar detections are found. +- レーダーデータが正常にマッチした場合、3D 検出に速度を付加します。追跡モジュールは、速度情報を活用することで追跡結果を向上し、Planning モジュールはアダプティブクルーズコントロールなどのアクションを実行するために速度情報を使用します。 +- 対応するレーダー検出が見つかった場合、信頼度の低い 3D 検出を改善します。 ![process_low_confidence](docs/radar_fusion_to_detected_object_6.drawio.svg) -## Design +## 設計 -### Background +### 背景 -This package is the fusion with LiDAR-based 3D detection output and radar data. -LiDAR based 3D detection can estimate position and size of objects with high precision, but it cannot estimate velocity of objects. -Radar data can estimate doppler velocity of objects, but it cannot estimate position and size of objects with high precision -This fusion package is aim to fuse these characteristic data, and to estimate position, size, velocity of objects with high precision. +このパッケージは LiDAR ベースの 3D 検出結果とレーダーデータをフュージョンします。 +LiDAR ベースの 3D 検出は、オブジェクトの位置とサイズを高精度で推定できますが、オブジェクトの速度は推定できません。 +レーダーデータは、オブジェクトのドップラー速度を推定できますが、オブジェクトの位置とサイズを高精度で推定できません。 +このフュージョンパッケージの目的は、これらの特性データをフュージョンし、オブジェクトの位置、サイズ、速度を高精度で推定することです。 -### Algorithm +### アルゴリズム -The document of core algorithm is [here](docs/algorithm.md) +コアアルゴリズムに関するドキュメントは [こちら](docs/algorithm.md) です。 -## Interface for core algorithm +## コアアルゴリズムのインターフェース -The parameters for core algorithm can be set as `core_params`. +コアアルゴリズムのパラメータは `core_params` として設定できます。 -### Parameters for sensor fusion +### センサーフュージョンのパラメータ -- `bounding_box_margin` (double) [m] - - Default parameter is 2.0. +- `bounding_box_margin`(double、[m]) + - デフォルトパラメータは 2.0 です。 -This parameter is the distance to extend the 2D bird's-eye view bounding box on each side. -This parameter is used as a threshold to find radar centroids falling inside the extended box. +このパラメータは、2D バードビューバウンディングボックスを各辺に延ばす距離です。 +このパラメータは、拡張されたボックス内に含まれるレーダー重心を検索するためのしきい値として使用されます。 -- `split_threshold_velocity` (double) [m/s] - - Default parameter is 5.0. +- `split_threshold_velocity`(double、[m/s]) + - デフォルトパラメータは 5.0 です。 -This parameter is the object's velocity threshold to decide to split for two objects from radar information. -Note that this feature is not currently implemented. +このパラメータは、レーダー情報から 2 つのオブジェクトに分割することを決定するオブジェクトの速度しきい値です。 +この機能は現在実装されていませんのでご注意ください。 -- `threshold_yaw_diff` (double) [rad] - - Default parameter is 0.35. +- `threshold_yaw_diff`(double、[rad]) + - デフォルトパラメータは 0.35 です。 -This parameter is the yaw orientation threshold. -If the difference of yaw degree between from a LiDAR-based detection object and radar velocity, radar information is attached to output objects. +このパラメータはヨーの向きのしきい値です。 +LiDAR ベースの検出オブジェクトとレーダー速度のヨーの差がこのしきい値を下回る場合、レーダー情報が出力オブジェクトに追加されます。 -### Weight parameters for velocity estimation +### 速度推定の重みパラメータ -To tune these weight parameters, please see [document](docs/algorithm.md) in detail. +これらの重みパラメータを調整するには、詳細については [ドキュメント](docs/algorithm.md) を参照してください。 -- `velocity_weight_average` (double) -- Default parameter is 0.0. +- `velocity_weight_average`(double) +- デフォルトパラメータは 0.0 です。 -This parameter is the twist coefficient of average twist of radar data in velocity estimation. +このパラメータは速度推定におけるレーダーデータの平均のねじれ係数です。 -- `velocity_weight_median` (double) -- Default parameter is 0.0. +- `velocity_weight_median`(double) +- デフォルトパラメータは 0.0 です。 -This parameter is the twist coefficient of median twist of radar data in velocity estimation. +**速度推定におけるレーダーデータの中央値のツイスト係数** - `velocity_weight_min_distance` (double) -- Default parameter is 1.0. + - デフォルトパラメータは 1.0 です。 -This parameter is the twist coefficient of radar data nearest to the center of bounding box in velocity estimation. +**速度推定におけるバウンディングボックスの中心に最も近いレーダーデータのツイスト係数** - `velocity_weight_target_value_average` (double) -- Default parameter is 0.0. + - デフォルトパラメータは 0.0 です。 -This parameter is the twist coefficient of target value weighted average in velocity estimation. Target value is amplitude if using radar pointcloud. Target value is probability if using radar objects. +**速度推定におけるターゲット値の加重平均のツイスト係数** +レーダーポイントクラウドを使用している場合、ターゲット値は振幅です。レーダーオブジェクトを使用している場合、ターゲット値は確率です。 - `velocity_weight_target_value_top` (double) -- Default parameter is 0.0. + - デフォルトパラメータは 0.0 です。 -This parameter is the twist coefficient of top target value radar data in velocity estimation. Target value is amplitude if using radar pointcloud. Target value is probability if using radar objects. +**速度推定におけるトップターゲット値レーダーデータのツイスト係数** +レーダーポイントクラウドを使用している場合、ターゲット値は振幅です。レーダーオブジェクトを使用している場合、ターゲット値は確率です。 -### Parameters for fixed object information +### 固定オブジェクト情報の**パラメータ - `convert_doppler_to_twist` (bool) - - Default parameter is false. + - デフォルトパラメータは false です。 -This parameter is the flag whether convert doppler velocity to twist using the yaw information of a detected object. +**検出されたオブジェクトのヨー情報を使用して、ドップラー速度をツイストに変換するフラグ** - `threshold_probability` (float) - - Default parameter is 0.4. + - デフォルトパラメータは 0.4 です。 -This parameter is the threshold to filter output objects. -If the probability of an output object is lower than this parameter, and the output object does not have radar points/objects, then delete the object. +**出力オブジェクトをフィルタリングするためのしきい値** +出力オブジェクトの確率がこのパラメータよりも低く、出力オブジェクトにレーダーポイント/オブジェクトがない場合、オブジェクトを削除します。 - `compensate_probability` (bool) - - Default parameter is false. + - デフォルトパラメータは false です。 -This parameter is the flag to use probability compensation. -If this parameter is true, compensate probability of objects to threshold probability. +**確率補償を使用するフラグ** +このパラメータが true の場合、オブジェクトの確率をしきい値確率に補償します。 -## Interface for `autoware_radar_object_fusion_to_detected_object` +## **`autoware_radar_object_fusion_to_detected_object`** のインターフェイス -Sensor fusion with radar objects and a detected object. +レーダーオブジェクトと検出されたオブジェクトとのセンサーフュージョン -- Calculation cost is O(nm). - - n: the number of radar objects. - - m: the number of objects from 3d detection. +- 計算コストは O(nm) です。 + - n: レーダーオブジェクトの数。 + - m: 3D 検出からのオブジェクトの数。 + +### 実行方法 -### How to launch ```sh ros2 launch autoware_radar_fusion_to_detected_object radar_object_to_detected_object.launch.xml ``` -### Input +### 入力 - `~/input/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - 3D detected objects. + - 3Dで認識されたオブジェクト - `~/input/radar_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - Radar objects. Note that frame_id need to be same as `~/input/objects` + - レーダーオブジェクト。フレームIDは`~/input/objects`と同じである必要がある -### Output +### 出力 - `~/output/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - 3D detected object with twist. + - ツイスト付き3D認識オブジェクト - `~/debug/low_confidence_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - 3D detected object that doesn't output as `~/output/objects` because of low confidence + - 信頼度が低いため`~/output/objects`として出力されない3D認識オブジェクト -### Parameters +### パラメータ -The parameters for core algorithm can be set as `node_params`. +コアアルゴリズムのパラメータは`node_params`として設定できます。 - `update_rate_hz` (double) [hz] - - Default parameter is 20.0 + - デフォルトパラメータは20.0です + +このパラメータは`onTimer`関数の更新率です。 +このパラメータは入力トピックのフレームレートと同じである必要があります。 -This parameter is update rate for the `onTimer` function. -This parameter should be same as the frame rate of input topics. +## radar_scan_fusion_to_detected_objectインターフェイス(未定) -## Interface for radar_scan_fusion_to_detected_object (TBD) +未実装 -Under implement diff --git a/perception/autoware_radar_object_clustering/README.md b/perception/autoware_radar_object_clustering/README.md index 0e66208d9f84e..7dc2d29eb4f40 100644 --- a/perception/autoware_radar_object_clustering/README.md +++ b/perception/autoware_radar_object_clustering/README.md @@ -1,82 +1,82 @@ # `autoware_radar_object_clustering` -This package contains a radar object clustering for [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl) input. +このパッケージには、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl) 入力用のレーダオブジェクトのクラスタリングが含まれています。 -This package can make clustered objects from radar DetectedObjects, the objects which is converted from RadarTracks by [radar_tracks_msgs_converter](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_tracks_msgs_converter) and is processed by noise filter. -In other word, this package can combine multiple radar detections from one object into one and adjust class and size. +このパッケージは、[radar_tracks_msgs_converter](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_tracks_msgs_converter)によってレーダトラックから変換され、ノイズフィルタによって処理されるレーダDetectedObjectsから、クラスタ化されたオブジェクトを作成できます。 +言い換えれば、このパッケージは、1つのオブジェクトからの複数のレーダ検出を1つに結合して、クラスとサイズを調整できます。 ![radar_clustering](docs/radar_clustering.drawio.svg) -## Design +## 設計 -### Background +### 背景 -In radars with object output, there are cases that multiple detection results are obtained from one object, especially for large vehicles such as trucks and trailers. -Its multiple detection results cause separation of objects in tracking module. -Therefore, by this package the multiple detection results are clustered into one object in advance. +オブジェクト出力を搭載したレーダでは、特にトラックやトレーラーなどの大型車両では、1つのオブジェクトから複数の検出結果が得られる場合があります。 +その複数の検出結果は、追跡モジュール内のオブジェクトの分離を引き起こします。 +そのため、このパッケージによって複数の検出結果は事前に1つのオブジェクトにクラスタリングされます。 -### Algorithm +### アルゴリズム -- 1. Sort by distance from `base_link` +- 1. `base_link`からの距離でソート -At first, to prevent changing the result from depending on the order of objects in DetectedObjects, input objects are sorted by distance from `base_link`. -In addition, to apply matching in closeness order considering occlusion, objects are sorted in order of short distance in advance. +まず、DetectedObjects内のオブジェクトの順序に依存して結果が変化するのを防ぐために、入力オブジェクトは`base_link`からの距離によってソートされます。 +さらに、遮蔽を考慮して近接順序でマッチングを適用するために、オブジェクトはあらかじめ距離の短い順にソートされます。 -- 2. Clustering +- 2. クラスタリング -If two radar objects are near, and yaw angle direction and velocity between two radar objects is similar (the degree of these is defined by parameters), then these are clustered. -Note that radar characteristic affect parameters for this matching. -For example, if resolution of range distance or angle is low and accuracy of velocity is high, then `distance_threshold` parameter should be bigger and should set matching that strongly looks at velocity similarity. +2つのレーダオブジェクトが近く、2つのレーダオブジェクト間のヨー角方向と速度が類似している場合(これらのある程度の程度はパラメータによって定義されます)、それらはクラスタリングされます。 +レーダの特性がこのマッチングのパラメータに影響を与えることに注意してください。 +例えば、レンジ距離または角度の分解能が低く、速度の精度が高い場合、`distance_threshold`パラメータは大きくし、速度の類似性を強く重視したマッチングを設定する必要があります。 ![clustering](docs/clustering.drawio.svg) -After grouping for all radar objects, if multiple radar objects are grouping, the kinematics of the new clustered object is calculated from average of that and label and shape of the new clustered object is calculated from top confidence in radar objects. +すべてのレーダオブジェクトのグループ化後、複数のレーダオブジェクトがグループ化されている場合、新しいクラスタ化されたオブジェクトの運動学はその平均から計算され、ラベルと形状はその中で最大の信頼度をもつレーダオブジェクトのその情報から計算されます。 -- 3. Fixed label correction +- 3. 固定されたラベルの訂正 -When the label information from radar outputs lack accuracy, `is_fixed_label` parameter is recommended to set `true`. -If the parameter is true, the label of a clustered object is overwritten by the label set by `fixed_label` parameter. -If this package use for faraway dynamic object detection with radar, the parameter is recommended to set to `VEHICLE`. +レーダ出力からのラベル情報が十分に正確でない場合、`is_fixed_label`パラメータを`true`に設定することをお勧めします。 +このパラメータが真の場合、クラスタ化されたオブジェクトのラベルは、`fixed_label`パラメータによって設定されたラベルで上書きされます。 +このパッケージがレーダによる遠くのダイナミックオブジェクト検出のために使用される場合、このパラメータは`VEHICLE`に設定することをお勧めします。 -- 4. Fixed size correction +- 4. 固定されたサイズの訂正 -When the size information from radar outputs lack accuracy, `is_fixed_size` parameter is recommended to set `true`. -If the parameter is true, the size of a clustered object is overwritten by the label set by `size_x`, `size_y`, and `size_z` parameters. -If this package use for faraway dynamic object detection with radar, the parameter is recommended to set to -`size_x`, `size_y`, `size_z`, as average of vehicle size. -Note that to use for [multi_objects_tracker](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_multi_object_tracker), the size parameters need to exceed `min_area_matrix` parameters of it. +レーダ出力からのサイズ情報が十分に正確でない場合、`is_fixed_size`パラメータを`true`に設定することをお勧めします。 +このパラメータが真の場合、クラスタ化されたオブジェクトのサイズは、`size_x`、`size_y`、および`size_z`パラメータによって設定された値で上書きされます。 +このパッケージをレーダによる遠くのダイナミックオブジェクト検出に使用する場合は、このパラメータを車両の平均サイズに近い値に設定することをお勧めします。 +[multi_objects_tracker](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_multi_object_tracker)に使用するために、サイズパラメータは`min_area_matrix`パラメータを超過する必要があることに注意してください。 -### Limitation +### 制限事項 -For now, size estimation for clustered object is not implemented. -So `is_fixed_size` parameter is recommended to set `true`, and size parameters is recommended to set to value near to average size of vehicles. +現在、クラスタ化されたオブジェクトのサイズの推定は実装されていません。 +したがって、`is_fixed_size`パラメータを`true`に設定し、サイズパラメータを車両の平均サイズに近い値に設定することをお勧めします。 -## Interface +## インターフェース -### Input +### 入力 - `~/input/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - Radar objects + - レーダオブジェクト -### Output +### 出力 - `~/output/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - Output objects + - 出力オブジェクト -### Parameter +### パラメータ -- `angle_threshold` (double) [rad] - - Default parameter is 0.174. -- `distance_threshold` (double) [m] - - Default parameter is 4.0. -- `velocity_threshold` (double) [m/s] - - Default parameter is 2.0. +- `angle_threshold` (ダブル型) [rad] + - デフォルトのパラメータは 0.174 です。 +- `distance_threshold` (ダブル型) [m] + - デフォルトのパラメータは 4.0 です。 +- `velocity_threshold` (ダブル型) [m/s] + - デフォルトのパラメータは 2.0 です。 -These parameter are thresholds for angle, distance, and velocity to judge whether radar detections come from one object in "clustering" processing, which is written in detail at algorithm section. -If all of the difference in angle/distance/velocity from two objects is less than the thresholds, then the two objects are merged to one clustered object. -If these parameter is larger, more objects are merged to one clustered object. +これらのパラメータは、"クラスタリング"処理でレーダー検出が 1 つのオブジェクトから来るかどうかを判定するための角度、距離、速度のしきい値です。このアルゴリズムの詳細は、アルゴリズムのセクションに記載されています。 +2 つのオブジェクトからの角度/距離/速度の差がすべてしきい値より小さい場合、2 つのオブジェクトは 1 つのクラスター化されたオブジェクトにマージされます。 +これらのパラメータが大きいほど、より多くのオブジェクトが 1 つのクラスター化されたオブジェクトにマージされます。 + +これらは以下のような `isSameObject` 関数で使用されます。 -These are used in `isSameObject` function as below. ```cpp @@ -104,22 +104,23 @@ bool RadarObjectClusteringNode::isSameObject( ``` - `is_fixed_label` (bool) - - Default parameter is false. + - デフォルトパラメータはfalseです。 - `fixed_label` (string) - - Default parameter is "UNKNOWN". + - デフォルトパラメータは"UNKNOWN"です。 -`is_fixed_label` is the flag to use fixed label. -If it is true, the label of a clustered object is overwritten by the label set by `fixed_label` parameter. -If the radar objects do not have label information, then it is recommended to use fixed label. +`is_fixed_label`は固定ラベルを使用するフラグです。 +trueの場合、クラスタされたオブジェクトのラベルは`fixed_label`パラメータで設定されたラベルで上書きされます。 +レーダーオブジェクトにラベル情報がない場合は、固定ラベルを使用することをお勧めします。 - `is_fixed_size` (bool) - - Default parameter is false. + - デフォルトパラメータはfalseです。 - `size_x` (double) [m] - - Default parameter is 4.0. + - デフォルトパラメータは4.0です。 - `size_y` (double) [m] - - Default parameter is 1.5. + - デフォルトパラメータは1.5です。 - `size_z` (double) [m] - - Default parameter is 1.5. + - デフォルトパラメータは1.5です。 + +`is_fixed_size`は固定サイズのパラメータを使用するフラグです。 +trueの場合、クラスタされたオブジェクトのサイズは`size_x`, `size_y`, `size_z`パラメータで設定されたラベルで上書きされます。 -`is_fixed_size` is the flag to use fixed size parameters. -If it is true, the size of a clustered object is overwritten by the label set by `size_x`, `size_y`, and `size_z` parameters. diff --git a/perception/autoware_radar_object_tracker/README.md b/perception/autoware_radar_object_tracker/README.md index f9ca194de2491..1797f91a5fb06 100644 --- a/perception/autoware_radar_object_tracker/README.md +++ b/perception/autoware_radar_object_tracker/README.md @@ -1,95 +1,123 @@ # `autoware_radar_object_tracker` -## Purpose +## 目的 -This package provides a radar object tracking node that processes sequences of detected objects to assign consistent identities to them and estimate their velocities. +このパッケージはレーダーオブジェクト追跡ノードを提供し、検出されたオブジェクトのシーケンスを処理してオブジェクトに一貫性のあるIDを割り当て、その速度を推定します。 -## Inner-workings / Algorithms +## 内部処理 / アルゴリズム -This radar object tracker is a combination of data association and tracking algorithms. +このレーダーオブジェクト追跡器は、データ関連付けアルゴリズムと追跡アルゴリズムの組み合わせです。 - + -### Data Association +### データ関連付け -The data association algorithm matches detected objects to existing tracks. +データ関連付けアルゴリズムは、検出されたオブジェクトを既存の軌道と照合します。 -### Tracker Models +### 追跡モデル -The tracker models used in this package vary based on the class of the detected object. -See more details in the [models.md](models.md). +このパッケージで使用される追跡モデルは、検出されたオブジェクトのクラスによって異なります。詳細については、[models.md](models.md) を参照してください。 - + -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------------- | ------------------------------------------------ | ---------------- | -| `~/input` | `autoware_perception_msgs::msg::DetectedObjects` | Detected objects | -| `/vector/map` | `autoware_map_msgs::msg::LaneletMapBin` | Map data | +| 名前 | 型 | 説明 | +| ------------- | ------------------------------------------------ | ---------- | +| `~/input` | `autoware_perception_msgs::msg::DetectedObjects` | 検出物体 | +| `/vector/map` | `autoware_map_msgs::msg::LaneletMapBin` | 地図データ | -### Output +### 出力 -| Name | Type | Description | -| ---------- | ----------------------------------------------- | --------------- | -| `~/output` | `autoware_perception_msgs::msg::TrackedObjects` | Tracked objects | +このドキュメントは、**Autoware** ソフトウェアの Planning モジュールの技術仕様を記述しています。Planning モジュールは、自車のパスを生成し、目標速度を決定する責任を負います。 -## Parameters +### 機能 -### Node Parameters +Planning モジュールは、次のような機能を提供します。 -| Name | Type | Default Value | Description | -| ------------------------------------ | ------ | --------------------------- | --------------------------------------------------------------------------------------------------------------- | -| `publish_rate` | double | 10.0 | The rate at which to publish the output messages | -| `world_frame_id` | string | "map" | The frame ID of the world coordinate system | -| `enable_delay_compensation` | bool | false | Whether to enable delay compensation. If set to `true`, output topic is published by timer with `publish_rate`. | -| `tracking_config_directory` | string | "./config/tracking/" | The directory containing the tracking configuration files | -| `enable_logging` | bool | false | Whether to enable logging | -| `logging_file_path` | string | "/tmp/association_log.json" | The path to the file where logs should be written | -| `tracker_lifetime` | double | 1.0 | The lifetime of the tracker in seconds | -| `use_distance_based_noise_filtering` | bool | true | Whether to use distance based filtering | -| `minimum_range_threshold` | double | 70.0 | Minimum distance threshold for filtering in meters | -| `use_map_based_noise_filtering` | bool | true | Whether to use map based filtering | -| `max_distance_from_lane` | double | 5.0 | Maximum distance from lane for filtering in meters | -| `max_angle_diff_from_lane` | double | 0.785398 | Maximum angle difference from lane for filtering in radians | -| `max_lateral_velocity` | double | 5.0 | Maximum lateral velocity for filtering in m/s | -| `can_assign_matrix` | array | | An array of integers used in the data association algorithm | -| `max_dist_matrix` | array | | An array of doubles used in the data association algorithm | -| `max_area_matrix` | array | | An array of doubles used in the data association algorithm | -| `min_area_matrix` | array | | An array of doubles used in the data association algorithm | -| `max_rad_matrix` | array | | An array of doubles used in the data association algorithm | -| `min_iou_matrix` | array | | An array of doubles used in the data association algorithm | +* 感知データからの動的障害物の検出 +* 自車位置に基づく周囲環境のマップ構築 +* 目標速度とステアリングの計算 -See more details in the [models.md](models.md). +### Planning アーキテクチャ -### Tracker parameters +Planning モジュールは、以下のコンポーネントで構成されています。 -Currently, this package supports the following trackers: +* **Perception:** ダイナミック障害物を検出します。 +* **Map:** 自車位置に基づいて周囲環境のマップを構築します。 +* **Motion Planning:** 目標速度と軌跡を計算します。 +* **Speed Planning:** 目標速度を決定します。 +* **Decision Making:** 感知データとマップ情報を統合し、パスを生成します。 + +### Planning パイプライン + +Planning パイプラインは、以下の手順で構成されています。 + +1. **Perception 更新:** ダイナミック障害物が検出されます。 +2. **Map 更新:** 自車位置に基づいてマップが構築されます。 +3. **目標速度計算:** 目標速度が決定されます。 +4. **軌跡生成:** 障害物を回避する軌跡が生成されます。 +5. **パス生成:** 軌跡からパスが生成されます。 + +| 名前 | タイプ | 説明 | +| ---------- | ----------------------------------------------- | -------- | +| `~/output` | `autoware_perception_msgs::msg::TrackedObjects` | 追跡対象 | + +## パラメータ + +### ノードパラメータ + +| 名前 | タイプ | デフォルト値 | 説明 | +| ------ | ------ | --------------------------- | --------------------------------------------------------------------------------------------------------------- | +| `publish_rate` | double | 10.0 | 出力メッセージをパブリッシュするレート | +| `world_frame_id` | string | "map" | ワールド座標系のフレームID | +| `enable_delay_compensation` | bool | false | ディレイ補正を有効にするかどうか。`True`に設定すると、出力トピックは`publish_rate`でタイマーによりパブリッシュされます。 | +| `tracking_config_directory` | string | "./config/tracking/" | トラッキング設定ファイルを含むディレクトリ | +| `enable_logging` | bool | false | ロギングを有効にするかどうか | +| `logging_file_path` | string | "/tmp/association_log.json" | ログを書き込むファイルのパス | +| `tracker_lifetime` | double | 1.0 | トラッカーの有効期間(秒) | +| `use_distance_based_noise_filtering` | bool | true | 距離ベースのフィルタリングを使用するかどうか | +| `minimum_range_threshold` | double | 70.0 | フィルタリングの最小距離しきい値(メートル) | +| `use_map_based_noise_filtering` | bool | true | マップベースのフィルタリングを使用するかどうか | +| `max_distance_from_lane` | double | 5.0 | フィルタリングのためのレーンからの最大距離(メートル) | +| `max_angle_diff_from_lane` | double | 0.785398 | フィルタリングのためのレーンからの最大角度差(ラジアン) | +| `max_lateral_velocity` | double | 5.0 | フィルタリングのための最大側方速度(m/s) | +| `can_assign_matrix` | array | | データアソシエーションアルゴリズムで使用される整数配列 | +| `max_dist_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +| `max_area_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +| `min_area_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +| `max_rad_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +| `min_iou_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | + +## トラッカーのパラメータ + +このパッケージは現在、以下のトラッカーをサポートしています。 - `linear_motion_tracker` - `constant_turn_rate_motion_tracker` -Default settings for each tracker are defined in the [./config/tracking/](./config/tracking/), and described in [models.md](models.md). +それぞれのトラッカーの初期設定は [./config/tracking/](./config/tracking/) で定義されており、[models.md](models.md) に記載されています。 + +## 仮定と既知の限界 -## Assumptions / Known limits + - +## (省略可) エラーの検出と処理 -## (Optional) Error detection and handling + - +## (省略可) パフォーマンスの評価 -## (Optional) Performance characterization + - +## (省略可) 参照/外部リンク -## (Optional) References/External links + - +## (省略可) 将来の拡張機能/未実装部分 -## (Optional) Future extensions / Unimplemented parts + - diff --git a/perception/autoware_radar_tracks_msgs_converter/README.md b/perception/autoware_radar_tracks_msgs_converter/README.md index 5010f5f873932..c93575c6ebdcd 100644 --- a/perception/autoware_radar_tracks_msgs_converter/README.md +++ b/perception/autoware_radar_tracks_msgs_converter/README.md @@ -1,24 +1,24 @@ -# radar_tracks_msgs_converter +## radar_tracks_msgs_converter -This package converts from [radar_msgs/msg/RadarTracks](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTracks.msg) into [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.msg) and [autoware_perception_msgs/msg/TrackedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/TrackedObject.msg). +このパッケージは、[radar_msgs/msg/RadarTracks](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTracks.msg) から [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.msg) および [autoware_perception_msgs/msg/TrackedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/TrackedObject.msg) へと変換します。 -- Calculation cost is O(n). - - n: The number of radar objects +- 計算コストは O(n) です。 + - n: レーダーオブジェクトの個数 -## Design +## 設計 -### Background +### 背景 -Autoware uses [radar_msgs/msg/RadarTracks.msg](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTracks.msg) as radar objects input data. -To use radar objects data for Autoware perception module easily, `radar_tracks_msgs_converter` converts message type from `radar_msgs/msg/RadarTracks.msg` to `autoware_perception_msgs/msg/DetectedObject`. -In addition, because many detection module have an assumption on base_link frame, `radar_tracks_msgs_converter` provide the functions of transform frame_id. +Autoware はレーダーオブジェクト入力データとして [radar_msgs/msg/RadarTracks.msg](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTracks.msg) を使用します。 +レーダーオブジェクトデータを Autoware perception モジュールで簡単に使用するために、`radar_tracks_msgs_converter` はメッセージタイプを `radar_msgs/msg/RadarTracks.msg` から `autoware_perception_msgs/msg/DetectedObject` へと変換します。 +さらに、多くの検出モジュールは `base_link` フレームをベースとしていると想定しているため、`radar_tracks_msgs_converter` は `frame_id` を変換する機能を提供します。 -### Note +### 注意 -`Radar_tracks_msgs_converter` converts the label from `radar_msgs/msg/RadarTrack.msg` to Autoware label. -Label id is defined as below. +`Radar_tracks_msgs_converter` はラベルを `radar_msgs/msg/RadarTrack.msg` から Autoware ラベルへと変換します。 +ラベル ID は以下のように定義されています。 -| | RadarTrack | Autoware | +| | レーダートラック | Autoware | | ---------- | ---------- | -------- | | UNKNOWN | 32000 | 0 | | CAR | 32001 | 1 | @@ -29,60 +29,61 @@ Label id is defined as below. | BICYCLE | 32006 | 6 | | PEDESTRIAN | 32007 | 7 | -Additional vendor-specific classifications are permitted starting from 32000 in [radar_msgs/msg/RadarTrack.msg](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTrack.msg). -Autoware objects label is defined in [ObjectClassification](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/ObjectClassification.msg) +追加のベンダー固有分類は、32000 から [radar_msgs/msg/RadarTrack.msg](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTrack.msg) で許可されています。 +Autoware オブジェクト ラベルは [ObjectClassification](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/ObjectClassification.msg) で定義されています。 -## Interface +## インターフェイス -### Input +### 入力 - `~/input/radar_objects` (`radar_msgs/msg/RadarTracks.msg`) - - Input radar topic + - レーダー入力トピック - `~/input/odometry` (`nav_msgs/msg/Odometry.msg`) - - Ego vehicle odometry topic + - 自車オドメトリー トピック -### Output +### 出力 - `~/output/radar_detected_objects` (`autoware_perception_msgs/msg/DetectedObject.idl`) - - DetectedObject topic converted to Autoware message. - - This is used for radar sensor fusion detection and radar detection. + - Autoware メッセージに変換された DetectedObject トピック。 + - レーダーセンサーフュージョン検出とレーダー検出に使用されます。 - `~/output/radar_tracked_objects` (`autoware_perception_msgs/msg/TrackedObject.idl`) - - TrackedObject topic converted to Autoware message. - - This is used for tracking layer sensor fusion. + - Autoware メッセージに変換された TrackedObject トピック。 + - 追跡レイヤーのセンサーフュージョンに使用されます。 -### Parameters +### パラメーター -#### Parameter Summary +#### パラメーター概要 {{ json_to_markdown("perception/autoware_radar_tracks_msgs_converter/schema/radar_tracks_msgs_converter.schema.json") }} -#### Parameter Description +#### パラメーターの説明 -- `update_rate_hz` (double) [hz] - - Default parameter is 20.0 +- `update_rate_hz` (倍) [hz] + - デフォルト パラメーターは 20.0 です。 -This parameter is update rate for the `onTimer` function. -This parameter should be same as the frame rate of input topics. +このパラメーターは `onTimer` 関数の更新レートです。 +このパラメーターは入力トピックのフレームレートと同じにする必要があります。 -- `new_frame_id` (string) - - Default parameter is "base_link" +- `new_frame_id` (文字列) + - デフォルト パラメーターは "base_link" です。 -This parameter is the header frame_id of the output topic. +このパラメーターは出力トピックのヘッダー `frame_id` です。 -- `use_twist_compensation` (bool) - - Default parameter is "true" +- `use_twist_compensation` (boolean) + - デフォルト パラメーターは "true" です。 -This parameter is the flag to use the compensation to linear of ego vehicle's twist. -If the parameter is true, then the twist of the output objects' topic is compensated by the ego vehicle linear motion. +このパラメーターは自車のツイストの直線運動に対する補正を使用するフラグです。 +パラメーターが `true` の場合、出力对象的トピックのツイストは自車の直線運動によって補正されます。 -- `use_twist_yaw_compensation` (bool) - - Default parameter is "false" +- `use_twist_yaw_compensation` (boolean) + - デフォルト パラメーターは "false" です。 -This parameter is the flag to use the compensation to yaw rotation of ego vehicle's twist. -If the parameter is true, then the ego motion compensation will also consider yaw motion of the ego vehicle. +このパラメーターは自車のツイストのヨー回転に対する補正を使用するフラグです。 +パラメーターが `true` の場合、自車のヨー運動もエゴモーション補正の対象となります。 - `static_object_speed_threshold` (float) [m/s] - - Default parameter is 1.0 + - デフォルトのパラメーターは 1.0 です。 + +このパラメーターはフラグ `is_stationary` を決定するしきい値です。 +速度がこのパラメーターよりも低い場合、DetectedObject のフラグ `is_stationary` は `true` に設定され、静的オブジェクトとして扱われます。 -This parameter is the threshold to determine the flag `is_stationary`. -If the velocity is lower than this parameter, the flag `is_stationary` of DetectedObject is set to `true` and dealt as a static object. diff --git a/perception/autoware_shape_estimation/README.md b/perception/autoware_shape_estimation/README.md index d3cb88ae130d1..efcb50a3aac5c 100644 --- a/perception/autoware_shape_estimation/README.md +++ b/perception/autoware_shape_estimation/README.md @@ -1,88 +1,124 @@ # autoware_shape_estimation -## Purpose +## 目的 -This node calculates a refined object shape (bounding box, cylinder, convex hull) in which a pointcloud cluster fits according to a label. +このノードは、ポイントクラスタがラベルに従ってフィットする、洗練されたオブジェクトシェイプ(バウンディングボックス、円柱、凸包)を計算します。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -### Fitting algorithms +### フィッティングアルゴリズム -- bounding box +- バウンディングボックス - - L-shape fitting: See reference below for details - - ML based shape fitting: See ML Based Shape Fitting Implementation section below for details + - L字シェイプフィッティング: 詳細については以下の文献を参照してください + - MLベースのシェイプフィッティング: 詳細については、以下のMLベースのシェイプフィッティングの実装のセクションを参照してください -- cylinder +- 円柱 `cv::minEnclosingCircle` -- convex hull +- 凸包 `cv::convexHull` -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------- | -------------------------------------------------------- | ------------------------------------- | -| `input` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | detected objects with labeled cluster | +| 名称 | タイプ | 説明 | +| --------- | -------------------------------------------------------- | ------------------------------------- | +| `input` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | ラベル付きクラスタによる検出オブジェクト | -### Output +### 出力 -| Name | Type | Description | +**自動運転ソフトウェアのドキュメント** + +**要約** + +このドキュメントでは、Autowareの自己位置推定コンポーネントの計画モジュールについての詳細な技術情報を提供します。このモジュールは、自己位置推定Planningのロジックを担当し、Planningモジュールによって生成された軌道計画に基づいて、車両の運動を制御します。 + +**自己位置推定 Planningモジュール** + +自己位置推定Planningモジュールは、次のタスクを実行します。 + +- 自車位置の追従 +- 軌道計画のpost resampling +- 計画された軌道の修正 +- 計画された軌道の速度逸脱量と加速度逸脱量の計算 + +**自車位置追従** + +自車位置追従サブモジュールは、センサーデータを使用して自己位置を推定し、追従します。このサブモジュールは、Extended Kalman Filter(EKF)を使用して、GPS、IMU、車輪速度などのセンサーデータのフュージョンを行います。 + +**軌道計画のpost resampling** + +軌道計画のpost resamplingサブモジュールは、Planningモジュールから生成された軌道計画に再サンプリングを行います。これにより、軌道計画が車両の現在の運動状態に適合します。 + +**計画された軌道の修正** + +計画された軌道の修正サブモジュールは、障害物やその他の環境要因に応じて、計画された軌道を修正します。このサブモジュールは、制約条件ベースの最適化を使用して、安全で効率的な軌道を作成します。 + +**計画された軌道の速度逸脱量と加速度逸脱量の計算** + +計画された軌道の速度逸脱量と加速度逸脱量の計算サブモジュールは、計画された軌道に対して、現在の車両の速度と加速度を比較して、逸脱量を計算します。これらの逸脱量は、車両の制御システムにフィードバックされ、車両の動作を計画された軌道に近づけるために使用されます。 + +**結論** + +Autowareの自己位置推定Planningモジュールは、自己位置の追従、軌道計画のpost resampling、計画された軌道の修正、計画された軌道の速度逸脱量と加速度逸脱量の計算を含む、自己位置推定Planningの重要なコンポーネントです。このモジュールは、車両の安全で効率的な動作を確実にします。 + +| 名前 | タイプ | 説明 | | ---------------- | ------------------------------------------------ | ----------------------------------- | -| `output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | detected objects with refined shape | +| `output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 洗練された形状を持つ検出されたオブジェクト | -## Parameters +## パラメータ {{ json_to_markdown("perception/autoware_shape_estimation/schema/shape_estimation.schema.json") }} -## ML Based Shape Implementation +## MLベースの形状実装 -The model takes a point cloud and object label(provided by camera detections/Apollo instance segmentation) as an input and outputs the 3D bounding box of the object. +このモデルは、ポイントクラウドと物体ラベル(カメラの検出/Apolloインスタンスセグメンテーションによって提供)を入力として、物体の3Dバウンディングボックスを出力します。 -ML based shape estimation algorithm uses a PointNet model as a backbone to estimate the 3D bounding box of the object. The model is trained on the NuScenes dataset with vehicle labels (Car, Truck, Bus, Trailer). +MLベースの形状推定アルゴリズムは、バックボーンとしてPointNetモデルを使用して、物体の3Dバウンディングボックスを推定します。このモデルは、車両ラベル(車、トラック、バス、トレーラー)を持つNuScenesデータセットでトレーニングされています。 -The implemented model is concatenated with STN (Spatial Transformer Network) to learn the transformation of the input point cloud to the canonical space and PointNet to predict the 3D bounding box of the object. -Bounding box estimation part of _Frustum PointNets for 3D Object Detection from RGB-D Data_ paper used as a reference. +実装されたモデルは、入力ポイントクラウドを正規空間に変換するためにSTN(空間変換ネットワーク)と結合され、PointNetを使用して物体の3Dバウンディングボックスを予測します。_RGB-Dデータからの3D物体検出用のFrustum PointNets_論文のバウンディングボックス推定部分が参考として使用されました。 -The model predicts the following outputs for each object: +このモデルは、各オブジェクトに対して以下の出力を予測します。 -- x,y,z coordinates of the object center -- object heading angle classification result(Uses 12 bins for angle classification - 30 degrees each) -- object heading angle residuals -- object size classification result -- object size residuals +- オブジェクト中心のx、y、z座標 +- オブジェクトの進行方向角の分類結果(角度分類には12のビンを使用 - 各ビンは30度) +- オブジェクトの進行方向角の残差 +- オブジェクトサイズの分類結果 +- オブジェクトサイズの残差 -### Training ML Based Shape Estimation Model +### MLベースの形状推定モデルのトレーニング -To train the model, you need ground truth 3D bounding box annotations. When using the mmdetection3d repository for training a 3D object detection algorithm, these ground truth annotations are -saved and utilized for data augmentation. These annotations are used as an essential dataset for training the shape estimation model effectively. +モデルをトレーニングするには、正解の3Dバウンディングボックスアノテーションが必要です。3D物体検出アルゴリズムのトレーニングにmmdetection3dリポジトリを使用する場合、これらの正解アノテーションは保存され、データ拡張に使用されます。これらのアノテーションは、形状推定モデルを効果的にトレーニングするための不可欠なデータセットとして使用されます。 -### Preparing the Dataset +### データセットの準備 -#### Install MMDetection3D prerequisites +#### MMDetection3Dの必須コンポーネントをインストールする -**Step 1.** Download and install Miniconda from the [official website](https://mmpretrain.readthedocs.io/en/latest/get_started.html). +**ステップ 1.** [公式ウェブサイト](https://mmpretrain.readthedocs.io/en/latest/get_started.html)からMinicondaをダウンロードしてインストールします。 + +**ステップ 2.** conda仮想環境を作成してアクティブにする -**Step 2.** Create a conda virtual environment and activate it ```bash conda create --name train-shape-estimation python=3.8 -y conda activate train-shape-estimation ``` -**Step 3.** Install PyTorch +**手順 3.** PyTorch をインストールする + ```bash conda install pytorch torchvision -c pytorch ``` -#### Install mmdetection3d +#### mmdetection3d のインストール + +**手順 1.** MIM を使用して MMEngine、MMCV、および MMDetection をインストールする -**Step 1.** Install MMEngine, MMCV, and MMDetection using MIM ```bash pip install -U openmim @@ -91,7 +127,8 @@ mim install 'mmcv>=2.0.0rc4' mim install 'mmdet>=3.0.0rc5, <3.3.0' ``` -**Step 2.** Install Autoware's MMDetection3D fork +**ステップ2.** AutowareのMMDetection3Dフォークをインストールする + ```bash git clone https://github.com/autowarefoundation/mmdetection3d.git @@ -99,32 +136,36 @@ cd mmdetection3d pip install -v -e . ``` -#### Preparing NuScenes dataset for training +#### NuScenesデータセットの準備 -**Step 1.** Download the NuScenes dataset from the [official website](https://www.nuscenes.org/download) and extract the dataset to a folder of your choice. +**ステップ 1**. [公式ウェブサイト](https://www.nuscenes.org/download)からNuScenesデータセットをダウンロードして、選択したフォルダーに展開します。 -**Note:** The NuScenes dataset is large and requires significant disk space. Ensure you have enough storage available before proceeding. +**注意:** NuScenesデータセットは大きく、かなりのディスク容量が必要です。続ける前に十分なストレージがあることを確認してください。 + +**ステップ 2**. データセットフォルダーへのシンボリックリンクを作成します -**Step 2.** Create a symbolic link to the dataset folder ```bash ln -s /path/to/nuscenes/dataset/ /path/to/mmdetection3d/data/nuscenes/ ``` -**Step 3.** Prepare the NuScenes data by running: +**ステップ3.** 次のコマンドを実行してNuScenesデータを準備: + ```bash cd mmdetection3d python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --only-gt-database True ``` -#### Clone Bounding Box Estimator model +#### クローニング バウンディング ボックス エスティメータ モデル + ```bash git clone https://github.com/autowarefoundation/bbox_estimator.git ``` -#### Split the dataset into training and validation sets +#### データセットをトレーニングセットと検証セットに分割する + ```bash @@ -132,9 +173,10 @@ cd bbox_estimator python3 utils/split_dbinfos.py --dataset_path /path/to/mmdetection3d/data/nuscenes --classes 'car' 'truck' 'bus' 'trailer' --train_ratio 0.8 ``` -### Training and Deploying the model +### モデルの学習と展開 + +#### モデルの学習 -#### Training the model ```bash # Detailed training options can be found in the training script @@ -142,22 +184,52 @@ python3 utils/split_dbinfos.py --dataset_path /path/to/mmdetection3d/data/nuscen python3 train.py --dataset_path /path/to/mmdetection3d/data/nuscenes ``` -#### Deploying the model +#### モデルの展開 + +Autoware.Autoのパイプラインの `planning` モジュールでは、予測モデルを展開して使用します。このモデルは、他のモーションプランニングモジュールへの入力として、走行中の障害物の軌跡を予測します。 + +この予測モデルには、さまざまな手法があります。代表的な手法としては、カルマンフィルタ、自己回帰和分移動平均(ARIMA)、隠れマルコフモデル(HMM)などがあります。 + +使用する手法の選択は、予測タスクの特性によって異なります。たとえば、交通流予測にはARIMAが適していますが、歩行者の振る舞いを予測するにはHMMがより適しています。 + +この予測モデルは、トレーニングデータセットを使用してトレーニングされます。このデータセットには、障害物の位置、速度、加速度に関する情報が含まれます。トレーニング後、モデルは新しい入力に対して障害物の軌跡を予測するために使用されます。 + +予測された軌跡は、他のモーションプランニングモジュールによって、衝突を防ぐための安全な経路を計画するために使用されます。 + +### モデルの評価 + +予測モデルの性能は、次のような指標を使用して評価できます。 + +* **平均絶対誤差(MAE)**: 障害物軌跡の予測値と実際の値との差の平均 +* **平均二乗誤差(MSE)**: 予測値と実際の値との二乗差の平均 +* **相関関係**: 予測値と実際の値との間の相関関係 + +### モデルの展開 + +トレーニングされた予測モデルは、Autoware.Autoパイプラインの `planning` モジュールに展開できます。これは、次の手順で行えます。 + +1. モデルをYAML形式で保存します。 +2. YAMLファイルをパイプラインに読み込みます。 +3. パイプラインを起動します。 + +展開後、予測モデルはリアルタイムで障害物の軌跡を予測するために使用されます。この情報は、他のモーションプランニングモジュールによって安全な経路を計画するために使用されます。 + ```bash # Convert the trained model to ONNX format python3 onnx_converter.py --weight_path /path/to/best_checkpoint.pth --output_path /path/to/output.onnx ``` -Give the output path of the ONNX model to the `model_path` parameter in the `shape_estimation` node launch file. +`model_path`パラメータにONNXモデルの出力を`shape_estimation`ノードの起動ファイルで指定します。 + +## 想定/既知の制限 -## Assumptions / Known limits +未定 -TBD +## 参考資料/外部リンク -## References/External links +論文内のL字型フィッティングの実装: -L-shape fitting implementation of the paper: ```bibtex @conference{Zhang-2017-26536, @@ -170,7 +242,51 @@ keywords = {autonomous driving, laser scanner, perception, segmentation}, } ``` -Frustum PointNets for 3D Object Detection from RGB-D Data: +**RGB-Dデータからの3D物体検出のためのFrustum PointNets** + +## はじめに + +このドキュメントでは、RGB-Dデータから3D物体検出を行うためのFrustum PointNets手法について説明します。具体的には、次のようなトピックを扱います。 + +- Frustum PointNetsの手法の概要 +- AutowareにおけるFrustum PointNetsの統合 +- パフォーマンスの評価 + +## 手法 + +Frustum PointNetsは、RGB-Dデータから3D物体を検出するための2段階の手法です。 + +### 第1段階:フラストム生成 + +最初の段階では、RGB入力から3Dフラストムを生成します。フラストムとは、自車位置から見通せる空間の錐台形の近似です。フラストムは、点群データの3D空間内の空間的制約を提供します。 + +### 第2段階:3D物体検出 + +第2段階では、生成されたフラストム内の点群データを使用して、3D物体検出を行います。Frustum PointNetsアーキテクチャは、3D空間内の点群データを処理するように設計されており、物体のサイズ、形状、向きを推定できます。 + +## Autowareへの統合 + +Frustum PointNets手法は、Autowareフレームワークに統合されています。統合されたモジュールは、次のような機能を提供します。 + +- RGB-Dデータからのフラストム生成 +- Frustum PointNetsネットワークによる3D物体検出 +- 検出された物体の3Dバウンディングボックスの出力 + +## パフォーマンス + +Autowareに統合されたFrustum PointNetsモジュールの性能は、大規模なデータセットで評価されています。評価結果は、この手法がRGB-Dデータからの3D物体検出において、高い精度と効率性を示していることを示しています。 + +## Planningへの影響 + +Frustum PointNetsモジュールは、Planningコンポーネントに次の影響を与えます。 + +- **障害物検出の向上:**より正確な3D物体検出により、Planningコンポーネントは周辺環境をより正確に認識できます。 +- **軌道の改善:**より正確な障害物検出により、Planningコンポーネントは、衝突を回避しながら、より効率的な軌道を計算できます。 + +## 結論 + +Frustum PointNetsは、RGB-Dデータからの3D物体検出に高い精度を実現する強力な手法です。Autowareフレームワークに統合することにより、Planningコンポーネントの障害物検出と軌道計算の能力を向上させることができます。 + ````bibtex @inproceedings{qi2018frustum, @@ -180,4 +296,7 @@ booktitle={Proceedings of the IEEE conference on computer vision and pattern rec pages={918--927}, year={2018} }``` + + ```` + diff --git a/perception/autoware_simple_object_merger/README.md b/perception/autoware_simple_object_merger/README.md index a1e142b2bd85c..a4ab9b21075fb 100644 --- a/perception/autoware_simple_object_merger/README.md +++ b/perception/autoware_simple_object_merger/README.md @@ -1,62 +1,62 @@ -# autoware_simple_object_merger +## autoware_simple_object_merger -This package can merge multiple topics of [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.msg) with low calculation cost. +このパッケージは、低計算コストで複数のトピックの [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.msg) をマージすることができます。 -## Design +## 設計 -### Background +### 背景 -[Object_merger](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/object_merger) is mainly used for merge process with DetectedObjects. There are 2 characteristics in `Object_merger`. First, `object_merger` solve data association algorithm like Hungarian algorithm for matching problem, but it needs computational cost. Second, `object_merger` can handle only 2 DetectedObjects topics and cannot handle more than 2 topics in one node. To merge 6 DetectedObjects topics, 6 `object_merger` nodes need to stand for now. +[Object_merger](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/object_merger) は主に DetectedObjects のマージ処理に使用されます。`Object_merger` には 2 つの特性があります。1 つ目は、`object_merger` はハンガリアンアルゴリズムなどのデータ関連付けアルゴリズムを使用してマッチングの問題を解決しますが、計算コストが必要になります。2 つ目は、`object_merger` は 2 つだけの DetectedObjects トピックを処理でき、1 つのノードで 2 つを超えるトピックを処理できません。現時点で 6 つの DetectedObjects トピックをマージするには、6 つの `object_merger` ノードが必要になります。 -Therefore, `autoware_simple_object_merger` aim to merge multiple DetectedObjects with low calculation cost. -The package do not use data association algorithm to reduce the computational cost, and it can handle more than 2 topics in one node to prevent launching a large number of nodes. +したがって、`autoware_simple_object_merger` は複数の DetectedObjects を低計算コストでマージすることを目的としています。このパッケージは、計算コストを削減するためにデータ関連付けアルゴリズムを使用せず、大量のノードを立ち上げることなく、1 つのノードで 2 つを超えるトピックを処理できます。 -### Use case +### ユースケース -- Multiple radar detection +- 複数のレーダー検出 -`autoware_simple_object_merger` can be used for multiple radar detection. By combining them into one topic from multiple radar topics, the pipeline for faraway detection with radar can be simpler. +`autoware_simple_object_merger` は複数のレーダー検出に使用できます。複数のレーダートピックから 1 つのトピックにそれらをまとめることで、レーダーを使用した遠距離検出のパイプラインを簡略化できます。 -### Limitation +### 制約事項 -- Sensor data drops and delay +- センサーデータのドロップと遅延 -Merged objects will not be published until all topic data is received when initializing. In addition, to care sensor data drops and delayed, this package has a parameter to judge timeout. When the latest time of the data of a topic is older than the timeout parameter, it is not merged for output objects. For now specification of this package, if all topic data is received at first and after that the data drops, and the merged objects are published without objects which is judged as timeout.The timeout parameter should be determined by sensor cycle time. +初期化時にすべてのトピックデータが受信されるまで、マージされたオブジェクトはパブリッシュされません。さらに、センサーデータのドロップと遅延に対処するために、このパッケージにはタイムアウトを判断するパラメータがあります。トピックのデータの最新時刻がタイムアウトパラメータよりも古い場合、出力オブジェクトにマージされません。現時点では、このパッケージの仕様上、最初はすべてのトピックデータを受信し、その後データがドロップした場合、タイムアウトと判断されたオブジェクトを含まないマージされたオブジェクトがパブリッシュされます。このタイムアウトパラメータは、センサーの周期時間によって決定する必要があります。 -- Post-processing +- 後処理 -Because this package does not have matching processing, there are overlapping objects depending on the input objects. So output objects can be used only when post-processing is used. For now, [clustering processing](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_object_clustering) can be used as post-processing. +このパッケージにはマッチング処理がないため、入力オブジェクトによってはオブジェクトが重複します。そのため、出力オブジェクトは後処理を使用する場合にのみ使用できます。現時点で、[クラスタ処理](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_object_clustering) を後処理として使用できます。 -## Interface +## インターフェイス -### Input +### 入力 -Input topics is defined by the parameter of `input_topics` (List[string]). The type of input topics is `std::vector`. +入力トピックは `input_topics` (List[string]) のパラメータによって定義されます。入力トピックの型は `std::vector` です。 -### Output +### 出力 - `~/output/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - Merged objects combined from input topics. + - 入力トピックから結合されたマージされたオブジェクト。 -### Parameters +### パラメータ - `update_rate_hz` (double) [hz] - - Default parameter: 20.0 + - デフォルトパラメータ: 20.0 -This parameter is update rate for the `onTimer` function. -This parameter should be same as the frame rate of input topics. +このパラメータは `onTimer` 関数の更新レートです。 +このパラメータは、入力トピックのフレームレートと同じにする必要があります。 - `new_frame_id` (string) - - Default parameter: "base_link" + - デフォルトパラメータ: "base_link" -This parameter is the header frame_id of the output topic. -If output topics use for perception module, it should be set for "base_link" +このパラメータは、出力トピックのヘッダーの frame_id です。 +出力トピックが Planningモジュールに使用される場合は、"base_link" に設定する必要があります。 -- `timeout_threshold` (double) [s] - - Default parameter: 0.1 +- `timeout_threshold` (double) [秒] + - デフォルトパラメータ: 0.1 + +このパラメータは、タイムアウト判定のしきい値です。 +`input_topics` の最初のトピックと入力トピックの時差がこのパラメータを超えると、トピックのオブジェクトは出力オブジェクトにマージされません。 -This parameter is the threshold for timeout judgement. -If the time difference between the first topic of `input_topics` and an input topic is exceeded to this parameter, then the objects of topic is not merged to output objects. ```cpp for (size_t i = 0; i < input_topic_size; i++) { @@ -68,11 +68,12 @@ If the time difference between the first topic of `input_topics` and an input to } ``` -- `input_topics` (List[string]) - - Default parameter: "[]" +- `input_topics`(リスト[文字列]) + - デフォルトパラメータ: "[]" + +このパラメータは、入力トピックの名前です。 +たとえば、このパッケージをレーダーオブジェクトに使用する場合、 -This parameter is the name of input topics. -For example, when this packages use for radar objects, ```yaml input_topics: @@ -86,5 +87,6 @@ input_topics: ] ``` -can be set in config yaml file. -For now, the time difference is calculated by the header time between the first topic of `input_topics` and the input topics, so the most important objects to detect should be set in the first of `input_topics` list. +config yaml ファイル内で設定できます。 +現時点では、時間差は `input_topics` の最初のトピックと入力トピック間のヘッダー時間で計算されるため、検出する最も重要なオブジェクトは `input_topics` リストの最初の部分に設定する必要があります。 + diff --git a/perception/autoware_tensorrt_classifier/README.md b/perception/autoware_tensorrt_classifier/README.md index 9be306935f4b0..3348e9e2543c2 100644 --- a/perception/autoware_tensorrt_classifier/README.md +++ b/perception/autoware_tensorrt_classifier/README.md @@ -1,7 +1,6 @@ -# TensorRT Classification for Efficient Dynamic Batched Inference +# 高効率動的バッチ推論のための TensorRT Classification -## Purpose +## 目的 + +このパッケージは TensorRT を利用して任意のカテゴリの分類を実施し、高効率・高速推論を実現します。具体的には、組み込みプラットフォームの効率的な推論のための前処理を最適化します。さらに、GPU と DLA での動的バッチ推論をサポートします。 -This package classifies arbitrary categories using TensorRT for efficient and faster inference. -Specifically, this optimizes preprocessing for efficient inference on embedded platform. -Moreover, we support dynamic batched inference in GPUs and DLAs. diff --git a/perception/autoware_tensorrt_common/README.md b/perception/autoware_tensorrt_common/README.md index c828be58c1c1c..61c7f590874b2 100644 --- a/perception/autoware_tensorrt_common/README.md +++ b/perception/autoware_tensorrt_common/README.md @@ -1,6 +1,7 @@ # autoware_tensorrt_common -## Purpose +## 目的 + +このパッケージには、TensorRT に関連する共通関数のライブラリが含まれています。 +このパッケージには、TensorRT エンジンの処理や、量子化に使用される較正アルゴリズムの関数が含まれます。 -This package contains a library of common functions related to TensorRT. -This package may include functions for handling TensorRT engine and calibration algorithm used for quantization diff --git a/perception/autoware_tensorrt_yolox/README.md b/perception/autoware_tensorrt_yolox/README.md index cc7113e7dfcee..8d2468172dde3 100644 --- a/perception/autoware_tensorrt_yolox/README.md +++ b/perception/autoware_tensorrt_yolox/README.md @@ -1,107 +1,146 @@ # autoware_tensorrt_yolox -## Purpose +## 目的 -This package detects target objects e.g., cars, trucks, bicycles, and pedestrians and segment target objects such as cars, trucks, buses and pedestrian, building, vegetation, road, sidewalk on a image based on [YOLOX](https://github.com/Megvii-BaseDetection/YOLOX) model with multi-header structure. +このパッケージは、[YOLOX](https://github.com/Megvii-BaseDetection/YOLOX) モデルに基づく、マルチヘッダー構造で、車、トラック、自転車、歩行者などの対象のオブジェクトを検出し、車、トラック、バス、歩行者、建屋、植生、道路、歩道などの対象のオブジェクトをセグメントします。 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -### Cite +### 引用 -Zheng Ge, Songtao Liu, Feng Wang, Zeming Li, Jian Sun, "YOLOX: Exceeding YOLO Series in 2021", arXiv preprint arXiv:2107.08430, 2021 [[ref](https://arxiv.org/abs/2107.08430)] +鄭 Ge、劉 鬆涛、王 鋒、李 則明、孫 健、「YOLOX: 2021 年に YOLO シリーズを超える」、arXiv プレプリント arXiv:2107.08430、2021 [[ref](https://arxiv.org/abs/2107.08430)] -## Inputs / Outputs +## 入力 / 出力 -### Input +### 入力 -| Name | Type | Description | +| 名称 | 型 | 説明 | | ---------- | ------------------- | --------------- | -| `in/image` | `sensor_msgs/Image` | The input image | +| `in/image` | `sensor_msgs/Image` | 入力画像 | -### Output +### 出力 -| Name | Type | Description | -| ---------------- | -------------------------------------------------- | ------------------------------------------------------------------- | -| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | The detected objects with 2D bounding boxes | -| `out/image` | `sensor_msgs/Image` | The image with 2D bounding boxes for visualization | -| `out/mask` | `sensor_msgs/Image` | The semantic segmentation mask | -| `out/color_mask` | `sensor_msgs/Image` | The colorized image of semantic segmentation mask for visualization | +**自動運転ソフトウェアドキュメント** -## Parameters +Autowareは、オープンソース自動運転ソフトウェアスタックです。このドキュメントでは、Autowareのさまざまなコンポーネントとモジュールについて説明します。 + +**Planningコンポーネント** + +* **Path Planning:** 目的地までの経路を生成します。 +* **Speed Planning:** 経路上の最適速度プロファイルを作成します。 +* **Trajectory Planning:** 経路と速度プロファイルを組み合わせた、車両の軌跡を生成します。 + +**Perceptionコンポーネント** + +* **Localization:** 自車位置と周囲環境の地図を特定します。 +* **Object Detection:** 周囲の車両、歩行者、障害物を検出します。 +* **Obstacle Tracking:** 時間とともに動いている物体を追跡します。 + +**Controlコンポーネント** + +* **Longitudinal Control:** 車両の速度を制御します。 +* **Lateral Control:** 車両の向きを制御します。 +* **Model Predictive Control (MPC):** 車両の挙動を予測し、最適な制御入力を決定します。 + +**Drivingポリシー** + +* **Lane Keeping Assist:** 車両が車線内を維持するのに役立ちます。 +* **Adaptive Cruise Control:** 前方車両との安全な間隔を維持します。 +* **Collision Avoidance:** 衝突の可能性を検出し、回避策を実行します。 + +**安全機能** + +* **Velocity Violation Check:** `post resampling`による速度逸脱量を確認します。 +* **Acceleration Violation Check:** 加速度逸脱量を確認します。 +* **Obstacle Proximity Check:** 障害物との近接性を監視します。 + +| 名称 | タイプ | 説明 | +| ---------------- | ----------------------------------------------------- | -------------------------------------------------------------------- | +| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックス付きの検出オブジェクト | +| `out/image` | `sensor_msgs/Image` | 視覚化のための2Dバウンディングボックス付きのイメージ | +| `out/mask` | `sensor_msgs/Image` | セマンティックセグメンテーションマスク | +| `out/color_mask` | `sensor_msgs/Image` | 視覚化のためのセマンティックセグメンテーションマスクの色付けイメージ | + +## パラメータ {{ json_to_markdown("perception/autoware_tensorrt_yolox/schema/yolox_s_plus_opt.schema.json") }} {{ json_to_markdown("perception/autoware_tensorrt_yolox/schema/yolox_tiny.schema.json") }} -## Assumptions / Known limits +## 前提条件/既知の制限 -The label contained in detected 2D bounding boxes (i.e., `out/objects`) will be either one of the followings: +検出された 2D バウンディングボックス(例: `out/objects`)に含まれるラベルは、次のいずれかになります。 - CAR -- PEDESTRIAN ("PERSON" will also be categorized as "PEDESTRIAN") +- PEDESTRIAN("PERSON" も "PEDESTRIAN" として分類されます。) - BUS - TRUCK - BICYCLE - MOTORCYCLE -If other labels (case insensitive) are contained in the file specified via the `label_file` parameter, -those are labeled as `UNKNOWN`, while detected rectangles are drawn in the visualization result (`out/image`). - -The semantic segmentation mask is a gray image whose each pixel is index of one following class: - -| index | semantic name | -| ----- | ---------------- | -| 0 | road | -| 1 | building | -| 2 | wall | -| 3 | obstacle | -| 4 | traffic_light | -| 5 | traffic_sign | -| 6 | person | -| 7 | vehicle | -| 8 | bike | -| 9 | road | -| 10 | sidewalk | -| 11 | roadPaint | -| 12 | curbstone | -| 13 | crosswalk_others | -| 14 | vegetation | -| 15 | sky | - -## Onnx model - -A sample model (named `yolox-tiny.onnx`) is downloaded by ansible script on env preparation stage, if not, please, follow [Manual downloading of artifacts](https://github.com/autowarefoundation/autoware/tree/main/ansible/roles/artifacts). -To accelerate Non-maximum-suppression (NMS), which is one of the common post-process after object detection inference, -`EfficientNMS_TRT` module is attached after the ordinal YOLOX (tiny) network. -The `EfficientNMS_TRT` module contains fixed values for `score_threshold` and `nms_threshold` in it, -hence these parameters are ignored when users specify ONNX models including this module. - -This package accepts both `EfficientNMS_TRT` attached ONNXs and [models published from the official YOLOX repository](https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime#download-onnx-models) (we referred to them as "plain" models). - -In addition to `yolox-tiny.onnx`, a custom model named `yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls` is either available. -This model is multi-header structure model which is based on YOLOX-s and tuned to perform more accurate detection with almost comparable execution speed with `yolox-tiny`. -To get better results with this model, users are recommended to use some specific running arguments -such as `precision:=int8`, `calibration_algorithm:=Entropy`, `clip_value:=6.0`. -Users can refer `launch/yolox_sPlus_opt.launch.xml` to see how this model can be used. -Beside detection result, this model also output image semantic segmentation result for pointcloud filtering purpose. - -All models are automatically converted to TensorRT format. -These converted files will be saved in the same directory as specified ONNX files -with `.engine` filename extension and reused from the next run. -The conversion process may take a while (**typically 10 to 20 minutes**) and the inference process is blocked -until complete the conversion, so it will take some time until detection results are published (**even until appearing in the topic list**) on the first run - -### Package acceptable model generation - -To convert users' own model that saved in PyTorch's `pth` format into ONNX, -users can exploit the converter offered by the official repository. -For the convenience, only procedures are described below. -Please refer [the official document](https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime#convert-your-model-to-onnx) for more detail. - -#### For plain models - -1. Install dependency +他のラベル(大文字小文字の区別はしない)が `label_file` パラメータで指定されたファイルに含まれる場合、それらは `UNKNOWN` としてラベル付けされ、検出された四角形は視覚化結果(`out/image`)に描画されます。 + +セマンティックセグメンテーションマスクは、各ピクセルが次のクラスのいずれかのインデックスであるグレースケール画像です。 + +| インデックス | シマンティック名 | +|---|---| +| 0 | 道路 | +| 1 | 建物 | +| 2 | 壁 | +| 3 | 障害物 | +| 4 | 交通信号 | +| 5 | 交通標識 | +| 6 | 歩行者 | +| 7 | 車両 | +| 8 | 自転車 | +| 9 | 道路 | +| 10 | 歩道 | +| 11 | 道路ペイント | +| 12 | 側石 | +| 13 | 交差点(その他) | +| 14 | 草木 | +| 15 | 空 | + +## Onnxモデル + +Ansibleスクリプトによって準備段階の環境でサンプルモデル(`yolox-tiny.onnx`)がダウンロードされます。ダウンロードされない場合は、[成果物の手動ダウンロード](https://github.com/autowarefoundation/autoware/tree/main/ansible/roles/artifacts)に従ってください。 + +オブジェクト検出推論後の一般的な後処理の1つである非最大値抑制(NMS)を高速化するために、通常のYOLOX(tiny)ネットワークの後には`EfficientNMS_TRT`モジュールが組み込まれています。 + +`EfficientNMS_TRT`モジュールには`score_threshold`と`nms_threshold`の固定値が含まれているため、ユーザーがこのモジュールを含むONNXモデルを指定した場合、これらのパラメーターは無視されます。 + +このパッケージは、`EfficientNMS_TRT`を組み込んだONNXと[公式のYOLOXリポジトリから公開されているモデル](https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime#download-onnx-models)(「プレーン」モデルと呼ぶ)の両方を許可します。 + +`yolox-tiny.onnx`に加えて、`yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls`という名前のカスタムモデルを利用することもできます。 + +このモデルはYOLOX-sをベースとしたマルチヘッダー構造モデルであり、`yolox-tiny`とほぼ同等の実行速度でより正確な検出を実行するように調整されています。 + +このモデルでより良い結果を得るには、`precision:=int8`、`calibration_algorithm:=Entropy`、`clip_value:=6.0`などの特定の実行引数を使用することをお勧めします。 + +ユーザーは`launch/yolox_sPlus_opt.launch.xml`を参照して、このモデルを使用する方法を確認できます。 + +検出結果に加えて、このモデルはポイントクラウドのフィルタリングに使用できる画像セマンティックセグメンテーション結果も出力します。 + +すべてのモデルは、TensorRT形式に自動的に変換されます。 + +変換後のファイルは、指定されたONNXファイルと同じディレクトリに`engine`ファイル名拡張子で保存され、次回の実行から再利用されます。 + +変換プロセスには時間がかかる場合があります(**通常10〜20分**)。また、変換が完了するまでは推論プロセスがブロックされるため、検出結果が公開されるまでに時間がかかります(**トピックリストに表示されるまで**)。 + +### パッケージで許容されるモデルの生成 + +PyTorchの`pth`フォーマットで保存されたユーザー独自のモデルをONNXに変換するには、公式リポジトリで提供されているコンバーターを利用できます。 + +便宜上、手順のみ以下に示します。 + +詳細については、[公式ドキュメント](https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime#convert-your-model-to-onnx)を参照してください。 + +#### プレーンモデルの場合 + +1. 依存関係をインストール + + ```shell git clone git@github.com:Megvii-BaseDetection/YOLOX.git @@ -109,7 +148,8 @@ Please refer [the official document](https://github.com/Megvii-BaseDetection/YOL python3 setup.py develop --user ``` -2. Convert pth into ONNX +2. pth を ONNX に変換する + ```shell python3 tools/export_onnx.py \ @@ -118,9 +158,10 @@ Please refer [the official document](https://github.com/Megvii-BaseDetection/YOL -c YOUR_YOLOX.pth ``` -#### For EfficientNMS_TRT embedded models +#### EfficientNMS_TRT埋め込みモデル向け + +1. 依存関係のインストール -1. Install dependency ```shell git clone git@github.com:Megvii-BaseDetection/YOLOX.git @@ -129,7 +170,8 @@ Please refer [the official document](https://github.com/Megvii-BaseDetection/YOL pip3 install git+ssh://git@github.com/wep21/yolox_onnx_modifier.git --user ``` -2. Convert pth into ONNX +2. pth を ONNX に変換する + ```shell python3 tools/export_onnx.py \ @@ -139,23 +181,23 @@ Please refer [the official document](https://github.com/Megvii-BaseDetection/YOL --decode_in_inference ``` -3. Embed `EfficientNMS_TRT` to the end of YOLOX +3. YOLOX の最後に `EfficientNMS_TRT` を埋め込む + ```shell yolox_onnx_modifier YOUR_YOLOX.onnx -o YOUR_YOLOX_WITH_NMS.onnx ``` -## Label file +## ラベルファイル -A sample label file (named `label.txt`) and semantic segmentation color map file (name `semseg_color_map.csv`) are also downloaded automatically during env preparation process -(**NOTE:** This file is incompatible with models that output labels for the COCO dataset (e.g., models from the official YOLOX repository)). +env準備プロセスの際に、サンプルラベルファイル(`label.txt`という名前)とセマンティックセグメンテーションカラーマップファイル(`semseg_color_map.csv`という名前)も自動的にダウンロードされます +(**注:** このファイルはCOCOデータセット(例:公式YOLOXリポジトリのモデル)のラベルを出力するモデルとは互換性がありません)。 -This file represents the correspondence between class index (integer outputted from YOLOX network) and -class label (strings making understanding easier). This package maps class IDs (incremented from 0) -with labels according to the order in this file. +このファイルは、クラスインデックス(YOLOXネットワークから出力される整数)とクラスラベル(理解を容易にする文字列)との対応を表します。このパッケージは、このファイルの順序に従って、クラスID(0から増加)をラベルにマッピングします。 -## Reference repositories +## 参照リポジトリ - - - + diff --git a/perception/autoware_tracking_object_merger/README.md b/perception/autoware_tracking_object_merger/README.md index 367dd522e6a47..34f6cd4d07133 100644 --- a/perception/autoware_tracking_object_merger/README.md +++ b/perception/autoware_tracking_object_merger/README.md @@ -1,70 +1,71 @@ -# Tracking Object Merger +# トラッキングオブジェクトマージャー -## Purpose +## 目的 -This package try to merge two tracking objects from different sensor. +このパッケージは、異なるセンサーの2つのトラッキングオブジェクトをマージしようとします。 -## Inner-workings / Algorithms +## 内部処理/アルゴリズム -Merging tracking objects from different sensor is a combination of data association and state fusion algorithms. +異なるセンサーのトラッキングオブジェクトをマージすることは、データ関連付けと状態フュージョンのアルゴリズムの組み合わせです。 -Detailed process depends on the merger policy. +詳細なプロセスは、マージャーポリシーによって異なります。 ### decorative_tracker_merger -In decorative_tracker_merger, we assume there are dominant tracking objects and sub tracking objects. -The name `decorative` means that sub tracking objects are used to complement the main objects. +`decorative_tracker_merger`では、ドミナントなトラッキングオブジェクトとサブトラッキングオブジェクトがあると仮定します。 +`decorative`という名前は、サブトラッキングオブジェクトがメインオブジェクトを補完するために使用されることを意味します。 -Usually the dominant tracking objects are from LiDAR and sub tracking objects are from Radar or Camera. +通常、ドミナントなトラッキングオブジェクトはLiDARから、サブトラッキングオブジェクトはレーダーまたはカメラから取得されます。 -Here show the processing pipeline. +以下に処理パイプラインを示します。 ![decorative_tracker_merger](./image/decorative_tracker_merger.drawio.svg) -#### time sync +#### タイムシンク -Sub object(Radar or Camera) often has higher frequency than dominant object(LiDAR). So we need to sync the time of sub object to dominant object. +サブオブジェクト(レーダーまたはカメラ)は、ドミナントオブジェクト(LiDAR)よりも高い頻度で取得されることがよくあります。したがって、サブオブジェクトの時間をドミナントオブジェクトに同期させる必要があります。 -![time sync](image/time_sync.drawio.svg) +![タイムシンク](image/time_sync.drawio.svg) -#### data association +#### データ関連付け -In the data association, we use the following rules to determine whether two tracking objects are the same object. +データ関連付けでは、以下のルールを使用して2つのトラッキングオブジェクトが同じオブジェクトかどうかを判別します。 -- gating - - `distance gate`: distance between two tracking objects - - `angle gate`: angle between two tracking objects - - `mahalanobis_distance_gate`: Mahalanobis distance between two tracking objects - - `min_iou_gate`: minimum IoU between two tracking objects - - `max_velocity_gate`: maximum velocity difference between two tracking objects -- score - - score used in matching is equivalent to the distance between two tracking objects +- ゲーティング + - `distance gate`: 2つのトラッキングオブジェクト間の距離 + - `angle gate`: 2つのトラッキングオブジェクト間の角度 + - `mahalanobis_distance_gate`: 2つのトラッキングオブジェクト間のマハラノビス距離 + - `min_iou_gate`: 2つのトラッキングオブジェクト間の最小IoU + - `max_velocity_gate`: 2つのトラッキングオブジェクト間の最大速度差 +- スコア + - マッチングで使用されるスコアは、2つのトラッキングオブジェクト間の距離と同等です -#### tracklet update +#### トラックレット更新 -Sub tracking objects are merged into dominant tracking objects. +サブトラッキングオブジェクトはドミナントトラッキングオブジェクトにマージされます。 -Depends on the tracklet input sensor state, we update the tracklet state with different rules. +トラックレットの入力センサー状態に応じて、異なるルールでトラックレット状態を更新します。 -| state\priority | 1st | 2nd | 3rd | +| ステート/優先度 | 1番目 | 2番目 | 3番目 | | -------------------------- | ------ | ----- | ------ | -| Kinematics except velocity | LiDAR | Radar | Camera | -| Forward velocity | Radar | LiDAR | Camera | -| Object classification | Camera | LiDAR | Radar | +| キネマティクス(速度以外) | LiDAR | レーダー | カメラ | +| 前方速度 | レーダー | LiDAR | カメラ | +| オブジェクト分類 | カメラ | LiDAR | レーダー | -#### tracklet management +#### トラックレットマネジメント -We use the `existence_probability` to manage tracklet. +トラックレットの管理には`existence_probability`を使用します。 -- When we create a new tracklet, we set the `existence_probability` to $p_{sensor}$ value. -- In each update with specific sensor, we set the `existence_probability` to $p_{sensor}$ value. -- When tracklet does not have update with specific sensor, we reduce the `existence_probability` by `decay_rate` -- Object can be published if `existence_probability` is larger than `publish_probability_threshold` and time from last update is smaller than `max_dt` -- Object will be removed if `existence_probability` is smaller than `remove_probability_threshold` and time from last update is larger than `max_dt` +- 新しいトラックレットを作成するときは、`existence_probability`を$p_{sensor}$値に設定します。 +- 特定のセンサーでの各更新で、`existence_probability`を$p_{sensor}$値に設定します。 +- トラックレットが特定のセンサーでの更新がない場合は、`existence_probability`を`decay_rate`だけ減らします。 +- `existence_probability`が`publish_probability_threshold`より大きく、前回の更新からの時間が`max_dt`より小さい場合は、オブジェクトをパブリッシュできます。 +- `existence_probability`が`remove_probability_threshold`より小さく、前回の更新からの時間が`max_dt`より大きい場合は、オブジェクトは削除されます。 ![tracklet_management](./image/tracklet_management.drawio.svg) -These parameter can be set in `config/decorative_tracker_merger.param.yaml`. +これらのパラメーターは`config/decorative_tracker_merger.param.yaml`で設定できます。 + ```yaml tracker_state_parameter: @@ -77,38 +78,39 @@ tracker_state_parameter: max_dt: 1.0 ``` -#### input/parameters +#### 入力/パラメータ -| topic name | message type | description | +| トピック名 | メッセージタイプ | 説明 | | ------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------- | -| `~input/main_object` | `autoware_perception_msgs::TrackedObjects` | Dominant tracking objects. Output will be published with this dominant object stamps. | -| `~input/sub_object` | `autoware_perception_msgs::TrackedObjects` | Sub tracking objects. | -| `output/object` | `autoware_perception_msgs::TrackedObjects` | Merged tracking objects. | -| `debug/interpolated_sub_object` | `autoware_perception_msgs::TrackedObjects` | Interpolated sub tracking objects. | +| `~input/main_object` | `autoware_perception_msgs::TrackedObjects` | 主要な追跡対象。この主要な対象のスタンプで出力がパブリッシュされます。 | +| `~input/sub_object` | `autoware_perception_msgs::TrackedObjects` | サブ追跡対象。 | +| `output/object` | `autoware_perception_msgs::TrackedObjects` | マージされた追跡対象。 | +| `debug/interpolated_sub_object` | `autoware_perception_msgs::TrackedObjects` | 補間されたサブ追跡対象。 | -Default parameters are set in [config/decorative_tracker_merger.param.yaml](./config/decorative_tracker_merger.param.yaml). +デフォルトパラメータは [config/decorative_tracker_merger.param.yaml](./config/decorative_tracker_merger.param.yaml) に設定されています。 -| parameter name | description | default value | -| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `base_link_frame_id` | base link frame id. This is used to transform the tracking object. | "base_link" | -| `time_sync_threshold` | time sync threshold. If the time difference between two tracking objects is smaller than this value, we consider these two tracking objects are the same object. | 0.05 | -| `sub_object_timeout_sec` | sub object timeout. If the sub object is not updated for this time, we consider this object is not exist. | 0.5 | -| `main_sensor_type` | main sensor type. This is used to determine the dominant tracking object. | "lidar" | -| `sub_sensor_type` | sub sensor type. This is used to determine the sub tracking object. | "radar" | -| `tracker_state_parameter` | tracker state parameter. This is used to manage the tracklet. | | +| パラメーター名 | 説明 | デフォルト値 | +| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `base_link_frame_id` | ベースリンクフレームID。追跡対象の変換に使用されます。 | "base_link" | +| `time_sync_threshold` | 時間同期しきい値。2つの追跡対象の差が小さければ、それらは同一対象とみなされます。 | 0.05 | +| `sub_object_timeout_sec` | サブオブジェクトタイムアウト。サブオブジェクトがこの時間更新されなければ、存在しないとみなされます。 | 0.5 | +| `main_sensor_type` | メインセンサータイプ。主な追跡対象を判別するために使用します。 | "lidar" | +| `sub_sensor_type` | サブセンサータイプ。サブ追跡対象を判別するために使用します。 | "radar" | +| `tracker_state_parameter` | トラッカー状態パラメーター。トラッキングに使用されます。 | | -- the detail of `tracker_state_parameter` is described in [tracklet management](#tracklet-management) +- `tracker_state_parameter` の詳細については、[Tracklet Management](#tracklet-management) で説明しています。 -#### tuning +#### 調整 -As explained in [tracklet management](#tracklet-management), this tracker merger tend to maintain the both input tracking objects. +[Tracklet Management](#tracklet-management) で説明したように、この Tracker Merger は通常、両方の入力トラッキングオブジェクトを維持します。 -If there are many false positive tracking objects, +誤検出のトラッキングオブジェクトが多い場合、 -- decrease `default__existence_probability` of that sensor -- increase `decay_rate` -- increase `publish_probability_threshold` to publish only reliable tracking objects +- そのセンサの `default__existence_probability` を下げる +- `decay_rate` を上げる +- 信頼できるトラッキングオブジェクトのみを公開するために `publish_probability_threshold` を上げる ### equivalent_tracker_merger -This is future work. +これは今後の予定です。 + diff --git a/perception/autoware_traffic_light_arbiter/README.md b/perception/autoware_traffic_light_arbiter/README.md index 619154e1e183b..95257ff1727eb 100644 --- a/perception/autoware_traffic_light_arbiter/README.md +++ b/perception/autoware_traffic_light_arbiter/README.md @@ -1,49 +1,86 @@ # autoware_traffic_light_arbiter -## Purpose +## 目的 -This package receives traffic signals from perception and external (e.g., V2X) components and combines them using either a confidence-based or a external-preference based approach. +このパッケージは、認識コンポーネントや外部(例:V2X)のコンポーネントから受信した交通信号を、信頼度ベースまたは外部優先ベースのアプローチを使用して結合します。 ## TrafficLightArbiter -A node that merges traffic light/signal state from image recognition and external (e.g., V2X) systems to provide to a planning component. +画像認識と外部(例:V2X)システムからの交通信号状態をマージし、Planningコンポーネントに提供するノードです。 ### Signal Match Validator -When `enable_signal_matching` is set to true, this node validates the match between perception signals and external signals. -The table below outlines how the matching process determines the output based on the combination of perception and external signal colors. Each cell represents the outcome when a specific color from a perception signal (columns) intersects with a color from an external signal (rows). +`enable_signal_matching` が true に設定されている場合、このノードは認識信号と外部信号の一致を検証します。 +以下の表は、認識信号(列)の特定の色が外部信号(行)の色と交差したときに、どのような色の組み合わせで一致のプロセスがアウトプットを決定するかを概説しています。各セルは、認識信号の特定の色(列)と外部信号の色(行)が交差したときの結果を表しています。 -| External \ Perception | RED | AMBER | GREEN | UNKNOWN | Not Received | -| --------------------- | ------- | ------- | ------- | ------- | ------------ | -| RED | RED | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | -| AMBER | UNKNOWN | AMBER | UNKNOWN | UNKNOWN | UNKNOWN | -| GREEN | UNKNOWN | UNKNOWN | GREEN | UNKNOWN | UNKNOWN | -| UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | -| Not Received | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | +| 外部知覚 | 赤信号 | 黄信号 | 緑信号 | 未知 | 受信なし | +|---|---|---|---|---|---| +| 赤信号 | 赤信号 | 未知 | 未知 | 未知 | 未知 | +| 黄信号 | 未知 | 黄信号 | 未知 | 未知 | 未知 | +| 緑信号 | 未知 | 未知 | 緑信号 | 未知 | 未知 | +| 未知 | 未知 | 未知 | 未知 | 未知 | 未知 | +| 受信なし | 未知 | 未知 | 未知 | 未知 | 未知 | -### Inputs / Outputs +### 入力/出力 -#### Input +#### 入力 -| Name | Type | Description | -| -------------------------------- | ----------------------------------------------------- | -------------------------------------------------------- | -| ~/sub/vector_map | autoware_map_msgs::msg::LaneletMapBin | The vector map to get valid traffic signal ids. | -| ~/sub/perception_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | The traffic signals from the image recognition pipeline. | -| ~/sub/external_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | The traffic signals from an external system. | +| 名称 | タイプ | 説明 | +| -------------------------------- | ------------------------- | -------------------------------------------------------------- | +| ~/sub/vector_map | autoware_map_msgs::msg::LaneletMapBin | 有効な信号 ID を取得するためのベクターマップ | +| ~/sub/perception_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 画像認識パイプラインからの信号 | +| ~/sub/external_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 外部システムからの信号 | -#### Output +#### 出力 -| Name | Type | Description | -| --------------------- | ----------------------------------------------------- | -------------------------------- | -| ~/pub/traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | The merged traffic signal state. | +autoware ナビゲーションモジュールは、以下を含む自動運転ソフトウェアの主要コンポーネントです。 +- Planning +- Perception +- Control -## Parameters +各モジュールは、センサーデータと周辺環境の情報を処理し、車両の動作を決定するために相互作用します。 -### Core Parameters +#### Planningモジュール + +Planningモジュールは、車両の経路と速度計画を作成します。センサーデータ、地図データ、自車位置に基づいて、モジュールは以下を行います。 +- 衝突回避パス計画 +- 交通規則遵守 +- 速度制御 + +#### Perceptionモジュール + +Perceptionモジュールは、周囲環境を解釈します。センサーデータを使用して、モジュールは以下を行います。 +- 物体検出と分類 +- 路面状況認識 +- 静止物と動的物体の識別 + +#### Controlモジュール + +Controlモジュールは、Planningモジュールからのコマンドに基づいて、車両を操作します。モジュールは、以下の制御入力を生成します。 +- ステアリング制御 +- 加速度/減速度制御 +- 変速制御 + +#### その他の重要なコンポーネント + +Planning、Perception、Controlモジュールの他に、autowareには以下のような重要なコンポーネントも含まれます。 +- **Decision Making**:車両の動作を決定する高レベルコントローラー +- **Localization**:車両の位置を特定するシステム +- **Sensor Fusion**:さまざまなセンサーからのデータを統合するモジュール +- **Communication**:他の車両、インフラストラクチャ、交通機関の管理システムとのデータをやり取りするインターフェイス + +| 名前 | タイプ | 説明 | +| --------------------- | ----------------------------------------------------- | --------------------------- | +| ~/pub/traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 統合された信号機の状態。 | + +## パラメータ + +### コアパラメータ + +| 名称 | 型 | デフォルト値 | 説明 | +| -------------------------- | ---------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `external_time_tolerance` | double | 5.0 | 外部メッセージがマージに有効と見なされる秒数 | +| `perception_time_tolerance` | double | 1.0 | Perceptionメッセージがマージに有効と見なされる秒数 | +| `external_priority` | bool | false | 外部のシグナルがPerceptionベースのシグナルより優先されるかどうか。falseの場合、マージは基準として信頼性を使用する | +| `enable_signal_matching` | bool | false | Perceptionシグナルと外部シグナルの一致を検証するかどうか。trueに設定した場合、色が一致していることを確認し、一致する場合のみ公開する | -| Name | Type | Default Value | Description | -| --------------------------- | ------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `external_time_tolerance` | double | 5.0 | The duration in seconds an external message is considered valid for merging | -| `perception_time_tolerance` | double | 1.0 | The duration in seconds a perception message is considered valid for merging | -| `external_priority` | bool | false | Whether or not externals signals take precedence over perception-based ones. If false, the merging uses confidence as a criteria | -| `enable_signal_matching` | bool | false | Decide whether to validate the match between perception signals and external signals. If set to true, verify that the colors match and only publish them if they are identical | diff --git a/perception/autoware_traffic_light_classifier/README.md b/perception/autoware_traffic_light_classifier/README.md index 6e720aabc7593..1a2767cbb1067 100644 --- a/perception/autoware_traffic_light_classifier/README.md +++ b/perception/autoware_traffic_light_classifier/README.md @@ -1,120 +1,252 @@ # traffic_light_classifier -## Purpose +## 目的 -traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: `cnn_classifier` and `hsv_classifier`. +traffic_light_classifierは、交通信号機の周囲をトリミングした画像を使用して、交通信号機ラベルを分類するパッケージです。このパッケージには、`cnn_classifier`と`hsv_classifier`という2つの分類モデルがあります。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム ### cnn_classifier -Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2. -Totally 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning. -The information of the models is listed here: - -| Name | Input Size | Test Accuracy | -| --------------- | ---------- | ------------- | -| EfficientNet-b1 | 128 x 128 | 99.76% | -| MobileNet-v2 | 224 x 224 | 99.81% | +交通信号機のラベルは、EfficientNet-b1またはMobileNet-v2によって分類されます。 +完全に、日本の交通信号の83400(トレーニング用58600、評価用14800、テスト用10000)TIER IV社内イメージを使用して微調整しました。 +モデルの情報は次のとおりです。 + +## 自動運転ソフトウェアのドキュメント + +**Planning コンポーネント** + +**モジュール** + +* **Local Planning** + * 自車位置の追跡 + * 障害物検出 + * 経路生成 + * 'post resampling' 軌跡生成 +* **Behavior Planning** + * 経路追従制御 + * 速度計画 + * 車線維持 +* **Path Planning** + * ダイナミック経路生成 + * 障害物回避 + +**センシングコンポーネント** + +* **LiDAR** + * 3D نقطه群データの取得 + * 障害物検出 +* **カメラ** + * 視覚データの取得 + * レーンマーカー検出 + * 交通標識認識 +* **IMU (慣性計測装置)** + * 加速度や角速度の測定 + * 自車位置の推定 + +**制御コンポーネント** + +* **Longitudinal Controller** + * 車両速度の制御 + * 加速度逸脱量を最小化 +* **Lateral Controller** + * 車両ヨーの制御 + * 車線逸脱量を最小化 + +**Autoware** + +Autoware は自動運転ソフトウェアのオープンソースプラットフォームです。主要なモジュールには以下が含まれます。 + +* **Perception** + * センサーデータの処理と融合 + * 障害物認識と分類 +* **Fusion** + * ローカライゼーション、マッピング、トラッキング + * 環境の動的モデルの構築 +* **Control** + * 車両の制御とガイダンス + * PATH と BEHAVIOR Planner の実装 + +**評価方法** + +* **シミュレーションパフォーマンス** + * レーン逸脱量、クラッシュ回避数 +* **実世界パフォーマンス** + * テスト走行における速度逸脱量、加減速逸脱量 +* **主要性能指標 (KPI)** + * 時間あたりの走行距離 + * 介入率 ### hsv_classifier -Traffic light colors (green, yellow and red) are classified in HSV model. +信号機の色(緑、黄、赤)はHSVモデルで分類します。 -### About Label +### ラベルについて -The message type is designed to comply with the unified road signs proposed at the [Vienna Convention](https://en.wikipedia.org/wiki/Vienna_Convention_on_Road_Signs_and_Signals#Traffic_lights). This idea has been also proposed in [Autoware.Auto](https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/16). +メッセージタイプは、[ウィーン条約](https://ja.wikipedia.org/wiki/%E3%83%AF%E3%82%A4%E3%83%B3%E5%90%88%E7%B4%84%E7%B4%A0%E9%81%93%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E8%B7%AF%E4%BA%A4%E8%A8%80%E3%81%B8%E3%81%AE%E9%95%B7%E7%B5%90%E3%81%A8%E7%94%BB%E5%93%81%E3%81%AE%E5%90%88%E7%B4%84%E7%B4%A0%E9%81%93)で提案されている統一された道路標識に準拠するように設計されています。このアイデアは[Autoware.Auto](https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/16)でも提案されています。 -There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. `color1-shape1, color2-shape2` . +ノードが受信するラベルの命名規則があります。信号機1つは、カンマで区切られた次の文字列で表されます。`color1-shape1, color2-shape2` . -For example, the simple red and red cross traffic light label must be expressed as "red-circle, red-cross". +例えば、単純な赤と赤十字の信号機ラベルは "red-circle, red-cross" と表現する必要があります。 -These colors and shapes are assigned to the message as follows: +これらの色と形状は、以下の通りメッセージに割り当てられます: ![TrafficLightDataStructure.jpg](./image/TrafficLightDataStructure.jpg) -## Inputs / Outputs +## 入出力 + +### 入力 + +| Name | Type | Description | +| --------------- | ------------------------------------------------------- | ---------------------- | +| `~/input/image` | `sensor_msgs::msg::Image` | 入力画像 | +| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | 信号機のroi | + +### 出力 + +このドキュメントは、[Autoware](https://github.com/autowarefoundation/autoware.auto/blob/master/docs/en/planning_with_mpc/planning_with_mpc.md)のPlanningコンポーネントにおけるModel Predictive Control (MPC)のアルゴリズムの概要を説明します。 + +#### Planningのアルゴリズム + +Planningは、複数のPlanningモジュールで構成されています。 +* **TrajectoryGenerator** プランニング可能な軌道を生成します。 +* **Planner** 軌道の評価および最適化を実施します。 + +#### モデル予測制御 (MPC) + +MPCは、Planningで使用される最適化アルゴリズムです。MPCでは、現在の状態からの一連の制御入力を計算し、将来のシステム挙動を最適化します。 + +MPCのアルゴリズムは次の手順で行われます: + +1. **問題の設定:** プランニングモジュールから、自車位置、障害物、目標状態などの情報を取得します。 +2. **コスト関数の設定:** 目標状態への追従、衝突回避、経路逸脱などの目的を反映するコスト関数を定義します。 +3. **最適化:** コスト関数の最小化を目的とする最適化問題を解きます。 +4. **制御入力の生成:** 最適化の結果から、最初の制御入力を生成します。 +5. **計画の再計算:** 制御入力が適用されると、自車位置が変化します。MPCは、変化した自車位置に基づいて計画を再計算します。 + +#### PlanningにおけるMPC + +Planningでは、MPCを使用して、以下のタスクを実行します: -### Input +* **経路追従:** 目標経路に沿った軌道を生成します。 +* **障害物回避:** 障害物を回避するための軌道を生成します。 +* **速度制御:** 目標速度を維持するための制御入力を計算します。 -| Name | Type | Description | -| --------------- | -------------------------------------------------- | ---------------------- | -| `~/input/image` | `sensor_msgs::msg::Image` | input image | -| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | rois of traffic lights | +MPCのPlanningにおける主要な利点は、他の車両や障害物などの障害物を考慮して、将来のシステム挙動を予測できることです。これにより、Planningはリアルタイムで安全かつ効率的な軌道を作成できます。 -### Output +#### 実装の詳細 -| Name | Type | Description | -| -------------------------- | ----------------------------------------------- | ------------------- | -| `~/output/traffic_signals` | `tier4_perception_msgs::msg::TrafficLightArray` | classified signals | -| `~/output/debug/image` | `sensor_msgs::msg::Image` | image for debugging | +MPCのAutowareにおける実装では、以下を使用しています: -## Parameters +* **コスト関数:** 位置逸脱量、速度逸脱量、加速度逸脱量の最小化 +* **最適化器:** 'post resampling`を備えたquadprog +* **制御入力:** ステアリング角、加速度 -### Node Parameters +#### 参考資料 -| Name | Type | Description | -| --------------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `classifier_type` | int | if the value is `1`, cnn_classifier is used | -| `data_path` | str | packages data and artifacts directory path | -| `backlight_threshold` | float | If the intensity get grater than this overwrite with UNKNOWN in corresponding RoI. Note that, if the value is much higher, the node only overwrites in the harsher backlight situations. Therefore, If you wouldn't like to use this feature set this value to `1.0`. The value can be `[0.0, 1.0]`. The confidence of overwritten signal is set to `0.0`. | +* [Autoware Foundation Planning](https://github.com/autowarefoundation/autoware.auto/tree/master/ros/autoware/core/planning_with_mpc) +* [Model Predictive Control Theory and Design](https://link.springer.com/book/10.1007/978-0-89838-330-2) -### Core Parameters +| 名前 | 種類 | 説明 | +|---|---|---| +| `~/output/traffic_signals` | `tier4_perception_msgs::msg::TrafficLightArray` | 分類済み信号 | +| `~/output/debug/image` | `sensor_msgs::msg::Image` | デバッグ用画像 | + +## パラメータ + +### ノードパラメータ + +| 名前 | タイプ | 説明 | +|---|---|---| +| `classifier_type` | int | 値が `1` の場合、cnn_classifier が使用されます。 | +| `data_path` | str | packages データおよびアーティファクトのディレクトリパス | +| `backlight_threshold` | float | 強度がこの値を超えた場合、対応する RoI で UNKNOWN で上書きします。この値がはるかに大きい場合、ノードは過酷な逆光状況でのみ上書きするということに注意してください。したがって、この機能を使用しない場合は、この値を `1.0` に設定してください。この値は `[0.0, 1.0]` にできます。上書きされた信号の信頼性は `0.0` に設定されます。 | + +### コアパラメータ #### cnn_classifier -| Name | Type | Description | +| 名称 | タイプ | 説明 | | ----------------------- | --------------- | ------------------------------------ | -| `classifier_label_path` | str | path to the model file | -| `classifier_model_path` | str | path to the label file | -| `classifier_precision` | str | TensorRT precision, `fp16` or `int8` | -| `classifier_mean` | vector\ | 3-channel input image mean | -| `classifier_std` | vector\ | 3-channel input image std | -| `apply_softmax` | bool | whether or not apply softmax | +| `classifier_label_path` | str | モデルファイルのパス | +| `classifier_model_path` | str | ラベルファイルのパス | +| `classifier_precision` | str | TensorRT精度、`fp16`または`int8` | +| `classifier_mean` | vector\ | 3チャネル入力画像の平均 | +| `classifier_std` | vector\ | 3チャネル入力画像の標準偏差 | +| `apply_softmax` | bool | ソフトマックスを適用するかどうか | #### hsv_classifier -| Name | Type | Description | -| -------------- | ---- | ---------------------------------------------- | -| `green_min_h` | int | the minimum hue of green color | -| `green_min_s` | int | the minimum saturation of green color | -| `green_min_v` | int | the minimum value (brightness) of green color | -| `green_max_h` | int | the maximum hue of green color | -| `green_max_s` | int | the maximum saturation of green color | -| `green_max_v` | int | the maximum value (brightness) of green color | -| `yellow_min_h` | int | the minimum hue of yellow color | -| `yellow_min_s` | int | the minimum saturation of yellow color | -| `yellow_min_v` | int | the minimum value (brightness) of yellow color | -| `yellow_max_h` | int | the maximum hue of yellow color | -| `yellow_max_s` | int | the maximum saturation of yellow color | -| `yellow_max_v` | int | the maximum value (brightness) of yellow color | -| `red_min_h` | int | the minimum hue of red color | -| `red_min_s` | int | the minimum saturation of red color | -| `red_min_v` | int | the minimum value (brightness) of red color | -| `red_max_h` | int | the maximum hue of red color | -| `red_max_s` | int | the maximum saturation of red color | -| `red_max_v` | int | the maximum value (brightness) of red color | - -## Training Traffic Light Classifier Model - -### Overview - -This guide provides detailed instructions on training a traffic light classifier model using the **[mmlab/mmpretrain](https://github.com/open-mmlab/mmpretrain)** repository -and deploying it using **[mmlab/mmdeploy](https://github.com/open-mmlab/mmdeploy)**. -If you wish to create a custom traffic light classifier model with your own dataset, please follow the steps outlined below. - -### Data Preparation - -#### Use Sample Dataset - -Autoware offers a sample dataset that illustrates the training procedures for -traffic light classification. This dataset comprises 1045 images categorized -into red, green, and yellow labels. To utilize this sample dataset, -please download it from **[link](https://autoware-files.s3.us-west-2.amazonaws.com/dataset/traffic_light_sample_dataset.tar.gz)** and extract it to a designated folder of your choice. - -#### Use Your Custom Dataset - -To train a traffic light classifier, adopt a structured subfolder format where each -subfolder represents a distinct class. Below is an illustrative dataset structure example; +## HSV カラーベース分類器 + +このコンポーネントは、Hue, Saturation, Value(HSV)カラー空間を使用して障害物を分類します。これにより、セグメンテーションのフィルタリングや、Planningコンポーネントに対する追加的な入力として使用できます。 + +### 入出力 + +**入力:** + +* `PointCloud`: 障害物のPointCloudデータ +* `CameraInfo`: カメラの内部および外部パラメータ + +**出力:** + +* `ClassifiedPointCloud`: HSV色相に基づいて分類された障害物のPointCloudデータ + +### パラメータ + +| パラメータ | 説明 | デフォルト値 | +|---|---|---| +| `hue_threshold`: HSV色相の閾値 (度) | 30 | +| `saturation_threshold`: HSV彩度の閾値 | 0.1 | +| `value_threshold`: HSV明度の閾値 | 0.1 | +| `post resampling`: ポストリサンプリングフィルターを使用するかどうか | True | + +### アルゴリズム + +このコンポーネントは、各点のHSV色相、彩度、明度を計算し、指定されたしきい値と比較します。指定されたしきい値を超える点は、障害物として分類されます。 + +### 注意事項 + +* この分類器は単一のカメラからのデータだけを使用することに注意してください。より堅牢な障害物検出を行うには、複数のカメラからのデータを使用する必要があります。 +* パラメータは特定のシーンやライティング条件に応じて調整する必要があります。 +* この分類器は、距離情報を使用しません。そのため、障害物が自車位置に近いか遠いかを区別できません。 + +| 名 | 型 | 説明 | +|---|---|---| +| `green_min_h` | int | 緑色の最小色相 | +| `green_min_s` | int | 緑色の最小彩度 | +| `green_min_v` | int | 緑色の最小明度 | +| `green_max_h` | int | 緑色の最大色相 | +| `green_max_s` | int | 緑色の最大彩度 | +| `green_max_v` | int | 緑色の最大明度 | +| `yellow_min_h` | int | 黄色の最小色相 | +| `yellow_min_s` | int | 黄色の最小彩度 | +| `yellow_min_v` | int | 黄色の最小明度 | +| `yellow_max_h` | int | 黄色の最大色相 | +| `yellow_max_s` | int | 黄色の最大彩度 | +| `yellow_max_v` | int | 黄色の最大明度 | +| `red_min_h` | int | 赤色の最小色相 | +| `red_min_s` | int | 赤色の最小彩度 | +| `red_min_v` | int | 赤色の最小明度 | +| `red_max_h` | int | 赤色の最大色相 | +| `red_max_s` | int | 赤色の最大彩度 | +| `red_max_v` | int | 赤色の最大明度 | + +## 交通信号機分類器モデルのトレーニング + +### 概要 + +このガイドでは、**[mmlab/mmpretrain](https://github.com/open-mmlab/mmpretrain)** リポジトリを使用して交通信号機分類器モデルをトレーニングし、**[mmlab/mmdeploy](https://github.com/open-mmlab/mmdeploy)** を使用して展開する方法に関する詳細な手順を説明します。独自のデータセットを使用して独自の交通信号機分類器モデルを作成する場合は、以下に示す手順に従ってください。 + +### データの準備 + +#### サンプルデータセットの使用 + +Autoware は交通信号機の分類のためのトレーニング手順を示すサンプルデータセットを提供しています。このデータセットは、赤、緑、黄色のラベルに分類された 1045 枚の画像で構成されています。このサンプルデータセットを使用するには、**[リンク](https://autoware-files.s3.us-west-2.amazonaws.com/dataset/traffic_light_sample_dataset.tar.gz)** からダウンロードして、選択した指定フォルダーに解凍してください。 + +#### カスタムデータセットの使用 + +交通信号機分類器をトレーニングするには、各サブフォルダーが異なるクラスを表す、構造化されたサブフォルダー形式を採用します。以下に示すのは、データセット構造の例です。 + ```python DATASET_ROOT @@ -145,32 +277,35 @@ DATASET_ROOT ``` -### Installation +### インストール -#### Prerequisites +#### 前提条件 -**Step 1.** Download and install Miniconda from the [official website](https://mmpretrain.readthedocs.io/en/latest/get_started.html). +**ステップ 1.** [公式ウェブサイト](https://mmpretrain.readthedocs.io/en/latest/get_started.html)からMinicondaをダウンロードしてインストールします。 + +**ステップ 2.** conda仮想環境を作成してアクティベートします -**Step 2.** Create a conda virtual environment and activate it ```bash conda create --name tl-classifier python=3.8 -y conda activate tl-classifier ``` -**Step 3.** Install PyTorch +**手順 3.** PyTorchのインストール + +CUDA 11.6と互換性のあるPyTorchをインストールしてください。これは、現在のAutowareの要件です。 -Please ensure you have PyTorch installed, compatible with CUDA 11.6, as it is a requirement for current Autoware ```bash conda install pytorch==1.13.1 torchvision==0.14.1 pytorch-cuda=11.6 -c pytorch -c nvidia ``` -#### Install mmlab/mmpretrain +#### mmlab/mmpretrain のインストール + +**手順 1.** mmpretrain をソースからインストール -**Step 1.** Install mmpretrain from source ```bash cd ~/ @@ -179,28 +314,24 @@ cd mmpretrain pip install -U openmim && mim install -e . ``` -### Training +### トレーニング + +MMPretrainは構成ファイルによって制御されるトレーニングスクリプトを提供します。 +継承デザインパターンを利用することで、構成ファイルとしてPythonファイルを使用してトレーニングスクリプトを簡単に調整できます。 -MMPretrain offers a training script that is controlled through a configuration file. -Leveraging an inheritance design pattern, you can effortlessly tailor the training script -using Python files as configuration files. +この例では、MobileNetV2モデルを使ったトレーニングステップを示しますが、EfficientNetV2、EfficientNetV3、ResNetなど、別の分類モデルを使用する柔軟性があります。 -In the example, we demonstrate the training steps on the MobileNetV2 model, -but you have the flexibility to employ alternative classification models such as -EfficientNetV2, EfficientNetV3, ResNet, and more. +#### 構成ファイルの作成 -#### Create a config file +`configs`フォルダ内で使用するモデルの構成ファイルを作成します。 -Generate a configuration file for your preferred model within the `configs` folder ```bash touch ~/mmpretrain/configs/mobilenet_v2/mobilenet-v2_8xb32_custom.py ``` -Open the configuration file in your preferred text editor and make a copy of -the provided content. Adjust the **data_root** variable to match the path of your dataset. -You are welcome to customize the configuration parameters for the model, dataset, and scheduler to -suit your preferences +好みのテキストエディターでコンフィグレーションファイルを開き、提供されたコンテンツのコピーを作成してください。データセットのパスに合わせて **data_root** 変数を調整します。モデル、データセット、スケジューラーのコンフィグレーションパラメーターは、好みに合わせてカスタマイズできます。 + ```python # Inherit model, schedule and default_runtime from base model @@ -289,21 +420,23 @@ test_evaluator = val_evaluator ``` -#### Start training +#### トレーニングの開始 + ```bash cd ~/mmpretrain python tools/train.py configs/mobilenet_v2/mobilenet-v2_8xb32_custom.py ``` -Training logs and weights will be saved in the `work_dirs/mobilenet-v2_8xb32_custom` folder. +トレーニングログと重みは、`work_dirs/mobilenet-v2_8xb32_custom` フォルダに保存されます。 + +### PyTorchモデルからONNXモデルへの変換 -### Convert PyTorch model to ONNX model +#### mmdeployのインストール -#### Install mmdeploy +「mmdeploy」ツールセットは、トレーニングされたモデルをさまざまなターゲットデバイスにデプロイするように設計されています。 +その機能により、PyTorchモデルをONNX形式にシームレスに変換できます。 -The 'mmdeploy' toolset is designed for deploying your trained model onto various target devices. -With its capabilities, you can seamlessly convert PyTorch models into the ONNX format. ```bash # Activate your conda environment @@ -326,7 +459,8 @@ cd ~/ git clone -b main https://github.com/open-mmlab/mmdeploy.git ``` -#### Convert PyTorch model to ONNX model +#### PyTorchモデルをONNXモデルに変換する + ```bash cd ~/mmdeploy @@ -342,56 +476,58 @@ python tools/deploy.py \ --work-dir mmdeploy_model/mobilenet_v2 ``` -Converted ONNX model will be saved in the `mmdeploy/mmdeploy_model/mobilenet_v2` folder. +## ONNXモデル変換 + +変換されたONNXモデルは、`mmdeploy/mmdeploy_model/mobilenet_v2`フォルダに保存されます。 -After obtaining your onnx model, update parameters defined in the launch file (e.g. `model_file_path`, `label_file_path`, `input_h`, `input_w`...). -Note that, we only support labels defined in [tier4_perception_msgs::msg::TrafficLightElement](https://github.com/tier4/tier4_autoware_msgs/blob/tier4/universe/tier4_perception_msgs/msg/traffic_light/TrafficLightElement.msg). +ONNXモデルを入手したら、起動ファイルで定義されているパラメータ(例:`model_file_path`、`label_file_path`、`input_h`、`input_w`など)を更新します。[tier4_perception_msgs::msg::TrafficLightElement](https://github.com/tier4/tier4_autoware_msgs/blob/tier4/universe/tier4_perception_msgs/msg/traffic_light/TrafficLightElement.msg)で定義されているラベルのみサポートすることに注意してください。 -## Assumptions / Known limits +## 仮定/既知の制限 - -## (Optional) Error detection and handling +## (オプション) エラー検出および処理 - -## (Optional) Performance characterization +## (オプション) パフォーマンス特性 - -## References/External links +## 参照/外部リンク -[1] M. Sandler, A. Howard, M. Zhu, A. Zhmoginov and L. Chen, "MobileNetV2: Inverted Residuals and Linear Bottlenecks," 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition, Salt Lake City, UT, 2018, pp. 4510-4520, doi: 10.1109/CVPR.2018.00474. +[1] M. Sandler、A. Howard、M. Zhu、A. Zhmoginov、L. Chen、「MobileNetV2:逆残差と線形ボトルネック」、2018 IEEE/CVFコンピュータビジョンアンドパターン認識会議、ソルトレイクシティ、ユタ州、2018年、pp。 4510-4520、doi:10.1109/CVPR.2018.00474。 -[2] Tan, Mingxing, and Quoc Le. "EfficientNet: Rethinking model scaling for convolutional neural networks." International conference on machine learning. PMLR, 2019. +[2] タン、ミングシン、クオック・レ。「EfficientNet:畳み込みニューラルネットワークのモデルスケーリングを再考する」。機械学習に関する国際会議。PMLR、2019年。 -## (Optional) Future extensions / Unimplemented parts +## (オプション) 将来の拡張/未実装部分 - + diff --git a/perception/autoware_traffic_light_fine_detector/README.md b/perception/autoware_traffic_light_fine_detector/README.md index 35b55c84aa087..50c51c9d3c7d6 100644 --- a/perception/autoware_traffic_light_fine_detector/README.md +++ b/perception/autoware_traffic_light_fine_detector/README.md @@ -1,69 +1,96 @@ # traffic_light_fine_detector -## Purpose +## 目的 -It is a package for traffic light detection using YoloX-s. +YoloX-sを利用した交通信号灯検出用パッケージです。 -## Training Information +## トレーニング情報 -### Pretrained Model +### 事前トレーニングされたモデル -The model is based on [YOLOX](https://github.com/Megvii-BaseDetection/YOLOX) and the pretrained model could be downloaded from [here](https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth). +このモデルは [YOLOX](https://github.com/Megvii-BaseDetection/YOLOX) をベースにしており、事前トレーニングされたモデルは [こちら](https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth) からダウンロードできます。 -### Training Data +### トレーニングデータ -The model was fine-tuned on around 17,000 TIER IV internal images of Japanese traffic lights. +このモデルは、日本における TIER IV の約 17,000 枚の内部交通信号灯画像でファインチューニングが行われました。 -### Trained Onnx model +### トレーニング済みの ONNX モデル -You can download the ONNX file using these instructions. -Please visit [autoware-documentation](https://github.com/autowarefoundation/autoware-documentation/blob/main/docs/models/index.md) for more information. +以下の手順を使用して ONNX ファイルをダウンロードできます。詳細については [autoware-documentation](https://github.com/autowarefoundation/autoware-documentation/blob/main/docs/models/index.md) を参照してください。 -## Inner-workings / Algorithms +## 内部仕様 / アルゴリズム -Based on the camera image and the global ROI array detected by `map_based_detection` node, a CNN-based detection method enables highly accurate traffic light detection. +カメラ画像と `map_based_detection` ノードによって検出されたグローバル ROI アレイに基づき、CNN ベースの検出方法によって非常に正確な交通信号灯検出が可能になります。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| --------------- | -------------------------------------------------- | ------------------------------------------------------------------- | -| `~/input/image` | `sensor_msgs/Image` | The full size camera image | -| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | The array of ROIs detected by map_based_detector | -| `~/expect/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | The array of ROIs detected by map_based_detector without any offset | +| 名前 | 型 | 説明 | +| ----------- | ------------------------------------------------- | --------------------------------------------------------------- | +| `~/input/image` | `sensor_msgs/Image` | フルサイズカメラ画像 | +| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | map_based_detectorで検出されたROIの配列 | +| `~/expect/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | オフセットのないmap_based_detectorで検出されたROIの配列 | -### Output +### 出力 -| Name | Type | Description | -| --------------------- | -------------------------------------------------- | ---------------------------- | -| `~/output/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | The detected accurate rois | -| `~/debug/exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | The time taken for inference | +**自動運転ソフトウェア** -## Parameters +**概要** -### Core Parameters +このドキュメントでは、AutowareのPlanningコンポーネント/モジュールの動作について説明します。Planningは、Perceptionから受信した認識データを処理し、将来の経路を計画します。 -| Name | Type | Default Value | Description | -| ---------------------------- | ------ | ------------- | ---------------------------------------------------------------------- | -| `fine_detector_score_thresh` | double | 0.3 | If the objectness score is less than this value, the object is ignored | -| `fine_detector_nms_thresh` | double | 0.65 | IoU threshold to perform Non-Maximum Suppression | +**動作** -### Node Parameters +Planningコンポーネントは、次のステップに従って動作します。 -| Name | Type | Default Value | Description | -| -------------------------- | ------- | --------------------------- | ------------------------------------------------------------------ | -| `data_path` | string | "$(env HOME)/autoware_data" | packages data and artifacts directory path | -| `fine_detector_model_path` | string | "" | The onnx file name for yolo model | -| `fine_detector_label_path` | string | "" | The label file with label names for detected objects written on it | -| `fine_detector_precision` | string | "fp32" | The inference mode: "fp32", "fp16" | -| `approximate_sync` | bool | false | Flag for whether to ues approximate sync policy | -| `gpu_id` | integer | 0 | ID for the selecting CUDA GPU device | +1. **認識データの受信:** Perceptionコンポーネントから、障害物、走行可能な領域、交通標識などの認識データを受信します。 +2. **ローカルパス計画:** 受信した認識データを使用して、自車位置周辺のローカルパスを生成します。 +3. **グローバルパス計画:** ローカルパスをグローバルパスに拡張し、目的地までの中長期的な経路を作成します。 +4. **再サンプル:** 生成されたパスを調整し、'post resampling'を実行して滑らかで実行可能なパスにします。 +5. **Planningの決定:** velocity逸脱量、acceleration逸脱量、操舵角など、Planningの決定を計算します。 +6. **Controlへの送信:** 計算されたPlanningの決定をControlコンポーネントに送信します。 -## Assumptions / Known limits +**機能** -## Reference repositories +Planningコンポーネントには、次の機能があります。 -YOLOX github repository +* 障害物回避のためのリアルタイムパス計画 +* 交通規則の遵守 +* 速度と加速度の最適化 +* 複数のパスオプションの生成 +* 高速道路と都市部の両方での動作 + +| 名 | 型 | 説明 | +| --------------------- | --------------------------------------------------- | ---------------------------- | +| `~/output/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | 検出された正確な枠 | +| `~/debug/exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | 推論にかかった時間 | + +## パラメータ + +### コアパラメータ + +| 名称 | 種類 | デフォルト値 | 説明 | +| --------------------------- | ------ | ------------ | ---------------------------------------------------------------- | +| `fine_detector_score_thresh` | double | 0.3 | オブジェクトスコアがこの値未満の場合、オブジェクトは無視されます | +| `fine_detector_nms_thresh` | double | 0.65 | Non-Maximum Suppressionを実行するためのIoU閾値 | + +### ノードパラメータ + +| 名前 | 型 | 初期値 | 説明 | +| -------------------------- | ------- | ----------------------------- | ---------------------------------------------------------------- | +| `data_path` | 文字列 | "$(env HOME)/autoware_data" | パッケージのデータとアーティファクトのディレクトリパス | +| `fine_detector_model_path` | 文字列 | "" | Yoloモデルのonnxファイル名 | +| `fine_detector_label_path` | 文字列 | "" | 検出されたオブジェクトのラベル名を記載したラベルファイル | +| `fine_detector_precision` | 文字列 | "fp32" | 推論モード: "fp32", "fp16" | +| `approximate_sync` | ブール | false | 近似同期ポリシーを使用するかどうかを指定するフラグ | +| `gpu_id` | 整数 | 0 | CUDA GPUデバイスを選択するためのID | + +## 仮定 / 既知の制限 + +## 参照リポジトリ + +YOLOX GitHub リポジトリ + +- https://github.com/Megvii-BaseDetection/YOLOX -- diff --git a/perception/autoware_traffic_light_map_based_detector/README.md b/perception/autoware_traffic_light_map_based_detector/README.md index 8a59db19ae64d..6881f5f04e168 100644 --- a/perception/autoware_traffic_light_map_based_detector/README.md +++ b/perception/autoware_traffic_light_map_based_detector/README.md @@ -1,42 +1,43 @@ -# The `autoware_traffic_light_map_based_detector` Package +# `autoware_traffic_light_map_based_detector` パッケージ -## Overview +## 概要 -`autoware_traffic_light_map_based_detector` calculates where the traffic lights will appear in the image based on the HD map. +`autoware_traffic_light_map_based_detector` は、HDマップに基づいて画像内に交通信号が表示される位置を計算します。 -Calibration and vibration errors can be entered as parameters, and the size of the detected RegionOfInterest will change according to the error. +キャリブレーションと振動の誤差をパラメータとして入力できます。誤差に応じて検出された領域のサイズが変化します。 ![traffic_light_map_based_detector_result](./docs/traffic_light_map_based_detector_result.svg) -If the node receives route information, it only looks at traffic lights on that route. -If the node receives no route information, it looks at a radius of 200 meters and the angle between the traffic light and the camera is less than 40 degrees. +ノードがルート情報を取得する場合、そのルート上の交通信号のみを対象にします。 +ノードがルート情報を取得しない場合、半径200メートル以内の交通信号で、交通信号とカメラ間の角度が40度未満のもののみを対象にします。 -## Input topics +## 入力トピック -| Name | Type | Description | -| -------------------- | ------------------------------------- | ----------------------- | -| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | vector map | -| `~input/camera_info` | sensor_msgs::CameraInfo | target camera parameter | -| `~input/route` | autoware_planning_msgs::LaneletRoute | optional: route | +| 名称 | タイプ | 説明 | +| ---------------------| -------------------------------------- | -------------------------- | +| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクタマップ | +| `~input/camera_info` | sensor_msgs::CameraInfo | ターゲットカメラパラメータ | +| `~input/route` | autoware_planning_msgs::LaneletRoute | オプション: ルート | -## Output topics +## 出力トピック -| Name | Type | Description | +| 名前 | 型 | 説明 | | ---------------- | ------------------------------------------- | -------------------------------------------------------------------- | -| `~output/rois` | tier4_perception_msgs::TrafficLightRoiArray | location of traffic lights in image corresponding to the camera info | -| `~expect/rois` | tier4_perception_msgs::TrafficLightRoiArray | location of traffic lights in image without any offset | -| `~debug/markers` | visualization_msgs::MarkerArray | visualization to debug | - -## Node parameters - -| Parameter | Type | Description | -| ---------------------- | ------ | --------------------------------------------------------------------- | -| `max_vibration_pitch` | double | Maximum error in pitch direction. If -5~+5, it will be 10. | -| `max_vibration_yaw` | double | Maximum error in yaw direction. If -5~+5, it will be 10. | -| `max_vibration_height` | double | Maximum error in height direction. If -5~+5, it will be 10. | -| `max_vibration_width` | double | Maximum error in width direction. If -5~+5, it will be 10. | -| `max_vibration_depth` | double | Maximum error in depth direction. If -5~+5, it will be 10. | -| `max_detection_range` | double | Maximum detection range in meters. Must be positive | -| `min_timestamp_offset` | double | Minimum timestamp offset when searching for corresponding tf | -| `max_timestamp_offset` | double | Maximum timestamp offset when searching for corresponding tf | -| `timestamp_sample_len` | double | sampling length between min_timestamp_offset and max_timestamp_offset | +| `~output/rois` | tier4_perception_msgs::TrafficLightRoiArray | カメラ情報に対応する画像中の信号機の位置 | +| `~expect/rois` | tier4_perception_msgs::TrafficLightRoiArray | オフセットなしで画像内の信号機の位置 | +| `~debug/markers` | visualization_msgs::MarkerArray | デバッグ用の可視化 | + +## ノードパラメータ + +| パラメータ | 型 | 説明 | +| ---------------------- | ------ | ------------------------------------------------------------------------------------------------------------- | +| `max_vibration_pitch` | double | ピッチ方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_yaw` | double | ヨー方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_height` | double | 高さ方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_width` | double | 幅方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_depth` | double | 奥行き方向の最大誤差。-5~+5の場合、10になります。 | +| `max_detection_range` | double | メートル単位の最大検出範囲。正数でなければなりません | +| `min_timestamp_offset` | double | 対応するtfを検索するときの最小タイムスタンプオフセット | +| `max_timestamp_offset` | double | 対応するtfを検索するときの最大タイムスタンプオフセット | +| `timestamp_sample_len` | double | `min_timestamp_offset`と`max_timestamp_offset`の間の`'post resampling'`のサンプル長 | + diff --git a/perception/autoware_traffic_light_multi_camera_fusion/README.md b/perception/autoware_traffic_light_multi_camera_fusion/README.md index f7ee294cda147..9e610e96ff746 100644 --- a/perception/autoware_traffic_light_multi_camera_fusion/README.md +++ b/perception/autoware_traffic_light_multi_camera_fusion/README.md @@ -1,35 +1,230 @@ -# The `traffic_light_multi_camera_fusion` Package +## `traffic_light_multi_camera_fusion` パッケージ -## Overview +### 概要 -`traffic_light_multi_camera_fusion` performs traffic light signal fusion which can be summarized as the following two tasks: +`traffic_light_multi_camera_fusion` は、以下の 2 つのタスクにまとめられる、交通信号の融合を行います。 -1. Multi-Camera-Fusion: performed on single traffic light signal detected by different cameras. -2. Group-Fusion: performed on traffic light signals within the same group, which means traffic lights sharing the same regulatory element id defined in lanelet2 map. +1. 多眼カメラ融合: 別々のカメラで検出された単一の交通信号で行われます。 +2. グループ融合: 同一群内の交通信号で行われます。これには、lanelet2 マップで定義された同じ規制要素 ID を共有する信号が含まれます。 -## Input topics +### 入力トピック -For every camera, the following three topics are subscribed: +各カメラについて、以下の 3 つのトピックがサブスクライブされます: -| Name | Type | Description | -| -------------------------------------- | ---------------------------------------------- | --------------------------------------------------- | -| `~//camera_info` | sensor_msgs::CameraInfo | camera info from traffic_light_map_based_detector | -| `~//rois` | tier4_perception_msgs::TrafficLightRoiArray | detection roi from traffic_light_fine_detector | -| `~//traffic_signals` | tier4_perception_msgs::TrafficLightSignalArray | classification result from traffic_light_classifier | +| 名称 | 種類 | 説明 | +| -------------------------------------- | ---------------------------------------------- | ---------------------------------------------------- | +| `~//camera_info` | `sensor_msgs::CameraInfo` | `traffic_light_map_based_detector`からのカメラ情報 | +| `~//rois` | `tier4_perception_msgs::TrafficLightRoiArray` | `traffic_light_fine_detector`からの検出ROI | +| `~//traffic_signals` | `tier4_perception_msgs::TrafficLightSignalArray` | `traffic_light_classifier`からの分類結果 | -You don't need to configure these topics manually. Just provide the `camera_namespaces` parameter and the node will automatically extract the `` and create the subscribers. +これらのトピックを手動で設定する必要はありません。`camera_namespaces` パラメータを提供するだけで、ノードは `` を自動的に抽出し、サブスクライバーを作成します。 -## Output topics +## 出力トピック -| Name | Type | Description | -| -------------------------- | ------------------------------------------------- | ---------------------------------- | -| `~/output/traffic_signals` | autoware_perception_msgs::TrafficLightSignalArray | traffic light signal fusion result | +| 名 | タイプ | 説明 | +| --------------------------- | ------------------------------------------------------ | ------------------------------------- | +| `~/output/traffic_signals` | autoware_perception_msgs::TrafficLightSignalArray | 交通信号の融合結果 | -## Node parameters +## ノードパラメータ + +--- + +### Dynamic obstacles trajectory predictor (Dynamic tracker) + - Name: `~dynamic_tracker/tracking_time_window` + - Type: Float + - Default value: 4.0 + - Description: オブスタクルを追跡するための時間窓 (秒) + + - Name: `~dynamic_tracker/min_time_gap` + - Type: Float + - Default value: 1.0 + - Description: Dynamic Planning によって生成される経路上で、オブジェクトが追跡されるために必要な最小のタイムギャップ (秒) + + - Name: `~dynamic_tracker/max_time_gap` + - Type: Float + - Default value: 2.0 + - Description: Dynamic Planning によって生成される経路上で、オブジェクトが追跡されるために必要な最大タイムギャップ (秒) + + - Name: `~dynamic_tracker/acceleration_v2` + - Type: Float + - Default value: 2.0 + - Description: オブジェクトの加速度の最大値 (m/s^2) + + - Name: `~dynamic_tracker/longitudinal_jerk_v2` + - Type: Float + - Default value: 4.0 + - Description: オブジェクトの縦方向ジャークの最大値 (m/s^3) + + - Name: `~dynamic_tracker/lateral_jerk_v2` + - Type: Float + - Default value: 8.0 + - Description: オブジェクトの横方向ジャークの最大値 (m/s^3) + + - Name: `~dynamic_tracker/use_v_and_a` + - Type: Bool + - Default value: False + - Description: 速度と加速度を予測に使用するかどうか + + - Name: `~dynamic_tracker/consider_turning_radius` + - Type: Bool + - Default value: True + - Description: 予測の際、オブジェクトの旋回半径を考慮するかどうか + + - Name: `~dynamic_tracker/max_obstacle_age` + - Type: Float + - Default value: 1.0 + - Description: オブジェクトが追跡されるために必要な最大年齢 (秒) + + - Name: `~dynamic_tracker/pcd_post_resampling` + - Type: Bool + - Default value: False + - Description: `post resampling`後に点群を使用するかどうか + + - Name: `~dynamic_tracker/estimate_past_pose` + - Type: Bool + - Default value: True + - Description: オブジェクトの過去の位置を推定するかどうか + + - Name: `~dynamic_tracker/acceleration_lin_deceleration_v2` + - Type: Float + - Default value: 2.0 + - Description: オブジェクトの直線減速度の最大値 (m/s^2) + +### Obstacle slice planner + - Name: `~obstacle_slice_planner/enable_rollout_detection` + - Type: Bool + - Default value: True + - Description: ロールアウト検出を有効にするかどうか + + - Name: `~obstacle_slice_planner/rollout_detection_min_lane_idx` + - Type: Int + - Default value: 1 + - Description: レーンインデックスの最小値。これ未満のレーンのオブジェクトはロールアウト検出の対象外 + + - Name: `~obstacle_slice_planner/rollout_detection_max_lane_idx` + - Type: Int + - Default value: 2 + - Description: レーンインデックスの最大値。これ以上のレーンのオブジェクトはロールアウト検出の対象外 + + - Name: `~obstacle_slice_planner/rollout_detection_min_ego_v` + - Type: Float + - Default value: 0.1 + - Description: ロールアウト検出に使用する、自車速度の最小値 (m/s) + + - Name: `~obstacle_slice_planner/rollout_detection_min_v_diff` + - Type: Float + - Default value: 0.5 + - Description: ロールアウト検出に使用する、自車と対象オブジェクトの速度差の最小値 (m/s) + + - Name: `~obstacle_slice_planner/rollout_detection_horizontal_distance` + - Type: Float + - Default value: 15.0 + - Description: ロールアウト検出に使用する、自車と対象オブジェクトの水平距離の最大値 (m) + + - Name: `~obstacle_slice_planner/rollout_detection_time_offset` + - Type: Float + - Default value: 3.0 + - Description: ロールアウト検出に使用する、タイムオフセットの最大値 (秒) + + - Name: `~obstacle_slice_planner/rollout_detection_speed_limit` + - Type: Float + - Default value: 20.0 + - Description: ロールアウト検出に使用する、道路の速度制限 (m/s) + + - Name: `~obstacle_slice_planner/rollout_detection_lateral_interval` + - Type: Float + - Default value: 2.0 + - Description: ロールアウト検出に使用する、横方向のインターバル (m) + + - Name: `~obstacle_slice_planner/rollout_detection_grid_resolution` + - Type: Float + - Default value: 1.0 + - Description: ロールアウト検出に使用する、グリッド解像度 (m) + + - Name: `~obstacle_slice_planner/rollout_detection_overlap_threshold` + - Type: Float + - Default value: 0.5 + - Description: ロールアウト検出に使用する、オブジェクトの重なり量のしきい値 + + - Name: `~obstacle_slice_planner/rollout_detection_angle_diff_threshold` + - Type: Float + - Default value: 20.0 + - Description: ロールアウト検出に使用する、オブジェクトの方向角差のしきい値 (deg) + + - Name: `~obstacle_slice_planner/candidate_index_list` + - Type: IntList + - Default value: [] + - Description: 候補となるスライスインデックスのリスト + + - Name: `~obstacle_slice_planner/candidate_pose_list` + - Type: PoseArray + - Default value: [] + - Description: 候補となる自車位置のリスト + +### Motion planner + - Name: `~motion_planner/sample_interval` + - Type: Float + - Default value: 0.5 + - Description: サンプリングの間隔 (秒) + + - Name: `~motion_planner/max_sample_number` + - Type: Int + - Default value: 1000 + - Description: 最大サンプリング数 + + - Name: `~motion_planner/max_calc_time` + - Type: Float + - Default value: 0.1 + - Description: Motion Planning の最大計算時間 (秒) + + - Name: `~motion_planner/speed_limit` + - Type: Float + - Default value: 20.0 + - Description: 経路生成時の速度制限 (m/s) + + - Name: `~motion_planner/max_acceleration` + - Type: Float + - Default value: 2.0 + - Description: 経路生成時の最大加速度 (m/s^2) + + - Name: `~motion_planner/max_lateral_jerk` + - Type: Float + - Default value: 4.0 + - Description: 経路生成時の最大横方向ジャーク (m/s^3) + + - Name: `~motion_planner/max_lateral_acceleration` + - Type: Float + - Default value: 2.0 + - Description: 経路生成時の最大横方向加速度 (m/s^2) + + - Name: `~motion_planner/target_speed` + - Type: Float + - Default value: 10.0 + - Description: Motion Planning のターゲット速度 (m/s) + + - Name: `~motion_planner/min_speed` + - Type: Float + - Default value: 2.0 + - Description: Motion Planning の最小速度 (m/s) + + - Name: `~motion_planner/enable_smoothed_path` + - Type: Bool + - Default value: True + - Description: Smooth Path Planning を有効にするかどうか + + - Name: `~motion_planner/smoothed_path_epsilon` + - Type: Float + - Default value: 0.1 + - Description: Smooth Path Planning のイプシロン値 + + - Name: `~motion_planner/curvature_threshold` + - Type: Float + - Default value + +| パラメータ | 型 | 説明 | +| --------------------------- | ------------- | -------------------------------------------- | +| `camera_namespaces` | vector | 融合されるカメラのネームスペース | +| `message_lifespan` | double | 融合されるタイムスタンプの最大スパン | +| `approximate_sync` | bool | 近似同期モードで動作するかどうか | +| `perform_group_fusion` | bool | グループ融合を実行するかどうか | -| Parameter | Type | Description | -| ---------------------- | --------------- | ------------------------------------------------ | -| `camera_namespaces` | vector\ | Camera Namespaces to be fused | -| `message_lifespan` | double | The maximum timestamp span to be fused | -| `approximate_sync` | bool | Whether work in Approximate Synchronization Mode | -| `perform_group_fusion` | bool | Whether perform Group Fusion | diff --git a/perception/autoware_traffic_light_occlusion_predictor/README.md b/perception/autoware_traffic_light_occlusion_predictor/README.md index bc57dbea76c97..c66650a708c7b 100644 --- a/perception/autoware_traffic_light_occlusion_predictor/README.md +++ b/perception/autoware_traffic_light_occlusion_predictor/README.md @@ -1,36 +1,37 @@ -# The `autoware_traffic_light_occlusion_predictor` Package +# Autowareの`autoware_traffic_light_occlusion_predictor`パッケージ -## Overview +## 概要 -`autoware_traffic_light_occlusion_predictor` receives the detected traffic lights rois and calculates the occlusion ratios of each roi with point cloud. +`autoware_traffic_light_occlusion_predictor`は、検出された信号機領域(ROI)を受信し、点群を使用して各領域の閉塞率を計算します。 -For each traffic light roi, hundreds of pixels would be selected and projected into the 3D space. Then from the camera point of view, the number of projected pixels that are occluded by the point cloud is counted and used for calculating the occlusion ratio for the roi. As shown in follow image, the red pixels are occluded and the occlusion ratio is the number of red pixels divided by the total pixel numbers. +各信号機ROIに対して、数百個のピクセルが選択され、3D空間に投影されます。次に、カメラの視点から、点群によって遮られている投影ピクセルの数がカウントされ、ROIの閉塞率を計算するために使用されます。次の画像に示すように、赤いピクセルは遮られ、閉塞率は赤いピクセルの数全体のピクセル数で割ったものです。 ![image](images/occlusion.png) -If no point cloud is received or all point clouds have very large stamp difference with the camera image, the occlusion ratio of each roi would be set as 0. +点群が受信されない場合、またはすべての点群がカメラ画像と非常に大きなタイムスタンプの違いがある場合、各ROIの閉塞率は0に設定されます。 -## Input topics +## 入力トピック -| Name | Type | Description | -| -------------------- | ---------------------------------------------- | ------------------------ | -| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | vector map | -| `~/input/rois` | autoware_perception_msgs::TrafficLightRoiArray | traffic light detections | -| `~input/camera_info` | sensor_msgs::CameraInfo | target camera parameter | -| `~/input/cloud` | sensor_msgs::PointCloud2 | LiDAR point cloud | +| 名前 | タイプ | 説明 | +| -------------------- | ------------------------------------------------ | ------------------- | +| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | +| `~/input/rois` | `autoware_perception_msgs::TrafficLightRoiArray` | traffic light detections | +| `~input/camera_info` | `sensor_msgs::CameraInfo` | target camera parameter | +| `~/input/cloud` | `sensor_msgs::PointCloud2` | LiDAR point cloud | -## Output topics +## 出力トピック -| Name | Type | Description | -| -------------------- | ---------------------------------------------------- | ---------------------------- | -| `~/output/occlusion` | autoware_perception_msgs::TrafficLightOcclusionArray | occlusion ratios of each roi | +| 名称 | タイプ | 説明 | +| -------------------- | ------------------------------------------------------- | ---------------------------- | +| `~/output/occlusion` | autoware_perception_msgs::TrafficLightOcclusionArray | 各ROIの遮蔽率 | -## Node parameters +## ノードパラメーター + +| パラメータ | 型 | 説明 | +| ------------------------------------ | ------ | ----------------------------------------------------------------------- | +| `azimuth_occlusion_resolution_deg` | double | LiDARポイントクラ​​ウドの方位分解能 (度) | +| `elevation_occlusion_resolution_deg` | double | LiDARポイントクラ​​ウドの仰角分解能 (度) | +| `max_valid_pt_dist` | double | この距離内のポイントは計算に使用される | +| `max_image_cloud_delay` | double | LiDARポイントクラ​​ウドとカメラ画像の最大遅延 | +| `max_wait_t` | double | LiDARポイントクラ​​ウドを待機する最大時間 | -| Parameter | Type | Description | -| ------------------------------------ | ------ | ------------------------------------------------------------- | -| `azimuth_occlusion_resolution_deg` | double | azimuth resolution of LiDAR point cloud (degree) | -| `elevation_occlusion_resolution_deg` | double | elevation resolution of LiDAR point cloud (degree) | -| `max_valid_pt_dist` | double | The points within this distance would be used for calculation | -| `max_image_cloud_delay` | double | The maximum delay between LiDAR point cloud and camera image | -| `max_wait_t` | double | The maximum time waiting for the LiDAR point cloud | diff --git a/perception/autoware_traffic_light_visualization/README.md b/perception/autoware_traffic_light_visualization/README.md index ba1d9e54b788f..9b5f029fddfb8 100644 --- a/perception/autoware_traffic_light_visualization/README.md +++ b/perception/autoware_traffic_light_visualization/README.md @@ -1,68 +1,186 @@ # autoware_traffic_light_visualization -## Purpose +## 目的 -The `autoware_traffic_light_visualization` is a package that includes two visualizing nodes: +`autoware_traffic_light_visualization`は、2つの可視化ノードを含むパッケージです。 -- **traffic_light_map_visualizer** is a node that shows traffic lights color status and position on rviz as markers. -- **traffic_light_roi_visualizer** is a node that draws the result of traffic light recognition nodes (traffic light status, position and classification probability) on the input image as shown in the following figure and publishes it. +- **traffic_light_map_visualizer**は、rviz上で交通信号の色状態と位置をマーカーとして表示するノードです。 +- **traffic_light_roi_visualizer**は、下の図に示すように、交通信号認識ノードの結果(交通信号の状態、位置、分類確率)を入力画像に描き、パブリッシュするノードです。 -![traffic light roi visualization](./images/roi-visualization.png) +![交通信号ROI可視化](./images/roi-visualization.png) -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -## Inputs / Outputs +## 入出力 ### traffic_light_map_visualizer -#### Input +#### 入力 -| Name | Type | Description | -| -------------------- | ---------------------------------------------------- | ------------------------ | -| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightGroupArray` | status of traffic lights | -| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | +| 名前 | タイプ | 説明 | +| -------------------- | ---------------------------------------------------- | ----------------- | +| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightGroupArray` | 信号機の状態 | +| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | -#### Output +#### 出力 -| Name | Type | Description | +**自動運転ソフトウェア** + +**概要** + +このドキュメントでは、自律走行車両の開発に採用される自動運転ソフトウェアアーキテクチャについて説明します。このアーキテクチャは、業界標準であるAutowareをベースに設計されており、Perception(知覚)、Planning(プランニング)、Control(制御)の3つの主要コンポーネントで構成されています。 + +**アーキテクチャ** + +**1. Perception** + +Perceptionコンポーネントは、センサーデータ(カメラ、レーダー、LiDARなど)を使用して、車両の周囲環境を検出し、解釈します。このデータから、以下の情報が生成されます。 + +* オブジェクト検出(車両、歩行者、障害物) +* 車両の周辺認識(自車位置、車線、交通標識) +* 環境マッピング + +**2. Planning** + +Planningコンポーネントは、Perceptionコンポーネントによって生成された情報を基に、車両の経路を計画します。この経路は、以下の制約を考慮して生成されます。 + +* 交通規則 +* 速度制限 +* 障害物回避 +* ドライバの意図(例:ウインカーからの入力) + +**3. Control** + +Controlコンポーネントは、Planningコンポーネントによって生成された経路に基づいて、車両を制御します。これには以下の機能が含まれます。 + +* ステアリング角制御 +* スロットル制御 +* ブレーキ制御 + +**リアルタイム処理** + +このアーキテクチャは、リアルタイムで処理されます。つまり、ソフトウェアはセンサーデータを受け取り、環境を認識し、経路を計画し、車両を制御するために継続的に実行されます。 + +**エラー処理** + +このアーキテクチャには、以下のエラー処理メカニズムが含まれています。 + +* センサーデータの冗長性(複数のセンサーを使用) +* Planningの冗長性(複数のPlanningアルゴリズムを使用) +* Controlの冗長性(複数のアクチュエータを使用) + +**テストと検証** + +このアーキテクチャのテストと検証は、以下の方法で行われます。 + +* シミュレーション +* 屋外試験(公道上のテスト) +* `post resampling`の解析 + +**業界における関連性** + +このアーキテクチャは、自律走行車両の業界で広く採用されています。そのモジュール性と拡張性が、さまざまな車両タイプや運転シナリオに対応することを可能にします。 + +**用語集** + +* Perception:車両の周囲環境の認識と解釈 +* Planning:車両の経路計画 +* Control:車両の制御とアクチュエーション +* `post resampling`:シミュレーションデータを使用して、実際に収集されたデータのテストを行う手法 +* velocity逸脱量:速度逸脱の量 +* acceleration逸脱量:加速度逸脱の量 + +| 名称 | タイプ | 説明 | | ------------------------ | -------------------------------------- | ---------------------------------------------------- | -| `~/output/traffic_light` | `visualization_msgs::msg::MarkerArray` | marker array that indicates status of traffic lights | +| `~/output/traffic_light` | `visualization_msgs::msg::MarkerArray` | 信号機のステータスを示すマーカー配列 | ### traffic_light_roi_visualizer -#### Input +#### 入力 + +| 名目 | タイプ | 説明 | +| ----------------------------- | -------------------------------------------------- | -------------------------------------------------------- | +| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightArray` | 信号状態 | +| `~/input/image` | `sensor_msgs::msg::Image` | 知覚カメラでキャプチャした画像 | +| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `traffic_light_fine_detector` によって検出された ROI | +| `~/input/rough/rois` (オプション) | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `traffic_light_map_based_detector` によって検出された ROI | + +#### 出力 + +**自動運転ソフトウェアに関するドキュメント** + +本ドキュメントは、AutowareのBehavior Planningコンポーネントの設計概要を示しています。 + +**概要** + +Behavior Planningコンポーネントは、他のモジュールから提供された情報に基づいて、自律走行車の安全かつ効率的な経路を計画します。このコンポーネントは、次の主要なタスクを実行します。 + +- 目標軌道の生成 +- 経路追従の計画 +- 障害物の回避 +- 安全性の評価 + +**設計** + +Behavior Planningコンポーネントは、以下のモジュールで構成されています。 -| Name | Type | Description | -| ----------------------------- | -------------------------------------------------- | ------------------------------------------------------- | -| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightArray` | status of traffic lights | -| `~/input/image` | `sensor_msgs::msg::Image` | the image captured by perception cameras | -| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | the ROIs detected by `traffic_light_fine_detector` | -| `~/input/rough/rois` (option) | `tier4_perception_msgs::msg::TrafficLightRoiArray` | the ROIs detected by `traffic_light_map_based_detector` | +- **Goal Planningモジュール:** 目標軌道の生成を担当します。 +- **Path Planningモジュール:** 経路追従の計画を担当します。 +- **Obstacle Avoidanceモジュール:** 障害物の回避を担当します。 +- **Safety Assessmentモジュール:** 安全性の評価を担当します。 -#### Output +**動作** -| Name | Type | Description | -| ---------------- | ------------------------- | ---------------------- | -| `~/output/image` | `sensor_msgs::msg::Image` | output image with ROIs | +Behavior Planningコンポーネントは、以下の順序で動作します。 -## Parameters +1. **目標軌道の生成:** Goal Planningモジュールは、自車位置と目標の位置に基づいて目標軌道を生成します。 +2. **経路追従の計画:** Path Planningモジュールは、目標軌道に従って、障害物や他の交通参加者を考慮した経路を計画します。 +3. **障害物の回避:** Obstacle Avoidanceモジュールは、経路上の障害物を検出し、それらを回避する経路変更を計画します。 +4. **安全性の評価:** Safety Assessmentモジュールは、計画された経路の安全性を評価し、速度逸脱量や加速度逸脱量が適切な範囲内であることを確認します。 + +**インターフェース** + +Behavior Planningコンポーネントは、他のAutowareコンポーネントと以下のインターフェースで通信します。 + +- **Perceptionモジュール:** 障害物や他の交通参加者に関する情報を提供します。 +- **Localizationモジュール:** 自車位置に関する情報を提供します。 +- **Controlモジュール:** 生成された経路を実行します。 + +**検証** + +Behavior Planningコンポーネントは、シミュレーションと実車テストの両方で検証されています。このコンポーネントは、さまざまな運転状況において、安全かつ効率的に動作することが実証されています。 + +**今後の改善** + +Behavior Planningコンポーネントは、継続的に改善されています。今後の改善には、次のようなものが含まれます。 + +- 計画の品質の向上 +- 計算効率の向上 +- 安全性に関する評価能力の向上 + +| Name | Type | Description | +| ------------------ | ---------------------------- | ----------------------- | +| `~/output/image` | `sensor_msgs::msg::Image` | ROI付き出力画像 | + +## パラメータ ### traffic_light_map_visualizer -None +なし ### traffic_light_roi_visualizer -#### Node Parameters +#### ノードパラメータ {{json_to_markdown("perception/autoware_traffic_light_visualization/schema/traffic_light_visualization.schema.json")}} -## Assumptions / Known limits +## 仮定/既知の制限 + +## (任意) エラー検知と処理 -## (Optional) Error detection and handling +## (任意) パフォーマンス特性 -## (Optional) Performance characterization +## (任意) 参照/外部リンク -## (Optional) References/External links +## (任意) 将来の拡張/未実装部分 -## (Optional) Future extensions / Unimplemented parts diff --git a/perception/perception_utils/README.md b/perception/perception_utils/README.md index 40545e1287881..65fe36bf65f62 100644 --- a/perception/perception_utils/README.md +++ b/perception/perception_utils/README.md @@ -1,5 +1,6 @@ # perception_utils -## Purpose +## 目的 + +このパッケージには、知覚モジュール全体で役立つ一般的な関数のライブラリが含まれています。 -This package contains a library of common functions that are useful across the perception module. diff --git a/planning/README.md b/planning/README.md index ccf8288df3911..226c317eac786 100644 --- a/planning/README.md +++ b/planning/README.md @@ -1,49 +1,51 @@ -# Planning Components +# Planning コンポーネント -## Getting Started +## 概要 -The Autoware.Universe Planning Modules represent a cutting-edge component within the broader open-source autonomous driving software stack. These modules play a pivotal role in autonomous vehicle navigation, skillfully handling route planning, dynamic obstacle avoidance, and real-time adaptation to varied traffic conditions. +Autoware.Universe Planning モジュールは、広範なオープンソース自動運転ソフトウェアスタックにおける最先端のコンポーネントです。これらのモジュールは自動車両のナビゲーションにおいて重要な役割を果たし、ルートプランニング、動的障害物回避、さまざまな交通状況へのリアルタイム適応を巧みに処理します。 -- For high level concept of Planning Components, please refer to [Planning Component Design Document](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/) -- To understand how Planning Components interacts with other components, please refer to [Planning Component Interface Document](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/planning/) -- The [Node Diagram](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/node-diagram/) illustrates the interactions, inputs, and outputs of all modules in the Autoware.Universe, including planning modules. +- Planning コンポーネントの高レベル概念については、[Planning コンポーネント設計ドキュメント](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/)を参照してください。 +- Planning コンポーネントが他のコンポーネントとどのように連携するかを理解するには、[Planning コンポーネントのインターフェイスドキュメント](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/planning/)を参照してください。 +- [ノードダイアグラム](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/node-diagram/)は、Planning モジュールを含む Autoware.Universe のすべてのモジュールの相互作用、入力、出力を図示しています。 -## Planning Module +## Planning モジュール -The **Module** in the Planning Component refers to the various components that collectively form the planning system of the software. These modules cover a range of functionalities necessary for autonomous vehicle planning. Autoware's planning modules are modularized, meaning users can customize which functions are enabled by changing the configuration. This modular design allows for flexibility and adaptability to different scenarios and requirements in autonomous vehicle operations. +Planning コンポーネントの **モジュール** は、ソフトウェアのプランニングシステムを共同で形成するさまざまなコンポーネントを指します。これらのモジュールは、自動車両のプランニングに必要なさまざまな機能をカバーしています。Autoware の Planning モジュールはモジュール化されており、ユーザーは構成を変更することでどの機能を有効にするかをカスタマイズできます。このモジュール設計により、自動車両での運用におけるさまざまなシナリオと要件に柔軟に適応できます。 -### How to Enable or Disable Planning Module +### Planning モジュールの有効化または無効化 -Enabling and disabling modules involves managing settings in key configuration and launch files. +モジュールの有効化と無効化には、キー構成ファイルと起動ファイルの設定を管理することが必要です。 -### Key Files for Configuration +### 構成のキーファイル -The `default_preset.yaml` file acts as the primary configuration file, where planning modules can be disable or enabled. Furthermore, users can also set the type of motion planner across various motion planners. For example: +`default_preset.yaml`ファイルはプライマリ構成ファイルとして機能し、そこで Planning モジュールを無効化または有効化できます。さらに、ユーザーはさまざまなモーションプランナー間でモーションプランナーの種類を設定することもできます。たとえば: -- `launch_avoidance_module`: Set to `true` to enable the avoidance module, or `false` to disable it. -- `motion_stop_planner_type`: Set `default` to either `obstacle_stop_planner` or `obstacle_cruise_planner`. +- `launch_avoidance_module`: Avoidance モジュールを有効にする場合は `true` に設定し、無効にする場合は `false` に設定します。 +- `motion\_stop\_planner\_type`: `default` を `obstacle\_stop\_planner` または `obstacle\_cruise\_planner` のいずれかに設定します。 !!! note - Click [here](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/preset/default_preset.yaml) to view the `default_preset.yaml`. + `default_preset.yaml` を表示するには [ここ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/preset/default_preset.yaml)をクリックします。 + +[起動ファイル](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving) は、`default_preset.yaml` で定義された設定を参照して、動作経路プランナーのノードが実行されているときに構成を適用します。 -The [launch files](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving) reference the settings defined in `default_preset.yaml` to apply the configurations when the behavior path planner's node is running. For instance, the parameter `avoidance.enable_module` in ```xml ``` -corresponds to launch_avoidance_module from `default_preset.yaml`. +launch_avoidance_module から `default_preset.yaml` に対応。 + +### パラメータ設定 -### Parameters configuration +設定可能なパラメータが数多く用意されており、ユーザーは [こちら](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning) で変更できます。すべてのモジュールが `rqt_reconfigure` を介して調整できるわけではないことに注意してください。変更を有効にするには、パラメータを変更してから Autoware を再起動します。さらに、各パラメータの詳細情報は、プランニングタブの下にある対応するドキュメントに記載されています。 -There are multiple parameters available for configuration, and users have the option to modify them in [here](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning). It's important to note that not all parameters are adjustable via `rqt_reconfigure`. To ensure the changes are effective, modify the parameters and then restart Autoware. Additionally, detailed information about each parameter is available in the corresponding documents under the planning tab. +### Autoware へのカスタムモジュールの統合: 段階的なガイド -### Integrating a Custom Module into Autoware: A Step-by-Step Guide +このガイドでは、カスタムモジュールを Autoware に統合する手順について説明します。 -This guide outlines the steps for integrating your custom module into Autoware: +- デフォルトパラメータ `default_preset.yaml` ファイルにモジュールを追加します。例: -- Add your modules to the `default_preset.yaml` file. For example ```yaml - arg: @@ -51,7 +53,8 @@ This guide outlines the steps for integrating your custom module into Autoware: default: "true" ``` -- Incorporate your modules into the [launcher](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning). For example in [behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml): +- モジュールを [launcher](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning) に統合します。例: [behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml) + ```xml @@ -63,53 +66,56 @@ This guide outlines the steps for integrating your custom module into Autoware: /> ``` -- If applicable, place your parameter folder within the appropriate existing parameter folder. For example [intersection_module's parameters](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml) is in [behavior_velocity_planner](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner). -- Insert the path of your parameters in the [tier4_planning_component.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/components/tier4_planning_component.launch.xml). For example `behavior_velocity_planner_intersection_module_param_path` is used. +- 適用可能な場合、パラメータフォルダを適切な既存のパラメータフォルダ内に配置します。たとえば、次のような[交差点モジュールのパラメータ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml)は[behavior_velocity_planner](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner)内にあります。 +- [tier4_planning_component.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/components/tier4_planning_component.launch.xml)に、パラメータのパスを挿入します。たとえば、次のような`behavior_velocity_planner_intersection_module_param_path`を使用します。 + ```xml ``` -- Define your parameter path variable within the corresponding launcher. For example in [behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/04aa54bf5fb0c88e70198ca74b9ac343cc3457bf/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml#L191) +- 対応するランチャー内でパラメータパスの変数を定義します。たとえば、[behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/04aa54bf5fb0c88e70198ca74b9ac343cc3457bf/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml#L191) + ```xml ``` -!!! note +!!! 注意 - Depending on the specific module you wish to add, the relevant files and steps may vary. This guide provides a general overview and serves as a starting point. It's important to adapt these instructions to the specifics of your module. + 追加したい特定のモジュールに応じて、関連ファイルと手順が異なる場合があります。このガイドは、一般的な概要を提供し、出発点として機能します。これらの手順をモジュールの詳細に合わせて調整することが重要です。 -## Join Our Community-Driven Effort +## コミュニティ主導の取り組みに参加する -Autoware thrives on community collaboration. Every contribution, big or small, is invaluable to us. Whether it's reporting bugs, suggesting improvements, offering new ideas, or anything else you can think of – we welcome it all with open arms. +Autoware はコミュニティコラボレーションを重視しています。大小を問わず、すべての貢献は私たちにとって貴重です。バグの報告、改善の提案、新しいアイデアの提供、その他考えられることなど、すべてを歓迎します。 -### How to Contribute? +### 貢献の仕方 -Ready to contribute? Great! To get started, simply visit our [Contributing Guidelines](https://autowarefoundation.github.io/autoware-documentation/main/contributing/) where you'll find all the information you need to jump in. This includes instructions on submitting bug reports, proposing feature enhancements, and even contributing to the codebase. +貢献する準備はできていますか?素晴らしい!まず、[貢献ガイドライン](https://autowarefoundation.github.io/autoware-documentation/main/contributing/) にアクセスして、参加に必要なすべての情報を入手してください。これには、バグレポートの提出、機能強化の提案、コードベースへの貢献に関する手順が含まれます。 -### Join Our Planning & Control Working Group Meetings +### Planning & Control ワーキンググループミーティングに参加する -The Planning & Control working group is an integral part of our community. We meet bi-weekly to discuss our current progress, upcoming challenges, and brainstorm new ideas. These meetings are a fantastic opportunity to directly contribute to our discussions and decision-making processes. +Planning & Control ワーキンググループは、コミュニティの不可欠な部分です。私たちは 2 週間ごとに会合して、現在の進捗状況、今後の課題について話し合い、新しいアイデアについてブレインストーミングを行います。これらのミーティングは、私たちの議論や意思決定プロセスに直接貢献する素晴らしい機会です。 -Meeting Details: +ミーティングの詳細: -- **Frequency:** Bi-weekly -- **Day:** Thursday -- **Time:** 08:00 AM UTC (05:00 PM JST) -- **Agenda:** Discuss current progress, plan future developments. You can view and comment on the minutes of past meetings [here](https://github.com/orgs/autowarefoundation/discussions?discussions_q=is%3Aopen+label%3Ameeting%3Aplanning-control-wg+). +- **頻度:** 2 週間ごと +- **曜日:** 木曜日 +- **時間:** 午前 8 時 UTC(午後 5 時 JST) +- **議題:** 現在の進捗状況を議論し、今後の開発を計画します。過去のミーティングの議事録は [こちら](https://github.com/orgs/autowarefoundation/discussions?discussions_q=is%3Aopen+label%3Ameeting%3Aplanning-control-wg+) で確認できます。 -Interested in joining our meetings? We’d love to have you! For more information on how to participate, visit the following link: [How to participate in the working group](https://github.com/autowarefoundation/autoware-projects/wiki/Autoware-Planning-Control-Working-Group#how-to-participate-in-the-working-group). +私たちのミーティングに参加することに興味がありますか?ぜひ参加してください!参加方法の詳細については、次のリンクをご覧ください。[ワーキンググループに参加する方法](https://github.com/autowarefoundation/autoware-projects/wiki/Autoware-Planning-Control-Working-Group#how-to-participate-in-the-working-group)。 -### Citations +### 引用 -Occasionally, we publish papers specific to the Planning Component in Autoware. We encourage you to explore these publications and find valuable insights for your work. If you find them useful and incorporate any of our methodologies or algorithms in your projects, citing our papers would be immensely helpful. This support allows us to reach a broader audience and continue contributing to the field. +時々、Autoware の Planning Component に特化した論文を公開しています。これらの出版物を閲覧し、あなたの仕事に役立つ貴重な洞察を得ることをお勧めします。それらが役に立ち、プロジェクトで私たちの方法論やアルゴリズムの一部を組み込んだ場合、私たちの論文を引用していただけると非常に助かります。このサポートにより、より広い視聴者にリーチし、この分野への貢献を続けることができます。 -If you use the Jerk Constrained Velocity Planning algorithm in [Motion Velocity Smoother](./autoware_velocity_smoother/README.md) module in the Planning Component, we kindly request you to cite the relevant paper. +Planning Component の [Motion Velocity Smoother](./autoware_velocity_smoother/README.md) モジュールでジャーク制約速度計画アルゴリズムを使用する場合は、関連する論文を引用していただけるようお願いします。 -Y. Shimizu, T. Horibe, F. Watanabe and S. Kato, "[Jerk Constrained Velocity Planning for an Autonomous Vehicle: Linear Programming Approach](https://arxiv.org/abs/2202.10029)," 2022 International Conference on Robotics and Automation (ICRA) +Y. 清水、T. 堀部、F. 渡辺、加藤正樹、"[自律移動体のジャーク制約速度計画: 線形計画法アプローチ](https://arxiv.org/abs/2202.10029)"、2022 年国際ロボット工学および自動化会議 (ICRA) + ```tex @inproceedings{shimizu2022, @@ -120,3 +126,4 @@ Y. Shimizu, T. Horibe, F. Watanabe and S. Kato, "[Jerk Constrained Velocity Plan pages={5814-5820}, doi={10.1109/ICRA46639.2022.9812155}} ``` + diff --git a/planning/autoware_costmap_generator/README.md b/planning/autoware_costmap_generator/README.md index cb298195a82a1..7fe4cde8107e2 100644 --- a/planning/autoware_costmap_generator/README.md +++ b/planning/autoware_costmap_generator/README.md @@ -2,60 +2,61 @@ ## costmap_generator_node -This node reads `PointCloud` and/or `DynamicObjectArray` and creates an `OccupancyGrid` and `GridMap`. `VectorMap(Lanelet2)` is optional. +このノードは`PointCloud`と/または`DynamicObjectArray`を読み込み、`OccupancyGrid`と`GridMap`を作成します。`VectorMap(Lanelet2)`はオプションです。 -### Input topics +### 入力トピック -| Name | Type | Description | -| ------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------- | -| `~input/objects` | autoware_perception_msgs::PredictedObjects | predicted objects, for obstacles areas | -| `~input/points_no_ground` | sensor_msgs::PointCloud2 | ground-removed points, for obstacle areas which can't be detected as objects | -| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | vector map, for drivable areas | -| `~input/scenario` | tier4_planning_msgs::Scenario | scenarios to be activated, for node activation | +| 名称 | タイプ | 説明 | +| --- | ---- | --- | +| `~input/objects` | `autoware_perception_msgs::PredictedObjects` | 障害物エリアの予測オブジェクト | +| `~input/points_no_ground` | `sensor_msgs::PointCloud2` | オブジェクトとして検出できない障害物エリアの地上除去ポイント | +| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | 走行可能エリアのベクターマップ | +| `~input/scenario` | `tier4_planning_msgs::Scenario` | ノードの有効化に使用するアクティブ化するシナリオ | -### Output topics +### 出力トピック -| Name | Type | Description | -| ------------------------ | ----------------------- | -------------------------------------------------- | -| `~output/grid_map` | grid_map_msgs::GridMap | costmap as GridMap, values are from 0.0 to 1.0 | -| `~output/occupancy_grid` | nav_msgs::OccupancyGrid | costmap as OccupancyGrid, values are from 0 to 100 | +| 名前 | タイプ | 説明 | +| ------------------------ | ----------------------- | ------------------------------------------------------- | +| `~output/grid_map` | grid_map_msgs::GridMap | costmapをGridMapとして表したもの、値の範囲は0.0から1.0 | +| `~output/occupancy_grid` | nav_msgs::OccupancyGrid | costmapをOccupancyGridとして表したもの、値の範囲は0から100 | -### Output TFs +### 出力 TF -None +なし -### How to launch +### 実行方法 -1. Execute the command `source install/setup.bash` to setup the environment +1. 環境をセットアップするには、コマンド `source install/setup.bash` を実行します。 -2. Run `ros2 launch costmap_generator costmap_generator.launch.xml` to launch the node +2. ノードを実行するには、`ros2 launch costmap_generator costmap_generator.launch.xml` を実行します。 -### Parameters +### パラメータ -| Name | Type | Description | -| ---------------------------- | ------ | ---------------------------------------------------------------------------------------------- | -| `update_rate` | double | timer's update rate | -| `activate_by_scenario` | bool | if true, activate by scenario = parking. Otherwise, activate if vehicle is inside parking lot. | -| `use_objects` | bool | whether using `~input/objects` or not | -| `use_points` | bool | whether using `~input/points_no_ground` or not | -| `use_wayarea` | bool | whether using `wayarea` from `~input/vector_map` or not | -| `use_parkinglot` | bool | whether using `parkinglot` from `~input/vector_map` or not | -| `costmap_frame` | string | created costmap's coordinate | -| `vehicle_frame` | string | vehicle's coordinate | -| `map_frame` | string | map's coordinate | -| `grid_min_value` | double | minimum cost for gridmap | -| `grid_max_value` | double | maximum cost for gridmap | -| `grid_resolution` | double | resolution for gridmap | -| `grid_length_x` | int | size of gridmap for x direction | -| `grid_length_y` | int | size of gridmap for y direction | -| `grid_position_x` | int | offset from coordinate in x direction | -| `grid_position_y` | int | offset from coordinate in y direction | -| `maximum_lidar_height_thres` | double | maximum height threshold for pointcloud data | -| `minimum_lidar_height_thres` | double | minimum height threshold for pointcloud data | -| `expand_rectangle_size` | double | expand object's rectangle with this value | -| `size_of_expansion_kernel` | int | kernel size for blurring effect on object's costmap | +| 名前 | タイプ | 説明 | +|---|---|---| +| `update_rate` | double | タイマーの更新レート | +| `activate_by_scenario` | bool | true の場合、シナリオ(パーキング)によってアクティブ化します。それ以外の場合は、車両がパーキングロット内にある場合にアクティブ化します。 | +| `use_objects` | bool | `~input/objects` を使用するかどうかのフラグ | +| `use_points` | bool | `~input/points_no_ground` を使用するかどうかのフラグ | +| `use_wayarea` | bool | `~input/vector_map` の `wayarea` を使用するかどうかのフラグ | +| `use_parkinglot` | bool | `~input/vector_map` の `parkinglot` を使用するかどうかのフラグ | +| `costmap_frame` | string | 作成された Costmap の座標系 | +| `vehicle_frame` | string | 車両の座標系 | +| `map_frame` | string | マップの座標系 | +| `grid_min_value` | double | Gridmap の最小コスト | +| `grid_max_value` | double | Gridmap の最大コスト | +| `grid_resolution` | double | Gridmap の解像度 | +| `grid_length_x` | int | Gridmap の x 方向のサイズ | +| `grid_length_y` | int | Gridmap の y 方向のサイズ | +| `grid_position_x` | int | 座標系から x 方向へのオフセット | +| `grid_position_y` | int | 座標系から y 方向へのオフセット | +| `maximum_lidar_height_thres` | double | 点群データの最大高さしきい値 | +| `minimum_lidar_height_thres` | double | 点群データの最小高さしきい値 | +| `expand_rectangle_size` | double | オブジェクトの矩形をこの値で拡大します | +| `size_of_expansion_kernel` | int | オブジェクトの Costmap に対するぼかし効果のカーネルサイズ | + +### フローチャート -### Flowchart ```plantuml @startuml @@ -90,3 +91,4 @@ endif stop @enduml ``` + diff --git a/planning/autoware_external_velocity_limit_selector/README.md b/planning/autoware_external_velocity_limit_selector/README.md index 92579bfd0abce..246c5c10386eb 100644 --- a/planning/autoware_external_velocity_limit_selector/README.md +++ b/planning/autoware_external_velocity_limit_selector/README.md @@ -1,113 +1,272 @@ -# External Velocity Limit Selector +## 外部速度制限セレクタ -## Purpose +## 目的 -The `external_velocity_limit_selector_node` is a node that keeps consistency of external velocity limits. This module subscribes +`external_velocity_limit_selector_node` は、外部速度制限の一貫性を保つノードです。このモジュールは、次のメッセージをサブスクライブします。 -1. velocity limit command sent by **API**, -2. velocity limit command sent by **Autoware internal modules**. +1. **API** が送信した速度制限コマンド +2. **Autoware 内部モジュール** が送信した速度制限コマンド -VelocityLimit.msg contains not only **max velocity** but also information about the **acceleration/jerk constraints** on deceleration. The `external_velocity_limit_selector_node` integrates the lowest velocity limit and the highest jerk constraint to calculate the **hardest velocity limit** that protects all the deceleration points and max velocities sent by API and Autoware internal modules. +VelocityLimit.msg には、**最大速度**だけでなく、減速時の **加速度/ジャーク制約** に関する情報も含まれます。`external_velocity_limit_selector_node` は、API と Autoware 内部モジュールから送信されたすべての減速ポイントと最大速度を保護する **最も厳しい速度制限** を計算するために、最も低い速度制限と最も高いジャーク制約を統合します。 -![selector algorithm](./image/external_velocity_limit_selector.png) +![セレクタアルゴリズム](./image/external_velocity_limit_selector.png) -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム WIP - -## Inputs +## 入力 +``` +#!cpp + // API から受信した速度制限 + VelocityLimit api_limit; -| Name | Type | Description | -| --------------------------------------------------- | ---------------------------------------------- | --------------------------------------------- | -| `~input/velocity_limit_from_api` | tier4_planning_msgs::VelocityLimit | velocity limit from api | -| `~input/velocity_limit_from_internal` | tier4_planning_msgs::VelocityLimit | velocity limit from autoware internal modules | -| `~input/velocity_limit_clear_command_from_internal` | tier4_planning_msgs::VelocityLimitClearCommand | velocity limit clear command | + // planner から受信した速度制限 + VelocityLimit planner_limit; -## Outputs + // current pose + geometry_msgs::PoseStamped current_pose; +``` -| Name | Type | Description | -| ---------------------- | ---------------------------------- | ------------------------------------------------- | -| `~output/max_velocity` | tier4_planning_msgs::VelocityLimit | current information of the hardest velocity limit | +| 名称 | タイプ | 説明 | +| ------------------------------------------------------ | ------------------------------------------------ | -------------------------------------------- | +| `~input/velocity_limit_from_api` | tier4_planning_msgs::VelocityLimit | APIからの速度制限 | +| `~input/velocity_limit_from_internal` | tier4_planning_msgs::VelocityLimit | Autoware内部モジュールからの速度制限 | +| `~input/velocity_limit_clear_command_from_internal` | tier4_planning_msgs::VelocityLimitClearCommand | Autoware内部モジュールからの速度制限クリアコマンド | -## Parameters +## 出力 -| Parameter | Type | Description | -| ----------------- | ------ | ------------------------------------------ | -| `max_velocity` | double | default max velocity [m/s] | -| `normal.min_acc` | double | minimum acceleration [m/ss] | -| `normal.max_acc` | double | maximum acceleration [m/ss] | -| `normal.min_jerk` | double | minimum jerk [m/sss] | -| `normal.max_jerk` | double | maximum jerk [m/sss] | -| `limit.min_acc` | double | minimum acceleration to be observed [m/ss] | -| `limit.max_acc` | double | maximum acceleration to be observed [m/ss] | -| `limit.min_jerk` | double | minimum jerk to be observed [m/sss] | -| `limit.max_jerk` | double | maximum jerk to be observed [m/sss] | +**Global Path Plan** +* グローバルパス計画 -## Assumptions / Known limits +**Local Trajectory Plan** +* ローカルトラジェクトリピュラン - -## (Optional) Error detection and handling +## (オプション) エラー検出と処理 - -## (Optional) Performance characterization +## (オプション) パフォーマンス特性 - -## (Optional) References/External links +## (オプション) 参考文献 / 外部リンク - -## (Optional) Future extensions / Unimplemented parts +## (オプション) 将来の拡張 / 未実装部分 - + diff --git a/planning/autoware_freespace_planner/README.md b/planning/autoware_freespace_planner/README.md index 56e096944e739..8a85745227350 100644 --- a/planning/autoware_freespace_planner/README.md +++ b/planning/autoware_freespace_planner/README.md @@ -1,106 +1,103 @@ -# The `autoware_freespace_planner` +## Autoware_freespace_planner ## freespace_planner_node -`freespace_planner_node` is a global path planner node that plans trajectory -in the space having static/dynamic obstacles. This node is currently based on -Hybrid A\* search algorithm in `freespace_planning_algorithms` package. -Other algorithms such as rrt\* will be also added and selectable in the future. +`freespace_planner_node`は、静的/動的障害物のある空間でトラジェクトリを計画するグローバルパスプランナノードです。このノードは現在、`freespace_planning_algorithms`パッケージのハイブリッドA\*検索アルゴリズムに基づいています。rrt\*などの他のアルゴリズムも追加され、将来的には選択可能になります。 -**Note** -Due to the constraint of trajectory following, the output trajectory will be split to include only the single direction path. -In other words, the output trajectory doesn't include both forward and backward trajectories at once. +**注意** +トラジェクトリ追従の制約により、出力トラジェクトリは単一方向のパスのみを含むように分割されます。つまり、出力トラジェクトリは前進と後進の両方のトラジェクトリを同時に含みません。 -### Input topics +### 入力トピック -| Name | Type | Description | -| ----------------------- | ----------------------------- | --------------------------------------------------------- | -| `~input/route` | autoware_planning_msgs::Route | route and goal pose | -| `~input/occupancy_grid` | nav_msgs::OccupancyGrid | costmap, for drivable areas | -| `~input/odometry` | nav_msgs::Odometry | vehicle velocity, for checking whether vehicle is stopped | -| `~input/scenario` | tier4_planning_msgs::Scenario | scenarios to be activated, for node activation | +| 名称 | タイプ | 説明 | +| ------------------------ | ----------------------------- | ---------------------------------------------------------- | +| `~input/route` | autoware_planning_msgs::Route | ルートとゴールポーズ | +| `~input/occupancy_grid` | nav_msgs::OccupancyGrid | 走行可能な領域のコストマップ | +| `~input/odometry` | nav_msgs::Odometry | 車両速度(車両の停止状態をチェックするために使用する) | +| `~input/scenario` | tier4_planning_msgs::Scenario | ノードをアクティベートするためのアクティベートするシナリオ | -### Output topics +### 出力トピック -| Name | Type | Description | +| 名称 | タイプ | 説明 | | -------------------- | ---------------------------------- | ------------------------------------------ | -| `~output/trajectory` | autoware_planning_msgs::Trajectory | trajectory to be followed | -| `is_completed` | bool (implemented as rosparam) | whether all split trajectory are published | +| `~output/trajectory` | autoware_planning_msgs::Trajectory | 追従する軌道 | +| `is_completed` | bool (rosパラメータとして実装) | すべての分割された軌道が公開されたかどうか | -### Output TFs +### 出力TF -None +なし -### How to launch +### 起動方法 -1. Write your remapping info in `freespace_planner.launch` or add args when executing `roslaunch` +1. `freespace_planner.launch` にリマッピング情報を書き込むか、`roslaunch` を実行するときに引数を追加します。 2. `roslaunch freespace_planner freespace_planner.launch` -### Parameters +### パラメータ {{json_to_markdown("planning/autoware_freespace_planner/schema/freespace_planner.schema.json")}} -#### Node parameters - -| Parameter | Type | Description | -| ---------------------------- | ------ | ------------------------------------------------------------------------------- | -| `planning_algorithms` | string | algorithms used in the node | -| `vehicle_shape_margin_m` | float | collision margin in planning algorithm | -| `update_rate` | double | timer's update rate | -| `waypoints_velocity` | double | velocity in output trajectory (currently, only constant velocity is supported) | -| `th_arrived_distance_m` | double | threshold distance to check if vehicle has arrived at the trajectory's endpoint | -| `th_stopped_time_sec` | double | threshold time to check if vehicle is stopped | -| `th_stopped_velocity_mps` | double | threshold velocity to check if vehicle is stopped | -| `th_course_out_distance_m` | double | threshold distance to check if vehicle is out of course | -| `th_obstacle_time_sec` | double | threshold time to check if obstacle is on the trajectory | -| `vehicle_shape_margin_m` | double | vehicle margin | -| `replan_when_obstacle_found` | bool | whether replanning when obstacle has found on the trajectory | -| `replan_when_course_out` | bool | whether replanning when vehicle is out of course | - -#### Planner common parameters - -| Parameter | Type | Description | -| ------------------------- | ------ | -------------------------------------------------- | -| `time_limit` | double | time limit of planning | -| `maximum_turning_ratio` | double | max ratio of actual turning range to use | -| `turning_steps` | double | number of turning steps within turning range | -| `theta_size` | double | the number of angle's discretization | -| `lateral_goal_range` | double | goal range of lateral position | -| `longitudinal_goal_range` | double | goal range of longitudinal position | -| `angle_goal_range` | double | goal range of angle | -| `curve_weight` | double | additional cost factor for curve actions | -| `reverse_weight` | double | additional cost factor for reverse actions | -| `direction_change_weight` | double | additional cost factor for switching direction | -| `obstacle_threshold` | double | threshold for regarding a certain grid as obstacle | - -#### A\* search parameters - -| Parameter | Type | Description | -| --------------------------- | ------ | ------------------------------------------------------- | -| `search_method` | string | method of searching, start to goal or vice versa | -| `only_behind_solutions` | bool | whether restricting the solutions to be behind the goal | -| `use_back` | bool | whether using backward trajectory | -| `adapt_expansion_distance` | bool | if true, adapt expansion distance based on environment | -| `expansion_distance` | double | length of expansion for node transitions | -| `near_goal_distance` | double | near goal distance threshold | -| `distance_heuristic_weight` | double | heuristic weight for estimating node's cost | -| `smoothness_weight` | double | cost factor for change in curvature | -| `obstacle_distance_weight` | double | cost factor for distance to obstacle | -| `goal_lat_distance_weight` | double | cost factor for lateral distance from goal | - -#### RRT\* search parameters +#### ノードパラメータ + +| パラメータ | 型 | 説明 | +| --------------------------------- | ------ | ------------------------------------------------------------------------------------------------ | +| `planning_algorithms` | 文字列 | ノードで使用されるアルゴリズム | +| `vehicle_shape_margin_m` | 浮動小数 | 計画アルゴリズムのコリジョンマージン | +| `update_rate` | 倍精度浮動小数 | タイマーの更新レート | +| `waypoints_velocity` | 倍精度浮動小数 | 出力軌道の速度(現時点では定速のみをサポート) | +| `th_arrived_distance_m` | 倍精度浮動小数 | 車両が軌道のエンドポイントに到着したかどうかをチェックするしきい値距離 | +| `th_stopped_time_sec` | 倍精度浮動小数 | 車両が停止しているかどうかをチェックするしきい値時間 | +| `th_stopped_velocity_mps` | 倍精度浮動小数 | 車両が停止しているかどうかをチェックするしきい値速度 | +| `th_course_out_distance_m` | 倍精度浮動小数 | 車両がコースから外れたかどうかをチェックするしきい値距離 | +| `th_obstacle_time_sec` | 倍精度浮動小数 | 障害物が軌道上にあるかどうかをチェックするしきい値時間 | +| `vehicle_shape_margin_m` | 倍精度浮動小数 | 車両マージン | +| `replan_when_obstacle_found` | ブール | 障害物が軌道上で見つかったときに再計画するかどうか | +| `replan_when_course_out` | ブール | 車両がコースから外れたときに再計画するかどうか | + +#### Planner の共通パラメータ + +| パラメータ | 種類 | 説明 | +| ------------------------- | ------ | ---------------------------------------------------- | +| `time_limit` | 数値 | Planning の時間制限 | +| `maximum_turning_ratio` | 数値 | 使用可能な実際の旋回範囲に対する最大比 | +| `turning_steps` | 数値 | 旋回範囲内の旋回ステップ数 | +| `theta_size` | 数値 | 角度の離散化の数 | +| `lateral_goal_range` | 数値 | 横位置の目標範囲 | +| `longitudinal_goal_range` | 数値 | 縦位置の目標範囲 | +| `angle_goal_range` | 数値 | 角度の目標範囲 | +| `curve_weight` | 数値 | 曲線操作に対する追加コスト係数 | +| `reverse_weight` | 数値 | バック動作に対する追加コスト係数 | +| `direction_change_weight` | 数値 | 方向変更に対する追加コスト係数 | +| `obstacle_threshold` | 数値 | 特定のグリッドを障害物と見なすための閾値 | + +#### A\* 探索パラメータ + +| パラメーター | タイプ | 説明 | +| -------------------------------- | ------ | ------------------------------------------------------------------- | +| `search_method` | 文字列 | 検索方法、スタートからゴールへまたはその逆方向 | +| `only_behind_solutions` | ブール | ソリューションをゴールの後ろに制限するかどうか | +| `use_back` | ブール | 後方軌道を使用するかどうか | +| `adapt_expansion_distance` | ブール | 環境に基づいて展開距離を適応する場合 | +| `expansion_distance` | double | ノード遷移の展開距離 | +| `near_goal_distance` | double | ゴール近傍距離のしきい値 | +| `distance_heuristic_weight` | double | ノードのコストを推定するためのヒューリスティック重み | +| `smoothness_weight` | double | 曲率の変化に対するコストファクター | +| `obstacle_distance_weight` | double | 障害物までの距離に対するコストファクター | +| `goal_lat_distance_weight` | double | ゴールからの横方向距離に対するコストファクター | + +#### RRT*探索パラメータ -| Parameter | Type | Description | -| ----------------------- | ------ | ----------------------------------------------------------------------------- | -| `max planning time` | double | maximum planning time [msec] (used only when `enable_update` is set `true`) | -| `enable_update` | bool | whether update after feasible solution found until `max_planning time` elapse | -| `use_informed_sampling` | bool | Use informed RRT\* (of Gammell et al.) | -| `neighbor_radius` | double | neighbor radius of RRT\* algorithm | -| `margin` | double | safety margin ensured in path's collision checking in RRT\* algorithm | +| パラメーター | 型 | 説明 | +| ------------------------ | ------ | ---------------------------------------------------------------------------- | +| `max planning time` | double | 最大計画時間 [msec] (`enable_update` が `true` の場合にのみ使用) | +| `enable_update` | bool | `max_planning time` が経過するまで実現可能なソリューションが見つかった後の更新の有無 | +| `use_informed_sampling` | bool | Informed RRT\*(Gammell et al.)の使用 | +| `neighbor_radius` | double | RRT\*アルゴリズムの近傍半径 | +| `margin` | double | RRT\*アルゴリズムにおけるパスの衝突チェックで確保される安全マージン | + +### フローチャート -### Flowchart ```plantuml @startuml @@ -140,3 +137,4 @@ endif stop @enduml ``` + diff --git a/planning/autoware_freespace_planning_algorithms/README.md b/planning/autoware_freespace_planning_algorithms/README.md index c5ea6b3df8183..7aa1f5e696797 100644 --- a/planning/autoware_freespace_planning_algorithms/README.md +++ b/planning/autoware_freespace_planning_algorithms/README.md @@ -1,101 +1,90 @@ -# freespace planning algorithms +# フリースペースのパスプランニングアルゴリズム -## Role +## 役割 -This package is for development of path planning algorithms in free space. +このパッケージはフリースペースにおけるパスプランニングアルゴリズムの開発用です。 -### Implemented algorithms +### 実装されたアルゴリズム -- Hybrid A\* and RRT\* (includes RRT and informed RRT\*) +- Hybrid A\*とRRT\*(RRTとinformed RRT\*を含む) -Please see [rrtstar.md](rrtstar.md) for a note on the implementation for informed-RRT\*. +informed-RRT\*の実装に関する詳細は、[rrtstar.md](rrtstar.md)を参照してください。 -NOTE: As for RRT\*, one can choose whether update after feasible solution found in RRT\*. -If not doing so, the algorithm is the almost (but exactly because of rewiring procedure) same as vanilla RRT. -If you choose update, then you have option if the sampling after feasible solution found is "informed". -If set true, then the algorithm is equivalent to `informed RRT\* of Gammell et al. 2014`. +注: RRT\*については、RRT\*で実行可能な解が見つかった後に更新するかどうかを選択できます。 +そうしない場合、アルゴリズムはバニラRRTと同じになります(リワイヤリング手順は違います)。 +更新する場合は、実行可能な解が見つかった後のサンプリングが「informed」であるかどうかを選択できます。 +これを真に設定すると、アルゴリズムは「2014年のGammellらによるinformed RRT\*」と同じになります。 -## Algorithm selection +## アルゴリズムの選択 -There is a trade-off between algorithm speed and resulting solution quality. -When we sort the algorithms by the spectrum of (high quality solution/ slow) -> (low quality solution / fast) it would be -A\* -> informed RRT\* -> RRT. Note that in almost all case informed RRT\* is -better than RRT\* for solution quality given the same computational time budget. So, RRT\* is omitted in the comparison. +アルゴリズムの速度と結果の解の品質にはトレードオフがあります。 +アルゴリズムを(高品質解/低速)から(低品質解/高速)の範囲で並べると、次のようになります。 +A\* -> informed RRT\* -> RRT。ほとんどの場合において、informed RRT\*は、同じ計算時間バジェットでRRT\*よりも解の品質が優れています。そのため、RRT\*は比較で省略されています。 -Some selection criteria would be: +選択基準は次のとおりです。 -- If obstacle geometry is complex: -> avoid RRT and RRT\*. The resulting path could be too messy. -- If goal location is far from the start: -> avoid A\*. Take too long time because it based on grid discretization. +- 障害物の形状が複雑な場合: -> RRTとRRT\*を回避します。結果のパスが乱雑になる可能性があります。 +- 目標位置がスタートから遠い場合: -> A\*を回避します。グリッドの離散化に基づいているため、時間がかかりすぎます。 -## Guide to implement a new algorithm +## 新規アルゴリズムの実装ガイド -- All planning algorithm class in this package must inherit `AbstractPlanningAlgorithm` - class. If necessary, please overwrite the virtual functions. -- All algorithms must use `nav_msgs::OccupancyGrid`-typed costmap. - Thus, `AbstractPlanningAlgorithm` class mainly implements the collision checking - using the costmap, grid-based indexing, and coordinate transformation related to - costmap. -- All algorithms must take both `PlannerCommonParam`-typed and algorithm-specific- - type structs as inputs of the constructor. For example, `AstarSearch` class's - constructor takes both `PlannerCommonParam` and `AstarParam`. +- このパッケージ内のすべてのプランニングアルゴリズムクラスは、`AbstractPlanningAlgorithm`クラスを継承する必要があります。必要に応じて、仮想関数をオーバーライドしてください。 +- すべてのアルゴリズムは`nav_msgs::OccupancyGrid`タイプのコストマップを使用する必要があります。 +したがって、`AbstractPlanningAlgorithm`クラスは主に、コストマップを使用した衝突チェック、グリッドベースのインデックス作成、コストマップに関連する座標変換を実装します。 +- すべてのアルゴリズムは、`PlannerCommonParam`タイプの構造とアルゴリズム固有タイプの構造の両方をコンストラクタの入力として受け取る必要があります。たとえば、`AstarSearch`クラスのコンストラクタは、`PlannerCommonParam`と`AstarParam`の両方を受け取ります。 -## Running the standalone tests and visualization +## スタンドアロンテストと可視化の実行 + +パッケージをros-testでビルドし、テストを実行します。 -Building the package with ros-test and run tests: ```sh colcon build --packages-select autoware_freespace_planning_algorithms colcon test --packages-select autoware_freespace_planning_algorithms ``` - - +テストでは、シミュレーション結果は `/tmp/fpalgos-{アルゴリズムタイプ}-case{シナリオ番号}` に Rosbag として格納されます。 +[test/debug_plot.py](test/debug_plot.py) を使用してこれらの結果ファイルをロードすることで、以下に示す図のように、経路と障害物を視覚化するプロットを作成できます。作成された図は `/tmp` に再度保存されます。 -Inside the test, simulation results are stored in `/tmp/fpalgos-{algorithm_type}-case{scenario_number}` as a rosbag. -Loading these resulting files, by using [test/debug_plot.py](test/debug_plot.py), -one can create plots visualizing the path and obstacles as shown -in the figures below. The created figures are then again saved in `/tmp`. +### A\* (単曲率ケース) -### A\* (single curvature case) +![サンプル出力図](figs/summary-astar_single.png) -![sample output figure](figs/summary-astar_single.png) +### 200msec の時間予算のある情報ベース RRT\* -### informed RRT\* with 200 msec time budget +![サンプル出力図](figs/summary-rrtstar_informed_update.png) -![sample output figure](figs/summary-rrtstar_informed_update.png) +### 更新のない RRT\* (RRT とほぼ同じ) -### RRT\* without update (almost same as RRT) +![サンプル出力図](figs/summary-rrtstar_fastest.png) -![sample output figure](figs/summary-rrtstar_fastest.png) +それぞれ、黒いセル、緑色のボックス、赤色のボックスは、障害物、開始コンフィギュレーション、目標コンフィギュレーションを示しています。 +青いボックスのシーケンスはソリューションパスを示しています。 -The black cells, green box, and red box, respectively, indicate obstacles, -start configuration, and goal configuration. -The sequence of the blue boxes indicate the solution path. +## Python モジュールへの拡張(A\* のみサポート) -## Extension to Python module (only A\* supported) +Python モジュールへの拡張の実装があります。 +以下を設定することで、Python 経由で A\* 検索を試すことができます: -There is an implementation of the extension to the python module. -You can try A\* search via Python by setting follows: +- パラメーター +- コストマップ +- 自車位置 +- ゴール位置 -- parameters, -- costmap, -- start pose, -- goal pose. +すると、次のものを入手できます: -Then, you can get +- 成功または失敗 +- 探索された軌跡 -- success or failure, -- searched trajectory. +サンプルコードは [scripts/example/example.py](scripts/example/example.py) です。 +このパッケージを事前にビルドして、セットアップシェルのスクリプトをソースする必要があることに注意してください。 -The example code is [scripts/example/example.py](scripts/example/example.py). -Note that you need to build this package and source the setup shell script in advance. +## ライセンスの通知 -## License notice +ファイル `src/reeds_shepp.cpp` および `include/astar_search/reeds_shepp.h` +は [pyReedsShepp](https://github.com/ghliu/pyReedsShepp) から取得されています。 +`pyReedsShepp` の実装も [ompl](https://github.com/ompl/ompl) のコードを大いに基にしていることに注意してください。 +`pyReedsShepp` と `ompl` はどちらも 3 項 BSD ライセンスで配布されています。 -Files `src/reeds_shepp.cpp` and `include/astar_search/reeds_shepp.h` -are fetched from [pyReedsShepp](https://github.com/ghliu/pyReedsShepp). -Note that the implementation in `pyReedsShepp` is also heavily based on -the code in [ompl](https://github.com/ompl/ompl). -Both `pyReedsShepp` and `ompl` are distributed under 3-clause BSD license. diff --git a/planning/autoware_mission_planner/README.md b/planning/autoware_mission_planner/README.md index b5993d0106add..603cbf70f88ae 100644 --- a/planning/autoware_mission_planner/README.md +++ b/planning/autoware_mission_planner/README.md @@ -1,102 +1,134 @@ -# Mission Planner +# ミッションプランナー -## Purpose +## 目的 -`Mission Planner` calculates a route that navigates from the current ego pose to the goal pose following the given check points. -The route is made of a sequence of lanes on a static map. -Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning. -Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given. +`Mission Planner` は、所与のチェックポイントにしたがって目標位置まで自車位置から移動するための経路を算出します。 +経路は、静的な地図上の車線のシーケンスで構成されています。 +動的な物体(歩行者や他の車両など)や動的な地図情報(一部の車線を塞ぐ道路工事など)は、経路計画時に考慮されません。 +したがって、出力トピックは、目標位置またはチェックポイントが与えられた場合にのみ発行され、新しい目標位置またはチェックポイントが与えられるまでラッチされます。 -The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. -In current Autoware.universe, only the plugin for Lanelet2 map format is supported. +コア実装は、地図フォーマットに依存しません。任意の計画アルゴリズムをプラグインモジュールとして追加できます。 +現在の Autoware.universe では、Lanelet2 地図フォーマットのプラグインのみがサポートされています。 -This package also manages routes for MRM. The `route_selector` node duplicates the `mission_planner` interface and provides it for normal and MRM respectively. -It distributes route requests and planning results according to current MRM operation state. +このパッケージは、MRM のルートも管理します。 `route_selector` ノードは `mission_planner` インターフェイスを複製し、通常の MRM と MRM のそれぞれに提供します。 +現在の MRM 操作ステータスに応じて、経路要求と計画結果を配信します。 ![architecture](./media/architecture.drawio.svg) -## Interfaces - -### Parameters - -| Name | Type | Description | -| ---------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------- | -| `map_frame` | string | The frame name for map | -| `arrival_check_angle_deg` | double | Angle threshold for goal check | -| `arrival_check_distance` | double | Distance threshold for goal check | -| `arrival_check_duration` | double | Duration threshold for goal check | -| `goal_angle_threshold` | double | Max goal pose angle for goal approve | -| `enable_correct_goal_pose` | bool | Enabling correction of goal pose according to the closest lanelet orientation | -| `reroute_time_threshold` | double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible | -| `minimum_reroute_length` | double | Minimum Length for publishing a new route | -| `consider_no_drivable_lanes` | bool | This flag is for considering no_drivable_lanes in planning or not. | -| `allow_reroute_in_autonomous_mode` | bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed | - -### Services - -| Name | Type | Description | -| ------------------------------------------------------------------- | ---------------------------------------- | ------------------------------------------ | -| `/planning/mission_planning/mission_planner/clear_route` | tier4_planning_msgs/srv/ClearRoute | route clear request | -| `/planning/mission_planning/mission_planner/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. | -| `/planning/mission_planning/mission_planner/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. | -| `/planning/mission_planning/route_selector/main/clear_route` | tier4_planning_msgs/srv/ClearRoute | main route clear request | -| `/planning/mission_planning/route_selector/main/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | main route request with lanelet waypoints. | -| `/planning/mission_planning/route_selector/main/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | main route request with pose waypoints. | -| `/planning/mission_planning/route_selector/mrm/clear_route` | tier4_planning_msgs/srv/ClearRoute | mrm route clear request | -| `/planning/mission_planning/route_selector/mrm/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | mrm route request with lanelet waypoints. | -| `/planning/mission_planning/route_selector/mrm/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | mrm route request with pose waypoints. | - -### Subscriptions - -| Name | Type | Description | +## インターフェイス + +### パラメーター + +| 名称 | 型 | 説明 | +| ---------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `map_frame` | 文字列 | マップのフレーム名 | +| `arrival_check_angle_deg` | double | ゴール点検の角度閾値 | +| `arrival_check_distance` | double | ゴール点検の距離閾値 | +| `arrival_check_duration` | double | ゴール点検の期間閾値 | +| `goal_angle_threshold` | double | ゴールの承認のための目標ポーズの最大角度 | +| `enable_correct_goal_pose` | ブーリアン | 最も近いレーンレットの向きに従ってゴールポーズを修正するかどうか | +| `reroute_time_threshold` | double | 現在速度での経路変更ポイントまでの時間がこの閾値よりも大きい場合、経路変更が可能となる | +| `minimum_reroute_length` | double | 新しい経路を発行するための最小長 | +| `consider_no_drivable_lanes` | ブーリアン | 計画に走行不可のレーンレットを考慮するかどうかのフラグ | +| `allow_reroute_in_autonomous_mode` | ブーリアン | 自律運転モードでの経路変更を許可するフラグ。falseの場合は経路変更は失敗し、trueの場合は安全な経路変更のみが許可される | + +### サービス + +- **Planning (生成器)** + - 経路生成 + - 自車位置予測 + - 障害物予測 +- **Sensor Fusion (センサーフュージョン)** + - センサーデータの融合 + - オプティカルフローによる自車位置推定 +- **ObjDet (物体検出)** + - 前方および周囲の物体検出 + - 2D/3D物体検出 +- **CanBus (CANバス)** + - 車両ステータスの読み書き + - ステアリング角と速度制御 +- **ROS通信 (ROS通信)** + - 他のAutowareノードとの通信 +- **Localization (局在化)** + - IMU/GNSS/カメラによる自車位置推定 + - SLAMによるマップ構築と局在化 + +| Name | Type | Description | +| ------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------------------- | +| `/planning/mission_planning/mission_planner/clear_route` | tier4_planning_msgs/srv/ClearRoute | ルートクリア要求 | +| `/planning/mission_planning/mission_planner/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うルート要求 | +| `/planning/mission_planning/mission_planner/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うルート要求 | +| `/planning/mission_planning/route_selector/main/clear_route` | tier4_planning_msgs/srv/ClearRoute | メインルートクリア要求 | +| `/planning/mission_planning/route_selector/main/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うメインルート要求 | +| `/planning/mission_planning/route_selector/main/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うメインルート要求 | +| `/planning/mission_planning/route_selector/mrm/clear_route` | tier4_planning_msgs/srv/ClearRoute | MRMルートクリア要求 | +| `/planning/mission_planning/route_selector/mrm/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うMRMルート要求 | +| `/planning/mission_planning/route_selector/mrm/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うMRMルート要求 | + +### サブスクリプション + +- `/current_pose` : ドライブ中に更新される`自車位置` +- `/planning/local_path` : Autoware Planningが計算した局所パス +- `/control/curvature` : Autoware Controlが計算した曲率 +- `/control/acceleration` : Autoware Controlが計算した加速度 +- `/control/deceleration` : Autoware Controlが計算した減速度 +- `/control/jerk` : Autoware Controlが計算したジャーク +- `/control/steering_angle` : Autoware Controlが計算した操舵角 +- `/carla/ego_vehicle/odometry` : CARLAエミュレータによって提供されるオドメトリデータ +- `/carla/ego_vehicle/sensor/camera/rgb/front/image` : CARLAエミュレータによって提供されるフロントRGBカメラの画像 +- `/carla/ego_vehicle/sensor/lidar/top/front/point_cloud` : CARLAエミュレータによって提供されるフロントLiDARの点群 + +| 名前 | 種類 | 説明 | | ---------------------------- | ----------------------------------------- | ---------------------- | -| `input/vector_map` | autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 | -| `input/modified_goal` | geometry_msgs/PoseWithUuidStamped | modified goal pose | -| `input/operation_mode_state` | autoware_adapi_v1_msgs/OperationModeState | operation mode state | +| `input/vector_map` | autoware_map_msgs/msg/LaneletMapBin | Lanelet2のベクトルマップ | +| `input/modified_goal` | geometry_msgs/PoseWithUuidStamped | 修正されたゴールの姿勢 | +| `input/operation_mode_state` | autoware_adapi_v1_msgs/OperationModeState | 操作モードの状態 | -### Publications +### 資料 -| Name | Type | Description | -| ------------------------------------------------------ | ----------------------------------- | ------------------------ | -| `/planning/mission_planning/state` | tier4_planning_msgs/msg/RouteState | route state | -| `/planning/mission_planning/route` | autoware_planning_msgs/LaneletRoute | route | -| `/planning/mission_planning/route_selector/main/state` | tier4_planning_msgs/msg/RouteState | main route state | -| `/planning/mission_planning/route_selector/main/route` | autoware_planning_msgs/LaneletRoute | main route | -| `/planning/mission_planning/route_selector/mrm/state` | tier4_planning_msgs/msg/RouteState | mrm route state | -| `/planning/mission_planning/route_selector/mrm/route` | autoware_planning_msgs/LaneletRoute | mrm route | -| `~/debug/route_marker` | visualization_msgs/msg/MarkerArray | route marker for debug | -| `~/debug/goal_footprint` | visualization_msgs/msg/MarkerArray | goal footprint for debug | +- [Autoware tutorial: Introduction](https://arxiv.org/abs/2002.07901) +- [Open Robotics: Autoware.Auto](https://arxiv.org/abs/2204.09611) +- [Experimental validation of the Autoware.Auto planning module in simulated scenarios](https://arxiv.org/abs/2204.10510) -## Route section +| 名称 | タイプ | 説明 | +| ------------------------------------------------------ | ----------------------------------- | ------------------------------------------------ | +| `/planning/mission_planning/state` | tier4_planning_msgs/msg/RouteState | ルートの状態 | +| `/planning/mission_planning/route` | autoware_planning_msgs/LaneletRoute | ルート | +| `/planning/mission_planning/route_selector/main/state` | tier4_planning_msgs/msg/RouteState | メインルートの状態 | +| `/planning/mission_planning/route_selector/main/route` | autoware_planning_msgs/LaneletRoute | メインルート | +| `/planning/mission_planning/route_selector/mrm/state` | tier4_planning_msgs/msg/RouteState | MRMルートの状態 | +| `/planning/mission_planning/route_selector/mrm/route` | autoware_planning_msgs/LaneletRoute | MRMルート | +| `~/debug/route_marker` | visualization_msgs/msg/MarkerArray | デバッグ用のルートマーカー | +| `~/debug/goal_footprint` | visualization_msgs/msg/MarkerArray | デバッグ用の目標フットプリント | + +## ルートセクション ![route_sections](./media/route_sections.svg) -Route section, whose type is `autoware_planning_msgs/LaneletSegment`, is a "slice" of a road that bundles lane changeable lanes. -Note that the most atomic unit of route is `autoware_planning_msgs/LaneletPrimitive`, which has the unique id of a lane in a vector map and its type. -Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure. +タイプが `autoware_planning_msgs/LaneletSegment` のルートセクションは、レーンを変更可能な複数のレーンをまとめた道路の「スライス」です。ルートの最小単位は `autoware_planning_msgs/LaneletPrimitive` であることに注意してください。この単位は、ベクターマップ内のレーンの固有 ID とそのタイプを持ちます。したがって、ルートメッセージにはレーンの幾何学的情報を含みません。これは、Planningモジュールのメッセージがマップデータ構造に依存しないようにするためです。 -The ROS message of route section contains following three elements for each route section. +ルートセクションの ROS メッセージには、各ルートセクションに対して次の 3 つの要素が含まれます。 -- `preferred_primitive`: Preferred lane to follow towards the goal. -- `primitives`: All neighbor lanes in the same direction including the preferred lane. +- `preferred_primitive`: 目標に向かう車線の追従優先レーン。 +- `primitives`: 優先レーンを含む同じ方向のすべての近接レーン。 -## Goal Validation +## ゴール検証 -The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose' yaw is greater than `goal_angle_threshold` parameter, the goal is rejected. -Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected. +Mission Planner は、与えられたゴールポーズを検証してルートを作成するための制御メカニズムを備えています。ゴールポーズのレーンのゴールポーズ角度とゴールポーズのヨーが `goal_angle_threshold` パラメータより大きい場合、ゴールは拒否されます。もう 1 つの制御メカニズムは、車両の寸法に基づいてゴールポーズのフットプリントを作成し、このフットプリントがレーンの内側にあるかどうかを確認することです。ゴールのフットプリントがレーンを超えると、ゴールは拒否されます。 -At the image below, there are sample goal pose validation cases. +次の画像は、ゴールポーズ検証のサンプルケースです。 ![goal_footprints](./media/goal_footprints.svg) -## Implementation +## 実装 ### Mission Planner -Two callbacks (goal and check points) are a trigger for route planning. -Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback. +2 つのコールバック(ゴールとチェックポイント)がルートプランニングのトリガーです。 +レーンのルートを計画するルーティンググラフは、それらのコールバックの前に作成する必要があり、このルーティンググラフはベクターマップコールバックで作成されます。 + +`plan route` の詳細については、次のセクションで説明します。 -`plan route` is explained in detail in the following section. ```plantuml @startuml @@ -120,9 +152,10 @@ stop @enduml ``` -### Route Planner +### ルートプランナー + +`plan route`は、自車位置と目標位置を含むチェックポイントで実行されます。 -`plan route` is executed with check points including current ego pose and goal pose. ```plantuml @startuml @@ -153,54 +186,55 @@ stop @enduml ``` -`plan path between each check points` firstly calculates closest lanes to start and goal pose. -Then routing graph of Lanelet2 plans the shortest path from start and goal pose. +`各チェックポイント間のパスを計画` はまず、スタートとゴールの自車位置に最も近い車線を計算します。 +次に、Lanelet2 のルーティンググラフがスタートとゴールの自車位置から最短経路を計画します。 -`initialize route lanelets` initializes route handler, and calculates `route_lanelets`. -`route_lanelets`, all of which will be registered in route sections, are lanelets next to the lanelets in the planned path, and used when planning lane change. -To calculate `route_lanelets`, +`ルート車線を初期化` はルートハンドラーを初期化し、`route_lanelets` を計算します。 +`route_lanelets` はすべてルートセクションに登録され、車線変更を計画するときに使用される、計画されたパスの車線に隣接する車線です。 +`route_lanelets` を計算するには、 -1. All the neighbor (right and left) lanes for the planned path which is lane-changeable is memorized as `route_lanelets`. -2. All the neighbor (right and left) lanes for the planned path which is not lane-changeable is memorized as `candidate_lanelets`. -3. If the following and previous lanelets of each `candidate_lanelets` are `route_lanelets`, the `candidate_lanelet` is registered as `route_lanelets` - - This is because even though `candidate_lanelet` (an adjacent lane) is not lane-changeable, we can pass the `candidate_lanelet` without lane change if the following and previous lanelets of the `candidate_lanelet` are `route_lanelets` +1. 車線変更可能な計画されたパスに対するすべての隣接車線 (右と左) が `route_lanelets` として記憶されます。 +2. 車線変更できない計画されたパスに対するすべての隣接車線 (右と左) が `candidate_lanelets` として記憶されます。 +3. 各 `candidate_lanelets` の前後車線が `route_lanelets` である場合、`candidate_lanelet` は `route_lanelets` として登録されます。 + - これは、`candidate_lanelet` (隣接車線) が車線変更できない場合でも、`candidate_lanelet` の前後車線が `route_lanelets` であれば車線変更せずに `candidate_lanelet` を通過できるためです。 -`get preferred lanelets` extracts `preferred_primitive` from `route_lanelets` with the route handler. +`優先車線を取得` はルートハンドラーを使用して `route_lanelets` から `preferred_primitive` を抽出します。 -`create route sections` extracts `primitives` from `route_lanelets` for each route section with the route handler, and creates route sections. +`ルートセクションの作成` はルートハンドラーを使用して各ルートセクションの `route_lanelets` から `primitives` を抽出し、ルートセクションを作成します。 -### Rerouting +### 再ルーティング -Reroute here means changing the route while driving. Unlike route setting, it is required to keep a certain distance from vehicle to the point where the route is changed. -If the ego vehicle is not on autonomous driving state, the safety checking process will be skipped. +ここで再ルーティングとは、走行中にルートを変更することを意味します。ルートの設定とは異なり、車両からルート変更地点までの一定の距離を維持する必要があります。 +自車が自動運転状態ではない場合、安全確認プロセスはスキップされます。 ![rerouting_safety](./media/rerouting_safety.svg) -And there are three use cases that require reroute. +そして、再ルーティングが必要となるユースケースは 3 つあります。 + +- ルート変更 API +- 緊急ルート +- ゴール変更 -- Route change API -- Emergency route -- Goal modification +#### ルート変更 API -#### Route change API +走行中に目的地を変更したり、分岐ループルートを走行したりするときに使用されます。車両が MRM ルートで走行している場合、このインターフェイスによる通常の再ルーティングは許可されません。 -It is used when changing the destination while driving or when driving a divided loop route. When the vehicle is driving on a MRM route, normal rerouting by this interface is not allowed. +#### 緊急ルート -#### Emergency route +MRM が路肩に停車するためのインターフェイスです。できるだけ早く停止する必要があるため、再ルーティングが必要です。MRM ルートは通常ルートよりも優先されます。また、MRM ルートがクリアされた場合は、再ルーティング安全確認でも通常ルートに戻ろうとします。 -The interface for the MRM that pulls over the road shoulder. It has to be stopped as soon as possible, so a reroute is required. The MRM route has priority over the normal route. And if MRM route is cleared, try to return to the normal route also with a rerouting safety check. +##### ゴール変更 -##### Goal modification +これは、プランニングコンポーネントによる停車、駐車車両の回避などのためのゴール変更です。修正されたゴールが計算されたルートの外にある場合、再ルーティングが必要です。このゴール変更は、車両が実際に目的地に近づくと、周辺環境とパスの安全性を確認して実行されます。また、この変更は通常ルートと mrm ルートの両方に対して許可されます。 +ここで生成された新しいルートは AD API に送信されるため、アプリケーションからも参照できます。ただし、ここでの仕様は今後変更される可能性があることに注意してください。 -This is a goal change to pull over, avoid parked vehicles, and so on by a planning component. If the modified goal is outside the calculated route, a reroute is required. This goal modification is executed by checking the local environment and path safety as the vehicle actually approaches the destination. And this modification is allowed for both normal_route and mrm_route. -The new route generated here is sent to the AD API so that it can also be referenced by the application. Note, however, that the specifications here are subject to change in the future. +#### 再ルーティングの制約 -#### Rerouting Limitations +- 再ルーティングの安全判断は、軌跡または制御のレベルでは保証されません。したがって、安全のために再ルーティング変更までの距離は十分に長くなければなりません。 +- `modified_goal` の有効性は、それが誤った車線に配置されていない、安全に再ルーティングできるなど、behavior_path_planner によって保証される必要があります。 -- The safety judgment of rerouting is not guaranteed to the level of trajectory or control. Therefore, the distance to the reroute change must be large for the safety. -- The validity of the `modified_goal` needs to be guaranteed by the behavior_path_planner, e.g., that it is not placed in the wrong lane, that it can be safely rerouted, etc. +## 制限 -## Limitations +- 動的オブジェクト (例: 歩行者や他の車両) や動的マップ情報 (例: 一部の車線を塞ぐ道路工事) はルート計画中に考慮されません。 +- ループルートはサポートされていません。 -- Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning. -- Looped route is not supported. diff --git a/planning/autoware_objects_of_interest_marker_interface/README.md b/planning/autoware_objects_of_interest_marker_interface/README.md index 636e4fde32ca2..cdef375f76126 100644 --- a/planning/autoware_objects_of_interest_marker_interface/README.md +++ b/planning/autoware_objects_of_interest_marker_interface/README.md @@ -2,14 +2,15 @@ !!! warning - Under Construction + 計画中 -## Purpose +## 目的 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -## Inputs / Outputs +## 入力 / 出力 -## Assumptions / Known limits +## 仮定 / わかっている制限事項 + +## 将来の拡張 / 未実装の部分 -## Future extensions / Unimplemented parts diff --git a/planning/autoware_obstacle_cruise_planner/README.md b/planning/autoware_obstacle_cruise_planner/README.md index 1cb8128110e7c..e54a7383750b8 100644 --- a/planning/autoware_obstacle_cruise_planner/README.md +++ b/planning/autoware_obstacle_cruise_planner/README.md @@ -1,46 +1,47 @@ -# Obstacle Cruise Planner +# 障害物巡航プランナー -## Overview +## 概要 -The `autoware_obstacle_cruise_planner` package has following modules. +`autoware_obstacle_cruise_planner` パッケージには、以下のモジュールが含まれています。 -- Stop planning - - stop when there is a static obstacle near the trajectory. -- Cruise planning - - cruise a dynamic obstacle in front of the ego. -- Slow down planning - - slow down when there is a static/dynamic obstacle near the trajectory. +- 停止プランニング + - 進行経路の近くに静止した障害物がある場合に停止します。 +- 巡航プランニング + - 自車の前にある動的な障害物を巡航します。 +- 減速プランニング + - 進行経路の近くに静止した障害物や動的な障害物がある場合に減速します。 -## Interfaces +## インターフェース -### Input topics +### 入力トピック -| Name | Type | Description | -| -------------------- | ------------------------------------------ | ---------------- | -| `~/input/trajectory` | autoware_planning_msgs::Trajectory | input trajectory | -| `~/input/objects` | autoware_perception_msgs::PredictedObjects | dynamic objects | -| `~/input/odometry` | nav_msgs::msg::Odometry | ego odometry | +| 名称 | 種類 | 説明 | +| -------------------- | ------------------------------------------ | -------------------------------------- | +| `~/input/trajectory` | `autoware_planning_msgs::Trajectory` | 入力軌道 | +| `~/input/objects` | `autoware_perception_msgs::PredictedObjects` | 動的オブジェクト | +| `~/input/odometry` | `nav_msgs::msg::Odometry` | 自車オドメトリ | -### Output topics +### 出力トピック -| Name | Type | Description | -| ------------------------------- | ---------------------------------------------- | ------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs::Trajectory | output trajectory | -| `~/output/velocity_limit` | tier4_planning_msgs::VelocityLimit | velocity limit for cruising | -| `~/output/clear_velocity_limit` | tier4_planning_msgs::VelocityLimitClearCommand | clear command for velocity limit | -| `~/output/stop_reasons` | tier4_planning_msgs::StopReasonArray | reasons that make the vehicle to stop | +| 名前 | 型 | 説明 | +| ------------------------------- | ---------------------------------------------- | -------------------------------------- | +| `~/output/trajectory` | autoware_planning_msgs::Trajectory | 出力軌跡 | +| `~/output/velocity_limit` | tier4_planning_msgs::VelocityLimit | 巡行時の速度制限 | +| `~/output/clear_velocity_limit` | tier4_planning_msgs::VelocityLimitClearCommand | 速度制限のクリアコマンド | +| `~/output/stop_reasons` | tier4_planning_msgs::StopReasonArray | 車両を停止させる理由 | -## Design +## 設計 -Design for the following functions is defined here. +以下の機能の設計がここに定義されています。 -- Behavior determination against obstacles -- Stop planning -- Cruise planning -- Slow down planning +- 障害物対策 +- 停止計画 +- クルーズ計画 +- 減速計画 + +クルーズ計画と停止計画のデータ構造は次のとおりです。 +このプランナーデータは最初に作成され、その後、計画アルゴリズムに送信されます。 -A data structure for cruise and stop planning is as follows. -This planner data is created first, and then sent to the planning algorithm. ```cpp struct PlannerData @@ -54,6 +55,7 @@ struct PlannerData }; ``` + ```cpp struct Obstacle { @@ -69,158 +71,156 @@ struct Obstacle }; ``` -### Behavior determination against obstacles +### 障害物に対する動作決定 -Obstacles for cruising, stopping and slowing down are selected in this order based on their pose and velocity. -The obstacles not in front of the ego will be ignored. +巡航、停止、減速の障害物は、自車位置と速度に基づいてこの順序で選択されます。 +自車の前方にない障害物は無視されます。 ![determine_cruise_stop_slow_down](./media/determine_cruise_stop_slow_down.drawio.svg) -#### Determine cruise vehicles +#### 巡航車両の決定 -The obstacles meeting the following condition are determined as obstacles for cruising. +次の条件を満たす障害物は、巡航障害物として決定されます。 -- The lateral distance from the object to the ego's trajectory is smaller than `behavior_determination.cruise.max_lat_margin`. +- 物体から自車の軌道までの横方向距離が`behavior_determination.cruise.max_lat_margin`未満であること。 -- The object type is for cruising according to `common.cruise_obstacle_type.*`. -- The object is not crossing the ego's trajectory (\*1). -- If the object is inside the trajectory. - - The object type is for inside cruising according to `common.cruise_obstacle_type.inside.*`. - - The object velocity is larger than `behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop`. -- If the object is outside the trajectory. - - The object type is for outside cruising according to `common.cruise_obstacle_type.outside.*`. - - The object velocity is larger than `behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold`. - - The highest confident predicted path collides with the ego's trajectory. - - Its collision's period is larger than `behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold`. +- 物体タイプが`common.cruise_obstacle_type.*`に従って巡航用であること。 +- 物体は自車の軌道を横断していない(\*1)。 +- 物体が軌道内にある場合。 + - 物体タイプが`common.cruise_obstacle_type.inside.*`に従って巡航内部用であること。 + - 物体速度が`behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop`を超えていること。 +- 物体が軌道外にある場合。 + - 物体タイプが`common.cruise_obstacle_type.outside.*`に従って巡航外部用であること。 + - 物体速度が`behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold`を超えていること。 + - 最も信頼性の高い予測経路が自車の軌道と衝突すること。 + - その衝突期間が`behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold`を超えていること。 -| Parameter | Type | Description | -| ------------------------------------------------------------------------------------ | ------ | -------------------------------------------------------------------- | -| `common.cruise_obstacle_type.inside.unknown` | bool | flag to consider unknown objects for cruising | -| `common.cruise_obstacle_type.inside.car` | bool | flag to consider unknown objects for cruising | -| `common.cruise_obstacle_type.inside.truck` | bool | flag to consider unknown objects for cruising | -| ... | bool | ... | -| `common.cruise_obstacle_type.outside.unknown` | bool | flag to consider unknown objects for cruising | -| `common.cruise_obstacle_type.outside.car` | bool | flag to consider unknown objects for cruising | -| `common.cruise_obstacle_type.outside.truck` | bool | flag to consider unknown objects for cruising | -| ... | bool | ... | -| `behavior_determination.cruise.max_lat_margin` | double | maximum lateral margin for cruise obstacles | -| `behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop` | double | maximum obstacle velocity for cruise obstacle inside the trajectory | -| `behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold` | double | maximum obstacle velocity for cruise obstacle outside the trajectory | -| `behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold` | double | maximum overlap time of the collision between the ego and obstacle | +| パラメータ | 型 | 説明 | +|---|---|---| +| `common.cruise_obstacle_type.inside.unknown` | bool | クルーズに対して、不明なオブジェクトを考慮するフラグ | +| `common.cruise_obstacle_type.inside.car` | bool | クルーズに対して、乗用車オブジェクトを考慮するフラグ | +| `common.cruise_obstacle_type.inside.truck` | bool | クルーズに対して、トラックオブジェクトを考慮するフラグ | +| ... | bool | ... | +| `common.cruise_obstacle_type.outside.unknown` | bool | クルーズに対して、不明なオブジェクトを考慮するフラグ | +| `common.cruise_obstacle_type.outside.car` | bool | クルーズに対して、乗用車オブジェクトを考慮するフラグ | +| `common.cruise_obstacle_type.outside.truck` | bool | クルーズに対して、トラックオブジェクトを考慮するフラグ | +| ... | bool | ... | +| `behavior_determination.cruise.max_lat_margin` | double | クルーズ障害物の最大横方向マージン | +| `behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop` | double | 軌道内のクルーズ障害物の最大障害物速度 | +| `behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold` | double | 軌道外のクルーズ障害物の最大障害物速度 | +| `behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold` | double | 自車と障害物が衝突する最大重複時間 | -##### Yield for vehicles that might cut in into the ego's lane +##### エゴ車の車線へ割り込んでくる可能性のある車両への譲歩 -It is also possible to yield (cruise) behind vehicles in neighbor lanes if said vehicles might cut in the ego vehicle's current lane. +他車線の車両がエゴ車の現在の車線に割り込んでくる可能性がある場合、それらの車両の後ろで譲歩(巡航)することもできます。 -The obstacles meeting the following condition are determined as obstacles for yielding (cruising). +以下の条件を満たす障害物は、譲歩(巡航)の障害物として判断されます。 -- The object type is for cruising according to `common.cruise_obstacle_type.*` and it is moving with a speed greater than `behavior_determination.cruise.yield.stopped_obstacle_velocity_threshold`. -- The object is not crossing the ego's trajectory (\*1). -- There is another object of type `common.cruise_obstacle_type.*` stopped in front of the moving obstacle. -- The lateral distance (using the ego's trajectory as reference) between both obstacles is less than `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` -- Both obstacles, moving and stopped, are within `behavior_determination.cruise.yield.lat_distance_threshold` and `behavior_determination.cruise.yield.lat_distance_threshold` + `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` lateral distance from the ego's trajectory respectively. +- 物体タイプが `common.cruise_obstacle_type.*` に従って巡航用であり、速度が `behavior_determination.cruise.yield.stopped_obstacle_velocity_threshold` より大きい。 +- 物体がエゴ車の軌跡を横断していない(*1)。 +- 移動中の障害物の前に `common.cruise_obstacle_type.*` タイプの別の停止障害物がある。 +- 両方の障害物間の横方向距離(エゴ車の軌跡を基準とする)が `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` 未満である。 +- 移動中および停止中の障害物は両方、エゴ車の軌跡からそれぞれ横方向距離で `behavior_determination.cruise.yield.lat_distance_threshold` と `behavior_determination.cruise.yield.lat_distance_threshold` + `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` 内にある。 -If the above conditions are met, the ego vehicle will cruise behind the moving obstacle, yielding to it so it can cut in into the ego's lane to avoid the stopped obstacle. +上記の条件を満たしている場合、エゴ車は移動障害物の後ろを巡航し、停止障害物を避けるためにエゴ車の車線に割り込んでくるのを譲歩します。 -#### Determine stop vehicles +#### 停止車両の特定 -Among obstacles which are not for cruising, the obstacles meeting the following condition are determined as obstacles for stopping. +巡航用ではない障害物の中で、以下の条件を満たす障害物は停止用の障害物として特定されます。 -- The object type is for stopping according to `common.stop_obstacle_type.*`. -- The lateral distance from the object to the ego's trajectory is smaller than `behavior_determination.stop.max_lat_margin`. -- The object velocity along the ego's trajectory is smaller than `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise`. -- The object - - does not cross the ego's trajectory (\*1) - - with the velocity smaller than `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` - - and its collision time margin is large enough (\*2). +- 物体タイプが `common.stop_obstacle_type.*` に従って停止用である。 +- 物体からエゴ車の軌跡への横方向距離が `behavior_determination.stop.max_lat_margin` 未満である。 +- エゴ車の軌跡に沿った物体速度が `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` より小さい。 +- 物体は + - エゴ車の軌跡を横断していない(*1) + - 速度が `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` 未満 + - 衝突時刻マージンが十分に大きい(*2)。 -| Parameter | Type | Description | -| ------------------------------------------------------------------------ | ------ | --------------------------------------------- | -| `common.stop_obstacle_type.unknown` | bool | flag to consider unknown objects for stopping | -| `common.stop_obstacle_type.car` | bool | flag to consider unknown objects for stopping | -| `common.stop_obstacle_type.truck` | bool | flag to consider unknown objects for stopping | -| ... | bool | ... | -| `behavior_determination.stop.max_lat_margin` | double | maximum lateral margin for stop obstacles | -| `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` | double | maximum crossing obstacle velocity to ignore | -| `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` | double | maximum obstacle velocity for stop | +| パラメーター | 型 | 説明 | +| -------------------------------------------------------------------- | ------ | -------------------------------------------- | +| `common.stop_obstacle_type.unknown` | ブール | 停止時の未知の障害物として考慮するフラグ | +| `common.stop_obstacle_type.car` | ブール | 停止時の不明な障害物として考慮するフラグ | +| `common.stop_obstacle_type.truck` | ブール | 停止時の不明な障害物として考慮するフラグ | +| ... | ブール | ... | +| `behavior_determination.stop.max_lat_margin` | double | 停止障害物の最大横方向マージン | +| `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` | double | 無視する最大横断障害物速度 | +| `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` | double | 停止時の最大障害物速度 | -#### Determine slow down vehicles +#### 減速対象車両の特定 -Among obstacles which are not for cruising and stopping, the obstacles meeting the following condition are determined as obstacles for slowing down. +巡航および停止の妨げにならない障害物の中で、以下条件を満たす障害物が減速対象の障害物として特定されます。 -- The object type is for slowing down according to `common.slow_down_obstacle_type.*`. -- The lateral distance from the object to the ego's trajectory is smaller than `behavior_determination.slow_down.max_lat_margin`. +- オブジェクトタイプが `common.slow_down_obstacle_type.*` に従って減速対象である。 +- オブジェクトから自車軌跡までの横方向距離が `behavior_determination.slow_down.max_lat_margin` 未満である。 -| Parameter | Type | Description | -| ------------------------------------------------- | ------ | ------------------------------------------------- | -| `common.slow_down_obstacle_type.unknown` | bool | flag to consider unknown objects for slowing down | -| `common.slow_down_obstacle_type.car` | bool | flag to consider unknown objects for slowing down | -| `common.slow_down_obstacle_type.truck` | bool | flag to consider unknown objects for slowing down | -| ... | bool | ... | -| `behavior_determination.slow_down.max_lat_margin` | double | maximum lateral margin for slow down obstacles | +| パラメータ | 型 | 説明 | +| ---------------------------------------------- | ------ | ------------------------------------------------------ | +| `common.slow_down_obstacle_type.unknown` | bool | 不明なオブジェクトを減速で考慮するフラグ | +| `common.slow_down_obstacle_type.car` | bool | 不明なオブジェクトを減速で考慮するフラグ | +| `common.slow_down_obstacle_type.truck` | bool | 不明なオブジェクトを減速で考慮するフラグ | +| ... | bool | ... | +| `behavior_determination.slow_down.max_lat_margin` | double | 減速障害物の最大横マージン | -#### NOTE +#### メモ -##### \*1: Crossing obstacles +##### \*1: 交差障害物 -Crossing obstacle is the object whose orientation's yaw angle against the ego's trajectory is smaller than `behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold`. +交差障害物は、自己車両の軌道に対するヨー角が `behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold` より小さい物体である。 -| Parameter | Type | Description | -| ------------------------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------- | -| `behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold` | double | maximum angle against the ego's trajectory to judge the obstacle is crossing the trajectory [rad] | +| Parameter | Type | Description | +|---|---|---| +| `behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold` | double | 自車軌跡に対する障害物の最大角度。この角度を超えると障害物が軌跡を横切っていると判断する [rad] | -##### \*2: Enough collision time margin +##### \*2: 충돌 시간 여유 부족 -We predict the collision area and its time by the ego with a constant velocity motion and the obstacle with its predicted path. -Then, we calculate a collision time margin which is the difference of the time when the ego will be inside the collision area and the obstacle will be inside the collision area. -When this time margin is smaller than `behavior_determination.stop.crossing_obstacle.collision_time_margin`, the margin is not enough. +우리는 자차가 일정한 속도로 이동하고 장애물이 예측 경로로 이동하는 경우 충돌 영역과 그 시간을 예측합니다. +그런 다음 충돌 영역 내에 자차가 진입할 시간과 장애물이 충돌 영역 내에 진입하는 시간의 차이인 충돌 시간 여유를 계산합니다. +이 여유 시간이 `behavior_determination.stop.crossing_obstacle.collision_time_margin`보다 작으면 여유가 부족합니다. -| Parameter | Type | Description | -| --------------------------------------------------------------------- | ------ | ----------------------------------------------------- | -| `behavior_determination.stop.crossing_obstacle.collision_time_margin` | double | maximum collision time margin of the ego and obstacle | - -### Stop planning - -| Parameter | Type | Description | +| パラメータ | タイプ | 説明 | +| ------------------------------------------------- | ------ | ------------------------------------------------------- | +| `behavior_determination.stop.crossing_obstacle.collision_time_margin` | double | 自車と障害物との最大衝突時間マージン | + +### Stop Planning + +| パラメータ | 型 | 説明 | | -------------------------------------- | ------ | ------------------------------------------------------------------------------------------ | -| `common.min_strong_accel` | double | ego's minimum acceleration to stop [m/ss] | -| `common.safe_distance_margin` | double | distance with obstacles for stop [m] | -| `common.terminal_safe_distance_margin` | double | terminal_distance with obstacles for stop, which cannot be exceed safe distance margin [m] | +| `common.min_strong_accel` | double | 自車の停止に必要な最小加速度 [m/ss] | +| `common.safe_distance_margin` | double | 障害物との安全距離 [m] | +| `common.terminal_safe_distance_margin` | double | 安全距離の範囲を超えない、障害物との最終安全距離 [m] | + +停止計画の役割は、静止車両物体または動的/静止非車両物体と安全な距離を保つことです。 -The role of the stop planning is keeping a safe distance with static vehicle objects or dynamic/static non vehicle objects. +停止計画は、障害物との距離を保つために停止点を軌道に挿入するだけです。安全距離は `common.safe_distance_margin` としてパラメータ化されます。軌道の最後に停止し、停止点に障害物が存在する場合、安全距離は `terminal_safe_distance_margin` になります。 -The stop planning just inserts the stop point in the trajectory to keep a distance with obstacles. -The safe distance is parameterized as `common.safe_distance_margin`. -When it stops at the end of the trajectory, and obstacle is on the same point, the safe distance becomes `terminal_safe_distance_margin`. +停止点を挿入すると、自車が停止点の前で停止するために必要な加速度が計算されます。加速度が `common.min_strong_accel` より小さい場合、このパッケージは緊急時の急ブレーキを想定していないため、停止計画はキャンセルされます。 -When inserting the stop point, the required acceleration for the ego to stop in front of the stop point is calculated. -If the acceleration is less than `common.min_strong_accel`, the stop planning will be cancelled since this package does not assume a strong sudden brake for emergency. +### クルーズプランニング -### Cruise planning +| パラメータ | 型 | 説明 | +| ------------------------------ | ------ | --------------------------------------------- | +| `common.safe_distance_margin` | double | 定速走行時の障害物との最小距離 [m] | -| Parameter | Type | Description | -| ----------------------------- | ------ | ---------------------------------------------- | -| `common.safe_distance_margin` | double | minimum distance with obstacles for cruise [m] | +**クルーズプランニング** -The role of the cruise planning is keeping a safe distance with dynamic vehicle objects with smoothed velocity transition. -This includes not only cruising a front vehicle, but also reacting a cut-in and cut-out vehicle. +クルーズプランニングの役割は、滑らかな速度遷移により動的な車両オブジェクトとの安全車間距離を維持することです。これには、先行車両の追従だけでなく、割り込み・割り出し車両への対応も含まれます。 -The safe distance is calculated dynamically based on the Responsibility-Sensitive Safety (RSS) by the following equation. +安全車間距離は、次の方程式による責任感応型安全(RSS)に基づいて動的に計算されます。 $$ d_{rss} = v_{ego} t_{idling} + \frac{1}{2} a_{ego} t_{idling}^2 + \frac{v_{ego}^2}{2 a_{ego}} - \frac{v_{obstacle}^2}{2 a_{obstacle}}, $$ -assuming that $d_{rss}$ is the calculated safe distance, $t_{idling}$ is the idling time for the ego to detect the front vehicle's deceleration, $v_{ego}$ is the ego's current velocity, $v_{obstacle}$ is the front obstacle's current velocity, $a_{ego}$ is the ego's acceleration, and $a_{obstacle}$ is the obstacle's acceleration. -These values are parameterized as follows. Other common values such as ego's minimum acceleration is defined in `common.param.yaml`. +ここで、$d_{rss}$ は計算された安全車間距離、$t_{idling}$ は先行車両の減速を自己車両が検出するまでのアイドリング時間、$v_{ego}$ は自己車両の現在の速度、$v_{obstacle}$ は先行障害物の現在の速度、$a_{ego}$ は自己車両の加速度、$a_{obstacle}$ は障害物の加速度と仮定します。 +これらの値は以下のとおりにパラメータ化されます。自己車両の最小加速度などの他の一般的な値は `common.param.yaml` で定義されています。 -| Parameter | Type | Description | -| --------------------------------- | ------ | ----------------------------------------------------------------------------- | -| `common.idling_time` | double | idling time for the ego to detect the front vehicle starting deceleration [s] | -| `common.min_ego_accel_for_rss` | double | ego's acceleration for RSS [m/ss] | -| `common.min_object_accel_for_rss` | double | front obstacle's acceleration for RSS [m/ss] | +| パラメータ | タイプ | 説明 | +|---|---|---| +| `common.idling_time` | double | 前走車の減速開始を自己車両が検出するまでのアイドル時間 [s] | +| `common.min_ego_accel_for_rss` | double | RSS時の自己車両の加速度 [m/ss] | +| `common.min_object_accel_for_rss` | double | RSS時の前方の障害物の加速度 [m/ss] | -The detailed formulation is as follows. +詳細な定式は以下のとおりです。 $$ \begin{align} @@ -233,63 +233,103 @@ v_{target} & = max(v_{ego} + v_{add}, v_{min, cruise}) \end{align} $$ -| Variable | Description | +| 変数 | 説明 | | ----------------- | --------------------------------------- | -| `d` | actual distance to obstacle | -| `d_{rss}` | ideal distance to obstacle based on RSS | +| `d` |障害物までの実際の距離 | +| `d_{rss}` |RSSに基づく障害物までの理想的な距離 | | `v_{min, cruise}` | `min_cruise_target_vel` | | `w_{acc}` | `output_ratio_during_accel` | -| `lpf(val)` | apply low-pass filter to `val` | -| `pid(val)` | apply pid to `val` | +| `lpf(val)` | `val`にローパスフィルタを適用 | +| `pid(val)` | `val`にPIDを適用 | + +### 減速計画 + +Autowareの減速計画では、障害物やその他の危険な状況を回避するために、減速または停止する経路を計画します。 + +**コンポーネント** + +* **Planningコンポーネント:** 障害物を検出し、減速計画を計算します。 +* **Executionコンポーネント:** 減速計画を実行し、車両を所定の速度まで減速します。 + +**アルゴリズム** + +減速計画アルゴリズムは次の手順で動作します。 + +1. **障害物の検出:** Planningコンポーネントは、ライダーセンサーやカメラからのデータを使用して障害物を検出します。 +2. **危険性の評価:** 障害物との衝突の可能性と、その重症度を評価します。 +3. **最適な減速計画の計算:** 障害物との衝突を回避しながら、所定の速度まで減速するための最適な計画を計算します。 +4. **減速計画の実行:** Executionコンポーネントは、ブレーキやスロットルを制御して減速計画を実行します。 + +**パラメータ** + +減速計画アルゴリズムは、次のパラメータで構成できます。 -### Slow down planning +* **最小減速距離:** 障害物との衝突を回避するために必要とされる最小減速距離 +* **最大減速率:** 車両が減速できる最大減速率 +* **目標速度:** 障害物との衝突を回避するために減速する目標速度 -| Parameter | Type | Description | +**制限事項** + +減速計画アルゴリズムには次のような制限があります。 + +* **センサーの制限:** 障害物の検出は、ライダーセンサーやカメラの能力に依存します。 +* **計算コスト:** 減速計画の計算は、大量の計算リソースを必要とする場合があります。 +* **環境の動的性:** 減速計画は、周囲環境の変化を考慮しません。 + +**アプリケーション** + +減速計画は、次のような自動運転アプリケーションに使用できます。 + +* **衝突回避:** 障害物との衝突を回避します。 +* **渋滞への対応:** 渋滞で安全な速度を維持します。 +* **停止交差点での停止:** 交差点で安全に停止します。 + +| パラメーター | タイプ | 説明 | | ----------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `slow_down.labels` | vector(string) | A vector of labels for customizing obstacle-label-based slow down behavior. Each label represents an obstacle type that will be treated differently when applying slow down. The possible labels are ("default" (Mandatory), "unknown","car","truck","bus","trailer","motorcycle","bicycle" or "pedestrian") | -| `slow_down.default.static.min_lat_velocity` | double | minimum velocity to linearly calculate slow down velocity [m]. Note: This default value will be used when the detected obstacle label does not match any of the slow_down.labels and the obstacle is considered to be static, or not moving | -| `slow_down.default.static.max_lat_velocity` | double | maximum velocity to linearly calculate slow down velocity [m]. Note: This default value will be used when the detected obstacle label does not match any of the slow_down.labels and the obstacle is considered to be static, or not moving | -| `slow_down.default.static.min_lat_margin` | double | minimum lateral margin to linearly calculate slow down velocity [m]. Note: This default value will be used when the detected obstacle label does not match any of the slow_down.labels and the obstacle is considered to be static, or not moving | -| `slow_down.default.static.max_lat_margin` | double | maximum lateral margin to linearly calculate slow down velocity [m]. Note: This default value will be used when the detected obstacle label does not match any of the slow_down.labels and the obstacle is considered to be static, or not moving | -| `slow_down.default.moving.min_lat_velocity` | double | minimum velocity to linearly calculate slow down velocity [m]. Note: This default value will be used when the detected obstacle label does not match any of the slow_down.labels and the obstacle is considered to be moving | -| `slow_down.default.moving.max_lat_velocity` | double | maximum velocity to linearly calculate slow down velocity [m]. Note: This default value will be used when the detected obstacle label does not match any of the slow_down.labels and the obstacle is considered to be moving | -| `slow_down.default.moving.min_lat_margin` | double | minimum lateral margin to linearly calculate slow down velocity [m]. Note: This default value will be used when the detected obstacle label does not match any of the slow_down.labels and the obstacle is considered to be moving | -| `slow_down.default.moving.max_lat_margin` | double | maximum lateral margin to linearly calculate slow down velocity [m]. Note: This default value will be used when the detected obstacle label does not match any of the slow_down.labels and the obstacle is considered to be moving | -| `(optional) slow_down."label".(static & moving).min_lat_velocity` | double | minimum velocity to linearly calculate slow down velocity [m]. Note: only for obstacles specified in `slow_down.labels`. Requires a `static` and a `moving` value | -| `(optional) slow_down."label".(static & moving).max_lat_velocity` | double | maximum velocity to linearly calculate slow down velocity [m]. Note: only for obstacles specified in `slow_down.labels`. Requires a `static` and a `moving` value | -| `(optional) slow_down."label".(static & moving).min_lat_margin` | double | minimum lateral margin to linearly calculate slow down velocity [m]. Note: only for obstacles specified in `slow_down.labels`. Requires a `static` and a `moving` value | -| `(optional) slow_down."label".(static & moving).max_lat_margin` | double | maximum lateral margin to linearly calculate slow down velocity [m]. Note: only for obstacles specified in `slow_down.labels`. Requires a `static` and a `moving` value | - -The role of the slow down planning is inserting slow down velocity in the trajectory where the trajectory points are close to the obstacles. The parameters can be customized depending on the obstacle type (see `slow_down.labels`), making it possible to adjust the slow down behavior depending if the obstacle is a pedestrian, bicycle, car, etc. Each obstacle type has a `static` and a `moving` parameter set, so it is possible to customize the slow down response of the ego vehicle according to the obstacle type and if it is moving or not. If an obstacle is determined to be moving, the corresponding `moving` set of parameters will be used to compute the vehicle slow down, otherwise, the `static` parameters will be used. The `static` and `moving` separation is useful for customizing the ego vehicle slow down behavior to, for example, slow down more significantly when passing stopped vehicles that might cause occlusion or that might suddenly open its doors. - -An obstacle is classified as `static` if its total speed is less than the `moving_object_speed_threshold` parameter. Furthermore, a hysteresis based approach is used to avoid chattering, it uses the `moving_object_hysteresis_range` parameter range and the obstacle's previous state (`moving` or `static`) to determine if the obstacle is moving or not. In other words, if an obstacle was previously classified as `static`, it will not change its classification to `moving` unless its total speed is greater than `moving_object_speed_threshold` + `moving_object_hysteresis_range`. Likewise, an obstacle previously classified as `moving`, will only change to `static` if its speed is lower than `moving_object_speed_threshold` - `moving_object_hysteresis_range`. - -The closest point on the obstacle to the ego's trajectory is calculated. -Then, the slow down velocity is calculated by linear interpolation with the distance between the point and trajectory as follows. +| `slow_down.labels` | vector(文字列) | 障害物のラベルに基づいた減速動作をカスタマイズするためのラベルのベクトル。各ラベルは、減速の適用時に異なる扱いを受ける障害物のタイプを表します。使用可能なラベルは次のとおりです(「default」(必須)、「unknown」、「car」、「truck」、「bus」、「trailer」、「motorcycle」、「bicycle」または「pedestrian」) | +| `slow_down.default.static.min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.static.max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.static.min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.static.max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.moving.min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.moving.max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.moving.min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.moving.max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | +| `(オプション) slow_down."ラベル".(static & moving).min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | +| `(オプション) slow_down."ラベル".(static & moving).max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | +| `(オプション) slow_down."ラベル".(static & moving).min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | +| `(オプション) slow_down."ラベル".(static & moving).max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | + +減速プランニングの役割は、障害物に近い軌跡のポイントに減速速度を挿入することです。障害物の種類(「slow_down.labels」を参照)に応じてパラメーターをカスタマイズすることができ、障害物が歩行者、自転車、車などであるかによって減速の動作を調整できます。各障害物タイプには「static」と「moving」のパラメーターセットがあり、障害物タイプとその動きに合わせて自己車両の減速レスポンスをカスタマイズできます。障害物が移動していると判断された場合、対応する「moving」パラメーターセットを使用して車両の減速を計算しますが、そうでない場合は「static」パラメーターを使用します。静的な「static」と移動中の「moving」の分離は、たとえば、視界を遮る可能性のある停止車両や、突然ドアを開ける可能性のある停止車両を追い越すときに大幅に減速するなど、自己車両の減速動作をカスタマイズするのに役立ちます。 + +障害物の合計速度が「moving_object_speed_threshold」パラメーター未満の場合、障害物は「static」に分類されます。さらに、ヒステリシスに基づくアプローチを使用してチャタリングを回避します。これには、「moving_object_hysteresis_range」パラメーター範囲および障害物の前の状態(「moving」または「static」)を使用して、障害物が移動しているかどうかを判断します。言い換えれば、障害物が以前に「static」として分類されていた場合、合計速度が「moving_object_speed_threshold」+「moving_object_hysteresis_range」より大きくならない限り、その分類は「moving」に変更されません。同様に、以前に「moving」として分類された障害物は、速度が「moving_object_speed_threshold」-「moving_object_hysteresis_range」より低くならない限り「static」に変更されません。 + +自己の軌跡に対する障害物上で自己の位置に最も近い点が計算されます。次に、減速速度は次のようにポイントと軌跡間の距離との線形補間によって計算されます。 ![slow_down_velocity_calculation](./media/slow_down_velocity_calculation.svg) -| Variable | Description | -| ---------- | ------------------------------------------------- | -| `v_{out}` | calculated velocity for slow down | -| `v_{min}` | `slow_down.min_lat_velocity` | -| `v_{max}` | `slow_down.max_lat_velocity` | -| `l_{min}` | `slow_down.min_lat_margin` | -| `l_{max}` | `slow_down.max_lat_margin` | +| 変数 | 説明 | +| ---------- | ------------------------------------------------------ | +| `v_{out}` | 減速の計算速度 | +| `v_{min}` | `slow_down.min_lat_velocity` | +| `v_{max}` | `slow_down.max_lat_velocity` | +| `l_{min}` | `slow_down.min_lat_margin` | +| `l_{max}` | `slow_down.max_lat_margin` | | `l'_{max}` | `behavior_determination.slow_down.max_lat_margin` | -The calculated velocity is inserted in the trajectory where the obstacle is inside the area with `behavior_determination.slow_down.max_lat_margin`. +計算された速度は、障害物が「behavior_determination.slow_down.max_lat_margin」のある領域内にある軌跡に挿入されます。 ![slow_down_planning](./media/slow_down_planning.drawio.svg) -## Implementation +## 実装 -### Flowchart +### フローチャート -Successive functions consist of `autoware_obstacle_cruise_planner` as follows. +連続的な機能は、以下のように「autoware_obstacle_cruise_planner」で構成されます。 + +停止およびクルーズプランニング用のさまざまなアルゴリズムが実装され、ユースケースに応じてそのうちの1つが指定されます。 +コアアルゴリズム実装「generateTrajectory」は、指定されたアルゴリズムに依存します。 -Various algorithms for stop and cruise planning will be implemented, and one of them is designated depending on the use cases. -The core algorithm implementation `generateTrajectory` depends on the designated algorithm. ```plantuml @startuml @@ -331,82 +371,86 @@ stop @enduml ``` -### Algorithm selection for cruise planner +### クルーズプランナ用のアルゴリズム選択 + +現在は、PIDベースのプランナのみがサポートされています。 +各プランナについては以下で説明します。 -Currently, only a PID-based planner is supported. -Each planner will be explained in the following. +| パラメータ | タイプ | 説明 | +| ------------------------ | ------ | ------------------------------------------------- | +| `common.planning_method` | string | CruiseとStop計画アルゴリズム。「pid_base」から選択 | -| Parameter | Type | Description | -| ------------------------ | ------ | ------------------------------------------------------------ | -| `common.planning_method` | string | cruise and stop planning algorithm, selected from "pid_base" | +### PIDベースプランナ -### PID-based planner +#### 停止プランニング -#### Stop planning +`pid_based_planner`名前空間で、 -In the `pid_based_planner` namespace, +| パラメーター | タイプ | 説明 | +|---|---|---| +| `obstacle_velocity_threshold_from_cruise_to_stop` | double | 定速走行から停止へと移行する際の障害物速度閾値 [m/s] | -| Parameter | Type | Description | -| ------------------------------------------------- | ------ | ------------------------------------------------------------ | -| `obstacle_velocity_threshold_from_cruise_to_stop` | double | obstacle velocity threshold to be stopped from cruised [m/s] | +停止プランニングでは、障害物を1つだけ対象にします。 -Only one obstacle is targeted for the stop planning. -It is the obstacle among obstacle candidates whose velocity is less than `obstacle_velocity_threshold_from_cruise_to_stop`, and which is the nearest to the ego along the trajectory. A stop point is inserted keeping`common.safe_distance_margin` distance between the ego and obstacle. +対象となる障害物候補から、速度が `obstacle_velocity_threshold_from_cruise_to_stop` 未満で、軌道上で自車に最も近い障害物を選択します。自車と障害物の間隔を `common.safe_distance_margin` 分確保した停止地点が挿入されます。 -Note that, as explained in the stop planning design, a stop planning which requires a strong acceleration (less than `common.min_strong_accel`) will be canceled. +停止プランニングの設計で説明したように、強い加速度を必要とする停止プランニング(`common.min_strong_accel` 未満)はキャンセルされますのでご注意ください。 -#### Cruise planning +#### クルーズプランニング -In the `pid_based_planner` namespace, +`pid_based_planner` 名前空間では、 -| Parameter | Type | Description | +| パラメータ | 型 | 説明 | | --------------------------- | ------ | -------------------------------------------------------------------------------------------------------- | -| `kp` | double | p gain for pid control [-] | -| `ki` | double | i gain for pid control [-] | -| `kd` | double | d gain for pid control [-] | -| `output_ratio_during_accel` | double | The output velocity will be multiplied by the ratio during acceleration to follow the front vehicle. [-] | -| `vel_to_acc_weight` | double | target acceleration is target velocity \* `vel_to_acc_weight` [-] | -| `min_cruise_target_vel` | double | minimum target velocity during cruise [m/s] | +| `kp` | double | PID制御のPゲイン [-] | +| `ki` | double | PID制御のIゲイン [-] | +| `kd` | double | PID制御のDゲイン [-] | +| `output_ratio_during_accel` | double | 加速時に、先行車両を追従するために、出力速度にこの係数を乗算します。 [-] | +| `vel_to_acc_weight` | double | 目標加速度は目標速度 \* `vel_to_acc_weight` です。 [-] | +| `min_cruise_target_vel` | double | 定速走行中の最低目標速度 [m/s] | -In order to keep the safe distance, the target velocity and acceleration is calculated and sent as an external velocity limit to the velocity smoothing package (`motion_velocity_smoother` by default). -The target velocity and acceleration is respectively calculated with the PID controller according to the error between the reference safe distance and the actual distance. +安全距離を確保するために、目標速度と加速度が計算され、外部速度制限として速度平滑化パッケージ (`motion_velocity_smoother` が初期値) に送信されます。 +目標速度と加速度はそれぞれ、基準安全距離と実際の距離の誤差に従って PID コントローラで計算されます。 -### Optimization-based planner +### 最適化ベース計画 -under construction +作成中 -## Minor functions +## マイナー関数 -### Prioritization of behavior module's stop point +### 挙動モジュールの停止ポイントの優先順位 -When stopping for a pedestrian walking on the crosswalk, the behavior module inserts the zero velocity in the trajectory in front of the crosswalk. -Also `autoware_obstacle_cruise_planner`'s stop planning also works, and the ego may not reach the behavior module's stop point since the safe distance defined in `autoware_obstacle_cruise_planner` may be longer than the behavior module's safe distance. -To resolve this non-alignment of the stop point between the behavior module and `autoware_obstacle_cruise_planner`, `common.min_behavior_stop_margin` is defined. -In the case of the crosswalk described above, `autoware_obstacle_cruise_planner` inserts the stop point with a distance `common.min_behavior_stop_margin` at minimum between the ego and obstacle. +横断歩道で歩行している歩行者に対して停止する場合、挙動モジュールは横断歩道の前に軌道に 0 速度を挿入します。 +`autoware_obstacle_cruise_planner` の停止計画も機能しますが、`autoware_obstacle_cruise_planner` で定義された安全距離が挙動モジュールの安全距離よりも長くなる可能性があるため、エゴは挙動モジュールの停止ポイントに到達しない場合があります。 +挙動モジュールと `autoware_obstacle_cruise_planner` 間の停止ポイントの非整合を解決するために、`common.min_behavior_stop_margin` が定義されています。 +先に説明した横断歩道の場合は、`autoware_obstacle_cruise_planner` は、エゴと障害物の間に少なくとも `common.min_behavior_stop_margin` の距離で停止ポイントを挿入します。 -| Parameter | Type | Description | +| パラメータ | 型 | 説明 | | --------------------------------- | ------ | ---------------------------------------------------------------------- | -| `common.min_behavior_stop_margin` | double | minimum stop margin when stopping with the behavior module enabled [m] | +| `common.min_behavior_stop_margin` | 数値 | ビヘイビアモジュールが有効な状態で停止した場合の最小停止マージン [m] | + +### ターゲット障害物内の最も近い停止障害物を保持する機能 + +ターゲット障害物内の最も近い停止障害物を保持するために、`checkConsistency` 関数において、その障害物がターゲット障害物から消去されたかどうかを確認します。 + +前回の最も近い停止障害物がリストから削除された場合、`stop_obstacle_hold_time_threshold` 秒間リスト内に保持します。 -### A function to keep the closest stop obstacle in target obstacles +新しい停止障害物が現れて以前の最も近い障害物がリストから削除された場合、その障害物をターゲット障害物に再び追加しないことに注意してください。 -In order to keep the closest stop obstacle in the target obstacles, we check whether it is disappeared or not from the target obstacles in the `checkConsistency` function. -If the previous closest stop obstacle is remove from the lists, we keep it in the lists for `stop_obstacle_hold_time_threshold` seconds. -Note that if a new stop obstacle appears and the previous closest obstacle removes from the lists, we do not add it to the target obstacles again. +| パラメータ | タイプ | 説明 | +| ------------------------------------------------------------ | ------ | ------------------------------------------------ | +| `behavior_determination.stop_obstacle_hold_time_threshold` | double | 最近接停止障害物を保持する最大時間 [s] | -| Parameter | Type | Description | -| ---------------------------------------------------------- | ------ | -------------------------------------------------- | -| `behavior_determination.stop_obstacle_hold_time_threshold` | double | maximum time for holding closest stop obstacle [s] | +## デバッグ方法 -## How To Debug +デバッグ方法は[こちら](docs/debug.md)を参照のこと。 -How to debug can be seen [here](docs/debug.md). +## 既知の制限事項 -## Known Limits +- 共通 + - 障害物の位置や速度推定に遅れがあると、自車が減速を維持しながら前方の車両に接近することがあります。 + - 現在の実装では静的・動的障害物の予測オブジェクトのメッセージのみを使用し、ポイントクラウドは使用しません。したがって、オブジェクト認識が失われると、自車は消失した障害物に対処できません。 + - 現在、障害物の車線変更の予測パスでは障害物クルーズプランナーの精度を確保できません。したがって、`rough_detection_area`は小さい値に設定します。 +- PIDベースプランナー + - アルゴリズムは、自車が指定された目標速度を実現するかどうかが、速度スムージングパッケージ(既定では`motion_velocity_smoother`)に大きく依存します。速度スムージングパッケージを更新した場合は、車両の挙動を可能な限り注意してください。 -- Common - - When the obstacle pose or velocity estimation has a delay, the ego sometimes will go close to the front vehicle keeping deceleration. - - Current implementation only uses predicted objects message for static/dynamic obstacles and does not use pointcloud. Therefore, if object recognition is lost, the ego cannot deal with the lost obstacle. - - The current predicted paths for obstacle's lane change does not have enough precision for obstacle_cruise_planner. Therefore, we set `rough_detection_area` a small value. -- PID-based planner - - The algorithm strongly depends on the velocity smoothing package (`motion_velocity_smoother` by default) whether or not the ego realizes the designated target speed. If the velocity smoothing package is updated, please take care of the vehicle's behavior as much as possible. diff --git a/planning/autoware_obstacle_stop_planner/README.md b/planning/autoware_obstacle_stop_planner/README.md index d3965192cd4c3..166a12fd05953 100644 --- a/planning/autoware_obstacle_stop_planner/README.md +++ b/planning/autoware_obstacle_stop_planner/README.md @@ -1,130 +1,116 @@ -# Obstacle Stop Planner +# 障害物停止計画 -## Overview +## 概要 -`obstacle_stop_planner` has following modules +`obstacle_stop_planner` には次のモジュールがあります。 -- Obstacle Stop Planner - - inserts a stop point in trajectory when there is a static point cloud on the trajectory. -- Slow Down Planner - - inserts a deceleration section in trajectory when there is a point cloud near the trajectory. -- Adaptive Cruise Controller (ACC) - - embeds target velocity in trajectory when there is a dynamic point cloud on the trajectory. +- 障害物停止計画 + - 静的な点群が経路にある場合に、軌跡に停止点を入れます。 +- 減速計画 + - 点群が経路近くにある場合に、軌跡に減速区間を入れます。 +- アダプティブクルーズコントロール (ACC) + - 動的な点群が経路にある場合に、軌跡に目標速度を組み込みます。 -### Input topics +### 入力トピック -| Name | Type | Description | -| --------------------------- | ------------------------------------------ | ------------------- | -| `~/input/pointcloud` | sensor_msgs::PointCloud2 | obstacle pointcloud | -| `~/input/trajectory` | autoware_planning_msgs::Trajectory | trajectory | -| `~/input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | vector map | -| `~/input/odometry` | nav_msgs::Odometry | vehicle velocity | -| `~/input/dynamic_objects` | autoware_perception_msgs::PredictedObjects | dynamic objects | -| `~/input/expand_stop_range` | tier4_planning_msgs::msg::ExpandStopRange | expand stop range | +| 名称 | タイプ | 説明 | +| --------------------------- | ------------------------------------------ | ------------ | +| `~/input/pointcloud` | `sensor_msgs::PointCloud2` | 障害物点群 | +| `~/input/trajectory` | `autoware_planning_msgs::Trajectory` | 経路 | +| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | +| `~/input/odometry` | `nav_msgs::Odometry` | 車両速度 | +| `~/input/dynamic_objects` | `autoware_perception_msgs::PredictedObjects` | 動的物体 | +| `~/input/expand_stop_range` | `tier4_planning_msgs::msg::ExpandStopRange` | 停止範囲の拡張 | -### Output topics +### 出力トピック -| Name | Type | Description | -| ---------------------- | ------------------------------------ | -------------------------------------- | -| `~output/trajectory` | autoware_planning_msgs::Trajectory | trajectory to be followed | -| `~output/stop_reasons` | tier4_planning_msgs::StopReasonArray | reasons that cause the vehicle to stop | +| 名称 | タイプ | 説明 | +|---|---|---| +| `~output/trajectory` | autoware_planning_msgs::Trajectory | 走行軌跡 | +| `~output/stop_reasons` | tier4_planning_msgs::StopReasonArray | 停止を引き起こす理由 | -### Common Parameter +### 共通パラメータ -{{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/common.schema.json") }} +{{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/common.schema.json") | ja-markdown }} -| Parameter | Type | Description | -| -------------------------------------- | ------ | ----------------------------------------------------------------------------------------- | -| `enable_slow_down` | bool | enable slow down planner [-] | -| `max_velocity` | double | max velocity [m/s] | -| `chattering_threshold` | double | even if the obstacle disappears, the stop judgment continues for chattering_threshold [s] | -| `enable_z_axis_obstacle_filtering` | bool | filter obstacles in z axis (height) [-] | -| `z_axis_filtering_buffer` | double | additional buffer for z axis filtering [m] | -| `use_predicted_objects` | bool | whether to use predicted objects for collision and slowdown detection [-] | -| `predicted_object_filtering_threshold` | double | threshold for filtering predicted objects [valid only publish_obstacle_polygon true] [m] | -| `publish_obstacle_polygon` | bool | if use_predicted_objects is true, node publishes collision polygon [-] | +| パラメータ | 型 | 説明 | +|---|---|---| +| `enable_slow_down` | bool | 低速化プランナを有効にする [-] | +| `max_velocity` | double | 最大速度 [m/s] | +| `chattering_threshold` | double | 障害物が消滅しても、停止判定を一定時間続ける [s](チャタリング防止) | +| `enable_z_axis_obstacle_filtering` | bool | z軸(高さ)方向の障害物をフィルタする [-] | +| `z_axis_filtering_buffer` | double | z軸フィルタのための追加バッファ [m] | +| `use_predicted_objects` | bool | 衝突検出と減速検出に予測オブジェクトを使用する [-] | +| `predicted_object_filtering_threshold` | double | 予測オブジェクトをフィルタするための閾値 [有効なのはpublish_obstacle_polygon trueの場合のみ] [m] | +| `publish_obstacle_polygon` | bool | use_predicted_objectsがtrueの場合、ノードが衝突ポリゴンを公開する [-] | -## Obstacle Stop Planner +## 障害物停止プランナー -### Role +### 役割 -This module inserts the stop point before the obstacle with margin. In nominal case, the margin is the sum -of `baselink_to_front` and `max_longitudinal_margin`. The `baselink_to_front` means the distance between `baselink`( -center of rear-wheel axis) and front of the car. The detection area is generated along the processed trajectory as -following figure. (This module cut off the input trajectory behind the ego position and decimates the trajectory points -for reducing computational costs.) +このモジュールは、障害物に一定のマージンを持たせ、停止点を障害物の前に挿入します。通常、マージンは `baselink_to_front` と `max_longitudinal_margin` の合計です。`baselink_to_front` は `baselink`(後輪軸の中心)と車の前面との距離です。検出エリアは、次に示すように処理済みの軌跡に沿って生成されます(このモジュールは自己位置の後ろの軌跡をカットオフし、計算コストを削減するために軌跡ポイントを間引きします)。
![example](./docs/collision_parameters.svg){width=1000} -
parameters for obstacle stop planner
+
障害物停止プランナーのパラメーター
![example](./docs/stop_target.svg){width=1000} -
target for obstacle stop planner
+
障害物停止プランナーのターゲット
-If another stop point has already been inserted by other modules within `max_longitudinal_margin`, the margin is the sum -of `baselink_to_front` and `min_longitudinal_margin`. This feature exists to avoid stopping unnaturally position. (For -example, the ego stops unnaturally far away from stop line of crosswalk that pedestrians cross to without this feature.) +他のモジュールによって `max_longitudinal_margin` 内に別の停止点が挿入されている場合は、マージンは `baselink_to_front` と `min_longitudinal_margin` の合計になります。この機能は、不自然な位置での停止を防ぐために存在します(たとえば、歩行者が横断する横断歩道の停止線から、不自然に離れたところで自己停止します)。
![example](./docs/min_longitudinal_margin.svg){width=1000} -
minimum longitudinal margin
+
最小縦方向マージン
-The module searches the obstacle pointcloud within detection area. When the pointcloud is -found, `Adaptive Cruise Controller` modules starts to work. only when `Adaptive Cruise Controller` modules does not -insert target velocity, the stop point is inserted to the trajectory. The stop point means the point with 0 velocity. +このモジュールは、検出エリア内の障害物ポイントクラウドを検索します。ポイントクラウドが見つかると、`Adaptive Cruise Controller` モジュールが動作し始めます。`Adaptive Cruise Controller` モジュールがターゲット速度を挿入しない場合にのみ、停止点が軌跡に挿入されます。停止点は、速度が 0 のポイントを意味します。 -### Restart prevention +### 再起動防止 -If it needs X meters (e.g. 0.5 meters) to stop once the vehicle starts moving due to the poor vehicle control -performance, the vehicle goes over the stopping position that should be strictly observed when the vehicle starts to -moving in order to approach the near stop point (e.g. 0.3 meters away). +車両の制御性能が悪い場合、車両が動き始めると停止するまでに X メートル(例: 0.5 メートル)が必要となるため、車両は、近くの停止点に接近するために動き始めると厳守すべき停止位置を超過します(例: 0.3 メートル離れています)。 -This module has parameter `hold_stop_margin_distance` in order to prevent from these redundant restart. If the vehicle -is stopped within `hold_stop_margin_distance` meters from stop point of the module, the module judges that the vehicle -has already stopped for the module's stop point and plans to keep stopping current position even if the vehicle is -stopped due to other factors. +このモジュールには、これらの冗長な再起動を防ぐために `hold_stop_margin_distance` パラメーターがあります。車両がモジュールの停止点から `hold_stop_margin_distance` メートル以内で停止した場合、モジュールは車両がすでにモジュールの停止点で停止していると判断し、他の要因で車両が停止しても停止を維持することを計画します。
![example](./docs/restart_prevention.svg){width=1000} -
parameters
+
パラメーター
![example](./docs/restart.svg){width=1000} -
outside the hold_stop_margin_distance
+
hold_stop_margin_distance の外側
![example](./docs/keep_stopping.svg){width=1000} -
inside the hold_stop_margin_distance
+
hold_stop_margin_distance の内側
-### Parameters +{{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/obstacle_stop_planner.schema.json", "ja") }} -{{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/obstacle_stop_planner.schema.json") }} +#### 停止位置 -#### Stop position +| パラメータ | データ型 | 説明 | +|---|---|---| +| `max_longitudinal_margin` | double | 障害物と本車両前面とのマージン [m] | +| `max_longitudinal_margin_behind_goal` | double | 停止点がゴールの後ろにある場合の障害物と本車両前面とのマージン [m] | +| `min_longitudinal_margin` | double | `max_longitudinal_margin` 内に障害物がある場合、モジュールは停止マージンの値を `min_longitudinal_margin` [m] に設定します | +| `hold_stop_margin_distance` | double | 再起動防止のパラメータ(上のセクションを参照) [m] | -| Parameter | Type | Description | -| ------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | -| `max_longitudinal_margin` | double | margin between obstacle and the ego's front [m] | -| `max_longitudinal_margin_behind_goal` | double | margin between obstacle and the ego's front when the stop point is behind the goal[m] | -| `min_longitudinal_margin` | double | if any obstacle exists within `max_longitudinal_margin`, this module set margin as the value of _stop margin_ to `min_longitudinal_margin` [m] | -| `hold_stop_margin_distance` | double | parameter for restart prevention (See above section) [m] | +#### 障害物検出領域 -#### Obstacle detection area +| パラメータ | 型 | 説明 | +| -------------------------------------- | -------- | -------------------------------------------------------------------------------------------- | +| `lateral_margin` | double | 障害物検知領域の車輪軌跡からの横マージン [m] | +| `step_length` | double | 点群検索範囲のステップ長 [m] | +| `enable_stop_behind_goal_for_obstacle` | bool | 障害物検出のためにゴールレーンを超えてトラジェクトリを延長 | -| Parameter | Type | Description | -| -------------------------------------- | ------ | ----------------------------------------------------------------------------------- | -| `lateral_margin` | double | lateral margin from the vehicle footprint for collision obstacle detection area [m] | -| `step_length` | double | step length for pointcloud search range [m] | -| `enable_stop_behind_goal_for_obstacle` | bool | enabling extend trajectory after goal lane for obstacle detection | +### フローチャート -### Flowchart ```plantuml @startuml @@ -157,62 +143,59 @@ stop @enduml ``` -## Slow Down Planner +## スローダウン プランナー -### Role +### 役割 -This module inserts the slow down section before the obstacle with forward margin and backward margin. The forward -margin is the sum of `baselink_to_front` and `longitudinal_forward_margin`, and the backward margin is the sum -of `baselink_to_front` and `longitudinal_backward_margin`. The ego keeps slow down velocity in slow down section. The -velocity is calculated the following equation. +このモジュールは、前進マージンと後進マージンを使用して障害物前に減速区間を挿入します。前進マージンは `baselink_to_front` と `longitudinal_forward_margin` の合計であり、後退マージンは `baselink_to_front` と `longitudinal_backward_margin` の合計です。自車は減速区間に減速速度を維持します。速度は次の式で計算されます。 $v_{target} = v_{min} + \frac{l_{ld} - l_{vw}/2}{l_{margin}} (v_{max} - v_{min} )$ -- $v_{target}$ : slow down target velocity [m/s] +- $v_{target}$ : 減速目標速度 [m/s] - $v_{min}$ : `min_slow_down_velocity` [m/s] - $v_{max}$ : `max_slow_down_velocity` [m/s] -- $l_{ld}$ : lateral deviation between the obstacle and the ego footprint [m] +- $l_{ld}$ : 障害物と自車フットプリント間の横断偏差 [m] - $l_{margin}$ : `lateral_margin` [m] -- $l_{vw}$ : width of the ego footprint [m] +- $l_{vw}$ : 自車フットプリントの幅 [m] -The above equation means that the smaller the lateral deviation of the pointcloud, the lower the velocity of the slow -down section. +上記の式は、ポイントクラウドの横断偏差が小さいほど、減速区間の速度が低くなることを意味します。
- ![example](./docs/slow_down_parameters.svg){width=1000} -
parameters for slow down planner
+ ![例](./docs/slow_down_parameters.svg){width=1000} +
減速プランナーのパラメータ
- ![example](./docs/slow_down_target.svg){width=1000} -
target for slow down planner
+ ![例](./docs/slow_down_target.svg){width=1000} +
減速プランナーの目標
-### Parameters +### パラメータ {{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/adaptive_cruise_control.schema.json") }} -#### Slow down section +#### 減速区間 -| Parameter | Type | Description | +| パラメーター | 型 | 説明 | | ------------------------------ | ------ | ----------------------------------------------- | -| `longitudinal_forward_margin` | double | margin between obstacle and the ego's front [m] | -| `longitudinal_backward_margin` | double | margin between obstacle and the ego's rear [m] | +| `longitudinal_forward_margin` | double | 自車前面と障害物間のマージン [m] | +| `longitudinal_backward_margin` | double | 自車後面と障害物間のマージン [m] | -#### Obstacle detection area +#### 障害物検知領域 -| Parameter | Type | Description | +| パラメータ | タイプ | 説明 | | ---------------- | ------ | ----------------------------------------------------------------------------------- | -| `lateral_margin` | double | lateral margin from the vehicle footprint for slow down obstacle detection area [m] | +| `lateral_margin` | double | 減速障害検出エリアの車両フットプリントからの横方向マージン [m] | -#### Slow down target velocity +#### 減速目標速度 -| Parameter | Type | Description | -| ------------------------ | ------ | ---------------------------- | -| `max_slow_down_velocity` | double | max slow down velocity [m/s] | -| `min_slow_down_velocity` | double | min slow down velocity [m/s] | +| パラメータ名 | 型 | 説明 | +| ------------------------- | ------ | ----------------------------------- | +| `max_slow_down_velocity` | double | 最大減速速度 [m/s] | +| `min_slow_down_velocity` | double | 最小減速速度 [m/s] | + +### フローチャート -### Flowchart ```plantuml @startuml @@ -240,48 +223,47 @@ stop @enduml ``` -## Adaptive Cruise Controller - -### Role - -`Adaptive Cruise Controller` module embeds maximum velocity in trajectory when there is a dynamic point cloud on the -trajectory. The value of maximum velocity depends on the own velocity, the velocity of the point cloud ( = velocity of -the front car), and the distance to the point cloud (= distance to the front car). - -| Parameter | Type | Description | -| ---------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------- | -| `adaptive_cruise_control.use_object_to_estimate_vel` | bool | use dynamic objects for estimating object velocity or not (valid only if osp.use_predicted_objects false) | -| `adaptive_cruise_control.use_pcl_to_estimate_vel` | bool | use raw pointclouds for estimating object velocity or not (valid only if osp.use_predicted_objects false) | -| `adaptive_cruise_control.consider_obj_velocity` | bool | consider forward vehicle velocity to calculate target velocity in adaptive cruise or not | -| `adaptive_cruise_control.obstacle_velocity_thresh_to_start_acc` | double | start adaptive cruise control when the velocity of the forward obstacle exceeds this value [m/s] | -| `adaptive_cruise_control.obstacle_velocity_thresh_to_stop_acc` | double | stop acc when the velocity of the forward obstacle falls below this value [m/s] | -| `adaptive_cruise_control.emergency_stop_acceleration` | double | supposed minimum acceleration (deceleration) in emergency stop [m/ss] | -| `adaptive_cruise_control.emergency_stop_idling_time` | double | supposed idling time to start emergency stop [s] | -| `adaptive_cruise_control.min_dist_stop` | double | minimum distance of emergency stop [m] | -| `adaptive_cruise_control.obstacle_emergency_stop_acceleration` | double | supposed minimum acceleration (deceleration) in emergency stop [m/ss] | -| `adaptive_cruise_control.max_standard_acceleration` | double | supposed maximum acceleration in active cruise control [m/ss] | -| `adaptive_cruise_control.min_standard_acceleration` | double | supposed minimum acceleration (deceleration) in active cruise control [m/ss] | -| `adaptive_cruise_control.standard_idling_time` | double | supposed idling time to react object in active cruise control [s] | -| `adaptive_cruise_control.min_dist_standard` | double | minimum distance in active cruise control [m] | -| `adaptive_cruise_control.obstacle_min_standard_acceleration` | double | supposed minimum acceleration of forward obstacle [m/ss] | -| `adaptive_cruise_control.margin_rate_to_change_vel` | double | rate of margin distance to insert target velocity [-] | -| `adaptive_cruise_control.use_time_compensation_to_calc_distance` | bool | use time-compensation to calculate distance to forward vehicle | -| `adaptive_cruise_control.p_coefficient_positive` | double | coefficient P in PID control (used when target dist -current_dist >=0) [-] | -| `adaptive_cruise_control.p_coefficient_negative` | double | coefficient P in PID control (used when target dist -current_dist <0) [-] | -| `adaptive_cruise_control.d_coefficient_positive` | double | coefficient D in PID control (used when delta_dist >=0) [-] | -| `adaptive_cruise_control.d_coefficient_negative` | double | coefficient D in PID control (used when delta_dist <0) [-] | -| `adaptive_cruise_control.object_polygon_length_margin` | double | The distance to extend the polygon length the object in pointcloud-object matching [m] | -| `adaptive_cruise_control.object_polygon_width_margin` | double | The distance to extend the polygon width the object in pointcloud-object matching [m] | -| `adaptive_cruise_control.valid_estimated_vel_diff_time` | double | Maximum time difference treated as continuous points in speed estimation using a point cloud [s] | -| `adaptive_cruise_control.valid_vel_que_time` | double | Time width of information used for speed estimation in speed estimation using a point cloud [s] | -| `adaptive_cruise_control.valid_estimated_vel_max` | double | Maximum value of valid speed estimation results in speed estimation using a point cloud [m/s] | -| `adaptive_cruise_control.valid_estimated_vel_min` | double | Minimum value of valid speed estimation results in speed estimation using a point cloud [m/s] | -| `adaptive_cruise_control.thresh_vel_to_stop` | double | Embed a stop line if the maximum speed calculated by ACC is lower than this speed [m/s] | -| `adaptive_cruise_control.lowpass_gain_of_upper_velocity` | double | Lowpass-gain of target velocity | -| `adaptive_cruise_control.use_rough_velocity_estimation:` | bool | Use rough estimated velocity if the velocity estimation is failed (valid only if osp.use_predicted_objects false) | -| `adaptive_cruise_control.rough_velocity_rate` | double | In the rough velocity estimation, the velocity of front car is estimated as self current velocity \* this value | - -### Flowchart +## アダプティブ・クルーズ・コントローラー + +### 役割 + +`Adaptive Cruise Controller`モジュールは、軌道上に動的点群がある場合、軌道内の最大速度を組み込みます。最大速度の値は、自車速度、点群速度(=前走車速度)、および点群までの距離(=前走車までの距離)によって異なります。 + +| パラメータ | 型 | 説明 | +| -------------------------------------------------------------- | --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `adaptive_cruise_control.use_object_to_estimate_vel` | bool | 物体の速度を推定するために動的な物体を使用するかどうか(osp.use_predicted_objectsがfalseの場合にのみ有効) | +| `adaptive_cruise_control.use_pcl_to_estimate_vel` | bool | 物体の速度を推定するために生の点群を使用するかどうか(osp.use_predicted_objectsがfalseの場合にのみ有効) | +| `adaptive_cruise_control.consider_obj_velocity` | bool | 追従走行時に目標速度を計算するために車両の速度を考慮するかどうか | +| `adaptive_cruise_control.obstacle_velocity_thresh_to_start_acc` | double | 前方障害物の速度がこの値を超えると追従走行を開始する [m/s] | +| `adaptive_cruise_control.obstacle_velocity_thresh_to_stop_acc` | double | 前方障害物の速度がこの値を下回るとACCを停止する [m/s] | +| `adaptive_cruise_control.emergency_stop_acceleration` | double | 緊急停止時の想定最小加速度(減速度)[m/ss] | +| `adaptive_cruise_control.emergency_stop_idling_time` | double | 緊急停止を開始するための想定停止時間 [s] | +| `adaptive_cruise_control.min_dist_stop` | double | 緊急停止の最小距離 [m] | +| `adaptive_cruise_control.obstacle_emergency_stop_acceleration` | double | 緊急停止時の想定最小加速度(減速度)[m/ss] | +| `adaptive_cruise_control.max_standard_acceleration` | double | 追従走行時の想定最大加速度 [m/ss] | +| `adaptive_cruise_control.min_standard_acceleration` | double | 追従走行時の想定最小加速度(減速度)[m/ss] | +| `adaptive_cruise_control.standard_idling_time` | double | 追従走行時に物体に対して反応する想定停止時間 [s] | +| `adaptive_cruise_control.min_dist_standard` | double | 追従走行時の最小距離 [m] | +| `adaptive_cruise_control.obstacle_min_standard_acceleration` | double | 前方障害物の想定最小加速度 [m/ss] | +| `adaptive_cruise_control.margin_rate_to_change_vel` | double | 目標速度を挿入するための余裕距離率 [-] | +| `adaptive_cruise_control.use_time_compensation_to_calc_distance` | bool | 前方車両との距離を計算するために時間補正を使用する | +| `adaptive_cruise_control.p_coefficient_positive` | double | PID制御における係数P(target_dist - current_dist >=0の場合に使用)[-] | +| `adaptive_cruise_control.p_coefficient_negative` | double | PID制御における係数P(target_dist - current_dist <0の場合に使用)[-] | +| `adaptive_cruise_control.d_coefficient_positive` | double | PID制御における係数D(delta_dist >=0の場合に使用)[-] | +| `adaptive_cruise_control.d_coefficient_negative` | double | PID制御における係数D(delta_dist <0の場合に使用)[-] | +| `adaptive_cruise_control.object_polygon_length_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の長さを延長する距離 [m] | +| `adaptive_cruise_control.object_polygon_width_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の幅を延長する距離 [m] | +| `adaptive_cruise_control.valid_estimated_vel_diff_time` | double | 点群を使用した速度推定で連続したポイントとして扱われる最大時間差 [s] | +| `adaptive_cruise_control.valid_vel_que_time` | double | 点群を使用した速度推定で使用される情報の時間幅 [s] | +| `adaptive_cruise_control.valid_estimated_vel_max` | double | 点群を使用した速度推定で有効な速度推定結果の最大値 [m/s] | +| `adaptive_cruise_control.valid_estimated_vel_min` | double | 点群を使用した速度推定で有効な速度推定結果の最小値 [m/s] | +| `adaptive_cruise_control.thresh_vel_to_stop` | double | ACCにより計算された最大速度がこの速度よりも低い場合、停止線を埋め込む [m/s] | +| `adaptive_cruise_control.lowpass_gain_of_upper_velocity` | double | 目標速度のローパスゲイン | +| `adaptive_cruise_control.use_rough_velocity_estimation:` | bool | 速度推定に失敗した場合にラフに速度を推定する(osp.use_predicted_objectsがfalseの場合にのみ有効) | +| `adaptive_cruise_control.rough_velocity_rate` | double | ラフな速度推定では、前方の車両の速度は自車位置の現在の速度 * この値として推定される | + +### フローチャート + ```plantuml @startuml @@ -336,86 +318,76 @@ stop @enduml ``` -(\*1) The target vehicle point is calculated as a closest obstacle PointCloud from ego along the trajectory. +**自動運転ソフトウェア** + +**内容** + +**目標車両点の算出** -(\*2) The sources of velocity estimation can be changed by the following ROS parameters. +(\*1) 目標車両点は、経路に沿った自己位置からの最近傍障害物点群として算出されます。 + +(\*2) 速度推定のソースは、以下の ROS パラメータで変更できます。 - `adaptive_cruise_control.use_object_to_estimate_vel` - `adaptive_cruise_control.use_pcl_to_estimate_vel` -This module works only when the target point is found in the detection area of the `Obstacle stop planner` module. +**目標車両点の速度推定** + +このモジュールは、「障害物停止プランナー」モジュールの検出領域内に目標点が検出された場合にのみ動作します。 + +このモジュールの最初の処理は、目標車両点の速度を推定することです。速度推定には、動的オブジェクトの速度情報または前のステップからの目標車両点の移動距離を使用します。 -The first process of this module is to estimate the velocity of the target vehicle point. The velocity estimation uses -the velocity information of dynamic objects or the travel distance of the target vehicle point from the previous step. -The dynamic object information is primal, and the travel distance estimation is used as a backup in case of the -perception failure. -If the target vehicle point is contained in the bounding box of a dynamic object geometrically, the velocity of the -dynamic object is used as the target point velocity. -Otherwise, the target point velocity is calculated by the travel distance of the target point from the previous step; -that is `(current_position - previous_position) / dt`. Note that this travel distance based estimation fails when the -target point is detected in the first time (it mainly happens in the cut-in situation). To improve the stability of the -estimation, the median of the calculation result for several steps is used. +動的オブジェクト情報は一次的なものであり、移動距離推定は知覚障害時のバックアップとして使用されます。 -If the calculated velocity is within the threshold range, it is used as the target point velocity. +目標車両点が動的オブジェクトの境界ボックスに幾何学的に含まれている場合、動的オブジェクトの速度が目標点速度として使用されます。 -Only when the estimation is succeeded and the estimated velocity exceeds the value of `obstacle_stop_velocity_thresh_*`, -the distance to the pointcloud from self-position is calculated. For prevent chattering in the mode -transition, `obstacle_velocity_thresh_to_start_acc` is used for the threshold to start adaptive cruise, -and `obstacle_velocity_thresh_to_stop_acc` is used for the threshold to stop adaptive cruise. When the calculated -distance value exceeds the emergency distance $d\_{emergency}$ calculated by emergency_stop parameters, target velocity -to insert is calculated. +それ以外の場合は、目標点速度は、前のステップからの目標点の移動距離によって計算されます。つまり、`(current_position - previous_position) / dt` です。この移動距離ベースの推定は、目標点が最初に検出されたときに失敗することに注意してください(主に割り込み状況で発生します)。推定の安定性を向上させるために、複数のステップの計算結果のメディアンが使用されています。 -The emergency distance $d\_{emergency}$ is calculated as follows. +計算された速度がしきい値範囲内であれば、目標点速度として使用されます。 + +**目標車両点への追従** + +推定が成功し、推定速度が `obstacle_stop_velocity_thresh_*` の値を超えた場合のみ、自己位置から点群までの距離が計算されます。モード遷移時のチャタリングを防ぐために、`obstacle_velocity_thresh_to_start_acc` はアダプティブクルーズを開始するためのしきい値として使用され、`obstacle_velocity_thresh_to_stop_acc` はアダプティブクルーズを停止するためのしきい値として使用されます。計算された距離値が、緊急停止パラメータによって計算された緊急距離 $d\_{emergency}$ を超えると、挿入する目標速度が計算されます。 + +緊急距離 $d\_{emergency}$ は次のように計算されます。 $d_{emergency} = d_{margin_{emergency}} + t_{idling_{emergency}} \cdot v_{ego} + (-\frac{v_{ego}^2}{2 \cdot a_{ego_ {emergency}}}) - (-\frac{v_{obj}^2}{2 \cdot a_{obj_{emergency}}})$ -- $d_{margin_{emergency}}$ is a minimum margin to the obstacle pointcloud. The value of $d_{margin_{emergency}}$ depends - on the parameter `min_dist_stop` -- $t_{idling_{emergency}}$ is a supposed idling time. The value of $t_{idling_{emergency}}$ depends on the - parameter `emergency_stop_idling_time` -- $v_{ego}$ is a current velocity of own vehicle -- $a_{ego_{_{emergency}}}$ is a minimum acceleration (maximum deceleration) of own vehicle. The value of $a_{ego_{_ - {emergency}}}$ depends on the parameter `emergency_stop_acceleration` -- $v_{obj}$ is a current velocity of obstacle pointcloud. -- $a_{obj_{_{emergency}}}$ is a supposed minimum acceleration of obstacle pointcloud. The value of $a_{obj_{_ - {emergency}}}$ depends on the parameter `obstacle_emergency_stop_acceleration` -- \*Above $X_{_{emergency}}$ parameters are used only in emergency situation. - -The target velocity is determined to keep the distance to the obstacle pointcloud from own vehicle at the standard -distance $d\_{standard}$ calculated as following. Therefore, if the distance -to the obstacle pointcloud is longer than standard distance, The target velocity becomes higher than the current -velocity, and vice versa. For keeping the distance, a PID controller is used. +- $d_{margin_{emergency}}$ は、障害物点群に対する最小マージンです。$d_{margin_{emergency}}$ の値は、パラメータ `min_dist_stop` に依存します。 +- $t_{idling_{emergency}}$ は、想定されるアイドリング時間です。$t_{idling_{emergency}}$ の値は、パラメータ `emergency_stop_idling_time` に依存します。 +- $v_{ego}$ は、自己車両の現在の速度です。 +- $a_{ego_{_{emergency}}}$ は、自己車両の最小加速度(最大減速)です。$a_{ego_{_ + {emergency}}}$ の値は、パラメータ `emergency_stop_acceleration` に依存します。 +- $v_{obj}$ は、障害物点群の現在の速度です。 +- $a_{obj_{_{emergency}}}$ は、障害物点群の想定される最小加速度です。$a_{obj_{_ + {emergency}}}$ の値は、パラメータ `obstacle_emergency_stop_acceleration` に依存します。 +- \*上記の $X_{_{emergency}}$ パラメータは、緊急時のみ使用されます。 + +目標速度は、障害物点群から自己車両までの距離を計算された標準距離 $d\_{standard}$ に維持するように決定されます。したがって、障害物点群までの距離が標準距離よりも長い場合、目標速度は現在の速度よりも高くなり、その逆も同様です。距離を維持するために、PID 制御器が使用されます。 $d_{standard} = d_{margin_{standard}} + t_{idling_{standard}} \cdot v_{ego} + (-\frac{v_{ego}^2}{2 \cdot a_{ego_ {standard}}}) - (-\frac{v_{obj}^2}{2 \cdot a_{obj_{standard}}})$ -- $d_{margin_{standard}}$ is a minimum margin to the obstacle pointcloud. The value of $d_{margin_{standard}}$ depends - on the parameter `min_dist_stop` -- $t_{idling_{standard}}$ is a supposed idling time. The value of $t_{idling_{standard}}$ depends on the - parameter `standard_stop_idling_time` -- $v_{ego}$ is a current velocity of own vehicle -- $a_{ego_{_{standard}}}$ is a minimum acceleration (maximum deceleration) of own vehicle. The value of $a_{ego_{_ - {standard}}}$ depends on the parameter `min_standard_acceleration` -- $v_{obj}$ is a current velocity of obstacle pointcloud. -- $a_{obj_{_{standard}}}$ is a supposed minimum acceleration of obstacle pointcloud. The value of $a_{obj_{_ - {standard}}}$ depends on the parameter `obstacle_min_standard_acceleration` -- \*Above $X_{_{standard}}$ parameters are used only in non-emergency situation. +- $d_{margin_{standard}}$ は、障害物点群に対する最小マージンです。$d_{margin_{standard}}$ の値は、パラメータ `min_dist_stop` に依存します。 +- $t_{idling_{standard}}$ は、想定されるアイドリング時間です。$t_{idling_{standard}}$ の値は、パラメータ `standard_stop_idling_time` に依存します。 + +- $a_{ego_{_{標準}}}$ は自車の最小加速度(最大減速度)です。$a_{ego_{_ + {標準}}}$ の値はパラメーター `min_standard_acceleration` に依存します。 +- $v_{obj}$ は障害物の点群の現在の速度です。 +- $a_{obj_{_{標準}}}$ は障害物の点群の想定される最小加速度です。$a_{obj_{_ + {標準}}}$ の値はパラメーター `obstacle_min_standard_acceleration` に依存します。 +- \*上記の $X_{_{標準}}$ パラメーターは非緊急状態でのみ使用されます。 ![adaptive_cruise](./docs/adaptive_cruise.drawio.svg) -If the target velocity exceeds the value of `thresh_vel_to_stop`, the target velocity is embedded in the trajectory. +ターゲット速度が `thresh_vel_to_stop` の値を超えた場合、ターゲット速度が軌道に埋め込まれます。 + +## 制限事項 -## Known Limits +- `自適巡航制御` モジュールにより埋め込まれた目標速度に従って車が動くかどうかは、速度計画モジュールに大きく依存しています。速度計画モジュールが更新された場合は、可能な限り車両の挙動に注意し、常にオーバーライドの準備をしてください。 -- It is strongly depends on velocity planning module whether or not it moves according to the target speed embedded - by `Adaptive Cruise Controller` module. If the velocity planning module is updated, please take care of the vehicle's - behavior as much as possible and always be ready for overriding. +- `自適巡航制御` の速度推定アルゴリズムは、オブジェクト追跡モジュールに依存しています。オブジェクト追跡が失敗したり、追跡結果が誤っている場合、車両が危険な挙動をする可能性があることに注意してください。 -- The velocity estimation algorithm in `Adaptive Cruise Controller` is depend on object tracking module. Please note - that if the object-tracking fails or the tracking result is incorrect, it the possibility that the vehicle behaves - dangerously. +- 後退走行では動作しませんが、入力されたパスをそのまま公開します。後退走行時に障害物に対して停止したい場合は、[obstacle_cruise_planner](../autoware_obstacle_cruise_planner/README.md) を使用してください。 -- It does not work for backward driving, but publishes the path of the input as it is. Please - use [obstacle_cruise_planner](../autoware_obstacle_cruise_planner/README.md) if you want to stop against an obstacle when - backward driving. diff --git a/planning/autoware_path_optimizer/README.md b/planning/autoware_path_optimizer/README.md index 9222e5d32ea7d..1fe72eedbd6c0 100644 --- a/planning/autoware_path_optimizer/README.md +++ b/planning/autoware_path_optimizer/README.md @@ -1,38 +1,103 @@ -# Path optimizer +# パスオプティマイザ -## Purpose +## 目的 -This package generates a trajectory that is kinematically-feasible to drive and collision-free based on the input path, drivable area. -Only position and orientation of trajectory are updated in this module, and velocity is just taken over from the one in the input path. +このパッケージは、入力パスと走行可能エリアに基づいて、運転可能な運動学的可能性のある経路と衝突のない経路を生成します。 +このモジュールでは、経路の位置と姿勢のみが更新され、速度は入力パス内の速度を引き継ぎます。 -## Feature +## 特徴 -This package is able to +このパッケージは、以下のことができます。 -- make the trajectory inside the drivable area as much as possible - - NOTE: Static obstacles to avoid can be removed from the drivable area. -- insert stop point before the planned footprint will be outside the drivable area +- 経路を可能な限り走行可能エリア内に収める + - 注: 回避すべき静止障害物は走行可能エリアから削除できます。 +- 計画されたフットプリントが走行可能エリア外になる前に停止点を挿入する -Note that the velocity is just taken over from the input path. +速度は入力パスから引き継がれることに注意してください。 -## Inputs / Outputs +## 入出力 -### input +### 入力 -| Name | Type | Description | -| ------------------ | ------------------------------- | -------------------------------------------------- | -| `~/input/path` | autoware_planning_msgs/msg/Path | Reference path and the corresponding drivable area | -| `~/input/odometry` | nav_msgs/msg/Odometry | Current Velocity of ego vehicle | +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------------- | ------------------------------------------------------ | +| `~/input/path` | autoware_planning_msgs/msg/Path | 参照パスと対応する走行可能領域 | +| `~/input/odometry` | nav_msgs/msg/Odometry | 自車の現在の速度 | -### output +### 出力 -| Name | Type | Description | -| --------------------- | ------------------------------------- | ----------------------------------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | Optimized trajectory that is feasible to drive and collision-free | +**自動運転ソフトウェア** -## Flowchart +## 計画(Planning)コンポーネント + +**動作** + +計画コンポーネントは、センサーからのデータに基づき、自律車両の走行経路を決定します。以下の要素を考慮します。 + +- 環境マップ +- 自車位置 +- 障害物 +- 交通規則 + +計画コンポーネントは、次のような判断を行います。 + +- 走行する経路 +- 目的地への速度と加速度の調整 +- 障害物の回避 +- 交通規制への遵守 + +## 経路検索アルゴリズム + +計画コンポーネントは、次の経路検索アルゴリズムを使用します。 + +- *Dijkstra法* +- *A*法 + +## 経路最適化 + +計画コンポーネントは、以下の基準に基づいて経路を最適化します。 + +- 走行距離 +- 所要時間 +- 燃料消費 +- 安全性 + +## 障害物回避 + +計画コンポーネントは、以下の方法で障害物を回避します。 + +- 障害物検知 +- 最小の『速度逸脱量』と『加速度逸脱量』が発生する動作の算出 +- 安全な経路への再計画 + +## 交通規制への遵守 + +計画コンポーネントは、交通規制を遵守するように動作します。 + +- 速度制限の遵守 +- 停止線の遵守 +- 信号機の遵守 + +**Autowareでの実装** + +Autowareの計画コンポーネントは、ROSベースのアーキテクチャで実装されています。主要なノードは次のとおりです。 + +- Trajectory Planner +- Local Planner +- Behavior Planner + +**追加資料** + +- [Autoware 計画コンポーネントドキュメント](https://autoware.gitbooks.io/autoware.ai/content/wiki/planning.html) + +| 名称 | 種類 | 説明 | +| --------------------- | --------------------------------- | ---------------------------------------------------------------------- | +| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | 走行可能で衝突のない最適化された経路 | + +## フローチャート + +機能のフローチャートについては、以下で説明します。 -Flowchart of functions is explained here. ```plantuml @startuml @@ -76,7 +141,8 @@ stop ### createPlannerData -The following data for planning is created. +以下のデータがプランニング用に作成されます。 + ```cpp struct PlannerData @@ -93,128 +159,126 @@ struct PlannerData }; ``` -### check replan +### replanの確認 -When one of the following conditions are met, trajectory optimization will be executed. -Otherwise, previously optimized trajectory is used with updating the velocity from the latest input path. +以下の条件のいずれかが満たされた場合、軌道の最適化が実行されます。それ以外は、最新の入力パスの速度を使用して、以前に最適化された軌道を適用します。 max_path_shape_around_ego_lat_dist -- Ego moves longer than `replan.max_ego_moving_dist` in one cycle. (default: 3.0 [m]) - - This is for when the ego pose is set again in the simulation. -- Trajectory's end, which is considered as the goal pose, moves longer than `replan.max_goal_moving_dist` in one cycle. (default: 15.0 [ms]) - - When the goal pose is set again, the planning should be reset. -- Time passes. (default: 1.0 [s]) - - The optimization is skipped for a while sine the optimization is sometimes heavy. -- The input path changes laterally longer than `replan.max_path_shape_around_ego_lat_dist` in one cycle. (default: 2.0) +- エゴが1サイクルで`replan.max_ego_moving_dist`を超えて移動する場合(デフォルト:3.0 [m]) + - これは、シミュレーションでエゴの姿勢が再び設定された場合に使用されます。 +- 目標姿勢と見なされる軌道の終点が1サイクルで`replan.max_goal_moving_dist`を超えて移動する場合(デフォルト:15.0 [ms]) + - 目標姿勢が再び設定された場合、Planningはリセットする必要があります。 +- 時間の経過(デフォルト:1.0 [s]) + - 最適化は少しの間スキップされます。なぜなら、最適化は時々重いからです。 +- 入力パスが1サイクルで横方向に`replan.max_path_shape_around_ego_lat_dist`を超えて変更する場合(デフォルト:2.0) -### getModelPredictiveTrajectory +### getModelPredictiveTrajectoryの取得 -This module makes the trajectory kinematically-feasible and collision-free. -We define vehicle pose in the frenet coordinate, and minimize tracking errors by optimization. -This optimization considers vehicle kinematics and collision checking with road boundary and obstacles. -To decrease the computation cost, the optimization is applied to the shorter trajectory (default: 50 [m]) than the whole trajectory, and concatenate the remained trajectory with the optimized one at last. +このモジュールは、軌道を運動学的に実現可能かつ衝突のないものにします。 +フレネ座標系で車両の姿勢を定義し、最適化によって追従誤差を最小化します。 +この最適化では、車両の運動特性と道路境界や障害物との衝突チェックが考慮されます。 +計算コストを削減するために、最適化は全体の軌道より短い軌道(デフォルト:50 [m])に適用され、最後に残りの軌道と最適化された軌道を連結します。 -The trajectory just in front of the ego must not be changed a lot so that the steering wheel will be stable. -Therefore, we use the previously generated trajectory in front of the ego. +車両の真前の軌道はあまり変更しないようにする必要があります。そうすることでステアリングホイールが安定します。 +したがって、車両の前面に以前生成された軌道を適用します。 -Optimization center on the vehicle, that tries to locate just on the trajectory, can be tuned along side the vehicle vertical axis. -This parameter `mpt.kinematics.optimization center offset` is defined as the signed length from the back-wheel center to the optimization center. -Some examples are shown in the following figure, and it is shown that the trajectory of vehicle shape differs according to the optimization center even if the reference trajectory (green one) is the same. +車両上に設置され、軌道の真上に位置しようとする最適化の中心は、車両の縦軸に沿って調整できます。 +このパラメータ`mpt.kinematics.optimization center offset`は、後輪の中心から最適化の中心までの正負の距離として定義されます。 +次の図にいくつかの例を示します。参照軌道(緑色)が同じ場合でも、最適化の中心によって車両形状の軌跡が異なることがわかります。 ![mpt_optimization_offset](./media/mpt_optimization_offset.svg) -More details can be seen [here](docs/mpt.md). +詳細については[こちら](docs/mpt.md)を参照してください。 ### applyInputVelocity -Velocity is assigned in the optimized trajectory from the velocity in the behavior path. -The shapes of the optimized trajectory and the path are different, therefore the each nearest trajectory point to the path is searched and the velocity is interpolated with zero-order hold. +速度は、最適化された軌跡に、行動パスの速度から割り当てます。 +最適化された軌跡とパスの形状は異なるため、パスに対する最も近い各軌跡点が検索され、速度はゼロ次ホールドで補間されます。 ### insertZeroVelocityOutsideDrivableArea -Optimized trajectory is too short for velocity planning, therefore extend the trajectory by concatenating the optimized trajectory and the behavior path considering drivability. -Generated trajectory is checked if it is inside the drivable area or not, and if outside drivable area, output a trajectory inside drivable area with the behavior path or the previously generated trajectory. +最適化された軌道は速度計画には短すぎるため、走行可能性を考慮して最適化された軌道と行動パスを連結することで軌道を延長します。 +生成された軌道は走行可能領域内にあるかどうかがチェックされ、走行可能領域外にある場合は、走行可能領域内の軌道を出力するか、行動パスまたは以前に生成された軌道を適用します。 + +上記のように、行動パスは2つのパスに分割されます。1つは最適化用、もう1つは残りの部分です。最初のパスが最適化された軌道になり、2番目のパスは単に変換されます。走行可能領域内の軌道は次のように計算されます。 + +- 最適化された軌道が**走行可能領域内**で、残りの軌道が走行可能領域内/外にある場合 + - 出力軌道はその2つの軌道の連結になります。 + - この場合、残りの軌道が走行可能領域内にあるか外にあるかは考慮しません。一般的に走行可能領域外にあるため(特に狭い道で)ですが、後続のモジュールにできるだけ長い軌道を渡したいと考えています。 +- 最適化された軌道が**走行可能領域外**で、残りの軌道が走行可能領域内/外にある場合 + - 以前生成された軌跡が**記憶されている**場合は、 + - 出力軌道は、以前に生成された軌道になり、走行可能領域外に出た最初にゼロ速度が挿入されます。 + - 以前生成された軌跡が**記憶されていない**場合は、 + - 出力軌道は、行動パスから変換された軌道のうち、走行可能領域外に出た最初にゼロ速度が挿入された部分になります。 -As described above, the behavior path is separated into two paths: one is for optimization and the other is the remain. The first path becomes optimized trajectory, and the second path just is transformed to a trajectory. Then a trajectory inside the drivable area is calculated as follows. +最適化の失敗は、最適化された軌道が走行可能領域外である場合と同じように処理されます。出力軌道は、次のサイクルの以前生成された軌跡として記憶されます。 -- If optimized trajectory is **inside the drivable area**, and the remained trajectory is inside/outside the drivable area, - - the output trajectory will be just concatenation of those two trajectories. - - In this case, we do not care if the remained trajectory is inside or outside the drivable area since generally it is outside the drivable area (especially in a narrow road), but we want to pass a trajectory as long as possible to the latter module. -- If optimized trajectory is **outside the drivable area**, and the remained trajectory is inside/outside the drivable area, - - and if the previously generated trajectory **is memorized**, - - the output trajectory will be the previously generated trajectory, where zero velocity is inserted to the point firstly going outside the drivable area. - - and if the previously generated trajectory **is not memorized**, - - the output trajectory will be a part of trajectory just transformed from the behavior path, where zero velocity is inserted to the point firstly going outside the drivable area. +_理由_ -Optimization failure is dealt with the same as if the optimized trajectory is outside the drivable area. -The output trajectory is memorized as a previously generated trajectory for the next cycle. +最適化したトラジェクトリが、最適化後に運転可能領域内に収まっているかどうかを確認する必要があります。 -_Rationale_ -In the current design, since there are some modelling errors, the constraints are considered to be soft constraints. -Therefore, we have to make sure that the optimized trajectory is inside the drivable area or not after optimization. +## 制限事項 -## Limitation +- 計算コストが高くなる場合があります。 +- 線形化などの近似により、一部の狭い道路はプランナーによって走行できません。 +- `behavior_path_planner` と `path_optimizer` のプランニングの役割が明確に定義されていません。どちらも障害物を回避できます。 -- Computation cost is sometimes high. -- Because of the approximation such as linearization, some narrow roads cannot be run by the planner. -- Roles of planning for `behavior_path_planner` and `path_optimizer` are not decided clearly. Both can avoid obstacles. +## 他の手法との比較 -## Comparison to other methods +運動学的実現可能性と衝突回避を満たすトラジェクトリ計画の問題には、解決が困難な 2 つの主な特性があります。1 つは非凸性、もう 1 つは高次元です。 +これらの特性に基づいて、一般的なプランニング手法の利点と欠点を調査します。最適化ベース、サンプリングベース、学習ベースの手法です。 -Trajectory planning problem that satisfies kinematically-feasibility and collision-free has two main characteristics that makes hard to be solved: one is non-convex and the other is high dimension. -Based on the characteristics, we investigate pros/cons of the typical planning methods: optimization-based, sampling-based, and learning-based method. +### 最適化ベースの手法 -### Optimization-based method +- 長所: 勾配降下を活用することで、高次元に対して比較的高速です。 +- 短所: 非凸問題では、多くの場合局所最小値に収束します。 -- pros: comparatively fast against high dimension by leveraging the gradient descent -- cons: often converge to the local minima in the non-convex problem +### サンプリングベースの手法 -### Sampling-based method +- 長所: グローバル最適化を実現します。 +- 短所: 特に複雑なケースでは計算コストが高くなります。 -- pros: realize global optimization -- cons: high computation cost especially in the complex case +### 学習ベースの手法 -### Learning-based method +- まだ研究中 -- under research yet +これらの利点と欠点に基づいて、まず最適化ベースのプランナーを選択しました。 +局所最小値に収束する欠点がありますが、問題をほぼ元の非凸問題と同じ凸問題に近似するための前処理によって、適切な解を得ることができます。 -Based on these pros/cons, we chose the optimization-based planner first. -Although it has a cons to converge to the local minima, it can get a good solution by the preprocessing to approximate the problem to convex that almost equals to the original non-convex problem. +## パラメーターの調整方法 -## How to Tune Parameters +### 狭い道路での運転可能性 -### Drivability in narrow roads +- `mpt.clearance.soft_clearance_from_road` を変更する + - このパラメーターは、トラジェクトリと道路の境界との間隔をどの程度確保する必要があるかを指定します。 + - 最適化のためのモデル誤差により、衝突回避などの制約は完全に満たされません。 + - このパラメーターを大きくすることで、狭い道路走行の問題が解決される場合があります。 12180 +- `mpt.kinematics.optimization_center_offset` を変更する -- modify `mpt.clearance.soft_clearance_from_road` - - This parameter describes how much margin to make between the trajectory and road boundaries. - - Due to the model error for optimization, the constraint such as collision-free is not fully met. - - By making this parameter larger, the is for narrow-road driving may be resolved. 12180 -- modify `mpt.kinematics.optimization_center_offset` + - このパラメーターによってベースリンクから前方へオフセットされた車両の位置が、基準経路を追従しようとします。 - - The point on the vehicle, offset forward with this parameter from the base link` tries to follow the reference path. +- フットプリントを一連の円を使用して近似する方法を変更または調整する。 + - [こちら](https://autowarefoundation.github.io/autoware.universe/main/planning/path_optimizer/docs/mpt/#collision-free) を参照してください。 + - 調整とは、円の半径の比率を変更することを意味します。 -- change or tune the method to approximate footprints with a set of circles. - - See [here](https://autowarefoundation.github.io/autoware.universe/main/planning/path_optimizer/docs/mpt/#collision-free) - - Tuning means changing the ratio of circle's radius. +### 計算時間 -### Computation time +- 検討中 -- under construction +### ロバスト性 -### Robustness +- MPT の前後のトラジェクトリがロバストでないかどうかを確認する + - MPT の前のトラジェクトリがロバストでない場合 + - MPT の後のトラジェクトリがロバストでない場合 + - `mpt.weight.steer_input_weight` または `mpt.weight.steer_rate_weight` を大きくする。これらは、トラジェクトリに沿ったステアリングホイールの安定性を表します。 -- Check if the trajectory before or after MPT is not robust - - if the trajectory before MPT is not robust - - if the trajectory after MPT is not robust - - make `mpt.weight.steer_input_weight` or `mpt.weight.steer_rate_weight` larger, which are stability of steering wheel along the trajectory. +### その他のオプション -### Other options +- `option.enable_calculation_time_info` は、各関数の計算時間と合計計算時間をターミナルで表示できるようにします。 +- `option.enable_outside_drivable_area_stop` は、生成された経路点が走行可能エリアの外に出る直前に停止できるようにします。 -- `option.enable_skip_optimization` skips MPT optimization. -- `option.enable_calculation_time_info` enables showing each calculation time for functions and total calculation time on the terminal. -- `option.enable_outside_drivable_area_stop` enables stopping just before the generated trajectory point will be outside the drivable area. +## デバッグ方法 -## How To Debug +デバッグ方法は [こちら](docs/debug.md) に記載されています。 -How to debug can be seen [here](docs/debug.md). diff --git a/planning/autoware_path_smoother/README.md b/planning/autoware_path_smoother/README.md index 3521ba754081f..8c41c46f338a3 100644 --- a/planning/autoware_path_smoother/README.md +++ b/planning/autoware_path_smoother/README.md @@ -1,11 +1,12 @@ -# Path Smoothing +# パススムージング -## Purpose +## 目的 -This package contains code to smooth a path or trajectory. +このパッケージには、パスや軌跡を滑らかにするコードが含まれています。 -## Features +## 機能 -### Elastic Band +### エラスティックバンド + +エラスティックバンドの詳細については、[こちら](docs/eb.md)を参照してください。 -More details about the elastic band can be found [here](docs/eb.md). diff --git a/planning/autoware_planning_test_manager/README.md b/planning/autoware_planning_test_manager/README.md index f4289d0d291a5..62a12699780c7 100644 --- a/planning/autoware_planning_test_manager/README.md +++ b/planning/autoware_planning_test_manager/README.md @@ -1,26 +1,27 @@ -# Autoware Planning Test Manager +# Autoware Planningテストマネージャ -## Background +## 背景 -In each node of the planning module, when exceptional input, such as unusual routes or significantly deviated ego-position, is given, the node may not be prepared for such input and could crash. As a result, debugging node crashes can be time-consuming. For example, if an empty trajectory is given as input and it was not anticipated during implementation, the node might crash due to the unaddressed exceptional input when changes are merged, during scenario testing or while the system is running on an actual vehicle. +異常な経路や大幅に乖離した自車位置などの例外的な入力がPlanningモジュール内の各ノードに与えられると、ノードはそのような入力を処理できない場合があり、クラッシュすることがあります。その結果、ノードのクラッシュをデバッグするには、時間がかかる場合があります。例えば、空の軌道が入力として与えられ、実装時に予想されていなかった場合、変更の統合時、シナリオテスト時、またはシステムが実際の車両で動作している間に、ノードは対処されていない例外的な入力によってクラッシュする可能性があります。 -## Purpose +## 目的 -The purpose is to provide a utility for implementing tests to ensure that node operates correctly when receiving exceptional input. By utilizing this utility and implementing tests for exceptional input, the purpose is to reduce bugs that are only discovered when actually running the system, by requiring measures for exceptional input before merging PRs. +例外的な入力を受信したときにノードが正しく動作することを保証するためのテストを実装するためのユーティリティを提供することが目的です。このユーティリティを利用して例外的な入力のテストを実装することにより、PRをマージする前に例外的な入力の対策を要求することで、システムを実際に実行したときにのみ発見されるバグを減らすことが目的です。 -## Features +## 機能 -### Confirmation of normal operation +### 通常動作の確認 -For the test target node, confirm that the node operates correctly and publishes the required messages for subsequent nodes. To do this, test_node publish the necessary messages and confirm that the node's output is being published. +テスト対象ノードについて、ノードが正しく動作し、後続のノードに必要なメッセージをパブリッシュすることを確認します。これを行うには、test\_nodeに必要なメッセージをパブリッシュし、ノードの出力が出力されていることを確認します。 -### Robustness confirmation for special inputs +### 特殊な入力のロバスト性確認 -After confirming normal operation, ensure that the test target node does not crash when given exceptional input. To do this, provide exceptional input from the test_node and confirm that the node does not crash. +通常動作を確認した後、例外的な入力が与えられたときにテスト対象ノードがクラッシュしないことを確認します。これを行うには、test\_nodeから例外的な入力を提供し、ノードがクラッシュしないことを確認します。 -(WIP) +(WIP) + +## 使用方法 -## Usage ```cpp @@ -68,25 +69,26 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) } ``` -## Implemented tests +## 実装されたテスト -| Node | Test name | exceptional input | output | Exceptional input pattern | +| ノード | テスト名 | 例外的入力 | 出力 | 例外的な入力パターン | | --------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | -------------- | ------------------------------------------------------------------------------------- | -| autoware_planning_validator | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| velocity_smoother | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| obstacle_cruise_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| obstacle_stop_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| obstacle_velocity_limiter | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| path_optimizer | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| scenario_selector | NodeTestWithExceptionTrajectoryLaneDrivingMode NodeTestWithExceptionTrajectoryParkingMode | trajectory | scenario | Empty, single point, path with duplicate points for scenarios:LANEDRIVING and PARKING | -| freespace_planner | NodeTestWithExceptionRoute | route | trajectory | Empty route | -| behavior_path_planner | NodeTestWithExceptionRoute NodeTestWithOffTrackEgoPose | route | route odometry | Empty route Off-lane ego-position | -| behavior_velocity_planner | NodeTestWithExceptionPathWithLaneID | path_with_lane_id | path | Empty path | +| autoware_planning_validator | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| velocity_smoother | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| obstacle_cruise_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| obstacle_stop_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| obstacle_velocity_limiter | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| path_optimizer | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| scenario_selector | NodeTestWithExceptionTrajectoryLaneDrivingMode NodeTestWithExceptionTrajectoryParkingMode | trajectory | scenario | LANEDRIVING および PARKING シナリオの空、単一ポイント、重複ポイントを含むパス | +| freespace_planner | NodeTestWithExceptionRoute | route | trajectory | 空のルート | +| behavior_path_planner | NodeTestWithExceptionRoute NodeTestWithOffTrackEgoPose | route | route odometry | 空のルート オフレーン自己位置 | +| behavior_velocity_planner | NodeTestWithExceptionPathWithLaneID | path_with_lane_id | path | 空のパス | -## Important Notes +## 重要な注意事項 -During test execution, when launching a node, parameters are loaded from the parameter file within each package. Therefore, when adding parameters, it is necessary to add the required parameters to the parameter file in the target node package. This is to prevent the node from being unable to launch if there are missing parameters when retrieving them from the parameter file during node launch. +テストの実行中、ノードを起動すると、パラメータはパッケージ内のパラメータファイルからロードされます。そのため、パラメータを追加する場合は、ノード起動時にパラメータファイルからパラメータを取得する場合にパラメータが不足してノードが起動できなくなるのを防ぐため、対象のノードパッケージ内のパラメータファイルに必要なパラメータを追加する必要があります。 -## Future extensions / Unimplemented parts +## 今後の拡張 / 未実装部分 (WIP) + diff --git a/planning/autoware_planning_topic_converter/README.md b/planning/autoware_planning_topic_converter/README.md index e5036c6c0903c..74e4d1851efa8 100644 --- a/planning/autoware_planning_topic_converter/README.md +++ b/planning/autoware_planning_topic_converter/README.md @@ -1,14 +1,15 @@ -# Planning Topic Converter +## Planningトピックコンバータ -## Purpose +## 目的 -This package provides tools that convert topic type among types are defined in . +このパッケージは、``で定義されている型間のトピック型変換を行うツールを提供します。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -### Usage example +### 使用例 + +このパッケージ内のツールは、合成可能なROS 2コンポーネントノードとして提供されるので、既存のプロセスにスポーンしたり、起動ファイルから起動したり、コマンドラインから呼び出すことができます。 -The tools in this package are provided as composable ROS 2 component nodes, so that they can be spawned into an existing process, launched from launch files, or invoked from the command line. ```xml @@ -22,13 +23,14 @@ The tools in this package are provided as composable ROS 2 component nodes, so t ``` -## Parameters +## パラメータ + +| 名前 | 種別 | 説明 | +| :------------- | :----- | :--------------------------------------- | +| `input_topic` | 文字列 | 入力トピック名 | +| `output_topic` | 文字列 | 出力トピック名 | -| Name | Type | Description | -| :------------- | :----- | :----------------- | -| `input_topic` | string | input topic name. | -| `output_topic` | string | output topic name. | +## 想定条件/既知の限界 -## Assumptions / Known limits +## 将来的に拡張予定の部分/未実装の部分 -## Future extensions / Unimplemented parts diff --git a/planning/autoware_planning_validator/README.md b/planning/autoware_planning_validator/README.md index 92c9b86c8b31c..8f68780e94144 100644 --- a/planning/autoware_planning_validator/README.md +++ b/planning/autoware_planning_validator/README.md @@ -1,87 +1,94 @@ -# Planning Validator +## Planning Validator -The `autoware_planning_validator` is a module that checks the validity of a trajectory before it is published. The status of the validation can be viewed in the `/diagnostics` and `/validation_status` topics. When an invalid trajectory is detected, the `autoware_planning_validator` will process the trajectory following the selected option: "0. publish the trajectory as it is", "1. stop publishing the trajectory", "2. publish the last validated trajectory". +`autoware_planning_validator` は、パブリッシュされる前に軌道が有効であることを確認するモジュールです。有効化のステータスは `/diagnostics` と `/validation_status` トピックで確認できます。無効な軌道が検出された場合、`autoware_planning_validator` は選択されたオプションに従って軌道を処理します: "0. 軌道そのままパブリッシュ", "1. 軌道のパブリッシュを停止", "2. 最後に検証された軌道をパブリッシュ". ![autoware_planning_validator](./image/planning_validator.drawio.svg) -## Supported features +## サポートしている機能 -The following features are supported for trajectory validation and can have thresholds set by parameters: +軌道検証でサポートしている機能は次の通りで、パラメータでしきい値を設定できます。 -- **Invalid field** : e.g. Inf, Nan -- **Trajectory points interval** : invalid if any of the distance of trajectory points is too large -- **Curvature** : invalid if the trajectory has too sharp turns that is not feasible for the given vehicle kinematics -- **Relative angle** : invalid if the yaw angle changes too fast in the sequence of trajectory points -- **Lateral acceleration** : invalid if the expected lateral acceleration/deceleration is too large -- **Longitudinal acceleration/deceleration** : invalid if the acceleration/deceleration in the trajectory point is too large -- **Steering angle** : invalid if the expected steering value is too large estimated from trajectory curvature -- **Steering angle rate** : invalid if the expected steering rate value is too large -- **Velocity deviation** : invalid if the planning velocity is too far from the ego velocity -- **Distance deviation** : invalid if the ego is too far from the trajectory -- **Longitudinal distance deviation** : invalid if the trajectory is too far from ego in longitudinal direction -- **Forward trajectory length** : invalid if the trajectory length is not enough to stop within a given deceleration +- **無効なフィールド** : 例: 無限大、NaN +- **軌道ポイント間隔** : 軌道ポイントの間隔が大きすぎる場合無効 +- **曲率** : 与えられた車両の運動特性上実行不可能なほど軌道に急カーブがある場合無効 +- **相対角度** : 軌道ポイントのシーケンスでヨー角が急激に変化した場合無効 +- **側方加速度** : 予想される側方加速度/減速度が大きすぎる場合無効 +- **縦方向加速度/減速度** : 軌道ポイントの加速度/減速度が大きすぎる場合無効 +- **ステアリング角度** : 軌道曲率から推定される予想ステアリング値が大きすぎる場合無効 +- **ステアリング角速度** : 予想ステアリング角速度値が大きすぎる場合無効 +- **速度偏差** : 計画速度が自車速度からかけ離れている場合無効 +- **距離偏差** : 自車が軌道から離れすぎている場合無効 +- **縦方向距離偏差** : 軌道が自車から縦方向に離れすぎている場合無効 +- **前方軌道長** : 与えられた減速度内で停止するため軌道長が十分でない場合無効 -The following features are to be implemented. +次の機能は実装される予定です。 -- **(TODO) TTC calculation** : invalid if the expected time-to-collision is too short on the trajectory +- **(TODO) TTC 計算** : 軌道上の予想時間交通距離が短すぎる場合無効 -## Inputs/Outputs +## 出力/入出力 -### Inputs +### 出力 -The `autoware_planning_validator` takes in the following inputs: +`autoware_planning_validator` は次の出力を出力します: +- **/diagnostics** : このモジュールの診断ステータスに関する情報 +- **/validation_status** : 軌道の検証ステータス -| Name | Type | Description | +### 入出力 + +`autoware_planning_validator` は次の入力を取ります: + +| 名称 | タイプ | 説明 | | -------------------- | --------------------------------- | ---------------------------------------------- | -| `~/input/kinematics` | nav_msgs/Odometry | ego pose and twist | -| `~/input/trajectory` | autoware_planning_msgs/Trajectory | target trajectory to be validated in this node | +| `~/input/kinematics` | nav_msgs/Odometry | 自車位置と速度 | +| `~/input/trajectory` | autoware_planning_msgs/Trajectory | 本ノードで検証するターゲット軌跡 | -### Outputs +### 出力 -It outputs the following: +次のものを出力します。 -| Name | Type | Description | +| 名称 | タイプ | 説明 | | ---------------------------- | ------------------------------------------ | ------------------------------------------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs/Trajectory | validated trajectory | -| `~/output/validation_status` | planning_validator/PlanningValidatorStatus | validator status to inform the reason why the trajectory is valid/invalid | -| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | diagnostics to report errors | +| `~/output/trajectory` | autoware_planning_msgs/Trajectory | 検証済みの走行軌跡 | +| `~/output/validation_status` | planning_validator/PlanningValidatorStatus | バリデータのステータスで、走行軌跡が有効/無効の理由を通知します | +| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告する診断 | + +## パラメータ -## Parameters +`autoware_planning_validator` には、以下のパラメータを設定できます。 -The following parameters can be set for the `autoware_planning_validator`: +### システムパラメータ -### System parameters +| 名前 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `invalid_trajectory_handling_type` | int | 無効な経路が見つかった場合の処理を設定します。
0: 無効でも経路を公開する
1: 経路の公開を停止する
2: 最後に検証済の経路を公開する。 | 0 | +| `publish_diag` | bool | 連続した無効な経路の数がこの閾値を超えると、DiagがERRORに設定されます。(例: threshold = 1の場合、たとえ経路が無効でも、次の経路が有効であればDiagはERRORになりません。) | true | +| `diag_error_count_threshold` | int | trueの場合、診断メッセージが公開されます。 | true | +| `display_on_terminal` | bool | エラーメッセージをターミナルに表示する | true | -| Name | Type | Description | Default value | -| :--------------------------------- | :--- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `invalid_trajectory_handling_type` | int | set the operation when the invalid trajectory is detected.
0: publish the trajectory even if it is invalid,
1: stop publishing the trajectory,
2: publish the last validated trajectory. | 0 | -| `publish_diag` | bool | the Diag will be set to ERROR when the number of consecutive invalid trajectory exceeds this threshold. (For example, threshold = 1 means, even if the trajectory is invalid, the Diag will not be ERROR if the next trajectory is valid.) | true | -| `diag_error_count_threshold` | int | if true, diagnostics msg is published. | true | -| `display_on_terminal` | bool | show error msg on terminal | true | +### アルゴリズムパラメータ -### Algorithm parameters +#### スレッショルド -#### Thresholds +インデックスが以下の閾値を超えた場合、入力軌跡は無効として検出されます。 -The input trajectory is detected as invalid if the index exceeds the following thresholds. +| 名前 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `thresholds.interval` | 数値 | 2つの近隣の経路ポイント間の距離の無効しきい値 [`m`] | 100.0 | +| `thresholds.relative_angle` | 数値 | 2つの近隣の経路ポイント間の相対角度の無効しきい値 [`rad`] | 2.0 | +| `thresholds.curvature` | 数値 | 各経路ポイントの曲率の無効しきい値 [`1/m`] | 1.0 | +| `thresholds.lateral_acc` | 数値 | 各経路ポイントの横加速度の無効しきい値 [`m/ss`] | 9.8 | +| `thresholds.longitudinal_max_acc` | 数値 | 各経路ポイントの最大縦加速度の無効しきい値 [`m/ss`] | 9.8 | +| `thresholds.longitudinal_min_acc` | 数値 | 各経路ポイントの最小縦減速度の無効しきい値 [`m/ss`] | -9.8 | +| `thresholds.steering` | 数値 | 各経路ポイントの操舵角の無効しきい値 [`rad`] | 1.414 | +| `thresholds.steering_rate` | 数値 | 各経路ポイントの操舵角速度の無効しきい値 [`rad/s`] | 10.0 | +| `thresholds.velocity_deviation` | 数値 | エゴの速度とエゴに最も近い経路ポイント間の速度偏差の無効しきい値 [`m/s`] | 100.0 | +| `thresholds.distance_deviation` | 数値 | エゴの位置とエゴに最も近い経路ポイント間の距離偏差の無効しきい値 [`m`] | 100.0 | +| `parameters.longitudinal_distance_deviation` | 数値 | エゴの位置と経路間の縦方向距離偏差の無効しきい値 [`m`] | 2.0 | -| Name | Type | Description | Default value | -| :------------------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------------- | :------------ | -| `thresholds.interval` | double | invalid threshold of the distance of two neighboring trajectory points [m] | 100.0 | -| `thresholds.relative_angle` | double | invalid threshold of the relative angle of two neighboring trajectory points [rad] | 2.0 | -| `thresholds.curvature` | double | invalid threshold of the curvature in each trajectory point [1/m] | 1.0 | -| `thresholds.lateral_acc` | double | invalid threshold of the lateral acceleration in each trajectory point [m/ss] | 9.8 | -| `thresholds.longitudinal_max_acc` | double | invalid threshold of the maximum longitudinal acceleration in each trajectory point [m/ss] | 9.8 | -| `thresholds.longitudinal_min_acc` | double | invalid threshold of the minimum longitudinal deceleration in each trajectory point [m/ss] | -9.8 | -| `thresholds.steering` | double | invalid threshold of the steering angle in each trajectory point [rad] | 1.414 | -| `thresholds.steering_rate` | double | invalid threshold of the steering angle rate in each trajectory point [rad/s] | 10.0 | -| `thresholds.velocity_deviation` | double | invalid threshold of the velocity deviation between the ego velocity and the trajectory point closest to ego [m/s] | 100.0 | -| `thresholds.distance_deviation` | double | invalid threshold of the distance deviation between the ego position and the trajectory point closest to ego [m] | 100.0 | -| `parameters.longitudinal_distance_deviation` | double | invalid threshold of the longitudinal distance deviation between the ego position and the trajectory [m] | 2.0 | +#### パラメータ -#### Parameters +しきい値の計算などに使用されるパラメータ -For parameters used e.g. to calculate threshold. +| `parameters.forward_trajectory_length_acceleration` | double | この値は、必要な軌道長の算出に使用されます。 | -5.0 | +| `parameters.forward_trajectory_length_margin` | double | 自車が軌道の終点をわずかに過ぎてもエラーが発生しないようにするための、必要な軌道長の余白。 | 2.0 | -| `parameters.forward_trajectory_length_acceleration` | double | This value is used to calculate required trajectory length. | -5.0 | -| `parameters.forward_trajectory_length_margin` | double | A margin of the required trajectory length not to raise an error when the ego slightly exceeds the trajectory end point. | 2.0 | diff --git a/planning/autoware_remaining_distance_time_calculator/README.md b/planning/autoware_remaining_distance_time_calculator/README.md index 694c6764de91c..796ba78ced9dc 100644 --- a/planning/autoware_remaining_distance_time_calculator/README.md +++ b/planning/autoware_remaining_distance_time_calculator/README.md @@ -1,39 +1,40 @@ -## Remaining Distance and Time Calculator +## 残り距離と時間計算 -### Role +### 役割 -This package aims to provide mission remaining distance and remaining time calculations. +このパッケージは、ミッションの残り距離と所要時間の計算を提供することを目的としています。 -### Activation and Timing +### 起動とタイミング -- The calculations are activated once we have a route planned for a mission in Autoware. -- The calculations are triggered timely based on the `update_rate` parameter. +- Autowareのミッションでルートが計画されると、計算が起動されます。 +- 計算は`update_rate`パラメータに基づいて適時トリガーされます。 -### Module Parameters +### モジュールパラメータ -| Name | Type | Default Value | Explanation | +| 名称 | 型 | デフォルト値 | 説明 | | ------------- | ------ | ------------- | --------------------------- | -| `update_rate` | double | 10.0 | Timer callback period. [Hz] | +| `update_rate` | double | 10.0 | タイマーコールバック周期 [Hz] | -### Inner-workings +### 内部動作 -#### Remaining Distance Calculation +#### 距離残計算 -- The remaining distance calculation is based on getting the remaining shortest path between the current vehicle pose and goal pose using `lanelet2` routing APIs. -- The remaining distance is calculated by summing the 2D length of remaining shortest path, with exception to current lanelet and goal lanelet. - - For the current lanelet, the distance is calculated from the current vehicle position to the end of that lanelet. - - For the goal lanelet, the distance is calculated from the start of the lanelet to the goal pose in this lanelet. -- When there is only one lanelet remaining, the distance is calculated by getting the 2D distance between the current vehicle pose and goal pose. -- Checks are added to handle cases when current lanelet, goal lanelet, or routing graph are not valid to prevent node process die. - - In such cases when, last valid remaining distance and time are maintained. +- 距離残計算は、`lanelet2`ルーティングAPIを使用して現在の自車位置と目標位置の間の最短残経路を取得することによって行われます。 +- 距離残は、現在の車線と目標車線を除いた残最短経路の2D長さを合計することによって計算されます。 + - 現在の車線では、距離は現在の車両位置からその車線の終点までの距離で計算されます。 + - 目標車線では、距離は車線の開始位置からその車線内の目標位置までの距離で計算されます。 +- 車線が1つだけ残っているとき、距離は現在の自車位置と目標位置の間の2D距離を取得することによって計算されます。 +- ノードプロセスが終了しないように、現在の車線、目標車線、またはルーティンググラフが無効な場合を処理するためのチェックが追加されます。 + - そのようなケースでは、最後の有効な距離残と時間が保持されます。 -#### Remaining Time Calculation +#### 時間残計算 -- The remaining time currently depends on a simple equation of motion by getting the maximum velocity limit. -- The remaining distance is calculated by dividing the remaining distance by the maximum velocity limit. -- A check is added to the remaining time calculation to make sure that maximum velocity limit is greater than zero. This prevents division by zero or getting negative time value. +- 時間残は現在、最大速度制限を取得することによって、単純な運動方程式に依存しています。 +- 距離残は、距離残を最大速度制限で割ることによって計算されます。 +- 時間残計算には、最大速度制限が0より大きいことを確認するためのチェックが追加されます。これにより、ゼロによる除算や負の時間値の取得が防止されます。 -### Future Work +### 今後の作業 + +- 残最短経路を検索するために定期的にグラフを探索するのではなく、より効率的な方法で距離残を計算します。 +- より正確な時間残計算のために、より高度なモーションモデルに取り組みます。 -- Find a more efficient way for remaining distance calculation instead of regularly searching the graph for finding the remaining shortest path. -- Engage more sophisticated motion models for more accurate remaining time calculations. diff --git a/planning/autoware_route_handler/README.md b/planning/autoware_route_handler/README.md index bc62f06db7520..bc34558c6b7cb 100644 --- a/planning/autoware_route_handler/README.md +++ b/planning/autoware_route_handler/README.md @@ -1,18 +1,19 @@ -# route handler +# ルーハンドラ -`route_handler` is a library for calculating driving route on the lanelet map. +`route_handler` は、レイレットマップで走行経路を計算するためのライブラリです。 -## Unit Testing +## ユニットテスト -The unit testing depends on `autoware_test_utils` package. -`autoware_test_utils` is a library that provides several common functions to simplify unit test creating. +ユニットテストは `autoware_test_utils` パッケージに依存します。 +`autoware_test_utils` は、ユニットテストの作成を簡素化するいくつかの共通関数を提供するライブラリです。 ![route_handler_test](./images/route_handler_test.svg) -By default, route file is necessary to create tests. The following illustrates the route that are used in the unit test +既定では、テストを作成するために経路ファイルが必要です。以下は、ユニットテストで使用される経路を示しています。 -### Lane change test route +### レーンチェンジテスト経路 ![lane_change_test_route](./images/lane_change_test_route.svg) -- The route is based on map that can be obtained from `autoware_test_utils\test_map` +- この経路は `autoware_test_utils\test_map` から取得できるマップに基づいています。 + diff --git a/planning/autoware_rtc_interface/README.md b/planning/autoware_rtc_interface/README.md index 0446ca2d3ca4d..7f562b3a73606 100644 --- a/planning/autoware_rtc_interface/README.md +++ b/planning/autoware_rtc_interface/README.md @@ -1,12 +1,13 @@ -# RTC Interface +# RTCインタフェース -## Purpose +## 目的 -RTC Interface is an interface to publish the decision status of behavior planning modules and receive execution command from external of an autonomous driving system. +RTCインタフェースは、ビヘイビアプランニングモジュールの決定ステータスを公開し、自動運転システム外部からの実行コマンドを受け取るインターフェースです。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム + +### 使用例 -### Usage example ```c++ // Generate instance (in this example, "intersection" is selected) @@ -46,149 +47,157 @@ while (...) { rtc_interface.removeCooperateStatus(uuid); ``` -## Inputs / Outputs +## 入出力 + +### RTCInterface (コンストラクター) -### RTCInterface (Constructor) ```c++ autoware::rtc_interface::RTCInterface(rclcpp::Node & node, const std::string & name); ``` -#### Description +#### 説明 -A constructor for `autoware::rtc_interface::RTCInterface`. +`autoware::rtc_interface::RTCInterface` のコンストラクタです。 -#### Input +#### 入力 -- `node` : Node calling this interface -- `name` : Name of cooperate status array topic and cooperate commands service - - Cooperate status array topic name : `~/{name}/cooperate_status` - - Cooperate commands service name : `~/{name}/cooperate_commands` +- `node` : このインターフェースを呼び出すノード +- `name` : 協調ステータスの配列のトピック名と協調コマンドのサービス名 + - 協調ステータスの配列のトピック名 : `~/{name}/cooperate_status` + - 協調コマンドのサービス名 : `~/{name}/cooperate_commands` -#### Output +#### 出力 -An instance of `RTCInterface` +`RTCInterface` のインスタンス ### publishCooperateStatus + + ```c++ autoware::rtc_interface::publishCooperateStatus(const rclcpp::Time & stamp) ``` -#### Description +#### 説明 -Publish registered cooperate status. +登録された協調状態を公開します。 -#### Input +#### 入力 -- `stamp` : Time stamp +- `stamp` : タイムスタンプ -#### Output +#### 出力 -Nothing +なし ### updateCooperateStatus + ```c++ autoware::rtc_interface::updateCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid, const bool safe, const double start_distance, const double finish_distance, const rclcpp::Time & stamp) ``` -#### Description +#### 概要 -Update cooperate status corresponding to `uuid`. -If cooperate status corresponding to `uuid` is not registered yet, add new cooperate status. +`uuid` に対応する連携状態を更新します。 +`uuid` に対応する連携状態が未登録の場合は、新しい連携状態を追加します。 -#### Input +#### 入力 -- `uuid` : UUID for requesting module -- `safe` : Safety status of requesting module -- `start_distance` : Distance to the start object from ego vehicle -- `finish_distance` : Distance to the finish object from ego vehicle -- `stamp` : Time stamp +- `uuid` : リクエストするモジュールの UUID +- `safe` : リクエストするモジュールの安全状態 +- `start_distance` : 自車位置から開始オブジェクトまでの距離 +- `finish_distance` : 自車位置から終了オブジェクトまでの距離 +- `stamp` : タイムスタンプ -#### Output +#### 出力 -Nothing +なし ### removeCooperateStatus + ```c++ autoware::rtc_interface::removeCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid) ``` -#### Description +#### 説明 -Remove cooperate status corresponding to `uuid` from registered statuses. +登録済みステータスから `uuid` に相当する協調ステータスを削除する。 -#### Input +#### 入力 -- `uuid` : UUID for expired module +- `uuid` : 有効期限切れモジュールの UUID -#### Output +#### 出力 -Nothing +なし ### clearCooperateStatus + ```c++ autoware::rtc_interface::clearCooperateStatus() ``` -#### Description +#### 概要 -Remove all cooperate statuses. +すべての協調ステータスを削除します。 -#### Input +#### 入力 -Nothing +なし -#### Output +#### 出力 -Nothing +なし ### isActivated + ```c++ autoware::rtc_interface::isActivated(const unique_identifier_msgs::msg::UUID & uuid) ``` -#### Description +#### 説明 -Return received command status corresponding to `uuid`. +`uuid` に対応する受信コマンドステータスを返します。 -#### Input +#### 入力 -- `uuid` : UUID for checking module +- `uuid` : モジュールを確認するための UUID -#### Output +#### 出力 -If auto mode is enabled, return based on the safety status. -If not, if received command is `ACTIVATED`, return `true`. -If not, return `false`. +自動モードが有効な場合は、安全ステータスに基づいて返します。 +それ以外の場合は、受信コマンドが `ACTIVATED` の場合、`true` を返します。 +それ以外の場合は、`false` を返します。 ### isRegistered + ```c++ autoware::rtc_interface::isRegistered(const unique_identifier_msgs::msg::UUID & uuid) ``` -#### Description +#### 概要 + +`uuid`が登録されている場合に`true`を返します。 -Return `true` if `uuid` is registered. +#### 入力 -#### Input +- `uuid` : モジュールチェック用UUID -- `uuid` : UUID for checking module +#### 出力 -#### Output +`uuid`が登録されている場合に`true`を返します。登録されていない場合は`false`を返します。 -If `uuid` is registered, return `true`. -If not, return `false`. +## デバッグツール -## Debugging Tools +RTCインターフェース用の[RTC Replayer](https://autowarefoundation.github.io/autoware_tools/main/planning/autoware_rtc_replayer/)というデバッグツールがあります。 -There is a debugging tool called [RTC Replayer](https://autowarefoundation.github.io/autoware_tools/main/planning/autoware_rtc_replayer/) for the RTC interface. +## 想定/既知の制限 -## Assumptions / Known limits +## 将来の拡張/未実装の部分 -## Future extensions / Unimplemented parts diff --git a/planning/autoware_scenario_selector/README.md b/planning/autoware_scenario_selector/README.md index a0b78a572c734..65e4181869000 100644 --- a/planning/autoware_scenario_selector/README.md +++ b/planning/autoware_scenario_selector/README.md @@ -2,41 +2,42 @@ ## scenario_selector_node -`scenario_selector_node` is a node that switches trajectories from each scenario. +`scenario_selector_node`は、各シナリオの経路を切り替えるノードです。 -### Input topics +### 入力トピック -| Name | Type | Description | -| -------------------------------- | ------------------------------------- | ----------------------------------------------------- | -| `~input/lane_driving/trajectory` | autoware_planning_msgs::Trajectory | trajectory of LaneDriving scenario | -| `~input/parking/trajectory` | autoware_planning_msgs::Trajectory | trajectory of Parking scenario | -| `~input/lanelet_map` | autoware_map_msgs::msg::LaneletMapBin | | -| `~input/route` | autoware_planning_msgs::LaneletRoute | route and goal pose | -| `~input/odometry` | nav_msgs::Odometry | for checking whether vehicle is stopped | -| `is_parking_completed` | bool (implemented as rosparam) | whether all split trajectory of Parking are published | +| 名称 | タイプ | 説明 | +|---|---|---| +| `~input/lane_driving/trajectory` | `autoware_planning_msgs::Trajectory` | LaneDriving シナリオの軌道 | +| `~input/parking/trajectory` | `autoware_planning_msgs::Trajectory` | Parking シナリオの軌道 | +| `~input/lanelet_map` | `autoware_map_msgs::msg::LaneletMapBin` | | +| `~input/route` | `autoware_planning_msgs::LaneletRoute` | ルートと目標位置 | +| `~input/odometry` | `nav_msgs::Odometry` | 車両が停止しているかどうかを確認するため | +| `is_parking_completed` | ブール型(ROS のパラメータとして実装) | Parking の分割された軌跡がすべて公開されているかどうか | -### Output topics +### 出力トピック -| Name | Type | Description | +| 名前 | タイプ | 説明 | | -------------------- | ---------------------------------- | ---------------------------------------------- | -| `~output/scenario` | tier4_planning_msgs::Scenario | current scenario and scenarios to be activated | -| `~output/trajectory` | autoware_planning_msgs::Trajectory | trajectory to be followed | +| `~output/scenario` | tier4_planning_msgs::Scenario | 自車位置とアクティブ化されるシナリオ | +| `~output/trajectory` | autoware_planning_msgs::Trajectory | 通過する軌跡 | -### Output TFs +### 出力TFs -None +なし -### How to launch +### 起動方法 -1. Write your remapping info in `scenario_selector.launch` or add args when executing `roslaunch` +1. `scenario_selector.launch`でリマッピング情報を書き込むか、`roslaunch`を実行するときに引数を追加してください。 2. `roslaunch autoware_scenario_selector scenario_selector.launch` - - If you would like to use only a single scenario, `roslaunch autoware_scenario_selector dummy_scenario_selector_{scenario_name}.launch` + - 1つのシナリオのみを使用する場合は、`roslaunch autoware_scenario_selector dummy_scenario_selector_{シナリオ名}.launch` -### Parameters +### パラメータ {{ json_to_markdown("planning/autoware_scenario_selector/schema/scenario_selector.schema.json") }} -### Flowchart +### フローチャート + ```plantuml @startuml @@ -70,6 +71,7 @@ stop @enduml ``` + ```plantuml @startuml title Scenario Transition @@ -113,3 +115,4 @@ endif stop @enduml ``` + diff --git a/planning/autoware_static_centerline_generator/README.md b/planning/autoware_static_centerline_generator/README.md index 426d5487cf0cb..5f99e17ec0e44 100644 --- a/planning/autoware_static_centerline_generator/README.md +++ b/planning/autoware_static_centerline_generator/README.md @@ -1,83 +1,83 @@ -# Static Centerline Generator +# 静的センターライン生成器 -## Purpose +## 目的 -This package statically calculates the centerline satisfying path footprints inside the drivable area. +このパッケージは、走行可能な領域内にパスフットプリントを収めたセンターラインを静的に計算します。 -On narrow-road driving, the default centerline, which is the middle line between lanelets' right and left boundaries, often causes path footprints outside the drivable area. -To make path footprints inside the drivable area, we use online path shape optimization by [the autoware_path_optimizer package](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/autoware_path_optimizer/). +狭い道路での走行では、車線の左右の境界線の中間線であるデフォルトのセンターラインは、しばしばパスフットプリントを走行可能領域の外に出してしまいます。パスフットプリントを走行可能領域内に収めるために、[autoware_path_optimizerパッケージ](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/autoware_path_optimizer/)によるオンラインパス形状最適化を使用します。 -Instead of online path shape optimization, we introduce static centerline optimization. -With this static centerline optimization, we have following advantages. +オンラインパス形状最適化の代わりに、静的センターライン最適化を導入します。この静的センターライン最適化により、次の利点があります。 -- We can see the optimized centerline shape in advance. - - With the default autoware, path shape is not determined until the vehicle drives there. - - This enables offline path shape evaluation. -- We do not have to calculate a heavy and sometimes unstable path optimization since the path footprints are already inside the drivable area. +- 最適化されたセンターライン形状を事前に確認できます。 + - デフォルトのAutowareでは、車両がそこを走行するまでパス形状は決定されません。 + - これにより、オフラインパス形状評価が可能になります。 +- パスフットプリントが走行可能領域内にあるため、重く不安定なパス最適化を計算する必要がありません。 -## Use cases +## ユースケース -There are two interfaces to communicate with the centerline optimizer. +センターライン最適化と通信するためのインターフェイスが2つあります。 -### Vector Map Builder Interface +### ベクトルマップビルダーインターフェイス -Note: This function of Vector Map Builder has not been released. Please wait for a while. -Currently there is no documentation about Vector Map Builder's operation for this function. +注: Vector Map Builderのこの機能はリリースされていません。しばらくお待ちください。 +現在、この機能に関するベクターマップビルダーの操作に関するドキュメントはありません。 -The optimized centerline can be generated from Vector Map Builder's operation. +最適化されたセンターラインは、ベクターマップビルダーの操作から生成できます。 -We can run - -- path planning server -- http server to connect path planning server and Vector Map Builder +次のコマンドで``を指定して実行できます。 +```bash +# path planning server +rosrun autoware_path_optimizer path_optimizer_node --api_path /autoware_path_optimizer/path_optimizer +# http server to connect path planning server and Vector Map Builder +rosrun autoware_path_optimizer center_line_generator_node +``` -with the following command by designating `` ```sh ros2 launch autoware_static_centerline_generator run_planning_server.launch.xml vehicle_model:= ``` -FYI, port ID of the http server is 4010 by default. +FYI、HTTPサーバのポートIDはデフォルトで4010です。 -### Command Line Interface +### コマンドラインインターフェイス -The optimized centerline can be generated from the command line interface by designating +最適化されたcenterlineは、コマンドラインインターフェイスから指定することで生成できます。 - `` -- `` (not mandatory) +- ``(必須ではありません) - `` - `` - `` + ```sh ros2 launch autoware_static_centerline_generator static_centerline_generator.launch.xml run_backgrond:=false lanelet2_input_file_path:= lanelet2_output_file_path:= start_lanelet_id:= end_lanelet_id:= vehicle_model:= ``` -The default output map path containing the optimized centerline locates `/tmp/lanelet2_map.osm`. -If you want to change the output map path, you can remap the path by designating ``. +既定の最適化されたセンターラインを含む出力マップパスの場所は `/tmp/lanelet2_map.osm` です。出力マップパスを変更したい場合は、`` を指定することでパスを再マップできます。 -## Visualization +## 可視化 -When launching the path planning server, rviz is launched as well as follows. +パスプランニングサーバを起動すると、rviz も次のように起動します。 ![rviz](./media/rviz.png) -- The yellow footprints are the original ones from the osm map file. - - FYI: Footprints are generated based on the centerline and vehicle size. -- The red footprints are the optimized ones. -- The gray area is the drivable area. -- You can see that the red footprints are inside the drivable area although the yellow ones are outside. +- 黄色のフットプリントは osm マップファイルからのオリジナルのフットプリントです。 + - FYI: フットプリントはセンターラインと車輌のサイズに基づいて生成されます。 +- 赤色のフットプリントは最適化されたフットプリントです。 +- 灰色領域は走行可能な領域です。 +- 黄色のフットプリントは走行可能領域の外側にあるのに対し、赤いフットプリントは走行可能領域の内側にあることがわかります。 -### Unsafe footprints +### セーフティに欠けるフットプリント -Sometimes the optimized centerline footprints are close to the lanes' boundaries. -We can check how close they are with `unsafe footprints` marker as follows. +場合によっては、最適化されたセンターラインのフットプリントが車線の境界線に近くなります。`unsafe footprints` マーカーを使って、それらがどの程度近いかを確認することができます。 -Footprints' color depends on its distance to the boundaries, and text expresses its distance. +フットプリントの色は境界線からの距離によって決まり、テキストはこの距離を表します。 ![rviz](./media/unsafe_footprints.png) -By default, footprints' color is +既定では、フットプリントの色は次のようになります。 + +- 距離が 0.1 [m] 未満の場合: 赤 +- 距離が 0.2 [m] 未満の場合: 緑 +- 距離が 0.3 [m] 未満の場合: 青 -- when the distance is less than 0.1 [m] : red -- when the distance is less than 0.2 [m] : green -- when the distance is less than 0.3 [m] : blue diff --git a/planning/autoware_surround_obstacle_checker/README.md b/planning/autoware_surround_obstacle_checker/README.md index 1f4bf77145624..a36b233549697 100644 --- a/planning/autoware_surround_obstacle_checker/README.md +++ b/planning/autoware_surround_obstacle_checker/README.md @@ -1,12 +1,13 @@ -# Surround Obstacle Checker +## 周辺障害物チェッカー -## Purpose +## 目的 -This module subscribes required data (ego-pose, obstacles, etc), and publishes zero velocity limit to keep stopping if any of stop conditions are satisfied. +このモジュールは必要なデータ(自車位置、障害物など)をサブスクライブし、停止条件のいずれかが満たされた場合は停止するためにゼロ速度制限を発行します。 -## Inner-workings / Algorithms +## 内部処理/アルゴリズム + +### フローチャート -### Flow chart ```plantuml @startuml @@ -40,82 +41,137 @@ stop @enduml ``` +```markdown
-### Algorithms +### アルゴリズム + +### データチェック + +`surround_obstacle_checker` がラウンドポイントクラウド、ダイナミックオブジェクト、および現在の速度データを一切受信していないことを確認します。 + +### 最近方の物体の距離を取得する + +自車と最近方の物体間の距離を計算します。 +この関数では、自車のポリゴンとポイントクラウド内のすべての点とダイナミックオブジェクトのポリゴンとの間の最小距離を計算します。 + +### 停止要求 + +以下の条件がすべて満たされた場合、停止を計画します。 + +- 自車が停止していること +- 以下のいずれかの条件を満たしていること + 1. 最近方の障害物までの距離が以下の条件を満たしていること + - 状態が `State::PASS` の場合、距離が `surround_check_distance` 未満であること + - 状態が `State::STOP` の場合、距離が `surround_check_recover_distance` 未満であること + 2. 1 の条件を満たさない場合、1 の条件を満たしてから経過した時間が `state_clear_time` 未満であること + +### 状態 + +チャタリングを防ぐため、`surround_obstacle_checker` は 2 つの状態を管理します。 +停止条件のセクションで述べたように、状態に応じて周辺障害物を見つけるためのしきい値を変更することでチャタリングを防ぎます。 + +- `State::PASS` : 停止計画を解除する +- `State::STOP` :停止計画中 + +## 入出力 -### Check data +### 入力 +``` + +| 名前 | 種類 | 説明 | +| ------------------------------------------ | ------------------------------------------------- | --------------------------------------------------------------- | +| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避すべき障害物の点群 | +| `/perception/object_recognition/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 動的オブジェクト | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 現在のひねり | +| `/tf` | `tf2_msgs::msg::TFMessage` | TF | +| `/tf_static` | `tf2_msgs::msg::TFMessage` | 静的TF | + +### 出力 + +### 自動運転ソフトウェア + +このドキュメントでは、自動運転ソフトウェアのアーキテクチャとコンポーネントについて説明します。 + +### アーキテクチャ -Check that `surround_obstacle_checker` receives no ground pointcloud, dynamic objects and current velocity data. +自動運転ソフトウェアのアーキテクチャは、3つの主要モジュールで構成されています。 -### Get distance to nearest object +- **Perceptionモジュール:**センサーデータを処理し、周囲環境の認識を行います。 +- **Planningモジュール:**認識結果に基づき、走行経路を計画します。 +- **Controlモジュール:**計画された経路に従って、車両を制御します。 -Calculate distance between ego vehicle and the nearest object. -In this function, it calculates the minimum distance between the polygon of ego vehicle and all points in pointclouds and the polygons of dynamic objects. +### Planningモジュール -### Stop requirement +Planningモジュールは、以下の機能を担当します。 -If it satisfies all following conditions, it plans stopping. +- **経路計画:**目的地までの安全で効率的な経路の作成 +- **速度計画:**経路上の適切な速度の設定 +- **逸脱量制御:**速度逸脱量と加速度逸脱量の監視と調整 -- Ego vehicle is stopped -- It satisfies any following conditions - 1. The distance to nearest obstacle satisfies following conditions - - If state is `State::PASS`, the distance is less than `surround_check_distance` - - If state is `State::STOP`, the distance is less than `surround_check_recover_distance` - 2. If it does not satisfies the condition in 1, elapsed time from the time it satisfies the condition in 1 is less than `state_clear_time` +### Perceptionモジュール -### States +Perceptionモジュールは、以下の機能を担当します。 -To prevent chattering, `surround_obstacle_checker` manages two states. -As mentioned in stop condition section, it prevents chattering by changing threshold to find surround obstacle depending on the states. +- **物体検出:**LiDAR、カメラ、レーダーセンサーからのデータを処理して、物体(車両、歩行者、障害物など)を検出 +- **分類:**検出された物体のタイプ(車、トラック、歩行者など)を分類 +- **自車位置の推定:**車両の現在の位置と姿勢の推定 +- **周囲地図の構築:**周囲環境の静的および動的な地図の作成 -- `State::PASS` : Stop planning is released -- `State::STOP` :While stop planning +### Controlモジュール -## Inputs / Outputs +Controlモジュールは、以下の機能を担当します。 -### Input +- **ステアリング制御:**計画された経路に従ってステアリング角を制御 +- **アクセル/ブレーキ制御:**速度計画に基づき、アクセルとブレーキを制御 +- `post resampling`:リアルタイムセンサーデータによるフィードバックに基づいて、制御を動的に調整 -| Name | Type | Description | -| ---------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------ | -| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | Pointcloud of obstacles which the ego-vehicle should stop or avoid | -| `/perception/object_recognition/objects` | `autoware_perception_msgs::msg::PredictedObjects` | Dynamic objects | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | Current twist | -| `/tf` | `tf2_msgs::msg::TFMessage` | TF | -| `/tf_static` | `tf2_msgs::msg::TFMessage` | TF static | +### アーキテクチャの詳細 -### Output +各モジュール間の相互作用は、以下のようになります。 -| Name | Type | Description | +1. Perceptionモジュールは、物体検出結果と自車位置をPlanningモジュールに提供します。 +2. Planningモジュールは、Perceptionモジュールの入力に基づいて、経路と速度計画を作成します。 +3. Planningモジュールは、経路と速度計画をControlモジュールに送信します。 +4. Controlモジュールは、Planningモジュールの計画に従って車両を制御します。 +5. Controlモジュールは、Perceptionモジュールが提供するリアルタイムセンサーデータに基づいて、フィードバックをPlanningモジュールに提供します。 +6. Perceptionモジュールは、リアルタイムセンサーデータに基づいて、自身の認識結果を更新します。 + +### Autoware Stac + +Autoware Stacは、オープンソース自動運転ソフトウェアスタックであり、ここで説明したアーキテクチャに基づいています。Autoware Stacは、Perception、Planning、Controlモジュールを提供し、自動運転車の開発を簡素化します。 + +| 名前 | 型 | 説明 | | --------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------- | -| `~/output/velocity_limit_clear_command` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | Velocity limit clear command | -| `~/output/max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | Velocity limit command | -| `~/output/no_start_reason` | `diagnostic_msgs::msg::DiagnosticStatus` | No start reason | -| `~/output/stop_reasons` | `tier4_planning_msgs::msg::StopReasonArray` | Stop reasons | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | Marker for visualization | -| `~/debug/footprint` | `geometry_msgs::msg::PolygonStamped` | Ego vehicle base footprint for visualization | -| `~/debug/footprint_offset` | `geometry_msgs::msg::PolygonStamped` | Ego vehicle footprint with `surround_check_distance` offset for visualization | -| `~/debug/footprint_recover_offset` | `geometry_msgs::msg::PolygonStamped` | Ego vehicle footprint with `surround_check_recover_distance` offset for visualization | +| `~/output/velocity_limit_clear_command` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | +| `~/output/max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | +| `~/output/no_start_reason` | `diagnostic_msgs::msg::DiagnosticStatus` | スタート不可理由 | +| `~/output/stop_reasons` | `tier4_planning_msgs::msg::StopReasonArray` | 停止理由 | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | +| `~/debug/footprint` | `geometry_msgs::msg::PolygonStamped` | 自車ベースフットプリント(可視化用) | +| `~/debug/footprint_offset` | `geometry_msgs::msg::PolygonStamped` | `surround_check_distance`オフセット付き自車フットプリント(可視化用) | +| `~/debug/footprint_recover_offset` | `geometry_msgs::msg::PolygonStamped` | `surround_check_recover_distance`オフセット付き自車フットプリント(可視化用) | -## Parameters +## パラメータ {{ json_to_markdown("planning/autoware_surround_obstacle_checker/schema/surround_obstacle_checker.schema.json") }} -| Name | Type | Description | Default value | -| :----------------------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------- | -| `enable_check` | `bool` | Indicates whether each object is considered in the obstacle check target. | `true` for objects; `false` for point clouds | -| `surround_check_front_distance` | `bool` | If there are objects or point clouds within this distance in front, transition to the "exist-surrounding-obstacle" status [m]. | 0.5 | -| `surround_check_side_distance` | `double` | If there are objects or point clouds within this side distance, transition to the "exist-surrounding-obstacle" status [m]. | 0.5 | -| `surround_check_back_distance` | `double` | If there are objects or point clouds within this back distance, transition to the "exist-surrounding-obstacle" status [m]. | 0.5 | -| `surround_check_hysteresis_distance` | `double` | If no object exists within `surround_check_xxx_distance` plus this additional distance, transition to the "non-surrounding-obstacle" status [m]. | 0.3 | -| `state_clear_time` | `double` | Threshold to clear stop state [s] | 2.0 | -| `stop_state_ego_speed` | `double` | Threshold to check ego vehicle stopped [m/s] | 0.1 | -| `stop_state_entry_duration_time` | `double` | Threshold to check ego vehicle stopped [s] | 0.1 | -| `publish_debug_footprints` | `bool` | Publish vehicle footprint with/without offsets | `true` | - -## Assumptions / Known limits - -To perform stop planning, it is necessary to get obstacle pointclouds data. -Hence, it does not plan stopping if the obstacle is in blind spot. +| 名前 | タイプ | 説明 | デフォルト値 | +| :----------------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------- | +| `enable_check` | `bool` | 対象オブジェクトを障害物チェックのターゲットに含めてよいかどうかを示します。 | オブジェクト: `true`、点群: `false` | +| `surround_check_front_distance` | `bool` | この前方距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | +| `surround_check_side_distance` | `double` | この側面距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | +| `surround_check_back_distance` | `double` | この後方距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | +| `surround_check_hysteresis_distance` | `double` | `surround_check_xxx_distance`プラスこの追加距離内にオブジェクトが存在しない場合、"non-surrounding-obstacle"ステータスに遷移します。[m] | 0.3 | +| `state_clear_time` | `double` | 停止状態を解除するためのしきい値[s] | 2.0 | +| `stop_state_ego_speed` | `double` | 自己車両が停止したかどうかをチェックするためのしきい値[m/s] | 0.1 | +| `stop_state_entry_duration_time` | `double` | 自己車両が停止したかどうかをチェックするためのしきい値[s] | 0.1 | +| `publish_debug_footprints` | `bool` | オフセットあり/なしで車両のフットプリントを公開します。 | `true` | + +## 想定事項/既知の制限事項 + +停止計画を実行するには、障害物の点群データを取得する必要があります。 +したがって、障害物が死角にある場合は停止計画を実行しません。 + diff --git a/planning/autoware_velocity_smoother/README.md b/planning/autoware_velocity_smoother/README.md index 1a506d8612aa6..0bdfec51b1b6e 100644 --- a/planning/autoware_velocity_smoother/README.md +++ b/planning/autoware_velocity_smoother/README.md @@ -1,275 +1,403 @@ -# Velocity Smoother +## 速度スムージング -## Purpose +## 目的 -`autoware_velocity_smoother` outputs a desired velocity profile on a reference trajectory. -This module plans a velocity profile within the limitations of the velocity, the acceleration and the jerk to realize both the maximization of velocity and the ride quality. -We call this module `autoware_velocity_smoother` because the limitations of the acceleration and the jerk means the smoothness of the velocity profile. +`autoware_velocity_smoother` は、基準軌道の要望速度プロファイルを出力します。 +このモジュールは、速度、加速度、ジャークの限界内で、速度の最大化と乗り心地の両方を達成する速度プロファイルを計画します。 +加速とジャークの限界により速度プロファイルの滑らかさが保証されるため、このモジュールを `autoware_velocity_smoother` と呼びます。 -## Inner-workings / Algorithms +## 仕組み / アルゴリズム -### Flow chart +### フローチャート ![motion_velocity_smoother_flow](./media/motion_velocity_smoother_flow.drawio.svg) -#### Extract trajectory +#### 軌道抽出 -For the point on the reference trajectory closest to the center of the rear wheel axle of the vehicle, it extracts the reference path between `extract_behind_dist` behind and `extract_ahead_dist` ahead. +車両の後輪軸中心に最も近い基準軌道上の点を基準に、`extract_behind_dist` 後方と `extract_ahead_dist` 前方の間の基準パスを抽出します。 -#### Apply external velocity limit +#### 外部速度制限の適用 -It applies the velocity limit input from the external of `autoware_velocity_smoother`. -Remark that the external velocity limit is different from the velocity limit already set on the map and the reference trajectory. -The external velocity is applied at the position that it is able to reach the velocity limit with the deceleration and the jerk constraints set as the parameter. +`autoware_velocity_smoother` 外部からの速度制限を入力として適用します。 +外部速度制限は、マップと基準軌道にすでに設定されている速度制限とは異なることに注意してください。 +外部速度は、パラメータとして設定された減速とジャークの制約で速度制限に達することができる位置に適用されます。 -#### Apply stop approaching velocity +#### 停止接近速度の適用 -It applies the velocity limit near the stopping point. -This function is used to approach near the obstacle or improve the accuracy of stopping. +停止点付近に速度制限を適用します。 +この関数は、障害物に接近したり、停止の精度を向上させるために使用されます。 -#### Apply lateral acceleration limit +#### 横加速度制限の適用 -It applies the velocity limit to decelerate at the curve. -It calculates the velocity limit from the curvature of the reference trajectory and the maximum lateral acceleration `max_lateral_accel`. -The velocity limit is set as not to fall under `min_curve_velocity`. +カーブで減速するための速度制限を適用します。 +基準軌道の曲率と最大横加速度 `max_lateral_accel` から速度制限を計算します。 +速度制限は `min_curve_velocity` を下回らないように設定されています。 -Note: velocity limit that requests larger than `nominal.jerk` is not applied. In other words, even if a sharp curve is planned just in front of the ego, no deceleration is performed. +注: `nominal.jerk` より大きな減速を要求する速度制限は適用されません。つまり、自分の目の前に急カーブが計画されていても、減速は行われません。 -#### Apply steering rate limit +#### ステアリング レート制限の適用 -It calculates the desired steering angles of trajectory points. and it applies the steering rate limit. If the (`steering_angle_rate` > `max_steering_angle_rate`), it decreases the velocity of the trajectory point to acceptable velocity. +軌跡点の所望ステアリング角度を計算し、ステアリング レート制限を適用します。 (`steering_angle_rate` > `max_steering_angle_rate`) の場合、軌跡点の速度を許容可能な速度まで低下させます。 -#### Resample trajectory +#### 軌道の再サンプリング -It resamples the points on the reference trajectory with designated time interval. -Note that the range of the length of the trajectory is set between `min_trajectory_length` and `max_trajectory_length`, and the distance between two points is longer than `min_trajectory_interval_distance`. -It samples densely up to the distance traveled between `resample_time` with the current velocity, then samples sparsely after that. -By sampling according to the velocity, both calculation load and accuracy are achieved since it samples finely at low velocity and coarsely at high velocity. +基準軌道上の点を指定された時間間隔で再サンプリングします。 +軌道の長さの範囲は `min_trajectory_length` と `max_trajectory_length` の間で設定され、2 点間の距離は `min_trajectory_interval_distance` より長いことに注意してください。 +現在の速度で移動する距離まで `resample_time` ごとに密にサンプリングし、それ以降は疎にサンプリングします。 +速度に応じてサンプリングすることで、低速では細かく、高速では粗くサンプリングされるため、計算負荷と精度が向上します。 -#### Calculate initial state +#### 初期状態の計算 -Calculate initial values for velocity planning. -The initial values are calculated according to the situation as shown in the following table. +速度計画の初期値を計算します。 +状況に応じた初期値が次の表のように計算されます。 -| Situation | Initial velocity | Initial acceleration | +| シチュエーション | 初期速度 | 初期加速度 | | ------------------------------------------------------------- | ---------------------- | ---------------------- | -| First calculation | Current velocity | 0.0 | -| Engaging | `engage_velocity` | `engage_acceleration` | -| Deviate between the planned velocity and the current velocity | Current velocity | Previous planned value | -| Normal | Previous planned value | Previous planned value | +| 第1計算 | 自車速度 | 0.0 | +| エンゲージ | `エンゲージ速度` | `エンゲージ加速度` | +| 計画速度と自車速度の逸脱 | 自車速度 | 前回の計画値 | +| ノーマル | 前回の計画値 | 前回の計画値 | -#### Smooth velocity +#### 滑らかな速度 -It plans the velocity. -The algorithm of velocity planning is chosen from `JerkFiltered`, `L2` and `Linf`, and it is set in the launch file. -In these algorithms, they use OSQP[1] as the solver of the optimization. +速度を計画します。 +速度計画のアルゴリズムは `JerkFiltered`, `L2` および `Linf` から選択され、起動ファイルに設定します。 +これらのアルゴリズムでは、最適化のソルバーとして OSQP[1] を使用します。 ##### JerkFiltered -It minimizes the sum of the minus of the square of the velocity and the square of the violation of the velocity limit, the acceleration limit and the jerk limit. +速度の 2 乗と速度制限逸脱量、加速度制限逸脱量、ジャーク制限逸脱量の 2 乗の合計を最小化します。 ##### L2 -It minimizes the sum of the minus of the square of the velocity, the square of the the pseudo-jerk[2] and the square of the violation of the velocity limit and the acceleration limit. +速度の 2 乗、擬似ジャーク[2]の 2 乗、速度制限逸脱量および加速度制限逸脱量の 2 乗の合計を最小化します。 ##### Linf -It minimizes the sum of the minus of the square of the velocity, the maximum absolute value of the the pseudo-jerk[2] and the square of the violation of the velocity limit and the acceleration limit. +速度の 2 乗、擬似ジャーク[2] の絶対値の最大値および速度制限逸脱量と加速度制限逸脱量の 2 乗の合計を最小化します。 -#### Post process +#### 後処理 -It performs the post-process of the planned velocity. +計画速度の後処理を実行します。 -- Set zero velocity ahead of the stopping point -- Set maximum velocity given in the config named `max_velocity` -- Set velocity behind the current pose -- Resample trajectory (`post resampling`) -- Output debug data +- 停止地点より前の速度を 0 に設定します。 +- `max_velocity` という config で指定された最大速度を設定します。 +- 自車位置より後の速度を設定します。 +- 軌道を再サンプリングします(`'post resampling'`)。 +- デバッグデータを出力します。 -After the optimization, a resampling called `post resampling` is performed before passing the optimized trajectory to the next node. Since the required path interval from optimization may be different from the one for the next module, `post resampling` helps to fill this gap. Therefore, in `post resampling`, it is necessary to check the path specification of the following module to determine the parameters. Note that if the computational load of the optimization algorithm is high and the path interval is sparser than the path specification of the following module in the first resampling, `post resampling` would resample the trajectory densely. On the other hand, if the computational load of the optimization algorithm is small and the path interval is denser than the path specification of the following module in the first resampling, the path is sparsely resampled according to the specification of the following module. +最適化後、最適化された軌道を次のノードに渡す前に `'post resampling'` と呼ばれる再サンプリングを実行します。最適化に必要なパス間隔が次のモジュールのパス間隔と異なる場合があるため、`'post resampling'` はこのギャップを埋めます。したがって、`'post resampling'` では、パラメータを決定するために後続モジュールのパス仕様を確認する必要があります。最適化アルゴリズムの計算負荷が高く、最初の再サンプリングにおいてパス間隔が後続モジュールのパス仕様よりも疎な場合、`'post resampling'` は軌道を濃密に再サンプリングします。一方で、最適化アルゴリズムの計算負荷が小さく、最初の再サンプリングにおいてパス間隔が後続モジュールのパス仕様よりも密な場合、パスは後続モジュールの仕様に従って疎に再サンプリングされます。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------------------------------------------ | ----------------------------------- | ----------------------------- | -| `~/input/trajectory` | `autoware_planning_msgs/Trajectory` | Reference trajectory | -| `/planning/scenario_planning/max_velocity` | `std_msgs/Float32` | External velocity limit [m/s] | -| `/localization/kinematic_state` | `nav_msgs/Odometry` | Current odometry | -| `/tf` | `tf2_msgs/TFMessage` | TF | -| `/tf_static` | `tf2_msgs/TFMessage` | TF static | +| 名称 | 種別 | 説明 | +| --------------------------------------- | ------------------------------------ | -------------------------- | +| `~/input/trajectory` (*) | `autoware_planning_msgs/Trajectory` | 基準走行軌跡 | +| `/planning/scenario_planning/max_velocity` | `std_msgs/Float32` | 外部速度制限 [m/s] | +| `/localization/kinematic_state` | `nav_msgs/Odometry` | 自車位置 | +| `/tf` (*) | `tf2_msgs/TFMessage` | TF | +| `/tf_static` (*) | `tf2_msgs/TFMessage` | TF static | -### Output +## 自動運転ソフトウェアに関するドキュメント -| Name | Type | Description | -| -------------------------------------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------------- | -| `~/output/trajectory` | `autoware_planning_msgs/Trajectory` | Modified trajectory | -| `/planning/scenario_planning/current_max_velocity` | `std_msgs/Float32` | Current external velocity limit [m/s] | -| `~/closest_velocity` | `std_msgs/Float32` | Planned velocity closest to ego base_link (for debug) | -| `~/closest_acceleration` | `std_msgs/Float32` | Planned acceleration closest to ego base_link (for debug) | -| `~/closest_jerk` | `std_msgs/Float32` | Planned jerk closest to ego base_link (for debug) | -| `~/debug/trajectory_raw` | `autoware_planning_msgs/Trajectory` | Extracted trajectory (for debug) | -| `~/debug/trajectory_external_velocity_limited` | `autoware_planning_msgs/Trajectory` | External velocity limited trajectory (for debug) | -| `~/debug/trajectory_lateral_acc_filtered` | `autoware_planning_msgs/Trajectory` | Lateral acceleration limit filtered trajectory (for debug) | -| `~/debug/trajectory_steering_rate_limited` | `autoware_planning_msgs/Trajectory` | Steering angle rate limit filtered trajectory (for debug) | -| `~/debug/trajectory_time_resampled` | `autoware_planning_msgs/Trajectory` | Time resampled trajectory (for debug) | -| `~/distance_to_stopline` | `std_msgs/Float32` | Distance to stop line from current ego pose (max 50 m) (for debug) | -| `~/stop_speed_exceeded` | `std_msgs/Bool` | It publishes `true` if planned velocity on the point which the maximum velocity is zero is over threshold | +このドキュメントでは、Autowareの自動運転ソフトウェアの設計と実装について説明します。このソフトウェアは、Planningモジュール、Controlモジュール、Perceptionモジュールで構成されています。 -## Parameters +### Planningモジュール -### Constraint parameters +Planningモジュールは、自動運転車両の経路計画を行います。以下のような機能があります。 -| Name | Type | Description | Default value | -| :------------- | :------- | :--------------------------------------------- | :------------ | -| `max_velocity` | `double` | Max velocity limit [m/s] | 20.0 | -| `max_accel` | `double` | Max acceleration limit [m/ss] | 1.0 | -| `min_decel` | `double` | Min deceleration limit [m/ss] | -0.5 | -| `stop_decel` | `double` | Stop deceleration value at a stop point [m/ss] | 0.0 | -| `max_jerk` | `double` | Max jerk limit [m/sss] | 1.0 | -| `min_jerk` | `double` | Min jerk limit [m/sss] | -0.5 | +* マップデータに基づく経路の生成 +* 障害物回避 +* 交通ルール遵守 -### External velocity limit parameter +### Controlモジュール -| Name | Type | Description | Default value | -| :----------------------------------------- | :------- | :---------------------------------------------------- | :------------ | -| `margin_to_insert_external_velocity_limit` | `double` | margin distance to insert external velocity limit [m] | 0.3 | +Controlモジュールは、車両の制御を行います。以下のような機能があります。 -### Curve parameters +* ステアリング制御 +* 加速制御 +* ブレーキ制御 -| Name | Type | Description | Default value | -| :------------------------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `enable_lateral_acc_limit` | `bool` | To toggle the lateral acceleration filter on and off. You can switch it dynamically at runtime. | true | -| `max_lateral_accel` | `double` | Max lateral acceleration limit [m/ss] | 0.5 | -| `min_curve_velocity` | `double` | Min velocity at lateral acceleration limit [m/ss] | 2.74 | -| `decel_distance_before_curve` | `double` | Distance to slowdown before a curve for lateral acceleration limit [m] | 3.5 | -| `decel_distance_after_curve` | `double` | Distance to slowdown after a curve for lateral acceleration limit [m] | 2.0 | -| `min_decel_for_lateral_acc_lim_filter` | `double` | Deceleration limit to avoid sudden braking by the lateral acceleration filter [m/ss]. Strong limitation degrades the deceleration response to the appearance of sharp curves due to obstacle avoidance, etc. | -2.5 | +### Perceptionモジュール -### Engage & replan parameters +Perceptionモジュールは、車両周囲の環境を認識します。以下のような機能があります。 -| Name | Type | Description | Default value | +* LiDARデータの処理 +* カメラ画像の処理 +* レーダーデータの処理 + +### システムアーキテクチャ + +Autowareのシステムアーキテクチャは以下のような階層構造になっています。 + +* **Perception層:** Perceptionモジュールが含まれます。 +* **Planning層:** Planningモジュールが含まれます。 +* **Control層:** Controlモジュールが含まれます。 + +### データフロー + +システム内のデータフローは以下のような流れで行われます。 + +1. Perceptionモジュールは、周囲環境に関するデータを収集します。 +2. Planningモジュールは、Perceptionモジュールから収集したデータに基づく経路を生成します。 +3. Controlモジュールは、Planningモジュールから生成された経路に基づいて車両を制御します。 + +### 安全性機能 + +Autowareには、以下のような安全性機能を備えています。 + +* **障害物回避:** 障害物を検出し、自動的に回避します。 +* **衝突回避:** 車両との衝突を検出し、回避します。 +* **速度制限遵守:** 道路の速度制限を遵守します。 + +### パフォーマンス評価 + +Autowareのパフォーマンスは、以下のような指標に基づいて評価されます。 + +* **平均到達時間:** 目的地に到着するまでの平均時間 +* **走行距離:** 走行距離 +* **post resampling**障害物逸脱量 +* **post resampling**速度逸脱量 +* **post resampling**加速度逸脱量 + +### 自車位置の推定 + +Autowareでは、以下のような方法で自車位置を推定しています。 + +* GPS +* IMU +* オドメーター + +| 名前 | 型 | 説明 | +| ------------------------------------------------ | ------------------------------------ | -------------------------------------------------------------------------------------------------------------- | +| `~/output/trajectory` | `autoware_planning_msgs/Trajectory` | 変更された経路 | +| `/planning/scenario_planning/current_max_velocity` | `std_msgs/Float32` | 現在の外部速度制限 [m/s] | +| `~/closest_velocity` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画速度 (デバッグ用) | +| `~/closest_acceleration` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画加速度 (デバッグ用) | +| `~/closest_jerk` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画ジャーク (デバッグ用) | +| `~/debug/trajectory_raw` | `autoware_planning_msgs/Trajectory` | 抽出された経路 (デバッグ用) | +| `~/debug/trajectory_external_velocity_limited` | `autoware_planning_msgs/Trajectory` | 外部速度制限経路 (デバッグ用) | +| `~/debug/trajectory_lateral_acc_filtered` | `autoware_planning_msgs/Trajectory` | 横加速度制限経路 (デバッグ用) | +| `~/debug/trajectory_steering_rate_limited` | `autoware_planning_msgs/Trajectory` | ステアリング角速度制限経路 (デバッグ用) | +| `~/debug/trajectory_time_resampled` | `autoware_planning_msgs/Trajectory` | `post resampling`された経路 (デバッグ用) | +| `~/distance_to_stopline` | `std_msgs/Float32` | 自車位置から停止線までの距離 (最大 50 m) (デバッグ用) | +| `~/stop_speed_exceeded` | `std_msgs/Bool` | 最大速度が 0 の地点における計画速度がしきい値を超えている場合に `true` を公開する | + +## パラメータ + +### 制約パラメータ + +| 名称 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `max_velocity` | `double` | 最大速度制限 [m/s] | 20.0 | +| `max_accel` | `double` | 最大加速度制限 [m/ss] | 1.0 | +| `min_decel` | `double` | 最小減速度制限 [m/ss] | -0.5 | +| `stop_decel` | `double` | 停止点での停止減速度値 [m/ss] | 0.0 | +| `max_jerk` | `double` | 最大ジャーク制限 [m/sss] | 1.0 | +| `min_jerk` | `double` | 最小ジャーク制限 [m/sss] | -0.5 | + +### 外部速度制限パラメータ + +| 名称 | 型 | 説明 | デフォルト値 | +| :----------------------------------------- | :------- | :-------------------------------------------------- | :------------ | +| `margin_to_insert_external_velocity_limit` | `double` | 外部速度制限を挿入するマージン距離 [m] | 0.3 | + +### カーブパラメータ + +| 名前 | タイプ | 説明 | デフォルト値 | +|:-------------------------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------- | +| `enable_lateral_acc_limit` | `bool` | 横方向加速度フィルタのオンとオフを切り替える。実行時に動的に切り替えることができる。 | true | +| `max_lateral_accel` | `double` | 最大横方向加速度限界 [m/ss] | 0.5 | +| `min_curve_velocity` | `double` | 横方向加速度限界での最小速度 [m/ss] | 2.74 | +| `decel_distance_before_curve` | `double` | 横方向加速度限界のためにカーブの前で減速する距離 [m] | 3.5 | +| `decel_distance_after_curve` | `double` | 横方向加速度限界のためにカーブの後で減速する距離 [m] | 2.0 | +| `min_decel_for_lateral_acc_lim_filter` | `double` | 横方向加速度フィルタによる急ブレーキを避ける減速限界 [m/ss]。強い制限は、障害物回避などによる急カーブ出現に対する減速応答を低下させる。 | -2.5 | + +### 結合と再計画パラメータ + +| 名前 | タイプ | 説明 | デフォルト値 | | :----------------------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `replan_vel_deviation` | `double` | Velocity deviation to replan initial velocity [m/s] | 5.53 | -| `engage_velocity` | `double` | Engage velocity threshold [m/s] (if the trajectory velocity is higher than this value, use this velocity for engage vehicle speed) | 0.25 | -| `engage_acceleration` | `double` | Engage acceleration [m/ss] (use this acceleration when engagement) | 0.1 | -| `engage_exit_ratio` | `double` | Exit engage sequence to normal velocity planning when the velocity exceeds engage_exit_ratio x engage_velocity. | 0.5 | -| `stop_dist_to_prohibit_engage` | `double` | If the stop point is in this distance, the speed is set to 0 not to move the vehicle [m] | 0.5 | - -### Stopping velocity parameters - -| Name | Type | Description | Default value | -| :------------------ | :------- | :------------------------------------------------------------------------------------ | :------------ | -| `stopping_velocity` | `double` | change target velocity to this value before v=0 point [m/s] | 2.778 | -| `stopping_distance` | `double` | distance for the stopping_velocity [m]. 0 means the stopping velocity is not applied. | 0.0 | - -### Extraction parameters - -| Name | Type | Description | Default value | -| :-------------------- | :------- | :-------------------------------------------------------------- | :------------ | -| `extract_ahead_dist` | `double` | Forward trajectory distance used for planning [m] | 200.0 | -| `extract_behind_dist` | `double` | backward trajectory distance used for planning [m] | 5.0 | -| `delta_yaw_threshold` | `double` | Allowed delta yaw between ego pose and trajectory pose [radian] | 1.0472 | - -### Resampling parameters - -| Name | Type | Description | Default value | -| :----------------------------- | :------- | :----------------------------------------------------- | :------------ | -| `max_trajectory_length` | `double` | Max trajectory length for resampling [m] | 200.0 | -| `min_trajectory_length` | `double` | Min trajectory length for resampling [m] | 30.0 | -| `resample_time` | `double` | Resample total time [s] | 10.0 | -| `dense_dt` | `double` | resample time interval for dense sampling [s] | 0.1 | -| `dense_min_interval_distance` | `double` | minimum points-interval length for dense sampling [m] | 0.1 | -| `sparse_dt` | `double` | resample time interval for sparse sampling [s] | 0.5 | -| `sparse_min_interval_distance` | `double` | minimum points-interval length for sparse sampling [m] | 4.0 | - -### Resampling parameters for post process - -| Name | Type | Description | Default value | -| :---------------------------------- | :------- | :----------------------------------------------------- | :------------ | -| `post_max_trajectory_length` | `double` | max trajectory length for resampling [m] | 300.0 | -| `post_min_trajectory_length` | `double` | min trajectory length for resampling [m] | 30.0 | -| `post_resample_time` | `double` | resample total time for dense sampling [s] | 10.0 | -| `post_dense_dt` | `double` | resample time interval for dense sampling [s] | 0.1 | -| `post_dense_min_interval_distance` | `double` | minimum points-interval length for dense sampling [m] | 0.1 | -| `post_sparse_dt` | `double` | resample time interval for sparse sampling [s] | 0.1 | -| `post_sparse_min_interval_distance` | `double` | minimum points-interval length for sparse sampling [m] | 1.0 | - -### Limit steering angle rate parameters - -| Name | Type | Description | Default value | -| :------------------------------- | :------- | :------------------------------------------------------------------------------------ | :------------ | -| `enable_steering_rate_limit` | `bool` | To toggle the steer rate filter on and off. You can switch it dynamically at runtime. | true | -| `max_steering_angle_rate` | `double` | Maximum steering angle rate [degree/s] | 40.0 | -| `resample_ds` | `double` | Distance between trajectory points [m] | 0.1 | -| `curvature_threshold` | `double` | If curvature > curvature_threshold, steeringRateLimit is triggered [1/m] | 0.02 | -| `curvature_calculation_distance` | `double` | Distance of points while curvature is calculating [m] | 1.0 | - -### Weights for optimization +| `replan_vel_deviation` | `double` | 初期速度を再計画する速度逸脱量 [m/s] | 5.53 | +| `engage_velocity` | `double` | エンゲージ速度閾値 [m/s](軌跡速度がこの値より大きい場合、エンゲージ車両速度にこの速度を使用) | 0.25 | +| `engage_acceleration` | `double` | エンゲージ時使用する加速度 [m/ss] | 0.1 | +| `engage_exit_ratio` | `double` | 速度が engage_exit_ratio x engage_velocity を超えた場合、エンゲージシーケンスを通常の速度計画に戻す | 0.5 | +| `stop_dist_to_prohibit_engage` | `double` | 停止点がこの距離にある場合、車両が移動しないように速度を 0 に設定する [m] | 0.5 | + +### 停止速度パラメータ + +| 名 | タイプ | 説明 | デフォルト値 | +| :-------------- | :------- | :------------------------------------------------------------------------------------- | :------------ | +| `stopping_velocity` | `double` | v=0 点に達する前にターゲット速度をこの値に変更します [m/s] | 2.778 | +| `stopping_distance` | `double` | `stopping_velocity` の距離 [m]。0 は `stopping_velocity` が適用されないことを表します。 | 0.0 | + +### 抽出パラメータ + +| 名前 | 型 | 説明 | デフォルト値 | +| :-------------------- | :------- | :--------------------------------------------------------------- | :------------ | +| `extract_ahead_dist` | `double` | Planningに使用される前方軌跡距離 [m] | 200.0 | +| `extract_behind_dist` | `double` | Planningに使用される後方軌跡距離 [m] | 5.0 | +| `delta_yaw_threshold` | `double` | 自車位置と軌跡位置間の許容差変位角 [ラジアン] | 1.0472 | + +### 再サンプルパラメータ + +| 名前 | タイプ | 説明 | デフォルト値 | +| :----------------------------- | :------- | :---------------------------------------------------- | :------------ | +| `max_trajectory_length` | `double` | 軌道の再サンプリングのための最大長 [m] | 200.0 | +| `min_trajectory_length` | `double` | 軌道の再サンプリングのための最小長 [m] | 30.0 | +| `resample_time` | `double` | 再サンプリングの全体の時間 [s] | 10.0 | +| `dense_dt` | `double` | 緻密なサンプリングのための再サンプリングの時間間隔 [s] | 0.1 | +| `dense_min_interval_distance` | `double` | 緻密なサンプリングのための最小ポイント間距離 [m] | 0.1 | +| `sparse_dt` | `double` | まばらなサンプリングのための再サンプリングの時間間隔 [s] | 0.5 | +| `sparse_min_interval_distance` | `double` | まばらなサンプリングのための最小ポイント間距離 [m] | 4.0 | + +### 'post resampling'用の再サンプリングパラメーター + +| 名称 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `post_max_trajectory_length` | `double` | 再サンプリングの最大軌道長 [m] | 300.0 | +| `post_min_trajectory_length` | `double` | 再サンプリングの最小軌道長 [m] | 30.0 | +| `post_resample_time` | `double` | 密サンプリングの合計再サンプリング時間 [s] | 10.0 | +| `post_dense_dt` | `double` | 密サンプリングの再サンプリング時間間隔 [s] | 0.1 | +| `post_dense_min_interval_distance` | `double` | 密サンプリングの最小ポイント間隔 [m] | 0.1 | +| `post_sparse_dt` | `double` | 疎サンプリングの再サンプリング時間間隔 [s] | 0.1 | +| `post_sparse_min_interval_distance` | `double` | 疎サンプリングの最小ポイント間隔 [m] | 1.0 | + +### ステアリング角変化率パラメータの制限 + +``` +``` + +| 名称 | タイプ | 説明 | デフォルト値 | +| :------------------------------- | :------- | :--------------------------------------------------------------------------------------- | :------------ | +| `enable_steering_rate_limit` | `bool` | ステアリング速度フィルタのオン/オフを切り替えます。ランタイム時に動的に切り替えられます。 | true | +| `max_steering_angle_rate` | `double` | 最大ステアリング角度速度 [degree/s] | 40.0 | +| `resample_ds` | `double` | Trajectory `post resampling` ポイント間の距離 [m] | 0.1 | +| `curvature_threshold` | `double` | 曲率 > `curvature_threshold` の場合、`steeringRateLimit` がトリガされます [1/m] | 0.02 | +| `curvature_calculation_distance` | `double` | 曲率計算中のポイントの距離 [m] | 1.0 | + +### 最適化用の重み #### JerkFiltered -| Name | Type | Description | Default value | -| :-------------- | :------- | :------------------------------------ | :------------ | -| `jerk_weight` | `double` | Weight for "smoothness" cost for jerk | 10.0 | -| `over_v_weight` | `double` | Weight for "over speed limit" cost | 100000.0 | -| `over_a_weight` | `double` | Weight for "over accel limit" cost | 5000.0 | -| `over_j_weight` | `double` | Weight for "over jerk limit" cost | 1000.0 | +| 名称 | 型 | 説明 | デフォルト値 | +| :--------------- | :------ | :------------------------------------------- | :---------- | +| `jerk_weight` | `double` | ジャークの「滑らかさ」コストの重み | 10.0 | +| `over_v_weight` | `double` | 「速度制限逸脱」コストの重み | 100000.0 | +| `over_a_weight` | `double` | 「加速度逸脱量」コストの重み | 5000.0 | +| `over_j_weight` | `double` | 「ジャーク逸脱量」コストの重み | 1000.0 | #### L2 -| Name | Type | Description | Default value | +** Planning** +- トラジェクトリプランナーの最適化 +- 制約の追加によってトラジェクトリプランニングの安定化 +- クロスロードでの渋滞時の挙動の改善 +- Scalingレイヤーでの速度、加速度の逸脱量に関するチェックの追加 + +** Localization** +- ランタイムのパフォーマンスと精度を向上させるための改善 +- ランタイムの更新によってIMUのバイアス推定の精度を高める +- 障害物検知の性能を向上させるため、点群データを活用した道路のセグメンテーションの改善 + +** perception** +- 深層学習モデルを更新する +- 物体検出の精度を向上させるために、データセットの拡張 +- 『post resampling』におけるデータの品質向上 + +** Control** +- 車両の挙動をよりスムーズにする、ステアリング制御の改善 +- 加速度、ヨー変化率に関する制御の改善 +- Autowareのコントローラーのドメイン固有言語であるCLARAtyで、コントローラーの再実装 + +** reality sensors** +- LiDARのノイズ低減のために、データ処理パイプラインの最適化 +- カメラの露出制御の改善による、夜間や低照度条件における画像の品質向上 +- センサーキャリブレーションに関するパイプラインの改善 + +** visualization** +- 可視化ツールのアップグレードによる、より正確で情報が豊富な可視化 +- データの取得と処理の効率を高めるキャッシュメカニズムの追加 + +** core utils** +- シミュレーションとテスト用に、独自のデータ駆動型テストフレームワークの導入 +- より効率的な『post resampling』のための、ポイントクラウドライブラリの最適化 + +** self-driving** +- 自車位置推定の向上による、全体的なパフォーマンスの向上 +- パラメータの最適化による、様々な運転シナリオにおけるRobust性を向上 +- Autowareのアーキテクチャのモジュール化と拡張性向上 + +| 名前 | 型 | 説明 | デフォルト値 | | :------------------- | :------- | :--------------------------------- | :------------ | -| `pseudo_jerk_weight` | `double` | Weight for "smoothness" cost | 100.0 | -| `over_v_weight` | `double` | Weight for "over speed limit" cost | 100000.0 | -| `over_a_weight` | `double` | Weight for "over accel limit" cost | 1000.0 | +| `pseudo_jerk_weight` | `double` | 「スムーズさ」コストの重み | 100.0 | +| `over_v_weight` | `double` | 「速度制限超過」コストの重み | 100000.0 | +| `over_a_weight` | `double` | 「加速度制限超過」コストの重み | 1000.0 | #### Linf -| Name | Type | Description | Default value | -| :------------------- | :------- | :--------------------------------- | :------------ | -| `pseudo_jerk_weight` | `double` | Weight for "smoothness" cost | 100.0 | -| `over_v_weight` | `double` | Weight for "over speed limit" cost | 100000.0 | -| `over_a_weight` | `double` | Weight for "over accel limit" cost | 1000.0 | +**概要** + +Linfは、経路計画における障害物回避に用いられる Planning モジュールです。本モジュールは、自己位置と目標値に基づき、障害物を回避する経路を計画します。 + +**入力** + +* 自車位置 +* 目標位置 +* 周囲の障害物情報 + +**処理** + +1. **障害物マージ:** 周辺の障害物情報をマージして、障害物マップを作成します。 +2. **経路生成:** 障害物マップに基づき、障害物を回避する経路を生成します。 +3. **'post resampling':** 生成された経路をリサンプルして、滑らかな経路にします。 + +**出力** + +* 障害物回避経路 + +**制約事項** + +* **速度逸脱量:** 本モジュールは、速度逸脱量を考慮しません。 +* **加速度逸脱量:** 本モジュールは、加速度逸脱量を考慮しません。 +* **予測:** 本モジュールは、障害物の予測移動を考慮しません。 -### Others +**依存関係** -| Name | Type | Description | Default value | -| :---------------------------- | :------- | :------------------------------------------------------------------------------------------------ | :------------ | -| `over_stop_velocity_warn_thr` | `double` | Threshold to judge that the optimized velocity exceeds the input velocity on the stop point [m/s] | 1.389 | +* **障害物検出モジュール:** 障害物マップの作成に使用されます。 +* **経路生成モジュール:** 障害物回避経路の生成に使用されます。 - +| 名称 | 型 | 説明 | デフォルト値 | +| :---------------------------- | :------- | :------------------------------------------------------------------------------------------------------- | :------------ | +| `over_stop_velocity_warn_thr` | `double` | 停止点における最適化速度が入力速度を超えていると判断するための閾値 [m/s] | 1.389 | -## Assumptions / Known limits +## 仮定 / 既知の限界 -- Assume that the velocity limit or the stopping point is properly set at the point on the reference trajectory -- If the velocity limit set in the reference path cannot be achieved by the designated constraints of the deceleration and the jerk, decelerate while suppressing the velocity, the acceleration and the jerk deviation as much as possible -- The importance of the deviations is set in the config file +- 参照軌道上での速度制限または停止点が適切に設定されていると仮定する +- 指定された減速およびジャークの制約により参照経路に設定された速度制限が達成できない場合は、速度、加速度、ジャークの逸脱を可能な限り抑えつつ減速する +- 逸脱の重要度は設定ファイルで設定する -## (Optional) Error detection and handling +## (オプション) エラー検出および処理 -## (Optional) Performance characterization +## (オプション) パフォーマンスの特性評価 -## (Optional) References/External links +## (オプション) 参考文献/外部リンク [1] B. Stellato, et al., "OSQP: an operator splitting solver for quadratic programs", Mathematical Programming Computation, 2020, [10.1007/s12532-020-00179-2](https://link.springer.com/article/10.1007/s12532-020-00179-2). [2] Y. Zhang, et al., "Toward a More Complete, Flexible, and Safer Speed Planning for Autonomous Driving via Convex Optimization", Sensors, vol. 18, no. 7, p. 2185, 2018, [10.3390/s18072185](https://doi.org/10.3390/s18072185) -## (Optional) Future extensions / Unimplemented parts +## (オプション) 将来の拡張 / 未実装の部分 \ No newline at end of file diff --git a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md index b7869fd4911a6..67d9d755b4e4a 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md @@ -1,40 +1,41 @@ -# Avoidance by lane change design +# 車線変更設計による回避 -This is a sub-module to avoid obstacles by lane change maneuver. +これは車線変更操作で障害物を避けるサブモジュールです。 -## Purpose / Role +## 目的/役割 -This module is designed as one of the obstacle avoidance features and generates a lane change path if the following conditions are satisfied. +このモジュールは障害物回避機能の1つとして設計されており、以下の条件が満たされる場合に車線変更パスを生成します。 -- Exist lane changeable lanelet. -- Exist avoidance target objects on ego driving lane. +- 車線変更可能なレーンレットが存在する。 +- 自車走行車線上に回避対象物が存在する。 ![avoidance_by_lane_change](./images/avoidance_by_lane_change.svg) -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -Basically, this module is implemented by reusing the avoidance target filtering logic of the existing [Static Object Avoidance Module](../autoware_behavior_path_static_obstacle_avoidance_module/README.md) and the path generation logic of the [Normal Lane Change Module](../autoware_behavior_path_lane_change_module/README.md). On the other hand, the conditions under which the module is activated differ from those of a normal avoidance module. +基本的に、このモジュールは既存の[静的障害物回避モジュール](../autoware_behavior_path_static_obstacle_avoidance_module/README.md)の回避対象フィルタリングロジックと[通常車線変更モジュール](../autoware_behavior_path_lane_change_module/README.md)のパス生成ロジックを再利用して実装されています。一方、モジュールが有効になる条件は通常の回避モジュールとは異なります。 -Check that the following conditions are satisfied after the filtering process for the avoidance target. +回避対象のフィルタリング処理後、以下の条件が満たされていることを確認します。 -### Number of the avoidance target objects +### 回避対象オブジェクトの数 -This module is launched when the number of avoidance target objects on **EGO DRIVING LANE** is greater than `execute_object_num`. If there are no avoidance targets in the ego driving lane or their number is less than the parameter, the obstacle is avoided by normal avoidance behavior (if the normal avoidance module is registered). +このモジュールは、**自車走行車線**上の回避対象オブジェクトの数が`execute_object_num`より大きい場合に起動します。自車走行車線に回避対象がなかったり、その数がパラメータより少ない場合は、通常の回避挙動(通常の回避モジュールが登録されている場合)による障害物回避を行います。 ![trigger_1](./images/avoidance_by_lc_trigger_1.svg) -### Lane change end point condition +### 車線変更終了点条件 -Unlike the normal avoidance module, which specifies the shift line end point, this module does not specify its end point when generating a lane change path. On the other hand, setting `execute_only_when_lane_change_finish_before_object` to `true` will activate this module only if the lane change can be completed before the avoidance target object. +シフトライン終了点を指定する通常の回避モジュールとは異なり、このモジュールは車線変更パスを生成するときに終了点を指定しません。一方、`execute_only_when_lane_change_finish_before_object`を`true`に設定すると、車線変更を回避対象オブジェクトよりも前に完了できる場合にのみ、このモジュールが有効になります。 -Although setting the parameter to `false` would increase the scene of avoidance by lane change, it is assumed that sufficient lateral margin may not be ensured in some cases because the vehicle passes by the side of obstacles during the lane change. +パラメータを`false`に設定すると車線変更による回避の場面が増えますが、車線変更中に障害物の脇を通過するため、十分な横方向マージンが確保できない場合があります。 ![trigger_2](./images/avoidance_by_lc_trigger_2.svg) -## Parameters +## パラメータ + +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------- | ---- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------- | +| execute_object_num | [-] | int | 自車進行車線上の回避対象の数がこの値より多い場合、本モジュールが起動します。 | 1 | +| execute_object_longitudinal_margin | [m] | double | [おそらく未使用] 自車と回避対象の距離がこの値よりも長い場合のみ、本モジュールが起動します。 | 0.0 | +| execute_only_when_lane_change_finish_before_object | [-] | bool | このフラグが`true`に設定されている場合、本モジュールは車線変更の終了点が回避対象の **後ろではない** 場合にのみ起動します。 | true | -| Name | Unit | Type | Description | Default value | -| :------------------------------------------------- | ---- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| execute_object_num | [-] | int | Number of avoidance target objects on ego driving lane is greater than this value, this module will be launched. | 1 | -| execute_object_longitudinal_margin | [m] | double | [maybe unused] Only when distance between the ego and avoidance target object is longer than this value, this module will be launched. | 0.0 | -| execute_only_when_lane_change_finish_before_object | [-] | bool | If this flag set `true`, this module will be launched only when the lane change end point is **NOT** behind the avoidance target object. | true | diff --git a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md index 94784fe6771c0..f471437f6ca75 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md @@ -1,134 +1,136 @@ -# Avoidance module for dynamic objects +## 回避モジュール(動的物体用) -This module is under development. +本モジュールは開発中です。 -## Purpose / Role +## 目的 / 役割 -This module provides avoidance functions for vehicles, pedestrians, and obstacles in the vicinity of the ego's path in combination with the [autoware_path_optimizer](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_path_optimizer/). -Each module performs the following roles. -Dynamic Avoidance module cuts off the drivable area according to the position and velocity of the target to be avoided. -Obstacle Avoidance module modifies the path to be followed so that it fits within the received drivable area. +本モジュールは、自身経路の周辺にある車両、歩行者、および障害物を回避する機能を [autoware_path_optimizer](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_path_optimizer/) と併用して提供します。 +各モジュールは以下のような役割を果たします。 +動的回避モジュールは回避対象の目標位置と速度に基づき、走行可能領域を切り取ります。 +障害物回避モジュールは送信された走行可能領域の範囲に収まるように、走行経路を修正します。 -Static obstacle's avoidance functions are also provided by the [Static Avoidance module](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_behavior_path_static_obstacle_avoidance_module/), but these modules have different roles. -The Static Obstacle Avoidance module performs avoidance through the outside of own lanes but cannot avoid the moving objects. -On the other hand, this module can avoid moving objects. -For this reason, the word "dynamic" is used in the module's name. -The table below lists the avoidance modules that can handle each situation. +[静的回避モジュール](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_behavior_path_static_obstacle_avoidance_module/) によって、静的障害物回避機能も提供されますが、これらのモジュールは役割が異なります。 +静的障害物回避モジュールは、自身の車線の外側を介して回避を実行しますが、移動中の物体を回避することはできません。 +一方、このモジュールは移動中の物体を回避できます。 +そのため、本モジュールの名称には「動的」という言葉が使用されています。 +以下の表に、各状況に対応する回避モジュールを記載します。 -| | avoid within the own lane | avoid through the outside of own lanes | +| | 車線内での回避 | 車線外の外側からの回避 | | :----------------------- | :------------------------------------------------------------------------: | :------------------------------------: | -| avoid not-moving objects | Avoidance Module
Dynamic Avoidance Module + Obstacle Avoidance Module | Avoidance Module | -| avoid moving objects | Dynamic Avoidance Module + Obstacle Avoidance Module | No Module (Under Development) | +| 未稼働オブジェクトの回避 | Avoidance Module
Dynamic Avoidance Module + Obstacle Avoidance Module | Avoidance Module | +| 稼働オブジェクトの回避 | Dynamic Avoidance Module + Obstacle Avoidance Module | モジュールなし (開発中) | -## Policy of algorithms +## アルゴリズムのポリシー -Here, we describe the policy of inner algorithms. -The inner algorithms can be separated into two parts: The first decides whether to avoid the obstacles and the second cuts off the drivable area against the corresponding obstacle. +ここでは、内部アルゴリズムのポリシーについて説明します。 +内部アルゴリズムは 2 つの部分に分けることができます。1 つ目は障害物を回避するかどうかを判断し、2 つ目は対応する障害物に対する走行可能領域を切り取ります。 -### Select obstacles to avoid +### 回避する障害物の選択 -To decide whether to avoid an object, both the predicted path and the state (pose and twist) of each object are used. -The type of objects the user wants this module to avoid is also required. -Using this information, the module decides to _avoid_ objects that _obstruct the ego's passage_ and _can be avoided_. +オブジェクトを回避するかを判断するためには、予測されたパスと各オブジェクトの状態(ポーズとツイスト)の両方が使用されます。 +このモジュールに回避してほしいオブジェクトの種類も必要です。 +この情報を使用して、モジュールは自車の進行を妨げ、回避可能なオブジェクトを回避することを決定します。 -The definition of _obstruct the ego's passage_ is implemented as the object that collides within seconds. -The other, _can be avoided_ denotes whether it can be avoided without risk to the passengers or the other vehicles. -For this purpose, the module judges whether the obstacle can be avoided with satisfying the constraints of lateral acceleration and lateral jerk. -For example, the module decides not to avoid an object that is too close or fast in the lateral direction. +自車の進行を妨げるという定義は、数秒以内に衝突するオブジェクトとして実装されています。 +もう 1 つ、「回避可能」は、乗客や他の車両にリスクを与えることなく回避できるかどうかを示します。 +この目的のために、モジュールは障害物が横加速度と横ジャークの制約を満たして回避できるかどうかを判断します。 +例えば、横方向に近すぎるか速すぎるオブジェクトは回避しないことを決定します。 -### Cuts off the drivable area against the selected vehicles +### 選択された車両に対する走行可能領域の切り取り -For the selected obstacles to be avoided, the module cuts off the drivable area. -As inputs to decide the shapes of cut-off polygons, poses of the obstacles are mainly used, assuming they move in parallel to the ego's path, instead of its predicted path. -This design arises from that the predicted path of objects is not accurate enough to use the path modifications (at least currently). -Furthermore, the output drivable area shape is designed as a rectangular cutout along the ego's path to make the computation scalar rather than planar. +回避するために選択された障害物に対して、モジュールは走行可能領域を切り取ります。 +切り取りポリゴンの形状を決定するための入力として、障害物のポーズが主に使用されます。ただし、予測されたパスではなく、それらが自車のパスと並行に移動すると想定されます。 +この設計は、オブジェクトの予測されたパスは(少なくとも現在は)パス変更を使用するほど正確ではないというところから来ています。 +さらに、出力の走行可能領域の形状は、計算を平面ではなくスカラーで行うために、自車のパスに沿った長方形の切り取りとして設計されています。 -#### Determination of lateral dimension +#### 横方向の寸法の決定 -The lateral dimensions of the polygon are calculated as follows. -The polygon's width to extract from the drivable area is the obstacle width and `drivable_area_generation.lat_offset_from_obstacle`. -We can limit the lateral shift length by `drivable_area_generation.max_lat_offset_to_avoid`. +ポリゴンの横方向の寸法は次のように計算されます。 +走行可能領域から抽出するポリゴンの幅は、障害物の幅と `drivable_area_generation.lat_offset_from_obstacle` です。 +`drivable_area_generation.max_lat_offset_to_avoid` によって横方向のシフトの長さを制限できます。 ![drivable_area_extraction_width](./image/drivable_area_extraction_width.drawio.svg) -#### Determination of longitudinal dimension +#### 縦方向の寸法の決定 -Then, extracting the same directional and opposite directional obstacles from the drivable area will work as follows considering TTC (time to collision). +次に、走行可能領域から同じ方向と反対方向の障害物を取り出すのは、TTC(衝突時間)を考慮して次のように機能します。 -Regarding the same directional obstacles, obstacles whose TTC is negative will be ignored (e.g., The obstacle is in front of the ego, and the obstacle's velocity is larger than the ego's velocity.). +同じ方向の障害物に関して、TTC が負の障害物は無視されます(例: 障害物が自車の前にあり、障害物の速度が自車の速度よりも大きい)。 -Same directional obstacles (Parameter names may differ from implementation) +**同じ方向の障害物**(実装によってパラメータ名が異なる場合があります) ![same_directional_object](./image/same_directional_object.svg) -Opposite directional obstacles (Parameter names may differ from implementation) +**反対方向の障害物**(実装によってパラメータ名が異なる場合があります) ![opposite_directional_object](./image/opposite_directional_object.svg) -### Cuts off the drivable area against the selected pedestrians +### 選択された歩行者に対する走行可能領域の切り取り -Then, we describe the logic to generate the drivable areas against pedestrians to be avoided. -Objects of this type are considered to have priority right of way over the ego's vehicle while ensuring a minimum safety of the ego's vehicle. -In other words, the module assigns a drivable area to an obstacle with a specific margin based on the predicted paths with specific confidences for a specific time interval, as shown in the following figure. +次に、回避すべき歩行者に走行可能領域を生成するロジックについて説明します。 +このタイプのオブジェクトは、自車の安全を確保しつつ、自車に対して優先権を持つものとみなされます。 +言い換えれば、モジュールは次図に示すように、特定の時間の予測されたパスに基づいて特定の確信度で、特定の余裕を持った障害物に走行可能領域を割り当てます。
-
Restriction areas are generated from each pedestrian's predicted paths
+
制限領域は歩行者の予測されたパスから生成されます
-Apart from polygons for objects, the module also generates another polygon to ensure the ego's safety, i.e., to avoid abrupt steering or significant changes from the path. -This is similar to avoidance against the vehicles and takes precedence over keeping a safe distance from the object to be avoided. -As a result, as shown in the figure below, the polygons around the objects reduced by the secured polygon of the ego are subtracted from the ego's drivable area. +モジュールは、オブジェクト用のポリゴンとは別に、自車の安全性を確保するための別のポリゴンも生成します。つまり、急な操舵またはパスからの大幅な変化を回避します。 +これは、車両に対する回避動作と似ており、回避すべきオブジェクトとの安全距離の確保よりも優先されます。 +その結果、下の図に示すように、オブジェクトの周りのポリゴンが自車の安全なポリゴンによって縮小されたものが自車の走行可能領域から引き算されます。
- -
Ego's minimum requirements are prioritized against object margin
-
-## Example +## 図 + +
自車の最小要求を対象物軌跡との余裕で優先する
+ +## 例
-
Avoidance for the bus departure
+
バスの出発に対する回避
-
Avoidance on curve
+
曲線上の回避
-
Avoidance against the opposite direction vehicle
+
対向車に対する回避
-
Avoidance for multiple vehicle
+
複数の車に対する回避
-## Future works - -Currently, the path shifting length is limited to 0.5 meters or less by `drivable_area_generation.max_lat_offset_to_avoid`. -This is caused by the lack of functionality to work with other modules and the structure of the planning component. -Due to this issue, this module can only handle situations where a small avoidance width is sufficient. -This issue is the most significant for this module. -In addition, the ability of this module to extend the drivable area as needed is also required. - -## Parameters - -Under development - -| Name | Unit | Type | Description | Default value | -| :-------------------------------------------------------------------- | :---- | :----- | :--------------------------------------------------------- | :------------ | -| target_object.car | [-] | bool | The flag whether to avoid cars or not | true | -| target_object.truck | [-] | bool | The flag whether to avoid trucks or not | true | -| ... | [-] | bool | ... | ... | -| target_object.min_obstacle_vel | [m/s] | double | Minimum obstacle velocity to avoid | 1.0 | -| drivable_area_generation.lat_offset_from_obstacle | [m] | double | Lateral offset to avoid from obstacles | 0.8 | -| drivable_area_generation.max_lat_offset_to_avoid | [m] | double | Maximum lateral offset to avoid | 0.5 | -| drivable_area_generation.overtaking_object.max_time_to_collision | [s] | double | Maximum value when calculating time to collision | 3.0 | -| drivable_area_generation.overtaking_object.start_duration_to_avoid | [s] | double | Duration to consider avoidance before passing by obstacles | 4.0 | -| drivable_area_generation.overtaking_object.end_duration_to_avoid | [s] | double | Duration to consider avoidance after passing by obstacles | 5.0 | -| drivable_area_generation.overtaking_object.duration_to_hold_avoidance | [s] | double | Duration to hold avoidance after passing by obstacles | 3.0 | -| drivable_area_generation.oncoming_object.max_time_to_collision | [s] | double | Maximum value when calculating time to collision | 3.0 | -| drivable_area_generation.oncoming_object.start_duration_to_avoid | [s] | double | Duration to consider avoidance before passing by obstacles | 9.0 | -| drivable_area_generation.oncoming_object.end_duration_to_avoid | [s] | double | Duration to consider avoidance after passing by obstacles | 0.0 | +## 今後の課題 + +現在、経路シフト長は `drivable_area_generation.max_lat_offset_to_avoid` によって0.5メートル以内に制限されています。 +これは、他のモジュールやPlanningコンポーネントの構造と連携する機能がないことが原因です。 +この問題により、このモジュールは回避幅が小さい状況でのみ処理できます。 +この問題は、このモジュールにとって最も重要です。 +また、このモジュールが必要に応じて走行可能領域を拡張する能力も必要です。 + +## パラメーター + +開発中 + +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :--------------------------------------------------------------- | :---- | :----- | :------------------------------------------------------------------ | :------------ | +| `target_object.car` | [-] | bool | 車の回避フラグ | true | +| `target_object.truck` | [-] | bool | トラックの回避フラグ | true | +| ... | [-] | bool | ... | ... | +| `target_object.min_obstacle_vel` | [m/s] | double | 回避する際の最小障害物速度 | 1.0 | +| `drivable_area_generation.lat_offset_from_obstacle` | [m] | double | 障害物からの回避用横方向オフセット | 0.8 | +| `drivable_area_generation.max_lat_offset_to_avoid` | [m] | double | 回避する際の最大横方向オフセット | 0.5 | +| `drivable_area_generation.overtaking_object.max_time_to_collision` | [s] | double | タイムトゥーコリジョンを計算する際の最大値 | 3.0 | +| `drivable_area_generation.overtaking_object.start_duration_to_avoid` | [s] | double | 障害物を通過する前に回避を考慮する期間 | 4.0 | +| `drivable_area_generation.overtaking_object.end_duration_to_avoid` | [s] | double | 障害物を通過した後に回避を考慮する期間 | 5.0 | +| `drivable_area_generation.overtaking_object.duration_to_hold_avoidance` | [s] | double | 障害物を通過した後に回避を保持する期間 | 3.0 | +| `drivable_area_generation.oncoming_object.max_time_to_collision` | [s] | double | タイムトゥーコリジョンを計算する際の最大値 | 3.0 | +| `drivable_area_generation.oncoming_object.start_duration_to_avoid` | [s] | double | 障害物を通過する前に回避を考慮する期間 | 9.0 | +| `drivable_area_generation.oncoming_object.end_duration_to_avoid` | [s] | double | 障害物を通過した後に回避を考慮する期間 | 0.0 | + diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md index 928e53b1ccff5..1ca2c53bcbd66 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md @@ -1,16 +1,17 @@ -# Goal Planner design +# ゴールプランナー設計 -## Purpose / Role +## 目的 / 役割 -Plan path around the goal. +ゴール周辺のパスを計画する。 -- Arrive at the designated goal. -- Modify the goal to avoid obstacles or to pull over at the side of the lane. +- 指定されたゴールに到着する。 +- 障害物を回避するため、または車線の脇に停車するため、ゴールを変更する。 -## Design +## 設計 + +ゴール変更が許可されていない場合は、指定された固定ゴールに駐車する(下の図の `fixed_goal_planner`)。 +許可されている場合は、指定されたポリシー(例:車線の左右に駐車)に従って駐車する(下の図の `rough_goal_planner`)。現在、ラフゴールプランナーはプルオーバー機能のみをサポートしているが、将来的にはさまざまな駐車ポリシーに対応できることが望ましい。 -If goal modification is not allowed, park at the designated fixed goal. (`fixed_goal_planner` in the figure below) -When allowed, park in accordance with the specified policy(e.g pull over on left/right side of the lane). (`rough_goal_planner` in the figure below). Currently rough goal planner only support pull_over feature, but it would be desirable to be able to accommodate various parking policies in the future. ```plantuml @startuml @@ -80,20 +81,20 @@ GoalCandidates --o GoalSearcherBase @enduml ``` -## start condition +## 開始条件 ### fixed_goal_planner -This is a very simple function that plans a smooth path to a specified goal. This function does not require approval and always runs with the other modules. -_NOTE: this planner does not perform the several features described below, such as "goal search", "collision check", "safety check", etc._ +これは、指定された目標にスムーズな経路を計画する非常にシンプルな関数です。この関数は承認を必要とせず、常に他のモジュールと一緒に実行されます。 +_注意: このプランナーは、「目標探索」、「衝突チェック」、「安全チェック」など、以下で説明するいくつかの機能は実行しません。_ -Executed when both conditions are met. +両方の条件が満たされると実行されます。 -- Route is set with `allow_goal_modification=false`. This is the default. -- The goal is set in the normal lane. In other words, it is NOT `road_shoulder`. -- Ego-vehicle exists in the same lane sequence as the goal. +- ルートは `allow_goal_modification=false` で設定されています。これはデフォルトです。 +- 目標は通常の車線に設定されています。つまり、`road_shoulder` ではありません。 +- 自車は目標と同じ車線シーケンスに存在します。 -If the target path contains a goal, modify the points of the path so that the path and the goal are connected smoothly. This process will change the shape of the path by the distance of `refine_goal_search_radius_range` from the goal. Note that this logic depends on the interpolation algorithm that will be executed in a later module (at the moment it uses spline interpolation), so it needs to be updated in the future. +目標経路に目標が含まれている場合、経路のポイントを変更して、経路と目標がスムーズにつながるようにします。この処理により、経路の形状が目標から `refine_goal_search_radius_range` の距離だけ変化します。このロジックは、後続のモジュールで実行される補間アルゴリズム(現時点ではスプライン補間を使用)に依存するため、将来的にはアップデートする必要があります。 ![path_goal_refinement](./images/path_goal_refinement.drawio.svg) @@ -101,269 +102,269 @@ If the target path contains a goal, modify the points of the path so that the pa ### rough_goal_planner -#### pull over on road lane +#### 路側端に寄せる -- The distance between the goal and ego-vehicle is shorter than `pull_over_minimum_request_length`. -- Route is set with `allow_goal_modification=true` . - - We can set this option with [SetRoute](https://github.com/autowarefoundation/autoware_adapi_msgs/blob/main/autoware_adapi_v1_msgs/routing/srv/SetRoute.srv#L2) api service. - - We support `2D Rough Goal Pose` with the key bind `r` in RViz, but in the future there will be a panel of tools to manipulate various Route API from RViz. -- The terminal point of the current path is in the same lane sequence as the goal. If goal is on the road shoulder, then it is in the adjacent road lane sequence. +- 目標と自車間の距離が `pull_over_minimum_request_length` よりも短い。 +- ルートは `allow_goal_modification=true` で設定されています。 + - [SetRoute](https://github.com/autowarefoundation/autoware_adapi_msgs/blob/main/autoware_adapi_v1_msgs/routing/srv/SetRoute.srv#L2) API サービスでこのオプションを設定できます。 + - RVizで `r` にキーバインドされた `2D Rough Goal Pose` をサポートしていますが、将来的にはRVizからさまざまなルートAPIを操作するためのツールパネルを用意する予定です。 +- 現在のパスにおける終点は、目標と同じ車線シーケンス内にあります。目標が路側肩にある場合は、隣接する車線シーケンス内にあります。 -#### pull over on shoulder lane +#### 路側肩に寄せる -- The distance between the goal and ego-vehicle is shorter than `pull_over_minimum_request_length`. -- Goal is set in the `road_shoulder`. +- 目標と自車間の距離が `pull_over_minimum_request_length` よりも短い。 +- ゴールは `road_shoulder` に設定されています。 -## finish condition +## 終了条件 -- The distance to the goal from your vehicle is lower than threshold (default: < `1m`). -- The ego-vehicle is stopped. - - The speed is lower than threshold (default: < `0.01m/s`). +- 自車から目標までの距離がしきい値(デフォルト: < `1m`)より低い。 +- 自車が停止している。 + - 速度がしきい値(デフォルト: < `0.01m/s`)より低い。 -## General parameters for goal_planner +## goal_planner の一般的なパラメータ -| Name | Unit | Type | Description | Default value | -| :------------------------ | :---- | :----- | :------------------------------------------------- | :------------ | -| th_arrived_distance | [m] | double | distance threshold for arrival of path termination | 1.0 | -| th_stopped_velocity | [m/s] | double | velocity threshold for arrival of path termination | 0.01 | -| th_stopped_time | [s] | double | time threshold for arrival of path termination | 2.0 | -| center_line_path_interval | [m] | double | reference center line path point interval | 1.0 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------ | :---- | :----- | :---------------------------------------------------------------------- | :------------ | +| th_arrived_distance | [m] | 数値 | パス終了に到着するための距離閾値 | 1.0 | +| th_stopped_velocity | [m/s] | 数値 | パス終了に到着するための速度閾値 | 0.01 | +| th_stopped_time | [s] | 数値 | パス終了に到着するための時間閾値 | 2.0 | +| center_line_path_interval | [m] | 数値 | 参照センターラインパスのポイント間隔 | 1.0 | ## **Goal Search** -To realize pull over even when an obstacle exists near the original goal, a collision free area is searched within a certain range around the original goal. The goal found will be published as `/planning/scenario_planning/modified_goal`. +障害物が当初の目標付近にある場合でもハザードランプ消灯を実現するために、当初の目標の周囲の特定範囲内で衝突しない領域を検索します。見つかった目標は `/planning/scenario_planning/modified_goal` として公開されます。 -[goal search video](https://user-images.githubusercontent.com/39142679/188359594-c6724e3e-1cb7-4051-9a18-8d2c67d4dee9.mp4) +[Goal Search Video](https://user-images.githubusercontent.com/39142679/188359594-c6724e3e-1cb7-4051-9a18-8d2c67d4dee9.mp4) -1. The original goal is set, and the refined goal pose is obtained by moving in the direction normal to the lane center line and keeping `margin_from_boundary` from the edge of the lane. +1. 当初目標が設定され、レファインド目標のポーズが車線の中心線に対して垂直方向に移動し、『レーン境界から『 `margin_from_boundary` 』離れた距離を保つことで取得されます。 ![refined_goal](./images/goal_planner-refined_goal.drawio.svg) -2. Using `refined_goal` as the base goal, search for candidate goals in the range of `-forward_goal_search_length` to `backward_goal_search_length` in the longitudinal direction and `longitudinal_margin` to `longitudinal_margin+max_lateral_offset` in th lateral direction based on refined_goal. +2. 『レファインド目標』をベース目標として使用して、精度を高めた目標に基づいて、縦方向に『 `-forward_goal_search_length` 』から『 `backward_goal_search_length` 』、横方向に『 `longitudinal_margin` 』から『 `longitudinal_margin` + `max_lateral_offset` 』の範囲で候補目標を検索します。 ![goal_candidates](./images/goal_planner-goal_candidates.drawio.svg) -3. Each candidate goal is prioritized and a path is generated for each planner for each goal. The priority of a candidate goal is determined by its distance from the base goal. The ego vehicle tries to park for the highest possible goal. The distance is determined by the selected policy. In case `minimum_longitudinal_distance`, sort with smaller longitudinal distances taking precedence over smaller lateral distances. In case `minimum_weighted_distance`, sort with the sum of weighted lateral distance and longitudinal distance. This means the distance is calculated by `longitudinal_distance + lateral_cost*lateral_distance` +3. 各候補目標に優先順位が付けられ、各目標に対して各プランナーでパスが生成されます。候補目標の優先順位は、ベース目標からの距離によって決まります。車両は可能な限り最も高い目標に向けて駐車しようします。距離は選択したポリシーによって定義されます。 『 `minimum_longitudinal_distance` 』の場合は、縦方向の距離が小さい方が小さい横方向の距離よりも優先されるようにソートします。 『 `minimum_weighted_distance` 』の場合は、加重横方向距離と縦方向距離の合計でソートします。これは、距離が `longitudinal_distance + lateral_cost*lateral_distance` によって計算されることを意味します。 ![goal_distance](./images/goal_planner-goal_distance.drawio.svg) - The following figure is an example of minimum_weighted_distance.​ The white number indicates the goal candidate priority, and the smaller the number, the higher the priority. the 0 goal indicates the base goal. + 次の図は `minimum_weighted_distance` の例です。白い数字は目標候補の優先順位を表し、数字が小さいほど優先順位が高くなります。目標 0 はベース目標を表します。 ![goal_priority_rviz_with_goal](./images/goal_priority_with_goal.png) ![goal_priority_rviz](./images/goal_priority_rviz.png) -4. If the footprint in each goal candidate is within `object_recognition_collision_check_margin` of that of the object, it is determined to be unsafe. These goals are not selected. If `use_occupancy_grid_for_goal_search` is enabled, collision detection on the grid is also performed with `occupancy_grid_collision_check_margin`. +4. 各目標候補のフットプリントがオブジェクトのフットプリントから `object_recognition_collision_check_margin` 以内に収まると安全でないと判断されます。これらの目標は選択されません。 `use_occupancy_grid_for_goal_search` が有効になっている場合、グリッド上の衝突検出も `occupancy_grid_collision_check_margin` で実行されます。 -Red goals candidates in the image indicate unsafe ones. +画像内の赤色の目標候補は安全でないことを示しています。 ![is_safe](./images/goal_planner-is_safe.drawio.svg) -It is possible to keep `longitudinal_margin` in the longitudinal direction apart from the collision margin for obstacles from the goal candidate. This is intended to provide natural spacing for parking and efficient departure. +目標候補では、縦方向に `longitudinal_margin` を障害物から衝突マージンとは離しておくことが可能です。これは、駐車時の自然な間隔と効率的な出発を確保することを目的としています。 ![longitudinal_margin](./images/goal_planner-longitudinal_margin.drawio.svg) -Also, if `prioritize_goals_before_objects` is enabled, To arrive at each goal, the number of objects that need to be avoided in the target range is counted, and those with the lowest number are given priority. +また、 `prioritize_goals_before_objects` が有効になっている場合は、各目標に到着するために対象範囲内で回避する必要のあるオブジェクトの数をカウントし、数が最も少ないものに優先順位を付けます。 -The images represent a count of objects to be avoided at each range, with priority given to those with the lowest number, regardless of the aforementioned distances. +画像は、前述の距離に関係なく、回避する必要があるオブジェクトの数を各範囲でカウントしたものであり、数が最も少ないものに優先順位が付けられています。 ![object_to_avoid](./images/goal_planner-object_to_avoid.drawio.svg) -The gray numbers represent objects to avoid, and you can see that the goal in front has a higher priority in this case. +グレーの数字は回避対象のオブジェクトを表しており、この場合、前の目標の優先順位が高いことがわかります。 ![goal_priority_object_to_avoid_rviz.png](./images/goal_priority_object_to_avoid_rviz.png) -### Parameters for goal search +### Goal Search のパラメータ -| Name | Unit | Type | Description | Default value | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | | :------------------------------ | :--- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------- | -| goal_priority | [-] | string | In case `minimum_longitudinal_distance`, sort with smaller longitudinal distances taking precedence over smaller lateral distances. In case `minimum_weighted_distance`, sort with the sum of weighted lateral distance and longitudinal distance | `minimum_weighted_distance` | -| lateral_weight | [-] | double | Weight for lateral distance used when `minimum_weighted_distance` | 40.0 | -| prioritize_goals_before_objects | [-] | bool | If there are objects that may need to be avoided, prioritize the goal in front of them | true | -| forward_goal_search_length | [m] | double | length of forward range to be explored from the original goal | 20.0 | -| backward_goal_search_length | [m] | double | length of backward range to be explored from the original goal | 20.0 | -| goal_search_interval | [m] | double | distance interval for goal search | 2.0 | -| longitudinal_margin | [m] | double | margin between ego-vehicle at the goal position and obstacles | 3.0 | -| max_lateral_offset | [m] | double | maximum offset of goal search in the lateral direction | 0.5 | -| lateral_offset_interval | [m] | double | distance interval of goal search in the lateral direction | 0.25 | -| ignore_distance_from_lane_start | [m] | double | This parameter ensures that the distance between the start of the shoulder lane and the goal is not less than the specified value. It's used to prevent setting goals too close to the beginning of the shoulder lane, which might lead to unsafe or impractical pull-over maneuvers. Increasing this value will force the system to ignore potential goal positions near the start of the shoulder lane, potentially leading to safer and more comfortable pull-over locations. | 0.0 | -| margin_from_boundary | [m] | double | distance margin from edge of the shoulder lane | 0.5 | +| goal_priority | [-] | string | longitudinal distancesを優先し小さい距離を優先する `minimum_longitudinal_distance`、weighted lateral distanceとlongitudinal distanceの総和を優先する `minimum_weighted_distance` | `minimum_weighted_distance` | +| lateral_weight | [-] | double | `minimum_weighted_distance`時に使用されるlateral distanceの重み | 40.0 | +| prioritize_goals_before_objects | [-] | bool | 回避すべきオブジェクトがある場合、それらの前面にある目標を優先 | true | +| forward_goal_search_length | [m] | double | 元の目標から探索する前方範囲の長さ | 20.0 | +| backward_goal_search_length | [m] | double | 元の目標から探索する後方範囲の長さ | 20.0 | +| goal_search_interval | [m] | double | 目標検索の距離間隔 | 2.0 | +| longitudinal_margin | [m] | double | 目標位置の自車と障害物間の距離マージン | 3.0 | +| max_lateral_offset | [m] | double | lateral方向の目標検索の最大オフセット | 0.5 | +| lateral_offset_interval | [m] | double | lateral方向の目標検索の距離間隔 | 0.25 | +| ignore_distance_from_lane_start | [m] | double | このパラメータによって、車線路の開始位置と目標間の距離が指定した値以上になることが保証されます。これは、目標を車線路の開始位置にかなり近い位置に設定することを防ぐために使用され、安全でない、または実用的な路肩への車両移動につながる可能性があります。この値を増やすと、システムは車線路の開始位置近くの潜在的な目標位置を無視せざるを得なくなり、安全で快適な路肩への車両移動につながる可能性があります。 | 0.0 | +| margin_from_boundary | [m] | double | 車線路の端からの距離マージン | 0.5 | -## **Pull Over** +## **路肩駐車** -There are three path generation methods. -The path is generated with a certain margin (default: `0.75 m`) from the boundary of shoulder lane. +経路生成方法が 3 つあります。 +経路は路肩の境界線から一定の余白(デフォルト: `0.75 m`)を設けて生成されます。 -The process is time consuming because multiple planners are used to generate path for each candidate goal. Therefore, in this module, the path generation is performed in a thread different from the main thread. -Path generation is performed at the timing when the shape of the output path of the previous module changes. If a new module launches, it is expected to go to the previous stage before the goal planner, in which case the goal planner re-generates the path. The goal planner is expected to run at the end of multiple modules, which is achieved by `keep_last` in the planner manager. +各候補のゴールに対して複数の Plannar を使用して経路を生成するため、プロセスには時間がかかります。したがって、このモジュールでは経路生成はメインスレッドとは異なるスレッドで実行されます。経路生成は、前のモジュールの出力経路の形状が変更されたタイミングで実行されます。新しいモジュールが起動すると、通常はゴールプランナより前の段階に移行し、その場合、ゴールプランナは経路を再生成します。ゴールプランナは複数のモジュールの最後で実行されることを想定しており、これはプランナマネージャの `keep_last` によって実現されます。 -Threads in the goal planner are shown below. +ゴールプランナの threads は次のとおりです。 ![threads.png](./images/goal_planner-threads.drawio.svg) -The main thread will be the one called from the planner manager flow. +メインスレッドは、プランナマネージャフローから呼び出されるスレッドになります。 -- The goal candidate generation and path candidate generation are done in a separate thread(lane path generation thread). -- The path candidates generated there are referred to by the main thread, and the one judged to be valid for the current planner data (e.g. ego and object information) is selected from among them. valid means no sudden deceleration, no collision with obstacles, etc. The selected path will be the output of this module. -- If there is no path selected, or if the selected path is collision and ego is stuck, a separate thread(freespace path generation thread) will generate a path using freespace planning algorithm. If a valid free space path is found, it will be the output of the module. If the object moves and the pull over path generated along the lane is collision-free, the path is used as output again. See also the section on freespace parking for more information on the flow of generating freespace paths. +- ゴール候補の生成と経路候補の生成は、別のスレッド(車線経路生成スレッド)で行われます。 +- そこで生成された経路候補はメインスレッドで参照され、現在のプランナーのデータ(例: 自車と障害物の情報)に対して有効と判断された候補がその中から選択されます。有効とは、急減速なし、障害物との衝突なしなどを意味します。選択された経路がこのモジュールの出力になります。 +- 選択された経路がない場合、または選択された経路が衝突で自車が停止した場合、別のスレッド(フリースペース経路生成スレッド)がフリースペース Plannar アルゴリズムを使用して経路を生成します。有効なフリースペース経路が見つかった場合、それはモジュールの出力になります。障害物が移動して車線に沿って生成された路肩駐車の経路が衝突フリーの場合、経路は再び出力として使用されます。フリースペース経路の生成フローの詳細については、フリースペース駐車に関するセクションも参照してください。 -| Name | Unit | Type | Description | Default value | -| :------------------------------------ | :----- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- | -| pull_over_minimum_request_length | [m] | double | when the ego-vehicle approaches the goal by this distance or a safe distance to stop, pull over is activated. | 100.0 | -| pull_over_velocity | [m/s] | double | decelerate to this speed by the goal search area | 3.0 | -| pull_over_minimum_velocity | [m/s] | double | speed of pull_over after stopping once. this prevents excessive acceleration. | 1.38 | -| decide_path_distance | [m] | double | decide path if it approaches this distance relative to the parking position. after that, no path planning and goal search are performed | 10.0 | -| maximum_deceleration | [m/s2] | double | maximum deceleration. it prevents sudden deceleration when a parking path cannot be found suddenly | 1.0 | -| path_priority | [-] | string | In case `efficient_path` use a goal that can generate an efficient path which is set in `efficient_path_order`. In case `close_goal` use the closest goal to the original one. | efficient_path | -| efficient_path_order | [-] | string | efficient order of pull over planner along lanes excluding freespace pull over | ["SHIFT", "ARC_FORWARD", "ARC_BACKWARD"] | -| lane_departure_check_expansion_margin | [m] | double | margin to expand the ego vehicle footprint when doing lane departure checks | 0.0 | +| 名称 | 単位 | 種類 | 説明 | デフォルト値 | +| ------------------------------------------ | ------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | +| pull_over_minimum_request_length | [m] | double | 自動車が目標地点にこの距離まで接近するか、停止する安全距離に達すると、プルオーバーが有効になる。 | 100.0 | +| pull_over_velocity | [m/s] | double | 目標検索エリアまでにこの速度に減速する | 3.0 | +| pull_over_minimum_velocity | [m/s] | double | 一度停止した後のプルオーバーの速度。過度の加速度を防止する。 | 1.38 | +| decide_path_distance | [m] | double | 駐車位置にこの距離まで接近した場合に経路を決定する。その後、経路計画と目標検索は実行されません | 10.0 | +| maximum_deceleration | [m/s2] | double | 最大減速度。駐車経路が急に検出できない場合に急減速を防ぐ。 | 1.0 | +| path_priority | [-] | string | `efficient_path`を使用する場合、`efficient_path_order`に設定された効率的な経路を生成できる目標を使用します。`close_goal`を使用する場合、元の目標に最も近い目標を使用します。 | efficient_path | +| efficient_path_order | [-] | string | フリースペースでのプルオーバーを除くレーンに沿ったプルオーバープランナーの効率的な順序 | ["SHIFT", "ARC_FORWARD", "ARC_BACKWARD"] | +| lane_departure_check_expansion_margin | [m] | double | 車線逸脱チェックを実行するときの自動車両のフットプリントを拡大するためのマージン | 0.0 | -### **shift parking** +### **路肩駐車** -Pull over distance is calculated by the speed, lateral deviation, and the lateral jerk. -The lateral jerk is searched for among the predetermined minimum and maximum values, and the one satisfies ready conditions described above is output. +寄せる距離は、速度、横方向偏差、横方向ジャークから計算されます。 +横方向ジャークは、事前に設定された最小値と最大値の間で検索され、上記の条件を満たすものが出力されます。 -1. Apply uniform offset to centerline of shoulder lane for ensuring margin -2. In the section between merge start and end, path is shifted by a method that is used to generate avoidance path (four segmental constant jerk polynomials) -3. Combine this path with center line of road lane +1. 余白を確保するために、路肩車線の路側線セグメントに一様なオフセットを適用する +2. 合流開始と終了の間のセクションでは、回避経路の生成に使用される方法(4セグメント定数ジャーク多項式)で経路をシフトする +3. この経路と車線の中心線を組み合わせる ![shift_parking](./images/shift_parking.drawio.svg) [shift_parking video](https://user-images.githubusercontent.com/39142679/178034101-4dc61a33-bc49-41a0-a9a8-755cce53cbc6.mp4) -#### Parameters for shift parking +#### 路肩駐車のパラメータ -| Name | Unit | Type | Description | Default value | -| :---------------------------- | :----- | :----- | :------------------------------------------------------------------ | :------------ | -| enable_shift_parking | [-] | bool | flag whether to enable shift parking | true | -| shift_sampling_num | [-] | int | Number of samplings in the minimum to maximum range of lateral_jerk | 4 | -| maximum_lateral_jerk | [m/s3] | double | maximum lateral jerk | 2.0 | -| minimum_lateral_jerk | [m/s3] | double | minimum lateral jerk | 0.5 | -| deceleration_interval | [m] | double | distance of deceleration section | 15.0 | -| after_shift_straight_distance | [m] | double | straight line distance after pull over end point | 1.0 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :----------------------------- | :----- | :--------- | :-------------------------------------------------------------------- | :------------- | +| enable_shift_parking | [-] | ブール型 | シフトパーキングを有効にするフラグ | true | +| shift_sampling_num | [-] | 整数型 | lateral_jerkの最小および最大範囲内のサンプリング数 | 4 | +| maximum_lateral_jerk | [m/s3] | 倍精度浮動小数点数型 | 最大横方向ジャーク | 2.0 | +| minimum_lateral_jerk | [m/s3] | 倍精度浮動小数点数型 | 最小横方向ジャーク | 0.5 | +| deceleration_interval | [m] | 倍精度浮動小数点数型 | 減速区間の距離 | 15.0 | +| after_shift_straight_distance | [m] | 倍精度浮動小数点数型 | 引き寄せ終了後の直線距離 | 1.0 | ### **geometric parallel parking** -Generate two arc paths with discontinuous curvature. It stops twice in the middle of the path to control the steer on the spot. There are two path generation methods: forward and backward. -See also [[1]](https://www.sciencedirect.com/science/article/pii/S1474667015347431) for details of the algorithm. There is also [a simple python implementation](https://github.com/kosuke55/geometric-parallel-parking). +2つの不連続曲率円弧パスを生成します。パスの途中で2回停止し、この時点でステアリングを制御します。2つのパス生成方法:前進と後進があります。 +アルゴリズムの詳細については、[[1]](https://www.sciencedirect.com/science/article/pii/S1474667015347431) を参照してください。また、[シンプルなPython実装](https://github.com/kosuke55/geometric-parallel-parking) もあります。 -#### Parameters geometric parallel parking +#### geometric parallel parkingのパラメータ -| Name | Unit | Type | Description | Default value | -| :---------------------- | :---- | :----- | :---------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| arc_path_interval | [m] | double | interval between arc path points | 1.0 | -| pull_over_max_steer_rad | [rad] | double | maximum steer angle for path generation. it may not be possible to control steer up to max_steer_angle in vehicle_info when stopped | 0.35 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :---------------------- | :---- | :----- | :------------------------------------------------------------------------------------------------------------------- | :------------ | +| arc_path_interval | [m] | double | アークパスポイント間の距離 | 1.0 | +| pull_over_max_steer_rad | [rad] | double | Path生成時の最大ステアリング角度。停止中はvehicle_infoでmax_steer_angleまでステアリングを制御できない場合がある | 0.35 | -#### arc forward parking +#### アークフォワードパーキング -Generate two forward arc paths. +2つの前方アークパスを生成します。 ![arc_forward_parking](./images/arc_forward_parking.drawio.svg) [arc_forward_parking video](https://user-images.githubusercontent.com/39142679/178034128-4754c401-8aff-4745-b69a-4a69ca29ce4b.mp4) -#### Parameters arc forward parking +#### アークフォワードパーキングのパラメータ -| Name | Unit | Type | Description | Default value | -| :-------------------------------------- | :---- | :----- | :------------------------------------------------------------------------------ | :------------ | -| enable_arc_forward_parking | [-] | bool | flag whether to enable arc forward parking | true | -| after_forward_parking_straight_distance | [m] | double | straight line distance after pull over end point | 2.0 | -| forward_parking_velocity | [m/s] | double | velocity when forward parking | 1.38 | -| forward_parking_lane_departure_margin | [m/s] | double | lane departure margin for front left corner of ego-vehicle when forward parking | 0.0 | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :-------------------------------------- | :---- | :----- | :-------------------------------------------------------------------------------------------------- | :------------ | +| `enable_arc_forward_parking` | [-] | ブール | 円弧前進駐車を有効にするかどうか | true | +| `after_forward_parking_straight_distance` | [m] | double | 引き上げ終了地点から直線距離 | 2.0 | +| `forward_parking_velocity` | [m/s] | double | 前進駐車時の速度 | 1.38 | +| `forward_parking_lane_departure_margin` | [m/s] | double | 前進駐車時の車両左前角の車線逸脱マージン | 0.0 | -#### arc backward parking +#### アーク後退駐車 -Generate two backward arc paths. +後退アークパスを2つ生成します。 -![arc_backward_parking](./images/arc_backward_parking.drawio.svg). +![後退アーク駐車](./images/arc_backward_parking.drawio.svg) -[arc_backward_parking video](https://user-images.githubusercontent.com/39142679/178034280-4b6754fe-3981-4aee-b5e0-970f34563c6d.mp4) +[後退アーク駐車ビデオ](https://user-images.githubusercontent.com/39142679/178034280-4b6754fe-3981-4aee-b5e0-970f34563c6d.mp4) -#### Parameters arc backward parking +#### 後退アーク駐車のパラメータ -| Name | Unit | Type | Description | Default value | -| :--------------------------------------- | :---- | :----- | :------------------------------------------------------------------------ | :------------ | -| enable_arc_backward_parking | [-] | bool | flag whether to enable arc backward parking | true | -| after_backward_parking_straight_distance | [m] | double | straight line distance after pull over end point | 2.0 | -| backward_parking_velocity | [m/s] | double | velocity when backward parking | -1.38 | -| backward_parking_lane_departure_margin | [m/s] | double | lane departure margin for front right corner of ego-vehicle when backward | 0.0 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :--------------------------------------- | :---- | :----- | :----------------------------------------------------------------------- | :----------- | +| enable_arc_backward_parking | [-] | bool | アーク後退駐車を有効にするフラグ | true | +| after_backward_parking_straight_distance | [m] | double | 駐車終了地点後の直線距離 | 2.0 | +| backward_parking_velocity | [m/s] | double | 後退駐車時の速度 | -1.38 | +| backward_parking_lane_departure_margin | [m/s] | double | 自車の前右隅が後退駐車時に車線から逸脱するマージン | 0.0 | -### freespace parking +### 無人駐車(Freespace Parking) -If the vehicle gets stuck with `lane_parking`, run `freespace_parking`. -To run this feature, you need to set `parking_lot` to the map, `activate_by_scenario` of [costmap_generator](../costmap_generator/README.md) to `false` and `enable_freespace_parking` to `true` +車両が「車線駐車」でスタックした場合は、「無人駐車」を実行します。 +この機能を実行するには、マップに「駐車場」を設定し、[costmap_generator](../costmap_generator/README.md) の `activate_by_scenarion` を `false` に、`enable_freespace_parking` を `true` に設定する必要があります。 ![pull_over_freespace_parking_flowchart](./images/pull_over_freespace_parking_flowchart.drawio.svg) -Simultaneous execution with `avoidance_module` in the flowchart is under development. +フローチャート内の `avoidance_module` との同時実行は現在開発中です。 -#### Parameters freespace parking +#### 無人駐車パラメーター -| Name | Unit | Type | Description | Default value | -| :----------------------- | :--- | :--- | :------------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_freespace_parking | [-] | bool | This flag enables freespace parking, which runs when the vehicle is stuck due to e.g. obstacles in the parking area. | true | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :----------------------- | :--- | :--- | :---------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_freespace_parking | [-] | ブール値 | 障害物などにより駐車スペースで車両がスタックした場合にfreespace駐車が有効になるフラグです。 | true | -See [freespace_planner](../autoware_freespace_planner/README.md) for other parameters. +[freespace_planner](../autoware_freespace_planner/README.md)の他のパラメータについては、参照してください。 -## **collision check for path generation** +## **経路生成のための衝突チェック** -To select a safe one from the path candidates, a collision check with obstacles is performed. +経路候補の中から安全なものを選択するために、障害物との衝突チェックが行われます。 -### **occupancy grid based collision check** +### **オキュパンシーグリッドベースの衝突チェック** -Generate footprints from ego-vehicle path points and determine obstacle collision from the value of occupancy_grid of the corresponding cell. +自車位置経路点からフットプリントを生成し、対応するセルのオキュパンシーグリッドの値から障害物の衝突を判定します。 -#### Parameters for occupancy grid based collision check +#### オキュパンシーグリッドベースの衝突チェックに関するパラメータ -| Name | Unit | Type | Description | Default value | -| :---------------------------------------------- | :--- | :----- | :-------------------------------------------------------------------------------------------------------------- | :------------ | -| use_occupancy_grid_for_goal_search | [-] | bool | flag whether to use occupancy grid for goal search collision check | true | -| use_occupancy_grid_for_goal_longitudinal_margin | [-] | bool | flag whether to use occupancy grid for keeping longitudinal margin | false | -| use_occupancy_grid_for_path_collision_check | [-] | bool | flag whether to use occupancy grid for collision check | false | -| occupancy_grid_collision_check_margin | [m] | double | margin to calculate ego-vehicle cells from footprint. | 0.0 | -| theta_size | [-] | int | size of theta angle to be considered. angular resolution for collision check will be 2$\pi$ / theta_size [rad]. | 360 | -| obstacle_threshold | [-] | int | threshold of cell values to be considered as obstacles | 60 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------------------ | :--- | :----- | :-------------------------------------------------------------------------------------------------------------- | :------------ | +| use_occupancy_grid_for_goal_search | - | bool | 目標探索衝突確認のためオキューパンシーグリッドを使用するかどうか | true | +| use_occupancy_grid_for_goal_longitudinal_margin | - | bool | 縦方向マージンを保持するためオキューパンシーグリッドを使用するかどうか | false | +| use_occupancy_grid_for_path_collision_check | - | bool | 衝突確認のためオキューパンシーグリッドを使用するかどうか | false | +| occupancy_grid_collision_check_margin | m | double | フットプリントから自車セルを計算するためのマージン | 0.0 | +| theta_size | - | int | 考慮するシータ角のサイズ。衝突確認の角度分解能は 2$\pi$ / theta_size [rad] となります。 | 360 | +| obstacle_threshold | - | int | 障害物と見なされるセルの値のしきい値 | 60 | -### **object recognition based collision check** +### **オブジェクト認識ベースの衝突確認** -A collision decision is made for each of the path candidates, and a collision-free path is selected. -There are three main margins at this point. +各経路候補に対して衝突判定が行われ、衝突のない経路が選択されます。 +現時点では、3 つの主なマージンがあります。 -- `object_recognition_collision_check_margin` is margin in all directions of ego. -- In the forward direction, a margin is added by the braking distance calculated from the current speed and maximum deceleration. The maximum distance is The maximum value of the distance is suppressed by the `object_recognition_collision_check_max_extra_stopping_margin` -- In curves, the lateral margin is larger than in straight lines.This is because curves are more prone to control errors or to fear when close to objects (The maximum value is limited by `object_recognition_collision_check_max_extra_stopping_margin`, although it has no basis.) +- `object_recognition_collision_check_margin` は、自車の全方向のマージンです。 +- 前進方向では、現在の速度と最大減速度から計算された制動距離によってマージンが追加されます。距離の最大値は、`object_recognition_collision_check_max_extra_stopping_margin` によって抑えられます。 +- 曲線では、横方向のマージンは直線よりも大きくなります。これは、曲線では制御エラーが発生しやすかったり、物体に近くても不安定になったりするためです(理論的根拠はありませんが、最大値は `object_recognition_collision_check_max_extra_stopping_margin` によって制限されています)。 ![collision_check_margin](./images/goal_planner-collision_check_margin.drawio.svg) -Then there is the concept of soft and hard margins. Although not currently parameterized, if a collision-free path can be generated by a margin several times larger than `object_recognition_collision_check_margin`, then the priority is higher. +また、ソフトマージンとハードマージンのコンセプトがあります。現時点ではパラメータ化されていませんが、`object_recognition_collision_check_margin` よりも数倍大きいマージンで衝突のない経路を生成できる場合、優先順位が高くなります。 -#### Parameters for object recognition based collision check +#### オブジェクト認識ベースの衝突確認のパラメータ -| Name | Unit | Type | Description | Default value | -| :----------------------------------------------------------- | :--- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- | -| use_object_recognition | [-] | bool | flag whether to use object recognition for collision check | true | -| object_recognition_collision_check_soft_margins | [m] | vector[double] | soft margins for collision check when path generation. It is not strictly the distance between footprints, but the maximum distance when ego and objects are oriented. | [5.0, 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0] | -| object_recognition_collision_check_hard_margins | [m] | vector[double] | hard margins for collision check when path generation | [0.6] | -| object_recognition_collision_check_max_extra_stopping_margin | [m] | double | maximum value when adding longitudinal distance margin for collision check considering stopping distance | 1.0 | -| detection_bound_offset | [m] | double | expand pull over lane with this offset to make detection area for collision check of path generation | 15.0 | +| 名称 | 単位 | 入力種別 | 説明 | デフォルト値 | +| :----------------------------------------------------------- | :--- | :-------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------ | +| use_object_recognition | [-] | bool | 障害物チェックに物体認識を使用するかどうか | true | +| object_recognition_collision_check_soft_margins | [m] | vector[double] | パス生成時の衝突チェックのソフトマージン。厳密にはフットプリント間の距離ではなく、自己位置と物体が向き合っているときの最大距離。 | [5.0, 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0] | +| object_recognition_collision_check_hard_margins | [m] | vector[double] | パス生成時の衝突チェックのハードマージン | [0.6] | +| object_recognition_collision_check_max_extra_stopping_margin | [m] | double | 停止距離を考慮した衝突チェックのための縦方向距離マージンの追加時の最大値 | 1.0 | +| detection_bound_offset | [m] | double | パス生成の衝突チェック検出エリアを作るため、待避レーンをこのオフセットで拡張 | 15.0 | ## **safety check** -Perform safety checks on moving objects. If the object is determined to be dangerous, no path decision is made and no approval is given, +走行オブジェクトに対して安全チェックを実施します。オブジェクトが危険と判断された場合、経路意思決定が行われず、承認も与えられません。 -- path decision is not made and approval is not granted. -- After approval, the ego vehicle stops under deceleration and jerk constraints. +- 経路意思決定が行われず、承認は許可されません。 +- 承認後、自動運転車は減速制約とジャーク制約に従って停止します。 -This module has two methods of safety check, `RSS` and `integral_predicted_polygon`. +本モジュールでは、`RSS`と`integral_predicted_polygon`の2つの安全チェック手法を使用します。 -`RSS` method is a method commonly used by other behavior path planner modules, see [RSS based safety check utils explanation](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md). +`RSS`手法は、他の動作経路プランナーモジュールで一般的に使用される手法です。[RSSベースの安全チェックユーティリティに関する説明](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md)を参照してください。 -`integral_predicted_polygon` is a more safety-oriented method. This method is implemented because speeds during pull over are lower than during driving, and fewer objects travel along the edge of the lane. (It is sometimes too reactive and may be less available.) -This method integrates the footprints of egos and objects at a given time and checks for collisions between them. +`integral_predicted_polygon`は、より安全指向の手法です。この手法は、走行中の速度が運転中の場合よりも低く、車線の縁を走行するオブジェクトが少ない場合に実装されます。(反応が良すぎて利用頻度が少ない場合があります。) +この手法は、特定の時点における自車位置とオブジェクトのフットプリントを統合し、それらの衝突をチェックします。 ![safety_check](./images/goal_planner-safety_check.drawio.svg) -In addition, the safety check has a time hysteresis, and if the path is judged "safe" for a certain period of time(`keep_unsafe_time`), it is finally treated as "safe". +また、安全チェックには時間のヒステリシスがあり、一定期間(`keep_unsafe_time`)経路が「安全」と判断されると、最終的に「安全」として扱われます。 + ```txt ==== is_safe @@ -380,51 +381,52 @@ In addition, the safety check has a time hysteresis, and if the path is judged " 0 =========================-------==========--> t ``` -### Parameters for safety check +### 安全チェックのパラメータ -| Name | Unit | Type | Description | Default value | -| :----------------------------------- | :---- | :----- | :------------------------------------------------------------------------------------------------------- | :--------------------------- | -| enable_safety_check | [-] | bool | flag whether to use safety check | true | -| method | [-] | string | method for safety check. `RSS` or `integral_predicted_polygon` | `integral_predicted_polygon` | -| keep_unsafe_time | [s] | double | safety check Hysteresis time. if the path is judged "safe" for the time it is finally treated as "safe". | 3.0 | -| check_all_predicted_path | - | bool | Flag to check all predicted paths | true | -| publish_debug_marker | - | bool | Flag to publish debug markers | false | -| `collision_check_yaw_diff_threshold` | [rad] | double | Maximum yaw difference between ego and object when executing rss-based collision checking | 3.1416 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :----------------------------------- | :---- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------- | +| enable_safety_check | [-] | bool | セーフティチェックを使用するかどうか | true | +| method | [-] | 文字列 | セーフティチェックの方法. RSSまたはintegral_predicted_polygon | integral_predicted_polygon | +| keep_unsafe_time | [s] | double | セーフティチェックヒステリシス時間. その時間だけ経路が"安全"と判定されれば、最終的に"安全"とみなされる | 3.0 | +| check_all_predicted_path | - | bool | 予測経路のすべてを確認するためのフラグ | true | +| publish_debug_marker | - | bool | デバッグマーカーを公開するためのフラグ | false | +| collision_check_yaw_diff_threshold | [rad] | double | RSSベースの衝突チェックを実行するときの、自己位置と物体との最大ヨーの違い | 3.1416 | -#### Parameters for RSS safety check +#### RSS 安全性検査パラメータ -| Name | Unit | Type | Description | Default value | -| :---------------------------------- | :--- | :----- | :-------------------------------------- | :------------ | -| rear_vehicle_reaction_time | [s] | double | Reaction time for rear vehicles | 2.0 | -| rear_vehicle_safety_time_margin | [s] | double | Safety time margin for rear vehicles | 1.0 | -| lateral_distance_max_threshold | [m] | double | Maximum lateral distance threshold | 2.0 | -| longitudinal_distance_min_threshold | [m] | double | Minimum longitudinal distance threshold | 3.0 | -| longitudinal_velocity_delta_time | [s] | double | Delta time for longitudinal velocity | 0.8 | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :------------------------------------------- | :--- | :----- | :------------------------------------------------- | :------------ | +| `rear_vehicle_reaction_time` | [s] | double | 後方車両の反応時間 | 2.0 | +| `rear_vehicle_safety_time_margin` | [s] | double | 後方車両の安全時間マージン | 1.0 | +| `lateral_distance_max_threshold` | [m] | double | 最大横方向距離閾値 | 2.0 | +| `longitudinal_distance_min_threshold` | [m] | double | 最小縦方向距離閾値 | 3.0 | +| `longitudinal_velocity_delta_time` | [s] | double | 縦方向速度のデルタ時間 | 0.8 | -#### Parameters for integral_predicted_polygon safety check +#### インテグラル予測ポリゴン安全性チェック用パラメーター -| Name | Unit | Type | Description | Default value | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | | :-------------- | :--- | :----- | :------------------------------------- | :------------ | -| forward_margin | [m] | double | forward margin for ego footprint | 1.0 | -| backward_margin | [m] | double | backward margin for ego footprint | 1.0 | -| lat_margin | [m] | double | lateral margin for ego footprint | 1.0 | -| time_horizon | [s] | double | Time width to integrate each footprint | 10.0 | +| forward_margin | [m] | double | 自己位置の前面の余裕 | 1.0 | +| backward_margin | [m] | double | 自己位置の後面の余裕 | 1.0 | +| lat_margin | [m] | double | 自己位置の側面の余裕 | 1.0 | +| time_horizon | [s] | double | 各フットプリントを統合する時間幅 | 10.0 | -## **path deciding** +## **パス決定** -When `decide_path_distance` closer to the start of the pull over, if it is collision-free at that time and safe for the predicted path of the objects, it transitions to DECIDING. If it is safe for a certain period of time, it moves to DECIDED. +`decide_path_distance` が停車開始位置に近づくと、その時点で衝突がなく、オブジェクトの予測パスに対して安全な場合、DECIDING に遷移します。一定期間安全であれば、DECIDED に移行します。 ![path_deciding](./images/goal_planner-deciding_path.drawio.svg) -## Unimplemented parts / limitations +## 未実装部分 / 制限事項 + +- Shift pull over のみ他のモジュールと同時に実行可能 +- 駐車スペースの確保とマージンの確保のトレードオフ。状況に応じた低速走行によるマージン削減モードが必要だが、速度の動的切替メカニズムはない。 +- 駐車可能なスペースはオブジェクトの可視性に依存するため、適切な駐車決定ができない場合があります。 +- 未認識オブジェクト(未知のオブジェクトですらないもの)に対するマージンはオキュパンシグリッドに依存します。接近が許可されているオブジェクト(例:芝生、葉)は区別できないため、未認識の地上オブジェクトに近づきすぎる場合があります。 -- Only shift pull over can be executed concurrently with other modules -- Parking in tight spots and securing margins are traded off. A mode is needed to reduce the margin by using a slower speed depending on the situation, but there is no mechanism for dynamic switching of speeds. -- Parking space available depends on visibility of objects, and sometimes parking decisions cannot be made properly. -- Margin to unrecognized objects(Not even unknown objects) depends on the occupancy grid. May get too close to unrecognized ground objects because the objects that are allowed to approach (e.g., grass, leaves) are indistinguishable. +縦列駐車の未実装部分 / 制限事項 -Unimplemented parts / limitations for freespace parking +- 短いパスが生成された場合、エゴカーは走行できません。 +- 複雑なケースでは、生成に時間がかかったり、失敗したりします。 +- 走行可能なエリアは `parking_lot` に収まることが保証されていません。 -- When a short path is generated, the ego does can not drive with it. -- Complex cases take longer to generate or fail. -- The drivable area is not guaranteed to fit in the parking_lot. diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md index a52d842b5dcb9..61cf9c4b4b0c9 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md @@ -1,30 +1,31 @@ -# Lane Change design +# 車線変更設計 -The Lane Change module is activated when lane change is needed and can be safely executed. +車線変更モジュールは、車線変更が必要かつ安全に実行可能な場合にアクティベートされます。 -## Lane Change Requirement +## 車線変更要件 -- As the prerequisite, the type of lane boundary in the HD map has to be one of the following: - - Dashed lane marking: Lane changes are permitted in both directions. - - Dashed marking on the left and solid on the right: Lane changes are allowed from left to right. - - Dashed marking on the right and solid on the left: Lane changes are allowed from right to left. - - `allow_lane_change` tags is set as `true` -- During lane change request condition - - The ego-vehicle isn’t on a `preferred_lane`. - - The ego-vehicle isn't approaching a traffic light. (condition parameterized) - - The ego-vehicle isn't approaching a crosswalk. (condition parameterized) - - The ego-vehicle isn't approaching an intersection. (condition parameterized) -- lane change ready condition - - Path of the lane change does not collide with other dynamic objects (see the figure below) - - Lane change candidate path is approved by an operator. +- 前提条件として、HDマップ内の車線境界のタイプが次のいずれかにする必要があります。 + - 破線路面表示: 車線変更が両方向で許可されています。 + - 左側が破線で右側は実線: 車線変更は左から右に許可されています。 + - 右側が破線で左側が実線: 車線変更は右から左に許可されています。 + - `allow_lane_change` タグが `true` に設定されています +- 車線変更リクエスト条件の期間 + - 自車が `preferred_lane` 上にありません。 + - 自車が信号機に近づいていません (条件はパラメータ化されています)。 + - 自車が横断歩道に近づいていません (条件はパラメータ化されています)。 + - 自車が交差点に近づいていません (条件はパラメータ化されています)。 +- 車線変更準備条件 + - 車線変更の経路が他の可動物体と衝突しない (以下の図を参照) + - 車線変更候補経路はオペレーターによって承認されている。 -## Generating Lane Change Candidate Path +## 車線変更候補経路の生成 -The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path. +車線変更候補経路は、準備と車線変更の2つのフェーズに分けられます。以下の図は車線変更候補経路の各フェーズを示しています。 -![lane-change-phases](./images/lane_change-lane_change_phases.png) +![车线変更阶段](./images/lane_change-lane_change_phases.png) + +以下のグラフは、車線変更の候補経路をサンプリングするプロセスを示しています。 -The following chart illustrates the process of sampling candidate paths for lane change. ```plantuml @startuml @@ -89,7 +90,8 @@ stop @enduml ``` -While the following chart demonstrates the process of generating a valid candidate path. +以下の図では、有効な候補経路の生成プロセスを示しています。 + ```plantuml @startuml @@ -126,50 +128,54 @@ endif @enduml ``` -### Preparation phase +### 準備フェーズ + +準備軌道とは候補パスの中で最初で、自車位置に沿って生成される直線部分です。準備軌道の長さは、以下のように計算します。 -The preparation trajectory is the candidate path's first and the straight portion generated along the ego vehicle's current lane. The length of the preparation trajectory is computed as follows. ```C++ lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2 ``` -During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than `lane_change_search_distance`. +準備段階では、残り距離が`lane_change_search_distance`以下になるとウインカーが作動します。 -### Lane-changing phase +### レーン変更の段階 + +レーン変更の段階は、自車の現在の車線から目標の車線に移動するシフトパスで構成されています。レーン変更の段階の総距離を以下に示します。レーン変更の段階では、自車は一定速度で走行します。 -The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed. ```C++ lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity) lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration ``` -The `backward_length_buffer_for_end_of_lane` is added to allow some window for any possible delay, such as control or mechanical delay during brake lag. +`backward_length_buffer_for_end_of_lane` は、ブレーキ時の遅れなどの制御または機械的な遅れなどの可能性のある遅延のため、ある程度のバッファーを追加するために追加されました。 + +#### 候補パスサンプルの複数(縦方向加速度) -#### Multiple candidate path samples (longitudinal acceleration) +レーン変更速度は、自我車両の現在の速度の影響を受けます。高速は、より長い準備時間とレーン変更距離を必要とします。ただし、自我車両が減速する場合に備えて、レーン変更の軌道も計画する必要があります。自我車両が減速すると仮定する候補パスを計算するには、事前決定された減速値を `prepare_length`、`prepare_velocity`、および `lane_changing_length` の計算式に代入します。 -Lane change velocity is affected by the ego vehicle's current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down. -Computing candidate paths that assumes ego vehicle's slows down is performed by substituting predetermined deceleration value into `prepare_length`, `prepare_velocity` and `lane_changing_length` equation. +事前決定された縦方向加速度値は、`longitudinal_acceleration = maximum_longitudinal_acceleration` から開始されるセットと、`longitudinal_acceleration = -maximum_longitudinal_deceleration` に達するまで `longitudinal_acceleration_resolution` ずつ減少するセットです。`maximum_longitudinal_acceleration` と `maximum_longitudinal_deceleration` の両方が、`common.param` ファイルで `normal.min_acc` として定義されているように計算されます。 -The predetermined longitudinal acceleration values are a set of value that starts from `longitudinal_acceleration = maximum_longitudinal_acceleration`, and decrease by `longitudinal_acceleration_resolution` until it reaches `longitudinal_acceleration = -maximum_longitudinal_deceleration`. Both `maximum_longitudinal_acceleration` and `maximum_longitudinal_deceleration` are calculated as: defined in the `common.param` file as `normal.min_acc`. ```C++ maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc) maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc) ``` -where `common_param` is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, `lane_change_param` has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and `common_param.max_acc=1.0` and `lane_change_param.max_acc=0.0`, `maximum_longitudinal_acceleration` becomes `0.0`, and the lane change does not accelerate in the lane change phase. +ここで、`common_param` は車両の一般的な最大縦加速度および最大減速度を定義する車両の一般的なパラメータです。一方、`lane_change_param` には車線変更モジュールの最大縦加速度および最大減速度があります。たとえば、ユーザーが `common_param.max_acc=1.0` および `lane_change_param.max_acc=0.0` を設定すると、`maximum_longitudinal_acceleration` は `0.0` となり、車線変更フェーズで車線変更は加速しません。 + +`longitudinal_acceleration_resolution` は次によって決定されます。 -The `longitudinal_acceleration_resolution` is determine by the following ```C++ longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num ``` -Note that when the `current_velocity` is lower than `minimum_lane_changing_velocity`, the vehicle needs to accelerate its velocity to `minimum_lane_changing_velocity`. Therefore, longitudinal acceleration becomes positive value (not decelerate). +`現在の速度` が `最低車線変更速度` より小さい場合、車両は速度を `最低車線変更速度` まで加速する必要があることに注意してください。したがって、縦加速度は正の値(減速しない)になります。 + +グラフは縦加速度の値がサンプリングされる条件を示しています。 -The chart illustrates the conditions under which longitudinal acceleration values are sampled. ```plantuml @startuml @@ -222,7 +228,8 @@ stop ``` -while the following describes the process by which longitudinal accelerations are sampled. +このドキュメントでは、縦断加速度をサンプリングするプロセスについて説明します。 + ```plantuml @startuml @@ -252,45 +259,125 @@ stop @enduml ``` -The following figure illustrates when `longitudinal_acceleration_sampling_num = 4`. Assuming that `maximum_deceleration = 1.0` then `a0 == 0.0 == no deceleration`, `a1 == 0.25`, `a2 == 0.5`, `a3 == 0.75` and `a4 == 1.0 == maximum_deceleration`. `a0` is the expected lane change trajectories should ego vehicle do not decelerate, and `a1`'s path is the expected lane change trajectories should ego vehicle decelerate at `0.25 m/s^2`. +次の図は `longitudinal_acceleration_sampling_num = 4` の場合を示しています。`maximum_deceleration = 1.0` とすると、`a0 == 0.0 == 減速なし`、`a1 == 0.25`、`a2 == 0.5`、`a3 == 0.75`、`a4 == 1.0 == maximum_deceleration` となります。`a0` は自車が減速しない場合の想定される車線変更軌跡であり、`a1` の経路は自車が `0.25 m/s^2` で減速する場合の想定される車線変更軌跡です。 ![path_samples](./images/lane_change-candidate_path_samples.png) -Which path will be chosen will depend on validity and collision check. +どの経路が選択されるかは、妥当性と衝突判定によって異なります。 + +#### 候補経路サンプル複数(横断加速度) + +縦断加速度のサンプルに加え、横断加速度の値を調整することで車線変更経路のサンプリングも行います。横断加速度は車線変更の持続時間に影響するため、横断加速度の値が低いと車線変更経路が長くなり、横断加速度の値が高いと車線変更経路が短くなります。これにより、車線変更の余裕が少ない場合に横断加速度を増加させることで、車線変更モジュールはより短い車線変更経路を生成できます。 + +最大横断加速度と最小横断加速度は、車線変更パラメータファイルでマップとして定義されています。横断加速度の範囲は、マップ内の値を線形補間することで各速度について決定されます。次のようなマップがあるとします。 + +## 自動運転ソフトウェア設計仕様 + +### Overview + +このドキュメントは、Autowareの自動運転ソフトウェアの設計仕様を定義します。ここでは、Planningコンポーネントの動作を定義します。 + +### Planningコンポーネント + +Planningコンポーネントは、周囲環境を認識し、現在の位置を考慮して、車両の安全で効率的な経路を計画します。Planningコンポーネントの主な機能を次に示します。 + +- **経路生成:** 目的地を考慮した、安全で最適な経路の生成。 +- **障害物回避:** 障害物を検出し、安全に回避するための経路の調整。 +- **速度制御:** 目標速度の維持と速度制限の遵守のための速度制御。 + +### 設計仕様 + +#### 経路生成 + +**経路生成の制約条件:** + +- 車両の物理的制約(速度、加速度、旋回限界など)を遵守する。 +- 交通規則と法規に従う。 +- 障害物を安全に回避する。 + +**経路生成パラメータ:** + +次のパラメータは、経路生成アルゴリズムに影響を与えます。 + +- `post resampling`後の距離 +- `post resampling`後のHeading +- `post resampling`後の旋回角度 + +**経路生成アルゴリズム:** + +経路生成アルゴリズムは、さまざまな技術を使用できます(例:最適化、グラフ探索)。アルゴリズムは、上記の制約条件とパラメータを満たす経路を生成する必要があります。 + +#### 障害物回避 + +**障害物検出:** + +Planningコンポーネントは、センサーデータを使用して障害物を検出します(例:LiDAR、カメラ)。検出された障害物は、タイプ、サイズ、位置で分類されます。 + +**障害物回避アルゴリズム:** + +障害物回避アルゴリズムは、検出された障害物を考慮して、経路を安全に調整します。アルゴリズムは、障害物との衝突を回避しながら、元の経路からの逸脱を最小限に抑える必要があります。 + +#### 速度制御 + +**速度制御の制約条件:** + +- 車両のマキシマム速度と加速/減速能力を遵守する。 +- 速度制限に従う。 +- 安全で快適な運転体験を提供する。 + +**速度制御パラメータ:** -#### Multiple candidate path samples (lateral acceleration) +次のパラメータは、速度制御アルゴリズムに影響を与えます。 -In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change. +- 自車位置 +- 目標速度 +- 速度逸脱量 +- 加速度逸脱量 -The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let's assume we have the following map +**速度制御アルゴリズム:** -| Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration | -| :----------- | ---------------------------- | ---------------------------- | -| 0.0 | 0.2 | 0.3 | -| 2.0 | 0.2 | 0.4 | -| 4.0 | 0.3 | 0.4 | -| 6.0 | 0.3 | 0.5 | +速度制御アルゴリズムは、車両の速度を制御するために使用されます。アルゴリズムは、上記の制約条件とパラメータを満たす必要があります。 -In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values. +#### その他の仕様 + +**安全対策:** + +Planningコンポーネントは、次の安全対策を実装する必要があります。 + +- **障害物検出の冗長性:** 衝突を回避するために、複数のセンサーを使用します。 +- **経路の検証:** 経路が安全で妥当であることを検証します。 +- **異常検出:** 予期しない動作を検出し、車両を安全な状態に停止させます。 + +**効率性:** + +Planningコンポーネントは、効率的に動作し、リアルタイムの要件を満たす必要があります。 + +**拡張性:** + +Planningコンポーネントは、将来の機能拡張や改善のために設計されています。 + +このケースでは、自車位置の現在の速度が 3.0 であるとき、最小と最大の横加速度はそれぞれ 0.25 と 0.4 になります。この値は、最小と最大の横加速度値を提供するマップの 2 行目と 3 行目を線形補間することで得られます。 + +この範囲内で、自車位置の横加速度をサンプリングします。縦加速度のサンプリングに使用された方法と同様、横加速度の分解能 (lateral_acceleration_resolution) は以下の方法で決定されます。 -Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following: ```C++ lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num ``` -#### Candidate Path's validity check +#### 候補パス有効性チェック -A candidate path is considered valid if it meets the following criteria: +候補パスは、以下の条件を満たす場合、有効とみなされます。 -1. The distance from the ego vehicle's current position to the end of the current lanes is sufficient to perform a single lane change. -2. The distance from the ego vehicle's current position to the goal along the current lanes is adequate to complete multiple lane changes. -3. The distance from the ego vehicle's current position to the end of the target lanes is adequate for completing multiple lane changes. -4. The distance from the ego vehicle's current position to the next regulatory element is adequate to perform a single lane change. -5. The lane change can be completed after passing a parked vehicle. -6. The lane change is deemed safe to execute. +1. 自車位置から現在の車線の終わりまでの距離は、車線変更一回分を完了するには十分である。 +2. 自車位置から現在の車線に沿った目標までの距離は、複数の車線変更を完了するには十分である。 +3. 自車位置から目標車線の終わりまでの距離は、複数の車線変更を完了するには十分である。 +4. 自車位置から次の規制要素までの距離は、車線変更一回分を完了するには十分である。 +5. 駐車車両を通過してから車線変更を完了可能である。 +6. 車線変更を実行するのが安全とみなされる。 + +以下のフローチャートは、有効性チェックを示しています。 -The following flow chart illustrates the validity check. ```plantuml @startuml @@ -353,38 +440,39 @@ stop #### Candidate Path's Safety check -See [safety check utils explanation](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) +[安全チェックユーティリティの説明](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md)を参照 -#### Objects selection and classification +#### オブジェクトの選択と分類 -First, we divide the target objects into obstacles in the target lane, obstacles in the current lane, and obstacles in other lanes. Target lane indicates the lane that the ego vehicle is going to reach after the lane change and current lane mean the current lane where the ego vehicle is following before the lane change. Other lanes are lanes that do not belong to the target and current lanes. The following picture describes objects on each lane. Note that users can remove objects either on current and other lanes from safety check by changing the flag, which are `check_objects_on_current_lanes` and `check_objects_on_other_lanes`. +まず、ターゲットオブジェクトをターゲットレーンの障害物、現在のレーンの障害物、および他のレーンの障害物に分割します。ターゲットレーンは、レーン変更後に自車が到達するレーンを示しており、現在のレーンとはレーン変更前の自車が走行中の現在のレーンを意味します。他のレーンは、ターゲットレーンと現在のレーンに属さないレーンです。次の図は、各レーンのオブジェクトを示しています。`check_objects_on_current_lanes`フラグと`check_objects_on_other_lanes`フラグを変更することにより、安全チェックから現在のレーンと他のレーンのオブジェクトを除外できることに注意してください。 -![object lanes](./images/lane_objects.drawio.svg) +![オブジェクトレーン](./images/lane_objects.drawio.svg) -Furthermore, to change lanes behind a vehicle waiting at a traffic light, we skip the safety check for the stopping vehicles near the traffic light. The explanation for parked car detection is written in [documentation for avoidance module](../autoware_behavior_path_static_obstacle_avoidance_module/README.md). +さらに、信号で待機している車両の後ろでレーン変更を行うために、信号付近の停止している車両に対する安全チェックをスキップします。駐車車両の検出に関する説明は、[回避モジュールのドキュメント](../autoware_behavior_path_static_obstacle_avoidance_module/README.md)に記載されています。 -The detection area for the target lane can be expanded beyond its original boundaries to enable detection of objects that are outside the target lane's limits. +ターゲットレーンの検出範囲は、ターゲットレーンの境界を越えるオブジェクトを検出できるように元の境界を超えて拡張できます。
-
Without Lane Expansion
- Without lane expansion +
レーン拡張なし
+ レーン拡張なし
-
With Lane Expansion
- With lane expansion +
レーン拡張あり
+ レーン拡張あり
-##### Object filtering +##### オブジェクトフィルタリング + ```plantuml @startuml @@ -519,32 +607,34 @@ stop @enduml ``` -##### Collision check in prepare phase +##### prepareフェーズでの衝突確認 + +自車位置をターゲット車両の直前まで十分に確保してから、車線変更しようとすることがあります。この動作を実現するには、フラグ`enable_collision_check_at_prepare_phase`を有効にすることができます。次の画像は、`false`と`true`の場合の違いを示しています。 -The ego vehicle may need to secure ample inter-vehicle distance ahead of the target vehicle before attempting a lane change. The flag `enable_collision_check_at_prepare_phase` can be enabled to gain this behavior. The following image illustrates the differences between the `false` and `true` cases. +![prepareフェーズでの衝突チェックの有効化](./images/lane_change-enable_collision_check_at_prepare_phase.png) -![enable collision check at prepare phase](./images/lane_change-enable_collision_check_at_prepare_phase.png) +パラメータ`prepare_phase_ignore_target_speed_thresh`は、停止または非常に低速で走行するオブジェクトなど、速度が特定の閾値未満のターゲットに対してprepareフェーズの衝突チェックを無視するように設定できます。 -The parameter `prepare_phase_ignore_target_speed_thresh` can be configured to ignore the prepare phase collision check for targets whose speeds are less than a specific threshold, such as stationary or very slow-moving objects. +#### 車線がブロックされている場合と複数の車線変更 -#### If the lane is blocked and multiple lane changes +他の車両と一緒に公道を走行する場合は、車線変更が実行できないシナリオがあります。例えば、近隣の車線に進入車両があるため、候補パスが安全でない場合が考えられます。その場合、自車位置は車線変更することができず、ゴールに到達することはできません。そのため、自車位置は特定の距離で早めに停止し、近隣の車線が安全と評価されるまで待つ必要があります。最小停止距離は、シフトの長さと車線変更の最小速度から計算できます。 -When driving on the public road with other vehicles, there exist scenarios where lane changes cannot be executed. Suppose the candidate path is evaluated as unsafe, for example, due to incoming vehicles in the adjacent lane. In that case, the ego vehicle can't change lanes, and it is impossible to reach the goal. Therefore, the ego vehicle must stop earlier at a certain distance and wait for the adjacent lane to be evaluated as safe. The minimum stopping distance can be computed from shift length and minimum lane changing velocity. ```C++ lane_changing_time = f(shift_length, lat_acceleration, lat_jerk) minimum_lane_change_distance = minimum_prepare_length + minimum_lane_changing_velocity * lane_changing_time + lane_change_finish_judge_buffer ``` -The following figure illustrates when the lane is blocked in multiple lane changes cases. +以下の図は、複数車線変更時に車線が塞がれている場合を示しています。 ![multiple-lane-changes](./images/lane_change-when_cannot_change_lanes.png) -### Stopping behavior +### 停車動作 -The stopping behavior of the ego vehicle is determined based on various factors, such as the number of lane changes required, the presence of obstacles, and the position of blocking objects in relation to the lane change plan. The objective is to choose a suitable stopping point that allows for a safe and effective lane change while adapting to different traffic scenarios. +自車の停車動作は、必要な車線変更回数、障害物の有無、および車線変更計画に関する障害物の位置など、さまざまな要素に基づいて決定されます。目的は、さまざまな交通状況に適応しながら、安全かつ効果的な車線変更を可能にする適切な停止地点を選択することです。 + +次のフローチャートとサブセクションでは、障害物が前方にある場合に停止地点を挿入する場所の決定条件について説明します。 -The following flowchart and subsections explain the conditions for deciding where to insert a stop point when an obstacle is ahead. ```plantuml @startuml @@ -592,78 +682,79 @@ stop @enduml ``` -#### Ego vehicle's stopping position when an object exists ahead +#### 自車の前方に障害物がある場合の停止位置 -When the ego vehicle encounters an obstacle ahead, it stops while maintaining a safe distance to prepare for a possible lane change. The exact stopping position depends on factors like whether the target lane is clear or if the lane change needs to be delayed. The following explains how different stopping scenarios are handled: +自車が前方に障害物に遭遇した場合は、車線変更の可能性に備えて安全な距離を保ちながら停止します。正確な停止位置は、ターゲット車線が空いているかどうかや、車線変更が遅れる必要があるかに左右されます。以下に、さまざまな停止シナリオの処理方法を示します。 -##### When the near the end of the lane change +##### 車線変更終了間近の場合 -Whether the target lane has obstacles or is clear, the ego vehicle stops while keeping a safe distance from the obstacle ahead, ensuring there is enough room for the lane change. +ターゲット車線に障害物があるかどうかに関係なく、自車は前方の障害物から安全な距離を保ちながら停止し、車線変更に十分なスペースが確保されます。 ![stop_at_terminal_no_block](./images/lane_change-stop_at_terminal_no_block.drawio.svg) ![stop_at_terminal](./images/lane_change-stop_at_terminal.drawio.svg) -##### When the ego vehicle is not near the end of the lane change +##### 自車が車線変更終了間近でない場合 -The ego vehicle stops while maintaining a safe distance from the obstacle ahead, ensuring there is enough space for a lane change. +自車は前方の障害物から安全な距離を保ちながら停止し、車線変更に十分なスペースが確保されます。 ![stop_not_at_terminal_no_blocking_object](./images/lane_change-stop_not_at_terminal_no_blocking_object.drawio.svg) -#### Ego vehicle's stopping position when an object exists in the lane changing section +#### 車線変更セクションに障害物がある場合の自車停止位置 -If there are objects within the lane change section of the target lane, the ego vehicle stops closer to the obstacle ahead, without maintaining the usual distance for a lane change. +ターゲット車線の車線変更セクションに障害物がある場合、自車は通常の車線変更距離を維持せず、前方の障害物に近い場所で停止します。 -##### When near the end of the lane change +##### 車線変更終了間近の場合 -Regardless of whether there are obstacles in the target lane, the ego vehicle stops while keeping a safe distance from the obstacle ahead, allowing for the lane change. +ターゲット車線に障害物があるかどうかに関係なく、自車は前方の障害物から安全な距離を保ちながら停止し、車線変更を可能にします。 ![stop_at_terminal_no_block](./images/lane_change-stop_at_terminal_no_block.drawio.svg) ![stop_at_terminal](./images/lane_change-stop_at_terminal.drawio.svg) -##### When not near the end of the lane change +##### 車線変更終了間近でない場合 -If there are no obstacles in the lane change section of the target lane, the ego vehicle stops while keeping a safe distance from the obstacle ahead to accommodate the lane change. +ターゲット車線の車線変更セクションに障害物がない場合、自車は前方の障害物から安全距離を確保しながら停止し、車線変更に対応します。 ![stop_not_at_terminal_no_blocking_object](./images/lane_change-stop_not_at_terminal_no_blocking_object.drawio.svg) -If there are obstacles within the lane change section of the target lane, the ego vehicle stops closer to the obstacle ahead, without keeping the usual distance needed for a lane change. +ターゲット車線の車線変更セクション内に障害物がある場合、自車は通常の車線変更に必要な距離を維持せず、前方の障害物に近い場所で停止します。 ![stop_not_at_terminal](./images/lane_change-stop_not_at_terminal.drawio.svg) -#### When the target lane is far away +#### ターゲット車線が遠い場合 -If the target lane for the lane change is far away and not next to the current lane, the ego vehicle stops closer to the obstacle ahead, as maintaining the usual distance for a lane change is not necessary. +車線変更用のターゲット車線が遠く、現在の車線に隣接していない場合、自車は車線変更用の通常の距離を維持する必要がないため、前方の障害物に近づいて停止します。 ![stop_far_from_target_lane](./images/lane_change-stop_far_from_target_lane.drawio.svg) ![stop_not_at_terminal](./images/lane_change-stop_not_at_terminal.drawio.svg) -### Lane Change When Stuck +### スタック時の車線変更 + +自車が停止していて、次のいずれかの条件を満たす場合、スタックしていると見なされます。 -The ego vehicle is considered stuck if it is stopped and meets any of the following conditions: +- 現在の車線の前方に障害物がある +- 自車が現在の車線の末端に位置している -- There is an obstacle in front of the current lane -- The ego vehicle is at the end of the current lane +この場合、通常の時間と比較して車線変更の安全確認は緩和されます。 +詳細は、「車線変更時の衝突確認」の「stuck」セクションを参照してください。 +この機能を実現するために、前述のセクションで前進する障害物に対してある程度のマージンを保って停止する機能が実行されます。 -In this case, the safety check for lane change is relaxed compared to normal times. -Please refer to the 'stuck' section under the 'Collision checks during lane change' for more details. -The function to stop by keeping a margin against forward obstacle in the previous section is being performed to achieve this feature. +### 車線変更に関する制御 -### Lane change regulations +交差点や信号で車線変更を制御する場合、車線変更モジュールはそれらの付近で無効になります。 +交差点や信号で車線変更を制御するには、`regulation.crosswalk`, `regulation.intersection`または`regulation.traffic_light`を`true`に設定します。 +自車がスタックした場合、スタックを避けるため車線変更が交差点/交差点で有効になります。 +自車が`stuck_detection.stop_time`秒以上停止すると、スタックと見なされます。 +自車の速度が`stuck_detection.velocity`未満の場合、停止していると見なされます。 -If you want to regulate lane change on crosswalks, intersections, or traffic lights, the lane change module is disabled near any of them. -To regulate lane change on crosswalks, intersections, or traffic lights, set `regulation.crosswalk`, `regulation.intersection` or `regulation.traffic_light` to `true`. -If the ego vehicle gets stuck, to avoid stuck, it enables lane change in crosswalk/intersection. -If the ego vehicle stops more than `stuck_detection.stop_time` seconds, it is regarded as a stuck. -If the ego vehicle velocity is smaller than `stuck_detection.velocity`, it is regarded as stopping. +### 車線変更の中断 -### Aborting lane change +中断プロセスは、取り消し、中断、停止/巡航の3つの異なる結果をもたらす可能性があります。 -The abort process may result in three different outcome; Cancel, Abort and Stop/Cruise. +以下は、車線変更の中断チェックの流れを示しています。 -The following depicts the flow of the abort lane change check. ```plantuml @startuml @@ -709,9 +800,10 @@ detach @enduml ``` -During a lane change, a safety check is made in consideration of the deceleration of the ego vehicle, and a safety check is made for `cancel.deceleration_sampling_num` deceleration patterns, and the lane change will be canceled if the abort condition is satisfied for all deceleration patterns. +車線変更中は、自車減速を考慮した安全確認が実施され、`cancel.deceleration_sampling_num` 個の減速パターンの安全確認を実施し、すべての減速パターンで中止条件が満たされた場合は、車線変更がキャンセルされます。 + +安全と危険な状態の交互によって発生する車線変更経路の振動に対する予防策として、中止またはキャンセル操作を実行する前に、ヒステリシスカウントチェックが追加で実装されています。安全でない場合は、`unsafe_hysteresis_count_` がインクリメントされ、`unsafe_hysteresis_threshold` と比較されます。これを超えると中止条件のチェックが促され、最近の安全評価を考慮に入れて決定が下されるようにします(上のフローチャートで示されています)。このメカニズムは意思決定を安定させ、一時的な安全でない状態による急激な変化を防ぎます。 -To preventive measure for lane change path oscillations caused by alternating safe and unsafe conditions, an additional hysteresis count check is implemented before executing an abort or cancel maneuver. If unsafe, the `unsafe_hysteresis_count_` is incremented and compared against `unsafe_hysteresis_threshold`; exceeding it prompts an abort condition check, ensuring decisions are made with consideration to recent safety assessments as shown in flow chart above. This mechanism stabilizes decision-making, preventing abrupt changes due to transient unsafe conditions. ```plantuml @startuml @@ -734,37 +826,38 @@ endif @enduml ``` -#### Cancel +## キャンセル -Suppose the lane change trajectory is evaluated as unsafe. In that case, if the ego vehicle has not departed from the current lane yet, the trajectory will be reset, and the ego vehicle will resume the lane following the maneuver. +車線変更軌道が安全ではないと評価された場合、自車位置が現在の車線をまだ離れていない場合、軌道がリセットされ、自車位置は車線フォロー操作を再開します。 -The function can be enabled by setting `enable_on_prepare_phase` to `true`. +`enable_on_prepare_phase` を `true` に設定することでこの関数を有効化できます。 -The following image illustrates the cancel process. +次の図はキャンセル処理を示しています。 ![cancel](./images/lane_change-cancel.png) -#### Abort +## 中断 -Assume the ego vehicle has already departed from the current lane. In that case, it is dangerous to cancel the path, and it will cause the ego vehicle to change the heading direction abruptly. In this case, planning a trajectory that allows the ego vehicle to return to the current path while minimizing the heading changes is necessary. In this case, the lane change module will generate an abort path. The following images show an example of the abort path. Do note that the function DOESN'T GUARANTEE a safe abort process, as it didn't check the presence of the surrounding objects and/or their reactions. The function can be enable manually by setting both `enable_on_prepare_phase` and `enable_on_lane_changing_phase` to `true`. The parameter `max_lateral_jerk` need to be set to a high value in order for it to work. +自車位置が既に現在の車線を離れているとします。その場合、パスをキャンセルすることは危険であり、自車位置が急激に進行方向を変えることになります。この場合、進行方向の変更を最小限に抑えながら、自車位置が現在のパスに戻ることを可能にする軌道を計画する必要があります。この場合、車線変更モジュールは中断パスを生成します。次の図は中断パスの例を示しています。この関数は周囲にある物体の有無やその反応を確認しないため、安全な中断処理が保障されません。`enable_on_prepare_phase` と `enable_on_lane_changing_phase` の両方を `true` に設定することで、この関数を手動で有効化できます。この機能を動作させるには、`max_lateral_jerk` パラメータを大きな値に設定する必要があります。 ![abort](./images/lane_change-abort.png) -#### Stop/Cruise +## 停止/巡航 -The last behavior will also occur if the ego vehicle has departed from the current lane. If the abort function is disabled or the abort is no longer possible, the ego vehicle will attempt to stop or transition to the obstacle cruise mode. Do note that the module DOESN'T GUARANTEE safe maneuver due to the unexpected behavior that might've occurred during these critical scenarios. The following images illustrate the situation. +この最後の動作は、自車位置が現在の車線を離れた場合にも発生します。中断関数が無効化されているか、中断がもはや不可能な場合、自車位置は停止するか障害物巡航モードに移行しようとします。これらの重要なシナリオ中に発生する予期しない動作により、このモジュールは安全な操作を保障しません。次の図は状況を示しています。 ![stop](./images/lane_change-cant_cancel_no_abort.png) -## Lane change completion checks +## 車線変更完了チェック + +自車位置が車線変更に成功したかどうかを判断するには、縦方向基準または横方向基準のいずれかが満たされている必要があります。 -To determine if the ego vehicle has successfully changed lanes, one of two criteria must be met: either the longitudinal or the lateral criteria. +縦方向基準では、自車位置は車線変更の終端ポーズを通過し、その距離が `finish_judge_buffer` 内にある必要があります。モジュールはその後、自車位置が目標車線にあるかどうかを確認します。true の場合、モジュールは success を返します。このチェックにより、プランナーマネージャーが自車位置の現在のポーズに基づいてルートレーンレットを正しく更新します。このチェックがない場合、自車位置が障害物を回避しながら車線変更を行っていて現在のポーズが元の車線にある場合、プランナーマネージャーはルートレーンレットを元の車線として設定します。これにより、自車位置はもう一度車線変更を実行することになります。目標車線チェックがあれば、自車位置が目標車線にあることが確認され、プランナーマネージャーはルートレーンレットを正しく更新できます。 -For the longitudinal criteria, the ego vehicle must pass the lane-changing end pose and be within the `finish_judge_buffer` distance from it. The module then checks if the ego vehicle is in the target lane. If true, the module returns success. This check ensures that the planner manager updates the root lanelet correctly based on the ego vehicle's current pose. Without this check, if the ego vehicle is changing lanes while avoiding an obstacle and its current pose is in the original lane, the planner manager might set the root lanelet as the original lane. This would force the ego vehicle to perform the lane change again. With the target lane check, the ego vehicle is confirmed to be in the target lane, and the planner manager can correctly update the root lanelets. +縦方向基準が満たされない場合、モジュールは横方向基準を評価します。横方向基準では、自車位置は目標車線のセンターラインから `finish_judge_lateral_threshold` 距離以内にある必要があり、角度偏差が `finish_judge_lateral_angle_deviation` 度以内である必要があります。角度偏差チェックにより、急激な操舵がないことが保証されます。角度偏差が大きすぎると、自車位置の向きがセンターラインから大きく逸脱し、軌道追従器が積極的に操舵を修正してセンターラインに戻ろうとします。角度偏差の値を可能な限り小さくすることで、この問題を回避できます。 -If the longitudinal criteria are not met, the module evaluates the lateral criteria. For the lateral criteria, the ego vehicle must be within `finish_judge_lateral_threshold` distance from the target lane's centerline, and the angle deviation must be within `finish_judge_lateral_angle_deviation` degrees. The angle deviation check ensures there is no sudden steering. If the angle deviation is set too high, the ego vehicle's orientation could deviate significantly from the centerline, causing the trajectory follower to aggressively correct the steering to return to the centerline. Keeping the angle deviation value as small as possible avoids this issue. +車線変更完了の判定プロセスは、次の図に示します。 -The process of determining lane change completion is shown in the following diagram. ```plantuml @startuml @@ -811,196 +904,228 @@ endif @enduml ``` -## Parameters - -### Essential lane change parameters - -The following parameters are configurable in [lane_change.param.yaml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml) - -| Name | Unit | Type | Description | Default value | -| :------------------------------------------- | ------ | ------ | ---------------------------------------------------------------------------------------------------------------------- | ------------------ | -| `backward_lane_length` | [m] | double | The backward length to check incoming objects in lane change target lane. | 200.0 | -| `prepare_duration` | [m] | double | The preparation time for the ego vehicle to be ready to perform lane change. | 4.0 | -| `backward_length_buffer_for_end_of_lane` | [m] | double | The end of lane buffer to ensure ego vehicle has enough distance to start lane change | 3.0 | -| `backward_length_buffer_for_blocking_object` | [m] | double | The end of lane buffer to ensure ego vehicle has enough distance to start lane change when there is an object in front | 3.0 | -| `lane_change_finish_judge_buffer` | [m] | double | The additional buffer used to confirm lane change process completion | 2.0 | -| `lane_changing_lateral_jerk` | [m/s3] | double | Lateral jerk value for lane change path generation | 0.5 | -| `minimum_lane_changing_velocity` | [m/s] | double | Minimum speed during lane changing process. | 2.78 | -| `prediction_time_resolution` | [s] | double | Time resolution for object's path interpolation and collision check. | 0.5 | -| `longitudinal_acceleration_sampling_num` | [-] | int | Number of possible lane-changing trajectories that are being influenced by longitudinal acceleration | 3 | -| `lateral_acceleration_sampling_num` | [-] | int | Number of possible lane-changing trajectories that are being influenced by lateral acceleration | 3 | -| `object_check_min_road_shoulder_width` | [m] | double | Width considered as a road shoulder if the lane does not have a road shoulder | 0.5 | -| `object_shiftable_ratio_threshold` | [-] | double | Vehicles around the center line within this distance ratio will be excluded from parking objects | 0.6 | -| `min_length_for_turn_signal_activation` | [m] | double | Turn signal will be activated if the ego vehicle approaches to this length from minimum lane change length | 10.0 | -| `length_ratio_for_turn_signal_deactivation` | [-] | double | Turn signal will be deactivated if the ego vehicle approaches to this length ratio for lane change finish point | 0.8 | -| `max_longitudinal_acc` | [-] | double | maximum longitudinal acceleration for lane change | 1.0 | -| `min_longitudinal_acc` | [-] | double | maximum longitudinal deceleration for lane change | -1.0 | -| `lateral_acceleration.velocity` | [m/s] | double | Reference velocity for lateral acceleration calculation (look up table) | [0.0, 4.0, 10.0] | -| `lateral_acceleration.min_values` | [m/ss] | double | Min lateral acceleration values corresponding to velocity (look up table) | [0.4, 0.4, 0.4] | -| `lateral_acceleration.max_values` | [m/ss] | double | Max lateral acceleration values corresponding to velocity (look up table) | [0.65, 0.65, 0.65] | - -### Parameter to judge if lane change is completed - -The following parameters are used to judge lane change completion. - -| Name | Unit | Type | Description | Default value | +## パラメータ + +### 必須車線変更パラメータ + +以下のパラメータは [lane_change.param.yaml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml) で構成できます。 + +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +|---|---|---|---|---| +| `backward_lane_length` | [m] | double | 車線変更のターゲット車線を後方からチェックする長さ | 200.0 | +| `prepare_duration` | [m] | double | 自動運転車が車線変更の準備をするための時間 | 4.0 | +| `backward_length_buffer_for_end_of_lane` | [m] | double | 車線変更を開始するために自動運転車が十分な距離を確保するための、車線末端のバッファ | 3.0 | +| `backward_length_buffer_for_blocking_object` | [m] | double | 車両の正面に障害物がある場合に車線変更を開始するために自動運転車が十分な距離を確保するための、車線末端のバッファ | 3.0 | +| `backward_length_from_intersection` | [m] | double | 最後の交差点からの距離のしきい値。この距離以内では車線変更経路が無効またはキャンセルされる | 5.0 | +| `lane_change_finish_judge_buffer` | [m] | double | 車線変更プロセスの完了を確認するために使用される追加のバッファ | 2.0 | +| `lane_changing_lateral_jerk` | [m/s3] | double | 車線変更経路を生成するための横方向加速度値 | 0.5 | +| `minimum_lane_changing_velocity` | [m/s] | double | 車線変更プロセス中の最小速度 | 2.78 | +| `prediction_time_resolution` | [s] | double | 障害物の経路補間と衝突チェックのための時間分解能 | 0.5 | +| `longitudinal_acceleration_sampling_num` | [-] | int | 縦方向加速度の影響を受ける車線変更可能な経路の数 | 3 | +| `lateral_acceleration_sampling_num` | [-] | int | 横方向加速度の影響を受ける車線変更可能な経路の数 | 3 | +| `object_check_min_road_shoulder_width` | [m] | double | 車線に路側帯がない場合、路側帯と見なされる幅 | 0.5 | +| `object_shiftable_ratio_threshold` | [-] | double | 中心線からこの距離比内にある車両は、駐車車両から除外される | 0.6 | +| `min_length_for_turn_signal_activation` | [m] | double | 自動運転車が車線変更の最小距離にこの長さまで近づいたら、ターンシグナルが有効になる | 10.0 | +| `length_ratio_for_turn_signal_deactivation` | [-] | double | 自動運転車が車線変更の終了点にこの距離比まで近づいたら、ターンシグナルが無効になる | 0.8 | +| `max_longitudinal_acc` | [-] | double | 車線変更の最大縦方向加速度 | 1.0 | +| `min_longitudinal_acc` | [-] | double | 車線変更の最大縦方向減速度 | -1.0 | +| `lateral_acceleration.velocity` | [m/s] | double | 横方向加速度計算のための基準速度(参照テーブル) | [0.0, 4.0, 10.0] | +| `lateral_acceleration.min_values` | [m/ss] | double | 速度に対応する最小横方向加速度値(参照テーブル) | [0.4, 0.4, 0.4] | +| `lateral_acceleration.max_values` | [m/ss] | double | 速度に対応する最大横方向加速度値(参照テーブル) | [0.65, 0.65, 0.65] | + +### 車線変更完了判定パラメータ + +車線変更完了を判定するために、以下のパラメータを使用します。 + +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | | :------------------------------------- | ----- | ------ | ---------------------------------------------------------------------------------------------------------------------- | ------------- | -| `lane_change_finish_judge_buffer` | [m] | double | The longitudinal distance starting from the lane change end pose. | 2.0 | -| `finish_judge_lateral_threshold` | [m] | double | The lateral distance from targets lanes' centerline. Used in addition with `finish_judge_lateral_angle_deviation` | 0.1 | -| `finish_judge_lateral_angle_deviation` | [deg] | double | Ego angle deviation with reference to target lanes' centerline. Used in addition with `finish_judge_lateral_threshold` | 2.0 | +| `lane_change_finish_judge_buffer` | [m] | double | レーン変更終了姿勢からの縦方向距離 | 2.0 | +| `finish_judge_lateral_threshold` | [m] | double | ターゲットレーンの中心線からの横方向距離。`finish_judge_lateral_angle_deviation`と併用する | 0.1 | +| `finish_judge_lateral_angle_deviation` | [度] | double | ターゲットレーンの中心線に対する自車角度偏差。`finish_judge_lateral_threshold`と併用する | 2.0 | + +### 車線変更規制 + +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------- | ---- | ------- | ----------------------------------------------------------------------------------- | ------------- | +| `regulation.crosswalk` | [-] | ブール値 | 横断歩道間での車線変更を許可する | true | +| `regulation.intersection` | [-] | ブール値 | 交差点間での車線変更を許可する | true | +| `regulation.traffic_light` | [-] | ブール値 | 信号間での車線変更の実行を許可する | true | -### Lane change regulations +### 自車位置検出 -| Name | Unit | Type | Description | Default value | -| :------------------------- | ---- | ------- | ---------------------------------------------------------- | ------------- | -| `regulation.crosswalk` | [-] | boolean | Allow lane change in between crosswalks | true | -| `regulation.intersection` | [-] | boolean | Allow lane change in between intersections | true | -| `regulation.traffic_light` | [-] | boolean | Allow lane change to be performed in between traffic light | true | +--- -### Ego vehicle stuck detection +障害物が自車を完全に包囲して動作不可能にした状態を検出します。 -| Name | Unit | Type | Description | Default value | +| 名称 | 単位 | 型 | 説明 | 初期値 | | :-------------------------- | ----- | ------ | --------------------------------------------------- | ------------- | -| `stuck_detection.velocity` | [m/s] | double | Velocity threshold for ego vehicle stuck detection | 0.1 | -| `stuck_detection.stop_time` | [s] | double | Stop time threshold for ego vehicle stuck detection | 3.0 | +| `stuck_detection.velocity` | [m/s] | double | 自車位置の静止検出における速度しきい値 | 0.1 | +| `stuck_detection.stop_time` | [秒] | double | 自車位置の静止検出における停止時間しきい値 | 3.0 | -### Collision checks +### 衝突チェック -#### Target Objects +#### 目標オブジェクト -| Name | Unit | Type | Description | Default value | -| :------------------------- | ---- | ------- | ------------------------------------------- | ------------- | -| `target_object.car` | [-] | boolean | Include car objects for safety check | true | -| `target_object.truck` | [-] | boolean | Include truck objects for safety check | true | -| `target_object.bus` | [-] | boolean | Include bus objects for safety check | true | -| `target_object.trailer` | [-] | boolean | Include trailer objects for safety check | true | -| `target_object.unknown` | [-] | boolean | Include unknown objects for safety check | true | -| `target_object.bicycle` | [-] | boolean | Include bicycle objects for safety check | true | -| `target_object.motorcycle` | [-] | boolean | Include motorcycle objects for safety check | true | -| `target_object.pedestrian` | [-] | boolean | Include pedestrian objects for safety check | true | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :------------------------- | ---- | ------- | -------------------------------------------------- | ------------- | +| `target_object.car` | [-] | boolean | 安全チェックに自動車オブジェクトを含める | true | +| `target_object.truck` | [-] | boolean | 安全チェックにトラックオブジェクトを含める | true | +| `target_object.bus` | [-] | boolean | 安全チェックにバスオブジェクトを含める | true | +| `target_object.trailer` | [-] | boolean | 安全チェックにトレーラーオブジェクトを含める | true | +| `target_object.unknown` | [-] | boolean | 安全チェックに不明オブジェクトを含める | true | +| `target_object.bicycle` | [-] | boolean | 安全チェックに自転車オブジェクトを含める | true | +| `target_object.motorcycle` | [-] | boolean | 安全チェックにオートバイオブジェクトを含める | true | +| `target_object.pedestrian` | [-] | boolean | 安全チェックに歩行者オブジェクトを含める | true | #### common -| Name | Unit | Type | Description | Default value | -| :----------------------------------------- | ---- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `safety_check.lane_expansion.left_offset` | [m] | double | Expand the left boundary of the detection area, allowing objects previously outside on the left to be detected and registered as targets. | 0.0 | -| `safety_check.lane_expansion.right_offset` | [m] | double | Expand the right boundary of the detection area, allowing objects previously outside on the right to be detected and registered as targets. | 0.0 | - -#### Additional parameters - -| Name | Unit | Type | Description | Default value | -| :------------------------------------------------------- | ----- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `enable_collision_check_for_prepare_phase.general_lanes` | [-] | boolean | Perform collision check starting from the prepare phase for situations not explicitly covered by other settings (e.g., intersections). If `false`, collision check only evaluated for lane changing phase. | false | -| `enable_collision_check_for_prepare_phase.intersection` | [-] | boolean | Perform collision check starting from prepare phase when ego is in intersection. If `false`, collision check only evaluated for lane changing phase. | true | -| `enable_collision_check_for_prepare_phase.turns` | [-] | boolean | Perform collision check starting from prepare phase when ego is in lanelet with turn direction tags. If `false`, collision check only evaluated for lane changing phase. | true | -| `prepare_phase_ignore_target_speed_thresh` | [m/s] | double | Ignore collision check in prepare phase of object speed that is lesser that the configured value. `enable_collision_check_at_prepare_phase` must be `true` | 0.1 | -| `check_objects_on_current_lanes` | [-] | boolean | If true, the lane change module check objects on current lanes when performing collision assessment. | false | -| `check_objects_on_other_lanes` | [-] | boolean | If true, the lane change module include objects on other lanes. when performing collision assessment | false | -| `use_all_predicted_path` | [-] | boolean | If false, use only the predicted path that has the maximum confidence. | true | -| `safety_check.collision_check_yaw_diff_threshold` | [rad] | double | Maximum yaw difference between ego and object when executing rss-based collision checking | 3.1416 | - -#### safety constraints during lane change path is computed - -| Name | Unit | Type | Description | Default value | -| :----------------------------------------------------------- | ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `safety_check.execution.expected_front_deceleration` | [m/s^2] | double | The front object's maximum deceleration when the front vehicle perform sudden braking. (\*1) | -1.0 | -| `safety_check.execution.expected_rear_deceleration` | [m/s^2] | double | The rear object's maximum deceleration when the rear vehicle perform sudden braking. (\*1) | -1.0 | -| `safety_check.execution.rear_vehicle_reaction_time` | [s] | double | The reaction time of the rear vehicle driver which starts from the driver noticing the sudden braking of the front vehicle until the driver step on the brake. | 2.0 | -| `safety_check.execution.rear_vehicle_safety_time_margin` | [s] | double | The time buffer for the rear vehicle to come into complete stop when its driver perform sudden braking. | 1.0 | -| `safety_check.execution.lateral_distance_max_threshold` | [m] | double | The lateral distance threshold that is used to determine whether lateral distance between two object is enough and whether lane change is safe. | 2.0 | -| `safety_check.execution.longitudinal_distance_min_threshold` | [m] | double | The longitudinal distance threshold that is used to determine whether longitudinal distance between two object is enough and whether lane change is safe. | 3.0 | -| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | The time multiplier that is used to compute the actual gap between vehicle at each predicted points (not RSS distance) | 0.8 | - -#### safety constraints specifically for stopped or parked vehicles - -| Name | Unit | Type | Description | Default value | -| :-------------------------------------------------------- | ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `safety_check.parked.expected_front_deceleration` | [m/s^2] | double | The front object's maximum deceleration when the front vehicle perform sudden braking. (\*1) | -1.0 | -| `safety_check.parked.expected_rear_deceleration` | [m/s^2] | double | The rear object's maximum deceleration when the rear vehicle perform sudden braking. (\*1) | -2.0 | -| `safety_check.parked.rear_vehicle_reaction_time` | [s] | double | The reaction time of the rear vehicle driver which starts from the driver noticing the sudden braking of the front vehicle until the driver step on the brake. | 1.0 | -| `safety_check.parked.rear_vehicle_safety_time_margin` | [s] | double | The time buffer for the rear vehicle to come into complete stop when its driver perform sudden braking. | 0.8 | -| `safety_check.parked.lateral_distance_max_threshold` | [m] | double | The lateral distance threshold that is used to determine whether lateral distance between two object is enough and whether lane change is safe. | 1.0 | -| `safety_check.parked.longitudinal_distance_min_threshold` | [m] | double | The longitudinal distance threshold that is used to determine whether longitudinal distance between two object is enough and whether lane change is safe. | 3.0 | -| `safety_check.parked.longitudinal_velocity_delta_time` | [m] | double | The time multiplier that is used to compute the actual gap between vehicle at each predicted points (not RSS distance) | 0.8 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------- | ---- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `safety_check.lane_expansion.left_offset` | [m] | 倍精度浮動小数点 | 検出領域の左側の境界を拡大し、以前は左側にあったオブジェクトの検出とターゲットへの登録を可能にする。 | 0.0 | +| `safety_check.lane_expansion.right_offset` | [m] | 倍精度浮動小数点 | 検出領域の右側の境界を拡大し、以前は右側にあったオブジェクトの検出とターゲットへの登録を可能にする。 | 0.0 | + +#### 追加パラメータ + +| Name | Unit | Type | Description | Default value | +| :------------------------------------------------------- | ----- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `enable_collision_check_for_prepare_phase.general_lanes` | [-] | boolean | Planningコンポーネントの準備フェーズから衝突チェックを実行します(交差点など、他の設定で明示的にカバーされていない状況の場合)。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | false | +| `enable_collision_check_for_prepare_phase.intersection` | [-] | boolean | 自車が交差点にいる場合、準備フェーズから衝突チェックを実行します。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | true | +| `enable_collision_check_for_prepare_phase.turns` | [-] | boolean | 自車が旋回方向タグのあるLaneletにいる場合、準備フェーズから衝突チェックを実行します。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | true | +| `prepare_phase_ignore_target_speed_thresh` | [m/s] | double | 設定された値より小さいオブジェクトの速度について、準備フェーズでの衝突チェックを無視します。`enable_collision_check_at_prepare_phase`が`true`である必要があります。 | 0.1 | +| `check_objects_on_current_lanes` | [-] | boolean | trueの場合、車線変更モジュールは衝突評価を実行する際、現在の車線上のオブジェクトをチェックします。 | false | +| `check_objects_on_other_lanes` | [-] | boolean | trueの場合、車線変更モジュールは衝突評価を実行する際、他の車線上のオブジェクトを含めます。 | false | +| `use_all_predicted_path` | [-] | boolean | falseの場合、信頼度が最も高い予測パスのみを使用します。 | true | +| `safety_check.collision_check_yaw_diff_threshold` | [rad] | double | RSSベースの衝突チェックを実行する際の自車とオブジェクト間の最大ヨー角差 | 3.1416 | -##### safety constraints to cancel lane change path +#### 車線変更経路が計算中の安全性制約 -| Name | Unit | Type | Description | Default value | +``` +``` + +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :--------------------------------------------------------- | ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `safety_check.execution.expected_front_deceleration` | [m/s²] | double | 前方の車両が急ブレーキを行った場合の前方対象物の最大減速度。(\*1) | -1.0 | +| `safety_check.execution.expected_rear_deceleration` | [m/s²] | double | 後方の車両が急ブレーキを行った場合の後方対象物の最大減速度。(\*1) | -1.0 | +| `safety_check.execution.rear_vehicle_reaction_time` | [s] | double | 前方車両の急ブレーキに気付いた時点からブレーキを踏むまでの後方車両の運転者の反応時間。 | 2.0 | +| `safety_check.execution.rear_vehicle_safety_time_margin` | [s] | double | 後方車両の運転者が急ブレーキを行ったときに完全停止状態になるまでの時間バッファ。 | 1.0 | +| `safety_check.execution.lateral_distance_max_threshold` | [m] | double | 2 つの対象物間の横方向距離が十分で、車線変更が安全かどうかを判断するために使用される横方向距離のしきい値。 | 2.0 | +| `safety_check.execution.longitudinal_distance_min_threshold` | [m] | double | 2 つの対象物間の縦方向距離が十分で、車線変更が安全かどうかを判断するために使用される縦方向距離のしきい値。 | 3.0 | +| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | 予測された各時点での車両間の実際のギャップを計算するために使用される時間乗数(RSS 距離ではない)。 | 0.8 | + +#### 停止または駐車車両に対する安全制約 + +| 名前 | 単位 | 型 | 説明 | デフォルト値 | | :-------------------------------------------------------- | ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `safety_check.cancel.expected_front_deceleration` | [m/s^2] | double | The front object's maximum deceleration when the front vehicle perform sudden braking. (\*1) | -1.0 | -| `safety_check.cancel.expected_rear_deceleration` | [m/s^2] | double | The rear object's maximum deceleration when the rear vehicle perform sudden braking. (\*1) | -2.0 | -| `safety_check.cancel.rear_vehicle_reaction_time` | [s] | double | The reaction time of the rear vehicle driver which starts from the driver noticing the sudden braking of the front vehicle until the driver step on the brake. | 1.5 | -| `safety_check.cancel.rear_vehicle_safety_time_margin` | [s] | double | The time buffer for the rear vehicle to come into complete stop when its driver perform sudden braking. | 0.8 | -| `safety_check.cancel.lateral_distance_max_threshold` | [m] | double | The lateral distance threshold that is used to determine whether lateral distance between two object is enough and whether lane change is safe. | 1.0 | -| `safety_check.cancel.longitudinal_distance_min_threshold` | [m] | double | The longitudinal distance threshold that is used to determine whether longitudinal distance between two object is enough and whether lane change is safe. | 2.5 | -| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | The time multiplier that is used to compute the actual gap between vehicle at each predicted points (not RSS distance) | 0.6 | +| `safety_check.parked.expected_front_deceleration` | [m/s^2] | double | 前走車が急ブレーキをかけたときの前方の物体の最大の減速度。(\*1) | -1.0 | +| `safety_check.parked.expected_rear_deceleration` | [m/s^2] | double | 後続車が急ブレーキをかけたときの後方の物体の最大の減速度。(\*1) | -2.0 | +| `safety_check.parked.rear_vehicle_reaction_time` | [s] | double | 後続車のドライバーが、前走車の急ブレーキに気づいてからブレーキを踏むまでの反応時間。 | 1.0 | +| `safety_check.parked.rear_vehicle_safety_time_margin` | [s] | double | 後続車のドライバーが急ブレーキをかけたときに完全に停止するための時間バッファ。 | 0.8 | +| `safety_check.parked.lateral_distance_max_threshold` | [m] | double | 2つの物体間の横方向距離が十分かどうか、また車線変更が安全かどうかを判断するために使用される横方向距離のしきい値。 | 1.0 | +| `safety_check.parked.longitudinal_distance_min_threshold` | [m] | double | 2つの物体間の縦方向距離が十分かどうか、また車線変更が安全かどうかを判断するために使用される縦方向距離のしきい値。 | 3.0 | +| `safety_check.parked.longitudinal_velocity_delta_time` | [m] | double | 予測された各ポイントにおける車両間の実際のギャップを計算するために使用される時間乗数(RSS距離ではなく)。 | 0.8 | + +##### 車線変更パスのキャンセルに対するセーフティ制約 -##### safety constraints used during lane change path is computed when ego is stuck +| 名前 | ユニット | タイプ | 説明 | デフォルト値 | +|---|---|---|---|---| +| `safety_check.cancel.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキをかけたときの前方車両の最大減速度。(*1) | -1.0 | +| `safety_check.cancel.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキをかけたときの後方車両の最大減速度。(*1) | -2.0 | +| `safety_check.cancel.rear_vehicle_reaction_time` | [s] | double | 前方車両の急ブレーキに気づいてブレーキを踏むまでの後方車両のドライバーの反応時間 | 1.5 | +| `safety_check.cancel.rear_vehicle_safety_time_margin` | [s] | double | 後方車両のドライバーが急ブレーキをかけたときに完全に停止するまでの時間バッファ | 0.8 | +| `safety_check.cancel.lateral_distance_max_threshold` | [m] | double | 2つの車両間の横距離が十分であり、車線変更が安全かどうかを判断するために使用される横距離のしきい値 | 1.0 | +| `safety_check.cancel.longitudinal_distance_min_threshold` | [m] | double | 2つの車両間の縦距離が十分であり、車線変更が安全かどうかを判断するために使用される縦距離のしきい値 | 2.5 | +| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | 各予測点での車両間の実際のギャップを計算するために使用される時間倍率(RSS距離ではない) | 0.6 | -| Name | Unit | Type | Description | Default value | -| :------------------------------------------------------- | ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `safety_check.stuck.expected_front_deceleration` | [m/s^2] | double | The front object's maximum deceleration when the front vehicle perform sudden braking. (\*1) | -1.0 | -| `safety_check.stuck.expected_rear_deceleration` | [m/s^2] | double | The rear object's maximum deceleration when the rear vehicle perform sudden braking. (\*1) | -1.0 | -| `safety_check.stuck.rear_vehicle_reaction_time` | [s] | double | The reaction time of the rear vehicle driver which starts from the driver noticing the sudden braking of the front vehicle until the driver step on the brake. | 2.0 | -| `safety_check.stuck.rear_vehicle_safety_time_margin` | [s] | double | The time buffer for the rear vehicle to come into complete stop when its driver perform sudden braking. | 1.0 | -| `safety_check.stuck.lateral_distance_max_threshold` | [m] | double | The lateral distance threshold that is used to determine whether lateral distance between two object is enough and whether lane change is safe. | 2.0 | -| `safety_check.stuck.longitudinal_distance_min_threshold` | [m] | double | The longitudinal distance threshold that is used to determine whether longitudinal distance between two object is enough and whether lane change is safe. | 3.0 | -| `safety_check.stuck.longitudinal_velocity_delta_time` | [m] | double | The time multiplier that is used to compute the actual gap between vehicle at each predicted points (not RSS distance) | 0.8 | +##### 車両が動けなくなった場合にレーンチェンジパスの計算に使用​​される安全制約 -(\*1) the value must be negative. +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------------------- | ----- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `safety_check.stuck.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキを実行した場合の前方オブジェクトの最大減速度。(\*1) | -1.0 | +| `safety_check.stuck.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキを実行した場合の後方オブジェクトの最大減速度。(\*1) | -1.0 | +| `safety_check.stuck.rear_vehicle_reaction_time` | [s] | double | 後方車両の運転手が前方の車両の急ブレーキに気付く瞬間からブレーキを踏む瞬間までの反応時間。 | 2.0 | +| `safety_check.stuck.rear_vehicle_safety_time_margin` | [s] | double | 後方車両の運転手が急ブレーキを実行したときに完全に停止するためのタイムバッファ。 | 1.0 | +| `safety_check.stuck.lateral_distance_max_threshold` | [m] | double | 2つのオブジェクト間の横方向の距離が十分かどうか、および車線変更が安全かどうかを判断するために使用される横方向距離の閾値。 | 2.0 | +| `safety_check.stuck.longitudinal_distance_min_threshold` | [m] | double | 2つのオブジェクト間の縦方向の距離が十分かどうか、および車線変更が安全かどうかを判断するために使用される縦方向距離の閾値。 | 3.0 | +| `safety_check.stuck.longitudinal_velocity_delta_time` | [m] | double | 各予測ポイントでの車両間の実際のギャップを計算するために使用される時間乗数(RSS距離ではない)。 | 0.8 | -### Abort lane change +(\*1) この値は負の値でなければなりません。 -The following parameters are configurable in `lane_change.param.yaml`. +### 車線変更の中止 -| Name | Unit | Type | Description | Default value | -| :------------------------------------- | ------- | ------- | ---------------------------------------------------------------------------------------------------------------- | ------------- | -| `cancel.enable_on_prepare_phase` | [-] | boolean | Enable cancel lane change | true | -| `cancel.enable_on_lane_changing_phase` | [-] | boolean | Enable abort lane change. | false | -| `cancel.delta_time` | [s] | double | The time taken to start steering to return to the center line. | 3.0 | -| `cancel.duration` | [s] | double | The time taken to complete returning to the center line. | 3.0 | -| `cancel.max_lateral_jerk` | [m/sss] | double | The maximum lateral jerk for abort path | 1000.0 | -| `cancel.overhang_tolerance` | [m] | double | Lane change cancel is prohibited if the vehicle head exceeds the lane boundary more than this tolerance distance | 0.0 | -| `cancel.unsafe_hysteresis_threshold` | [-] | int | threshold that helps prevent frequent switching between safe and unsafe decisions | 10 | -| `cancel.deceleration_sampling_num` | [-] | int | Number of deceleration patterns to check safety to cancel lane change | 5 | +次のパラメータは `lane_change.param.yaml` で構成できます。 -### Debug +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------- | ------- | ------- | ------------------------------------------------------------------------------------------------------------------- | ------------- | +| `cancel.enable_on_prepare_phase` | [-] | boolean | レーン変更のキャンセルを許可 | true | +| `cancel.enable_on_lane_changing_phase` | [-] | boolean | レーン変更の中断を許可 | false | +| `cancel.delta_time` | [s] | double | センタラインに戻るステアリングを開始するのにかかる時間 | 3.0 | +| `cancel.duration` | [s] | double | センタラインに戻るために要する時間 | 3.0 | +| `cancel.max_lateral_jerk` | [m/sss] | double | 中断パスの最大横方向ジャーク | 1000.0 | +| `cancel.overhang_tolerance` | [m] | double | 車両ヘッドがこの許容距離を超えて車線境界を超えた場合、レーン変更のキャンセルは禁止される | 0.0 | +| `cancel.unsafe_hysteresis_threshold` | [-] | int | 安全と不安全の決定の間の頻繁な切り替えを防ぐのに役立つしきい値 | 10 | +| `cancel.deceleration_sampling_num` | [-] | int | レーン変更のキャンセルを安全にするためにチェックする 減速度パターンの数 | 5 | -The following parameters are configurable in `lane_change.param.yaml`. +### デバッグ -| Name | Unit | Type | Description | Default value | -| :--------------------- | ---- | ------- | ---------------------------- | ------------- | -| `publish_debug_marker` | [-] | boolean | Flag to publish debug marker | false | +以下のパラメータは `lane_change.param.yaml` で設定できます。 -## Debug Marker & Visualization +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| --- | --- | --- | --- | --- | +| `publish_debug_marker` | [-] | ブール型 | デバッグマーカーの公開を設定 | `false` | + +## デバッグマーカーと可視化 + +デバッグマーカーを有効にするには、(再起動は不要です)を実行します。 -To enable the debug marker, execute (no restart is needed) ```shell ros2 param set /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner lane_change.publish_debug_marker true ``` -or simply set the `publish_debug_marker` to `true` in the `lane_change.param.yaml` for permanent effect (restart is needed). +LaneChangeモジュール内の`publish_debug_marker`を`lane_change.param.yaml`で`true`に設定すれば、永続的に効果をもたらします(再起動が必要)。 + +次に、マーカーを追加します。 -Then add the marker ```shell /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lane_change_left ``` -in `rviz2`. +## 自動運転ソフトウェアのドキュメント + +### 車線変更戦略 + +#### 概要 +この戦略では、車両の車線変更に関する予測、決定、実行のためのコンポーネントが提供されます。戦略は、環境内のオブジェクトに関する情報を考慮して、車線変更を実施するかどうかを決定します。 + +#### コンポーネント +- **Planning Planner** + - 車両の軌道と車線変更の実行時間に関する情報を生成します。 +- **Safety Checker** + - 車両の周囲にある物体の安全性を評価し、車線変更が安全かどうかを判断します。 +- **Supervisor** + - PlannerとSafety Checkerからの情報を統合し、車線変更を実施するかどうかを決定します。 + +### 起動要件 +この戦略を起動するには、次の情報を提供する必要があります。 +- **自車位置** +- **周囲の物体の情報** +- **目標車線** + +### 利用可能な情報 +**rviz2**で利用できる情報。 -![debug](./images/lane_change-debug-1.png) +![デバッグ](./images/lane_change-debug-1.png) -![debug2](./images/lane_change-debug-2.png) +![デバッグ2](./images/lane_change-debug-2.png) -![debug3](./images/lane_change-debug-3.png) +![デバッグ3](./images/lane_change-debug-3.png) -Available information +**提供される情報:** +1. 自車と物体の関係、および安全チェック情報 +2. 最新の安全チェック位置までの自車位置(補間) +3. オブジェクトの安全性(ポリゴンの色で表示:緑 = 安全、赤 = 安全でない) +4. 有効な候補パス +5. 車線変更の開始および終了位置 -1. Ego to object relation, plus safety check information -2. Ego vehicle interpolated pose up to the latest safety check position. -3. Object is safe or not, shown by the color of the polygon (Green = Safe, Red = unsafe) -4. Valid candidate paths. -5. Position when lane changing start and end. diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/README.md b/planning/behavior_path_planner/autoware_behavior_path_planner/README.md index b6282e39e3910..d05eadf70e440 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/README.md @@ -1,197 +1,259 @@ -# Behavior Path Planner +# 行動経路プランナー -The Behavior Path Planner's main objective is to significantly enhance the safety of autonomous vehicles by minimizing the risk of accidents. It improves driving efficiency through time conservation and underpins reliability with its rule-based approach. Additionally, it allows users to integrate their own custom behavior modules or use it with different types of vehicles, such as cars, buses, and delivery robots, as well as in various environments, from busy urban streets to open highways. +行動経路プランナーの主な目的は、衝突の危険性を最小限に抑えることで自動運転車の安全性を大幅に向上させることです。時間節約による運転効率の向上と、ルールに基づくアプローチによる信頼性の向上を図ります。さらに、ユーザーは独自のカスタム動作モジュールを統合したり、自動車、バス、配送ロボットなどさまざまなタイプの車両や、混雑した都市道路から高速道路までさまざまな環境で使用したりできます。 -The module begins by thoroughly analyzing the ego vehicle's current situation, including its position, speed, and surrounding environment. This analysis leads to essential driving decisions about lane changes or stopping and subsequently generates a path that is both safe and efficient. It considers road geometry, traffic rules, and dynamic conditions while also incorporating obstacle avoidance to respond to static and dynamic obstacles such as other vehicles, pedestrians, or unexpected roadblocks, ensuring safe navigation. +このモジュールは、自律車両の現在の状況、つまり位置、速度、周囲環境を徹底的に分析することから始まります。この分析により、車線変更や停止に関する重要な運転判断が下され、その後、安全かつ効率的な経路が生成されます。障害物を回避して、他の車両、歩行者、予期しない路上の障害物などの静的および動的障害物に対応しながら、道路形状、交通規則、動的条件を考慮に入れて、安全なナビゲーションを確保します。 -Moreover, the planner actively interacts with other traffic participants, predicting their actions and accordingly adjusting the vehicle's path. This ensures not only the safety of the autonomous vehicle but also contributes to smooth traffic flow. Its adherence to traffic laws, including speed limits and traffic signals, further guarantees lawful and predictable driving behavior. The planner is also designed to minimize sudden or abrupt maneuvers, aiming for a comfortable and natural driving experience. +さらに、このプランナーは他の交通参加者と積極的に対話し、彼らの行動を予測して、それにしたがって車両の経路を調整します。これにより、自律車両の安全性が確保されるだけでなく、交通の流れが円滑になります。速度制限や交通信号などの交通法規を遵守することで、法に則った予測可能な運転行動がさらに保証されます。このプランナーは、急な旋回や急ブレーキを最小限に抑えるよう設計されており、快適で自然な運転体験を目指しています。 !!! note - The [Planning Component Design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/) Document outlines the foundational philosophy guiding the design and future development of the Behavior Path Planner module. We strongly encourage readers to consult this document to understand the rationale behind its current configuration and the direction of its ongoing development. + [プランニングコンポーネント設計](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/) ドキュメントは、行動経路プランナーモジュールの設計と将来の開発を導く基本的な哲学の概要を示しています。その現在の構成とその継続的な開発の方向性を理解するために、このドキュメントを参照することを強くお勧めします。 -## Purpose / Use Cases +## 目的とユースケース -Essentially, the module has three primary responsibilities: +基本的に、このモジュールには主に3つの責務があります。 -1. Creating a **path based** on the traffic situation. -2. Generating **drivable area**, i.e. the area within which the vehicle can maneuver. -3. Generating **turn signal** commands to be relayed to the vehicle interface. +1. 交通状況に基づいた経路を作成する。 +2. 車両が走行可能な「走行可能領域」を生成する。 +3. 車両インターフェイスに中継されるウィンカーコマンドを生成する。 -## Features +## 機能 -### Supported Scene Modules +### サポートされるシーンモジュール -Behavior Path Planner has following scene modules +行動経路プランナーには、次のシーンモジュールがあります。 -| Name | Description | Details | +| 名称 | 説明 | 詳細 | | :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------- | -| Lane Following | this module generates reference path from lanelet centerline. | LINK | -| Static Obstacle Avoidance | this module generates avoidance path when there is objects that should be avoid. | [LINK](../autoware_behavior_path_static_obstacle_avoidance_module/README.md) | -| Dynamic Obstacle Avoidance | WIP | [LINK](../autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md) | -| Avoidance By Lane Change | this module generates lane change path when there is objects that should be avoid. | [LINK](../behavior_path_avoidance_by_lane_change_module/README.md) | -| Lane Change | this module is performed when it is necessary and a collision check with other vehicles is cleared. | [LINK](../autoware_behavior_path_lane_change_module/README.md) | -| External Lane Change | WIP | LINK | -| Goal Planner | this module is performed when ego-vehicle is in the road lane and goal is in the shoulder lane. ego-vehicle will stop at the goal. | [LINK](../autoware_behavior_path_goal_planner_module/README.md) | -| Start Planner | this module is performed when ego-vehicle is stationary and footprint of ego-vehicle is included in shoulder lane. This module ends when ego-vehicle merges into the road. | [LINK](../autoware_behavior_path_start_planner_module/README.md) | -| Side Shift | (for remote control) shift the path to left or right according to an external instruction. | [LINK](../autoware_behavior_path_side_shift_module/README.md) | +| 車線追従 | このモジュールは、レーンレットの中心線から基準パスを生成します。 | [LINK](https://drive.google.com/file/d/1upH4p_9JUod40iEIdAQq4A2H6-52zz-l/view?usp=sharing) | +| 静的障害物回避 | このモジュールは、回避すべきオブジェクトがある場合に回避パスを生成します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_static_obstacle_avoidance_module/README.md) | +| 動的障害物回避 | WIP | [LINK](https://github.com/ros-planning/autoware/tree/master/ros2/autoware_behavior_path_dynamic_obstacle_avoidance_module) | +| 車線変更による回避 | このモジュールは、回避すべきオブジェクトがある場合に車線変更パスを生成します。 | [LINK](https://drive.google.com/file/d/1k7x-4T2Yj_bJhp0-IzY12wY4gII_42Vu/view?usp=sharing) | +| 車線変更 | このモジュールは、必要に応じて実行され、他の車両との衝突チェックが完了します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_lane_change_module/README.md) | +| 外部車線変更 | WIP | [LINK](https://drive.google.com/file/d/13jDgm9Q7ELR00Gka51B_2XquH6e_61cp/view?usp=sharing) | +| ゴールプランナー | このモジュールは、自車が道路車線にいるときでゴールが路側車線にいるときに実行されます。自車はゴールで停止します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_goal_planner_module/README.md) | +| スタートプランナー | このモジュールは、自車が停止していて、自車のフットプリントが路側車線に含まれているときに実行されます。このモジュールは、自車が道路に合流すると終了します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_start_planner_module/README.md) | +| サイドシフト | (リモート制御用)外部の命令に従ってパスを左または右にシフトします。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_side_shift_module/README.md) | !!! Note - click on the following images to view the video of their execution + 以下の画像をクリックすると、実行中のビデオが表示されます。
- - - + + + - - - + + +
Lane Following ModuleAvoidance ModuleAvoidance by Lane Change Module車線維持モジュール回避モジュール車線変更による回避モジュール
Lane Change ModuleStart Planner ModuleGoal Planner Module車線変更モジュール始点プランナーモジュール終点プランナーモジュール
!!! Note - Users can refer to [Planning component design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/#supported-functions) for some additional behavior. + Planningコンポーネントの設計については、[Planningコンポーネント設計](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/#supported-functions)を参照してください。 -#### How to add or implement new module? +#### 新規モジュールの追加・実装方法 -All scene modules are implemented by inheriting base class `scene_module_interface.hpp`. +すべてのシーンモジュールは、基本クラス`scene_module_interface.hpp`を継承して実装されます。 !!! Warning - The remainder of this subsection is work in progress (WIP). + 本項の残りの部分は現在進行中です(WIP)。 -### Planner Manager +### プランナーマネージャー -The Planner Manager's responsibilities include: +プランナーマネージャーの責務は次のとおりです。 -1. Activating the relevant scene module in response to the specific situation faced by the autonomous vehicle. For example, when a parked vehicle blocks the ego vehicle's driving lane, the manager would engage the avoidance module. -2. Managing the execution order when multiple modules are running simultaneously. For instance, if both the lane-changing and avoidance modules are operational, the manager decides which should take precedence. -3. Merging paths from multiple modules when they are activated simultaneously and each generates its own path, thereby creating a single functional path. +1. 自動運転車両が直面している特定の状況に応じて、関連するシーンモジュールをアクティブ化します。たとえば、駐車車両によって自車の走行車線がブロックされた場合、マネージャーは回避モジュールを起動します。 +2. 複数のモジュールが同時に実行されている場合の実行順序を管理します。たとえば、車線変更モジュールと回避モジュールの両方が稼働している場合、マネージャーがどちらを優先するかを決定します。 +3. 複数のモジュールが同時にアクティベートされ、それぞれが独自のパスを生成する場合、それらのパスをマージして単一の機能パスを作成します。 !!! note - To check the scene module's transition, i.e.: registered, approved and candidate modules, set `verbose: true` in the [behavior path planner configuration file](https://github.com/autowarefoundation/autoware_launch/blob/0cd5d891a36ac34a32a417205905c109f2bafe7b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml#L3). + シーンモジュールの遷移(登録済みモジュール、承認済みモジュール、候補モジュール)を確認するには、[動作パスプランナーコンフィグレーションファイル](https://github.com/autowarefoundation/autoware_launch/blob/0cd5d891a36ac34a32a417205905c109f2bafe7b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml#L3)で`verbose: true`を設定します。 - ![Scene module's transition table](./image/checking_module_transition.png) + ![シーンモジュールの遷移表](./image/checking_module_transition.png) !!! note - For more in-depth information, refer to [Manager design](./docs/behavior_path_planner_manager_design.md) document. - -## Inputs / Outputs / API - -### Input - -| Name | Required? | Type | Description | -| :---------------------------- | :-------: | :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ~/input/odometry | ○ | `nav_msgs::msg::Odometry` | for ego velocity. | -| ~/input/accel | ○ | `geometry_msgs::msg::AccelWithCovarianceStamped` | for ego acceleration. | -| ~/input/objects | ○ | `autoware_perception_msgs::msg::PredictedObjects` | dynamic objects from perception module. | -| ~/input/occupancy_grid_map | ○ | `nav_msgs::msg::OccupancyGrid` | occupancy grid map from perception module. This is used for only Goal Planner module. | -| ~/input/traffic_signals | ○ | `autoware_perception_msgs::msg::TrafficLightGroupArray` | traffic signals information from the perception module | -| ~/input/vector_map | ○ | `autoware_map_msgs::msg::LaneletMapBin` | vector map information. | -| ~/input/route | ○ | `autoware_planning_msgs::msg::LaneletRoute` | current route from start to goal. | -| ~/input/scenario | ○ | `tier4_planning_msgs::msg::Scenario` | Launches behavior path planner if current scenario == `Scenario:LaneDriving`. | -| ~/input/lateral_offset | △ | `tier4_planning_msgs::msg::LateralOffset` | lateral offset to trigger side shift | -| ~/system/operation_mode/state | ○ | `autoware_adapi_v1_msgs::msg::OperationModeState` | Allows planning module to know if vehicle is in autonomous mode or can be controlled[ref](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/operation-mode.md) | - -- ○ Mandatory: Planning Module would not work if anyone of this is not present. -- △ Optional: Some module would not work, but Planning Module can still be operated. - -### Output - -| Name | Type | Description | QoS Durability | -| :---------------------------- | :-------------------------------------------------- | :--------------------------------------------------------------------------------------------- | ----------------- | -| ~/output/path | `tier4_planning_msgs::msg::PathWithLaneId` | the path generated by modules. | `volatile` | -| ~/output/turn_indicators_cmd | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | turn indicators command. | `volatile` | -| ~/output/hazard_lights_cmd | `autoware_vehicle_msgs::msg::HazardLightsCommand` | hazard lights command. | `volatile` | -| ~/output/modified_goal | `autoware_planning_msgs::msg::PoseWithUuidStamped` | output modified goal commands. | `transient_local` | -| ~/output/stop_reasons | `tier4_planning_msgs::msg::StopReasonArray` | describe the reason for ego vehicle stop | `volatile` | -| ~/output/reroute_availability | `tier4_planning_msgs::msg::RerouteAvailability` | the path the module is about to take. to be executed as soon as external approval is obtained. | `volatile` | - -### Debug - -| Name | Type | Description | QoS Durability | -| :-------------------------------------- | :-------------------------------------------------- | :---------------------------------------------------------------------------------------- | -------------- | -| ~/debug/avoidance_debug_message_array | `tier4_planning_msgs::msg::AvoidanceDebugMsgArray` | debug message for avoidance. notify users reasons for avoidance path cannot be generated. | `volatile` | -| ~/debug/lane_change_debug_message_array | `tier4_planning_msgs::msg::LaneChangeDebugMsgArray` | debug message for lane change. notify users unsafe reason during lane changing process | `volatile` | -| ~/debug/maximum_drivable_area | `visualization_msgs::msg::MarkerArray` | shows maximum static drivable area. | `volatile` | -| ~/debug/turn_signal_info | `visualization_msgs::msg::MarkerArray` | TBA | `volatile` | -| ~/debug/bound | `visualization_msgs::msg::MarkerArray` | debug for static drivable area | `volatile` | -| ~/planning/path_candidate/\* | `autoware_planning_msgs::msg::Path` | the path before approval. | `volatile` | -| ~/planning/path_reference/\* | `autoware_planning_msgs::msg::Path` | reference path generated by each modules. | `volatile` | + より詳細な情報については、[マネージャー設計](./docs/behavior_path_planner_manager_design.md)ドキュメントを参照してください。 + +## 入出力/API + +### 入力 + +| 名前 | 必須? | タイプ | 説明 | +| :----------------------------- | :-------: | :----------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ~/input/odometry | ○ | `nav_msgs::msg::Odometry` | 自車速度 | +| ~/input/accel | ○ | `geometry_msgs::msg::AccelWithCovarianceStamped` | 自車加速度 | +| ~/input/objects | ○ | `autoware_perception_msgs::msg::PredictedObjects` | 知覚モジュールからのダイナミックオブジェクト | +| ~/input/occupancy_grid_map | ○ | `nav_msgs::msg::OccupancyGrid` | 知覚モジュールのオキュパンシグリッドマップ。Goal Plannerモジュールでのみ使用されます。 | +| ~/input/traffic_signals | ○ | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 知覚モジュールからの交通信号情報 | +| ~/input/vector_map | ○ | `autoware_map_msgs::msg::LaneletMapBin` | ベクタマップ情報 | +| ~/input/route | ○ | `autoware_planning_msgs::msg::LaneletRoute` | スタートからゴールまでの現在のルート | +| ~/input/scenario | ○ | `tier4_planning_msgs::msg::Scenario` | 現在シナリオが`Scenario:LaneDriving`の場合、ビヘイビアパスプランナーを起動 | +| ~/input/lateral_offset | △ | `tier4_planning_msgs::msg::LateralOffset` | サイドシフトをトリガするための横方向オフセット | +| ~/system/operation_mode/state | ○ | `autoware_adapi_v1_msgs::msg::OperationModeState` | 車両が自律モードにあるか、制御可能であるかどうかをPlanningモジュールに伝える[参照](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/operation-mode.md) | + +- ○ 必須: このどれか1つでも存在しない場合、Planning Moduleは動作しません。 +- △ オプション: 一部のモジュールは動作しませんが、Planning Moduleは引き続き動作できます。 + +### 出力 + +| 名前 | タイプ | 説明 | QoSの耐久性 | +|---|---|---|---| +| ~/output/path | `tier4_planning_msgs::msg::PathWithLaneId` | 各モジュールによって生成された経路 | `volatile` | +| ~/output/turn_indicators_cmd | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | ターンシグナルのコマンド | `volatile` | +| ~/output/hazard_lights_cmd | `autoware_vehicle_msgs::msg::HazardLightsCommand` | ハザードランプのコマンド | `volatile` | +| ~/output/modified_goal | `autoware_planning_msgs::msg::PoseWithUuidStamped` | 変更された目標コマンドの出力を示す | `transient_local` | +| ~/output/stop_reasons | `tier4_planning_msgs::msg::StopReasonArray` | 自車停止の理由を説明 | `volatile` | +| ~/output/reroute_availability | `tier4_planning_msgs::msg::RerouteAvailability` | モジュールが採用しようとしている経路。外部からの承認が得られ次第実行される | `volatile` | + +### デバッグ + +#### 障害物検出(障害物検出モジュール) + +##### 障害物検出の可視化 + +1. Rvizで `ObstacleDetection` トピックを subscribe します。 +2. `rviz_visual_tools` で **Object** マーカーを有効にします。 + - `MarkerFrame`: `map` + - `MarkerTopic`: `ObstacleDetection` + - `MarkerShape`: `Sphere` + +##### デバッグコマンド + +- `/obstacle_detection/debug_info` トピックを subscribe し、障害物検出の結果を確認します。 +- `/obstacle_detection/obstacles` トピックを subscribe し、障害物の情報を取得します。 +- `/obstacle_detection/cluster` トピックを subscribe し、クラスタリングされた障害物の情報を取得します。 + +#### 行動計画(Planning) + +##### 行動計画の可視化 + +1. Rvizで `Planning` トピックを subscribe します。 +2. Rvizで **Path** マーカーを有効にします。 + - `MarkerFrame`: `map` + - `MarkerTopic`: `Planning` + - `MarkerShape`: `Arrow` + +##### デバッグコマンド + +- `/planning/debug_info` トピックを subscribe し、行動計画の結果を確認します。 +- `/planning/trajectory` トピックを subscribe し、期待される経路を取得します。 + +#### 制御(Control) + +##### `post resampling` コントローラーの可視化 + +1. Rvizで `Control` トピックを subscribe します。 +2. Rvizで **Path** マーカーを有効にします。 + - `MarkerFrame`: `map` + - `MarkerTopic`: `Control` + - `MarkerShape`: `Arrow` + +##### デバッグコマンド + +- `/control/debug_info` トピックを subscribe し、制御の結果を確認します。 +- `/control/trajectory` トピックを subscribe し、制御された経路を取得します。 + +#### ローカリゼーション + +##### 自車位置の可視化 + +1. Rvizで `Localization` トピックを subscribe します。 +2. Rvizで **Pose** マーカーを有効にします。 + - `MarkerFrame`: `map` + - `MarkerTopic`: `Localization` + - `MarkerShape`: `Cube` + +##### デバッグコマンド + +- `/localization/debug_info` トピックを subscribe し、ローカリゼーションの結果を確認します。 +- `/localization/pose` トピックを subscribe し、自車位置を取得します。 + +| 名前 | タイプ | 説明 | QoS の永続性 | +|---|---|---|---| +| ~/debug/avoidance_debug_message_array | `tier4_planning_msgs::msg::AvoidanceDebugMsgArray` | Avoidance のデバッグメッセージ。Avoidance パスを生成できない理由をユーザーに通知します | `volatile` | +| ~/debug/lane_change_debug_message_array | `tier4_planning_msgs::msg::LaneChangeDebugMsgArray` | レーン変更のデバッグメッセージ。レーン変更処理中の危険な理由をユーザーに通知します | `volatile` | +| ~/debug/maximum_drivable_area | `visualization_msgs::msg::MarkerArray` | 最大の静的走行可能領域を表示します | `volatile` | +| ~/debug/turn_signal_info | `visualization_msgs::msg::MarkerArray` | TBA | `volatile` | +| ~/debug/bound | `visualization_msgs::msg::MarkerArray` | 静的走行可能領域のデバッグ | `volatile` | +| ~/planning/path_candidate/* | `autoware_planning_msgs::msg::Path` | 承認前のパス | `volatile` | +| ~/planning/path_reference/* | `autoware_planning_msgs::msg::Path` | 各モジュールによって生成されたリファレンスパス | `volatile` | !!! note - For specific information of which topics are being subscribed and published, refer to [behavior_path_planner.xml](https://github.com/autowarefoundation/autoware.universe/blob/9000f430c937764c14e43109539302f1f878ed70/planning/behavior_path_planner/launch/behavior_path_planner.launch.xml#L36-L49). + トピックのサブスクライブと発行に関する具体的な情報は、[behavior_path_planner.xml](https://github.com/autowarefoundation/autoware.universe/blob/9000f430c937764c14e43109539302f1f878ed70/planning/behavior_path_planner/launch/behavior_path_planner.launch.xml#L36-L49) を参照してください。 -## How to enable or disable the modules +## モジュールの有効化と無効化の方法 -Enabling and disabling the modules in the behavior path planner is primarily managed through two key files: `default_preset.yaml` and `behavior_path_planner.launch.xml`. +Behavior Path Planning内のモジュールの有効化と無効化は、主に2つの主要なファイル(`default_preset.yaml`と`behavior_path_planner.launch.xml`)によって管理されます。 -The `default_preset.yaml` file acts as a configuration file for enabling or disabling specific modules within the planner. It contains a series of arguments which represent the behavior path planner's modules or features. For example: +`default_preset.yaml`ファイルは、プランナー内の特定のモジュールを有効化または無効化するための設定ファイルとして機能します。Behavior Path Planningのモジュールまたは機能を表す一連の引数を含みます。例: -- `launch_static_obstacle_avoidance_module`: Set to `true` to enable the avoidance module, or `false` to disable it. +- `launch_static_obstacle_avoidance_module`: 回避モジュールを有効にするには`true`に、無効にするには`false`に設定します。 !!! note - Click [here](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/preset/default_preset.yaml) to view the `default_preset.yaml`. + `default_preset.yaml`を表示するには、[ここ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/preset/default_preset.yaml)をクリックします。 + +`behavior_path_planner.launch.xml`ファイルは、`default_preset.yaml`に定義された設定を参照して、Behavior Path Planningのノード実行時に設定を適用するために使用します。たとえば、`behavior_path_planner.launch.xml`の`static_obstacle_avoidance.enable_module`パラメータでは、 -The `behavior_path_planner.launch.xml` file references the settings defined in `default_preset.yaml` to apply the configurations when the behavior path planner's node is running. For instance, the parameter `static_obstacle_avoidance.enable_module` in ```xml ``` -corresponds to launch_static_obstacle_avoidance_module from `default_preset.yaml`. +### `default_preset.yaml`の`launch_static_obstacle_avoidance_module`に対応する。 -Therefore, to enable or disable a module, simply set the corresponding module in `default_preset.yaml` to `true` or `false`. These changes will be applied upon the next launch of Autoware. +したがって、モジュールを有効または無効にするには、`default_preset.yaml`内の対応するモジュールを`true`または`false`に設定します。これらの変更は、Autowareの次回の起動時に適用されます。 -## Generating Path +## パス生成 -A sophisticated methodology is used for path generation, particularly focusing on maneuvers like lane changes and avoidance. At the core of this design is the smooth lateral shifting of the reference path, achieved through a constant-jerk profile. This approach ensures a consistent rate of change in acceleration, facilitating smooth transitions and minimizing abrupt changes in lateral dynamics, crucial for passenger comfort and safety. +精緻な手法がパスの生成に使用され、特に車線変更や回避などの操作に焦点を当てます。この設計の中核は、一定の加速度変化率によって達成される、基準パスのスムーズな横方向シフトです。このアプローチにより、加速度の変化率が一定になり、スムーズな遷移が促進され、横方向動特性の突然の変化が最小限に抑えられます。これは乗客の快適さと安全に不可欠です。 -The design involves complex mathematical formulations for calculating the lateral shift of the vehicle's path over time. These calculations include determining lateral displacement, velocity, and acceleration, while considering the vehicle's lateral acceleration and velocity limits. This is essential for ensuring that the vehicle's movements remain safe and manageable. +この設計には、時間の経過に伴う車両パスの横方向のシフトを計算するための複雑な数学的定式化が含まれます。これらの計算には、車両の横方向の変位、速度、および加速度の決定、車両の横方向の加速度と速度の制限の考慮が含まれます。これにより、車両の動きが安全かつ管理可能であることが保証されます。 -The `ShiftLine` struct (as seen [here](https://github.com/autowarefoundation/autoware.universe/blob/9000f430c937764c14e43109539302f1f878ed70/planning/behavior_path_planner/include/behavior_path_planner/utils/path_shifter/path_shifter.hpp#L35-L48)) is utilized to represent points along the path where the lateral shift starts and ends. It includes details like the start and end points in absolute coordinates, the relative shift lengths at these points compared to the reference path, and the associated indexes on the reference path. This struct is integral to managing the path shifts, as it allows the path planner to dynamically adjust the trajectory based on the vehicle's current position and planned maneuver. +`ShiftLine`構造体([こちら](https://github.com/autowarefoundation/autoware.universe/blob/9000f430c937764c14e43109539302f1f878ed70/planning/behavior_path_planner/include/behavior_path_planner/utils/path_shifter/path_shifter.hpp#L35-L48)に記載)は、横方向シフトの開始点と終了点を表すパス上のポイントを表すために使用されます。これには、絶対座標系での開始点と終了点、基準パスと比較したこれらのポイントでの相対シフトの長さ、および基準パス上の対応するインデックスなどの詳細が含まれます。この構造体はパスシフトを管理するのに不可欠であり、パスプランナーが車両の現在の位置と計画されている操作に基づいて軌道を動的に調整できます。 -Furthermore, the design and its implementation incorporate various equations and mathematical models to calculate essential parameters for the path shift. These include the total distance of the lateral shift, the maximum allowable lateral acceleration and jerk, and the total time required for the shift. Practical considerations are also noted, such as simplifying assumptions in the absence of a specific time interval for most lane change and avoidance cases. +さらに、この設計とその実装には、パスシフトに必須のパラメータを計算するためのさまざまな方程式と数学的モデルが組み込まれています。これらには、横方向シフトの総距離、許容される最大横方向加速度とジャーク、シフトに必要な総時間が含まれます。また、ほとんどの車線変更と回避のケースでは特定のタイムインターバルがないときに仮定を単純化するなど、実際的な考慮事項にも注意します。 -The shifted path generation logic enables the behavior path planner to dynamically generate safe and efficient paths, precisely controlling the vehicle’s lateral movements to ensure the smooth execution of lane changes and avoidance maneuvers. This careful planning and execution adhere to the vehicle's dynamic capabilities and safety constraints, maximizing efficiency and safety in autonomous vehicle navigation. +シフトパス生成ロジックにより、ビヘイビアパスプランナーは安全かつ効率的なパスを動的に生成し、横方向の動きを正確に制御して、車線変更と回避操作の円滑な実行を保証できます。この慎重な計画と実行は、車両の動的機能と安全上の制約を順守し、自律車両ナビゲーションにおける効率と安全性を最大化します。 !!! note - If you're a math lover, refer to [Path Generation Design](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md) for the nitty-gritty. + 数学好きの方は、詳細については[パス生成設計](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)を参照してください。 -## Collision Assessment / Safety check +## 衝突評価/安全チェック -The purpose of the collision assessment function in the Behavior Path Planner is to evaluate the potential for collisions with target objects across all modules. It is utilized in two scenarios: +ビヘイビアパスプランナーの衝突評価機能の目的は、すべてのモジュールを横断してターゲットオブジェクトとの衝突の可能性を評価することです。2つのシナリオで使用されます。 -1. During candidate path generation, to ensure that the generated candidate path is collision-free. -2. When the path is approved by the manager, and the ego vehicle is executing the current module. If the current situation is deemed unsafe, depending on each module's requirements, the planner will either cancel the execution or opt to execute another module. +1. 候補パスの生成中、生成された候補パスが衝突のないものであることを確認します。 +2. パスがマネージャーによって承認され、自己車両が現在のモジュールを実行しているとき、現在の状況が安全でない場合は、各モジュールの要件に応じて、プランナーは実行をキャンセルするか、別のモジュールを実行することを選択します。 -The safety check process involves several steps. Initially, it obtains the pose of the target object at a specific time, typically through interpolation of the predicted path. It then checks for any overlap between the ego vehicle and the target object at this time. If an overlap is detected, the path is deemed unsafe. The function also identifies which vehicle is in front by using the arc length along the given path. The function operates under the assumption that accurate data on the position, velocity, and shape of both the ego vehicle (the autonomous vehicle) and any target objects are available. It also relies on the yaw angle of each point in the predicted paths of these objects, which is expected to point towards the next path point. +安全チェックプロセスはいくつかのステップを含みます。最初に、通常予測パスを補間して、特定の時点でのターゲットオブジェクトの位置を取得します。次に、この時点で自己車両とターゲットオブジェクトとの間にオーバーラップがないか確認します。オーバーラップが検出された場合、パスは安全ではないと判断されます。また、関数の与えられたパスに沿った弧長を使用して、どちらの車両が前方にいるかを識別します。この関数は、自己車両(自律車両)とターゲットオブジェクトの両方について、正確な位置、速度、形状のデータが利用可能であるという前提で動作します。また、これらのオブジェクトの予測パス内の各点のヨー角に依存し、次のパス点の方向を向くことが想定されています。 -A critical part of the safety check is the calculation of the RSS (Responsibility-Sensitive Safety) distance-inspired algorithm. This algorithm considers factors such as reaction time, safety time margin, and the velocities and decelerations of both vehicles. Extended object polygons are created for both the ego and target vehicles. Notably, the rear object’s polygon is extended by the RSS distance longitudinally and by a lateral margin. The function finally checks for overlap between this extended rear object polygon and the front object polygon. Any overlap indicates a potential unsafe situation. +安全チェックの重要な部分は、RSS(責任感応型安全)距離に着想を得たアルゴリズムの計算です。このアルゴリズムは、反応時間、安全時間マージン、両方の車両の速度と減速などの要因を考慮します。自己車両とターゲット車両の両方に、拡張オブジェクトポリゴンが作成されます。特に、後方のオブジェクトのポリゴンは、縦方向にRSS距離、横方向にマージンで拡張されます。最後に、この拡張された後方のオブジェクトのポリゴンと前方オブジェクトのポリゴンとのオーバーラップをチェックします。オーバーラップは、潜在的に安全でない状況を示します。 -However, the module does have a limitation concerning the yaw angle of each point in the predicted paths of target objects, which may not always accurately point to the next point, leading to potential inaccuracies in some edge cases. +ただし、モジュールにはターゲットオブジェクトの予測パス内の各点のヨー角に関する制限があり、常に次の点に向いていない場合があります。これにより、エッジケースで潜在的な不正確さが発生する場合があります。 !!! note - For further reading on the collision assessment method, please refer to [Safety check utils](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) + 衝突評価手法の詳細については、[安全チェックユーティリティ](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md)を参照してください。 -## Generating Drivable Area +## 走行可能領域の生成 -### Static Drivable Area logic +### 静的走行可能領域のロジック -The drivable area is used to determine the area in which the ego vehicle can travel. The primary goal of static drivable area expansion is to ensure safe travel by generating an area that encompasses only the necessary spaces for the vehicle's current behavior, while excluding non-essential areas. For example, while `avoidance` module is running, the drivable area includes additional space needed for maneuvers around obstacles, and it limits the behavior by not extending the avoidance path outside of lanelet areas. +走行可能領域は、自己車両が走行できる領域を決定するために使用されます。静的走行可能領域の拡張の主な目的は、車両の現在の動作に必要なスペースのみを含む領域を生成することによって安全な走行を確保することですが、不要な領域を除外します。たとえば、`回避`モジュールが実行されているとき、走行可能領域には障害物を回避するための操作に必要な追加のスペースが含まれ、動作はレーンレットの領域の外側に回避パスを拡張しないことで制限されます。
@@ -204,41 +266,42 @@ The drivable area is used to determine the area in which the ego vehicle can tra
-Static drivable area expansion operates under assumptions about the correct arrangement of lanes and the coverage of both the front and rear of the vehicle within the left and right boundaries. Key parameters for drivable area generation include extra footprint offsets for the ego vehicle, the handling of dynamic objects, maximum expansion distance, and specific methods for expansion. Additionally, since each module generates its own drivable area, before passing it as the input to generate the next running module's drivable area, or before generating a unified drivable area, the system sorts drivable lanes based on the vehicle's passage order. This ensures the correct definition of the lanes used in drivable area generation. +静的走行可能領域の拡張は、レーンの正しい配置と、左端と右端の境界内での車両の前部と後部の両方の範囲について、次の動作で行われます: -!!! note +走行可能領域を生成するための重要なパラメータとしては、自己車両の追加フットプリントオフセット、動的オブジェクトの処理、最大拡張距離、および拡張のための具体的な方法があります。さらに、各モジュールは独自の走行可能領域を生成するため、次の実行モジュールの走行可能領域を生成するための入力として渡すか、統一された走行可能領域を生成する前に、車両の走行順序に基づいて走行可能レーンのソートを行います。これにより、走行可能領域の生成に使用されるレーンの正しい定義が確保されます。 - Further details can is provided in [Drivable Area Design](../autoware_behavior_path_planner_common/docs/behavior_path_planner_drivable_area_design.md). +!!! note ### Dynamic Drivable Area Logic -Large vehicles require much more space, which sometimes causes them to veer out of their current lane. A typical example being a bus making a turn at a corner. In such cases, relying on a static drivable area is insufficient, since the static method depends on lane information provided by high-definition maps. To overcome the limitations of the static approach, the dynamic drivable area expansion algorithm adjusts the navigable space for an autonomous vehicle in real-time. It conserves computational power by reusing previously calculated path data, updating only when there is a significant change in the vehicle's position. The system evaluates the minimum lane width necessary to accommodate the vehicle's turning radius and other dynamic factors. It then calculates the optimal expansion of the drivable area's boundaries to ensure there is adequate space for safe maneuvering, taking into account the vehicle's path curvature. The rate at which these boundaries can expand or contract is moderated to maintain stability in the vehicle's navigation. The algorithm aims to maximize the drivable space while avoiding fixed obstacles and adhering to legal driving limits. Finally, it applies these boundary adjustments and smooths out the path curvature calculations to ensure a safe and legally compliant navigable path is maintained throughout the vehicle's operation. +大型車両の旋回にはより広い空間が必要で、現在の車線を逸脱することがあります。例えば、交差点でバスが曲がっている場合です。そのような場合、静的な走行可能領域に依存することは不十分です。静的な方法は、高精細マップによって提供される車線情報に依存するためです。静的なアプローチの制限を克服するために、動的走行可能領域の拡張アルゴリズムは、自律車両の通行可能なスペースをリアルタイムで調整します。以前に計算された経路データを再利用することで計算処理を節約し、車両の位置に大きな変化がある場合にのみ更新します。システムは、車両の旋回半径や他の動的要因に対応するために必要な最小車線幅を評価します。その後、車両の経路曲率を考慮して、安全な走行のための十分なスペースを確保するために必要な走行可能領域の境界の最適な拡張を計算します。これらの境界を拡張または縮小できる速度は、車両のナビゲーションの安定性を維持するために調整されています。このアルゴリズムは、固定障害物を回避し、法的な走行制限に従いながら、走行可能なスペースを最大化することを目的としています。最後に、これらの境界線の調整を適用し、経路曲率の計算を滑らかにすることで、車両の運用を通じて安全で法令に準拠した通行可能な経路が維持されるようにします。 !!! note - The feature can be enabled in the [drivable_area_expansion.param.yaml](https://github.com/autowarefoundation/autoware_launch/blob/0cd5d891a36ac34a32a417205905c109f2bafe7b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml#L10). + この機能は [drivable_area_expansion.param.yaml](https://github.com/autowarefoundation/autoware_launch/blob/0cd5d891a36ac34a32a417205905c109f2bafe7b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml#L10) で有効にすることができます。 -## Generating Turn Signal +## ターンシグナルの生成 -The Behavior Path Planner module uses the `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` to output turn signal commands (see [TurnIndicatorsCommand.idl](https://github.com/autowarefoundation/autoware_msgs/blob/main/autoware_vehicle_msgs/msg/TurnIndicatorsCommand.msg)). The system evaluates the driving context and determines when to activate turn signals based on its maneuver planning—like turning, lane changing, or obstacle avoidance. +Behavior Path Plannerモジュールは、ターンシグナルのコマンドを出力するために `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` を使用します([TurnIndicatorsCommand.idl](https://github.com/autowarefoundation/autoware_msgs/blob/main/autoware_vehicle_msgs/msg/TurnIndicatorsCommand.msg) を参照)。システムは運転状況を評価し、旋回、車線変更、障害物回避などの走行計画に基づいて、いつターンシグナルを作動させるかを決定します。 -Within this framework, the system differentiates between **desired** and **required** blinker activations. **Desired** activations are those recommended by traffic laws for typical driving scenarios, such as signaling before a lane change or turn. **Required** activations are those that are deemed mandatory for safety reasons, like signaling an abrupt lane change to avoid an obstacle. +このフレームワークの中で、システムは**必要な**点滅器作動と**不要な**点滅器作動を区別します。**不要な**作動は、車線変更や旋回の前の合図など、一般的な運転シナリオで交通法によって推奨されるものです。**必要な**作動は、障害物を避けるために急な車線変更を合図するなど、安全上の理由から必須とみなされるものです。 -The `TurnIndicatorsCommand` message structure has a command field that can take one of several constants: `NO_COMMAND` indicates no signal is necessary, `DISABLE` to deactivate signals, `ENABLE_LEFT` to signal a left turn, and `ENABLE_RIGHT` to signal a right turn. The Behavior Path Planner sends these commands at the appropriate times, based on its rules-based system that considers both the **desired** and **required** scenarios for blinker activation. +`TurnIndicatorsCommand` メッセージ構造には、いくつかの定数のいずれかを保持できるコマンドフィールドがあります。`NO_COMMAND` は信号が不要であることを示し、`DISABLE` は信号を無効にし、`ENABLE_LEFT` は左折を合図し、`ENABLE_RIGHT` は右折を合図します。Behavior Path Planner は、点滅器作動の**不要**および**必要**の両方のシナリオを考慮するルールベースのシステムに基づいて、適切なタイミングでこれらのコマンドを送信します。 !!! note - For more in-depth information, refer to [Turn Signal Design](../autoware_behavior_path_planner_common/docs/behavior_path_planner_turn_signal_design.md) document. + 詳細については、[ターンシグナル設計](../autoware_behavior_path_planner_common/docs/behavior_path_planner_turn_signal_design.md)ドキュメントを参照してください。 -## Rerouting +## リルーティング !!! warning - Rerouting is a feature that was still under progress. Further information will be included on a later date. + リルーティングは現在進行中の機能です。詳細情報については、後日掲載いたします。 -## Parameters and Configuration +## パラメータと構成 + +[設定ファイル](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner) は、操作と管理の容易さのために階層的なディレクトリ構造で整理されています。各サブディレクトリには、そのモジュールに関連する具体的な構成ファイルが含まれています。ルートディレクトリには、プランナー全体の動作に適用される一般的な構成ファイルがあります。以下は、ディレクトリ構造とその構成ファイルの概要です。 -The [configuration files](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner) are organized in a hierarchical directory structure for ease of navigation and management. Each subdirectory contains specific configuration files relevant to its module. The root directory holds general configuration files that apply to the overall behavior of the planner. The following is an overview of the directory structure with the respective configuration files. ```text behavior_path_planner @@ -261,7 +324,8 @@ behavior_path_planner └── start_planner.param.yaml ``` -Similarly, the [common](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/common) directory contains configuration files that are used across various modules, providing shared parameters and settings essential for the functioning of the Behavior Path Planner: +同様に、[common](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/common) ディレクトリには、さまざまなモジュールで使用される設定ファイルが含まれています。これらの設定ファイルは、Behavior Path Planner の機能に不可欠な共通パラメータと設定を提供します。 + ```text common @@ -270,14 +334,16 @@ common └── nearest_search.param.yaml ``` -The [preset](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/preset) directory contains the configurations for managing the operational state of various modules. It includes the default_preset.yaml file, which specifically caters to enabling and disabling modules within the system. +[Preset](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/preset) ディレクトリには、さまざまなモジュールの動作状態を管理するための構成が含まれています。これには、システム内のモジュールの有効化や無効化を具体的に処理する `default_preset.yaml` ファイルが含まれます。 + ```text preset └── default_preset.yaml ``` -## Limitations & Future Work +## 制限事項と今後の取り組み + +1. ゴールプランナーモジュールは、他のモジュールと同時に実行できません。 +2. このモジュールはプラグインとして設計されていません。カスタムモジュールの統合は容易ではなく、ユーザーは動作パス計画メインコードの一部を変更する必要があります。 -1. Goal Planner module cannot be simultaneously executed together with other modules. -2. Module is not designed as plugin. Integrating custom module is not straightforward and user have to modify some part of the behavior path planner main code. diff --git a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md index 601c5b4b26d01..21400d9626b45 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md @@ -1,78 +1,77 @@ -# Behavior Path Sampling Based Planner +# 振る舞い経路サンプルベースプランナー -WARNING: This module is experimental and has not been properly tested on a real vehicle, use only on simulations. +警告: このモジュールは実験的であり、実車両では適切にテストされていません。シミュレーションでのみ使用してください。 -## Purpose +## 目的 -This package implements a node that uses sampling based planning to generate a drivable trajectory for the behavior path planner. It is heavily based off the [sampling_based_planner module](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner). +このパッケージでは、サンプリングベースプランニングを使用して、振る舞い経路プランナーのための走行可能なトラジェクトリを生成するノードを実装しています。[sampling_based_plannerモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner)を大幅にベースにしています。 -## Features +## 特徴 -This package is able to: +このパッケージでは、次のことができます。 -- create a smooth trajectory to avoid static obstacles. -- guarantees the generated trajectory (if any) complies with customizable hard constraints. -- transitions to a success state after the ego vehicle merges to its goal lane. -- re-use previously generated outputs to re-sample new alternative paths +- 静的障害物を避けるスムースなトラジェクトリを作成する。 +- 生成されたトラジェクトリ(存在する場合)がカスタマイズ可能なハード制約に確実に準拠するようにする。 +- 自車がゴールレーンに合流した後、成功状態に移行する。 +- 以前生成した出力を再利用して、新しい代替経路を再サンプリングする -Note that the velocity is just taken over from the input path. +ここで速度は入力経路からそのまま引き継がれることに注意してください。 -## Algorithm +## アルゴリズム -Sampling based planning is decomposed into 3 successive steps: +サンプリングベースプランニングは、3つの連続した手順に分解されます。 -1. Sampling: candidate trajectories are generated. -2. Pruning: invalid candidates are discarded. -3. Selection: the best remaining valid candidate is selected. +1. サンプリング: 候補のトラジェクトリが生成されます。 +2. プルーニング: 無効な候補は破棄されます。 +3. 選択: 残りの有効な候補の中で最適なものが選択されます。 -### Sampling +### サンプリング -Candidate trajectories are generated based on the current ego state and some target state. -1 sampling algorithms is currently implemented: polynomials in the frenet frame. +候補のトラジェクトリは、現在の車両状態とターゲット状態に基づいて生成されます。 +現在実装されているサンプリングアルゴリズムは1つです。フレネフレームにおける多項式 -### Pruning +### プルーニング -The validity of each candidate trajectory is checked using a set of hard constraints. +各候補トラジェクトリの有効性は、一連のハード制約を使用してチェックされます。 -- collision: ensure no collision with static obstacles; -- curvature: ensure smooth curvature; -- drivable area: ensure the trajectory stays within the drivable area. +- 衝突: 静的障害物との衝突がないことを保証する。 +- 曲率: 滑らかな曲率を保証する。 +- 走行可能領域: トラジェクトリが走行可能領域内にとどまることを保証する。 -### Selection +### 選択 -Among the valid candidate trajectories, the _best_ one is determined using a set of soft constraints (i.e., objective functions). +有効な候補のトラジェクトリの中から、一連のソフト制約(つまり目的関数)を使用して最適なものが決定されます。 -- curvature: prefer smoother trajectories; -- length: prefer trajectories with longer remaining path length; -- lateral deviation: prefer trajectories close to the goal. +- 曲率: よりスムーズなトラジェクトリを優先する。 +- 長さ: 残り経路長が長いトラジェクトリを優先する。 +- 横方向逸脱: ゴールに近いトラジェクトリを優先する。 -Each soft constraint is associated with a weight to allow tuning of the preferences. +各ソフト制約には重み付けが関連付けられており、プリファレンスの調整が可能です。 -## Limitations +## 制限事項 -The quality of the candidates generated with polynomials in frenet frame greatly depend on the reference path. -If the reference path is not smooth, the resulting candidates will probably be un-drivable. +フレネフレーム内の多項式で生成された候補の品質は、参照経路に大きく依存します。 +参照経路がスムースでない場合、生成された候補は走行不能になる可能性が高くなります。 -Failure to find a valid trajectory current results in a suddenly stopping trajectory. +現在、有効なトラジェクトリが見つからないと、突然停止するトラジェクトリが発生します。 -The module has troubles generating paths that converge rapidly to the goal lanelet. Basically, after overcoming all obstacles, the module should prioritize paths that rapidly make the ego vehicle converge back to its goal lane (ie. paths with low average and final lateral deviation). However, this does not function properly at the moment. +このモジュールは、ゴールレーンのレットに素早く収束する経路を生成することに問題があります。基本的には、すべての障害物を克服した後、このモジュールは車両をゴールレーンに素早く収束させる経路(つまり、平均横方向逸脱と最終横方向逸脱が低い経路)を優先するはずです。ただし、現時点では正しく機能していません。 -Detection of proper merging can be rough: Sometimes, the module when detects that the ego has converged on the goal lanelet and that there are no more obstacles, the planner transitions to the goal planner, but the transition is not very smooth and could cause discomfort for the user. +## 今後の取り組み -## Future works +このモジュールには次のような潜在的な改善事項が含まれます。 -Some possible improvements for this module include: +*動的重み調整アルゴリズムの実装: 全ての障害物が回避された後、シチュエーションに応じて重みを動的に変更する (つまり、曲率が低く、平均横方向逸脱量が低いパスを優先する)。 --Implementing a dynamic weight tuning algorithm: Dynamically change weights depending on the scenario (ie. to prioritize more the paths with low curvature and low avg. lat. deviation after all obstacles have been avoided). +*コンピューティング時間を改善し、より動的なソフト制約の重み調整を行うことができる、多目的最適化の実装 [関連出版物](https://ieeexplore.ieee.org/abstract/document/10180226)。 --Implementing multi-objective optimization to improve computing time and possibly make a more dynamic soft constraints weight tuning. [Related publication](https://ieeexplore.ieee.org/abstract/document/10180226). +*別のサンプル取得手法としてベジエ曲線を実装する [sampling_based_plannerモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner)を参照。 --Implement bezier curves as another method to obtain samples, see the [sampling_based_planner module](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner). +*サンプリングベースの行動経路モジュールで他のいくつかの行動経路モジュールを置き換えることができる可能性を検討する。 --Explore the possibility to replace several or other behavior path modules with the sampling based behavior path module. +*このモジュールが成熟し、いくつかの制限が解決されたら、このモジュールのリアルライフテストを実施する。 --Perform real-life tests of this module once it has matured and some of its limitations have been solved. +## その他の可能性 -## Other possibilities +現在、このモジュールは静的障害物回避用パスの作成を目的としています。ただし、サンプリングプランナーの性質により、このモジュールを車線変更、動的回避、目標への一般的な到達などの他のタスクに拡張または転用できます。適切な候補の剪定とソフト制約の適切な重み調整を前提に、サンプリングプランニングの手法を他の行動経路モジュールの代替として使用することが可能です。 -The module is currently aimed at creating paths for static obstacle avoidance. However, the nature of sampling planner allows this module to be expanded or repurposed to other tasks such as lane changes, dynamic avoidance and general reaching of a goal. It is possible, with a good dynamic/scenario dependant weight tuning to use the sampling planning approach as a replacement for the other behavior path modules, assuming good candidate pruning and good soft constraints weight tuning. diff --git a/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md index 6a460d8423cbd..45190b7257d2c 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md @@ -1,31 +1,32 @@ -# Side Shift design +# 側方シフト設計 -(For remote control) Shift the path to left or right according to an external instruction. +(リモート制御用)外部の指示に従って経路を左右にシフトします。 -## Overview of the Side Shift Module Process +## 側方シフトモジュール処理の概要 -1. Receive the required lateral offset input. -2. Update the `requested_lateral_offset_` under the following conditions: - a. Verify if the last update time has elapsed. - b. Ensure the required lateral offset value is different from the previous one. -3. Insert the shift points into the path if the side shift module's status is not in the SHIFTING status. +1. 必要な横方向オフセット入力を受信します。 +2. 次の条件下で`requested_lateral_offset_`を更新します。 + a. 最後の更新時刻が経過したか確認します。 + b. 必要な横方向オフセット値が前の値と異なることを確認します。 +3. 側方シフトモジュールのステータスがSHIFTINGステータスの場合は、シフトポイントをパスに挿入します。 -Please be aware that `requested_lateral_offset_` is continuously updated with the latest values and is not queued. +`requested_lateral_offset_`は最新の値で常に更新され、キューに入れられないことに注意してください。 -## Statuses of the Side Shift +## 側方シフトのステータス -The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated: +側方シフトには3つの異なるステータスがあります。SHIFTINGステータスの間はパスを更新できないことに注意してください。 -1. BEFORE_SHIFT: Preparing for shift. -2. SHIFTING: Currently in the process of shifting. -3. AFTER_SHIFT: Shift completed. +1. BEFORE_SHIFT:シフトの準備。 +2. SHIFTING:現在シフト処理中。 +3. AFTER_SHIFT:シフト完了。
![case1](images/side_shift_status.drawio.svg){width=1000} -
side shift status
+
側方シフトのステータス
-## Flowchart +## フローチャート + ```plantuml @startuml @@ -50,6 +51,7 @@ stop @enduml ``` + ```plantuml @startuml skinparam monochrome true @@ -76,6 +78,7 @@ stop @enduml ``` + ```plantuml @startuml skinparam monochrome true @@ -113,3 +116,4 @@ partition updateState { @enduml ``` + diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md index 931b70f8482a5..bc6645ec40d09 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md @@ -1,112 +1,109 @@ -# Start Planner design +# スタートプランナ設計 -## Purpose / Role +## 目的 / 役割 -This module generates and plans a path for safely merging from the shoulder lane or side of road lane into the center of the road lane. +このモジュールは、路肩車線または道路脇車線から道路車線の中央に安全に合流するための経路を生成して計画します。 -Specifically, it includes the following features: +具体的には、以下の機能を含みます。 -- Plan the path to automatically start from the shoulder lane or side of road lane to center of road lane. -- When parked vehicles are present on the shoulder lane, the module generates a path that allows for starting with a gap of a specified margin. -- If a collision with other traffic participants is detected while traveling on the generated path, it will stop as much as possible. +- 路肩車線または道路脇車線から道路車線の中心まで自動的に開始するための経路を計画します。 +- 路肩車線に駐車車両が存在する場合、モジュールは、指定されたマージンの隙間から開始できる経路を生成します。 +- 生成された経路を走行中に他の交通参加者との衝突が検出された場合、可能な限り停止します。
![start_planner_module](images/start_planner_example.png){width=1100}
-## Use Cases +## ユースケース -Give an typical example of how path generation is executed. Showing example of path generation starts from shoulder lane, but also from side of road lane can be generated. +経路生成がどのように実行されるかを示す、典型的な例を示します。経路生成は路肩車線から開始する例を示していますが、道路脇車線から開始する例も生成できます。
![shift_pull_out_from_road_lane](images/shift_pull_out_path_from_road_lane.drawio.svg){width=1100}
-### **Use Case 1: Shift pull out** +### **ユースケース1: シフト・プルアウト** -In the shoulder lane, when there are no parked vehicles ahead and the shoulder lane is sufficiently long, a forward shift pull out path (a clothoid curve with consistent jerk) is generated. +路肩車線に前方に駐車車両がなく、路肩車線が十分な長さの場合、前進シフトプルアウト経路(連続したジャークを持つクロソイド曲線)が生成されます。
![shift_pull_out](images/shift_pull_out_path.drawio.svg){width=1100}
-### **Use Case 2: Geometric pull out** +### **ユースケース2: ジオメトリカル・プルアウト** -In the shoulder lane, when there are objects in front and the lane is not sufficiently long behind, a geometric pull out path is generated. +路肩車線に前方に障害物があり、後方に十分な長さがない場合、ジオメトリカルプルアウト経路が生成されます。
![geometric_pull_out](images/geometric_pull_out_path.drawio.svg){width=1100}
-### **Use Case 3: Backward and shift pull out** +### **ユースケース3: バックワード・アンド・シフト・プルアウト** -In the shoulder lane, when there are parked vehicles ahead and the lane is sufficiently long behind, a path that involves reversing before generating a forward shift pull out path is created. +路肩車線に前方に駐車車両があり、後方に十分な長さがある場合、後退して前進シフトプルアウト経路を生成する経路が作成されます。
![shift_pull_out_with_back](images/shift_pull_out_path_with_back.drawio.svg){width=1100}
-### **Use Case 4: Backward and geometric pull out** +### **ユースケース4: バックワード・アンド・ジオメトリカル・プルアウト** -In the shoulder lane, when there is an object ahead and not enough space to reverse sufficiently, a path that involves reversing before making an geometric pull out is generated. +路肩車線に前方に障害物があり、後退するのに十分なスペースがない場合、後退してジオメトリカルプルアウト経路を生成する経路が生成されます。
![geometric_pull_out_with_back](images/geometric_pull_out_path_with_back.drawio.svg){width=1100}
-### **Use Case 5: Freespace pull out** +### **ユースケース5: フリースペース・プルアウト** -If the map is annotated with the information that a free space path can be generated in situations where both shift and geometric pull out paths are impossible to create, a path based on the free space algorithm will be generated. +シフトプルアウト経路とジオメトリカルプルアウト経路の両方が作成できない状況で、フリースペース経路を生成できる情報がマップに記載されている場合、フリースペースアルゴリズムに基づいた経路が生成されます。 -
- ![freespace_path](images/freespace_pull_out.png){width=1100} -
+**注:** これらの経路を生成するパターンは既定のパラメーターに基づいています。ただし、次のセクションで説明するように、経路生成ポリシーを変更したり、静的オブジェクトの周囲のマージンを調整したりすることで、後退を含む経路や、幾何学的経路が生成される可能性が高くなります。 -**As a note, the patterns for generating these paths are based on default parameters, but as will be explained in the following sections, it is possible to control aspects such as making paths that involve reversing more likely to be generated, or making geometric paths more likely to be generated, by changing the path generation policy or adjusting the margin around static objects.** +## 制限 -## Limitations +以下にいくつかの注目すべき制限を示します。 -Here are some notable limitations: +- 路肩の前後、または両側に駐車車両があり、規定された距離を維持できない場合、停止経路が生成され、潜在的なデッドロックにつながります。 +- behavior_path_planner の既定設定では、回避モジュールが後段階で動作し、オブジェクトを回避しようとします。ただし、start_planner モジュールが障害物を回避できる経路を出力するとは限りません。つまり、回避不能な経路が生成されると、デッドロックが発生する可能性があります。 +- 安全性のチェックのパフォーマンスは、map_based_prediction ノードで生成される予測経路の精度に依存します。現在、加速度を考慮した予測経路は生成されず、低速で移動するオブジェクトの経路は正確に生成されない可能性があることに注意してください。 +- ルールベースアルゴリズムの現在の仕様によると、経路の安全性と人間の自然さとの間にはトレードオフがあります。このトレードオフを管理するためにパラメーターを調整することは可能ですが、これらの側面をより良く調和させるために改善が必要です。 -- If parked vehicles exist in front of, behind, or on both sides of the shoulder, and it's not possible to maintain a specified distance from them, a stopping path will be generated, leading to a potential deadlock. -- In the default settings of the behavior_path_planner, an avoidance module operates in a later stage and attempts to avoid objects. However, it is not guaranteed that the start_planner module will output a path that can successfully navigate around obstacles. This means that if an unavoidable path is generated, it could result in a deadlock. -- The performance of safety check relies on the accuracy of the predicted paths generated by the map_based_prediction node. It's important to note that, currently, predicted paths that consider acceleration are not generated, and paths for low-speed objects may not be accurately produced, which requires caution. -- Given the current specifications of the rule-based algorithms, there is a trade-off between the safety of a path and its naturalness to humans. While it's possible to adjust parameters to manage this trade-off, improvements are necessary to better reconcile these aspects. +## 開始/終了条件 -## Start/End Conditions +### **開始条件** -### **Start Conditions** +`StartPlannerModule` は、`isExecutionRequested` 関数で評価された特定の基準に基づいて実行を開始するように設計されています。モジュールは、次の条件下では **開始しません**。 -The `StartPlannerModule` is designed to initiate its execution based on specific criteria evaluated by the `isExecutionRequested` function. The module will **not** start under the following conditions: +1. **道路中央での開始位置**: 車両の開始位置が道路の中央にあると判断された場合、モジュールは開始しません。これにより、プランナーは路肩の位置から開始されます。 -1. **Start pose on the middle of the road**: The module will not initiate if the start pose of the vehicle is determined to be in the middle of the road. This ensures the planner starts from a roadside position. +2. **車両が開始位置から遠い**: 車両が開始位置から離れている場合、モジュールは実行されません。これにより、新しい目標が与えられた場合に冗長な実行が防止されます。 -2. **Vehicle is far from start position**: If the vehicle is far from the start position, the module will not execute. This prevents redundant execution when the new goal is given. +3. **車両が目標位置に到達**: 車両がすでに目標位置に到達している場合、モジュールは開始せず、目的地に到着したときに不要な実行を回避します。 -3. **Vehicle reached goal**: The module will not start if the vehicle has already reached its goal position, avoiding unnecessary execution when the destination is attained. +4. **車両が走行中**: 車両がまだ走行中の場合、モジュールは開始を延期します。これにより、安全のために安定した静止状態からプランニングが実行されます。 -4. **Vehicle in motion**: If the vehicle is still moving, the module will defer starting. This ensures that planning occurs from a stable, stationary state for safety. +5. **同じ経路セグメント内で目標位置が後方**: 目標位置が現在の経路上で自車位置の後方にある場合、モジュールは開始しません。この条件は、現在サポートされていない、車両が現在の経路で後退する必要がある経路のプランニングに伴う複雑さを回避するためにチェックされます。 -5. **Goal behind in same route segment**: The module will not initiate if the goal position is behind the ego vehicle within the same route segment. This condition is checked to avoid complications with planning routes that require the vehicle to move backward on its current path, which is currently not supported. +### **終了条件** -### **End Conditions** +`StartPlannerModule` は、使用されているプランナーの種類に応じて、特定の条件が満たされると終了します。`canTransitSuccessState` 関数は、以下の基準に基づいてモジュールを成功状態に移行する必要があるかどうかを判断します。 -The `StartPlannerModule` terminates when specific conditions are met, depending on the type of planner being used. The `canTransitSuccessState` function determines whether the module should transition to the success state based on the following criteria: +#### フリーパスプランナーがアクティブな場合 -#### When the Freespace Planner is active +- フリーパス経路の終点に到達した場合、モジュールは成功状態に移行します。 -- If the end point of the freespace path is reached, the module transitions to the success state. +#### その他の種類のプランナーがアクティブな場合 -#### When any other type of planner is active +成功状態への移行は、次の条件によって決定されます。 -The transition to the success state is determined by the following conditions: +- リバースパスが生成されている場合、またはプルアウトパスの検索に失敗した場合: + - モジュールは成功状態に移行しません。 +- プルアウトパスのシフトセクションの終点に到達した場合: + - モジュールは成功状態に移行します。 -- If a reverse path is being generated or the search for a pull out path fails: - - The module does not transition to the success state. -- If the end point of the pull out path's shift section is reached: - - The module transitions to the success state. +以下のフローチャートは、`canTransitSuccessState` 関数における意思決定プロセスを示しています。 -The flowchart below illustrates the decision-making process in the `canTransitSuccessState` function: ```plantuml @startuml @@ -154,107 +151,110 @@ endif @enduml ``` -## Concept of safety assurance +## セーフティアシュアランスのコンセプト -The approach to collision safety is divided into two main components: generating paths that consider static information, and detecting collisions with dynamic obstacles to ensure the safety of the generated paths. +衝突防止アプローチは、静的情報を考慮した経路生成と、生成された経路の安全性を確保するためのダイナミック障害物との衝突検出という2つの主要コンポーネントに分かれています。 -### 1. Generating path with static information +### 1. 静的情報を使用した経路生成 -- **Path deviation checks**: This ensures that the path remains within the designated lanelets. By default, this feature is active, but it can be deactivated if necessary. +- **経路逸脱チェック**: 経路が指定されたレーンレット内に留まることを保証します。この機能はデフォルトで有効ですが、必要に応じて非アクティブ化できます。 -- **Static obstacle clearance from the path**: This involves verifying that a sufficient margin around static obstacles is maintained. The process includes creating a vehicle-sized footprint from the current position to the pull-out endpoint, which can be adjusted via parameters. The distance to static obstacle polygons is then calculated. If this distance is below a specified threshold, the path is deemed unsafe. Threshold levels (e.g., [2.0, 1.0, 0.5, 0.1]) can be configured, and the system searches for paths that meet the highest possible threshold based on a set search priority explained in following section, ensuring the selection of the safe path based on the policy. If no path meets the minimum threshold, it's determined that no safe path is available. +- **経路からの静的障害物クリアランス**: これは、静的障害物の周辺に十分なマージンが維持されていることを確認することを含みます。このプロセスには、現在の位置からプルアウトのエンドポイントまでの車両サイズのフットプリントを作成することが含まれます。これはパラメータで調整できます。その後、静的障害物ポリゴンまでの距離が計算されます。この距離が指定された閾値より小さい場合、経路は安全でないと見なされます。閾値レベル(例:'[2.0, 1.0, 0.5, 0.1]')は設定可能で、システムは、後続のセクションで説明する設定された検索優先順位に基づいて可能な限り最高の閾値を満たす経路を検索し、ポリシーに基づいて安全な経路の選択を確保します。最小閾値を満たす経路がなければ、安全な経路がないと判断されます。 -- **Clearance from stationary objects**: Maintaining an adequate distance from stationary objects positioned in front of and behind the vehicle is imperative for safety. Despite the path and stationary objects having a confirmed margin, the path is deemed unsafe if the distance from the shift start position to a front stationary object falls below `collision_check_margin_from_front_object` meters, or if the distance to a rear stationary object is shorter than `back_objects_collision_check_margin` meters. +- **静止物からのクリアランス**: 車両の前後に配置された静止物から十分な距離を維持することは、安全上不可欠です。経路と静止物に一定のマージンがあっても、シフト開始位置から前方の静止物までの距離が「`collision_check_margin_from_front_object`」メートル未満の場合、または後方の静止物までの距離が「`back_objects_collision_check_margin`」メートル未満の場合、経路は安全でないと見なされます。 - - Why is a margin from the front object necessary? - Consider a scenario in a "geometric pull out path" where the clearance from the path to a static obstacle is minimal, and there is a stopped vehicle ahead. In this case, although the path may meet safety standards and thus be generated, a concurrently operating avoidance module might deem it impossible to avoid the obstacle, potentially leading to vehicle deadlock. To ensure there is enough distance for avoidance maneuvers, the distance to the front obstacle is assessed. Increasing this parameter can prevent immobilization within the avoidance module but may also lead to the frequent generation of backward paths or geometric pull out path, resulting in paths that may seem unnatural to humans. + - なぜ前面のオブジェクトからのマージンが必要なのですか? + クリアランスから静的障害物への経路が最小限で、前方に停止した車両がある「ジオメトリックプルアウトパス」のシナリオを検討します。この場合、経路は安全基準を満たしている可能性があり、したがって生成される可能性がありますが、同時に動作する回避モジュールは障害物を回避することが不可能であると見なす可能性があり、車両のデッドロックにつながる可能性があります。回避操作のための十分な距離を確保するために、前面障害物までの距離が評価されます。このパラメータを増やすことで、回避モジュール内での無効化を防ぐことができますが、後方経路またはジオメトリックプルアウトパスの生成頻度が高くなる可能性があり、人間には不自然に見える経路が生じる可能性があります。 - - Why is a margin from the rear object necessary? - For objects ahead, another behavior module can intervene, allowing the path to overwrite itself through an avoidance plan, even if the clearance from the path to a static obstacle is minimal, thus maintaining a safe distance from static obstacles. However, for objects behind the vehicle, it is impossible for other behavior modules other than the start_planner to alter the path to secure a margin, potentially leading to a deadlock by an action module like "obstacle_cruise_planner" and subsequent immobilization. Therefore, a margin is set for stationary objects at the rear. + - なぜ後方のオブジェクトからのマージンが必要なのですか? + 前のオブジェクトの場合、経路から静的障害物へのクリアランスが最小限であっても、回避計画を通じて経路自体に上書きできる別のビヘイビアモジュールが存在するため、静的障害物から安全な距離を維持できます。ただし、車両の後ろにあるオブジェクトの場合、start_planner 以外の他のビヘイビアモジュールが経路を変更してマージンを確保することは不可能であり、「obstacle_cruise_planner」などのアクションモジュールによるデッドロックや、その後の無効化につながる可能性があります。したがって、後方の静止物に対するマージンが設定されています。 -Here's the expression of the steps start pose searching steps, considering the `collision_check_margins` is set at [2.0, 1.0, 0.5, 0.1] as example. The process is as follows: +静的障害物からのクリアランスが「'[2.0, 1.0, 0.5, 0.1]'」に設定されている場合の開始ポーズ検索手順の表現を以下に示します。プロセスは次のとおりです。 -1. **Generating start pose candidates** +1. **開始ポーズ候補の生成** - - Set the current position of the vehicle as the base point. - - Determine the area of consideration behind the vehicle up to the `max_back_distance`. - - Generate candidate points for the start pose in the backward direction at intervals defined by `backward_search_resolution`. - - Include the current position as one of the start pose candidates. + - 車両の現在の位置を基準点として設定します。 + - 車両の後ろの最大「`max_back_distance`」までの考慮範囲を決定します。 + - 「backward_search_resolution」で定義された間隔で、後方方向に開始ポーズ候補を生成します。 + - 現在の位置を開始ポーズ候補の 1 つとして含めます。 ![start pose candidate](images/start_pose_candidate.drawio.svg){width=1100} -2. **Starting search at maximum margin** +2. **最大マージンで検索開始** - - Begin the search with the largest threshold (e.g., 2.0 meters). - - Evaluate each start pose candidate to see if it maintains a margin of more than 2.0 meters. - - Simultaneously, verify that the path generated from that start pose meets other necessary criteria (e.g., path deviation check). - - Following the search priority described later, evaluate each in turn and adopt the start pose if it meets the conditions. + - 最大しきい値(例:2.0 メートル)で検索を開始します。 + - 各開始ポーズ候補が 2.0 メートル以上のマージンを維持しているかどうかを評価します。 + - 同時に、その開始ポーズから生成された経路が他の必要な基準(例:経路逸脱チェック)を満たしていることを確認します。 + - 後述の検索優先順位に従って順番に評価し、条件を満たせば開始ポーズを採用します。 -3. **Repeating search according to threshold levels** +3. **しきい値レベルに応じた検索の繰り返し** - - If no start pose meeting the conditions is found, lower the threshold to the next level (e.g., 1.0 meter) and repeat the search. + - 条件を満たす開始ポーズが見つからない場合は、しきい値を次のレベル(例:1.0 メートル)まで下げて検索を繰り返します。 -4. **Continuing the search** +4. **検索の継続** - - Continue the search until a start pose that meets the conditions is found, or the threshold level reaches the minimum value (e.g., 0.1 meter). - - The aim of this process is to find a start pose that not only secures as large a margin as possible but also satisfies the conditions required for the path. + - 条件を満たす開始ポーズが見つかるまで、またはしきい値レベルが最小値(例:0.1 メートル)に達するまで検索を続けます。 + - このプロセスの目的は、可能な限り大きなマージンを確保し、かつ経路に必要な条件を満たす開始ポーズを見つけることです。 -5. **Generating a stop path** - - If no start pose satisfies the conditions at any threshold level, generate a stop path to ensure safety. +5. **停止パスの生成** + - どのしきい値レベルでも条件を満たす開始ポーズがない場合は、安全性を確保するために停止パスを生成します。 -#### **search priority** +#### **検索優先順位** -If a safe path with sufficient clearance for static obstacles cannot be generated forward, a backward search from the vehicle's current position is conducted to locate a suitable start point for a pull out path generation. +静的障害物に対する十分なクリアランスを確保した安全な経路を前に生成できない場合、車両の現在の位置から後方検索を実行して、プルアウトパスの生成に適した開始点を特定します。 -During this backward search, different policies can be applied based on `search_priority` parameters: +この後方検索中に、`search_priority`パラメータに基づいて異なるポリシーを適用できます。 -Selecting `efficient_path` focuses on creating a shift pull out path, regardless of how far back the vehicle needs to move. -Opting for `short_back_distance` aims to find a location with the least possible backward movement. +`efficient_path` を選択すると、車両がどれほど後方に移動する必要があっても、シフトプルアウトパスを作成することに重点が置かれます。 +`short_back_distance` を選択すると、できるだけ後方移動が少なくなる場所を探すことを目的としています。 ![priority_order](./images/priority_order.drawio.svg) -`PriorityOrder` is defined as a vector of pairs, where each element consists of a `size_t` index representing a start pose candidate index, and the planner type. The PriorityOrder vector is processed sequentially from the beginning, meaning that the pairs listed at the top of the vector are given priority in the selection process for pull out path generation. +** 優先順位 ** + +`PriorityOrder` は、各要素が開始姿勢候補のインデックスを表す `size_t` インデックスとプランナータイプで構成されるペアのベクトルとして定義されます。 PriorityOrder ベクトルは先頭から順次処理され、ベクトルの先頭にリストされたペアがプルアウトパスの生成で優先されます。 -##### `efficient_path` +##### ** `efficient_path` ** -When `search_priority` is set to `efficient_path` and the preference is for prioritizing `shift_pull_out`, the `PriorityOrder` array is populated in such a way that `shift_pull_out` is grouped together for all start pose candidates before moving on to the next planner type. This prioritization is reflected in the order of the array, with `shift_pull_out` being listed before geometric_pull_out. +`search_priority` が `efficient_path` に設定され、`shift_pull_out` を優先する場合、`PriorityOrder` 配列は `shift_pull_out` がすべての開始姿勢候補にグループ化された後、次のプランナータイプに移行するように設定されます。この優先順位は配列の順序に反映され、`shift_pull_out` が `geometric_pull_out` の前にリストされています。 -| Index | Planner Type | -| ----- | ------------------ | -| 0 | shift_pull_out | -| 1 | shift_pull_out | -| ... | ... | -| N | shift_pull_out | -| 0 | geometric_pull_out | -| 1 | geometric_pull_out | -| ... | ... | -| N | geometric_pull_out | +| インデックス | Plan手法 | +|---|---| +| 0 | shift_pull_out | +| 1 | shift_pull_out | +| ... | ... | +| N | shift_pull_out | +| 0 | geometric_pull_out | +| 1 | geometric_pull_out | +| ... | ... | +| N | geometric_pull_out | -This approach prioritizes trying all candidates with `shift_pull_out` before proceeding to `geometric_pull_out`, which may be efficient in situations where `shift_pull_out` is likely to be appropriate. +この手法では、`geometric_pull_out` に進む前に、`shift_pull_out` が適切である可能性が高い状況で効率的である可能性のある `shift_pull_out` ですべて候補を試すことを優先します。 ##### `short_back_distance` -For `search_priority` set to `short_back_distance`, the array alternates between planner types for each start pose candidate, which can minimize the distance the vehicle needs to move backward if the earlier candidates are successful. +`search_priority` が `short_back_distance` に設定されている場合、アレイは各スタートポーズ候補のプランナタイプを交互に使用して、前の候補が成功した場合に車両が後方移動する距離を最小化できます。 -| Index | Planner Type | -| ----- | ------------------ | -| 0 | shift_pull_out | -| 0 | geometric_pull_out | -| 1 | shift_pull_out | -| 1 | geometric_pull_out | -| ... | ... | -| N | shift_pull_out | -| N | geometric_pull_out | +| Index | Planningコンポーネント | +| ----- | -------------------- | +| 0 | shift_pull_out | +| 0 | geometric_pull_out | +| 1 | shift_pull_out | +| 1 | geometric_pull_out | +| ... | ... | +| N | shift_pull_out | +| N | geometric_pull_out | -This ordering is beneficial when the priority is to minimize the backward distance traveled, giving an equal chance for each planner to succeed at the closest possible starting position. +この順番付けは、後退距離を最小化することが優先される場合に有益であり、各プランナーに最も近い可能な開始位置で成功する平等な機会を与えます。 -### 2. Collision detection with dynamic obstacles +### 2. 動的障害物との衝突検出 -- **Applying RSS in Dynamic Collision Detection**: Collision detection is based on the RSS (Responsibility-Sensitive Safety) model to evaluate if a safe distance is maintained. See [safety check feature explanation](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) +- **動的衝突検出における RSS の適用**: 衝突検出は、安全距離が維持されているかどうかを評価するために RSS (責任感応型安全) モデルに基づいています。[安全確認機能の説明](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) を参照してください。 -- **Collision check performed range**: Safety checks for collisions with dynamic objects are conducted within the defined boundaries between the start and end points of each maneuver, ensuring the ego vehicle does not impede or hinder the progress of dynamic objects that come from behind it. +- **衝突確認実行範囲**: 動的物体との衝突に対する安全確認は、各機動の開始点と終了点間の定義された境界内で行われ、自車位置が自分の後方から来る動的物体の進行を妨げたり、妨害したりしないことを保証します。 + +- **衝突対応ポリシー**: 生成されたパス上の動的物体との衝突が検出されると、出発前に衝突検出が発生した場合、モジュール非アクティブ決定が登録されます。車両がすでに動き始めた場合、制動制約内で実行可能であり、後続車両が自車と車線境界の隙間を通過できる場合に限り、停止を試みます。 -- **Collision response policy**: Should a collision with dynamic objects be detected along the generated path, deactivate module decision is registered if collision detection occurs before departure. If the vehicle has already commenced movement, an attempt to stop will be made, provided it's feasible within the braking constraints and that the rear vehicle can pass through the gap between the ego vehicle and the lane border. ```plantuml @startuml @@ -278,33 +278,34 @@ stop @enduml ``` -#### **example of safety check performed range for shift pull out** +#### **シフトプルアウトに対する安全機能検査の範囲の例** -Give an example of safety verification range for shift pull out. The safety check is performed from the start of the shift to the end of the shift. And if the vehicle footprint does not leave enough space for a rear vehicle to drive through, the safety check against dynamic objects is disabled. +シフトプルアウトに対する安全機能検証の範囲の例を提示する。安全機能検査はシフトの開始から終了まで実施される。自車輪郭が後方車両の走行に十分なスペースがない場合、動的物体に関連する安全機能検査は無効化される。
- ![safety check performed range for shift pull out](images/collision_check_range_shift_pull_out.drawio.svg){width=1100} + ![シフトプルアウトに対する安全機能検査範囲](images/collision_check_range_shift_pull_out.drawio.svg){width=1100}
-**As a note, no safety check is performed during backward movements. Safety verification commences at the point where the backward motion ceases.** +**なお、後退動作時は安全機能検査は実施されない。安全機能検証は後退動作が停止した時点から開始される。** + +## RTC(Remote Teleoperation Capability)インターフェース -## RTC interface +本システムは、手動モードと自動モードで動作が大きく異なり、特に走行開始前、動的障害物とのやり取りにおいて違いがある。以下に、各モードの動作を記載する。 -The system operates distinctly under manual and auto mode, especially concerning the before the departure and interaction with dynamic obstacles. Below are the specific behaviors for each mode: +### 承認が必要な場合 -### When approval is required? +#### 前進走行 -#### Forward driving +- **走行開始承認必須**:経路が生成されていても、走行開始には承認が必要である。後方から接近する車両などの動的障害物が危険な場合、候補経路は表示されるが、走行開始には承認が必要である。 -- **Start approval required**: Even if a path is generated, approval is required to initiate movement. If a dynamic object poses a risk, such as an approaching vehicle from behind, candidate paths may be displayed, but approval is necessary for departure. +#### 後退走行 + 前進走行 -#### Backward driving + forward driving +- **複数回の承認が必要**:計画経路に後退走行が含まれる場合は、後退開始前と前進走行再開前に承認が必要である。前進走行開始前は、動的障害物に対する安全機能検査が実施される。障害物が検出された場合、走行開始承認が必要である。 -- **Multiple approvals required**: When the planned path includes a backward driving, multiple approvals are needed before starting the reverse and again before restarting forward movement. Before initiating forward movement, the system conducts safety checks against dynamic obstacles. If a detection is detected, approval for departure is necessary. +この区別により、手動モード(`enable_rtc`が真の場合)において重要な場面で人間の介入が必要となり、自動モードおよび手動モードの両方で動的障害物が存在する場合に安全でない動作を防止するための自動安全機能検査を実施することで、安全な車両動作が確保される。 -This differentiation ensures that the vehicle operates safely by requiring human intervention in manual mode(`enable_rtc` is true) at critical junctures and incorporating automatic safety checks in both modes to prevent unsafe operations in the presence of dynamic obstacles. +## 設計 -## Design ```plantuml @startuml @@ -347,201 +348,204 @@ PullOutPath --o PullOutPlannerBase @enduml ``` -## General parameters for start_planner - -| Name | Unit | Type | Description | Default value | -| :--------------------------------------------------------- | :---- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------- | -| th_arrived_distance | [m] | double | distance threshold for arrival of path termination | 1.0 | -| th_stopped_velocity | [m/s] | double | velocity threshold for arrival of path termination | 0.01 | -| th_stopped_time | [s] | double | time threshold for arrival of path termination | 1.0 | -| th_distance_to_middle_of_the_road | [m] | double | distance threshold to determine if the vehicle is on the middle of the road | 0.1 | -| collision_check_margins | [m] | double | Obstacle collision check margins list | [2.0, 1.0, 0.5, 0.1] | -| shift_collision_check_distance_from_end | [m] | double | collision check distance from end shift end pose | -10.0 | -| geometric_collision_check_distance_from_end | [m] | double | collision check distance from end geometric end pose | 0.0 | -| collision_check_margin_from_front_object | [m] | double | collision check margin from front object | 5.0 | -| skip_rear_vehicle_check | - | bool | flag to skip rear vehicle check (rear vehicle check is performed to skip safety check and proceed with departure when the ego vehicle is obstructing the progress of a rear vehicle) | false | -| extra_width_margin_for_rear_obstacle | [m] | double | extra width that is added to the perceived rear obstacle's width when deciding if the rear obstacle can overtake the ego vehicle while it is merging to a lane from the shoulder lane | 0.5 | -| object_types_to_check_for_path_generation.check_car | - | bool | flag to check car for path generation | true | -| object_types_to_check_for_path_generation.check_truck | - | bool | flag to check truck for path generation | true | -| object_types_to_check_for_path_generation.check_bus | - | bool | flag to check bus for path generation | true | -| object_types_to_check_for_path_generation.check_bicycle | - | bool | flag to check bicycle for path generation | true | -| object_types_to_check_for_path_generation.check_motorcycle | - | bool | flag to check motorcycle for path generation | true | -| object_types_to_check_for_path_generation.check_pedestrian | - | bool | flag to check pedestrian for path generation | true | -| object_types_to_check_for_path_generation.check_unknown | - | bool | flag to check unknown for path generation | true | -| center_line_path_interval | [m] | double | reference center line path point interval | 1.0 | - -### **Ego vehicle's velocity planning** - -WIP - -### **Safety check in free space area** - -WIP - -## Parameters for safety check - -### Stop Condition Parameters - -Parameters under `stop_condition` define the criteria for stopping conditions. - -| Name | Unit | Type | Description | Default value | -| :---------------------------- | :------ | :----- | :-------------------------------------- | :------------ | -| maximum_deceleration_for_stop | [m/s^2] | double | Maximum deceleration allowed for a stop | 1.0 | -| maximum_jerk_for_stop | [m/s^3] | double | Maximum jerk allowed for a stop | 1.0 | - -### Ego Predicted Path Parameters - -Parameters under `path_safety_check.ego_predicted_path` specify the ego vehicle's predicted path characteristics. - -| Name | Unit | Type | Description | Default value | -| :---------------------------- | :------ | :----- | :--------------------------------------------------- | :------------ | -| min_velocity | [m/s] | double | Minimum velocity of the ego vehicle's predicted path | 0.0 | -| acceleration | [m/s^2] | double | Acceleration for the ego vehicle's predicted path | 1.0 | -| max_velocity | [m/s] | double | Maximum velocity of the ego vehicle's predicted path | 1.0 | -| time_horizon_for_front_object | [s] | double | Time horizon for predicting front objects | 10.0 | -| time_horizon_for_rear_object | [s] | double | Time horizon for predicting rear objects | 10.0 | -| time_resolution | [s] | double | Time resolution for the ego vehicle's predicted path | 0.5 | -| delay_until_departure | [s] | double | Delay until the ego vehicle departs | 1.0 | - -### Target Object Filtering Parameters - -Parameters under `target_filtering` are related to filtering target objects for safety check. - -| Name | Unit | Type | Description | Default value | -| :---------------------------------------------- | :---- | :----- | :----------------------------------------------------------------- | :------------ | -| safety_check_time_horizon | [s] | double | Time horizon for predicted paths of the ego and dynamic objects | 5.0 | -| safety_check_time_resolution | [s] | double | Time resolution for predicted paths of the ego and dynamic objects | 1.0 | -| object_check_forward_distance | [m] | double | Forward distance for object detection | 10.0 | -| object_check_backward_distance | [m] | double | Backward distance for object detection | 100.0 | -| ignore_object_velocity_threshold | [m/s] | double | Velocity threshold below which objects are ignored | 1.0 | -| object_types_to_check.check_car | - | bool | Flag to check cars | true | -| object_types_to_check.check_truck | - | bool | Flag to check trucks | true | -| object_types_to_check.check_bus | - | bool | Flag to check buses | true | -| object_types_to_check.check_trailer | - | bool | Flag to check trailers | true | -| object_types_to_check.check_bicycle | - | bool | Flag to check bicycles | true | -| object_types_to_check.check_motorcycle | - | bool | Flag to check motorcycles | true | -| object_types_to_check.check_pedestrian | - | bool | Flag to check pedestrians | true | -| object_types_to_check.check_unknown | - | bool | Flag to check unknown object types | false | -| object_lane_configuration.check_current_lane | - | bool | Flag to check the current lane | true | -| object_lane_configuration.check_right_side_lane | - | bool | Flag to check the right side lane | true | -| object_lane_configuration.check_left_side_lane | - | bool | Flag to check the left side lane | true | -| object_lane_configuration.check_shoulder_lane | - | bool | Flag to check the shoulder lane | true | -| object_lane_configuration.check_other_lane | - | bool | Flag to check other lanes | false | -| include_opposite_lane | - | bool | Flag to include the opposite lane in check | false | -| invert_opposite_lane | - | bool | Flag to invert the opposite lane check | false | -| check_all_predicted_path | - | bool | Flag to check all predicted paths | true | -| use_all_predicted_path | - | bool | Flag to use all predicted paths | true | -| use_predicted_path_outside_lanelet | - | bool | Flag to use predicted paths outside of lanelets | false | - -### Safety Check Parameters - -Parameters under `safety_check_params` define the configuration for safety check. - -| Name | Unit | Type | Description | Default value | -| :--------------------------------------------- | :--- | :----- | :---------------------------------------------------------------------------------------- | :------------ | -| enable_safety_check | - | bool | Flag to enable safety check | true | -| check_all_predicted_path | - | bool | Flag to check all predicted paths | true | -| publish_debug_marker | - | bool | Flag to publish debug markers | false | -| rss_params.rear_vehicle_reaction_time | [s] | double | Reaction time for rear vehicles | 2.0 | -| rss_params.rear_vehicle_safety_time_margin | [s] | double | Safety time margin for rear vehicles | 1.0 | -| rss_params.lateral_distance_max_threshold | [m] | double | Maximum lateral distance threshold | 2.0 | -| rss_params.longitudinal_distance_min_threshold | [m] | double | Minimum longitudinal distance threshold | 3.0 | -| rss_params.longitudinal_velocity_delta_time | [s] | double | Delta time for longitudinal velocity | 0.8 | -| hysteresis_factor_expand_rate | - | double | Rate to expand/shrink the hysteresis factor | 1.0 | -| collision_check_yaw_diff_threshold | - | double | Maximum yaw difference between ego and object when executing rss-based collision checking | 1.578 | - -## **Path Generation** - -There are two path generation methods. - -### **shift pull out** - -This is the most basic method of starting path planning and is used on road lanes and shoulder lanes when there is no particular obstruction. - -Pull out distance is calculated by the speed, lateral deviation, and the lateral jerk. The lateral jerk is searched for among the predetermined minimum and maximum values, and the one that generates a safe path is selected. - -- Generate the road lane centerline and shift it to the current position. -- In the section between merge start and end, path is shifted by a method that is used to generate avoidance path (four segmental constant jerk polynomials) -- Combine this path with center line of road lane +## Planningコンポーネントの一般パラメータ + + + +| パラメータ名 | 単位 | 型 | 説明 | デフォルト値 | +| :------------------------------------------------------- | :---- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | +| th_arrived_distance | [m] | double | 到達後経路終了距離のしきい値 | 1.0 | +| th_stopped_velocity | [m/s] | double | 到達後経路終了速度のしきい値 | 0.01 | +| th_stopped_time | [s] | double | 到達後経路終了時間のしきい値 | 1.0 | +| th_distance_to_middle_of_the_road | [m] | double | 車両が道路の中間点にいるかどうかを判断するための距離のしきい値 | 0.1 | +| collision_check_margins | [m] | double | 障害物衝突チェックマージンのリスト | [2.0, 1.0, 0.5, 0.1] | +| shift_collision_check_distance_from_end | [m] | double | 衝突チェック距離の終端からのシフト終端姿勢 | -10.0 | +| geometric_collision_check_distance_from_end | [m] | double | 衝突チェック距離の終端幾何学的終端姿勢 | 0.0 | +| collision_check_margin_from_front_object | [m] | double | 前方の対象からの衝突チェックマージン | 5.0 | +| skip_rear_vehicle_check | - | bool | 後続車両チェックをスキップするフラグ(後続車両チェックは、自動運転車が後続車両の進行を妨げているときに安全チェックをスキップして出発を続行するために実行される) | false | +| extra_width_margin_for_rear_obstacle | [m] | double | 自動運転車が路肩車線から車線に合流する間に、後方の障害物が自動運転車を追い抜くことができるかどうかを判断するときに、認知される後方の障害物の幅に追加される追加幅 | 0.5 | +| object_types_to_check_for_path_generation.check_car | - | bool | getPathGen用車検フラグ | true | +| object_types_to_check_for_path_generation.check_truck | - | bool | getPathGen用トラック検査フラグ | true | +| object_types_to_check_for_path_generation.check_bus | - | bool | getPathGen用バス検査フラグ | true | +| object_types_to_check_for_path_generation.check_bicycle | - | bool | getPathGen用自転車検査フラグ | true | +| object_types_to_check_for_path_generation.check_motorcycle | - | bool | getPathGen用オートバイ検査フラグ | true | +| object_types_to_check_for_path_generation.check_pedestrian | - | bool | getPathGen用歩行者検査フラグ | true | +| object_types_to_check_for_path_generation.check_unknown | - | bool | getPathGen用障害物検査フラグ | true | +| center_line_path_interval | [m] | double | 参照中心線経路ポイント間隔 | 1.0 | + +### **自車速度計画** + +未完成 + +### **障害物なし領域の安全確認** + +未完成 + +## 安全確認のパラメータ + +### 停止基準パラメータ + +`stop_condition` のパラメータは停止条件の基準を定義します。 + +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :------------------------------- | :----- | :------ | :--------------------------------------- | :---------- | +| `maximum_deceleration_for_stop` | [m/s^2] | double | 停止時の最大減速度 | 1.0 | +| `maximum_jerk_for_stop` | [m/s^3] | double | 停止時の最大ジャーク | 1.0 | + +### 自車予測経路パラメータ + +`path_safety_check.ego_predicted_path` のパラメータは、自車予測経路特性を指定します。 + +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :---------------------------- | :------ | :----- | :------------------------------------------------- | :------------ | +| min_velocity | [m/s] | double | 自車位置の予測経路の最小速度 | 0.0 | +| acceleration | [m/s^2] | double | 自車位置の予測経路の加速度 | 1.0 | +| max_velocity | [m/s] | double | 自車位置の予測経路の最大速度 | 1.0 | +| time_horizon_for_front_object | [s] | double | 先方物体の予測時間幅 | 10.0 | +| time_horizon_for_rear_object | [s] | double | 後方物体の予測時間幅 | 10.0 | +| time_resolution | [s] | double | 自車位置の予測経路の時間分解能 | 0.5 | +| delay_until_departure | [s] | double | 自車が発進するまでの遅延時間 | 1.0 | + +### ターゲットオブジェクトフィルタリングのパラメーター + +`target_filtering` のパラメーターは、セーフティチェックのためのターゲットオブジェクトのフィルタリングに関連しています。 + +| Name | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------------- | :---- | :----- | :-------------------------------------------------------------------------- | :------------ | +| safety_check_time_horizon | [秒] | 倍精度 | 自車と動的オブジェクトの予測パスの時間範囲 | 5.0 | +| safety_check_time_resolution | [秒] | 倍精度 | 自車と動的オブジェクトの予測パスの時間解像度 | 1.0 | +| object_check_forward_distance | [m] | 倍精度 | 物体検出の前方距離 | 10.0 | +| object_check_backward_distance | [m] | 倍精度 | 物体検出の後方距離 | 100.0 | +| ignore_object_velocity_threshold | [m/秒] | 倍精度 | 物体が無視される速度しきい値 | 1.0 | +| object_types_to_check.check_car | - | ブール | 車を検査するためのフラグ | true | +| object_types_to_check.check_truck | - | ブール | トラックを検査するためのフラグ | true | +| object_types_to_check.check_bus | - | ブール | バスを検査するためのフラグ | true | +| object_types_to_check.check_trailer | - | ブール | トレーラーを検査するためのフラグ | true | +| object_types_to_check.check_bicycle | - | ブール | 自転車を検査するためのフラグ | true | +| object_types_to_check.check_motorcycle | - | ブール | オートバイを検査するためのフラグ | true | +| object_types_to_check.check_pedestrian | - | ブール | 歩行者を検査するためのフラグ | true | +| object_types_to_check.check_unknown | - | ブール | 不明なタイプのオブジェクトを検査するためのフラグ | false | +| object_lane_configuration.check_current_lane | - | ブール | 現在の車線を検査するためのフラグ | true | +| object_lane_configuration.check_right_side_lane | - | ブール | 右側の車線を検査するためのフラグ | true | +| object_lane_configuration.check_left_side_lane | - | ブール | 左側の車線を検査するためのフラグ | true | +| object_lane_configuration.check_shoulder_lane | - | ブール | 路肩を検査するためのフラグ | true | +| object_lane_configuration.check_other_lane | - | ブール | 他の車線を検査するためのフラグ | false | +| include_opposite_lane | - | ブール | 反対車線を検査に含めるフラグ | false | +| invert_opposite_lane | - | ブール | 反対車線の検査を反転するフラグ | false | +| check_all_predicted_path | - | ブール | すべての予測パスを検査するためのフラグ | true | +| use_all_predicted_path | - | ブール | すべての予測パスを使用するためのフラグ | true | +| use_predicted_path_outside_lanelet | - | ブール | 車線外側の予測パスを使用するためのフラグ | false | + +### 安全確認パラメータ + +`safety_check_params` のパラメータは、安全確認の設定を定義しています。 + +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------- | :--- | :----- | :----------------------------------------------------------------------------------------------- | :------------ | +| enable_safety_check | - | bool | セーフティチェックを有効にするフラグ | true | +| check_all_predicted_path | - | bool | 予測パスをすべてチェックするフラグ | true | +| publish_debug_marker | - | bool | デバッグマーカーを発行するフラグ | false | +| rss_params.rear_vehicle_reaction_time | [s] | double | 後続車の反応時間 | 2.0 | +| rss_params.rear_vehicle_safety_time_margin | [s] | double | 後続車のセーフティタイムマージン | 1.0 | +| rss_params.lateral_distance_max_threshold | [m] | double | 最大横方向距離のしきい値 | 2.0 | +| rss_params.longitudinal_distance_min_threshold | [m] | double | 最小縦方向距離のしきい値 | 3.0 | +| rss_params.longitudinal_velocity_delta_time | [s] | double | 縦速度のデルタ時間 | 0.8 | +| hysteresis_factor_expand_rate | - | double | ヒステリシスの拡張/縮小率 | 1.0 | +| collision_check_yaw_diff_threshold | - | double | RSSベースのコリジョンチェックの実行時にEgoとオブジェクト間の最大ヨー差 | 1.578 | + +## **経路生成** + +経路生成方法は2つあります。 + +### **Shift Pull Out** + +最も基本的な経路計画開始の手法で、特に障害物がない道路の車線や路側帯で使用されます。 + +プルアウト距離は、速度、側方偏差、および側方ジャークによって計算されます。側方ジャークは、あらかじめ決められた最小値と最大値の中から検索され、安全な経路を生成するものが選択されます。 + +- 道路車線のセンターラインを生成し、現在の位置にシフトします。 +- 合流開始点と終了点の間のセクションでは、回避経路の生成に使用される手法(4つのセグメント定常ジャーク多項式)で経路をシフトします。 +- この経路を道路車線のセンターラインと組み合わせます。 ![shift_pull_out](./images/shift_pull_out.drawio.svg) -[shift pull out video](https://user-images.githubusercontent.com/39142679/187872468-6d5057ee-e039-499b-afc7-fe0dc8052a6b.mp4) +[Shift Pull Out動画](https://user-images.githubusercontent.com/39142679/187872468-6d5057ee-e039-499b-afc7-fe0dc8052a6b.mp4) -#### parameters for shift pull out +#### Shift Pull Outのパラメーター -| Name | Unit | Type | Description | Default value | -| :--------------------------------------------- | :----- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_shift_pull_out | [-] | bool | flag whether to enable shift pull out | true | -| check_shift_path_lane_departure | [-] | bool | flag whether to check if shift path footprints are out of lane | true | -| allow_check_shift_path_lane_departure_override | [-] | bool | flag to override/cancel lane departure check if the ego vehicle's starting pose is already out of lane | false | -| shift_pull_out_velocity | [m/s] | double | velocity of shift pull out | 2.0 | -| pull_out_sampling_num | [-] | int | Number of samplings in the minimum to maximum range of lateral_jerk | 4 | -| maximum_lateral_jerk | [m/s3] | double | maximum lateral jerk | 2.0 | -| minimum_lateral_jerk | [m/s3] | double | minimum lateral jerk | 0.1 | -| minimum_shift_pull_out_distance | [m] | double | minimum shift pull out distance. if calculated pull out distance is shorter than this, use this for path generation. | 0.0 | -| maximum_curvature | [1/m] | double | maximum curvature. Calculate the required pull out distance from this maximum curvature, assuming the reference path is considered a straight line and shifted by two approximate arcs. This does not compensate for curvature in a shifted path or curve. | 0.07 | -| end_pose_curvature_threshold | [1/m] | double | The curvature threshold which is used for calculating the shift pull out distance. The shift end pose is shifted forward so that curvature on shift end pose is less than this value. This is to prevent the generated path from having a large curvature when the end pose is on a curve. If a shift end pose with a curvature below the threshold is not found, the shift pull out distance is used as the distance to the point with the lowest curvature among the points beyond a certain distance. | 0.01 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :----------------------------------------------- | :----- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_shift_pull_out | [-] | bool | Shift pull out を有効にするかどうか | true | +| check_shift_path_lane_departure | [-] | bool | Shift path の車両逸脱量をチェックするかどうか | true | +| allow_check_shift_path_lane_departure_override | [-] | bool | エゴビークルの現在の位置がすでに車両逸脱中である場合に、車両逸脱のチェックを上書き/キャンセルするフラグ | false | +| shift_pull_out_velocity | [m/s] | double | Shift pull out の速度 | 2.0 | +| pull_out_sampling_num | [-] | int | 横方向加速度の最小値から最大値の範囲内でサンプリングする回数 | 4 | +| maximum_lateral_jerk | [m/s3] | double | 最大横方向加速度 | 2.0 | +| minimum_lateral_jerk | [m/s3] | double | 最小横方向加速度 | 0.1 | +| minimum_shift_pull_out_distance | [m] | double | 最小 Shift pull out 距離。計算された pull out 距離がこれよりも短かった場合、Path 生成にこれを用いる。 | 0.0 | +| maximum_curvature | [1/m] | double | 最大曲率。Shift pull out 距離を、参照パスが直線で、2 つの近似弧でシフトされたものと仮定して、この最大曲率から計算する。シフトパスまたは曲線内の曲率は考慮されない。 | 0.07 | +| end_pose_curvature_threshold | [1/m] | double | Shift pull out 距離を計算するために使用される曲率の閾値。シフトのエンドポーズは、シフトのエンドポーズの曲率がこの値未満になるように前方にシフトされる。これは、エンドポーズが曲線上にある場合に生成されたパスに大きな曲率が発生するのを防ぐためである。閾値以下の曲率を持つシフトのエンドポーズが見つからない場合、Shift pull out 距離は特定の距離を越えた地点のうち、最も曲率が低い地点までの距離として使用される。 | 0.01 | ### **geometric pull out** -Generate two arc paths with discontinuous curvature. Ego-vehicle stops once in the middle of the path to control the steer on the spot. -See also [[1]](https://www.sciencedirect.com/science/article/pii/S1474667015347431) for details of the algorithm. +不連続的な曲率の 2 つの円弧パスを生成します。自動運転車はパスの途中で一度停止し、その場でステアリングを制御します。 +アルゴリズムの詳細については [[1]](https://www.sciencedirect.com/science/article/pii/S1474667015347431) を参照してください。 ![geometric_pull_out](./images/geometric_pull_out.drawio.svg) [geometric pull out video](https://user-images.githubusercontent.com/39142679/181024707-3e7ca5ee-62de-4334-b9e9-ded313de1ea1.mp4) -#### parameters for geometric pull out +#### geometric pull out のパラメータ -| Name | Unit | Type | Description | Default value | -| :------------------------------------ | :---- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_geometric_pull_out | [-] | bool | flag whether to enable geometric pull out | true | -| divide_pull_out_path | [-] | bool | flag whether to divide arc paths. The path is assumed to be divided because the curvature is not continuous. But it requires a stop during the departure. | false | -| geometric_pull_out_velocity | [m/s] | double | velocity of geometric pull out | 1.0 | -| lane_departure_margin | [m] | double | margin of deviation to lane right | 0.2 | -| lane_departure_check_expansion_margin | [m] | double | margin to expand the ego vehicle footprint when doing lane departure checks | 0.0 | -| pull_out_max_steer_angle | [rad] | double | maximum steer angle for path generation | 0.26 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :-------------------------------------- | :---- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_geometric_pull_out | [-] | bool | ジオメトリプルアウトを有効にするフラグ | true | +| divide_pull_out_path | [-] | bool | 円弧パスを分割するフラグ。曲率が連続ではないため、パスは分割されていると想定されます。ただし、出発中に停止が必要です。 | false | +| geometric_pull_out_velocity | [m/s] | double | ジオメトリプルアウトの速度 | 1.0 | +| lane_departure_margin | [m] | double | 右側車線を逸脱する際の許容範囲 | 0.2 | +| lane_departure_check_expansion_margin | [m] | double | 車線逸脱チェック時の自車Footprintの拡大マージン | 0.0 | +| pull_out_max_steer_angle | [rad] | double | パス生成における最大操舵角 | 0.26 | -## **backward pull out start point search** +## **後退引き出し始点の検索** -If a safe path cannot be generated from the current position, search backwards for a pull out start point at regular intervals(default: `2.0`). +現在の位置から安全な経路が生成できない場合、一定の間隔(デフォルト: `2.0`)で後退して引き出し開始点を探します。 ![pull_out_after_back](./images/pull_out_after_back.drawio.svg) -[pull out after backward driving video](https://user-images.githubusercontent.com/39142679/181025149-8fb9fb51-9b8f-45c4-af75-27572f4fba78.mp4) +[後退後の引き出しに関する動画](https://user-images.githubusercontent.com/39142679/181025149-8fb9fb51-9b8f-45c4-af75-27572f4fba78.mp4) -### **parameters for backward pull out start point search** +### **後退引き出し開始点検索のパラメータ** -| Name | Unit | Type | Description | Default value | -| :---------------------------- | :--- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------- | -| enable_back | [-] | bool | flag whether to search backward for start_point | true | -| search_priority | [-] | string | In the case of `efficient_path`, use efficient paths even if the back distance is longer. In case of `short_back_distance`, use a path with as short a back distance | efficient_path | -| max_back_distance | [m] | double | maximum back distance | 30.0 | -| backward_search_resolution | [m] | double | distance interval for searching backward pull out start point | 2.0 | -| backward_path_update_duration | [s] | double | time interval for searching backward pull out start point. this prevents chattering between back driving and pull_out | 3.0 | -| ignore_distance_from_lane_end | [m] | double | If distance from shift start pose to end of shoulder lane is less than this value, this start pose candidate is ignored | 15.0 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :-------------------------- | :--- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| enable_back | [-] | bool | 開始点として後方検索するかどうか | true | +| search_priority | [-] | string | `efficient_path`の場合、後方距離が長くても効率的な経路を使用する。 `short_back_distance`の場合、後方距離が短い経路を使用 | efficient_path | +| max_back_distance | [m] | double | 後方距離の最大値 | 30.0 | +| backward_search_resolution | [m] | double | 後方引き出し開始点の検索間隔 | 2.0 | +| backward_path_update_duration | [s] | double | 後方引き出し開始点の検索時間間隔。これにより、後方走行と引き出しのチャッタリングを防ぐことができる | 3.0 | +| ignore_distance_from_lane_end | [m] | double | シフト開始位置から側道レーンの終了までの距離がこの値より小さい場合、この開始位置の候補は無視される | 15.0 | -### **freespace pull out** +### **フリースペースでの引き出し** -If the vehicle gets stuck with pull out along lanes, execute freespace pull out. -To run this feature, you need to set `parking_lot` to the map, `activate_by_scenario` of [costmap_generator](../autoware_costmap_generator/README.md) to `false` and `enable_freespace_planner` to `true` +車両が車線沿いの引き出しで立ち往生した場合、フリースペースでの引き出しを実行します。 +この機能を実行するには、地図に `parking_lot` を設定し、 costmap_generator の `activate_by_scenario` を `false` にして、`enable_freespace_planner` を `true` にする必要があります。 -#### Unimplemented parts / limitations for freespace pull out +#### フリースペースでの引き出しの未実装部分と制限事項 + +- 短い経路が生成された場合、自車はその経路で走行できません。 +- 複雑なケースでは、生成時間が長くなるか失敗します。 +- 走行可能エリアが parking_lot に収まることは保証されていません。 -- When a short path is generated, the ego does can not drive with it. -- Complex cases take longer to generate or fail. -- The drivable area is not guaranteed to fit in the parking_lot. +#### フリースペース駐車のパラメータ -#### Parameters freespace parking +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :----------------------------- | :--- | :------- | :------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_freespace_planner | [-] | ブール | 車両が走行する車線に障害物があり、車両が立ち往生した際に実行するフリースペースプルのフラグを有効にします | true | +| end_pose_search_start_distance | [m] | 倍精度 | 自車からfreespace_pull_outのドライビングレーンで終端点の検索を開始する地点までの距離 | 20.0 | +| end_pose_search_end_distance | [m] | 倍精度 | 自車からfreespace_pull_outのドライビングレーンで終端点の検索を終了する地点までの距離 | 30.0 | +| end_pose_search_interval | [m] | 倍精度 | freespace_pull_outのドライビングレーンで終端点を検索する間隔 | 2.0 | -| Name | Unit | Type | Description | Default value | -| :----------------------------- | :--- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_freespace_planner | [-] | bool | this flag activates a free space pullout that is executed when a vehicle is stuck due to obstacles in the lanes where the ego is located | true | -| end_pose_search_start_distance | [m] | double | distance from ego to the start point of the search for the end point in the freespace_pull_out driving lane | 20.0 | -| end_pose_search_end_distance | [m] | double | distance from ego to the end point of the search for the end point in the freespace_pull_out driving lane | 30.0 | -| end_pose_search_interval | [m] | bool | interval to search for the end point in the freespace_pull_out driving lane | 2.0 | +その他の詳細は [freespace_planner](../autoware_freespace_planner/README.md) を参照してください。 -See [freespace_planner](../autoware_freespace_planner/README.md) for other parameters. diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md index 30b1d67a2b804..0f37a7089cd80 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md @@ -1,32 +1,33 @@ -# Avoidance module for static objects +## 静止物回避モジュール ![fig](./images/purpose/rviz.png) -## Purpose/Role +## 目的/役割 -This is a rule-based avoidance module, which runs based on perception output data, HDMap, current path and route. This module is designed to create avoidance paths for static (=stopped) objects in simple situations. Currently, this module doesn't support dynamic (=moving) objects. +これはルールベースの回避モジュールで、知覚出力データ、HDマップ、現在のパスとルートに基づいて実行されます。このモジュールは、単純な状況における静止 (=停止) 物体に対する回避パスを作成するように設計されています。現在、このモジュールは動的 (=移動) 物体をサポートしていません。 ![fig](./images/purpose/avoidance.png) -This module has an [RTC interface](../../autoware_rtc_interface/README.md), and the user can select operation mode from MANUAL/AUTO depending on the performance of the vehicle's sensors. If the user selects MANUAL mode, this module outputs a candidate avoidance path and awaits operator approval. In the case where the sensor/perception performance is insufficient and false positives occur, we recommend MANUAL mode to prevent unnecessary avoidance maneuvers. +このモジュールは[RTC インターフェイス](../../autoware_rtc_interface/README.md)を持ち、ユーザーは車両のセンサーの性能に応じてMANUAL/AUTOから運転モードを選択できます。ユーザーがMANUALモードを選択した場合、このモジュールは回避パスの候補を出力し、オペレーターの承認を待ちます。センサー/知覚の性能が不十分で誤検知が発生する場合は、不要な回避操作を防ぐためにMANUALモードをお勧めします。 -If the user selects AUTO mode, this module modifies the current following path without operator approval. If the sensor/perception performance is sufficient, use AUTO mode. +ユーザーがAUTOモードを選択した場合、このモジュールはオペレーターの承認なしで現在の追従パスを変更します。センサー/知覚の性能が十分な場合は、AUTOモードを使用します。 -### Limitations +### 制限事項 -This module allows developers to design vehicle behavior in avoidance planning using specific rules. Due to the property of rule-based planning, the algorithm cannot compensate for not colliding with obstacles in complex cases. This is a trade-off between "be intuitive and easy to design" and "be hard to tune but can handle many cases". This module adopts the former policy and therefore this output should be checked more strictly in the later stage. In the .iv reference implementation, there is another avoidance module in the motion planning module that uses optimization to handle the avoidance in complex cases. (Note that, the motion planner needs to be adjusted so that the behavior result will not be changed much in the simple case and this is a typical challenge for the behavior-motion hierarchical architecture.) +このモジュールにより、開発者は特定のルールを使用した回避計画における車両の動作を設計できます。ルールベースの計画の特性上、このアルゴリズムは複雑な場合における障害物との衝突を補正できません。これは、「直感的で設計が容易」と「調整が難しいが多くのケースに対応できる」とのトレードオフです。このモジュールは前者のポリシーを採用しているため、この出力を後工程でより厳密に確認する必要があります。`.iv` リファレンス実装では、モーション計画モジュールに、複雑なケースにおける回避処理を行うための最適化を使用する別の回避モジュールがあります。(モーションプランナーは、単純なケースで動作結果があまり変わらないように調整する必要があり、これは階層的挙動・モーションアーキテクチャにおける典型的な課題です。) -### Why is avoidance in behavior module? +### 回避が挙動モジュールにある理由 -This module executes avoidance over lanes, and the decision requires the lane structure information to take care of traffic rules (e.g. it needs to send an indicator signal when the vehicle crosses a lane). The difference between the motion and behavior modules in the planning stack is whether the planner takes traffic rules into account, which is why this avoidance module exists in the behavior module. +このモジュールは車線をまたぐ回避を実行し、決定には交通ルールに対応する車線構造情報が必要です(例: 車両が車線を横断するときにウィンカー信号を送信する必要があります)。計画スタックにおけるモーションモジュールと挙動モジュールの違いは、プランナーが交通ルールを考慮するかどうかであり、この回避モジュールが挙動モジュールに存在する理由です。
-If you would like to know the overview rather than the detail, please skip the next section and refer to [FAQ](#frequently-asked-questions). +詳細ではなく概要を知りたい場合は、次のセクションをスキップして[FAQ](#よくある質問)を参照してください。 -## Inner workings/Algorithms +## 内部動作/アルゴリズム + +このモジュールには、主にターゲットフィルタリングとパスジェネレーションの2つの部分があります。最初に、すべてのオブジェクトがいくつかの条件でフィルタリングされます。このステップで、モジュールは回避の実現可能性と必要性をチェックします。その後、このモジュールは、フィルタリングされたオブジェクトを基に、**シフトライン**と呼ばれる回避パスの輪郭を生成します。シフトラインは[パスシフター](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)に設定されます。パスシフターは、スムーズなシフトパスの生成に使用されるパスジェネレーション用のライブラリです。さらに、このモジュールには、エゴがターゲットオブジェクトを安全に回避できるように、ターゲット以外のオブジェクトをチェックする機能があります。この機能は、生成された回避パスと周囲のオブジェクトを受け取り、現在の状況を判断します。最後に、このモジュールは現在のエゴ挙動を更新します。 -This module mainly has two parts, target filtering and path generation. At first, all objects are filtered by several conditions. In this step, the module checks avoidance feasibility and necessity. After that, this module generates avoidance path outline, which we call **shift line**, based on filtered objects. The shift lines are set into [path shifter](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md), which is a library for path generation, to create a smooth shift path. Additionally, this module has a feature to check non-target objects so that the ego can avoid target objects safely. This feature receives a generated avoidance path and surrounding objects, and judges the current situation. Lastly, this module updates current ego behavior. ```plantuml @startuml @@ -206,34 +207,35 @@ stop @enduml ``` -## Target object filtering +## ターゲットオブジェクトフィルタリング + +### 概要 -### Overview +このモジュールは、回避するターゲットオブジェクトをフィルタリングするために、以下の条件を使用します。 -The module uses the following conditions to filter avoidance target objects. +| 条件の確認 | ターゲットクラス | 詳細 | 条件が満たされない場合 | +| --------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| 回避対象クラスオブジェクトですか? | 全て | 設定ファイルから回避対象クラスを選択できます。 | 回避しません。 | +| 停止中のオブジェクトですか? | 全て | `th_moving_speed`よりも速い速度を`th_moving_time`よりも長い時間維持するオブジェクトは移動中と判断されます。 | 回避しません。 | +| 検知エリア内ですか? | 全て | モジュールは設定ファイルの横方向マージンに基づいて対象オブジェクトを大まかにフィルターするために検知エリアを作成します。([こちら](#width-of-detection-area)を参照) | 回避しません。 | +| オブジェクトとパスの間に十分な横方向距離がないですか? | 全て | - | 回避しません。 | +| 自車線のセンターラインの近くですか? | 全て | - | その他の条件によって異なります。 | +| オブジェクトの近くに横断歩道がありますか? | 歩行者、自転車 | モジュールは横断歩道の近くに歩行者と自転車を回避しません。横断歩道で道路を渡っている場合、自車は停止する必要があるからです。([こちら](#for-crosswalk-users)を参照) | 回避しません。 | +| パス上のオブジェクトと信号との距離がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | この条件は、車両が駐車されているかどうかが不明な場合に使用されます。 | その他の条件によって異なります。 | +| パス上のオブジェクトと横断歩道信号との距離がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | +| 停止時間がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | +| 交差点内ですか? | 乗用車、トラック、バス、トレーラー | モジュールは交差点内に駐車車両がないことを前提としています。 | その他の条件によって異なります。 | +| 自車線上にありますか? | 乗用車、トラック、バス、トレーラー | - | その他の条件によって異なります。 | +| 駐車車両ですか? | 乗用車、トラック、バス、トレーラー | モジュールは横方向オフセットに基づいて車両が駐車車両かどうかを判断します。([こちら](#judge-if-its-a-parked-vehicle)を参照) | その他の条件によって異なります。 | +| 他車線から自車線に合流していますか? | 乗用車、トラック、バス、トレーラー | モジュールはヨー角とオフセットの方向に基づいて車両の挙動を判断します。([こちら](#judge-vehicle-behavior)を参照) | その他の条件によって異なります。 | +| 自車線から他車線に合流していますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | -| Check condition | Target class | Details | If conditions are not met | -| ---------------------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------- | -| Is an avoidance target class object? | All | Use can select avoidance target class from config file. | Never avoid it. | -| Is a stopped object? | All | Objects keep higher speed than `th_moving_speed` for longer period of time than `th_moving_time` is judged as moving. | Never avoid it. | -| Is within detection area? | All | The module creates detection area to filter target objects roughly based on lateral margin in config file. (see [here](#width-of-detection-area)) | Never avoid it. | -| Isn't there enough lateral distance between the object and path? | All | - | Never avoid it. | -| Is near the centerline of ego lane? | All | - | It depends on other conditions. | -| Is there a crosswalk near the object? | Pedestrian, Bicycle | The module doesn't avoid the Pedestrian and Bicycle nearer the crosswalk because the ego should stop in front of it if they're crossing the road. (see [here](#for-crosswalk-users)) | Never avoid it. | -| Is the distance between the object and traffic light along the path longer than the threshold? | Car, Truck, Bus, Trailer | The module uses this condition when there is ambiguity about whether the vehicle is parked. | It depends on other conditions. | -| Is the distance between the object and crosswalk light along the path longer than threshold? | Car, Truck, Bus, Trailer | Same as above. | It depends on other conditions. | -| Is the stopping time longer than threshold? | Car, Truck, Bus, Trailer | Same as above. | It depends on other conditions. | -| Is within intersection? | Car, Truck, Bus, Trailer | The module assumes that there isn't any parked vehicle within intersection. | It depends on other conditions. | -| Is on ego lane? | Car, Truck, Bus, Trailer | - | It depends on other conditions. | -| Is a parked vehicle? | Car, Truck, Bus, Trailer | The module judges whether the vehicle is a parked vehicle based on its lateral offset. (see [here](#judge-if-its-a-parked-vehicle)) | It depends on other conditions. | -| Is merging into ego lane from other lane? | Car, Truck, Bus, Trailer | The module judges the vehicle behavior based on its yaw angle and offset direction. (see [here](#judge-vehicle-behavior)) | It depends on other conditions. | -| Is merging into other lane from ego lane? | Car, Truck, Bus, Trailer | Same as above. | It depends on other conditions. | +### 一般的な条件 -### Common conditions +#### 検出エリア -#### Detection area +モジュールは、以下のパラメータに基づいて、ターゲットのフィルタリング用の検出エリアを生成します。 -The module generates detection area for target filtering based on the following parameters: ```yaml # avoidance is performed for the object type with true @@ -255,16 +257,17 @@ The module generates detection area for target filtering based on the following backward_distance: 10.0 # [m] ``` -##### Width of detection area +##### 検出領域の幅 + +1. 全てのクラス(車両、トラックなど)の最大の側方マージンを取得します。マージンは`soft_margin`と`hard_margin_for_parked_vehicle`の合計です。 +2. 検出領域の幅は自車幅と最大の側方マージンの合計です。 -1. Get the largest lateral margin of all classes (Car, Truck, ...). The margin is the sum of `soft_margin` and `hard_margin_for_parked_vehicle`. -2. The detection area width is the sum of ego vehicle width and the largest lateral margin. +##### 検出領域の縦方向距離 -##### Longitudinal distance of detection area +パラメータ`detection_area.static`が`true`に設定されている場合、モジュールは縦方向距離が`max_forward_distance`の検出領域を作成します。 -If the parameter `detection_area.static` is set to `true`, the module creates detection area whose longitudinal distance is `max_forward_distance`. +パラメータ`detection_area.static`が`false`に設定されている場合、モジュールは自車が最小の側方ジャーク値でオブジェクトを回避できるように検出領域を作成します。したがって、縦方向距離は最大側方シフト長、側方ジャーク制約、および現在の自車速度によって異なります。さらに、準備段階で使用される距離も考慮する必要があります。 -If the parameter `detection_area.static` is set to `false`, the module creates a detection area so that the ego can avoid objects with minimum lateral jerk value. Thus, the longitudinal distance depends on maximum lateral shift length, lateral jerk constraints and current ego speed. Additionally, it has to consider the distance used for the preparation phase. ```c++ ... @@ -279,23 +282,20 @@ If the parameter `detection_area.static` is set to `false`, the module creates a parameters_->object_check_max_forward_distance); ``` -![fig](./images/target_filter/detection_area.svg) - -![fig](./images/target_filter/detection_area_rviz.png) - -### Conditions for non-vehicle type objects +### 車両以外のオブジェクトの条件 -#### For crosswalk users +#### 歩行者用横断歩道利用者の場合 -If Pedestrian and Bicycle are closer to crosswalk than threshold 2.0m (hard coded for now), the module judges they're crossing the road and never avoids them. +歩行者と自転車が横断歩道に2.0m(現在はハードコーディング)未満近接した場合、このモジュールはこの歩行者らが交差点を横断していると判断し、回避しません。 ![fig](./images/target_filter/crosswalk.svg) -### Conditions for vehicle type objects +### 車両タイプのオブジェクトの条件 -#### Judge vehicle behavior +#### 車両の挙動の判定 + +このモジュールは、ヨー角とオフセット方向に基づいて車両を以下の3つの挙動に分類します。 -The module classifies vehicles into the following three behaviors based on yaw angle and offset direction. ```yaml # params for filtering objects that are in intersection @@ -303,11 +303,12 @@ intersection: yaw_deviation: 0.349 # [rad] (default 20.0deg) ``` -| Behavior | Details | Figure | -| --------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -| NONE | If the object's relative yaw angle to lane is less than threshold `yaw_deviation`, it is classified into `NONE`. | ![fig](./images/target_filter/none.png) | -| MERGING | See following flowchart. | ![fig](./images/target_filter/merging.png) | -| DEVIATING | See following flowchart. | ![fig](./images/target_filter/deviating.png) | +| 動作 | 詳細 | 図形 | +| ------ | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| NONE | オブジェクトの車線に対する相対的な偏角が閾値 `yaw_deviation` 未満の場合、`NONE` に分類されます。 | ![fig](./images/target_filter/none.png) | +| MERGING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/merging.png) | +| DEVIATING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/deviating.png) | + ```plantuml @startuml @@ -352,40 +353,41 @@ stop ``` -#### Judge if it's a parked vehicle +#### 駐車車両の判定 -Not only the length from the centerline, but also the length from the road shoulder is calculated and used for the filtering process. In this logic, it calculates ratio of **actual shift length** to **shiftable shift length** as follows. If the result is larger than threshold `th_shiftable_ratio`, the module judges the vehicle is a parked vehicle. +センターラインからの距離だけでなく、路肩からの距離も計算して、フィルタリング処理に使用します。このロジックでは、次のとおり**実際のシフト長**と**シフト可能なシフト長**の比率を計算します。結果がしきい値 `th_shiftable_ratio` よりも大きい場合、このモジュールは車両が駐車車両であると判断します。 $$ L_{d} = \frac{W_{lane} - W_{obj}}{2}, \\ ratio = \frac{L_{a}}{L_{d}} $$ -- $L_{d}$ : shiftable length. -- $L_{a}$ : actual shift length. -- $W_{lane}$ : lane width. -- $W_{obj}$ : object width. +- $L_{d}$ : シフト可能な長さ。 +- $L_{a}$ : 実際のシフト長。 +- $W_{lane}$ : レーン幅。 +- $W_{obj}$ : オブジェクトの幅。 ![fig2](./images/target_filter/parked_vehicle.svg) -### Target object filtering +### ターゲットオブジェクトのフィルタリング -| Situation | Details | Ego behavior | +| 状況 | 詳細 | 自車動作 | | ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| Vehicle is within intersection area defined in HDMap. The module ignores vehicles following a lane or merging into ego lane. | ![fig](./images/target_filter/never_avoid_intersection.png) | Never avoid it. | -| Vehicle is on ego lane. There are adjacent lanes for both sides. | ![fig](./images/target_filter/never_avoid_not_edge.png) | Never avoid it. | -| Vehicle is merging into other lane from ego lane. Most of its footprint is on ego lane. | ![fig](./images/target_filter/never_avoid_deviating.png) | Never avoid it. | -| Vehicle is merging into ego lane from other lane. Most of its footprint is on ego lane. | ![fig](./images/target_filter/never_avoid_merging.png) | Never avoid it. | -| Vehicle does not appear to be parked and is stopped in front of a crosswalk or traffic light. | ![fig](./images/target_filter/never_avoid_stop_factor.png) | Never avoid it. | -| Vehicle stops on ego lane while pulling over to the side of the road. | ![fig](./images/target_filter/avoid_on_ego_lane.png) | Avoid it immediately. | -| Vehicle stops on adjacent lane. | ![fig](./images/target_filter/avoid_not_on_ego_lane.png) | Avoid it immediately. | -| Vehicle stops on ego lane without pulling over to the side of the road. | ![fig](./images/target_filter/ambiguous_parallel.png) | Set the parameter `avoidance_for_ambiguous_vehicle.enable` to `true`, the module avoids ambiguous vehicle. | -| Vehicle is merging into ego lane from other lane. | ![fig](./images/target_filter/ambiguous_merging.png) | Set the parameter `avoidance_for_ambiguous_vehicle.enable` to `true`, the module avoids ambiguous vehicle. | -| Vehicle is merging into other lane from ego lane. | ![fig](./images/target_filter/ambiguous_deviating.png) | Set the parameter `avoidance_for_ambiguous_vehicle.enable` to `true`, the module avoids ambiguous vehicle. | +| 自車がHDMapで定義された交差点エリア内にある場合。このモジュールは、車線を走行中または自車線に合流中の車両を無視する | ![fig](./images/target_filter/never_avoid_intersection.png) | 回避しない。 | +| 自車が自車線上にいる場合、両側に隣接した車線がある | ![fig](./images/target_filter/never_avoid_not_edge.png) | 回避しない。 | +| 自車線から他の車線に合流中の車両。その車両のフットプリントの大部分が自車線にある | ![fig](./images/target_filter/never_avoid_deviating.png) | 回避しない。 | +| 他の車線から自車線に合流中の車両。その車両のフットプリントの大部分が自車線にある | ![fig](./images/target_filter/never_avoid_merging.png) | 回避しない。 | +| 駐車しているようには見えないが、横断歩道または信号の前に停止している車両 | ![fig](./images/target_filter/never_avoid_stop_factor.png) | 回避しない。 | +| 道路脇に停車しようとして自車線上で停止した車両 | ![fig](./images/target_filter/avoid_on_ego_lane.png) | すぐに回避する。 | +| 隣接した車線で停止した車両 | ![fig](./images/target_filter/avoid_not_on_ego_lane.png) | すぐに回避する。 | +| 道路脇に停車せずに自車線上で停止した車両 | ![fig](./images/target_filter/ambiguous_parallel.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | +| 他の車線から自車線に合流中の車両 | ![fig](./images/target_filter/ambiguous_merging.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | +| 自車線から他の車線に合流中の車両 | ![fig](./images/target_filter/ambiguous_deviating.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | -### Flowchart +### フローチャート + +`isSatisfiedWithCommonCondition()`, `isSatisfiedWithVehicleCondition()`, `isSatisfiedWithNonVehicleCondition()`の3つのメインフィルタリング関数があります。フィルタリングプロセスは次のフローチャートに従って実行されます。さらに、このモジュールはコンフィグファイル内のオブジェクトの姿勢、エゴパス、横マージンに基づいて`isNoNeedAvoidanceBehavior()`で回避の必要性を確認します。 -There are three main filtering functions `isSatisfiedWithCommonCondition()`, `isSatisfiedWithVehicleCondition()` and `isSatisfiedWithNonVehicleCondition()`. The filtering process is executed according to the following flowchart. Additionally, the module checks avoidance necessity in `isNoNeedAvoidanceBehavior()` based on the object pose, ego path and lateral margin in the config file. ```plantuml @startuml @@ -432,9 +434,10 @@ stop @enduml ``` -#### Common conditions +#### 共通条件 + +まず、`isSatisfiedWithCommonCondition()` 関数には、すべてのオブジェクトクラスに使用される条件が含まれます。 -At first, the function `isSatisfiedWithCommonCondition()` includes conditions used for all object classes. ```plantuml @startuml @@ -478,16 +481,17 @@ stop ``` -#### Conditions for vehicle +#### 車両の条件 -Target class: +対象クラス: -- Car -- Truck -- Bus -- Trailer +- 乗用車 +- トラック +- バス +- トレーラー + +次のステップとして、オブジェクトはそのクラスに特化した条件でフィルタリングされます。 -As a next step, the object is filtered by a condition specialized for its class. ```plantuml @startuml @@ -553,6 +557,7 @@ stop ``` + ```plantuml @startuml skinparam defaultTextAlignment center @@ -622,6 +627,7 @@ stop @enduml ``` + ```plantuml @startuml skinparam defaultTextAlignment center @@ -665,10 +671,11 @@ stop @enduml ``` -#### Conditions for non-vehicle objects +#### 非車両オブジェクトの条件 + +- 歩行者 +- 自転車 -- Pedestrian -- Bicycle ```plantuml @startuml @@ -712,33 +719,35 @@ stop @enduml ``` -## When target object has gone +## ターゲット オブジェクトが消えたとき + +ターゲット オブジェクトが消えた際のエゴの動作は、ユーザーが選択できます。 -User can select the ego behavior when the target object has gone. ```yaml cancel: enable: true # [-] ``` -If the above parameter is `true`, this module reverts avoidance path when the following conditions are met. +上記のパラメータが「真」の場合、以下の条件を満たしたときにこのモジュールは回避経路を戻します。 -- All target objects have gone. -- The ego vehicle hasn't initiated avoidance maneuver yet. +- すべてのターゲットオブジェクトが消えた +- 主体は回避操作を開始していない ![fig](./images/cancel/cancel.png) -If the parameter is `false`, this module keeps running even after the target object has gone. +パラメータが「偽」の場合、このモジュールはターゲットオブジェクトが消えた後も実行し続けます。 -## Path generation +## パス生成 -### How to prevent shift line chattering that is caused by perception noise +### 知覚ノイズによるシフトラインのチャタリングを防ぐ方法 -Since the object recognition result contains noise related to position, orientation and polygon shape, if the module uses the raw object recognition results in path generation, the output path will be directly affected by the noise. Therefore, in order to reduce the influence of the noise, this module generates a polygon for each target object, and the output path is generated based on that. +オブジェクト認識結果は位置、向き、多角形の形状に関連するノイズを含んでいるため、モジュールがパス生成で生のオブジェクト認識結果を使用すると、出力パスはノイズによって直接影響を受けます。そのため、このモジュールはノイズの影響を低減するために、各ターゲットオブジェクトの多角形を生成し、それをもとに出力パスを生成します。 ![fig](./images/path_generation/envelope_polygon_rviz.png) -The envelope polygon is a rectangle box, whose size depends on the object's polygon and buffer parameter `envelope_buffer_margin`. Additionally, it is always parallel to the reference path. When the module finds a target object for the first time, it initializes the polygon. +エンベロープ多角形は長方形のボックスで、サイズはオブジェクトの多角形とバッファパラメータ「envelope_buffer_margin」によって異なります。さらに、常に基準パスと平行です。モジュールがターゲットオブジェクトを初めて検出したとき、多角形を初期化します。 + ```yaml car: @@ -746,23 +755,24 @@ The envelope polygon is a rectangle box, whose size depends on the object's poly envelope_buffer_margin: 0.5 # [m] FOR DEVELOPER ``` -![fig](./images/path_generation/envelope_polygon.png) +### 封筒ポリゴンの生成 -The module creates a one-shot envelope polygon by using the latest object pose and raw polygon in every planning cycle. On the other hand, the module uses the envelope polygon information created in the last planning cycle in order to update the envelope polygon with consideration of the pose covariance. +このモジュールは、各計画サイクルで最新のオブジェクトの姿勢と生ポリゴンを使用してワンショット封筒ポリゴンを作成します。一方で、このモジュールは前回の計画サイクルで作成された封筒ポリゴン情報を使用して、姿勢共分散を考慮して封筒ポリゴンを更新します。 -If the pose covariance is smaller than the threshold, the envelope polygon would be updated according to the following logic. If the one-shot envelope polygon is not within the previous envelope polygon, the module creates a new envelope polygon. Otherwise, it keeps the previous envelope polygon. +姿勢共分散がしきい値より小さい場合、封筒ポリゴンは次のロジックに従って更新されます。ワンショット封筒ポリゴンが以前の封筒ポリゴン内にある場合、モジュールは新しい封筒ポリゴンを作成します。それ以外の場合、以前の封筒ポリゴンが維持されます。 ![fig](./images/path_generation/polygon_update.png) -When the pose covariance is larger than the threshold, it is compared with the maximum pose covariance of each object. If the value is smaller, the one-shot envelope polygon is used directly as the envelope polygon. Otherwise, it keeps the previous envelope polygon. +姿勢共分散がしきい値より大きい場合、各オブジェクトの最大姿勢共分散と比較されます。値が小さい場合、ワンショット封筒ポリゴンが封筒ポリゴンとして直接使用されます。それ以外の場合、以前の封筒ポリゴンが維持されます。 -By doing this process, the envelope polygon size and pose will converge even if perception output includes noise in object pose or shape. +この処理により、知覚出力がオブジェクトの姿勢または形状にノイズを含んでいても、封筒ポリゴンのサイズと姿勢は収束します。 -### Relationship between envelope polygon and avoidance path +### 封筒ポリゴンと回避パスの関係 -The avoidance path has two shift sections, whose start or end point position depends on the envelope polygon. The end point of the avoidance shift section and start point of the return shift section are fixed based on the envelope polygon and the other side edges are dynamically changed based on ego speed, shift length, lateral jerk constraints, etc. +回避パスには 2 つのシフトセクションがあり、その開始点または終了点の位置は封筒ポリゴンによって決まります。回避シフトセクションの終了点と帰還シフトセクションの開始点は、封筒ポリゴンと反対側のエッジに基づいて固定され、他の側面は自車速度、シフトの長さ、横方向ジャークの制約などに基づいて動的に変化します。 + +2 つの点の横方向の位置は、自車本体と封筒ポリゴン境界点の最もオーバーハングした点の間に十分なスペース (= 横方向余裕) ができるようになっています。ユーザーは、次のパラメーターを使用して横方向余裕を調整できます。 -The lateral positions of the two points are decided so that there can be enough space (=lateral margin) between ego body and the most overhang point of the envelope polygon edge points. User can adjust lateral margin with the following parameters. ```yaml car: @@ -773,7 +783,8 @@ The lateral positions of the two points are decided so that there can be enough hard_margin_for_parked_vehicle: 0.7 # [m] ``` -The longitudinal positions depends on the envelope polygon, ego vehicle specification and the following parameters. The longitudinal distance between avoidance shift section end point and envelope polygon (=front longitudinal buffer) is the sum of `front_overhang` defined in `vehicle_info.param.yaml` and `longitudinal_margin` if the parameter `consider_front_overhang` is `true`. If `consider_front_overhang` is `false`, only `longitudinal_margin` is considered. Similarly, the distance between the return shift section start point and envelope polygon (=rear longitudinal buffer) is the sum of `rear_overhang` and `longitudinal_margin`. +縦方向の位置は、エンベロープ多角形、自車仕様、次のパラメーターに依存します。回避シフトセクションの終点とエンベロープ多角形 (つまり前面縦方向バッファ) との縦方向距離は、`consider_front_overhang` パラメーターが `true` の場合、`vehicle_info.param.yaml` で定義された `front_overhang` と `longitudinal_margin` の合計です。`consider_front_overhang` が `false` の場合、`longitudinal_margin` のみが考慮されます。同様に、復帰シフトセクションの始点とエンベロープ多角形 (つまり後方縦方向バッファ) との距離は、`rear_overhang` と `longitudinal_margin` の合計です。 + ```yaml @@ -791,11 +802,10 @@ The longitudinal positions depends on the envelope polygon, ego vehicle specific consider_rear_overhang: true # [-] ``` -![fig](./images/path_generation/margin.png) +### 横断マージン -### Lateral margin +上記のとおり、横断マージンは次の2種類のタイプのパラメータを変更することで調整できます。`soft_margin`は横断マージンのソフト制約パラメータです。`hard_margin`と`hard_margin_for_parked_vehicle`はハード制約パラメータです。 -As mentioned above, user can adjust lateral margin by changing the following two types of parameters. The `soft_margin` is a soft constraint parameter for lateral margin. The `hard_margin` and `hard_margin_for_parked_vehicle` are hard constraint parameters. ```yaml car: @@ -806,53 +816,56 @@ As mentioned above, user can adjust lateral margin by changing the following two hard_margin_for_parked_vehicle: 0.7 # [m] ``` -Basically, this module tries to generate an avoidance path in order to keep lateral distance, which is the sum of `soft_margin` and `hard_margin`/`hard_margin_for_parked_vehicle`, from the avoidance target object. +## 回避経路生成モジュール + +このモジュールは基本的に、回避対象オブジェクトからの横方向距離(`soft_margin` と `hard_margin`/`hard_margin_for_parked_vehicle` の合計)を保つための回避経路を生成しようとします。 ![fig](./images/path_generation/soft_hard.png) -But if there isn't enough space to keep `soft_margin` distance, this module shortens soft constraint lateral margin. The parameter `soft_margin` is a maximum value of soft constraint, and actual soft margin can be a value between 0.0 and `soft_margin`. On the other hand, this module definitely keeps `hard_margin` or `hard_margin_for_parked_vehicle` depending on the situation. Thus, the minimum value of total lateral margin is `hard_margin`/`hard_margin_for_parked_vehicle`, and the maximum value is the sum of `hard_margin`/`hard_margin_for_parked_vehicle` and `soft_margin`. +ただし、`soft_margin` 距離を維持する十分なスペースがない場合、このモジュールは制約なし横方向マージンを短くします。パラメーター `soft_margin` は制約なしの最大値で、実際の制約なしマージンは 0.0 から `soft_margin` の間の値になります。一方、このモジュールは状況に応じて `hard_margin` または `hard_margin_for_parked_vehicle` を必ず維持します。したがって、横方向全マージンの最小値は `hard_margin`/`hard_margin_for_parked_vehicle`、最大値は `hard_margin`/`hard_margin_for_parked_vehicle` と `soft_margin` の合計になります。 -The following figure shows the situation where this module shortens lateral soft constraint in order not to drive in the opposite lane when user sets parameter `use_lane_type` to `same_direction_lane`. +次の図は、ユーザーがパラメーター `use_lane_type` を `same_direction_lane` に設定した場合、このモジュールが反対車線で走行しないために横方向制約なしマージンを短くする状況を示しています。 ![fig](./images/path_generation/adjust_margin.png) -This module avoids not only parked vehicles but also non-parked vehicles that stop temporarily for some reason (e.g. waiting for traffic light to change from red to green). Additionally, this module has two types of hard margin parameters, `hard_margin` and `hard_margin_for_parked_vehicle` and judges if it is a parked vehicle or not for each vehicle because it takes the risk of vehicle doors opening suddenly and people getting out from parked vehicles into consideration. +このモジュールは一時的に何らかの理由で停止している駐車されていない車両(例:信号が赤から青に変わるのを待っている)だけではなく、駐車車両も回避します。さらに、このモジュールには 2 つタイプのハードマージンパラメーター `hard_margin` と `hard_margin_for_parked_vehicle` があり、車両のドアが突然開いたり、駐車車両から人が降りたりするリスクを考慮して各車両が駐車車両であるかどうかを判断します。 -Users should set `hard_margin_for_parked_vehicle` larger than `hard_margin` to prevent collisions with doors or people who suddenly exit a vehicle. +ユーザーは、ドアや車両から突然降りてくる人との衝突を防ぐために、`hard_margin_for_parked_vehicle` を `hard_margin` より大きく設定する必要があります。 -This module has only one parameter `soft_margin` for soft lateral margin constraint. +このモジュールには、制約なし横方向マージンに関するパラメーター `soft_margin` が 1 つだけあります。 ![fig](./images/path_generation/hard_margin.png) -As the hard margin parameters define the distance the user definitely wants to maintain, they are used in the logic to check whether the ego can pass the side of the target object without executing an avoidance maneuver as well. +ハードマージンパラメーターはユーザーが確実に維持したい距離を定義するため、回避操作を実行せずにエゴが対象オブジェクトの側面を通過できるかどうかをチェックするロジックでも使用されます。 -If the lateral distance is less than `hard_margin`/`hard_margin_for_parked_vehicle` when assuming that the ego follows the current lane without an avoidance maneuver, this module thinks the ego can not pass the side of the object safely and the ego must avoid it. In this case, this module inserts a stop point until the avoidance maneuver is allowed to execute so that the ego can avoid the object after approval. (For example, the ego keeps stopping in front of such an object until the operator approves the avoidance maneuver if the module is in MANUAL mode.) +回避操作なしでエゴが現在のレーンに従うと仮定した場合、横方向距離が `hard_margin`/`hard_margin_for_parked_vehicle` より小さい場合、このモジュールはエゴがオブジェクトの側面を安全に通過できないと判断し、回避する必要があります。この場合、このモジュールは回避操作の実行が許可されるまで停止点を入力し、エゴが承認後にオブジェクトを回避できるようにします。(たとえば、モジュールが MANUAL モードの場合、エゴはオペレータが回避操作を承認するまでそのようなオブジェクトの前で停止し続けます。) ![fig](./images/path_generation/must_avoid.png) -On the other hand, if the lateral distance is larger than `hard_margin`/`hard_margin_for_parked_vehicle`, this module doesn't insert a stop point even when it is waiting for approval because it thinks it is possible to pass the side of the object safely. +一方、横方向距離が `hard_margin`/`hard_margin_for_parked_vehicle` より大きい場合、このモジュールは承認を待っている場合でも停止点を挿入しません。それは、オブジェクトの側面を安全に通過できる可能性があると考えるためです。 ![fig](./images/path_generation/pass_through.png) -### When there is not enough space +### スペースが不足している場合 -This module inserts a stop point only when the ego can potentially avoid the object. So, if it is not able to keep a distance more than `hard_margin`/`hard_margin_for_parked_vehicle`, this module does nothing. The following figure shows the situation where this module is not able to keep enough lateral distance when the user sets parameter `use_lane_type` to `same_direction_lane`. +このモジュールは、エゴがオブジェクトを回避できる可能性がある場合にのみ停止点を挿入します。したがって、横方向距離を `hard_margin`/`hard_margin_for_parked_vehicle` より大きく維持できない場合、このモジュールは何も行いません。次の図は、ユーザーがパラメーター `use_lane_type` を `same_direction_lane` に設定した場合、このモジュールが十分な横方向距離を維持できない状況を示しています。 ![fig](./images/path_generation/do_nothing.png) !!! info - In this situation, the obstacle stop feature in [obstacle_cruise_planner](../../autoware_obstacle_cruise_planner/README.md) is responsible for ego vehicle safety. + この状況では、[obstacle_cruise_planner](../../autoware_obstacle_cruise_planner/README.md) の障害物停止機能がエゴ車両の安全を担保します。 ![fig](./images/path_generation/insufficient_drivable_space.png) -### Shift length calculation +### シフト長の計算 -The lateral shift length is the sum of `overhang_distance`, lateral margin, whose value is set in the config file, and half of ego vehicle width defined in `vehicle_info.param.yaml`. On the other hand, the module limits the shift length depending on the space the module can use for an avoidance maneuver and the parameters `soft_drivable_bound_margin` `hard_drivable_bound_margin`. Basically, the shift length is limited so that the ego doesn't get closer than `soft_drivable_bound_margin` to the drivable boundary. But the module allows the threshold to be relaxed from `soft_drivable_bound_margin` to `hard_drivable_bound_margin` when the road is narrow. +横方向シフト長は、`overhang_distance`、横方向マージン(config ファイルで設定した値)、`vehicle_info.param.yaml` で定義されたエゴ車両幅の半分から構成されます。一方、このモジュールは、回避操作に使用できるスペースとパラメーター `soft_drivable_bound_margin` と `hard_drivable_bound_margin` に応じてシフト長を制限します。基本的に、シフト長はエゴが `soft_drivable_bound_margin` より近い位置に走行可能な境界線に近づかないように制限されます。ただし、モジュールは道路幅が狭い場合、しきい値を `soft_drivable_bound_margin` から `hard_drivable_bound_margin` に緩和することを許可します。 ![fig](./images/path_generation/lateral.png) -Usable lanes for the avoidance module can be selected using the config file. +回避モジュールの使用可能なレーンは、config ファイルを使用して選択できます。 + ```yaml ... @@ -864,19 +877,21 @@ Usable lanes for the avoidance module can be selected using the config file. use_lane_type: "opposite_direction_lane" ``` -When user set parameter `use_lane_type` to `opposite_direction_lane`, it is possible to use opposite lane. +### 使用レーンのタイプの設定 +ユーザーがパラメータ `use_lane_type` を `opposite_direction_lane` に設定した場合、逆走車線を走行できます。 ![fig](./images/path_generation/opposite_direction.png) -When user set parameter `use_lane_type` to `same_direction_lane`, the module doesn't create path that overlaps opposite lane. +ユーザーがパラメータ `use_lane_type` を `same_direction_lane` に設定した場合、モジュールは逆走車線を重複するパスは生成しません。 ![fig](./images/path_generation/same_direction.png) -### Shift line generation +### シフトライン生成 + +前述のとおり、エンベロープポリゴンから回避シフトパスのエンドポイントと、リターンシフトパスのスタートポイントがFIXEDポイントとして計算されます。このモジュールでは、次に、シフト距離、現在の自車速度、コンフィグファイルで定義された横方向ジャーク制限パラメータに応じて、他のサイドポイントを調整します。 -As mentioned above, the end point of the avoidance shift path and the start point of the return shift path, which are FIXED points, are calculated from envelope polygon. As a next step, the module adjusts the other side points depending on shift length, current ego speed and lateral jerk constrain params defined in the config file. +2つのポイントは常に自車線の中心線上に存在するため、モジュールは次の関数に基づいてシフトのスタートポイントとエンドポイント間の縦方向距離のみを計算します。この関数はパスシフタライブラリで定義されています。[こちら](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)のページも参照してください。 -Since the two points are always on the centerline of the ego lane, the module only calculates longitudinal distance between the shift start and end point based on the following function. This function is defined in the path shifter library. See [this](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md) page as well. ```c++ double PathShifter::calcLongitudinalDistFromJerk( @@ -892,9 +907,10 @@ double PathShifter::calcLongitudinalDistFromJerk( } ``` -We call the line that connects shift start and end point `shift_line`, which the avoidance path is generated from with spline completion. +回避開始地点と終了地点を結ぶ線を `shift_line` と呼び、回避経路はスプライン補完によって生成されます。 + +回避開始地点には、もう 1 つの縦方向拘束があります。回避操作を開始する前にウインカーを数秒間点灯し続けるために、回避開始地点は自分の位置から自己速度に応じた値(距離を `prepare_length` と呼びます)よりも遠くなければなりません。 -The start point of avoidance has another longitudinal constraint. In order to keep turning on the blinker for a few seconds before starting the avoidance maneuver, the avoidance start point must be further than the value (we call the distance `prepare_length`.) depending on ego speed from ego position. ```yaml longitudinal: @@ -903,41 +919,42 @@ longitudinal: min_prepare_distance: 1.0 # [m] ``` -The `prepare_length` is calculated as the product of ego speed and `max_prepare_time`. (When the ego speed is zero, `min_prepare_distance` is used.) +`prepare_length`は自己速度と`max_prepare_time`の積として計算されます。(自己速度がゼロの場合、`min_prepare_distance`が使用されます。) ![fig](./images/path_generation/shift_line.png) -## Planning at RED traffic light +## 赤信号でのPlanning -This module takes traffic light information into account so that the ego can behave properly. Sometimes, the ego straddles the lane boundary but we want to prevent the ego from stopping in front of a red traffic signal in such a situation. This is because the ego will block adjacent lanes and it is inconvenient for other vehicles. +このモジュールは信号情報を考慮に入れて、自己車が適切に動作できるようにします。自己車が車線境界線を超えている場合でも、そのような状況で赤信号の前に停止しないようにする必要があります。これは、自己車が隣接車線を塞いでしまい、他の車両に迷惑がかかるためです。 ![fig](./images/traffic_light/traffic_light.png) -So, this module controls shift length and shift start/end point in order to prevent the above situation. +そのため、このモジュールはシフト長とシフトの開始/終了点を制御して、上記のような状況を防ぎます。 -### Control shift length +### シフト長の制御 -At first, if the ego hasn't initiated an avoidance maneuver yet, this module limits maximum shift length and uses **ONLY** current lane during a red traffic signal. This prevents the ego from blocking other vehicles even if this module executes the avoidance maneuver and the ego is caught by a red traffic signal. +まず、自己車が回避操作を開始していない場合、このモジュールは最大シフト長を制限し、赤信号の間は**現在の車線のみ**を使用します。これにより、このモジュールが回避操作を実行し、自己車が赤信号に捕らえられたとしても、自己車が他の車両を塞ぐのを防ぎます。 ![fig](./images/traffic_light/limit_shift_length.png) -### Control avoidance shift start point +### 回避シフト開始点の制御 -Additionally, if the target object is farther than the stop line of the traffic light, this module sets the avoidance shift start point on the stop line in order to prevent the ego from stopping at a red traffic signal in the middle of an avoidance maneuver. +さらに、目標物体が信号の停止線より遠方の場合は、このモジュールは回避シフト開始点を停止線に設定して、回避操作中に自己車が赤信号で停止するのを防ぎます。 ![fig](./images/traffic_light/shift_from_current_pos.png) ![fig](./images/traffic_light/shift_from_stop_line.png) -### Control return shift end point +### 復帰シフト終了点の制御 -If the ego has already initiated an avoidance maneuver, this module tries to set the return shift end point on the stop line. +自己車がすでに回避操作を開始している場合、このモジュールは復帰シフト終了点を停止線に設定しようとします。 ![fig](./images/traffic_light/return_after_stop_line.png) ![fig](./images/traffic_light/return_before_stop_line.png) -## Safety check +## セーフティチェック + +この機能は次のパラメータを`true`に設定することで有効にできます。 -This feature can be enabled by setting the following parameter to `true`. ```yaml safety_check: @@ -945,30 +962,32 @@ This feature can be enabled by setting the following parameter to `true`. enable: true # [-] ``` -This module pays attention not only to avoidance target objects but also non-target objects that are near the avoidance path, and if the avoidance path is unsafe due to surrounding objects, it reverts the avoidance maneuver and yields the lane to them. +このモジュールは回避対象物だけでなく、回避経路の近くに存在する非対象物にも注意を払い、周囲の物体が原因で回避経路が安全でない場合は、回避操舵を解除し、車線を譲ります。 ![fig](./images/safety_check/safety_check_flow.png) -### Yield maneuver +### 譲渡操舵 -Additionally, this module basically inserts a stop point in front of an avoidance target during yielding maneuvers in order to keep enough distance to avoid the target when it is safe to do so. If the shift side lane is congested, the ego stops at a point and waits. +さらに、このモジュールは譲渡操舵の際、通常、回避対象物の前に停止点を挿入し、安全に回避できるようになるまで十分な距離を保ちます。移動先の車線が渋滞している場合、自車は停止して待ちます。 + +この機能は、次のパラメーターを `true` に設定することで有効にできます。 -This feature can be enabled by setting the following parameter to `true`. ```yaml yield: enable: true # [-] ``` -![fig](./images/safety_check/stop.png) +![図](./images/safety_check/stop.png) + +ただし、横方向の余白が「`hard_margin`」を超えている場合(または「`hard_margin_for_parked_vehicle`」を超えている場合)は、このモジュールは停止点は挿入しません。エゴは回避操作なしで対象物の側面を安全に通過できるためです。 -But if the lateral margin is larger than `hard_margin` (or `hard_margin_for_parked_vehicle`), this module doesn't insert a stop point because the ego can pass the side of the object safely without an avoidance maneuver. +![図](./images/safety_check/not_stop.png) -![fig](./images/safety_check/not_stop.png) +### 安全チェック対象車線 -### Safety check target lane +ユーザーは、以下のパラメーターを使用して安全チェックエリアを選択できます。基本的に、シフト側の車線のみを確認するための以下の設定を推奨します。安全を厳格に確認したい場合は、`check_current_lane` および/または `check_other_side_lane` を `true` に設定してください。 -User can select the safety check area with the following parameters. Basically, we recommend the following configuration to check only the shift side lane. If users want to confirm safety strictly, please set `check_current_lane` and/or `check_other_side_lane` to `true`. ```yaml safety_check: @@ -978,7 +997,8 @@ User can select the safety check area with the following parameters. Basically, check_other_side_lane: false # [-] ``` -In the avoidance module, the function `path_safety_checker::isCentroidWithinLanelet` is used for filtering objects by lane. +回避モジュールでは、`path_safety_checker::isCentroidWithinLanelet` 関数はレーンのオブジェクトをフィルタリングするために使用されます。 + ```c++ bool isCentroidWithinLanelet(const PredictedObject & object, const lanelet::ConstLanelet & lanelet) @@ -991,41 +1011,42 @@ bool isCentroidWithinLanelet(const PredictedObject & object, const lanelet::Cons !!! info - If `check_current_lane` and/or `check_other_side_lane` are set to `true`, the possibility of false positives and unnecessary yield maneuvers increase. + `check_current_lane` や `check_other_side_lane` を `true` に設定すると、誤検知や不必要に譲歩する可能性が高くなります。 -### Safety check algorithm +### 安全確認アルゴリズム -This module uses common safety check logic implemented in `path_safety_checker` library. See [this](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) page. +このモジュールは、`path_safety_checker` ライブラリに実装されている一般的な安全確認ロジックを使用しています。[こちら](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) のページを参照してください。 -### Limitation +### 制限事項 -#### Limitation-1 +#### 制限事項-1 -The current behavior when the module judges it is unsafe is so conservative because it is difficult to achieve aggressive maneuvers (e.g. increase speed in order to increase the distance from rear vehicle) for current planning architecture. +モジュールがこの条件を不安全と判断したときの現在の動作はとても慎重で、これは現在の Planning アーキテクチャでは、積極的な操作(例:後続車両との距離をもっと広げるために速度を上げる)を達成することが難しいからです。 -#### Limitation-2 +#### 制限事項-2 -The yield maneuver is executed **ONLY** when the vehicle has **NOT** initiated avoidance maneuver yet. (This module checks objects in the opposite lane but it is necessary to find very far objects to judge whether it is unsafe before avoidance maneuver.) If it detects a vehicle which is approaching the ego during an avoidance maneuver, this module doesn't revert the path or insert a stop point. For now, there is no feature to deal with this situation in this module. Thus, a new module is needed to adjust the path to avoid moving objects, or an operator must override. +譲歩操作は、車両がまだ回避操作を開始していない場合にのみ実行されます。(このモジュールは反対車線のオブジェクトを確認しますが、回避操作前に不安全であると判断するには、非常に遠くのオブジェクトを見つける必要があります。) Avoidance 操作中に ego に接近する車両を検出した場合、このモジュールはパスを元に戻したり停止点を挿入したりしません。今のところ、この状況に対処する機能はこのモジュールにはありません。そのため、移動物体との衝突を回避するためにパスを調整する新しいモジュールが必要か、オペレーターがオーバーライドする必要があります。 !!! info - This module has a threshold parameter `th_avoid_execution` for the shift length, and judges that the vehicle is initiating avoidance if the vehicle current shift exceeds the value. + このモジュールにはシフトの長さのためのしきい値パラメータ `th_avoid_execution` があり、車両の現在のシフトがこの値を超えると車両が回避を開始していると判断します。 + +## その他の特徴 -## Other features +### 検出ロストに対する補償 -### Compensation for detection lost +認識結果のチャタリングを防ぐため、障害物がターゲットになると、消えてもしばらく保持されます。これは、認識が不安定な場合に効果的です。ただし、過検出(偽陽性の増加)につながるため、認識精度に合わせてパラメータを調整する必要があります(`object_last_seen_threshold = 0.0` の場合、認識結果は 100% 信頼されます)。 -In order to prevent chattering of recognition results, once an obstacle is targeted, it is held for a while even if it disappears. This is effective when recognition is unstable. However, since it will result in over-detection (increases number of false-positives), it is necessary to adjust parameters according to the recognition accuracy (if `object_last_seen_threshold = 0.0`, the recognition result is 100% trusted). +### 走行可能領域の拡張 -### Drivable area expansion +このモジュールは、HDMap で定義された次のポリゴンの後続に対する走行可能領域の拡張をサポートしています。 -This module supports drivable area expansion for following polygons defined in HDMap. +- 交差点エリア +- ハッチングされた道路標示 +- 自由空間エリア -- Intersection area -- Hatched road marking -- Freespace area +これらのエリアを回避操作で使用できるようにする場合は、これらのフラグを `true` に設定してください。 -Please set the flags to `true` when user wants to make it possible to use those areas in avoidance maneuvers. ```yaml # drivable lane setting. This module is able to use not only current lane but also right/left lane @@ -1040,50 +1061,52 @@ use_hatched_road_markings: true use_freespace_areas: true ``` -| | | | -| -------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| use_lane_type: same_direction_lane | ![fig](./images/advanced/avoidance_same_direction.png) | | -| use_lane_type: opposite_direction_lane | ![fig](./images/advanced/avoidance_opposite_direction.png) | | -| intersection area | ![fig](./images/advanced/avoidance_intersection.png) | The intersection area is defined on Lanelet map. See [here](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) | -| hatched road markings | ![fig](./images/advanced/avoidance_zebra.png) | The hatched road marking is defined on Lanelet map. See [here](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md#hatched-road-markings-area) | -| freespace area | ![fig](./images/advanced/avoidance_freespace.png) | The freespace area is defined on Lanelet map. (unstable) | +| | | | +| -------------------------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `use_lane_type: same_direction_lane` | ![図](./images/advanced/avoidance_same_direction.png) | | +| `use_lane_type: opposite_direction_lane` | ![図](./images/advanced/avoidance_opposite_direction.png) | | +| 交差点エリア | ![図](./images/advanced/avoidance_intersection.png) | 交差点エリアはLanelet mapで定義されます。 [こちら](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) を参照してください | +| ハッチング道路標示 | ![図](./images/advanced/avoidance_zebra.png) | ハッチング道路標示はLanelet mapで定義されています -## Future extensions/Unimplemented parts +## 未実装/将来の拡張 -- **Consideration of the speed of the avoidance target** +- **回避対象の速度の考慮** - - In the current implementation, only stopped vehicle is targeted as an avoidance target. It is needed to support the overtaking function for low-speed vehicles, such as a bicycle. (It is actually possible to overtake the low-speed objects by changing the parameter, but the logic is not supported and thus the safety cannot be guaranteed.) - - Overtaking (e.g., to overtake a vehicle running in front at 20 km/h at 40 km/h) may need to be handled outside the avoidance module. It should be discussed which module should handle it. + - 現在の実装では、停止車両のみが回避対象としてターゲット化されています。自転車などの低速車両の追い越し機能をサポートする必要があります。(実際には、パラメータを変更することで低速オブジェクトを追い越すことは可能ですが、ロジックがサポートされていないため、安全性は保証できません。) + - 追い越し(例:時速20kmの先行車両を時速40kmで追い越す)は、回避モジュール外で処理する必要がある場合があります。どのモジュールで処理するかを検討する必要があります。 -- **Cancel avoidance when target disappears** +- **ターゲットが消失した際の回避キャンセル** - - In the current implementation, even if the avoidance target disappears, the avoidance path will remain. If there is no longer a need to avoid, it must be canceled. + - 現在の仕様では、回避ターゲットが消えた場合でも、回避経路は残ったままです。回避の必要がなくなった場合はキャンセルする必要があります。 -- **Improved performance of avoidance target selection** +- **回避ターゲット選択のパフォーマンス向上** - - Essentially, avoidance targets are judged based on whether they are static objects or not. For example, a vehicle waiting at a traffic light should not be avoided because we know that it will start moving in the future. However this decision cannot be made in the current Autoware due to the lack of perception functions. Therefore, the current avoidance module limits the avoidance target to vehicles parked on the shoulder of the road, and executes avoidance only for vehicles that are stopped away from the center of the lane. However, this logic cannot avoid a vehicle that has broken down and is stopped in the center of the lane, which should be recognized as a static object by the perception module. There is room for improvement in the performance of this decision. + - 本質的に、回避ターゲットは静止物かどうかを基準に判断されます。例えば、信号で待機している車両は、将来的に動き出すことが分かっているので、回避されるべきではありません。しかし、現在のAutowareでは、知覚機能が不足しているため、この判断は行えません。そのため、現在の回避モジュールは回避目標を路肩に駐車している車両に限定し、車線の中心から離れた場所で停止している車両に対してのみ回避を実行します。しかし、このロジックでは、故障して車線の中央で停止している車両を避けることはできず、これは知覚モジュールによって静止物として認識されるべきものです。この判断のパフォーマンスには改善の余地があります。 -- **Resampling path** - - Now the rough resolution resampling is processed to the output path in order to reduce the computational cost for the later modules. This resolution is set to a uniformly large value (e.g. `5m`), but a small resolution should be applied for complex paths. +- **経路の再サンプリング** -## Debug + - 現在、荒い解像度の再サンプリングは、後続のモジュールの計算コストを削減するために、出力パスに処理されています。この解像度は一様に大きな値(例:'5m')に設定されていますが、複雑な経路には小さな解像度を適用する必要があります。 -### Show `RCLCPP_DEBUG` on console +## デバッグ -All debug messages are logged in the following namespaces. +### コンソールに`RCLCPP_DEBUG`を表示 -- `planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance` or, +すべてのデバッグメッセージは、次の名前空間に記録されます。 + +- `planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance` または, - `planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance.utils` -User can see debug information with the following command. +ユーザーは、次のコマンドでデバッグ情報を参照できます。 + ```bash ros2 service call /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/config_logger logging_demo/srv/ConfigLogger "{logger_name: 'planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance', level: DEBUG}" ``` -### Visualize debug markers +### デバッグマーカーの可視化 + +ユーザーは、次のパラメーターを使用して、デバッグマーカーの公開を有効にできます。 -User can enable publishing of debug markers with the following parameters. ```yaml debug: @@ -1099,132 +1122,130 @@ debug: ![fig](./images/debug/debug_marker_rviz.png) -### Echoing debug message to find out why the objects were ignored +### デバッグメッセージのエコーにより、オブジェクトが無視された理由を特定する -If for some reason, no shift point is generated for your object, you can check for the failure reason via `ros2 topic echo`. +何らかの理由で、オブジェクトに対してシフトポイントが生成されない場合、`ros2 topic echo` を利用して障害が発生した理由を確認できます。 ![avoidance_debug_message_array](./images/avoidance_debug_message_array.png) -To print the debug message, just run the following +デバッグメッセージを出力するには、次のコマンドを実行するだけです。 + ```bash ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance_debug_message_array ``` -## Frequently asked questions +## よくある質問 -### Target objects +### ターゲットオブジェクト -#### Does it avoid static objects and dynamic objects? +#### 静止オブジェクトと動的オブジェクトの両方を回避できますか? -This module avoids static (stopped) objects and does not support dynamic (moving) objects avoidance. Dynamic objects are handled within the [dynamic obstacle avoidance module](../autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md). +このモジュールは静止オブジェクト(停止しているオブジェクト)を回避しますが、動的オブジェクト(動いているオブジェクト)の回避はサポートしていません。動的オブジェクトは、[動的障害物回避モジュール](../autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md)内で処理されます。 -#### What type (class) of object would it avoid? +#### 回避するオブジェクトのタイプ(クラス)を教えてください。 -It avoids cars, trucks, buses, trailers, bicycles, motorcycles, pedestrians, and unknown objects by default. Details are in the [Target object filtering section](#target-object-filtering). -The above objects are divided into vehicle type objects and non-vehicle type objects; the target object filtering would differ for vehicle types and non-vehicle types. +デフォルトでは、車、トラック、バス、トレーラー、自転車、オートバイ、歩行者、未知のオブジェクトを回避します。詳細は、[ターゲットオブジェクトのフィルタリングセクション](#target-object-filtering)を参照してください。 +これらのオブジェクトは、車両タイプオブジェクトと車両タイプ以外のオブジェクトに分類され、ターゲットオブジェクトのフィルタリングは車両タイプと車両タイプ以外で異なります。 -- Vehicle type objects: Car, Truck, Bus, Trailer, Motorcycle -- Non-vehicle type objects: Pedestrian, Bicycle +- 車両タイプオブジェクト: 車、トラック、バス、トレーラー、オートバイ +- 車両タイプ以外のオブジェクト: 歩行者、自転車 -#### How does it judge if it is a target object or not? +#### ターゲットオブジェクトかどうかをどのように判断しますか? -The conditions for vehicle type objects and non-vehicle type objects are different. However, the main idea is that static objects on road shoulders within the planned path would be avoided. -Below are some examples when an avoidance path is generated for vehicle type objects. +車両タイプオブジェクトと車両タイプ以外のオブジェクトの条件は異なります。ただし、基本的な考え方は、計画された経路内の路肩にある静止オブジェクトを回避することです。 +以下は、車両タイプオブジェクトに対して回避経路が生成される場合の例です。 -- Vehicle stopping on ego lane while pulling over to the side of the road -- Vehicle stopping on adjacent lane +- 道路脇に車を停車して立ち寄る +- 隣接する車線を走行する +- 隣接車線を停車する -For more details refer to [vehicle type object](#conditions-for-vehicle-type-objects) and [non-vehicle object](#conditions-for-non-vehicle-type-objects). +詳細は、[車両タイプオブジェクト](#conditions-for-vehicle-type-objects)と[車両タイプ以外のオブジェクト](#conditions-for-non-vehicle-type-objects)を参照してください。 -#### What is an ambiguous target? +#### 曖昧なターゲットとは何ですか? -An ambiguous target refers to objects that may not be clearly identifiable as avoidance target due to limitations of current Autoware (ex. parked vehicle in the center of a lane). -This module will avoid clearly defined static objects automatically, whereas ambiguous targets would need some operator intervention. +曖昧なターゲットとは、Autowareの現在の制限(例:車線の真ん中に駐車された車両)により、回避ターゲットとして明確に特定できないオブジェクトを指します。 +このモジュールは、明確に定義された静止オブジェクトを自動的に回避しますが、曖昧なターゲットには一部オペレーターの介入が必要になります。 -#### How can I visualize the target object? +#### ターゲットオブジェクトをどのように視覚化できますか? -Target objects can be visualized using RViz, where the module's outputs, such as detected obstacles and planned avoidance paths, are displayed. For further information refer to the [debug marker section](#visualize-debug-markers). +ターゲットオブジェクトはRVizを使用して視覚化できます。RVizでは、検出された障害物や計画された回避経路などのモジュールの出力が表示されます。詳細については、[デバッグマーカーセクション](#visualize-debug-markers)を参照してください。 -#### How can I check the lateral distance to an obstacle? +#### 障害物との横方向距離を確認するにはどうすればよいですか? -Currently, there isn't any topic that outputs the relative position with the ego vehicle and target object. -Visual confirmation on RViz would be the only solution for now. +現時点では、自車とターゲットオブジェクトの相対位置を出力するトピックはありません。 +現時点では、RVizでの視覚的な確認が唯一の解決策です。 -#### Does it avoid multiple objects at once? +#### 複数のオブジェクトを同時に回避しますか? -Yes, the module is capable of avoiding multiple static objects simultaneously. -It generates multiple shift lines and calculates an avoidance path that navigates around each object. -Details are explained in the [How to decide path shape section](#multiple-obstacle-case-one-direction). +はい、このモジュールは複数の静止オブジェクトを同時に回避できます。 +複数のシフトラインを生成し、各オブジェクトを回避する回避経路を計算します。 +詳細は、[経路形状の決定方法セクション](#multiple-obstacle-case-one-direction)で説明しています。 -### Area used when avoiding +### 回避時の使用エリア -#### Which lanes are used to avoid objects? +#### どの車線がオブジェクトの回避に使用されますか? -This module is able to use not only the current lane but also adjacent lanes and opposite lanes. Usable lanes can be selected by the configuration file as noted in the [shift length calculation section](#shift-length-calculation). -It is assumed that there are no parked vehicles on the central lane in a situation where there are lanes on the left and right. +このモジュールは、現在の車線だけでなく、隣接車線と対向車線も使用できます。使用可能な車線は、[シフト長計算セクション](#shift-length-calculation)で説明されているように、設定ファイルで選択できます。左右に車線がある状況では、中央車線に駐車車両がないと想定されています。 -#### Would it avoid objects inside intersections? +#### 交差点内のオブジェクトを回避しますか? -Basically, the module assumes that there are no parked vehicles within intersections. Vehicles that follow the lane or merge into ego lane are non-target objects. -Vehicles waiting to make a right/left turn within an intersection can be avoided by expanding the drivable area in the configuration file, as noted in the [drivable area expansion section](#drivable-area-expansion). +基本的に、このモジュールは交差点内に駐車車両がないことを想定しています。車線に従う車両や自車線に合流する車両はターゲット外オブジェクトです。 +交差点内で右折/左折を待つ車両は、[走行可能エリアの拡張セクション](#drivable-area-expansion)で説明されているように、設定ファイルで走行可能エリアを拡張することで回避できます。 -#### Does it generate avoidance paths for any road type? +走行可能なエリアは、[走行可能なエリア拡幅のセクション](#走行可能なエリア拡幅)で説明されているように、設定ファイルで拡張できます。 -Drivable area can be expanded in the configuration file, as noted in the [drivable area expansion section](#drivable-area-expansion). +### パス生成 -### Path generation +#### 回避パスはどのように生成されていますか? -#### How is the avoidance path generated? +回避パスは、検出された静止オブジェクトの周囲をナビゲートするように現在の参照パスを変更することで生成されます。 +これは、車両が安全な境界内に留まり、障害物を避けながら道路に従うことを保証する、ルールベースのシフトラインアプローチを使用して行われます。 +詳細は[付録](#付録-シフトライン生成パイプライン)で説明されています。 -The avoidance path is generated by modifying the current reference path to navigate around detected static objects. -This is done using a rule-based shift line approach that ensures the vehicle remains within safe boundaries and follows the road while avoiding obstacles. -Details are explained in the [appendix](#appendix-shift-line-generation-pipeline). +#### 回避パスはどちらの方向(右または左)に生成されていますか? -#### Which way (right or left) is the avoidance path generated? +回避の動作は、目標車両の重心に依存します。 +ターゲットオブジェクトがエゴレーン(自車走行レーン)の左側にいる場合、回避は右側に生成されます。 +現在、左側から左にシフトした障害物を避けることはサポートされていません(右にシフトしたオブジェクトも同じです)。 -The behavior of avoiding depends on the target vehicle's center of gravity. -If the target object is on the left side of the ego lane the avoidance would be generated on the right side. -Currently, avoiding left-shifted obstacles from the left side is not supported (same for right-shifted objects). +#### ターゲットオブジェクトにエンベロープポリゴンを使用するのはなぜですか? -#### Why is an envelope polygon used for the target object? +各ターゲットオブジェクトの知覚/追跡ノイズの影響を軽減するために使用されます。 +エンベロープポリゴンは長方形であり、そのサイズはオブジェクトのポリゴンとバッファーパラメータに依存し、常に参照パスに平行です。 +エンベロープポリゴンは、最新のワンショットエンベロープポリゴンと前のエンベロープポリゴンを使用して作成されます。 +詳細は[知覚ノイズによって引き起こされるシフトラインチャタリングを防ぐ方法のセクション](#知覚ノイズによって引き起こされるシフトラインチャタリングを防ぐ方法)で説明されています。 -It is employed to reduce the influence of the perception/tracking noise for each target object. -The envelope polygon is a rectangle, whose size depends on the object's polygon and buffer parameter and it is always parallel to the reference path. -The envelope polygon is created by using the latest one-shot envelope polygon and the previous envelope polygon. -Details are explained in [How to prevent shift line chattering that is caused by perception noise section](#how-to-prevent-shift-line-chattering-that-is-caused-by-perception-noise). +#### モジュールが安全な回避パスを見つけられない場合どうなりますか? -#### What happens if the module cannot find a safe avoidance path? +モジュールが安全な回避パスを見つけられない場合、車両は回避操作を実行せずに停止するか、現在のパスに沿って続行する場合があります。 +ターゲットオブジェクトがあり、回避するのに十分なスペースがある場合、エゴビークルは回避パスを生成できる位置で停止します。これを[譲歩操作](#譲歩操作)と呼びます。 +一方で、十分なスペースがない場合、このモジュールは何もせず、[障害物クルーズプランナー](../../autoware_obstacle_cruise_planner/README.md)オブジェクトを担当します。 -If the module cannot find a safe avoidance path, the vehicle may stop or continue along its current path without performing an avoidance maneuver. -If there is a target object and there is enough space to avoid, the ego vehicle would stop at a position where an avoidance path could be generated; this is called the [yield manuever](#yield-maneuver). -On the other hand, where there is not enough space, this module has nothing to do and the [obstacle cruise planner](../../autoware_obstacle_cruise_planner/README.md) would be in charge of the object. +#### 回避パスがあるように見えますが、車両が停止します。何が起こっているのでしょうか? -#### There seems to be an avoidance path, but the vehicle stops. What is happening? +この状況は、モジュールがAUTOモードで動作しているときにターゲットオブジェクトがあいまいな場合、またはMANUALモードで動作しているときに発生します。 +生成された回避パスは候補として提示され、実行前にオペレーターの承認が必要です。オペレーターがパスを承認しない場合、エゴビークルは回避パスを生成できる場所で停止します。 -This situation occurs when the module is operating in AUTO mode and the target object is ambiguous or when operating in MANUAL mode. -The generated avoidance path is presented as a candidate and requires operator approval before execution. -If the operator does not approve the path the ego vehicle would stop where it is possible to generate an avoidance path. +### 操作 -### Operation +#### MANUALモードをAUTOモードよりも使用する利点は何ですか? -#### What are the benefits of using MANUAL mode over AUTO mode? +MANUALモードを使用すると、オペレーターは回避パスの承認を直接制御できます。これは、センサーデータが信頼できない場合やあいまいである場合に特に役立ちます。 +このモードは、実行前に人による検証が必要なため、不要または不適切な回避操作を防ぐのに役立ちます。偽陽性が発生する可能性がある環境や、センサー/知覚システムの性能が低い場合に推奨されます。 -MANUAL mode allows the operator to have direct control over the approval of avoidance paths, which is particularly useful in situations where sensor data may be unreliable or ambiguous. -This mode helps prevent unnecessary or incorrect avoidance maneuvers by requiring human validation before execution. -It is recommended for environments where false positives are likely or when the sensor/perception system's performance is limited. +#### このモジュールは特定の車両タイプまたは環境に合わせてカスタマイズできますか? -#### Can this module be customized for specific vehicle types or environments? +モジュールは、障害物の特定と回避方法を定義するルールとパラメータを調整することでカスタマイズできます。 +回避操作は、特定の車両タイプによって変更されることはありません。 -The module can be customized by adjusting the rules and parameters that define how it identifies and avoids obstacles. -The avoidance manuever would not be changed by specific vehicle types. +## 付録: シフトライン生成パイプライン -## Appendix: Shift line generation pipeline - -### Flow chart of the process +### プロセスのフローチャート + ```plantuml @startuml skinparam monochrome true @@ -1324,60 +1345,59 @@ stop @enduml ``` - +### パス形状の決定方法 -### How to decide the path shape +指定された横方向加速度で障害物に対するシフトポイントを生成します。これらのポイントは統合されて回避経路が生成されます。障害物の配置に対応する各ケースの詳細な処理フローを以下に示します。実際のインプリメンテーションは各ケースに分かれていませんが、常に「複数の障害物ケース(両方向)」に対応する関数が実行されています。 -Generate shift points for obstacles with a given lateral jerk. These points are integrated to generate an avoidance path. The detailed process flow for each case corresponding to the obstacle placement are described below. The actual implementation is not separated for each case, but the function corresponding to `multiple obstacle case (both directions)` is always running. +#### 障害物が1つのケース -#### One obstacle case +障害物に対する横方向シフト距離が計算され、下図に示すように、自己車両の速度と指定された横方向加速度からシフトポイントが生成されます。シフトポイントに基づいて、次に円滑な回避経路が計算されます。 -The lateral shift distance to the obstacle is calculated, and then the shift point is generated from the ego vehicle speed and the given lateral jerk as shown in the figure below. A smooth avoidance path is then calculated based on the shift point. +さらに、特殊な場合は以下のプロセスが実行されます。 -Additionally, the following processes are executed in special cases. +#### 横方向加速度緩和条件 -#### Lateral jerk relaxation conditions +- 自己車両が回避ターゲットに近い場合、横方向加速度は最大加速度まで緩和されます。 +- 回避後に中心線に戻るときに、ゴール(パスの終端)まで十分な距離が残っていない場合、上記の条件と同様に加速度条件は緩和されます。 -- If the ego vehicle is close to the avoidance target, the lateral jerk will be relaxed up to the maximum jerk. -- When returning to the center line after avoidance, if there is not enough distance left to the goal (end of path), the jerk condition will be relaxed as above. +#### 最小速度緩和条件 -#### Minimum velocity relaxation conditions +回避中に実際の速度を事前に認識できないという問題があります。これは、特に自己車両の速度が0のときに重要です。 +それを解決するために、このモジュールは最小回避速度用のパラメータを提供します。これは、車両速度が低いときに加速度を計算するために使用されます。 -There is a problem that we cannot know the actual speed during avoidance in advance. This is especially critical when the ego vehicle speed is 0. -To solve that, this module provides a parameter for the minimum avoidance speed, which is used for the lateral jerk calculation when the vehicle speed is low. - -- If the ego vehicle speed is lower than "nominal" minimum speed, use the minimum speed in the calculation of the jerk. -- If the ego vehicle speed is lower than "sharp" minimum speed and a nominal lateral jerk is not enough for avoidance (the case where the ego vehicle is stopped close to the obstacle), use the "sharp" minimum speed in the calculation of the jerk (it should be lower than "nominal" speed). +- 自己車両速度が「公称」最小速度より低い場合、加速度の計算に最小速度を使用します。 +- 自己車両速度が「鋭い」最小速度よりも低く、公称の横方向加速度が回避に十分でない場合(自己車両が障害物近くで停止している場合)、加速度の計算に「鋭い」最小速度を使用します(「公称」速度より低くする必要があります)。 ![fig](./images/how_to_decide_path_shape_one_object.drawio.svg) -#### Multiple obstacle case (one direction) +#### 障害物が複数あるケース(一方向) -Generate shift points for multiple obstacles. All of them are merged to generate new shift points along the reference path. The new points are filtered (e.g. remove small-impact shift points), and the avoidance path is computed for the filtered shift points. +障害物が複数の場合は、シフトポイントを生成します。それらすべてはマージされ、リファレンスパスに沿って新しいシフトポイントが生成されます。新しいポイントはフィルタリングされ(たとえば、影響の小さいシフトポイントは削除され)、フィルタリングされたシフトポイントに対して回避経路が計算されます。 -**Merge process of raw shift points**: check the shift length on each path point. If the shift points are overlapped, the maximum shift value is selected for the same direction. +**生シフトポイントのマージプロセス**: 各パスポイントのシフト長を確認します。シフトポイントが重なっている場合、同じ方向に対して最大シフト値が選択されます。 -For the details of the shift point filtering, see [filtering for shift points](#filtering-for-shift-points). +シフトポイントフィルタリングの詳細については、[#シフトポイントのフィルタリング](#filtering-for-shift-points)を参照してください。 ![fig](./images/how_to_decide_path_shape_multi_object_one_direction.drawio.svg) -#### Multiple obstacle case (both direction) +#### 障害物が複数あるケース(両方向) -Generate shift points for multiple obstacles. All of them are merged to generate new shift points. If there are areas where the desired shifts conflict in different directions, the sum of the maximum shift amounts of these areas is used as the final shift amount. The rest of the process is the same as in the case of one direction. +障害物が複数の場合は、シフトポイントを生成します。それらすべてはマージされて新しいシフトポイントが生成されます。異なる方向で目的のシフトが競合する領域がある場合、これらの領域の最大シフト量の合計が最終的なシフト量として使用されます。プロセスの残りの部分は、単一方向の場合と同じです。 ![fig](./images/how_to_decide_path_shape_multi_object_both_direction.drawio.svg) -#### Filtering for shift points +#### シフトポイントのフィルタリング -The shift points are modified by a filtering process in order to get the expected shape of the avoidance path. It contains the following filters. +シフトポイントは、期待される回避経路的形状を取得するためにフィルタリングプロセスによって修正されます。次のフィルタが含まれます。 -- Quantization: Quantize the avoidance width in order to ignore small shifts. -- Small shifts removal: Shifts with small changes with respect to the previous shift point are unified in the previous shift width. -- Similar gradient removal: Connect two shift points with a straight line, and remove the shift points in between if their shift amount is in the vicinity of the straight line. -- Remove momentary returns: For shift points that reduce the avoidance width (for going back to the center line), if there is enough long distance in the longitudinal direction, remove them. +- 量子化: 小さなシフトを無視するために、回避幅を量子化します。 +- 小さなシフトの削除: 前のシフトポイントに対する小さな変化を伴うシフトは、前のシフト幅に統合されます。 +- 類似勾配の削除: シフトポイントを2つ直線で接続し、直線の近傍にシフト量がある場合は、間のシフトポイントを削除します。 +- 一時的な戻りの削除: 回避幅を(中心線に戻るために)削減するシフトポイントの場合、縦方向に十分な距離がある場合はそれらを削除します。 -## Appendix: All parameters +## 付録: すべてのパラメータ -Location of the avoidance specific parameter configuration file: `src/autoware/launcher/planning_launch/config/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/static_obstacle_avoidance.param.yaml`. +回避固有のパラメータ設定ファイルの場所: `src/autoware/launcher/planning_launch/config/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/static_obstacle_avoidance.param.yaml`。 {{ json_to_markdown("planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json") }} + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md index f5920e76172c7..1d22eea921c61 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md @@ -1,47 +1,48 @@ -## Blind Spot +## ブラインドスポット -### Role +### 役割 -Blind spot module checks possible collisions with bicycles and pedestrians running on its left/right side while turing left/right before junctions. +ブラインドスポットモジュールは、交差点での左折/右折時、左/右側に走行する自転車や歩行者との衝突可能性をチェックします。 ![brief](./docs/blind-spot.drawio.svg) -### Activation Timing +### 起動タイミング -This function is activated when the lane id of the target path has an intersection label (i.e. the `turn_direction` attribute is `left` or `right`). +この機能は、ターゲットパスのレーンIDに交差点ラベル(すなわち「`turn_direction`」属性が「`left`」または「`right`」)がある場合に起動されます。 -### Inner-workings / Algorithms +### 内部動作/アルゴリズム -Sets a stop line, a pass judge line, a detection area and conflict area based on a map information and a self position. +マップ情報と自車位置に基づいて、停止線、通過判定線、検出エリア、衝突エリアを設定します。 -- Stop line : Automatically created based on crossing lane information. +- 停止線: 交差するレーンの情報に基づいて自動作成されます。 -- Pass judge line : A position to judge if stop or not to avoid a rapid brake. +- 通過判定線: 急ブレーキを回避するために、停止するかしないかを判断する位置です。 -- Detection area : Right/left side area of the self position. +- 検出エリア: 自車位置の左右のエリアです。 -- Conflict area : Right/left side area from the self position to the stop line. +- 衝突エリア: 自車位置から停止線までの左右のエリアです。 -Stop/Go state: When both conditions are met for any of each object, this module state is transited to the "stop" state and insert zero velocity to stop the vehicle. +停止/走行状態: 各オブジェクトのいずれかで両方の条件が満たされた場合、このモジュールの状態は「停止」状態に移行し、ゼロ速度を挿入して車両を停止します。 -- Object is on the detection area -- Object’s predicted path is on the conflict area +- オブジェクトが検出エリア上にあります +- オブジェクトの予測パスが衝突エリアにあります -In order to avoid a rapid stop, the “stop” judgement is not executed after the judgment line is passed. +急停止を避けるために、「停止」判定は判定線が通過された後には実行されません。 -Once a "stop" is judged, it will not transit to the "go" state until the "go" judgment continues for a certain period in order to prevent chattering of the state (e.g. 2 seconds). +「停止」が判定されると、状態のチャタリング(例: 2秒)を防ぐため、「走行」判定が一定時間継続するまで「走行」状態に移行しません。 -### Module Parameters +### モジュールパラメータ -| Parameter | Type | Description | +| パラメータ | タイプ | 説明 | | ------------------------------- | ------ | ---------------------------------------------------------------------------------------------- | -| `stop_line_margin` | double | [m] a margin that the vehicle tries to stop before stop_line | -| `backward_length` | double | [m] distance from closest path point to the edge of beginning point. | -| `ignore_width_from_center_line` | double | [m] ignore threshold that vehicle behind is collide with ego vehicle or not | -| `max_future_movement_time` | double | [s] maximum time for considering future movement of object | -| `adjacent_extend_width` | double | [m] if adjacent lane e.g. bicycle only lane exists, blind_spot area is expanded by this length | +| `stop_line_margin` | double | [m] 車両が停止線手前で停止しようとするマージン | +| `backward_length` | double | [m] 最も近いパスポイントから始点のエッジまでの距離 | +| `ignore_width_from_center_line` | double | [m] 自車の後方の車両が自車と衝突するかどうかを無視するしきい値 | +| `max_future_movement_time` | double | [s] オブジェクトの将来の移動を考慮するための最大時間 | +| `adjacent_extend_width` | double | [m] 隣接する車線(例:自転車専用車線)が存在する場合、死角領域はこの長さだけ拡張される | + +### フローチャート -### Flowchart ```plantuml @startuml @@ -97,3 +98,4 @@ endif stop @enduml ``` + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md index 857f590104aea..52214668f4794 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md @@ -1,14 +1,15 @@ -# Crosswalk +# 横断歩道 -## Role +## 役割 -This module judges whether the ego should stop in front of the crosswalk in order to provide safe passage for crosswalk users, such as pedestrians and bicycles, based on the objects' behavior and surround traffic. +本モジュールは、歩行者や自転車などの横断歩道利用者が安全に通行するために、車両が横断歩道前で停止する必要があるかどうかを、オブジェクトの挙動や周囲の交通状況に基づいて判断します。
![crosswalk_module](docs/crosswalk_module.svg){width=1100}
-## Flowchart +## フローチャート + ```plantuml @startuml @@ -41,6 +42,7 @@ stop @enduml ``` + ```plantuml @startuml @@ -70,39 +72,38 @@ stop @enduml ``` -## Features +## 機能 -### Yield the Way to the Pedestrians +### 歩行者への優先権の譲与 -#### Target Object +#### ターゲットオブジェクト -The crosswalk module handles objects of the types defined by the following parameters in the `object_filtering.target_object` namespace. +crosswalkモジュールは、`object_filtering.target_object` 名前空間で定義された次のパラメータのタイプを持つオブジェクトを処理します。 -| Parameter | Unit | Type | Description | +| パラメータ | 単位 | 型 | 説明 | | ------------ | ---- | ---- | ---------------------------------------------- | -| `unknown` | [-] | bool | whether to look and stop by UNKNOWN objects | -| `pedestrian` | [-] | bool | whether to look and stop by PEDESTRIAN objects | -| `bicycle` | [-] | bool | whether to look and stop by BICYCLE objects | -| `motorcycle` | [-] | bool | whether to look and stop by MOTORCYCLE objects | +| `unknown` | [-] | bool | `UNKNOWN` 物体を探して停止するかどうか | +| `pedestrian` | [-] | bool | `PEDESTRIAN` 物体を探して停止するかどうか | +| `bicycle` | [-] | bool | `BICYCLE` 物体を探して停止するかどうか | +| `motorcycle` | [-] | bool | `MOTORCYCLE` 物体を探して停止するかどうか | -In order to handle the crosswalk users crossing the neighborhood but outside the crosswalk, the crosswalk module creates an attention area around the crosswalk, shown as the yellow polygon in the figure. If the object's predicted path collides with the attention area, the object will be targeted for yield. +横断歩道外の周囲を横断する歩行者を処理するために、横断歩道モジュールは横断歩道周囲に注意領域を作成し、図の黄色の多角形で示されます。オブジェクトの予測パスが注意領域と衝突した場合、オブジェクトは譲歩の対象となります。
- ![crosswalk_attention_range](docs/crosswalk_attention_range.svg){width=600} + ![crosswalk_attention_range-ja](docs/crosswalk_attention_range-ja.svg){width=600}
-The neighborhood is defined by the following parameter in the `object_filtering.target_object` namespace. +周囲は `object_filtering.target_object` ネームスペース内の次のパラメータによって定義されます。 -| Parameter | Unit | Type | Description | -| --------------------------- | ---- | ------ | ------------------------------------------------------------------------------------------------- | -| `crosswalk_attention_range` | [m] | double | the detection area is defined as -X meters before the crosswalk to +X meters behind the crosswalk | +| パラメータ | 単位 | 型 | 説明 | +|---|---|---|---| +| `crosswalk_attention_range` | [m] | double | 検出エリアは -X メートルから +X メートルの間の横断歩道として定義されます | -#### Stop Position +#### 停止位置 -First of all, `stop_distance_from_object [m]` is always kept at least between the ego and the target object for safety. +まず、安全性のため自己位置と対象物体の距離は常に `stop_distance_from_object [m]` 以上維持されます。 -When the stop line exists in the lanelet map, the stop position is calculated based on the line. -When the stop line does **NOT** exist in the lanelet map, the stop position is calculated by keeping `stop_distance_from_crosswalk [m]` between the ego and the crosswalk. +レーンのマップに停止線が存在する場合、停止位置は線に基づいて算出されます。レーンのマップに停止線が **存在しない** 場合、停止位置は自己位置と横断歩道の距離を `stop_distance_from_crosswalk [m]` に保つことで算出されます。
@@ -113,37 +114,37 @@ When the stop line does **NOT** exist in the lanelet map, the stop position is c
-As an exceptional case, if a pedestrian (or bicycle) is crossing **wide** crosswalks seen in scramble intersections, and the pedestrian position is more than `far_object_threshold` meters away from the stop line, the actual stop position is determined by `stop_distance_from_object` and pedestrian position, not at the stop line. +例外ケースとして、 スクランブル交差点で見られる**幅広の**横断歩道を歩行者(または自転車)が横断しており、歩行者の位置が停止線から `far_object_threshold` メートル以上離れている場合、実際の停止位置は停止線ではなく、`stop_distance_from_object` と歩行者の位置によって決まります。
![far_object_threshold](docs/far_object_threshold.drawio.svg){width=700}
-In the `stop_position` namespace, the following parameters are defined. +`stop_position` 名前空間では、以下のパラメータが定義されています。 -| Parameter | | Type | Description | -| ------------------------------ | --- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `stop_position_threshold` | [m] | double | If the ego vehicle has stopped near the stop line than this value, this module assumes itself to have achieved yielding. | -| `stop_distance_from_crosswalk` | [m] | double | make stop line away from crosswalk for the Lanelet2 map with no explicit stop lines | -| `far_object_threshold` | [m] | double | If objects cross X meters behind the stop line, the stop position is determined according to the object position (stop_distance_from_object meters before the object) for the case where the crosswalk width is very wide | -| `stop_distance_from_object` | [m] | double | the vehicle decelerates to be able to stop in front of object with margin | +| パラメータ | | 型 | 説明 | +| ------------------------------ | --- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `stop_position_threshold` | [m] | double | 自車位置が停止線からこの値よりも近い場合は、このモジュールは自車が譲歩を完了したとみなします。 | +| `stop_distance_from_crosswalk` | [m] | double | 明示的な停止線が設定されていないLanelet2マップの場合、停止線を横断歩道から離す | +| `far_object_threshold` | [m] | double | 物体が停止線のXメートル後ろを通過した場合、停止位置は、横断歩道の幅が非常に広い場合のケースに対して、オブジェクト位置に基づいて決定されます(オブジェクトの`stop_distance_from_object`メートル前) | +| `stop_distance_from_object` | [m] | double | Vehicle decelerates to be able to stop in front of object with margin | -#### Yield decision +#### Yield判断 -The module makes a decision to yield only when the pedestrian traffic light is **GREEN** or **UNKNOWN**. -The decision is based on the following variables, along with the calculation of the collision point. +モジュールは歩行者信号が**緑**または**不明**の場合にのみ譲る判断を行います。 +判断は、衝突点の計算とともに、以下の変数に基づきます。 -- Time-To-Collision (TTC): The time for the **ego** to reach the virtual collision point. -- Time-To-Vehicle (TTV): The time for the **object** to reach the virtual collision point. +- Time-To-Collision (TTC): **自車**が仮想衝突点に到達する時間。 +- Time-To-Vehicle (TTV): **対象物**が仮想衝突点に到達する時間。 -We classify ego behavior at crosswalks into three categories according to the relative relationship between TTC and TTV [1]. +TTCとTTVの相対的な関係に基づき、横断歩道での**自車**の挙動を3つのカテゴリに分類します[1]。 -- A. **TTC >> TTV**: The object has enough time to cross before the ego. - - No stop planning. -- B. **TTC ≒ TTV**: There is a risk of collision. - - **Stop point is inserted in the ego's path**. -- C. **TTC << TTV**: Ego has enough time to cross before the object. - - No stop planning. +- A. **TTC >> TTV**: 対象物は**自車**よりも先に横断する十分な時間があります。 + - 停止計画なし。 +- B. **TTC ≒ TTV**: 衝突の危険性があります。 + - **自車の経路に停止点が挿入されます。** +- C. **TTC << TTV**: **自車**は対象物よりも先に横断する十分な時間があります。 + - 停止計画なし。
@@ -154,12 +155,12 @@ We classify ego behavior at crosswalks into three categories according to the re
-The boundary of A and B is interpolated from `ego_pass_later_margin_x` and `ego_pass_later_margin_y`. -In the case of the upper figure, `ego_pass_later_margin_x` is `{0, 1, 2}` and `ego_pass_later_margin_y` is `{1, 4, 6}`. -In the same way, the boundary of B and C is calculated from `ego_pass_first_margin_x` and `ego_pass_first_margin_y`. -In the case of the upper figure, `ego_pass_first_margin_x` is `{3, 5}` and `ego_pass_first_margin_y` is `{0, 1}`. +AとBの境界は、`ego_pass_later_margin_x`と`ego_pass_later_margin_y`から補間されます。 +上の図の場合、`ego_pass_later_margin_x`は`{0, 1, 2}`で、`ego_pass_later_margin_y`は`{1, 4, 6}`です。 +同様に、BとCの境界は`ego_pass_first_margin_x`と`ego_pass_first_margin_y`から計算されます。 +上の図の場合、`ego_pass_first_margin_x`は`{3, 5}`で、`ego_pass_first_margin_y`は`{0, 1}`です。 -If the red signal is indicating to the corresponding crosswalk, the ego do not yield against the pedestrians. +横断歩道に対応する赤信号が表示されている場合、**自車**は歩行者に対して譲りません。
@@ -170,203 +171,195 @@ If the red signal is indicating to the corresponding crosswalk, the ego do not y
-In the `pass_judge` namespace, the following parameters are defined. +`pass_judge`ネームスペースで、以下のパラメータが定義されています。 -| Parameter | | Type | Description | +| パラメーター | | 型 | 説明 | | ---------------------------------- | ----- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `ego_pass_first_margin_x` | [[s]] | double | time to collision margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) | -| `ego_pass_first_margin_y` | [[s]] | double | time to vehicle margin vector for ego pass first situation (the module judges that ego don't have to stop at TTC + MARGIN < TTV condition) | -| `ego_pass_first_additional_margin` | [s] | double | additional time margin for ego pass first situation to suppress chattering | -| `ego_pass_later_margin_x` | [[s]] | double | time to vehicle margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) | -| `ego_pass_later_margin_y` | [[s]] | double | time to collision margin vector for object pass first situation (the module judges that ego don't have to stop at TTV + MARGIN < TTC condition) | -| `ego_pass_later_additional_margin` | [s] | double | additional time margin for object pass first situation to suppress chattering | +| `ego_pass_first_margin_x` | [[s]] | double | ego_pass_first状況のタイム・トゥ・コリジョン・マージンベクトル(モジュールは、TTC + マージン < TTV条件ではegoが停止する必要がないと判断します) | +| `ego_pass_first_margin_y` | [[s]] | double | ego_pass_first状況のタイム・トゥ・ビークル・マージンベクトル(モジュールは、TTC + マージン < TTV条件ではegoが停止する必要がないと判断します) | +| `ego_pass_first_additional_margin` | [s] | double | チャッタリングを抑止するための、ego_pass_first状況の追加タイムマージン | +| `ego_pass_later_margin_x` | [[s]] | double | オブジェクトパスファースト状況のタイム・トゥ・ビークル・マージンベクトル(モジュールは、TTV + マージン < TTC条件ではegoが停止する必要がないと判断します) | +| `ego_pass_later_margin_y` | [[s]] | double | オブジェクトパスファースト状況のタイム・トゥ・コリジョン・マージンベクトル(モジュールは、TTV + マージン < TTC条件ではegoが停止する必要がないと判断します) | +| `ego_pass_later_additional_margin` | [s] | double | チャッタリングを抑止するための、オブジェクトパスファースト状況の追加タイムマージン | + +#### スムーズ歩行者譲り判定 -#### Smooth Yield Decision +歩行者が横断歩道付近で停止しており、歩行の意図がない場合、自車が歩行者に通行権を譲り続ける状況が発生することがあります。 +このようなデッドロック状態を防ぐため、自車は状況に応じて譲歩をキャンセルします。 -If the object is stopped near the crosswalk but has no intention of walking, a situation can arise in which the ego continues to yield the right-of-way to the object. -To prevent such a deadlock situation, the ego will cancel yielding depending on the situation. +横断歩道付近で停止しており、歩行の意図が(\*1)ない歩行者については、自車が一定時間(\*2)譲歩のため停車を継続した後、譲歩をキャンセルして走行を開始します。 -For the object stopped around the crosswalk but has no intention to walk (\*1), after the ego has keep stopping to yield for a specific time (\*2), the ego cancels the yield and starts driving. +\*1: +時間は、物体と横断歩道間の距離を `distance_set_for_no_intention_to_walk` と `timeout_set_for_no_intention_to_walk` で補間して計算されます。 -\*1: -The time is calculated by the interpolation of distance between the object and crosswalk with `distance_set_for_no_intention_to_walk` and `timeout_set_for_no_intention_to_walk`. +`pass_judge` 名前空間では、以下のパラメータが定義されています。 -In the `pass_judge` namespace, the following parameters are defined. +| パラメータ | | タイプ | 説明 | +| -------------------------------------------- | ----- | ------ | -------------------------------------------------------------------------------------------------- | +| `distance_set_for_no_intention_to_walk` | [[m]] | double | 歩行の意思なしのタイムアウトを補間で計算するためのキーを設定します | +| `timeout_set_for_no_intention_to_walk` | [[s]] | double | 歩行の意思なしのタイムアウトを補間で計算するための値を設定します | -| Parameter | | Type | Description | -| --------------------------------------- | ----- | ------ | ------------------------------------------------------------------------------- | -| `distance_set_for_no_intention_to_walk` | [[m]] | double | key sets to calculate the timeout for no intention to walk with interpolation | -| `timeout_set_for_no_intention_to_walk` | [[s]] | double | value sets to calculate the timeout for no intention to walk with interpolation | +**パス判定** -\*2: -In the `pass_judge` namespace, the following parameters are defined. +`pass_judge`名前空間に、以下のパラメータが定義されています。 -| Parameter | | Type | Description | -| ---------------------------- | --- | ------ | ----------------------------------------------------------------------------------------------------------------------- | -| `timeout_ego_stop_for_yield` | [s] | double | If the ego maintains the stop for this amount of time, then the ego proceeds, assuming it has stopped long time enough. | +| パラメータ | | タイプ | 説明 | +|---|---|---|---| +| `timeout_ego_stop_for_yield` | [s] | double | 自動運転車が停止を保持する時間がこの期間に達した場合、自動運転車は十分な時間停止したとみなし、走行を再開します。 | -#### New Object Handling +#### 新規オブジェクトの取り扱い -Due to the perception's limited performance where the tree or poll is recognized as a pedestrian or the tracking failure in the crowd or occlusion, even if the surrounding environment does not change, the new pedestrian (= the new ID's pedestrian) may suddenly appear unexpectedly. -If this happens while the ego is going to pass the crosswalk, the ego will stop suddenly. +認識の限界のため、木や電柱が歩行者として認識された場合、あるいは群衆や閉塞状況により追跡が失敗した場合、周囲の環境が変わっていないにもかかわらず、新しい歩行者(= 新しいIDの歩行者)が突然出現することがあります。 +これが自車が横断歩道を通り抜けようとしているときに発生すると、自車は急停止します。 -To deal with this issue, the option `disable_yield_for_new_stopped_object` is prepared. -If true is set, the yield decisions around the crosswalk with a traffic light will ignore the new stopped object. +この問題に対処するために、オプション「disable_yield_for_new_stopped_object」が用意されています。 +trueを設定すると、信号機のある横断歩道の周辺における減速決定は、新しい停止オブジェクトを無視します。 -In the `pass_judge` namespace, the following parameters are defined. +`pass_judge`ネームスペースでは、以下のパラメータが定義されています。 -| Parameter | | Type | Description | -| -------------------------------------- | --- | ---- | ------------------------------------------------------------------------------------------------ | -| `disable_yield_for_new_stopped_object` | [-] | bool | If set to true, the new stopped object will be ignored around the crosswalk with a traffic light | +| パラメータ | | タイプ | 説明 | +|------------------------------------------|--------|---------|------------------------------------------------------------------------------------------| +| `disable_yield_for_new_stopped_object` | [X] | bool | trueの場合、信号機の付いた横断歩道付近にある停止中の新しい障害物は無視されます | -### Stuck Prevention on the Crosswalk +### 歩行者横断歩道での停止防止 -The feature will make the ego not to stop on the crosswalk. -When there is a low-speed or stopped vehicle ahead of the crosswalk, and there is not enough space between the crosswalk and the vehicle, the crosswalk module plans to stop before the crosswalk even if there are no pedestrians or bicycles. +この機能は、自車が歩行者横断歩道上で停止しないようにします。 +歩行者横断歩道の直前に低速または停止している車両があり、歩行者横断歩道と車両との間に十分なスペースがない場合、歩行者や自転車がいない場合でも、歩行者横断歩道手前で停止するようPlanningモジュールが計画します。 -`min_acc`, `min_jerk`, and `max_jerk` are met. If the ego cannot stop before the crosswalk with these parameters, the stop position will move forward. +`min_acc`、`min_jerk`、および`max_jerk`が満たされます。これらのパラメータを使用して自車が歩行者横断歩道手前で停止できない場合、停止位置は前進します。
![stuck_vehicle_attention_range](docs/stuck_vehicle_detection.svg){width=600}
-In the `stuck_vehicle` namespace, the following parameters are defined. +`stuck_vehicle`名前空間で、次のパラメータが定義されます。 -| Parameter | Unit | Type | Description | -| ---------------------------------- | ------- | ------ | ----------------------------------------------------------------------- | -| `stuck_vehicle_velocity` | [m/s] | double | maximum velocity threshold whether the target vehicle is stopped or not | -| `max_stuck_vehicle_lateral_offset` | [m] | double | maximum lateral offset of the target vehicle position | -| `required_clearance` | [m] | double | clearance to be secured between the ego and the ahead vehicle | -| `min_acc` | [m/ss] | double | minimum acceleration to stop | -| `min_jerk` | [m/sss] | double | minimum jerk to stop | -| `max_jerk` | [m/sss] | double | maximum jerk to stop | +| パラメータ | 単位 | 型 | 説明 | +| ---------------------------------------- | ---- | -------- | --------------------------------------------------------------------- | +| `stuck_vehicle_velocity` | [m/s] | double | 車両停止状態の最大速度しきい値 | +| `max_stuck_vehicle_lateral_offset` | [m] | double | 目標車両の最大横方向オフセット | +| `required_clearance` | [m] | double | 自車と前方の車両との確保するクリアランス | +| `min_acc` | [m/ss] | double | 停止するための最小加速度 | +| `min_jerk` | [m/sss] | double | 停止するための最小ジャーク | +| `max_jerk` | [m/sss] | double | 停止するための最大ジャーク | -### Safety Slow Down Behavior +### 安全減速挙動 -In the current autoware implementation, if no target object is detected around a crosswalk, the ego vehicle will not slow down for the crosswalk. -However, it may be desirable to slow down in situations, for example, where there are blind spots. -Such a situation can be handled by setting some tags to the related crosswalk as instructed in the [lanelet2_format_extension.md](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) -document. +現在の Autoware の実装では、横断歩道の周辺にターゲット オブジェクトが検出されない場合、自車位置は横断歩道で減速しません。 +ただし、たとえば死角がある場合など、減速することも考えられます。 +この状況は、[lanelet2_format_extension.md](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) +ドキュメントの指示に従って、関連する横断歩道にタグを設定することによって処理できます。 -| Parameter | | Type | Description | -| --------------------- | ------- | ------ | --------------------------------------------------------------------------------------------------------------------- | -| `slow_velocity` | [m/s] | double | target vehicle velocity when module receive slow down command from FOA | -| `max_slow_down_jerk` | [m/sss] | double | minimum jerk deceleration for safe brake | -| `max_slow_down_accel` | [m/ss] | double | minimum accel deceleration for safe brake | -| `no_relax_velocity` | [m/s] | double | if the current velocity is less than X m/s, ego always stops at the stop position(not relax deceleration constraints) | +| パラメーター | 単位 | タイプ | 説明 | +| --------------------- | ---- | ------ | ------------------------------------------------------------------------------------------------------------------- | +| `slow_velocity` | m/s | double | モジュールが FOA から減速コマンドを受信したときのターゲット車両速度 | +| `max_slow_down_jerk` | m/sss | double | 安全なブレーキのための最小ジャーク減速度 | +| `max_slow_down_accel` | m/ss | double | 安全なブレーキのための最小アクセル減速度 | +| `no_relax_velocity` | m/s | double | 現在速度が X m/s 未満の場合、エゴは常に停止位置で停止する(減速制約を緩和しない) | -### Occlusion +### オクルージョン -This feature makes ego slow down for a crosswalk that is occluded. +この機能を有効にすると、自動運転車は遮られた横断歩道手前で減速します。 -Occlusion of the crosswalk is determined using the occupancy grid. -An occlusion is a square of size `min_size` of occluded cells -(i.e., their values are between `free_space_max` and `occupied_min`) -of size `min_size`. -If an occlusion is found within range of the crosswalk, -then the velocity limit at the crosswalk is set to `slow_down_velocity` (or more to not break limits set by `max_slow_down_jerk` and `max_slow_down_accel`). -The range is calculated from the intersection between the ego path and the crosswalk and is equal to the time taken by ego to reach the crosswalk times the `occluded_object_velocity`. -This range is meant to be large when ego is far from the crosswalk and small when ego is close. +横断歩道のオクルージョンは、オキュパンシーグリッドを使用して判断されます。 +オクルージョンとは、`min_size`サイズの正方形のオクルージョンセルです(つまり、その値は`free_space_max`と`occupied_min`の間)。 +横断歩道範囲内にオクルージョンが見つかった場合、横断歩道での速度制限は`slow_down_velocity`に設定されます。(ただし、`max_slow_down_jerk`と`max_slow_down_accel`で設定された制限を超えない範囲) +この範囲は、自動運転車の走行経路と横断歩道の交点から算出され、自動運転車が横断歩道に到達するまでの時間と`occluded_object_velocity`を掛けたものになります。 +この範囲は、自動運転車が横断歩道から遠い場合は大きく、近い場合は小さくなります。 -In order to avoid flickering decisions, a time buffer can be used such that the decision to add (or remove) the slow down is only taken -after an occlusion is detected (or not detected) for a consecutive time defined by the `time_buffer` parameter. +ちらつきを伴う判断を避けるために、時間バッファを使用できます。これにより、「減速を追加する(または削除する)」という決定は、オクルージョンが`time_buffer`パラメーターで定義された連続した時間検出(または未検出)された後にのみ行われます。 -To ignore occlusions when the crosswalk has a traffic light, `ignore_with_traffic_light` should be set to true. +横断歩道の信号が赤のときにオクルージョンを無視するには、`ignore_with_traffic_light`をtrueに設定する必要があります。 -To ignore temporary occlusions caused by moving objects, -`ignore_behind_predicted_objects` should be set to true. -By default, occlusions behind an object with velocity higher than `ignore_velocity_thresholds.default` are ignored. -This velocity threshold can be specified depending on the object type by specifying the object class label and velocity threshold in the parameter lists `ignore_velocity_thresholds.custom_labels` and `ignore_velocity_thresholds.custom_thresholds`. -To inflate the masking behind objects, their footprint can be made bigger using `extra_predicted_objects_size`. +移動中のオブジェクトによる一時的なオクルージョンを無視するには、 +`ignore_behind_predicted_objects`をtrueに設定する必要があります。 +デフォルトでは、`ignore_velocity_thresholds.default`より速度の高いオブジェクトの背後のオクルージョンは無視されます。 +この速度閾値は、パラメータリスト`ignore_velocity_thresholds.custom_labels`と`ignore_velocity_thresholds.custom_thresholds`でオブジェクトクラスのラベルと速度閾値を指定することによって、オブジェクトタイプに応じて指定できます。 +オブジェクトのマスクを膨らませるには、`extra_predicted_objects_size`を使用してフットプリントを大きくすることができます。
![stuck_vehicle_attention_range](docs/with_occlusion.svg){width=600}
-| Parameter | Unit | Type | Description | -| ---------------------------------------------- | ----- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| `enable` | [-] | bool | if true, ego will slow down around crosswalks that are occluded | -| `occluded_object_velocity` | [m/s] | double | assumed velocity of objects that may come out of the occluded space | -| `slow_down_velocity` | [m/s] | double | slow down velocity | -| `time_buffer` | [s] | double | consecutive time with/without an occlusion to add/remove the slowdown | -| `min_size` | [m] | double | minimum size of an occlusion (square side size) | -| `free_space_max` | [-] | double | maximum value of a free space cell in the occupancy grid | -| `occupied_min` | [-] | double | minimum value of an occupied cell in the occupancy grid | -| `ignore_with_traffic_light` | [-] | bool | if true, occlusions at crosswalks with traffic lights are ignored | -| `ignore_behind_predicted_objects` | [-] | bool | if true, occlusions behind predicted objects are ignored | -| `ignore_velocity_thresholds.default` | [m/s] | double | occlusions are only ignored behind objects with a higher or equal velocity | -| `ignore_velocity_thresholds.custom_labels` | [-] | string list | labels for which to define a non-default velocity threshold (see `autoware_perception_msgs::msg::ObjectClassification` for all the labels) | -| `ignore_velocity_thresholds.custom_thresholds` | [-] | double list | velocities of the custom labels | -| `extra_predicted_objects_size` | [m] | double | extra size added to the objects for masking the occlusions | +| パラメータ | 単位 | タイプ | 説明 | +| ---------------------------------------------- | ------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `enable` | [-] | ブール型 | trueの場合、エゴは、遮蔽されている横断歩道の周囲で減速します。 | +| `occluded_object_velocity` | [m/s] | ダブル型 | 遮蔽された空間から現れる可能性のあるオブジェクトの想定速度 | +| `slow_down_velocity` | [m/s] | ダブル型 | 減速速度 | +| `time_buffer` | [s] | ダブル型 | 減速を追加/削除するための、遮蔽あり/なしの連続時間 | +| `min_size` | [m] | ダブル型 | 遮蔽の最小サイズ(正方形の1辺の長さ) | +| `free_space_max` | [-] | ダブル型 | オキュパンシーグリッド内の空きセルの最大値 | +| `occupied_min` | [-] | ダブル型 | オキュパンシーグリッド内の占有セルの最小値 | +| `ignore_with_traffic_light` | [-] | ブール型 | trueの場合、信号機のある横断歩道の遮蔽は無視されます。 | +| `ignore_behind_predicted_objects` | [-] | ブール型 | trueの場合、予測されたオブジェクトの背後にある遮蔽は無視されます。 | +| `ignore_velocity_thresholds.default` | [m/s] | ダブル型 | 遮蔽は、速度が同じかそれよりも高いオブジェクトの背後でのみ無視されます。 | +| `ignore_velocity_thresholds.custom_labels` | [-] | 文字列リスト | 既定以外の速度しきい値を定義するラベル(すべてのラベルについては、`autoware_perception_msgs::msg::ObjectClassification`を参照してください) | +| `ignore_velocity_thresholds.custom_thresholds` | [-] | ダブルリスト | カスタムラベルの速度 | +| `extra_predicted_objects_size` | [m] | ダブル型 | 遮蔽をマスクするためにオブジェクトに追加される余分なサイズ | -### Others +### その他 -In the `common` namespace, the following parameters are defined. +`common` 名前空間では、以下のパラメータが定義されています。 -| Parameter | Unit | Type | Description | -| ----------------------------- | ---- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `show_processing_time` | [-] | bool | whether to show processing time | -| `traffic_light_state_timeout` | [s] | double | timeout threshold for traffic light signal | -| `enable_rtc` | [-] | bool | if true, the scene modules should be approved by (request to cooperate)rtc function. if false, the module can be run without approval from rtc. | +| パラメータ | ユニット | 種類 | 説明 | +| ------------------------------- | ------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `show_processing_time` | [-] | ブール値 | 処理時間を表示するかどうか | +| `traffic_light_state_timeout` | [s] | double | 信号のタイムアウトしきい値 | +| `enable_rtc` | [-] | ブール値 | true の場合、シーンモジュールは (rtc 関数の協力を要求して) rtc によって承認される必要があります。false の場合、モジュールは rtc から承認なしに実行できます。 | -## Known Issues +##既知の問題 -- The yield decision may be sometimes aggressive or conservative depending on the case. - - The main reason is that the crosswalk module does not know the ego's position in the future. The detailed ego's position will be determined after the whole planning. - - Currently the module assumes that the ego will move with a constant velocity. +- ケースによっては譲歩の決定が積極的または消極的になることがあります。 + - 主な理由は、横断歩道モジュールが車両の将来の位置を知らないことです。車両の正確な位置は、すべての計画の後で決定されます。 + - 現在、このモジュールは車両が一定の速度で移動すると想定しています。 -## Debugging +##デバッグ -### Visualization of debug markers +### デバッグマーカーの可視化 -`/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/crosswalk` shows the following markers. +`/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/crosswalk` は、次のマーカーを表示します。
- ![limitation](docs/debug_markers.png){width=1000} + ![ limitation](docs/debug_markers.png){width=1000}
-- Yellow polygons - - Ego footprints' polygon to calculate the collision check. -- Pink polygons - - Object footprints' polygon to calculate the collision check. -- The color of crosswalks - - Considering the traffic light's color, red means the target crosswalk, and white means the ignored crosswalk. -- Texts - - It shows the module ID, TTC, TTV, and the module state. +- 黄色い多角形 + - 衝突チェックを計算するための車両フットプリントの多角形。 +- ピンクの多角形 + - 衝突チェックを計算するためのオブジェクトフットプリントの多角形。 +- 横断歩道の色 + - 信号の色を考慮して、赤はターゲットの横断歩道を、白は無視される横断歩道を示します。 +- テキスト + - モジュールID、TTC、TTV、およびモジュールの状態を示します。 + +### 衝突時間(TTC)の可視化 -### Visualization of Time-To-Collision ```sh ros2 run autoware_behavior_velocity_crosswalk_module time_to_collision_plotter.py ``` -enables you to visualize the following figure of the ego and pedestrian's time to collision. -The label of each plot is `-`. +## **Troubleshooting** -
- ![limitation](docs/time_to_collision_plot.png){width=1000} -
- -## Trouble Shooting +### **Behavior** -### Behavior +- Q. 交差点ユーザーオブジェクトがいないのに、自車位置が交差点付近で停止した + - A. [スタックビークル検出](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection)を参照してください。 +- Q. 交差点仮想ウォールが突然現れて、急停止した + - A. 自車位置が交差点の近くにいたときに、交差点ユーザーが動き始めた可能性があります。 +- Q. 歩行者信号が赤色でも、交差点モジュールが停止を決定する + - A. レーンレットマップが正しくない可能性があります。歩行者信号と交差点は関連付けられている必要があります。 +- Q. Planningシミュレーションで、交差点モジュールがすべての交差点で停止する譲渡動作を行う + - A. これは、歩行者信号が既定で不明であるためです。この場合、交差点は安全のために譲渡動作を行います。 -- Q. The ego stopped around the crosswalk even though there were no crosswalk user objects. - - A. See [Stuck Vehicle Detection](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection). -- Q. The crosswalk virtual wall suddenly appeared resulting in the sudden stop. - - A. There may be a crosswalk user started moving when the ego was close to the crosswalk. -- Q. The crosswalk module decides to stop even when the pedestrian traffic light is red. - - A. The lanelet map may be incorrect. The pedestrian traffic light and the crosswalk have to be related. -- Q. In the planning simulation, the crosswalk module does the yield decision to stop on all the crosswalks. - - A. This is because the pedestrian traffic light is unknown by default. In this case, the crosswalk does the yield decision for safety. +### **パラメータ調整** -### Parameter Tuning +- Q. 自車の譲渡動作が保守的すぎる + - A. [譲渡決定](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection)に記載されている「`ego_pass_later_margin`」を調整します。 +- Q. 自車の譲渡動作が攻撃的すぎる + - A. [譲渡決定](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection)に記載されている「`ego_pass_later_margin`」を調整します。 -- Q. The ego's yield behavior is too conservative. - - A. Tune `ego_pass_later_margin` described in [Yield Decision](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection) -- Q. The ego's yield behavior is too aggressive. - - A. Tune `ego_pass_later_margin` described in [Yield Decision](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection) - -## References/External links +## **参考文献/外部リンク** [1] 佐藤 みなみ, 早坂 祥一, 清水 政行, 村野 隆彦, 横断歩行者に対するドライバのリスク回避行動のモデル化, 自動車技術会論文集, 2013, 44 巻, 3 号, p. 931-936. + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md index 2416ebf2d5599..35242c1742125 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md @@ -1,36 +1,38 @@ -## Detection Area +## 検知領域 -### Role +### 役割 -If pointcloud is detected in a detection area defined on a map, the stop planning will be executed at the predetermined point. +地図上に定義された検知領域で点群が検知された場合、設定された地点で停止するプランニングが実行されます。 ![brief](./docs/detection_area.svg) -### Activation Timing +### 稼働タイミング -This module is activated when there is a detection area on the target lane. +このモジュールは、対象レーン上に検知領域が存在する場合に稼働します。 -### Module Parameters +### モジュールパラメータ -| Parameter | Type | Description | -| ---------------------------------- | ------ | -------------------------------------------------------------------------------------------------- | -| `use_dead_line` | bool | [-] weather to use dead line or not | -| `use_pass_judge_line` | bool | [-] weather to use pass judge line or not | -| `state_clear_time` | double | [s] when the vehicle is stopping for certain time without incoming obstacle, move to STOPPED state | -| `stop_margin` | double | [m] a margin that the vehicle tries to stop before stop_line | -| `dead_line_margin` | double | [m] ignore threshold that vehicle behind is collide with ego vehicle or not | -| `hold_stop_margin_distance` | double | [m] parameter for restart prevention (See Algorithm section) | -| `distance_to_judge_over_stop_line` | double | [m] parameter for judging that the stop line has been crossed | +| パラメータ | 型 | 説明 | +| ----------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------- | +| `use_dead_line` | 論理型 | [-] デッドラインを使用するかどうか | +| `use_pass_judge_line` | 論理型 | [-] 通過判定ラインを使用するかどうか | +| `state_clear_time` | double | [s] オブジェクトが一定時間検出されず、車両が停止している場合、STOPPED 状態に遷移する | +| `stop_margin` | double | [m] 車両が停止線前に停止しようとするマージン | +| `dead_line_margin` | double | [m] 後続車が自車と衝突するかどうかを無視するしきい値 | +| `hold_stop_margin_distance` | double | [m] 再始動防止のための設定 (アルゴリズム セクションを参照) | +| `distance_to_judge_over_stop_line` | double | [m] 停止線を越えたことを判定するためのパラメータ | +| `suppress_pass_judge_when_stopping` | 論理型 | [m] 停止時に通過判定を抑制するためのパラメータ | -### Inner-workings / Algorithm +### 内部動作/アルゴリズム -1. Gets a detection area and stop line from map information and confirms if there is pointcloud in the detection area -2. Inserts stop point l[m] in front of the stop line -3. Inserts a pass judge point to a point where the vehicle can stop with a max deceleration -4. Sets velocity as zero behind the stop line when the ego-vehicle is in front of the pass judge point -5. If the ego vehicle has passed the pass judge point already, it doesn’t stop and pass through. +1. マップ情報から検出領域と停止線を取得し、検出領域に点群があることを確認する +2. 停止線から前方 l[m] に停止点を挿入する +3. 車両が最大減速度で停止可能な点に通過判定点を挿入する +4. 自車位置が通過判定点前方にいる場合、停止線後方に速度をゼロに設定する +5. 自車位置が通過判定点をすでに通過している場合、停止せずに通過する + +#### フローチャート -#### Flowchart ```plantuml @startuml @@ -47,7 +49,9 @@ endif :get clear stop state duration; if (clear stop state duration is more than state_clear_time?) then (yes) - :set current state GO; + if (suppress_pass_judge_when_stopping is false or ego is moving) then (yes) + :set current state GO; + endif :reset clear stop state duration; stop else (no) @@ -90,23 +94,24 @@ stop @enduml ``` -#### Restart prevention +#### 再始動防止 -If it needs X meters (e.g. 0.5 meters) to stop once the vehicle starts moving due to the poor vehicle control performance, the vehicle goes over the stopping position that should be strictly observed when the vehicle starts to moving in order to approach the near stop point (e.g. 0.3 meters away). +車両制御性能が低いため、動き始めたら0.5メートルなどの距離(Xメートル)が必要な場合、車両は停止地点を超えて進み、停止寸前の地点(例:0.3メートル先)に近づくため、厳守する必要があります。 -This module has parameter `hold_stop_margin_distance` in order to prevent from these redundant restart. If the vehicle is stopped within `hold_stop_margin_distance` meters from stop point of the module (\_front_to_stop_line < hold_stop_margin_distance), the module judges that the vehicle has already stopped for the module's stop point and plans to keep stopping current position even if the vehicle is stopped due to other factors. +このモジュールには、このような重複する再始動を防ぐためのパラメーター「hold_stop_margin_distance」があります。車両がモジュール停止位置(_front_to_stop_line < hold_stop_margin_distance)から「hold_stop_margin_distance」メートル以内で停止した場合、車両はモジュールの停止位置で停止していると判断し、車両が他の要因で停止した場合でも現在の位置で停止を続けることを計画します。
- ![example](restart_prevention.svg){width=1000} -
parameters
+ ![例](restart_prevention.svg){width=1000} +
パラメーター
- ![example](restart.svg){width=1000} -
outside the hold_stop_margin_distance
+ ![例](restart.svg){width=1000} +
hold_stop_margin_distanceの外側
- ![example](keep_stopping.svg){width=1000} -
inside the hold_stop_margin_distance
+ ![例](keep_stopping.svg){width=1000} +
hold_stop_margin_distanceの内側
+ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md index 825bb4043d993..f4abd4362db9e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md @@ -1,124 +1,125 @@ -# Intersection +## 交差点 -## Role +### 役割 -The intersection module is responsible for safely passing urban intersections by: +交差点モジュールは、以下の方法により都市部の交差点を安全に通過する責任を負っています。 -1. checking collisions with upcoming vehicles -2. recognizing the occluded area in the intersection -3. reacting to each color/shape of associated traffic lights +1. 前方の車両との衝突を確認する +2. 交差点内の隠れたエリアを認識する +3. 関連する信号機の各色/形状に対応する -This module is designed to be agnostic to left-hand/right-hand traffic rules and work for crossroads, T-shape junctions, etc. Roundabout is not formally supported in this module. +このモジュールは左ハンドル/右ハンドルの交通規則に依存せず、十字路、T字路などで動作するように設計されています。このモジュールではラウンドアバウトは正式にサポートされていません。 ![topology](./docs/intersection-topology.drawio.svg) -## Activation condition +### アクティブ条件 -This module is activated when the path contains the lanes with turn_direction tag. More precisely, if the lane_ids of the path contain the ids of those lanes, corresponding instances of intersection module are activated on each lane respectively. +このモジュールは、パスに `turn_direction` タグを持つレーンが含まれる場合にアクティブになります。より正確には、パスの `lane_ids` がこれらのレーンの `id` を含む場合、対応する交差点モジュールのインスタンスがそれぞれレーンごとにアクティブになります。 -## Requirements/Limitations +### 要件/制限事項 -- The HDMap needs to have the information of turn_direction tag (which should be one of straight, left, right) for all the lanes in intersections and right_of_way tag for specific lanes (refer to [RightOfWay](#how-towhy-set-rightofway-tag) section for more details). See [autoware_lanelet2_extension document](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) for more detail. -- WIP(perception requirements/limitations) -- WIP(sensor visibility requirements/limitations) +- HDマップには、交差点内のすべてのレーンに関する `turn_direction` タグ(`straight`、`left`、`right` のいずれか)の情報と、特定のレーンに関する `right_of_way` タグ(詳細については [RightOfWay](#how-towhy-set-rightofway-tag) セクションを参照)が必要です。詳細については、[autoware_lanelet2_extension ドキュメント](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) を参照してください。 +- WIP(認識要件/制限事項) +- WIP(センサー視認性の要件/制限事項) -## Attention area +### 注視領域 -The attention area in the intersection is defined as the set of lanes that are conflicting with ego path and their preceding lanes up to `common.attention_area_length` meters. By default RightOfWay tag is not set, so the attention area covers all the conflicting lanes and its preceding lanes as shown in the first row. RightOfWay tag is used to rule out the lanes that each lane has priority given the traffic light relation and turn_direction priority. In the second row, purple lanes are set as the yield_lane of the ego_lane in the RightOfWay tag. +交差点内の注視領域は、エゴパスと競合するレーンとその先行する最大 `common.attention_area_length` メートルのレーンとして定義されます。既定では `RightOfWay` タグが設定されていないため、注視領域は最初の行に示すように、すべての競合するレーンとその先行するレーンをカバーします。`RightOfWay` タグは、信号機の関係と `turn_direction` の優先順位に基づいて各レーンが優先権を持つレーンを除外するために使用されます。2 行目では、紫色のレーンは `RightOfWay` タグ内のエゴレーンの `yield_lane` として設定されています。 ![attention_area](./docs/intersection-attention.drawio.svg) -intersection_area, which is supposed to be defined on the HDMap, is an area converting the entire intersection. +HDマップ上に定義されている `intersection_area` は、交差点全体を変換する領域です。 -### In-phase/Anti-phase signal group +### 同相/逆相信号群 -The terms "in-phase signal group" and "anti-phase signal group" are introduced to distinguish the lanes by the timing of traffic light regulation as shown in below figure. +「同相信号群」と「逆相信号群」という用語は、次図に示すように、信号機規制のタイミングによってレーンを区別するために導入されました。 ![phase signal group](./docs/signal-phase-group.drawio.svg) -The set of intersection lanes whose color is in sync with lane L1 is called the in-phase signal group of L1, and the set of remaining lanes is called the anti-phase signal group. +レーン L1 と色が同期している交差点レーン群を L1 の同相信号群と呼び、残りのレーン群を逆相信号群と呼びます。 -### How-to/Why set RightOfWay tag +### RightOfWay タグの設定方法/理由 -Ideally RightOfWay tag is unnecessary if ego has perfect knowledge of all traffic signal information because: +理想的には、エゴがすべての信号情報に完全にアクセスできる場合、RightOfWay タグは不要です。なぜなら: -- it can distinguish which conflicting lanes should be checked because they are GREEN currently and possible collision occur with the vehicles on those lanes -- it can distinguish which conflicting lanes can be ignored because they are RED currently and there is no chance of collision with the vehicles on those lanes unless they violate the traffic rule +- 現在 GREEN であるためにチェックする必要がある競合レーンと、そのレーン上の車両との衝突が発生する可能性があります。 +- 現在 RED であるために無視できる競合レーンと、そのレーン上の車両との衝突は、交通規則に違反しない限り発生しません。 -That allows ego to generate the attention area dynamically using the real time traffic signal information. However this ideal condition rarely holds unless the traffic signal information is provided through the infrastructure. Also there maybe be very complicated/bad intersection maps where multiple lanes overlap in a complex manner. +これにより、エゴはリアルタイムの信号情報を使用して注視領域を動的に生成できます。ただし、この理想的な条件は、信号情報がインフラストラクチャを介して提供されない限り、ほとんど満たされません。また、複数のレーンが複雑に重なる非常に複雑で悪い交差点のマップがある可能性があります。 -- If there is an perfect access to entire traffic light signal, then you can set `common.use_map_right_of_way` to false and there is no need to set RightOfWay tag on the map. The intersection module will generate the attention area by checking traffic signal and corresponding conflicting lanes. This feature is not implemented yet. -- If traffic signal information is not perfect, then set `common.use_map_right_of_way` to true. If you do not want to detect vehicles on the anti-phase signal group lanes, set them as yield_lane for ego lane. -- Even if there are no traffic lights if the intersection lanes are overlapped in a ugly manner, you may need to set RightOfWay tag. For example if adjacent intersection lanes of the same in-phase group are not sharing the boundary line and overlapped a little bit, you may need to set RightOfWay to each other for them in order to avoid unnecessary stop for vehicle on such unrelated lane. +- 完全な信号機信号に完璧にアクセスできる場合は、`common.use_map_right_of_way` を false に設定できます。RightOfWay タグをマップ上に設定する必要はありません。交差点モジュールは、信号機と対応する競合レーンを確認して注視領域を生成します。この機能はまだ実装されていません。 +- 信号情報が完璧でない場合は、`common.use_map_right_of_way` を true に設定します。逆相信号群レーンの車両を検出しない場合は、それらをエゴレーンの `yield_lane` として設定します。 +- 信号がなくても、交差点レーンが醜い方法で重なっている場合は、RightOfWay タグを設定する必要がある場合があります。たとえば、同じ同相群の隣接する交差点レーンが境界線を共有せず、少し重なっている場合は、そのような無関係なレーンで不必要に停止しないようにお互いに RightOfWay を設定する必要がある場合があります。 -To help the intersection module care only a set of limited lanes, RightOfWay tag needs to be properly set. +交差点モジュールが限られたレーンのセットのみを処理できるようにするには、RightOfWay タグを適切に設定する必要があります。 -Following table shows an **example** of how to set yield_lanes to each lane in a intersection w/o traffic lights. Since it is not apparent how to uniquely determine signal phase group for a set of intersection lanes in geometric/topological manner, yield_lane needs to be set manually. Straight lanes with traffic lights are exceptionally handled to detect no lanes because commonly it has priority over all the other lanes, so no RightOfWay setting is required. +次の表は、**例**として、信号のない交差点の各レーンに `yield_lane` を設定する方法を示しています。幾何学的/トポロジ的な方法で交差点レーンのセットの一意の信号位相グループを決定する方法は明らかでないため、`yield_lane` を手動で設定する必要があります。信号機のある直進レーンは、通常他のすべてのレーンよりも優先順位が高いため、レーンの検出がされないように特別に処理されます。したがって、RightOfWay の設定は必要ありません。 -| turn direction of right_of_way | yield_lane(with traffic light) | yield_lane(without traffic light) | -| ------------------------------ | ------------------------------------------------------------------------------------------- | ---------------------------------------------- | -| straight | not need to set yield_lane(this case is special) | left/right conflicting lanes of in-phase group | -| left(Left hand traffic) | all conflicting lanes of the anti-phase group and right conflicting lanes of in-phase group | right conflicting lanes of in-phase group | -| right(Left hand traffic) | all conflicting lanes of the anti-phase group | no yield_lane | -| left(Right hand traffic) | all conflicting lanes of the anti-phase group | no yield_lane | -| right(Right hand traffic) | all conflicting lanes of the anti-phase group and right conflicting lanes of in-phase group | left conflicting lanes of in-phase group | +| 進路と優先道路の関係 | 交差点での減速車線(信号有り) | 交差点での減速車線(信号無し) | +| ---------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------- | +| 直進 | 減速車線を設定する必要はない(このケースは特殊) | 同相車の対向車線 | +| 左折(左ハンドル車) | 反相車の対抗車線と対向車線の同相車の右側から対抗する車線 | 同相車の対向車線の右側の車線 | +| 右折(左ハンドル車) | 反相車の対抗車線 | 減速車線を設定しない | +| 左折(右ハンドル車) | 反相車の対抗車線 | 減速車線を設定しない | +| 右折(右ハンドル車) | 反相車の対抗車線と対向車線の同相車の右側から対抗する車線 | 同相車の対向車線の左側の車線 | -This setting gives the following `attention_area` configurations. +この設定は、次の `attention_area` 設定を提供します。 ![attention_area_straight](./docs/intersection-attention-straight.drawio.svg) ![attention_area_ll_rr](./docs/intersection-attention-ll-rr.drawio.svg) ![attention_area_lr_rl](./docs/intersection-attention-lr-rl.drawio.svg) -For complex/bad intersection map like the one illustrated below, additional RightOfWay setting maybe necessary. +以下のように示される複雑/不良な交差点のマップの場合、追加の RightOfWay 設定が必要になる場合があります。 ![bad-map](./docs/ugly-intersection.drawio.svg) -The bad points are: +不良な点は次のとおりです。 -1. ego lane is overlapped with adjacent lane of the in-phase group. In this case you need to set this lane as yield_lane additionally because otherwise attention area is generated for its preceding lanes as well, which may cause unwanted stop. -2. ego lane is overlapped with unrelated lane. In this case the lane is right-turn only and there is no chance of collision in theory. But you need to set this lane as yield_lane additionally for the same reason as (1). +1. ego 車線は同期グループの隣接車線と重複しています。この場合、他に注意領域が先行車線にも生成され、望ましくない停止が発生する可能性があるため、この車線を yield_lane として追加で設定する必要があります。 +2. ego 車線は無関係な車線と重複しています。この場合、理論的には右折専用車線であり、衝突の可能性はありません。ただし、(1) と同じ理由でこの車線を yield_lane として追加設定する必要があります。 -## Possible stop lines +## 停止線 -Following figure illustrates important positions used in the intersection module. Note that each solid line represents ego front line position and the corresponding dot represents the actual inserted stop point position for the vehicle frame, namely the center of the rear wheel. +次の図は、交差点モジュールで使用される重要な位置を示しています。各実線は ego 車両のフロントラインの位置を表し、対応するドットは車両フレームの実際の挿入停止点の位置、つまり後輪の中心を表しています。 ![data structure](./docs/intersection-stoplines.drawio.svg) -To precisely calculate stop positions, the path is interpolated at the certain interval of `common.path_interpolation_ds`. +停止位置を正確に計算するために、経路は `common.path_interpolation_ds` の特定の間隔で補間されます。 -- closest_idx denotes the path point index which is closest to ego position. -- first_attention_stopline denotes the first path point where ego footprint intersects with the attention_area. -- If a stopline is associated with the intersection lane on the map, that line is used as default_stopline for collision detection. Otherwise the point which is `common.default_stopline_margin` meters behind first_attention_stopline is defined as default_stopline instead. -- occlusion_peeking_stopline is a bit ahead of first_attention_stopline as described later. -- occlusion_wo_tl_pass_judge_line is the first position where ego footprint intersects with the centerline of the first attention_area lane. +- closest_idx は、ego 位置に最も近い経路ポイントインデックスを示します。 +- first_attention_stopline は、ego フットプリントが attention_area と交差する最初の経路ポイントを示します。 +- 停止線がマップ上の交差点車線に関連付けられている場合、その線は衝突検出用の default_stopline として使用されます。そうでない場合、first_attention_stopline の `common.default_stopline_margin` メートル後ろの点が代わりに default_stopline として定義されます。 +- occlusion_peeking_stopline は、後で説明するように、first_attention_stopline より少し先です。 +- occlusion_wo_tl_pass_judge_line は、ego フットプリントが最初の attention_area 車線のセンターラインと交差する最初の位置です。 -## Target objects +## 標的オブジェクト -For [stuck vehicle detection](#stuck-vehicle-detection) and [collision detection](#collision-detection), this module checks **car**, **bus**, **truck**, **trailer**, **motor cycle**, and **bicycle** type objects. +[立ち往生車両の検出](#stuck-vehicle-detection) と [衝突検出](#collision-detection) の場合、このモジュールは **乗用車**、**バス**、**トラック**、**トレーラー**、**モーターサイクル**、**自転車** タイプのオブジェクトを確認します。 -Objects that satisfy all of the following conditions are considered as target objects (possible collision objects): +次の条件をすべて満たすオブジェクトは、標的オブジェクト(衝突の可能性のあるオブジェクト)と見なされます。 -- The center of the object is **within a certain distance** from the attention lane (threshold = `common.attention_area_margin`) . - - (Optional condition) The center of the object is in the **intersection area**. - - To deal with objects that is in the area not covered by the lanelets in the intersection. -- The posture of object is **the same direction as the attention lane** (threshold = `common.attention_area_angle_threshold`). -- Not being **in the adjacent lanes of ego**. +- オブジェクトの中心は注目車線から **一定の距離以内** にある (しきい値 = `common.attention_area_margin`)。 + - (オプションの条件) オブジェクトの中心が **交差点エリア** にある。 + - 交差点内の車線でカバーされていない領域にあるオブジェクトを処理するため。 +- オブジェクトの姿勢は **注目車線と同じ方向** である (しきい値 = `common.attention_area_angle_threshold`)。 +- ego の **隣接車線にいない**。 -## Overview of decision process +## 意思決定プロセスの概要 -There are several behaviors depending on the scene. +シーンに応じて、いくつかの動作があります。 + +| 挙動 | シーン | アクション | +| ---------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| 安全 | 自車が遮蔽と衝突を検出しない | 自車が交差点を通過する | +| 停止維持 | 交差点の出口が渋滞によって塞がれている | 自車が交差点または注意領域の境界手前で停止する | +| 譲歩による停止 | 他の車両が自車に道を譲るために停車する | 自車が交差点または注意領域の境界手前で停止する | +| 遮蔽なし衝突停止 | 自車が遮蔽を検出しないが衝突を検出する | 自車がデフォルトの停止線で停止する | +| 遮蔽範囲前に待機する | 交差点への進入時に自車が遮蔽を検出する | 自車が最初にデフォルトの停止線で停止する | +| 遮蔽のほうを伺う | 自車が遮蔽を検出し、視野内では衝突を検出しない(遮蔽範囲前に待機した後) | 自車が注意領域の境界にゆっくりと接近する | +| 遮蔽により衝突停止 | 自車が遮蔽と衝突の両方を検出する(遮蔽範囲前に待機した後) | 自車が直ちに停止する | +| 完全優先 | 自車が赤/矢印信号によって完全に優先されている | 自車は交差点内でまだ走行中の車両のみを考慮する。遮蔽は無視される | +| 通過判断線通過 | 自車がすでに注意領域内にある、または注意領域の境界手前で停止できないことを検出している | 自車は衝突/遮蔽を検出せず、交差点を通過する | -| behavior | scene | action | -| ------------------------ | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| Safe | Ego detected no occlusion and collision | Ego passes the intersection | -| StuckStop | The exit of the intersection is blocked by traffic jam | Ego stops before the intersection or the boundary of attention area | -| YieldStuck | Another vehicle stops to yield ego | Ego stops before the intersection or the boundary of attention area | -| NonOccludedCollisionStop | Ego detects no occlusion but detects collision | Ego stops at default_stopline | -| FirstWaitBeforeOcclusion | Ego detected occlusion when entering the intersection | Ego stops at default_stopline at first | -| PeekingTowardOcclusion | Ego detected occlusion and but no collision within the FOV (after FirstWaitBeforeOcclusion) | Ego approaches the boundary of the attention area slowly | -| OccludedCollisionStop | Ego detected both occlusion and collision (after FirstWaitBeforeOcclusion) | Ego stops immediately | -| FullyPrioritized | Ego is fully prioritized by the RED/Arrow signal | Ego only cares vehicles still running inside the intersection. Occlusion is ignored | -| OverPassJudgeLine | Ego is already inside the attention area and/or cannot stop before the boundary of attention area | Ego does not detect collision/occlusion anymore and passes the intersection | ```plantuml @startuml @@ -178,38 +179,39 @@ OccludedCollisionStop --> PeekingTowardOcclusion: IF not collision detected @enduml ``` -## Stuck Vehicle Detection +## スタック車両検出 -If there is any object on the path inside the intersection and at the exit of the intersection (up to `stuck_vehicle.stuck_vehicle_detect_dist`) lane and its velocity is less than the threshold (`stuck_vehicle.stuck_vehicle_velocity_threshold`), the object is regarded as a stuck vehicle. If stuck vehicles exist, this module inserts a stopline a certain distance (=`default_stopline_margin`) before the overlapped region with other lanes. The stuck vehicle detection area is generated based on the planned path, so the stuck vehicle stopline is not inserted if the upstream module generated an avoidance path. +交差点内部および交差点出口(最大 `stuck_vehicle.stuck_vehicle_detect_dist` レーン)の経路上にオブジェクトがあり、その速度がしきい値(`stuck_vehicle.stuck_vehicle_velocity_threshold`)未満の場合、オブジェクトはスタック車両とみなされます。スタック車両が存在する場合、このモジュールは他のレーンとの重複領域より手前の特定の距離(=`default_stopline_margin`)に停止線を挿入します。スタック車両検出領域は計画された経路に基づいて生成されるため、上流のモジュールが回避経路を生成している場合はスタック車両停止線は挿入されません。 ![stuck_vehicle_detection](./docs/stuck-vehicle.drawio.svg) -## Yield stuck vehicle detection +## 一時停止車両検出 -If there is any stopped object on the attention lanelet between the intersection point with ego path and the position which is `yield_stuck.distance_threshold` before that position, the object is regarded as yielding to ego vehicle. In this case ego is given the right-of-way by the yielding object but this module inserts stopline to prevent entry into the intersection. This scene happens when the object is yielding against ego or the object is waiting before the crosswalk around the exit of the intersection. +エゴパスとの交差点点と、その位置から `yield_stuck.distance_threshold` 前の位置の間の注意レーンの停止オブジェクトがある場合、オブジェクトはエゴ車両に対して一時停止していると見なされます。この場合、エゴは一時停止オブジェクトによって優先権を与えられますが、このモジュールは交差点への進入を防ぐ停止線を挿入します。このシーンは、オブジェクトがエゴに対して一時停止しているか、交差点の出口付近の横断歩道前でオブジェクトが待機しているときに発生します。 ![yield_stuck_detection](./docs/yield-stuck.drawio.svg) -## Collision detection +## 衝突検出 + +エゴが交差点を安全に通過できるかどうかを判断するために、次の処理がターゲットオブジェクトに対して行われます。エゴが十分な余裕をもって交差点を通過できないと判断された場合、このモジュールは経路上に停止線を挿入します。 -The following process is performed for the targets objects to determine whether ego can pass the intersection safely. If it is judged that ego cannot pass the intersection with enough margin, this module inserts a stopline on the path. +1. 予測された経路時間ステップから、オブジェクトが最初にエゴパスと交差する時間`t`を予測します。信頼度が`collision_detection.min_predicted_path_confidence`よりも大きい予測のみが使用されます。 +2. 以下のプロセスで予測された経路とエゴの予測された経路間の衝突を検出します + 1. [$t$ - `collision_detection.collision_start_margin_time`, $t$ + `collision_detection.collision_end_margin_time`]の衝突インターバルを計算します + 2. 平滑化された速度プロファイルによって取得された(時間、距離)の配列から、衝突インターバル中のエゴ通過領域を計算します。 + 3. エゴ通過領域とオブジェクトの予測パスインターバルが衝突するかどうかをチェックします +3. 衝突が検出された場合、モジュールは停止線を挿入します +4. エゴが[通過判定ライン](#通過判定ライン)を超えている場合、急ブレーキや交差点の中央での不要な停止を避けるために、衝突チェックはスキップされます -1. predict the time $t$ when the object intersects with ego path for the first time from the predicted path time step. Only the predicted whose confidence is greater than `collision_detection.min_predicted_path_confidence` is used. -2. detect collision between the predicted path and ego's predicted path in the following process - 1. calculate the collision interval of [$t$ - `collision_detection.collision_start_margin_time`, $t$ + `collision_detection.collision_end_margin_time`] - 2. calculate the passing area of ego during the collision interval from the array of (time, distance) obtained by smoothed velocity profile - 3. check if ego passing area and object predicted path interval collides -3. if collision is detected, the module inserts a stopline -4. if ego is over the [pass_judge_line](#pass-judge-line), collision checking is skipped to avoid sudden braking and/or unnecessary stop in the middle of the intersection +パラメータ`collision_detection.collision_start_margin_time`と`collision_detection.collision_end_margin_time`は次のように解釈できます。 -The parameters `collision_detection.collision_start_margin_time` and `collision_detection.collision_end_margin_time` can be interpreted as follows: +- エゴがターゲットオブジェクトよりも早く交差点を通過する場合は、2つの間の時間差が`collision_detection.collision_start_margin_time`未満の場合に衝突が検出されます。 +- エゴがターゲットオブジェクトよりも遅く交差点を通過する場合は、2つの間の時間差が`collision_detection.collision_end_margin_time`未満の場合に衝突が検出されます。 -- If ego was to pass the intersection earlier than the target object, collision would be detected if the time difference between the two was less than `collision_detection.collision_start_margin_time`. -- If ego was to pass the intersection later than the target object, collision would be detected if the time difference between the two was less than `collision_detection.collision_end_margin_time`. +衝突が検出されると、状態はすぐに「STOP」に移行します。一方、決定のチャタリングを防ぐために、セーフな判断が一定期間`collision_detection.collision_detection_hold_time`にわたって続かない限り、状態は「GO」に移行しません。 -If collision is detected, the state transits to "STOP" immediately. On the other hand, the state does not transit to "GO" unless safe judgement continues for a certain period `collision_detection.collision_detection_hold_time` to prevent the chattering of decisions. +現在、交差点モジュールは`motion_velocity_smoother`機能を使用して、縦方向/横方向の制約の下で交差点レーンに沿ったエゴの速度プロファイルを正確に計算しています。フラグ`collision_detection.velocity_profile.use_upstream`がtrueの場合、元々のパスのターゲット速度プロファイルが使用されます。そうでない場合、ターゲット速度は`collision.velocity_profile.default_velocity`に設定されます。軌跡平滑化処理では、エゴの軌跡ポイントで/その前のターゲット速度は、エゴの現在の速度に設定されます。滑らかにされた軌跡はその後、現在のエゴの位置から経路上の各軌跡ポイントへの到着時間を示す(時間、距離)の配列に変換されます。レーンIDを`debug.ttc`に追加して実行することでこの配列を視覚化できます。 -Currently, the intersection module uses `motion_velocity_smoother` feature to precisely calculate ego velocity profile along the intersection lane under longitudinal/lateral constraints. If the flag `collision_detection.velocity_profile.use_upstream` is true, the target velocity profile of the original path is used. Otherwise the target velocity is set to `collision.velocity_profile.default_velocity`. In the trajectory smoothing process the target velocity at/before ego trajectory points are set to ego current velocity. The smoothed trajectory is then converted to an array of (time, distance) which indicates the arrival time to each trajectory point on the path from current ego position. You can visualize this array by adding the lane id to `debug.ttc` and running ```bash ros2 run behavior_velocity_intersection_module ttc.py --lane_id @@ -217,129 +219,126 @@ ros2 run behavior_velocity_intersection_module ttc.py --lane_id ![ego ttc profile](./docs/ttc.gif) -### about use_upstream_velocity flag +### upstream_velocity フラグについて -There are some use cases where ego should check collision before entering the intersection considering the temporal stop by walkway/crosswalk module around the exit of the intersection, because their stop position can be inside the intersection and it could bother upcoming vehicles. By setting the flag `collision_detection.velocity_profile.use_upstream` to true and running the walkway/crosswalk module prior to this module, ego velocity profile is calculated considering their velocity and stop positions. +一部のユースケースでは、交差点の出口付近の歩道/横断歩道モジュールにより一時停止が考慮されるため、その停止位置が交差点内にある可能性があり、進行中の車両に影響を与える可能性があるため、ego が交差点に入る前に衝突を確認する必要があります。フラグ `collision_detection.velocity_profile.use_upstream` を true に設定し、このモジュールより前に歩道/横断歩道モジュールを実行すると、ego の速度プロファイルがそれらの速度と停止位置を考慮して計算されます。 -As illustrated in below figure if upstream module inserted a stopline, ego position profile will remain there for the infinite time, thus it leads to the judgement that ego cannot exit the intersection during the interval [$t$ - `collision_detection.collision_start_margin_time`, $t$ + `collision_detection.collision_end_margin_time`]. In this way this feature considers possible collision for the infinite time if stoplines exist ahead of ego position (practically the prediction horizon is limited so the collision check horizon is bounded). +下図に示すように、アップストリームモジュールが停止線を追加した場合、ego の位置プロファイルはそこには無限に残り、このため ego が [$t$ - `collision_detection.collision_start_margin_time`, $t$ + `collision_detection.collision_end_margin_time`] の間隔で交差点から出られないと判断されます。この方法では、ego の位置より先に停止線が存在する場合、無限に衝突の可能性を考慮します(実際には予測の範囲は制限されているため、衝突チェックの範囲は限定されています)。 ![upstream_velocity](./docs/upstream-velocity.drawio.svg) -## Occlusion detection +## オクルージョン検出 -If the flag `occlusion.enable` is true this module checks if there is sufficient field of view (FOV) on the attention area up to `occlusion.occlusion_attention_area_length`. If FOV is not clear enough ego first makes a brief stop at default_stopline for `occlusion.temporal_stop_time_before_peeking`, and then slowly creeps toward occlusion_peeking_stopline. If `occlusion.creep_during_peeking.enable` is true `occlusion.creep_during_peeking.creep_velocity` is inserted up to occlusion_peeking_stopline. Otherwise only stop line is inserted. +フラグ `occlusion.enable` が true の場合、このモジュールは `occlusion.occlusion_attention_area_length` までの注目範囲の視野 (FOV) が十分にあるかどうかを確認します。FOV が十分にクリアでない場合、ego は最初に `occlusion.temporal_stop_time_before_peeking` の間 default_stopline で短時間停止し、その後オクルージョン_ピーキング_ストップラインにゆっくりと進みます。`occlusion.creep_during_peeking.enable` が true の場合、`occlusion.creep_during_peeking.creep_velocity` がオクルージョン_ピーキング_ストップラインまで挿入されます。そうでない場合、停止線のみが挿入されます。 -During the creeping if collision is detected this module inserts a stop line in front of ego immediately, and if the FOV gets sufficiently clear the intersection_occlusion wall will disappear. If occlusion is cleared and no collision is detected ego will pass the intersection. +忍び寄っている間に衝突が検出された場合、このモジュールはすぐに ego の前に停止線を追加し、FOV が十分にクリアになると交差点_オクルージョン壁は消えます。オクルージョンがクリアされ、衝突が検出されなかった場合、ego は交差点を通過します。 -The occlusion is detected as the common area of occlusion attention area(which is partially the same as the normal attention area) and the unknown cells of the occupancy grid map. The occupancy grid map is denoised using morphology with the window size of `occlusion.denoise_kernel`. The occlusion attention area lanes are discretized to line strings and they are used to generate a grid whose each cell represents the distance from ego path along the lane as shown below. +オクルージョンは、オクルージョン注目範囲(通常注目範囲と部分的に同じ)と占有グリッドマップの不明セルとの共通領域として検出されます。占有グリッドマップは `occlusion.denoise_kernel` のウィンドウサイズを使用して形態学を用いてノイズを除去されます。オクルージョン注目範囲のレーンは直線ストリングに離散化され、それらを使用して、下の図のように各セルがレーンに沿った ego パスの距離を表すグリッドを生成します。 ![occlusion_detection](./docs/occlusion_grid.drawio.svg) -If the nearest occlusion cell value is below the threshold `occlusion.occlusion_required_clearance_distance`, it means that the FOV of ego is not clear. It is expected that the occlusion gets cleared as the vehicle approaches the occlusion peeking stop line. +最も近いオクルージョンセル値がしきい値 `occlusion.occlusion_required_clearance_distance` よりも低い場合、ego の FOV はクリアではないことを意味します。オクルージョンは、車両がオクルージョン監視停止線に近づくとクリアされると予想されます。 -### Occlusion source estimation at intersection with traffic light +### 信号機のある交差点でのオクルージョンソースの推定 -At intersection with traffic light, the whereabout of occlusion is estimated by checking if there are any objects between ego and the nearest occlusion cell. While the occlusion is estimated to be caused by some object (DYNAMICALLY occluded), intersection_wall appears at all times. If no objects are found between ego and the nearest occlusion cell (STATICALLY occluded), after ego stopped for the duration of `occlusion.static_occlusion_with_traffic_light_timeout` plus `occlusion.occlusion_detection_hold_time`, occlusion is intentionally ignored to avoid stuck. +信号機のある交差点では、ego と最も近いオクルージョンセルとの間に物体があるかどうかをチェックすることで、オクルージョンの所在推定が行われます。オクルージョンが何らかの物体によって引き起こされていると推定される間 (動的にオクルージョンされる)、交差点_ウォールは常に表示されます。ego と最も近いオクルージョンセルとの間に物体が見つからない場合(静的にオクルージョンされる)、ego は `occlusion.static_occlusion_with_traffic_light_timeout` の期間と `occlusion.occlusion_detection_hold_time` の期間停止した後、意図的にオクルージョンを無視してスタックを回避します。 -![occlusion_detection](./docs/occlusion-with-tl.drawio.svg) - -The remaining time is visualized on the intersection_occlusion virtual wall. +残り時間は交差点_オクルージョン仮想ウォールに視覚化されます。 ![static-occlusion-timeout](./docs/static-occlusion-timeout.png) -### Occlusion handling at intersection without traffic light +### 信号機のない交差点でのオクルージョン処理 -At intersection without traffic light, if occlusion is detected, ego makes a brief stop at default_stopline and first_attention_stopline respectively. After stopping at the first_attention_area_stopline this module inserts `occlusion.absence_traffic_light.creep_velocity` velocity between ego and occlusion_wo_tl_pass_judge_line while occlusion is not cleared. If collision is detected, ego immediately stops. Once the occlusion is cleared or ego has passed occlusion_wo_tl_pass_judge_line this module does not detect collision and occlusion because ego footprint is already inside the intersection. +信号機のない交差点でオクルージョンが検出された場合、ego は default_stopline と first_attention_stopline でそれぞれ短時間停止します。first_attention_area_stopline で停止した後、このモジュールはオクルージョンがクリアされない間、ego と occlusion_wo_tl_pass_judge_line の間に `occlusion.absence_traffic_light.creep_velocity` の速度を挿入します。衝突が検出された場合、ego はすぐに停止します。オクルージョンがクリアされたか、ego が occlusion_wo_tl_pass_judge_line を通過すると、ego のフットプリントはすでに交差点内にあるため、このモジュールは衝突やオクルージョンを検出しません。 ![occlusion_detection](./docs/occlusion-without-tl.drawio.svg) -While ego is creeping, yellow intersection_wall appears in front ego. +ego が進んでいる間、黄色の交差点_ウォールが ego の前に表示されます。 ![occlusion-wo-tl-creeping](./docs/occlusion-wo-tl-creeping.png) -## Traffic signal specific behavior +## 交通信号固有の挙動 -### Collision detection +### 衝突検出 -TTC parameter varies depending on the traffic light color/shape as follows. +TTC パラメータは信号機の色や形状によって次のように変化します。 -| traffic light color | ttc(start) | ttc(end) | +| 交通信号色 | ttc(開始) | ttc(終了) | | ------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | | GREEN | `collision_detection.not_prioritized.collision_start_margin` | `collision_detection.not_prioritized.collision_end_margin` | | AMBER | `collision_detection.partially_prioritized.collision_start_end_margin` | `collision_detection.partially_prioritized.collision_start_end_margin` | | RED / Arrow | `collision_detection.fully_prioritized.collision_start_end_margin` | `collision_detection.fully_prioritized.collision_start_end_margin` | -### yield on GREEN +### グリーンスロー中での譲り -If the traffic light color changed to GREEN and ego approached the entry of the intersection lane within the distance `collision_detection.yield_on_green_traffic_light.distance_to_assigned_lanelet_start` and there is any object whose distance to its stopline is less than `collision_detection.yield_on_green_traffic_light.object_dist_to_stopline`, this module commands to stop for the duration of `collision_detection.yield_on_green_traffic_light.duration` at default_stopline. +信号がグリーンに変化し、自分車が交差点レーン入り口に `collision_detection.yield_on_green_traffic_light.distance_to_assigned_lanelet_start` 以内で接近し、ストップラインまでの距離が `collision_detection.yield_on_green_traffic_light.object_dist_to_stopline` 未満のオブジェクトがある場合、このモジュールはデフォルト・ストップラインに `collision_detection.yield_on_green_traffic_light.duration` 間停止することを指示します。 -### skip on AMBER +### アンバー中でのスキップ -If the traffic light color is AMBER but the object is expected to stop before its stopline under the deceleration of `collision_detection.ignore_on_amber_traffic_light.object_expected_deceleration`, collision checking is skipped. +信号がアンバーですが、オブジェクトが `collision_detection.ignore_on_amber_traffic_light.object_expected_deceleration` の減速度でストップラインより手前で停止すると予想される場合、衝突チェックはスキップされます。 -### skip on RED +### レッド中でのスキップ -If the traffic light color is RED or Arrow signal is turned on, the attention lanes which are not conflicting with ego lane are not used for detection. And even if the object stops with a certain overshoot from its stopline, but its expected stop position under the deceleration of `collision_detection.ignore_on_amber_traffic_light.object_expected_deceleration` is more than the distance `collision_detection.ignore_on_red_traffic_light.object_margin_to_path` from collision point, the object is ignored. +信号がレッドまたは矢印信号が点灯している場合、自分車レーンと交差しない注意レーンは検出に使用されません。さらに、オブジェクトがストップラインからある程度オーバーシュートして停止する場合でも、`collision_detection.ignore_on_amber_traffic_light.object_expected_deceleration` の減速度で予想される停止位置が衝突地点から `collision_detection.ignore_on_red_traffic_light.object_margin_to_path` 以上の距離にある場合、そのオブジェクトは無視されます。 -### Occlusion detection +### オクルージョン検出 -When the traffic light color/shape is RED/Arrow, occlusion detection is skipped. +信号の色/形状がレッド/矢印の場合、オクルージョン検出はスキップされます。 ![traffic-light-specific-behavior](./docs/traffic-light-specific-behavior.drawio.svg) -## Pass Judge Line - -Generally it is not tolerable for vehicles that have lower traffic priority to stop in the middle of the unprotected area in intersections, and they need to stop at the stop line beforehand if there will be any risk of collision, which introduces two requirements: +## パス判定線 -1. The vehicle must start braking before the boundary of the unprotected area at least by the braking distance if it is supposed to stop -2. The vehicle must recognize upcoming vehicles and check safety beforehand with enough braking distance margin if it is supposed to go - 1. And the SAFE decision must be absolutely certain and remain to be valid for the future horizon so that the safety condition will be always satisfied while ego is driving inside the unprotected area. -3. (TODO): Since it is almost impossible to make perfectly safe decision beforehand given the limited detection range/velocity tracking performance, intersection module should plan risk-evasive acceleration velocity profile AND/OR relax lateral acceleration limit while ego is driving inside the unprotected area, if the safety decision is "betrayed" later due to the following reasons: - 1. The situation _turned out to be dangerous_ later, mainly because velocity tracking was underestimated or the object accelerated beyond TTC margin - 2. The situation _turned dangerous_ later, mainly because the object is suddenly detected out of nowhere +一般的に、交差点内の無保護領域の真ん中に交通優先順位の低い車両が停車することは許容されず、衝突の危険がある場合はその前に停止する必要があります。これにより次の2つの要件が生じます。 -The position which is before the boundary of unprotected area by the braking distance which is obtained by +1. 車両は、停止する場合、少なくとも制動距離分、無保護領域の境界線より手前でブレーキを開始する必要がある +2. 車両は、走行する場合、十分な制動距離マージンで先行車両を認識し、安全性を事前に確認する必要がある + 1. そして、安全の判断は絶対に確実であり、将来の予測期間にわたって有効である必要がある。そのため、安全条件は、自分車が無保護領域内を走行している間、常に満たされる必要があります。 +3. (TODO): 制限された検出範囲/速度追跡性能を考慮すると、完璧に安全な判断を事前に下すことはほとんど不可能であるため、交差点モジュールは、安全上の判断が次の理由により後に "裏切られた" 場合に、リスク回避的加速速度プロファイルの計画と/または横方向加速度制限の緩和を行う必要があります。 + 1. 状況がその後に危険になった場合、主に速度追跡が過小評価されたか、またはオブジェクトが TTC マージンを超えて加速したため + 2. 状況がその後に危険になった場合、主にオブジェクトが突然どこからともなく検出されたため $$ \dfrac{v_{\mathrm{ego}}^{2}}{2a_{\mathrm{max}}} + v_{\mathrm{ego}} * t_{\mathrm{delay}} $$ -is called pass_judge_line, and safety decision must be made before ego passes this position because ego does not stop anymore. +によって得られる制動距離分、無保護領域の境界線より手前の位置をパス判定線と呼び、自分車がこの位置を通過する前に安全上の判断が行われなければなりません。自分車はこれ以上停車しなくなるからです。 -1st_pass_judge_line is before the first upcoming lane, and at intersections with multiple upcoming lanes, 2nd_pass_judge_line is defined as the position which is before the centerline of the first attention lane by the braking distance. 1st/2nd_pass_judge_line are illustrated in the following figure. +1st_pass_判定線は最初の先行レーンより手前にあり、複数の先行レーンがある交差点では、2nd_pass_判定線は制動距離分、最初の注意レーンのセンターラインより手前の位置として定義されます。1st/2nd_pass_判定線は次の図で示されています。 ![pass-judge-line](./docs/pass-judge-line.drawio.svg) -Intersection module will command to GO if +交差点モジュールは次の場合に走行を指示します。 -- ego is over default_stopline(or `common.enable_pass_judge_before_default_stopline` is true) AND -- ego is over 1st_pass judge line AND -- ego judged SAFE previously AND -- (ego is over 2nd_pass_judge_line OR ego is between 1st and 2nd pass_judge_line but most probable collision is expected to happen in the 1st attention lane) +- 自分車がデフォルト・ストップラインを越えている場合 (または `common.enable_pass_judge_before_default_stopline` が true の場合) +- 自分車が 1st_pass_判定線を越えている場合 +- 自分車が以前に SAFE と判断されている場合 +- (自分車が 2nd_pass_判定線を越えている場合、または自分車が 1st と 2nd のパス判定線の間にあるが、最も可能性の高い衝突が 1st の注意レーンで発生すると予想される場合) -because it is expected to stop or continue stop decision if +以下の場合は、停止するか停止判断を継続すると予想されるためです。 -1. ego is before default_stopline && `common.enable_pass_judge_before_default_stopline` is false OR - 1. reason: default_stopline is defined on the map and should be respected -2. ego is before 1st_pass_judge_line OR - 1. reason: it has enough braking distance margin -3. ego judged UNSAFE previously - 1. reason: ego is now trying to stop and should continue stop decision if collision is detected in later calculation -4. (ego is between 1st and 2nd pass_judge_line and the most probable collision is expected to happen in the 2nd attention lane) +1. 自分車がデフォルト・ストップラインより前で `common.enable_pass_judge_before_default_stopline` が false の場合 + 1. 理由: デフォルト・ストップラインはマップ上に定義されており、尊重する必要があります +2. 自分車が 1st_pass_判定線より前 + 1. 理由: 制動距離マージンが十分にある +3. 自分車は以前に UNSAFE と判断されました + 1. 理由: 自分車は現在停止しようとしており、減速中に 1st_pass_判定線を越えたとしても、衝突が検出されたら停止判断を続ける必要があります +4. (自分車は 1st と 2nd のパス判定線の間で、最も可能性の高い衝突が 2nd の注意レーンで発生すると予想される) -For the 3rd condition, it is possible that ego stops with some overshoot to the unprotected area while it is trying to stop for collision detection, because ego should keep stop decision while UNSAFE decision is made even if it passed 1st_pass_judge_line during deceleration. +3 番目の条件では、自分車が衝突検出のために停止しようとしている場合、無保護領域にオーバーシュートして停止する可能性があります。これは、自分車が減速中に 1st_pass_判定線を越えた場合でも UNSAFE 判断が行われたままで、停止判断を続ける必要があるためです。 -For the 4th condition, at intersections with 2nd attention lane, even if ego is over the 1st pass_judge_line, still intersection module commands to stop if the most probable collision is expected to happen in the 2nd attention lane. +交差点の4番目の条件では、2番目の注意車線が交わる交差点で、自車が1番目のpass_judge_lineを超えたとしても、2番目の注意車線で最も衝突が起こりそうな場合は、交差点モジュールは停止するように指示します。 -Also if `occlusion.enable` is true, the position of 1st_pass_judge line changes to occlusion_peeking_stopline if ego passed the original 1st_pass_judge_line position while ego is peeking. Otherwise ego could inadvertently judge that it passed 1st_pass_judge during peeking and then abort peeking. +また、`occlusion.enable`がtrueの場合、1st_pass_judgeラインの位置は、自車がのぞき見中に元の1st_pass_judgeラインの位置を通過した場合は、occlusion_peeking_stoplineに変更されます。そうしないと、自車がのぞき見中に無意識のうちに1st_pass_judgeを超えたと判断し、のぞき見を中止してしまう可能性があります。 -## Data Structure +## データ構造 -Each data structure is defined in `util_type.hpp`. +各データ構造は`util_type.hpp`で定義されています。 ![data-structure](./docs/data-structure.drawio.svg) ### `IntersectionLanelets` + ```plantuml @startuml entity IntersectionLanelets { @@ -364,7 +363,8 @@ entity IntersectionLanelets { ### `IntersectionStopLines` -Each stop lines are generated from interpolated path points to obtain precise positions. +各停止線は、補間されたパス点から生成され、正確な位置を取得します。 + ```plantuml @startuml @@ -392,7 +392,8 @@ entity IntersectionStopLines { ### `TargetObject` -`TargetObject` holds the object, its belonging lane and corresponding stopline information. +`TargetObject` は、対象物、その所属車線、および対応する停止線情報を保持します。 + ```plantuml @startuml @@ -409,121 +410,129 @@ entity TargetObject { @enduml ``` -## Module Parameters +## モジュールパラメータ -### common +### 共通 -| Parameter | Type | Description | -| -------------------------------------------- | ------ | -------------------------------------------------------------------------------- | -| `.attention_area_length` | double | [m] range for object detection | -| `.attention_area_margin` | double | [m] margin for expanding attention area width | -| `.attention_area_angle_threshold` | double | [rad] threshold of angle difference between the detected object and lane | -| `.use_intersection_area` | bool | [-] flag to use intersection_area for collision detection | -| `.default_stopline_margin` | double | [m] margin before_stop_line | -| `.stopline_overshoot_margin` | double | [m] margin for the overshoot from stopline | -| `.max_accel` | double | [m/ss] max acceleration for stop | -| `.max_jerk` | double | [m/sss] max jerk for stop | -| `.delay_response_time` | double | [s] action delay before stop | -| `.enable_pass_judge_before_default_stopline` | bool | [-] flag not to stop before default_stopline even if ego is over pass_judge_line | +| パラメータ | タイプ | 説明 | +| ------------------------------------------- | ------ | ---------------------------------------- | +| `.attention_area_length` | double | [m] 物体検出範囲 | +| `.attention_area_margin` | double | [m] アテンションエリアの幅の拡張マージン | +| `.attention_area_angle_threshold` | double | [rad] 検出オブジェクトと車線の角度差の閾値 | +| `.use_intersection_area` | bool | [-] 衝突検出に交差領域を使用するフラグ | +| `.default_stopline_margin` | double | [m] 停止線手前マージン | +| `.stopline_overshoot_margin` | double | [m] 停止線への進入マージン | +| `.max_accel` | double | [m/ss] 停止時の最大加速度 | +| `.max_jerk` | double | [m/sss] 停止時の最大ジャーク | +| `.delay_response_time` | double | [s] 停止前のアクション遅延時間 | +| `.enable_pass_judge_before_default_stopline` | bool | [-] ego が pass_judge_line を超えていても default_stopline で停止しないフラグ | ### stuck_vehicle/yield_stuck -| Parameter | Type | Description | -| ------------------------------------------------ | ------ | ---------------------------------------------------------------------------- | -| `stuck_vehicle.turn_direction` | - | [-] turn_direction specifier for stuck vehicle detection | -| `stuck_vehicle.stuck_vehicle_detect_dist` | double | [m] length toward from the exit of intersection for stuck vehicle detection | -| `stuck_vehicle.stuck_vehicle_velocity_threshold` | double | [m/s] velocity threshold for stuck vehicle detection | -| `yield_stuck.distance_threshold` | double | [m/s] distance threshold of yield stuck vehicle from ego path along the lane | +自動車が駐車されたり、故障したりして動けなくなっている車両に遭遇した場合の対処法を定義する。 -### collision_detection +| パラメータ | 型 | 説明 | +|---|---|---| +| `stuck_vehicle.turn_direction` | - | [-] 自動停止車両検出のための turn_direction 指定 | +| `stuck_vehicle.stuck_vehicle_detect_dist` | double | [m] 自動停止車両検出のための交差点出口からの方向 | +| `stuck_vehicle.stuck_vehicle_velocity_threshold` | double | [m/s] 自動停止車両検出のための速度しきい値 | +| `yield_stuck.distance_threshold` | double | [m/s] 自車経路に沿って停止車両から ego まで距離しきい値 | -| Parameter | Type | Description | -| --------------------------------------------- | ------ | ------------------------------------------------------------------------------------ | -| `.consider_wrong_direction_vehicle` | bool | [-] flag to detect objects in the wrong direction | -| `.collision_detection_hold_time` | double | [s] hold time of collision detection | -| `.min_predicted_path_confidence` | double | [-] minimum confidence value of predicted path to use for collision detection | -| `.keep_detection_velocity_threshold` | double | [s] ego velocity threshold for continuing collision detection before pass judge line | -| `.velocity_profile.use_upstream` | bool | [-] flag to use velocity profile planned by upstream modules | -| `.velocity_profile.minimum_upstream_velocity` | double | [m/s] minimum velocity of upstream velocity profile to avoid zero division | -| `.velocity_profile.default_velocity` | double | [m/s] constant velocity profile when use_upstream is false | -| `.velocity_profile.minimum_default_velocity` | double | [m/s] minimum velocity of default velocity profile to avoid zero division | -| `.yield_on_green_traffic_light` | - | [-] [description](#yield-on-green) | -| `.ignore_amber_traffic_light` | - | [-] [description](#skip-on-amber) | -| `.ignore_on_red_traffic_light` | - | [-] [description](#skip-on-red) | +### 衝突検出 -### occlusion +このコンポーネントは、自車位置、検出可能なオブジェクト、およびPlanningモジュールによって生成されたパスから、衝突のリスクを評価します。 +衝突リスク評価は、衝突確率とその衝突までの時間、衝突した場合の逸脱量を考慮して行われます。 +衝突は、自車および周囲のオブジェクトの間の距離が一定のしきい値を下回った場合に検出されます。 +検出された衝突は、`post resampling`によって調整されます。 -| Parameter | Type | Description | -| ---------------------------------------------- | -------- | ------------------------------------------------------------------------------------------- | -| `.enable` | bool | [-] flag to calculate occlusion detection | -| `.occlusion_attention_area_length` | double | [m] the length of attention are for occlusion detection | -| `.free_space_max` | int | [-] maximum value of occupancy grid cell to treat at occluded | -| `.occupied_min` | int | [-] minimum value of occupancy grid cell to treat at occluded | -| `.denoise_kernel` | double | [m] morphology window size for preprocessing raw occupancy grid | -| `.attention_lane_crop_curvature_threshold` | double | [m] curvature threshold for trimming curved part of the lane | -| `.attention_lane_crop_curvature_ds` | double | [m] discretization interval of centerline for lane curvature calculation | -| `.creep_during_peeking.enable` | bool | [-] flag to insert `creep_velocity` while peeking to intersection occlusion stopline | -| `.creep_during_peeking.creep_velocity` | double | [m/s] the command velocity while peeking to intersection occlusion stopline | -| `.peeking_offset` | double | [m] the offset of the front of the vehicle into the attention area for peeking to occlusion | -| `.occlusion_required_clearance_distance` | double | [m] threshold for the distance to nearest occlusion cell from ego path | -| `.possible_object_bbox` | [double] | [m] minimum bounding box size for checking if occlusion polygon is small enough | -| `.ignore_parked_vehicle_speed_threshold` | double | [m/s] velocity threshold for checking parked vehicle | -| `.occlusion_detection_hold_time` | double | [s] hold time of occlusion detection | -| `.temporal_stop_time_before_peeking` | double | [s] temporal stop duration at default_stopline before starting peeking | -| `.temporal_stop_before_attention_area` | bool | [-] flag to temporarily stop at first_attention_stopline before peeking into attention_area | -| `.creep_velocity_without_traffic_light` | double | [m/s] creep velocity to occlusion_wo_tl_pass_judge_line | -| `.static_occlusion_with_traffic_light_timeout` | double | [s] the timeout duration for ignoring static occlusion at intersection with traffic light | +| パラメータ | 種類 | 説明 | +|---|---|---| +| `.consider_wrong_direction_vehicle` | bool | [-] 逆走車両を検出するためのフラグ | +| `.collision_detection_hold_time` | double | [s] 衝突検出のホールド時間 | +| `.min_predicted_path_confidence` | double | [-] 衝突検出に使用される予測パスの最小信頼値 | +| `.keep_detection_velocity_threshold` | double | [s] パスジャッジラインを通過するまでの衝突検出を継続するための自車速度閾値 | +| `.velocity_profile.use_upstream` | bool | [-] 上流モジュールで計画された速度プロファイルを使用するためのフラグ | +| `.velocity_profile.minimum_upstream_velocity` | double | [m/s] ゼロ除算を回避するための上流速度プロファイルの最小速度 | +| `.velocity_profile.default_velocity` | double | [m/s] use_upstreamがfalseの場合の一定速度プロファイル | +| `.velocity_profile.minimum_default_velocity` | double | [m/s] ゼロ除算を回避するためのデフォルト速度プロファイルの最小速度 | +| `.yield_on_green_traffic_light` | - | [-] [説明](#yield-on-green) | +| `.ignore_amber_traffic_light` | - | [-] [説明](#skip-on-amber) | +| `.ignore_on_red_traffic_light` | - | [-] [説明](#skip-on-red) | -## Trouble shooting +### 閉塞 -### Intersection module stops against unrelated vehicles +| パラメータ | 型 | 説明 | +| --------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------- | +| `.enable` | bool | [-] オクルージョン検出を計算するフラグ | +| `.occlusion_attention_area_length` | double | [m] オクルージョン検出のための注目領域の長さ | +| `.free_space_max` | int | [-] オクルージョンとして扱うために、占有グリッドセルの最大値 | +| `.occupied_min` | int | [-] オクルージョンとして扱うために、占有グリッドセルの最小値 | +| `.denoise_kernel` | double | [m] 生の占有グリッドを前処理するための形態学的ウィンドウサイズ | +| `.attention_lane_crop_curvature_threshold` | double | [m] レーンの曲線部を切り取るための曲率のしきい値 | +| `.attention_lane_crop_curvature_ds` | double | [m] レーンの曲率を計算するためのセンターラインの離散化間隔 | +| `.creep_during_peeking.enable` | bool | [-] 交差点のオクルージョン停止線にピーキング中に `creep_velocity` を挿入するためのフラグ | +| `.creep_during_peeking.creep_velocity` | double | [m/s] 交差点のオクルージョン停止線にピーキング中に使用するコマンド速度 | +| `.peeking_offset` | double | [m] ピーキング中のオクルージョンのために、車両前面を注意領域にオフセットする距離 | +| `.occlusion_required_clearance_distance` | double | [m] エゴパスからの最寄りのオクルージョンセルまでの距離のしきい値 | +| `.possible_object_bbox` | [double] | [m] オクルージョンポリゴンが十分に小さいかどうかを確認するための最小バウンディングボックスサイズ | +| `.ignore_parked_vehicle_speed_threshold` | double | [m/s] 駐車車両の確認のための速度しきい値 | +| `.occlusion_detection_hold_time` | double | [s] オクルージョン検出のホールド時間 | +| `.temporal_stop_time_before_peeking` | double | [s] ピーキングを開始する前に、`default_stopline` でのタイムスタンプの停止時間 | +| `.temporal_stop_before_attention_area` | bool | [-] `attention_area` にピーキングする前に、`first_attention_stopline` で一時停止するフラグ | +| `.creep_velocity_without_traffic_light` | double | [m/s] `occlusion_wo_tl_pass_judge_line` へのクリープ速度 | +| `.static_occlusion_with_traffic_light_timeout` | double | [s] 交通信号のある交差点での静的オクルージョンを無視するためのタイムアウトの期間 | -In this case, first visualize `/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection` topic and check the `attention_area` polygon. Intersection module performs collision checking for vehicles running on this polygon, so if it extends to unintended lanes, it needs to have [RightOfWay tag](#how-towhy-set-rightofway-tag). +## トラブルシューティング -By lowering `common.attention_area_length` you can check which lanes are conflicting with the intersection lane. Then set part of the conflicting lanes as the yield_lane. +### 交差点モジュールが関係のない車両に対して停止してしまう -### The stop line of intersection is chattering +この場合は、まず `/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection` トピックを視覚化し、`attention_area` ポリゴンを確認します。交差点モジュールはこのポリゴン上で走行する車両に対して衝突チェックを実行するため、意図しない車線にまで拡張されている場合は、[RightOfWay タグ](#how-towhy-set-rightofway-tag) を付ける必要があります。 -The parameter `collision_detection.collision_detection_hold_time` suppresses the chattering by keeping UNSAFE decision for this duration until SAFE decision is finally made. The role of this parameter is to account for unstable detection/tracking of objects. By increasing this value you can suppress the chattering. However it could elongate the stopping duration excessively. +`common.attention_area_length` を下げることで、どの車線が交差点車線とコンフリクトしているかを調べることができます。次に、コンフリクトしている車線の部分を Yield Lane として設定します。 -If the chattering arises from the acceleration/deceleration of target vehicles, increase `collision_detection.collision_detection.collision_end_margin_time` and/or `collision_detection.collision_detection.collision_end_margin_time`. +### 交差点の停止線がフラフラする -### The stop line is released too fast/slow +パラメータ `collision_detection.collision_detection_hold_time` は、SAFE 決定が最終的に行われるまで UNSAFE 決定をこの時間保持することでフラッターを抑えます。このパラメータの役割は、対象物の不安定な検出/追跡を考慮することです。この値を増やすことでチャタリングを抑えることができます。ただし、停止時間が過度に長くなる可能性があります。 -If the intersection wall appears too fast, or ego tends to stop too conservatively for upcoming vehicles, lower the parameter `collision_detection.collision_detection.collision_start_margin_time`. If it lasts too long after the target vehicle passed, then lower the parameter `collision_detection.collision_detection.collision_end_margin_time`. +チャタリングが対象車両の加速度/減速度に起因する場合は、`collision_detection.collision_detection.collision_end_margin_time` と/または `collision_detection.collision_detection.collision_end_margin_time` を増やします。 -### Ego suddenly stops at intersection with traffic light +### 停止線が早すぎたり遅すぎたり解除される -If the traffic light color changed from AMBER/RED to UNKNOWN, the intersection module works in the GREEN color mode. So collision and occlusion are likely to be detected again. +交差点壁があまりにも早く現れたり、自我は前方車両に対してあまりにも保守的に停止する傾向がある場合は、パラメータ `collision_detection.collision_detection.collision_start_margin_time` を下げます。対象車両が通過した後に停止が長すぎる場合は、パラメータ `collision_detection.collision_detection.collision_end_margin_time` を下げます。 -### Occlusion is detected overly +### 自己が信号のある交差点で突然停止する -You can check which areas are detected as occlusion by visualizing `/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection/occlusion_polygons`. +信号の色が AMBER/RED から UNKNOWN に変わると、交差点モジュールは GREEN カラーモードで動作します。したがって、衝突と遮蔽が再び検出される可能性があります。 -If you do not want to detect / do want to ignore occlusion far from ego or lower the computational cost of occlusion detection, `occlusion.occlusion_attention_area_length` should be set to lower value. +### 遮蔽が過剰検出される -If you want to care the occlusion nearby ego more cautiously, set `occlusion.occlusion_required_clearance_distance` to a larger value. Then ego will approach the occlusion_peeking_stopline more closely to assure more clear FOV. +`/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection/occlusion_polygons` を可視化することで、どの領域が遮蔽として検出されているかを確認できます。 -`occlusion.possible_object_bbox` is used for checking if detected occlusion area is small enough that no vehicles larger than this size can exist inside. By decreasing this size ego will ignore small occluded area. +自我から遠くの遮蔽を検出し nech6たい/無視したい場合、または遮蔽検出の計算コストを下げたい場合は、`occlusion.occlusion_attention_area_length` を低い値に設定する必要があります。 -#### occupancy grid map tuning +自我近くの遮蔽をより慎重に配慮したい場合は、`occlusion.occlusion_required_clearance_distance` をより大きな値に設定します。次に、自己は遮蔽のぞき見停止線により近づいて、より明確な FOV が確保されます。 -Refer to the document of [autoware_probabilistic_occupancy_grid_map](https://autowarefoundation.github.io/autoware.universe/main/perception/autoware_probabilistic_occupancy_grid_map/) for details. If occlusion tends to be detected at apparently free space, increase `occlusion.free_space_max` to ignore them. +`occlusion.possible_object_bbox` は、検出された遮蔽領域が小さすぎて、このサイズよりも大きい車両が内部に存在できないかどうかをチェックするために使用されます。このサイズを小さくすると、自己は小さな遮蔽領域を無視します。 -#### in simple_planning_simulator +#### オキュパンシー グリッド マップの調整 -intersection_occlusion feature is **not recommended** for use in planning_simulator because the laserscan_based_occupancy_grid_map generates unnatural UNKNOWN cells in 2D manner: +詳細については、[autoware_probabilistic_occupancy_grid_map](https://autowarefoundation.github.io/autoware.universe/main/perception/autoware_probabilistic_occupancy_grid_map/) のドキュメントを参照してください。明らかに自由なスペースで遮蔽が検出される傾向がある場合は、`occlusion.free_space_max` を増やしてそれらを無視します。 -- all the cells behind pedestrians are UNKNOWN -- no ground point clouds are generated +#### simple_planning_simulator の場合 -Also many users do not set traffic light information frequently although it is very critical for intersection_occlusion (and in real traffic environment too). +laserscan_based_occupancy_grid_map は 2D 方式で不自然な UNKNOWN セルを生成するため、intersection_occlusion 機能は Planning Simulator での使用はお勧めしません。 -For these reasons, `occlusion.enable` is false by default. +- 歩行者の後ろのすべてのセルは UNKNOWN です +- グラウンド ポイント クラウドは生成されません -#### on real vehicle / in end-to-end simulator +また、多くのユーザーは非常に重要な交差点の遮蔽(および実際の交通環境でも)のために頻繁に信号情報を設定しません。 + +これらの理由により、`occlusion.enable` はデフォルトで false です。 + +#### 実車 / エンドツーエンドシミュレータの場合 + +実車または [AWSIM](https://tier4.github.io/AWSIM/) などのエンドツーエンドシミュレータでは、次の pointcloud_based_occupancy_grid_map 設定を強くお勧めします。 -On real vehicle or in end-to-end simulator like [AWSIM](https://tier4.github.io/AWSIM/) the following pointcloud_based_occupancy_grid_map configuration is highly recommended: ```yaml scan_origin_frame: "velodyne_top" @@ -534,11 +543,12 @@ OccupancyGridMapProjectiveBlindSpot: obstacle_separation_threshold: 1.0 # [m] fill the interval between obstacles with unknown for this length ``` -You should set the top lidar link as the `scan_origin_frame`. In the example it is `velodyne_top`. The method `OccupancyGridMapProjectiveBlindSpot` estimates the FOV by running projective ray-tracing from `scan_origin` to obstacle or up to the ground and filling the cells on the "shadow" of the object as UNKNOWN. +`scan_origin_frame`として最上部のLiDARリンクを設定する必要があります。例では`velodyne_top`です。`OccupancyGridMapProjectiveBlindSpot`メソッドは、`scan_origin`から障害物までまたは地面までの射影線投影を実行し、オブジェクトの「影」上のセルをUNKNOWNとして埋めて視野を推定します。 -## Flowchart +## フローチャート + +作業中 -WIP ```plantuml @startuml @@ -621,41 +631,40 @@ stop @enduml ``` -## Merge From Private +## 私有地からの合流 -### Role +### 機能 -When an ego enters a public road from a private road (e.g. a parking lot), it needs to face and stop before entering the public road to make sure it is safe. +自車が私有地(例:駐車場)から公道に入る場合、安全を確認するために公道手前で停止する必要があります。 -This module is activated when there is an intersection at the private area from which the vehicle enters the public road. The stop line is generated both when the goal is in the intersection lane and when the path goes beyond the intersection lane. The basic behavior is the same as the intersection module, but ego must stop once at the stop line. +このモジュールは、車が公道に進入する私有地エリアに交差点がある場合に有効になります。停止線は、目標地点が交差点車線にあるときと、経路が交差点車線を越えるときの両方で生成されます。基本的な動作は交差点モジュールと同じですが、自車は停止線で1回停止する必要があります。 ![merge-from-private](docs/merge_from_private.png) -### Activation Timing - -This module is activated when the following conditions are met: +### 起動タイミング -- ego-lane has a `private` tag -- ego-lane has a conflict with other no-private lanelets +このモジュールは、次の条件を満たしている場合に起動します。 -### Module Parameters +- 自車線に「private」タグが付けられている +- 自車線は、他の非私有レーンレットと衝突している -| Parameter | Type | Description | -| ------------------------------------------- | ------ | ------------------------------- | -| `merge_from_private_road/stop_duration_sec` | double | [m] time margin to change state | +| パラメータ | 型 | 説明 | +| ------------------------------------------ | ------ | ------------------------ | +| `merge_from_private_road/stop_duration_sec` | double | 状態変更のマージンタイム | -### Known Issue +### 既知の問題 -If ego go over the stop line for a certain distance, then it will not transit from STOP. +自車が停止線を超過すると、停止状態から遷移しません。 -## Test Maps +## テストマップ -The intersections lanelet map consist of a variety of intersections including: +交差点レーンのマップには、次のようなさまざまな交差点があります。 -- 4-way crossing with traffic light -- 4-way crossing without traffic light -- T-shape crossing without traffic light -- intersection with a loop -- complicated intersection +- 信号機のある4方向交差点 +- 信号機のない4方向交差点 +- 信号のないT字路 +- ラウンドアバウトのある交差点 +- 複雑な交差点 ![intersection_test](./docs/intersection_test_map.png) + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md index 20a31780ae6bc..2170ce63d1107 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md @@ -1,50 +1,53 @@ -## No Drivable Lane +## 走行可能な車線がなし -### Role +### 役割 -This module plans the velocity of the related part of the path in case there is a no drivable lane referring to it. +このモジュールは、走行可能な車線を参照していない場合に、パスに関連する部分の速度を計画します。 -A no drivable lane is a lanelet or more that are out of operation design domain (ODD), i.e., the vehicle **must not** drive autonomously in this lanelet. -A lanelet can be no drivable (out of ODD) due to many reasons, either technical limitations of the SW and/or HW, business requirements, safety considerations, .... etc, or even a combination of those. +走行可能な車線とは、運用設計ドメイン(ODD)の対象外である車線または車線以上のことであり、車両は**自**動この車線で運転してはいけません。 -Some examples of No Drivable Lanes +車線が走行不能(ODDの対象外)になる理由は、SWやHWの技術的限界、業務上の要件、安全上の考慮事項、さらにはそれらの組み合わせなど、さまざまです。 -- Closed road intentionally, due to construction work for example -- Underpass road that goes under a railway, for safety reasons -- Road with slope/inclination that the vehicle is not be able to drive autonomously due to technical limitations. And lots of other examples. +走行不能な車線の例を次に示します。 + +- 建設作業などにより意図的に閉鎖された道路 +- 安全上の理由から鉄道路線の真下を通るアンダーパスの道路 +- 技術的な制限により車両が自**動的に**運転できない勾配の道路 +- その他多数の例 ![no-drivable-lane-design.svg](./docs/no_drivable_lane_design.svg) -A lanelet becomes invalid by adding a new tag under the relevant lanelet in the map file ``. +車線は、マップファイル`` に関連する車線に新しいタグを追加することで無効になります。 -The target of this module is to stop the vehicle before entering the no drivable lane (with configurable stop margin) or keep the vehicle stationary if autonomous mode started inside a no drivable lane. Then ask the human driver to take the responsibility of the driving task (Takeover Request / Request to Intervene) +このモジュールの目標は、車両が走行不能な車線に入る前に停止させること(構成可能な停止マージンを使用)、または走行不能な車線内で自動モードが開始された場合に車両を停止させることです。次に、人間の運転手に運転操作の責任を取ってもらうよう求めます(テイクオーバーリクエスト/介入リクエスト)。 -### Activation Timing +### アクティベーションタイミング -This function is activated when the lane id of the target path has an no drivable lane label (i.e. the `no_drivable_lane` attribute is `yes`). +この機能は、ターゲットパスの車線 ID に走行不能な車線のラベル(つまり`no_drivable_lane` 属性が`yes` )がある場合にアクティブになります。 -### Module Parameters +### モジュールパラメータ -| Parameter | Type | Description | -| ------------------ | ------ | ---------------------------------------------------- | -| `stop_margin` | double | [m] margin for ego vehicle to stop before speed_bump | -| `print_debug_info` | bool | whether debug info will be printed or not | +| Parameter | 型 | 説明 | +| ------------------ | ---- | ------------------------------------------------- | +| `stop_margin` | double | 自車位置が速度抑制帯前で停止するためのマージン [m] | +| `print_debug_info` | bool | デバッグ情報を印刷するかどうか | -### Inner-workings / Algorithms +### 仕組み / アルゴリズム -- Get no_drivable_lane attribute on the path from lanelet2 map -- The no drivable lane state machine starts in `INIT` state -- Get the intersection points between path and no drivable lane polygon -- Assign the state to `APPROACHING` toward a no drivable lane if: - - the distance from front of the ego vehicle till the first intersection point between the ego path and the no drivable lane polygon is more than the `stop_margin` -- Assign the state to `INSIDE_NO_DRIVABLE_LANE` if: - - the first point of the ego path is inside the no drivable lane polygon, or - - the distance from front of the ego vehicle till the first intersection point between the ego path and the no drivable lane polygon is less than the `stop_margin` -- Assign the state to `STOPPED` when the vehicle is completely stopped +- lanelet2 マップから経路上の no_drivable_lane 属性を取得 +- no_drivable_lane ステートマシンは `INIT` ステートから開始 +- 経路と no_drivable_lane ポリゴンの交点を取得 +- 次の場合に、no_drivable_lane に対して `APPROACHING` ステートを割り当て: + - 自車の前から自車の経路と no_drivable_lane ポリゴンの最初の交点までの距離が `stop_margin` より大きい +- 次の場合に、`INSIDE_NO_DRIVABLE_LANE` ステートを割り当て: + - 自車の経路の最初の点が no_drivable_lane ポリゴン内にある場合、または + - 自車の前から自車の経路と no_drivable_lane ポリゴンの最初の交点までの距離が `stop_margin` より小さい場合 +- 車両が完全に停止したときに、`STOPPED` ステートを割り当て ![no_drivable_lane_scenarios.svg](./docs/no_drivable_lane_scenarios.svg) -### Future Work +### 今後の課題 + +- [Request to Intervene API](https://github.com/autowarefoundation/autoware/issues/3487) はまだ実装されていないため、この機能は `no_drivable_lane` により車両が停止した後、運転作業の引き継ぎをドライバーに通知するために処理されます +- 車両が no_drivable_lane の前で停止するが、その一部が no_drivable_lane ポリゴンと交差するケースを処理 -- As [Request to Intervene API](https://github.com/autowarefoundation/autoware/issues/3487) is not implemented yet, this will be handled to notify the driver to takeover the driving task responsibility after the vehicle stops due to `no_drivable_lane` -- Handle the case when the vehicle stops before a no drivable lane but part of its footprint intersects with the no drivable lane polygon. diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md index ba808d3e151f5..6c14d5dc5e68a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md @@ -1,35 +1,36 @@ -### No Stopping Area +### 停车禁止区域 -#### Role +#### 角色 -This module plans to avoid stop in 'no stopping area`. +该模块计划避免在“停车禁止区域”停车。 ![brief](./docs/no-stopping-area.svg) -- PassThrough case - - if ego vehicle go through pass judge point, then ego vehicle can't stop with maximum jerk and acceleration, so this module doesn't insert stop velocity. In this case override or external operation is necessary. -- STOP case - - If there is a stuck vehicle or stop velocity around `no_stopping_area`, then vehicle stops inside `no_stopping_area` so this module makes stop velocity in front of `no_stopping_area` -- GO case - - else +- 直通过去的情况 + - 如果本车已通过通过判断点,则本车无法以最大加加减减速停车,因此该模块也不会插入停车速度。在这种情况下就需要 Override 或外部操作。 +- 停车情况 + - 如果“停车禁止区域”周围有处在停滞状态的车辆或停车速度,则车辆会在“停车禁止区域”内停车,因此该模块会在“停车禁止区域”前设定停车速度。 +- 行驶情况 + - 其他情况 -### Limitation +### 限制 -This module allows developers to design vehicle velocity in `no_stopping_area` module using specific rules. Once ego vehicle go through pass through point, ego vehicle does't insert stop velocity and does't change decision from GO. Also this module only considers dynamic object in order to avoid unnecessarily stop. +该模块允许开发人员使用特定规则设计“停车禁止区域”模块中的车辆速度。一旦本车通过过境点后,本车就不会插入停车速度,也不会改变 GO 的决策。此外,该模块仅考虑动态物体,以避免不必要地停车。 #### ModelParameter -| Parameter | Type | Description | -| ---------------------------- | ------ | ------------------------------------------------------------------- | -| `state_clear_time` | double | [s] time to clear stop state | -| `stuck_vehicle_vel_thr` | double | [m/s] vehicles below this velocity are considered as stuck vehicle. | -| `stop_margin` | double | [m] margin to stop line at no stopping area | -| `dead_line_margin` | double | [m] if ego pass this position GO | -| `stop_line_margin` | double | [m] margin to auto-gen stop line at no stopping area | -| `detection_area_length` | double | [m] length of searching polygon | -| `stuck_vehicle_front_margin` | double | [m] obstacle stop max distance | +| パラメーター | タイプ | 説明 | +| ---------------------------- | ------ | ------------------------------------------------------------ | +| `state_clear_time` | 数値 | [s] 停止状態を解除する時間 | +| `stuck_vehicle_vel_thr` | 数値 | [m/s] この速度以下の車両は停止車両とみなす。 | +| `stop_margin` | 数値 | [m] 停止禁止区域での停止線へのマージン | +| `dead_line_margin` | 数値 | [m] 自車がこの位置を通過すると進路を許可 | +| `stop_line_margin` | 数値 | [m] 停止禁止区域での自動生成停止線へのマージン | +| `detection_area_length` | 数値 | [m] 検索ポリゴンの長 | +| `stuck_vehicle_front_margin` | 数値 | [m] 障害物停止最大距離 | + +#### フローチャート -#### Flowchart ```plantuml @startuml @@ -123,3 +124,4 @@ stop @enduml ``` + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md index 36b620df6567b..592b96525886a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md @@ -1,160 +1,156 @@ -## Occlusion Spot +## 遮蔽スポット -### Role +### 役割 -This module plans safe velocity to slow down before reaching collision point that hidden object is darting out from `occlusion spot` where driver can't see clearly because of obstacles. +このモジュールは、運転者が障害物によって見通しが悪い「遮蔽スポット」から隠れた物体が飛び出してくる衝突地点に到達する前に安全速度を計画し、減速します。 -![brief](./docs/occlusion_spot.drawio.svg) +![概要](./docs/occlusion_spot.drawio.svg) -### Activation Timing +### 起動タイミング -This module is activated if `launch_occlusion_spot` becomes true. To make pedestrian first zone map tag is one of the TODOs. +このモジュールは、`launch_occlusion_spot` が true になった場合に起動します。歩行者優先ゾーンのマップタグを作成することは TODO の 1 つです。 -### Limitation and TODOs +### 制限事項と TODO -This module is prototype implementation to care occlusion spot. To solve the excessive deceleration due to false positive of the perception, the logic of detection method can be selectable. This point has not been discussed in detail and needs to be improved. +このモジュールは、遮蔽スポットをケアするためのプロトタイプ実装です。認識の誤検出による過剰な減速に対処するために、検出方法のロジックを選択できます。このポイントはまだ詳細に議論されておらず、改善が必要です。 -- Make occupancy grid for planning. -- Make map tag for occlusion spot. -- About the best safe motion. +- 計画用のオキュパンシーグリッドを作成します。 +- 遮蔽スポットのマップタグを作成します。 +- 最適な安全動作について。 -TODOs are written in each Inner-workings / Algorithms (see the description below). +TODO は各内側の仕組み/アルゴリズムに記載されています(以下の説明を参照)。 -### Inner-workings / Algorithms +### 内側の仕組み/アルゴリズム -#### Logics Working +#### ロジックの仕組み -There are several types of occlusions, such as "occlusions generated by parked vehicles" and "occlusions caused by obstructions". In situations such as driving on **road with obstacles**, where people jump out of the way frequently, all possible occlusion spots must be taken into account. This module considers all occlusion spots calculated from the **occupancy grid**, but it is not reasonable to take into account all occlusion spots for example, people jumping out from behind a guardrail, or behind cruising vehicle. Therefore currently detection area will be limited to to use **predicted object** information. +遮蔽には、「駐車車両によって発生する遮蔽」や「障害物による遮蔽」など、いくつかのタイプがあります。**障害物のある道路**で運転するなど、人々が頻繁に飛び出す状況では、考えられるすべての遮蔽スポットを考慮する必要があります。このモジュールは**オキュパンシーグリッド**から計算されたすべての遮蔽スポットを考慮しますが、ガードレールの後ろや走行中の車の後ろから飛び出す人などのすべての遮蔽スポットを考慮するのは合理的ではありません。そのため、現在、検出エリアは**予測オブジェクト**情報を使用するように限定されています。 -Note that this decision logic is still under development and needs to be improved. +この決定ロジックはまだ開発中であり、改善する必要があります。 -#### DetectionArea Polygon +#### 検出エリアのポリゴン -This module considers TTV from pedestrian velocity and lateral distance to occlusion spot. -TTC is calculated from ego velocity and acceleration and longitudinal distance until collision point using motion velocity smoother. -To compute fast this module only consider occlusion spot whose TTV is less than TTC and only consider area within "max lateral distance". +このモジュールは、歩行者の速度と遮蔽スポットまでの横方向の距離から TTV を考慮します。TTC は、自己速度と加速度、モーション速度スムージングを使用した衝突点までの縦方向の距離から計算されます。高速に計算するために、このモジュールは TTC よりも TTV が小さく、「最大横方向距離」内の領域のみを考慮します。 -![brief](./docs/da.drawio.svg) +![概要](./docs/da.drawio.svg) -#### Occlusion Spot Occupancy Grid Base +#### オキュパンシーグリッドベースの遮蔽スポット -This module considers any occlusion spot around ego path computed from the occupancy grid. -Due to the computational cost occupancy grid is not high resolution and this will make occupancy grid noisy so this module add information of occupancy to occupancy grid map. +このモジュールは、オキュパンシーグリッドから計算されたエゴパス周辺の遮蔽スポットを考慮します。計算コストにより、オキュパンシーグリッドは高解像度ではなく、これによりオキュパンシーグリッドがノイズだらけになるので、このモジュールはオキュパンシーグリッドマップにオキュパンシー情報を追加します。 -TODO: consider hight of obstacle point cloud to generate occupancy grid. +TODO: オキュパンシーグリッドを生成するための障害物点群の高さを考慮します。 -##### Collision Free Judgement +##### 衝突なしの判断 -obstacle that can run out from occlusion should have free space until intersection from ego vehicle +遮蔽スポットから飛び出せる障害物は、エゴ車から交差するまで自由な隙間がある必要があります。 -![brief](./docs/collision_free.drawio.svg) +![概要](./docs/collision_free.drawio.svg) -##### Partition Lanelet +##### 車線レットのパーティション -By using lanelet information of "guard_rail", "fence", "wall" tag, it's possible to remove unwanted occlusion spot. +「ガードレール」、「フェンス」、「壁」タグの車線レット情報を使用すると、不要な遮蔽スポットを削除できます。 -By using static object information, it is possible to make occupancy grid more accurate. +静的オブジェクト情報を使用すると、オキュパンシーグリッドをより正確にすることができます。 -To make occupancy grid for planning is one of the TODOs. +計画用のオキュパンシーグリッドを作成することは TODO の 1 つです。 -![brief](./docs/object_info_partition.drawio.svg) +##### 衝突の可能性 -##### Possible Collision +動く車両によって遮蔽から飛び出す可能性のある障害物。 -obstacle that can run out from occlusion is interrupted by moving vehicle. +![略図](./docs/raycast_shadow.drawio.svg) -![brief](./docs/raycast_shadow.drawio.svg) +#### 安全な走行について -#### About safe motion +![略図](./docs/velocity_planning.drawio.svg) -![brief](./docs/velocity_planning.drawio.svg) +##### 安全速度とマージンのコンセプト -##### The Concept of Safe Velocity and Margin +安全な減速速度は、自車の緊急ブレーキシステムと衝突時間のパラメータから以下のように計算されます。 +以下の計算では velocity は含まれていますが、プランナーにとっては動的 velocity の変更はお勧めしません。 -The safe slowdown velocity is calculated from the below parameters of ego emergency braking system and time to collision. -Below calculation is included but change velocity dynamically is not recommended for planner. +- ジャーク限界[m/s^3] +- 減速限界[m/s2] +- 応答遅延時間[s] +- 歩行者の衝突時間[s] + これらのパラメータにより、理想的な環境での遮蔽スポット手前の安全な走行を簡単に定義できます。 -- jerk limit[m/s^3] -- deceleration limit[m/s2] -- delay response time[s] -- time to collision of pedestrian[s] - with these parameters we can briefly define safe motion before occlusion spot for ideal environment. + ![占有空間グリッド](./docs/safe_motion.drawio.svg) - ![occupancy_grid](./docs/safe_motion.drawio.svg) +このモジュールは、自車が停止するまでの距離と衝突経路の点の距離を幾何学的に考慮して安全マージンを定義します。 +自車が安全マージンから衝突経路の点まで巡航している間、自車は遮蔽スポットの安全速度と同じ速度を維持します。 -This module defines safe margin to consider ego distance to stop and collision path point geometrically. -While ego is cruising from safe margin to collision path point, ego vehicle keeps the same velocity as occlusion spot safe velocity. +![略図](./docs/behavior_after_safe_margin.drawio.svg) -![brief](./docs/behavior_after_safe_margin.drawio.svg) +注: このロジックは、高精度の車両速度の追跡を前提としており、減速ポイントのマージンが最善の解決策ではない場合があります。歩行者が実際に遮蔽スポットから飛び出してきた場合は、手動による運転者のオーバーライドが検討されます。 -Note: This logic assumes high-precision vehicle speed tracking and margin for decel point might not be the best solution, and override with manual driver is considered if pedestrian really run out from occlusion spot. +TODO: 最善の選択肢の 1 つを検討する -TODO: consider one of the best choices +1. 遮蔽スポットの前に停止する +2. 遮蔽スポットの前に 1km/h の速度を挿入する +3. このように減速する +4. など... . -1. stop in front of occlusion spot -2. insert 1km/h velocity in front of occlusion spot -3. slowdown this way -4. etc... . +##### 最大減速速度 -##### Maximum Slowdown Velocity +最大減速速度は、過剰な減速を避けるために、最大減速ジャークと最大減速加速度での自車の現在の速度と加速度のパラメータから計算されます。 -The maximum slowdown velocity is calculated from the below parameters of ego current velocity and acceleration with maximum slowdown jerk and maximum slowdown acceleration in order not to slowdown too much. +- $j_{max}$ 減速ジャーク限界[m/s^3] +- $a_{max}$ 減速減速度限界[m/s2] +- $v_{0}$ 現在の速度[m/s] +- $a_{0}$ 現在の加速度[m/s] -- $j_{max}$ slowdown jerk limit[m/s^3] -- $a_{max}$ slowdown deceleration limit[m/s2] -- $v_{0}$ current velocity[m/s] -- $a_{0}$ current acceleration[m/s] +![略図](./docs/maximum_slowdown_velocity.drawio.svg) -![brief](./docs/maximum_slowdown_velocity.drawio.svg) +#### モジュールパラメータ -#### Module Parameters +| パラメータ | 型 | 説明 | +| ------------------- | ------ | ----------------------------------------------------------------------------------- | +| `pedestrian_vel` | double | [m/s] 障害物出現点から出てくる歩行者の仮定最大速度。 | +| `pedestrian_radius` | double | 障害物スポットにフィットする仮定歩行者半径。 | -| Parameter | Type | Description | -| ------------------- | ------ | -------------------------------------------------------------------------- | -| `pedestrian_vel` | double | [m/s] maximum velocity assumed pedestrian coming out from occlusion point. | -| `pedestrian_radius` | double | [m] assumed pedestrian radius which fits in occlusion spot. | +| パラメータ | 型 | 説明 | +| ----------- | --- | ---------------------------------------------------------------- | +| `use_object_info` | bool | [-] オブジェクト情報を占有グリッドマップに反映するかどうか | +| `use_partition_lanelet` | bool | [-] パーティションLaneletマップデータを使用するかどうか | -| Parameter | Type | Description | -| ----------------------- | ---- | ---------------------------------------------------------------- | -| `use_object_info` | bool | [-] whether to reflect object info to occupancy grid map or not. | -| `use_partition_lanelet` | bool | [-] whether to use partition lanelet map data. | +| パラメータ /デバッグ | 型 | 説明 | +|---|---|---| +| `is_show_occlusion` | bool | 遮蔽点のマーカーを表示するかどうか | +| `is_show_cv_window` | bool | OpenCVデバッグウィンドウを表示するかどうか | +| `is_show_processing_time` | bool | 処理時間を表示するかどうか | -| Parameter /debug | Type | Description | -| ------------------------- | ---- | -------------------------------------------- | -| `is_show_occlusion` | bool | [-] whether to show occlusion point markers. | -| `is_show_cv_window` | bool | [-] whether to show open_cv debug window. | -| `is_show_processing_time` | bool | [-] whether to show processing time. | +| パラメータ/しきい値 | 型 | 説明 | +| ------------------------ | ------- | --------------------------------------------------- | +| `detection_area_length` | double | [m] オクルージョン地点を考えるパス長 | +| `stuck_vehicle_vel` | double | [m/s] この値より速度が低い場合は停止していると判断 | +| `lateral_distance` | double | [m] 隠れた衝突を考える最大横方向距離 | -| Parameter /threshold | Type | Description | -| ----------------------- | ------ | --------------------------------------------------------- | -| `detection_area_length` | double | [m] the length of path to consider occlusion spot | -| `stuck_vehicle_vel` | double | [m/s] velocity below this value is assumed to stop | -| `lateral_distance` | double | [m] maximum lateral distance to consider hidden collision | +| パラメーター/モーション | タイプ | 説明 | +| ---------------------------- | ------ | ---------------------------------------------- | +| `safety_ratio` | double | [-] じゃーと加速度の安全性係数 | +| `max_slow_down_jerk` | double | [m/s^3] 安全なブレーキのじゃー | +| `max_slow_down_accel` | double | [m/s^2] 安全なブレーキの減速度 | +| `non_effective_jerk` | double | [m/s^3] 速度Plannningの弱いじゃー | +| `non_effective_acceleration` | double | [m/s^2] 速度Plannningの弱い減速度 | +| `min_allowed_velocity` | double | [m/s] 許容最小速度 | +| `safe_margin` | double | [m] 緊急ブレーキシステムで停止するための最大許容誤差 | -| Parameter /motion | Type | Description | -| ---------------------------- | ------ | -------------------------------------------------------- | -| `safety_ratio` | double | [-] safety ratio for jerk and acceleration | -| `max_slow_down_jerk` | double | [m/s^3] jerk for safe brake | -| `max_slow_down_accel` | double | [m/s^2] deceleration for safe brake | -| `non_effective_jerk` | double | [m/s^3] weak jerk for velocity planning. | -| `non_effective_acceleration` | double | [m/s^2] weak deceleration for velocity planning. | -| `min_allowed_velocity` | double | [m/s] minimum velocity allowed | -| `safe_margin` | double | [m] maximum error to stop with emergency braking system. | +| パラメーター / detection_area | 型 | 説明 | +| ---------------------------- | ------ | -------------------------------------------------------------------------------------- | +| `min_occlusion_spot_size` | double | [m] オクルージョンを考慮するパスの長さ | +| `slice_length` | double | [m] 検出エリアを分割する距離 | +| `max_lateral_distance` | double | [m] 検出_エリア領域を構築するために使用される自己パスの周りのバッファ. | -| Parameter /detection_area | Type | Description | -| ------------------------- | ------ | --------------------------------------------------------------------- | -| `min_occlusion_spot_size` | double | [m] the length of path to consider occlusion spot | -| `slice_length` | double | [m] the distance of divided detection area | -| `max_lateral_distance` | double | [m] buffer around the ego path used to build the detection_area area. | +| パラメータ/グリッド | 型 | 説明 | +| ---------------- | ------ | ----------------------------------------------------------------------- | +| `free_space_max` | double | [-] 占有グリッド内の空きスペースセルの最大値 | +| `occupied_min` | double | [-] detection_area 領域の構築に使用される自車パス周辺のバッファー | -| Parameter /grid | Type | Description | -| ---------------- | ------ | --------------------------------------------------------------------- | -| `free_space_max` | double | [-] maximum value of a free space cell in the occupancy grid | -| `occupied_min` | double | [-] buffer around the ego path used to build the detection_area area. | +#### フローチャート -#### Flowchart +##### 全体過程のフローアウトライン -##### Rough overview of the whole process ```plantuml @startuml @@ -226,7 +222,8 @@ stop @enduml ``` -##### Detail process for predicted object(not updated) +##### 予測オブジェクトの詳細プロセス(未更新) + ```plantuml @startuml @@ -278,7 +275,32 @@ stop @enduml ``` -##### Detail process for Occupancy grid base +##### 点群ベースの空間グリッドの細部プロセス + +1. 1パス目 + - 点群データを `post resampling` 処理して、空間グリッド上に等間隔で配置します。 + - 自車位置の周りの空間グリッドセルに、点群データを割り当てます。 + - 各空間グリッドセルに、占有確率を割り当てます。 + +2. 2パス目 + - 占有確率に基づいて、空間グリッドセルを「占有」、「非占有」、「不明」に分類します。 + - 隣接する空間グリッドセルの分類を考慮して、分類結果を洗練します。 + +3. 障害物検出 + - 占有確率が高い空間グリッドセルを、障害物として検出します。 + - 障害物の形状や位置を推定します。 + +4. **Planning** + - 障害物の予測と回避を考慮した経路を生成します。 + - 速度、加速度、逸脱量に基づく制約を考慮します。 + +5. **Control** + - **Planning** モジュールからの経路に従って、車両を制御します。 + - ステアリング、アクセル、ブレーキなどのアクチュエーターを制御します。 + +6. 反復 + - システムは、点群データの更新を受け取り、プロセスを繰り返します。 + ```plantuml @startuml @@ -339,3 +361,4 @@ partition handle_possible_collision { stop @enduml ``` + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md index 041e0b86e0d06..93f6d252ae20e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md @@ -1,11 +1,11 @@ # Behavior Velocity Planner -## Overview +## 概要 -`behavior_velocity_planner` is a planner that adjust velocity based on the traffic rules. -It loads modules as plugins. Please refer to the links listed below for detail on each module. +`behavior_velocity_planner` は交通規則に基づいて速度を調整するプランナーです。 +モジュールをプラグインとして読み込みます。各モジュールについて詳しくは、次のリンクを参照してください。 -![Architecture](./docs/BehaviorVelocityPlanner-Architecture.drawio.svg) +![アーキテクチャ](./docs/BehaviorVelocityPlanner-Architecture.drawio.svg) - [Blind Spot](../autoware_behavior_velocity_blind_spot_module/README.md) - [Crosswalk](../autoware_behavior_velocity_crosswalk_module/README.md) @@ -21,49 +21,50 @@ It loads modules as plugins. Please refer to the links listed below for detail o - [Run Out](../autoware_behavior_velocity_run_out_module/README.md) - [Speed Bump](../autoware_behavior_velocity_speed_bump_module/README.md) -When each module plans velocity, it considers based on `base_link`(center of rear-wheel axis) pose. -So for example, in order to stop at a stop line with the vehicles' front on the stop line, it calculates `base_link` position from the distance between `base_link` to front and modifies path velocity from the `base_link` position. +各モジュールが速度を計画する際は、`base_link`(後車軸の中央)の姿勢を基準として考慮します。 +たとえば、ストップラインに車の前面を向けて停止するには、`base_link`から前面までの距離から`base_link`の姿勢を計算し、`base_link`の姿勢からパス速度を変更します。 ![set_stop_velocity](./docs/set_stop_velocity.drawio.svg) -## Input topics - -| Name | Type | Description | -| ----------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `~input/path_with_lane_id` | tier4_planning_msgs::msg::PathWithLaneId | path with lane_id | -| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | vector map | -| `~input/vehicle_odometry` | nav_msgs::msg::Odometry | vehicle velocity | -| `~input/dynamic_objects` | autoware_perception_msgs::msg::PredictedObjects | dynamic objects | -| `~input/no_ground_pointcloud` | sensor_msgs::msg::PointCloud2 | obstacle pointcloud | -| `~/input/compare_map_filtered_pointcloud` | sensor_msgs::msg::PointCloud2 | obstacle pointcloud filtered by compare map. Note that this is used only when the detection method of run out module is Points. | -| `~input/traffic_signals` | autoware_perception_msgs::msg::TrafficLightGroupArray | traffic light states | - -## Output topics - -| Name | Type | Description | -| ---------------------- | ----------------------------------------- | -------------------------------------- | -| `~output/path` | autoware_planning_msgs::msg::Path | path to be followed | -| `~output/stop_reasons` | tier4_planning_msgs::msg::StopReasonArray | reasons that cause the vehicle to stop | - -## Node parameters - -| Parameter | Type | Description | -| ---------------------- | -------------------- | ----------------------------------------------------------------------------------- | -| `launch_modules` | vector<string> | module names to launch | -| `forward_path_length` | double | forward path length | -| `backward_path_length` | double | backward path length | -| `max_accel` | double | (to be a global parameter) max acceleration of the vehicle | -| `system_delay` | double | (to be a global parameter) delay time until output control command | -| `delay_response_time` | double | (to be a global parameter) delay time of the vehicle's response to control commands | - -## Traffic Light Handling in sim/real - -The handling of traffic light information varies depending on the usage. In the below table, the traffic signal topic element for the corresponding lane is denoted as `info`, and if `info` is not available, it is denoted as `null`. - -| module \\ case | `info` is `null` | `info` is not `null` | -| :--------------------------------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| intersection_occlusion(`is_simulation = *`)
  • `info` is the latest non-`null` information
| GO(occlusion is ignored) | intersection_occlusion uses the latest non UNKNOWN observation in the queue up to present.
  • If `info` is `GREEN or UNKNOWN`, occlusion is cared
  • If `info` is `RED or YELLOW`, occlusion is ignored(GO)
  • NOTE: Currently timeout is not considered
| -| traffic_light(sim, `is_simulation = true`)
  • `info` is current information
| GO | traffic_light uses the perceived traffic light information at present directly.
  • If `info` is timeout, STOP whatever the color is
  • If `info` is not timeout, then act according to the color. If `info` is `UNKNOWN`, STOP
{: rowspan=2} | -| traffic_light(real, `is_simulation = false`)
  • `info` is current information
| STOP | ⁠ {: style="padding:0"} | -| crosswalk with Traffic Light(`is_simulation = *`)
  • `info` is current information
| default |
  • If `disable_yield_for_new_stopped_object` is true, each sub scene_module ignore newly detected pedestrians after module instantiation.
  • If `ignore_with_traffic_light` is true, occlusion detection is skipped.
| -| map_based_prediction(`is_simulation = *`)
  • `info` is current information
| default | If a pedestrian traffic light is
  • RED, surrounding pedestrians are not predicted.
  • GREEN, stopped pedestrians are not predicted.
| +## 入力トピック + +| 名前 | タイプ | 説明 | +| --------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `~input/path_with_lane_id` | tier4_planning_msgs::msg::PathWithLaneId | レーンID付きパス | +| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクターマップ | +| `~input/vehicle_odometry` | nav_msgs::msg::Odometry | 車両の速度 | +| `~input/dynamic_objects` | autoware_perception_msgs::msg::PredictedObjects | 動的オブジェクト | +| `~input/no_ground_pointcloud` | sensor_msgs::msg::PointCloud2 | 障害物点群 | +| `~/input/compare_map_filtered_pointcloud` | sensor_msgs::msg::PointCloud2 | 比較マップでフィルタリングされた障害物点群(この実行モジュールの検出方法がPointsの場合に使用されます) | +| `~input/traffic_signals` | autoware_perception_msgs::msg::TrafficLightGroupArray | 信号状態 | + +## 出力トピック + +| 名前 | 型 | 説明 | +| ---------------------- | ----------------------------------------- | ----------------------------------- | +| `~output/path` | `autoware_planning_msgs::msg::Path` | 走行すべきパス | +| `~output/stop_reasons` | `tier4_planning_msgs::msg::StopReasonArray` | 車両を停止させる理由 | + +## ノードパラメータ + +| パラメーター | タイプ | 説明 | +| ------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------- | +| `launch_modules` | 文字列のベクトル | 起動するモジュール名 | +| `forward_path_length` | double | フォワードパス長 | +| `backward_path_length` | double | バックワードパス長 | +| `max_accel` | double | (グローバルパラメータ) 車両の最大加速度 | +| `system_delay` | double | (グローバルパラメータ) 制御コマンドの出力を始めるまでの遅延時間 | +| `delay_response_time` | double | (グローバルパラメータ) 車両が制御コマンドに応答するまでの遅延時間 | + +## シミュレーション/実環境における信号機処理 + +信号機情報の処理は用途によって異なります。以下の表では、対応する車線の信号機トピック要素を `info` とし、`info` が使用できない場合は `null` とします。 + +| モジュール/ケース | `info` が `null` | `info` が `null` 以外 | +| :------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| intersection_occlusion(`is_simulation = *`)
  • `info` は最新の非 `null` 情報
| GO (遮蔽は無視されます) | intersection_occlusion は現在までのキューの中で最新の UNKNOWN 以外の情報を利用します。
  • `info` が `GREEN` または `UNKNOWN` の場合、遮蔽が考慮されます
  • `info` が `RED` または `YELLOW` の場合、遮蔽は無視されます (GO)
  • 注: 現在、タイムアウトは考慮されていません
| +| traffic_light(sim, `is_simulation = true`)
  • `info` は現在の情報
| GO | traffic_light は現在知覚している交通信号情報を直接使用します。
  • `info` がタイムアウトの場合は、色に関係なく停止します
  • `info` がタイムアウトでない場合は、色に応じて動作します。`info` が `UNKNOWN` の場合は、停止します
{: rowspan=2} | +| traffic_light(real, `is_simulation = false`)
  • `info` は現在の情報
| 停止 | {: style="padding:0"} | +| 歩行者横断歩道と交通信号 (`is_simulation = *`)
  • `info` は現在の情報
| デフォルト |
  • `disable_yield_for_new_stopped_object` が true の場合、各サブ scene_module はモジュールインスタンス化後に検出された新しい歩行者を無視します。
  • `ignore_with_traffic_light` が true の場合、遮蔽検出はスキップされます。
| +| map_based_prediction(`is_simulation = *`)
  • `info` は現在の情報
| デフォルト | 歩行者信号が
  • RED の場合、周囲の歩行者は予測されません。
  • GREEN の場合、停止中の歩行者は予測されません。
| + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md index 2abbb83575af5..00d5064e66b84 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md @@ -1,3 +1,4 @@ -# Behavior Velocity Planner Common +# Behavior Velocity Planner (共通) + +このパッケージはライブラリとして共通関数を提供し、`behavior_velocity_planner` ノードとモジュールで使用されます。 -This package provides common functions as a library, which are used in the `behavior_velocity_planner` node and modules. diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md index d45f5b8c848e7..fda9deb720991 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md @@ -1,18 +1,19 @@ -## Run Out +## 障害物回避 -### Role +### 役割 -`run_out` is the module that decelerates and stops for dynamic obstacles such as pedestrians, bicycles and motorcycles. +`run_out` は、歩行者、自転車、オートバイなどの動的障害物に対して減速・停止を行うモジュールです。 ![brief](./docs/run_out_overview.svg) -### Activation Timing +### 起動タイミング -This module is activated if `launch_run_out` becomes true +このモジュールは、`launch_run_out` が True になると起動します。 -### Inner-workings / Algorithms +### 内部動作 / アルゴリズム + +#### フローチャート -#### Flow chart ```plantuml @startuml @@ -43,126 +44,109 @@ stop @enduml ``` -#### Preprocess path +#### パスを事前処理する -##### Calculate the expected target velocity for ego vehicle +##### 自車に対する予測目標速度を計算する -Calculate the expected target velocity for the ego vehicle path to calculate time to collision with obstacles more precisely. -The expected target velocity is calculated with [autoware velocity smoother module](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/autoware_velocity_smoother) by using current velocity, current acceleration and velocity limits directed by the map and external API. +障害物との衝突時間をより正確に計算するために、自車パスの予測目標速度を計算します。 +予測目標速度は、現在の速度、現在の加速度、マップと外部APIによって指示された速度制限を使用して、[autoware velocity smootherモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/autoware_velocity_smoother)で計算されます。 ![brief](./docs/calculate_expected_target_velocity.svg) -##### Extend the path - -The path is extended by the length of base link to front to consider obstacles after the goal. - -##### Trim path from ego position - -The path is trimmed from ego position to a certain distance to reduce calculation time. -Trimmed distance is specified by parameter of `detection_distance`. +##### パスを延長する -#### Preprocess obstacles +パスは目標地点の後の障害物を考慮するために、ベースリンクの長さの前方に延長されます。 -##### Create data of abstracted dynamic obstacle +##### 自車位置からパスをトリムする -This module can handle multiple types of obstacles by creating abstracted dynamic obstacle data layer. Currently we have 3 types of detection method (Object, ObjectWithoutPath, Points) to create abstracted obstacle data. +計算時間を削減するため、自車位置からある程度距離があるパスはトリムされます。 +トリム距離は`detection_distance`のパラメータで指定されます。 -###### Abstracted dynamic obstacle +#### 障害物を事前処理する -Abstracted obstacle data has following information. +##### 動的障害物を抽象化したデータを作成する -| Name | Type | Description | -| ---------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | -| pose | `geometry_msgs::msg::Pose` | pose of the obstacle | -| classifications | `std::vector` | classifications with probability | -| shape | `autoware_perception_msgs::msg::Shape` | shape of the obstacle | -| predicted_paths | `std::vector` | predicted paths with confidence. this data doesn't have time step because we use minimum and maximum velocity instead. | -| min_velocity_mps | `float` | minimum velocity of the obstacle. specified by parameter of `dynamic_obstacle.min_vel_kmph` | -| max_velocity_mps | `float` | maximum velocity of the obstacle. specified by parameter of `dynamic_obstacle.max_vel_kmph` | +このモジュールは、障害物の抽象化されたダイナミックデータレイヤーを作成することによって、複数のタイプの障害物に対処できます。現在、抽象障害物データを作成するための3タイプの検出方法(Object、ObjectWithoutPath、Points)があります。 -Enter the maximum/minimum velocity of the object as a parameter, adding enough margin to the expected velocity. This parameter is used to create polygons for [collision detection](.#Collision-detection). +###### 抽象化されたダイナミック障害物 -Future work: Determine the maximum/minimum velocity from the estimated velocity with covariance of the object +障害物の抽象化されたデータには、次の情報が含まれています。 -###### 3 types of detection method +| 名称 | 型 | 説明 | +| ---------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 位置 | `geometry_msgs::msg::Pose` | 障害物の位置 | +| 分類 | `std::vector` | 確率のある分類 | +| 形状 | `autoware_perception_msgs::msg::Shape` | 障害物の形状 | +| 予測経路 | `std::vector` | 信頼度のある予測経路。このデータには、最小速度と最大速度を使用するため、タイムステップがありません。 | +| 最小速度 (m/s) | `float` | 障害物の最小速度。パラメータ `dynamic_obstacle.min_vel_kmph` で指定されています。 | +| 最大速度 (m/s) | `float` | 障害物の最大速度。パラメータ `dynamic_obstacle.max_vel_kmph` で指定されています。 | -We have 3 types of detection method to meet different safety and availability requirements. The characteristics of them are shown in the table below. -Method of `Object` has high availability (less false positive) because it detects only objects whose predicted path is on the lane. However, sometimes it is not safe because perception may fail to detect obstacles or generate incorrect predicted paths. -On the other hand, method of `Points` has high safety (less false negative) because it uses pointcloud as input. Since points don't have a predicted path, the path that moves in the direction normal to the path of ego vehicle is considered to be the predicted path of abstracted dynamic obstacle data. However, without proper adjustment of filter of points, it may detect a lot of points and it will result in very low availability. -Method of `ObjectWithoutPath` has the characteristics of an intermediate of `Object` and `Points`. +オブジェクトの最大/最小速度をパラメータとして入力し、予想速度に十分なマージンを追加します。このパラメータは、[衝突検出](.#衝突検出)の多角形を作成するために使用されます。 -| Method | Description | -| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Object | use an object with the predicted path for collision detection. | -| ObjectWithoutPath | use an object but not use the predicted path for collision detection. replace the path assuming that an object jumps out to the lane at specified velocity. | -| Points | use filtered points for collision detection. the path is created assuming that points jump out to the lane. points are regarded as an small circular shaped obstacle. | +将来の作業: オブジェクトの共分散に基づいて予測速度から最大/最小速度を特定します。 -![brief](./docs/create_dynamic_obstacle.svg) +###### 3種類の検出方法 -##### Exclude obstacles outside of partition +私たちは異なる安全性と可用性の要件を満たすために3種類の検出方法を用意しています。その特性は下の表に示されています。 +`Object`の方法は、予測経路が車線上のオブジェクトのみを検出するため、高い可用性(誤検出が少ない)があります。しかし、認識が障害物を検出できなかったり、予測経路が不正になったりする場合には安全ではないことがあります。 +一方、`Points`の方法は、入力として点群を使用するため、高い安全性(誤認が少ない)があります。点は予測経路を持たないため、自車経路に垂直な方向に移動する経路が抽象化された動的障害物データの予測経路と見なされます。しかし、ポイントフィルタを適切に調整しなければ、多くのポイントを検出する可能性があり、可用性が非常に低くなります。 +`ObjectWithoutPath`は、`Object`と`Points`の中間に位置する特性を持っています。 -This module can exclude the obstacles outside of partition such as guardrail, fence, and wall. -We need lanelet map that has the information of partition to use this feature. -By this feature, we can reduce unnecessary deceleration by obstacles that are unlikely to jump out to the lane. -You can choose whether to use this feature by parameter of `use_partition_lanelet`. +| 手法 | 説明 | +|---|---|---| +| オブジェクト | 衝突検出に予測パス付きのオブジェクトを使用する。 | +| ObjectWithoutPath | オブジェクトを使用するが、衝突検出に予測パスを使用しない。オブジェクトが指定された速度で車線に飛び出すことを前提にパスを置き換える。 | +| ポイント | 衝突検出にフィルタされたポイントを使用する。ポイントは車線に飛び出すことを前提にパスが作成される。ポイントは小さな円形の障害物とみなされる。 | -![brief](./docs/exclude_obstacles_by_partition.svg) +## 自動運転ソフトウェアドキュメント -##### Exclude obstacles by label +### 動的障害物 -This module only acts on target obstacles defined by the `target_obstacle_types` parameter. If an obstacle of a type not specified by said parameter is detected, it will be ignored by this module. +#### パーティション外の障害物の除外 -##### Exclude obstacles that are already on the ego vehicle's path +このモジュールは、ガードレール、フェンス、壁などのパーティション外の障害物を除外できます。この機能を使用するには、パーティションの情報を持つレーンレットマップが必要です。この機能により、車線に飛び出す可能性が低い障害物による不要な減速を減らすことができます。`use_partition_lanelet`パラメータを使用して、この機能を使用するかどうかを選択できます。 -In the cases were an obstacle is already on the ego vehicle's path, it cannot "cut in" into the ego's path anymore (which is the situation this module tries to handle) so it might be useful to exclude obstacles already on the vehicle's footprint path. By setting the parameter `exclude_obstacles_already_in_path` to true, this module will exclude the obstacles that are considered to be already on the ego vehicle's path for more than `keep_obstacle_on_path_time_threshold`. The module considers the ego vehicle's closest path point to each obstacle's current position, and determines the lateral distance between the obstacle and the right and left sides of the ego vehicle. If the obstacle is located within the left and right extremes of the vehicle for that pose, then it is considered to be inside the ego vehicle's footprint path and it is excluded. The virtual width of the vehicle used to detect if an obstacle is within the path or not, can be adjusted by the `ego_footprint_extra_margin` parameter. +#### ラベルによる障害物の除外 -##### Exclude obstacles that cross the ego vehicle's "cut line" +このモジュールは、`target_obstacle_types`パラメータで定義されたターゲット障害物にのみ作用します。このパラメータで指定されていないタイプの障害物が検出された場合、このモジュールによって無視されます。 -This module can exclude obstacles that have predicted paths that will cross the back side of the ego vehicle. It excludes obstacles if their predicted path crosses the ego's "cut line". The "cut line" is a virtual line segment that is perpendicular to the ego vehicle and that passes through the ego's base link. +#### 自車走行経路上にある障害物の除外 -You can choose whether to use this feature by setting the parameter `use_ego_cut_line` to `true` or `false`. The width of the line can be tuned with the parameter `ego_cut_line_length`. +障害物がすでに自車走行経路上に存在する場合、障害物は自車の経路に「割り込む」ことはできないため(このモジュールで処理しようとしている状況です)、自車のフットプリント経路上にすでに存在する障害物を除外すると有用な場合があります。`exclude_obstacles_already_in_path`パラメータを`true`に設定すると、このモジュールは`keep_obstacle_on_path_time_threshold`を超えて自車走行経路上にあると見なされる障害物を除外します。このモジュールは、各障害物の現在の位置に対して自車の最寄りの経路ポイントを考慮し、障害物と自車の左右の側の間の横方向距離を決定します。障害物がそのポーズに対して車の左端と右端の間に位置する場合、それは自車のフットプリント経路内にあると見なされ、除外されます。障害物が経路内にあるかどうかを検出するために使用される車両の仮想幅は、`ego_footprint_extra_margin`パラメータで調整できます。 -![brief](./docs/ego_cut_line.svg) +#### 自車の「カットライン」を横断する障害物の除外 -#### Collision detection +このモジュールは、自車の後部を横断する予測経路を持つ障害物を除外できます。予測経路が自車の「カットライン」を横断する場合に障害物を除外します。「カットライン」は自車に垂直で、自車のベースリンクを通過する仮想線分です。 -##### Detect collision with dynamic obstacles +`use_ego_cut_line`パラメータを`true`または`false`に設定することで、この機能を使用するかどうかを選択できます。線の幅は、`ego_cut_line_length`パラメータで調整できます。 -Along the ego vehicle path, determine the points where collision detection is to be performed for each `detection_span`. +#### 衝突検出 -The travel times to the each points are calculated from [the expected target velocity](.#Calculate-the-expected-target-velocity-for-ego-vehicle). +#### 動的障害物との衝突検出 -![brief](./docs/create_polygon_on_path_point.svg) +自車走行経路に沿って、各`detection_span`で衝突検出を実行するポイントを決定します。 -For the each points, collision detection is performed using the footprint polygon of the ego vehicle and the polygon of the predicted location of the obstacles. -The predicted location of the obstacles is described as rectangle or polygon that has the range calculated by min velocity, max velocity and the ego vehicle's travel time to the point. -If the input type of the dynamic obstacle is `Points`, the obstacle shape is defined as a small cylinder. +各ポイントまでの移動時間は、[自車予想ターゲット速度](.#Calculate-the-expected-target-velocity-for-ego-vehicle)から計算されます。 -![brief](./docs/collision_detection_for_shape.svg) +各ポイントについて、自車のフットプリントポリゴンと障害物の予測位置のポリゴンを使用して衝突検出を実行します。障害物の予測位置は、最小速度、最大速度、およびその点に対する自車の移動時間で計算される範囲を持つ長方形またはポリゴンとして記述されます。動的障害物の入力タイプが`Points`の場合、障害物形状は小さな円筒として定義されます。 -Multiple points are detected as collision points because collision detection is calculated between two polygons. -So we select the point that is on the same side as the obstacle and close to ego vehicle as the collision point. +衝突検出は2つのポリゴン間で計算されるため、複数のポイントが衝突ポイントとして検出されます。そのため、障害物と同じ側で自車に近いポイントを衝突ポイントとして選択します。 -![brief](./docs/collision_points.svg) +#### 速度の挿入 -#### Insert velocity +#### 障害物に対して減速する速度の挿入 -##### Insert velocity to decelerate for obstacles +衝突が検出された場合、選択された衝突ポイントからベースリンクから前方までの距離+停止マージンに停止点が挿入されます。ベースリンクから前方とは、ベースリンク(後輪軸の中央)と車の前面の間の距離を意味します。停止マージンは`stop_margin`パラメータで決定されます。 -If the collision is detected, stop point is inserted on distance of base link to front + stop margin from the selected collision point. The base link to front means the distance between base_link (center of rear-wheel axis) and front of the car. Stop margin is determined by the parameter of `stop_margin`. +#### 障害物に接近するための速度の挿入 -![brief](./docs/insert_velocity.svg) +`Points`または`ObjectWithoutPath`の方法を選択すると、自車が障害物の前で停止し続ける場合があります。 -#### Insert velocity to approach the obstacles - -If you select the method of `Points` or `ObjectWithoutPath`, sometimes ego keeps stopping in front of the obstacle. -To avoid this problem, This feature has option to approach the obstacle with slow velocity after stopping. -If the parameter of `approaching.enable` is set to true, ego will approach the obstacle after ego stopped for `state.stop_time_thresh` seconds. -The maximum velocity of approaching can be specified by the parameter of `approaching.limit_vel_kmph`. -The decision to approach the obstacle is determined by a simple state transition as following image. +`approaching.enable` のパラメータが true に設定されると、エゴは `state.stop_time_thresh` 秒間停止した後、障害物に接近します。接近時の最大速度は `approaching.limit_vel_kmph` のパラメータで指定できます。障害物に接近するかどうかの決定は、次の図のような単純な状態遷移によって決定されます。 ![brief](./docs/insert_velocity_to_approach.svg) + ```plantuml @startuml hide empty description @@ -179,71 +163,71 @@ APPROACH --> APPROACH : Approach duration is less than threshold @enduml ``` -##### Limit velocity with specified jerk and acc limit - -The maximum slowdown velocity is calculated in order not to slowdown too much. -See the [Occlusion Spot document](../autoware_behavior_velocity_occlusion_spot_module/#maximum-slowdown-velocity) for more details. -You can choose whether to use this feature by parameter of `slow_down_limit.enable`. - -### Module Parameters - -| Parameter | Type | Description | -| ----------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `detection_method` | string | [-] candidate: Object, ObjectWithoutPath, Points | -| `target_obstacle_types` | vector of string | [-] specifies which obstacle types will be considered by the module, if the obstacles classification type is not written here, it will be ignored. candidate: ["PEDESTRIAN", "BICYCLE","MOTORCYCLE"] | -| `use_partition_lanelet` | bool | [-] whether to use partition lanelet map data | -| `specify_decel_jerk` | bool | [-] whether to specify jerk when ego decelerates | -| `stop_margin` | double | [m] the vehicle decelerates to be able to stop with this margin | -| `passing_margin` | double | [m] the vehicle begins to accelerate if the vehicle's front in predicted position is ahead of the obstacle + this margin | -| `deceleration_jerk` | double | [m/s^3] ego decelerates with this jerk when stopping for obstacles | -| `detection_distance` | double | [m] ahead distance from ego to detect the obstacles | -| `detection_span` | double | [m] calculate collision with this span to reduce calculation time | -| `min_vel_ego_kmph` | double | [km/h] min velocity to calculate time to collision | - -| Parameter /detection_area | Type | Description | -| ------------------------- | ------ | -------------------------------------------- | -| `margin_ahead` | double | [m] ahead margin for detection area polygon | -| `margin_behind` | double | [m] behind margin for detection area polygon | - -| Parameter /dynamic_obstacle | Type | Description | -| ------------------------------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------- | -| `use_mandatory_area` | double | [-] whether to use mandatory detection area | -| `assume_fixed_velocity.enable` | double | [-] If enabled, the obstacle's velocity is assumed to be within the minimum and maximum velocity values specified below | -| `assume_fixed_velocity.min_vel_kmph` | double | [km/h] minimum velocity for dynamic obstacles | -| `assume_fixed_velocity.max_vel_kmph` | double | [km/h] maximum velocity for dynamic obstacles | -| `diameter` | double | [m] diameter of obstacles. used for creating dynamic obstacles from points | -| `height` | double | [m] height of obstacles. used for creating dynamic obstacles from points | -| `max_prediction_time` | double | [sec] create predicted path until this time | -| `time_step` | double | [sec] time step for each path step. used for creating dynamic obstacles from points or objects without path | -| `points_interval` | double | [m] divide obstacle points into groups with this interval, and detect only lateral nearest point. used only for Points method | - -| Parameter /approaching | Type | Description | -| ---------------------- | ------ | ----------------------------------------------------- | -| `enable` | bool | [-] whether to enable approaching after stopping | -| `margin` | double | [m] distance on how close ego approaches the obstacle | -| `limit_vel_kmph` | double | [km/h] limit velocity for approaching after stopping | - -| Parameter /state | Type | Description | -| ------------------------ | ------ | ----------------------------------------------------------------------------------- | -| `stop_thresh` | double | [m/s] threshold to decide if ego is stopping | -| `stop_time_thresh` | double | [sec] threshold for stopping time to transit to approaching state | -| `disable_approach_dist` | double | [m] end the approaching state if distance to the obstacle is longer than this value | -| `keep_approach_duration` | double | [sec] keep approach state for this duration to avoid chattering of state transition | - -| Parameter /slow_down_limit | Type | Description | -| -------------------------- | ------ | ------------------------------------------------------------- | -| `enable` | bool | [-] whether to enable to limit velocity with max jerk and acc | -| `max_jerk` | double | [m/s^3] minimum jerk deceleration for safe brake. | -| `max_acc` | double | [m/s^2] minimum accel deceleration for safe brake. | - -| Parameter /ignore_momentary_detection | Type | Description | -| ------------------------------------- | ------ | ----------------------------------------------------------------- | -| `enable` | bool | [-] whether to ignore momentary detection | -| `time_threshold` | double | [sec] ignores detections that persist for less than this duration | - -### Future extensions / Unimplemented parts - -- Calculate obstacle's min velocity and max velocity from covariance -- Detect collisions with polygon object -- Handle the case when the predicted path of obstacles are not straight line - - Currently collision check is calculated based on the assumption that the predicted path of the obstacle is a straight line +##### 指定ジャークおよび加速度極限を使用して速度を制限 + +急減速しすぎないように最大減速速度を計算します。詳細については、[閉塞スポットドキュメント](../autoware_behavior_velocity_occlusion_spot_module/#maximum-slowdown-velocity)を参照してください。 +この機能を使用するかどうかは `slow_down_limit.enable` パラメータで選択できます。 + +### モジュールパラメータ + +| パラメータ名 | タイプ | 説明 | +|---|---|---| +| `detection_method` | 文字列 | [-] 候補: Object, ObjectWithoutPath, Points | +| `target_obstacle_types` | 文字ベクトル | [-] モジュールが考慮する障害物タイプを指定します。障害物の分類タイプがここに記載されていない場合、無視されます。候補: ["PEDESTRIAN", "BICYCLE","MOTORCYCLE"] | +| `use_partition_lanelet` | ブール | [-] 分割laneletマップデータを使用するかどうか | +| `specify_decel_jerk` | ブール | [-] 自車が減速するときのジャークを指定するかどうか | +| `stop_margin` | double | [m] 車両はこのマージンを保持して停止できるよう減速します | +| `passing_margin` | double | [m] 障害物より先に予測位置にある車両の前方が障害物 + このマージンに達したときに車両の加速を開始します | +| `deceleration_jerk` | double | [m/s^3] 障害物のために停止するときに自車がこのジャークで減速します | +| `detection_distance` | double | [m] 自車の前方距離から障害物を検出します | +| `detection_span` | double | [m] 計算時間を短縮するために、この間隔で衝突を計算します | +| `min_vel_ego_kmph` | double | [km/h] 衝突までの時間を計算するための最小速度 | + +| パラメータ /detection_area | 型 | 説明 | +| ------------------------- | ------ | ----------------------------------------- | +| `margin_ahead` | double | 検出エリア多角形の前方マージン [m] | +| `margin_behind` | double | 検出エリア多角形の後方マージン [m] | + +| パラメータ | タイプ | 説明 | +|---|---|---| +| `use_mandatory_area` | double | [-] 強制検出領域を使用するかどうか | +| `assume_fixed_velocity.enable` | double | [-] 有効な場合、障害物の速度は以下に指定した最小速度と最大速度の範囲内と見なされます | +| `assume_fixed_velocity.min_vel_kmph` | double | [km/h] 動的障害物の最小速度 | +| `assume_fixed_velocity.max_vel_kmph` | double | [km/h] 動的障害物の最大速度 | +| `diameter` | double | [m] 障害物の直径。ポイントから動的障害物を作成するために使用されます | +| `height` | double | [m] 障害物の高さ。ポイントから動的障害物を作成するために使用されます | +| `max_prediction_time` | double | [秒] この時間まで予測経路を作成します | +| `time_step` | double | [秒] 各パスステップのタイムステップ。パスを含まないポイントまたはオブジェクトから動的障害物を作成するために使用されます | +| `points_interval` | double | [m] この間隔で障害物ポイントをグループに分割し、最も近くにある横方向のポイントのみを検出します。ポイントメソッドでのみ使用されます | + +| パラメータ /approaching | タイプ | 説明 | +| ------------------------ | ------ | ----------------------------------------------------- | +| `enable` | bool | [-] 停止後に接近を有効にするかどうか | +| `margin` | double | [m] 自車が障害物に接近する方法の距離 | +| `limit_vel_kmph` | double | [km/h] 停止後に接近するための速度制限 | + +| パラメータ/状態 | 型 | 説明 | +| ------------------------ | ------ | ---------------------------------------------------------------------------------- | +| `stop_thresh` | double | [m/s] エゴが停止状態であると判定するための閾値 | +| `stop_time_thresh` | double | [sec] 停止状態から接近状態に移行するための停止時間閾値 | +| `disable_approach_dist` | double | [m] 障害物との距離がこの値より長い場合に接近状態を終了する | +| `keep_approach_duration` | double | [sec] 状態遷移のチャタリングを避けるため、接近状態をこの期間保持する | + +| パラメータ /slow\_down\_limit | 型 | 説明 | +| ----------------------------- | ------ | -------------------------------------------------------- | +| `enable` | bool | [-] 最大ジャークと加速度で速度を制限するかどうか | +| `max\_jerk` | double | [m/s^3] 安全なブレーキのための最小ジャーク減速度。 | +| `max\_acc` | double | [m/s^2] 安全なブレーキのための最小加速度減速度。 | + +| パラメーター /ignore_momentary_detection | タイプ | 説明 | +|------------------------------------------|-----------|-----------------------------------------------------------------| +| `enable` | bool |[-] 一時的な検出を無視するかどうか | +| `time_threshold` | double | [秒] この期間より短い検出を無視する | + +### 今後の拡張 / 未実装の部分 + +- 共分散から障害物の最小速度と最大速度を計算する +- ポリゴンオブジェクトとの衝突を検出する +- 障害物の予測経路が直線でない場合の処理 + - 現在、衝突チェックは障害物の予測経路が直線であるという仮定に基づいて計算されています + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md index 6057c9a441b5f..ad175ccd44a20 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md @@ -1,62 +1,52 @@ -## Speed Bump +## スピードバンプ -### Role +### 役割 -This module plans the velocity of the related part of the path in case there is speed bump -regulatory element referring to it. +このモジュールは、速度バンプ規制要素が参照している場合、パスの関連部分の速度を計画します。 ![speed_bump_design.svg](docs/speed_bump_design.svg) -### Activation Timing +### 起動タイミング -The manager launch speed bump scene module when there is speed bump regulatory element referring to -the reference path. +マネージャーは、基準パスを参照する速度バンプ規制要素がある場合に、速度バンプシーンモジュールを起動します。 -### Module Parameters +### モジュールパラメーター -| Parameter | Type | Description | -| ------------------- | ------ | --------------------------------------------------------- | -| `slow_start_margin` | double | [m] margin for ego vehicle to slow down before speed_bump | -| `slow_end_margin` | double | [m] margin for ego vehicle to accelerate after speed_bump | -| `print_debug_info` | bool | whether debug info will be printed or not | +| パラメーター | 型 | 説明 | +| ------------------- | ------ | ------------------------------------------------------- | +| `slow_start_margin` | double | 車両が減速帯手前で減速するための [m] マージン | +| `slow_end_margin` | double | 車両が減速帯通過後に加速するための [m] マージン | +| `print_debug_info` | bool | デバッグ情報を印刷するか否か | -#### Speed Calculation +#### 速度計算 -- limits for speed bump height and slow down speed to create a linear equation +- 段差の高さおよび減速速度の限界を使用して一次方程式を作成する -| Parameter | Type | Description | +| パラメータ | 型 | 説明 | | ------------ | ------ | ------------------------------------------------- | -| `min_height` | double | [m] minimum height assumption of the speed bump | -| `max_height` | double | [m] maximum height assumption of the speed bump | -| `min_speed` | double | [m/s] minimum speed assumption of slow down speed | -| `max_speed` | double | [m/s] maximum speed assumption of slow down speed | +| `min_height` | double | [m] スピードバンプの低さの最低想定値 | +| `max_height` | double | [m] スピードバンプの高さの最高想定値 | +| `min_speed` | double | [m/s] 減速速度の最低想定値 | +| `max_speed` | double | [m/s] 減速速度の最高想定値 | -### Inner-workings / Algorithms +### 内部動作 / アルゴリズム -- Get speed bump regulatory element on the path from lanelet2 map -- Calculate `slow_down_speed` wrt to `speed_bump_height` specified in regulatory element or - read `slow_down_speed` tag from speed bump annotation if available +- lanelet2 マップから経路上にある減速帯規制要素を取得する +- 規制要素で指定された `speed_bump_height` に対する `slow_down_speed` を計算する、または減速帯アノテーションから `slow_down_speed` タグを読み取る(存在する場合) ![speed_bump_vel_calc](docs/speed_bump_vel_calc.png) -**Note:** If in speed bump annotation `slow_down_speed` tag is used then calculating the speed wrt -the speed bump height will be ignored. In such case, specified `slow_down_speed` value in **[kph]** -is being used. +**注:** 減速帯アノテーションで `slow_down_speed` タグが使用されている場合、減速帯の高さに対する速度の計算は無視されます。その場合、**[kph]** 単位で指定された `slow_down_speed` 値が使用されます。 -- Get the intersection points between path and speed bump polygon -- Calculate `slow_start_point` & `slow_end_point` wrt the intersection points and insert them to - path -- If `slow_start_point` or `slow_end_point` can not be inserted with given/calculated offset values - check if any path point can be virtually assigned as `slow_start_point` or `slow_end_point` +- 経路と減速帯ポリゴンの交差点を取得する +- 交差点を基に `slow_start_point` と `slow_end_point` を計算し、それらを経路に挿入する +- `slow_start_point` または `slow_end_point` が与えられた(または計算された)オフセット値で挿入できない場合、任意の経路点が仮想的に `slow_start_point` または `slow_end_point` に割り当てられるかどうかを確認する ![speed_bump_scenarios.svg](docs/speed_bump_scenarios.svg) -- Assign `slow_down_speed` to the path points between `slow_start_point` or `slow_end_point` +- `slow_start_point` または `slow_end_point` 間の経路点に `slow_down_speed` を割り当てる -### Future Work +### 今後の作業 + +- [こちら](https://journals.sagepub.com/doi/10.1155/2014/736576) の記事では、バンプのモデリング手法が提案されています。これは、バンプを円に当てはめて、半径を計算するという簡単なものです。最近のインプリメンテーションでは、速度の計算はバンプの高さだけに基づいていますが、将来はより現実的な結果を得るために、この手法を適用する予定です。 -- In an article [here](https://journals.sagepub.com/doi/10.1155/2014/736576), a bump modeling method - is proposed. Simply it is based on fitting the bump in a circle and a radius calculation is done - with it. Although the velocity calculation is based on just the height of the bump in the recent - implementation, applying this method is intended in the future which will yield more realistic - results. diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md index f373afc2351bf..49643da8f71e1 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md @@ -1,33 +1,34 @@ -## Stop Line +## 停止線 -### Role +### 役割 -This module plans velocity so that the vehicle can stop right before stop lines and restart driving after stopped. +このモジュールは、車両が停止線の手前で停止し、停止後に再発進できるように速度を計画します。 -![stop line](docs/stop_line.svg) +![停止線](docs/stop_line.svg) -### Activation Timing +### 作動タイミング -This module is activated when there is a stop line in a target lane. +このモジュールは、ターゲット車線に停止線があるときに作動します。 -### Module Parameters +### モジュールパラメータ -| Parameter | Type | Description | +| パラメータ | タイプ | 説明 | | -------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `stop_margin` | double | a margin that the vehicle tries to stop before stop_line | -| `stop_duration_sec` | double | [s] time parameter for the ego vehicle to stop in front of a stop line | -| `hold_stop_margin_distance` | double | [m] parameter for restart prevention (See Algorithm section). Also, when the ego vehicle is within this distance from a stop line, the ego state becomes STOPPED from APPROACHING | -| `use_initialization_stop_state` | bool | A flag to determine whether to return to the approaching state when the vehicle moves away from a stop line. | -| `show_stop_line_collision_check` | bool | A flag to determine whether to show the debug information of collision check with a stop line | +| `stop_margin` | 倍精度 | 車両が停止線前に停止しようとするマージン | +| `stop_duration_sec` | 倍精度 | [秒] 自己車両が停止線の前で停止する時間パラメータ | +| `hold_stop_margin_distance` | 倍精度 | [メートル] 再始動防止パラメータ(アルゴリズムセクションを参照)。また、自己車両がこの距離より停止線に近い場合、自己状態は接近から停止に変わります | +| `use_initialization_stop_state` | ブール | 車両が停止線から離れる場合に接近状態に戻すかどうかを決定するフラグ | +| `show_stop_line_collision_check` | ブール | 停止線との衝突チェックのデバッグ情報を表示するかどうかを決定するフラグ | -### Inner-workings / Algorithms +### 内部動作 / アルゴリズム -- Gets a stop line from map information. -- insert a stop point on the path from the stop line defined in the map and the ego vehicle length. -- Sets velocities of the path after the stop point to 0[m/s]. -- Release the inserted stop velocity when the vehicle stops at the stop point for `stop_duration_sec` seconds. +- 地図情報から停止線を取得します。 +- 地図で定義された停止線と自車長からパス上に停止点を挿入します。 +- 停止点以降のパスの速度を 0[m/s] に設定します。 +- 車両が停止点で `stop_duration_sec` 秒間停止しているときに、挿入された停止速度を解除します。 + +#### フローチャート -#### Flowchart ```plantuml @startuml @@ -69,43 +70,44 @@ stop @enduml ``` -This algorithm is based on `segment`. -`segment` consists of two node points. It's useful for removing boundary conditions because if `segment(i)` exists we can assume `node(i)` and `node(i+1)` exist. +このアルゴリズムは「セグメント」に基づいています。 +「セグメント」は2つのノードポイントで構成されています。`セグメント(i)`が存在すれば、`ノード(i)`と`ノード(i+1)`が存在すると仮定できるため、境界条件を削除するのに役立ちます。 ![node_and_segment](docs/./node_and_segment.drawio.svg) -First, this algorithm finds a collision between reference path and stop line. -Then, we can get `collision segment` and `collision point`. +最初に、このアルゴリズムはリファレンスパスと停止線間の衝突を検出します。 +次に、「衝突セグメント」と「衝突ポイント」を取得できます。 ![find_collision_segment](docs/./find_collision_segment.drawio.svg) -Next, based on `collision point`, it finds `offset segment` by iterating backward points up to a specific offset length. -The offset length is `stop_margin`(parameter) + `base_link to front`(to adjust head pose to stop line). -Then, we can get `offset segment` and `offset from segment start`. +次に、「衝突ポイント」に基づいて、「post resampling」ポイントを特定のオフセット長まで後方ポイントを反復処理することによって「オフセットセグメント」を検出します。 +オフセットの長さは、`停止マージン`(パラメータ)+ `base_link~前方`(先頭ポーズを停止線に調整するため)です。 +次に、「オフセットセグメント」と「セグメント開始からのオフセット」を取得できます。 ![find_offset_segment](docs/./find_offset_segment.drawio.svg) -After that, we can calculate a offset point from `offset segment` and `offset`. This will be `stop_pose`. +その後、「オフセットセグメント」と「オフセット」からオフセットポイントを計算できます。 これが「停止ポーズ」です。 ![calculate_stop_pose](docs/./calculate_stop_pose.drawio.svg) -#### Restart prevention +#### 再始動防止 -If it needs X meters (e.g. 0.5 meters) to stop once the vehicle starts moving due to the poor vehicle control performance, the vehicle goes over the stopping position that should be strictly observed when the vehicle starts to moving in order to approach the near stop point (e.g. 0.3 meters away). +車両の制御性能が低下しているため、車両が動き始めると停止するために X メートル(例: 0.5 メートル)が必要な場合、車両は停止点を通過します。車両が動き始めて停止点に近づく(例: 0.3 メートル先)ときに、厳守する必要があります。 -This module has parameter `hold_stop_margin_distance` in order to prevent from these redundant restart. If the vehicle is stopped within `hold_stop_margin_distance` meters from stop point of the module (\_front_to_stop_line < hold_stop_margin_distance), the module judges that the vehicle has already stopped for the module's stop point and plans to keep stopping current position even if the vehicle is stopped due to other factors. +このモジュールには、これらの不要な再始動を防ぐためのパラメータ `hold_stop_margin_distance` があります。車両がモジュールの停止点から `hold_stop_margin_distance` メートル以内で停止している場合(\_front_to_stop_line < hold_stop_margin_distance)、車両はモジュールの停止点に対してすでに停止していると判断し、車両が他の要因で停止している場合でも、現在の位置で停止し続けるように計画します。
![example](docs/restart_prevention.svg){width=1000} -
parameters
+
パラメータ
![example](docs/restart.svg){width=1000} -
outside the hold_stop_margin_distance
+
hold_stop_margin_distance の外部
![example](docs/keep_stopping.svg){width=1000} -
inside the hold_stop_margin_distance
+
hold_stop_margin_distance の内部
+ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md index 0507d69af1b4e..2866803044183 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md @@ -1,76 +1,77 @@ -## Template +## テンプレート -A template for behavior velocity modules based on the autoware_behavior_velocity_speed_bump_module. +`autoware_behavior_velocity_speed_bump_module` に基づく動作速度モジュールのテンプレート。 -# Autoware Behavior Velocity Module Template +# Autoware 動作速度モジュールテンプレート ## `Scene` -### `TemplateModule` Class +### `TemplateModule` クラス -The `TemplateModule` class serves as a foundation for creating a scene module within the Autoware behavior velocity planner. It defines the core methods and functionality needed for the module's behavior. You should replace the placeholder code with actual implementations tailored to your specific behavior velocity module. +`TemplateModule` クラスは Autoware 動作速度プランナー内のシーンモジュールを作成するための基盤として機能します。モジュールの動作に必要なコアメソッドと機能を定義します。プレースホルダーコードは、特定の動作速度モジュールに合わせた実際のインプリメンテーションに置き換える必要があります。 -#### Constructor +#### コンストラクタ -- The constructor for `TemplateModule` takes the essential parameters to create a module: `const int64_t module_id`, `const rclcpp::Logger & logger`, and `const rclcpp::Clock::SharedPtr clock`. These parameters are supplied by the `TemplateModuleManager` when registering a new module. Other parameters can be added to the constructor, if required by your specific module implementation. +- `TemplateModule` のコンストラクタはモジュールを作成するための重要なパラメータを受け取ります: `const int64_t module_id`, `const rclcpp::Logger & logger`, and `const rclcpp::Clock::SharedPtr clock`。これらのパラメータは、新しいモジュールを登録するときに `TemplateModuleManager` によって供給されます。特定のモジュールインプリメンテーションで必要に応じて、他のパラメータをコンストラクタに追加できます。 -#### `modifyPathVelocity` Method +#### `modifyPathVelocity` メソッド -- This method, defined in the `TemplateModule` class, is expected to modify the velocity of the input path based on certain conditions. In the provided code, it logs an informational message once when the template module is executing. -- The specific logic for velocity modification should be implemented in this method based on the module's requirements. +- `TemplateModule` クラスで定義されたこのメソッドは、特定の条件に基づいて入力パスの速度を変更することが期待されています。提供されるコードでは、テンプレートモジュールが実行されるときに一度だけ情報メッセージをログに記録します。 +- 速度変更の特定のロジックは、モジュールの要件に基づいてこのメソッドにインプリメントする必要があります。 -#### `createDebugMarkerArray` Method +#### `createDebugMarkerArray` メソッド -- This method, also defined in the `TemplateModule` class, is responsible for creating a visualization of debug markers and returning them as a `visualization_msgs::msg::MarkerArray`. In the provided code, it returns an empty `MarkerArray`. -- You should implement the logic to generate debug markers specific to your module's functionality. +- `TemplateModule` クラスで定義されているこのメソッドは、デバッグマーカーのビジュアライゼーションを作成し、`visualization_msgs::msg::MarkerArray` として返します。提供されるコードでは、空の `MarkerArray` を返します。 +- モジュールの機能に固有のデバッグマーカーを生成するロジックを実装する必要があります。 -#### `createVirtualWalls` Method +#### `createVirtualWalls` メソッド -- The `createVirtualWalls` method creates virtual walls for the scene and returns them as `autoware::motion_utils::VirtualWalls`. In the provided code, it returns an empty `VirtualWalls` object. -- You should implement the logic to create virtual walls based on your module's requirements. +- `createVirtualWalls` メソッドはシーンの仮想壁を作成し、`autoware::motion_utils::VirtualWalls` として返します。提供されるコードでは、空の `VirtualWalls` オブジェクトが返されます。 +- モジュールの要件に基づいて仮想壁を作成するロジックを実装する必要があります。 ## `Manager` -The managing of your modules is defined in manager.hpp and manager.cpp. The managing is handled by two classes: +モジュールの管理は manager.hpp と manager.cpp で定義されます。管理は 2 つのクラスによって処理されます: -- The `TemplateModuleManager` class defines the core logic for managing and launching the behavior_velocity_template scenes (defined in behavior_velocity_template_module/src/scene.cpp/hpp). It inherits essential manager attributes from its parent class `SceneModuleManagerInterface`. -- The `TemplateModulePlugin` class provides a way to integrate the `TemplateModuleManager` into the logic of the Behavior Velocity Planner. +- `TemplateModuleManager` クラスは、動作速度テンプレートシーンの管理と起動 (behavior_velocity_template_module/src/scene.cpp/hpp で定義) のコアロジックを定義します。親クラス `SceneModuleManagerInterface` から重要なマネージャー属性を継承します。 +- `TemplateModulePlugin` クラスは、`TemplateModuleManager` を動作速度プランナーのロジックに統合する方法を提供します。 -### `TemplateModuleManager` Class +### `TemplateModuleManager` クラス -#### Constructor `TemplateModuleManager` +#### コンストラクタ `TemplateModuleManager` -- This is the constructor of the `TemplateModuleManager` class, and it takes an `rclcpp::Node` reference as a parameter. -- It initializes a member variable `dummy_parameter_` to 0.0. +- これは `TemplateModuleManager` クラスのコンストラクタであり、パラメータとして `rclcpp::Node` 参照を受け取ります。 +- メンバー変数 `dummy_parameter_` を 0.0 に初期化します。 -#### `getModuleName()` Method +#### `getModuleName()` メソッド -- This method is an override of a virtual method from the `SceneModuleManagerInterface` class. -- It returns a pointer to a constant character string, which is the name of the module. In this case, it returns "template" as the module name. +- このメソッドは `SceneModuleManagerInterface` クラスの仮想メソッドのオーバーライドです。 +- モジュールの名前である定数文字列へのポインタを返します。この場合、モジュール名を「テンプレート」として返します。 -#### `launchNewModules()` Method +#### `launchNewModules()` メソッド -- This is a private method that takes an argument of type `tier4_planning_msgs::msg::PathWithLaneId`. -- It is responsible for launching new modules based on the provided path information (PathWithLaneId). The implementation of this method involves initializing and configuring modules specific to your behavior velocity planner by using the `TemplateModule` class. -- In the provided source code, it initializes a `module_id` to 0 and checks if a module with the same ID is already registered. If not, it registers a new `TemplateModule` with the module ID. Note that each module managed by the `TemplateModuleManager` should have a unique ID. The template code registers a single module, so the `module_id` is set as 0 for simplicity. +- これは `tier4_planning_msgs::msg::PathWithLaneId` 型の引数を取るプライベートメソッドです。 +- 与えられたパス情報 (PathWithLaneId) に基づいて新しいモジュールを起動する責任があります。このメソッドの実装には、`TemplateModule` クラスを使用して動作速度プランナーに固有のモジュールの初期化と設定が含まれます。 +- 提供されるソースコードでは、`module_id` を 0 に初期化し、同じ ID を持つモジュールがすでに登録されているかどうかを確認します。登録されていない場合、`TemplateModule` をモジュール ID で新しく登録します。`TemplateModuleManager` によって管理される各モジュールは一意の ID を持つ必要があることに注意してください。テンプレートコードは単一のモジュールを登録するため、`module_id` は単純さのために 0 に設定されます。 -#### `getModuleExpiredFunction()` Method +#### `getModuleExpiredFunction()` メソッド -- This is a private method that takes an argument of type `tier4_planning_msgs::msg::PathWithLaneId`. -- It returns a `std::function&)>`. This function is used by the behavior velocity planner to determine whether a particular module has expired or not based on the given path. -- The implementation of this method is expected to return a function that can be used to check the expiration status of modules. +- これは `tier4_planning_msgs::msg::PathWithLaneId` 型の引数を取るプライベートメソッドです。 -Please note that the specific functionality of the methods `launchNewModules()` and `getModuleExpiredFunction()` would depend on the details of your behavior velocity modules and how they are intended to be managed within the Autoware system. You would need to implement these methods according to your module's requirements. +- このメソッドの実装は、モジュールの有効期限ステータスを確認するために使用できる関数を返すことが期待されています。 -### `TemplateModulePlugin` Class +メソッド `launchNewModules()` と `getModuleExpiredFunction()` の具体的な機能は、ビヘイビア速度モジュールの詳細とその Autoware システム内での管理方法によって異なります。モジュールの要件に従ってこれらのメソッドを実装する必要があります。 -#### `TemplateModulePlugin` Class +### `TemplateModulePlugin` クラス -- This class inherits from `PluginWrapper`. It essentially wraps your `TemplateModuleManager` class within a plugin, which can be loaded and managed dynamically. +#### `TemplateModulePlugin` クラス + +- このクラスは `PluginWrapper` から継承します。これは本質的に、動的にロードおよび管理できるプラグイン内への `TemplateModuleManager` クラスをラップします。 ## `Example Usage` -In the following example, we take each point of the path, and multiply it by 2. Essentially duplicating the speed. Note that the velocity smoother will further modify the path speed after all the behavior velocity modules are executed. +次の例では、パスの各点を取得して 2 倍にします。つまり、速度を複製します。すべてのビヘイビア速度モジュールが実行された後、Velocity Smoother がパス速度をさらに変更することに注意してください。 + ```cpp bool TemplateModule::modifyPathVelocity( @@ -83,3 +84,4 @@ bool TemplateModule::modifyPathVelocity( return false; } ``` + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md index e85a171495e38..fb989a5a941e9 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md @@ -1,83 +1,78 @@ -### Traffic Light +### 信号機 -#### Role +#### 役割 -Judgement whether a vehicle can go into an intersection or not by traffic light status, and planning a velocity of the stop if necessary. -This module is designed for rule-based velocity decision that is easy for developers to design its behavior. It generates proper velocity for traffic light scene. +車両が交差点に進入できるかどうかを信号機の状態によって判断し、必要に応じて停止時の速度を計画します。このモジュールは、開発者が挙動を設計しやすいルールベースの速度決定のために設計されています。信号機シーンに適した速度を生成します。 ![brief](./docs/traffic_light.svg) -### Limitations +### 制限事項 -This module allows developers to design STOP/GO in traffic light module using specific rules. Due to the property of rule-based planning, the algorithm is greatly depends on object detection and perception accuracy considering traffic light. Also, this module only handles STOP/Go at traffic light scene, so rushing or quick decision according to traffic condition is future work. +このモジュールにより、開発者は特定のルールを使用して、信号機モジュールでの停止/進行を設計できます。ルールベースの計画の性質により、このアルゴリズムは、信号機を考慮した物体検出と認識の精度に大きく依存します。また、このモジュールは信号機シーンでの停止/進行のみを処理します。したがって、交通状況に応じた急ぎ足または迅速な決定は今後の課題です。 -#### Activation Timing +#### 起動タイミング -This module is activated when there is traffic light in ego lane. +このモジュールは、自車レーンに信号機があるときに起動します。 -#### Algorithm +#### アルゴリズム -1. Obtains a traffic light mapped to the route and a stop line correspond to the traffic light from a map information. +1. 地図情報から、ルートにマップされた信号機と信号機に対応する停止線を取得します。 - - If a corresponding traffic light signal have never been found, it treats as a signal to pass. + - 対応する信号機信号が一度も検出されない場合、通過する信号として扱います。 - - If a corresponding traffic light signal is found but timed out, it treats as a signal to stop. + - 対応する信号機信号が検出されるがタイムアウトした場合、停止する信号として扱います。 -2. Uses the highest reliability one of the traffic light recognition result and if the color of that was not green or corresponding arrow signal, generates a stop point. +2. 信号機認識結果の中で最も信頼性の高いものを採用し、その色が緑または対応する矢印信号ではなかった場合、停止点を生成します。 - - If an elapsed time to receive stop signal is less than `stop_time_hysteresis`, it treats as a signal to pass. This feature is to prevent chattering. + - 停止信号を受信する経過時間が `stop_time_hysteresis` 未満の場合、通過する信号として扱います。この機能は、チャタリングを防ぐためのものです。 -3. When vehicle current velocity is +3. 車両の現在の速度が - - higher than 2.0m/s ⇒ pass judge(using next slide formula) + - 2.0m/s 以上 ⇒ 通過判断(次のスライドの式を使用して) - - lower than 2.0m/s ⇒ stop + - 2.0m/s 未満 ⇒ 停止 -4. When it to be judged that vehicle can’t stop before stop line, autoware chooses one of the following behaviors +4. 車両が停止線までに停止できないと判断された場合、Autoware は次のいずれかの動作を選択します。 - - "can pass through" stop line during yellow lamp => pass + - 黄信号中に停止線を「通過可能」 => 通過 - - "can’t pass through" stop line during yellow lamp => emergency stop + - 黄信号中に停止線を「通過不可」 => 緊急停止 -#### Dilemma Zone +#### ジレンマゾーン ![brief](./docs/traffic_light_dilemma.svg) -- yellow lamp line +- 黄信号線 - It’s called “yellow lamp line” which shows the distance traveled by the vehicle during yellow lamp. + 黄信号中に車両が移動する距離を示す「黄信号線」と呼ばれます。 -- dilemma zone +- ジレンマゾーン - It’s called “dilemma zone” which satisfies following conditions: + 次の条件を満たす「ジレンマゾーン」と呼ばれます。 - - vehicle can’t pass through stop line during yellow lamp.(right side of the yellow lamp line) + - 車両は黄信号中に停止線を通過できません(黄信号線の右側)。 - - vehicle can’t stop under deceleration and jerk limit.(left side of the pass judge curve) + - 車両は減速とジャーク限界内では停止できません(通過判断曲線の左側)。 - ⇒emergency stop(relax deceleration and jerk limitation in order to observe the traffic regulation) + ⇒ 緊急停止(交通規則を守るために減速とジャークの制限を緩和) -- optional zone +「オプションゾーン」と呼ばれ、以下の条件を満たすものです。 - It’s called “optional zone” which satisfies following conditions: +- 車両は黄色のランプ線(黄色いランプ線の左側)の間に停止線を通過できます。 +- 車両は減速およびジャークの限界で停止できます。(パス判定曲線の右側) ⇒ 停止(Autowareが安全な選択肢を選択します) - - vehicle can pass through stop line during yellow lamp.(left side of the yellow lamp line) +#### モジュールパラメータ - - vehicle can stop under deceleration and jerk limit.(right side of the pass judge curve) +| パラメータ | 型 | 説明 | +|---|---|---| +| `stop_margin` | double | [m] 停止点手前の余裕 | +| `tl_state_timeout` | double | [s] 検出された信号機の結果のタイムアウト | +| `stop_time_hysteresis` | double | [s] チャタリング防止のための停止計画の決定に関する時間閾値 | +| `yellow_lamp_period` | double | [s] 黄色のランプ時間 | +| `enable_pass_judge` | bool | [-] 通過判定を使用するかどうか | - ⇒ stop(autoware selects the safety choice) +#### フローチャート -#### Module Parameters - -| Parameter | Type | Description | -| ---------------------- | ------ | -------------------------------------------------------------------- | -| `stop_margin` | double | [m] margin before stop point | -| `tl_state_timeout` | double | [s] time out for detected traffic light result. | -| `stop_time_hysteresis` | double | [s] time threshold to decide stop planning for chattering prevention | -| `yellow_lamp_period` | double | [s] time for yellow lamp | -| `enable_pass_judge` | bool | [-] whether to use pass judge | - -#### Flowchart ```plantuml @startuml @@ -119,6 +114,7 @@ endif @enduml ``` -##### Known Limits +##### 既知の限界 + +- 現在確認中 -- tbd. diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md index 57ef6c9e1cf80..07e7e9ff796b1 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md @@ -1,31 +1,32 @@ -### Virtual Traffic Light +### バーチャル交通信号機 -#### Role +#### 役割 -Autonomous vehicles have to cooperate with the infrastructures such as: +自動運転車は、以下のようなインフラと連携する必要があります。 -- Warehouse shutters -- Traffic lights with V2X support -- Communication devices at intersections -- Fleet Management Systems (FMS) +- 倉庫のシャッター +- V2X対応信号機 +- 交差点の通信機器 +- フリート管理システム (FMS) -The following items are example cases: +例を以下に示します。 -1. Traffic control by traffic lights with V2X support +1. V2X対応信号機による交通制御 ![traffic_light](docs/V2X_support_traffic_light.png) -2. Intersection coordination of multiple vehicles by FMS. +2. FMSによる複数の車両の交差点調整 ![FMS](docs/intersection-coordination.png) -It's possible to make each function individually, however, the use cases can be generalized with these three elements. +これらの機能は個別に実現することもできますが、ユースケースは次の3つの要素で一般化できます。 -1. `start`: Start a cooperation procedure after the vehicle enters a certain zone. -2. `stop`: Stop at a defined stop line according to the status received from infrastructures. -3. `end`: Finalize the cooperation procedure after the vehicle reaches the exit zone. This should be done within the range of stable communication. +1. `start`: 車両が特定のゾーンに入った後、連携手順を開始します。 +2. `stop`: インフラから受信したステータスに従って、定義された停止線で停止します。 +3. `end`: 車両が終了ゾーンに到達した後、連携手順を完了します。これは、安定した通信範囲内で行う必要があります。 -This module sends/receives status from infrastructures and plans the velocity of the cooperation result. +このモジュールは、インフラからステータスを送受信し、連携結果の速度を計画します。 + +### システム構成図 -### System Configuration Diagram ```plantuml @startuml @@ -83,31 +84,32 @@ remote_controllable_traffic_light -[hidden]right-> warning_light @enduml ``` -Planner and each infrastructure communicate with each other using common abstracted messages. +プランナーと各インフラストラクチャは共通抽象メッセージを使用して相互に通信します。 -- Special handling for each infrastructure is not scalable. The interface is defined as an Autoware API. -- The requirements for each infrastructure are slightly different, but will be handled flexibly. +- 各インフラストラクチャに対する特別な処理は拡張性がありません。インターフェイスは Autoware API として定義されています。 +- 各インフラストラクチャの要件はわずかに異なりますが、柔軟に対応します。 -FMS: Intersection coordination when multiple vehicles are in operation and the relevant lane is occupied +FMS: 複数の車両が運用中で関連レーンの占有がある場合の交差点調整 -- Automatic shutter: Open the shutter when approaching/close it when leaving -- Manual shutter: Have the driver open and close the shutter. -- Remote control signal: Have the driver change the signal status to match the direction of travel. -- Warning light: Activate the warning light +- 自動シャッター: 接近時にシャッターを開き、離開時に閉じる +- 手動シャッター: ドライバーにシャッターを開閉してもらう。 +- リモートコントロール信号: ドライバーに進行方向に合わせて信号状態を変更してもらう。 +- 警告灯: 警告灯を作動させる。 -Support different communication methods for different infrastructures +インフラストラクチャごとに異なる通信方法をサポートする - HTTP - Bluetooth - ZigBee -Have different meta-information for each geographic location +地理的な場所ごとに異なるメタ情報を保有する + +- 関連するレーン ID +- ハードウェア ID +- 通信方式 -- Associated lane ID -- Hardware ID -- Communication method +FMS: フリートマネジメントシステム -FMS: Fleet Management System ```plantuml @startuml @@ -204,38 +206,41 @@ remote_controllable_traffic_light -[hidden]down-> warning_light @enduml ``` -#### Module Parameters +#### モジュールパラメータ + +## 自動運転ソフトウェア パラメータ -| Parameter | Type | Description | -| ------------------------------- | ------ | --------------------------------------------------------------------- | -| `max_delay_sec` | double | [s] maximum allowed delay for command | -| `near_line_distance` | double | [m] threshold distance to stop line to check ego stop. | -| `dead_line_margin` | double | [m] threshold distance that this module continue to insert stop line. | -| `hold_stop_margin_distance` | double | [m] parameter for restart prevention (See following section) | -| `check_timeout_after_stop_line` | bool | [-] check timeout to stop when linkage is disconnected | +| パラメータ | 型 | 説明 | +|---|---|---| +| `max_delay_sec` | double | [秒] コマンドの最大許容遅延 | +| `near_line_distance` | double | [m] 停車線を停止するために停止線までの距離のしきい値 | +| `dead_line_margin` | double | [m] このモジュールが停止線を挿入し続けるしきい値 | +| `hold_stop_margin_distance` | double | [m] 再起動防止のパラメータ(以降のセクションを参照) | +| `check_timeout_after_stop_line` | bool | [-] リンクが切断されたときに停止するタイムアウトの確認 | -#### Restart prevention +#### 再始動防止 -If it needs X meters (e.g. 0.5 meters) to stop once the vehicle starts moving due to the poor vehicle control performance, the vehicle goes over the stopping position that should be strictly observed when the vehicle starts to moving in order to approach the near stop point (e.g. 0.3 meters away). +車両の制御性能が低下するために、車両の動き始め時に停止するのに X メートル(例: 0.5 メートル)を要する場合、車両は停止点に近づこうとして動き始めるときは厳守すべき停止位置を超過します(例: 0.3 メートル距離)。 -This module has parameter `hold_stop_margin_distance` in order to prevent from these redundant restart. If the vehicle is stopped within `hold_stop_margin_distance` meters from stop point of the module (\_front_to_stop_line < hold_stop_margin_distance), the module judges that the vehicle has already stopped for the module's stop point and plans to keep stopping current position even if the vehicle is stopped due to other factors. +このモジュールには、これらの余分な再始動を防止するためのパラメータ `hold_stop_margin_distance` があります。車両がモジュールの停止位置(_front_to_stop_line < hold_stop_margin_distance)から `hold_stop_margin_distance` メーター以内に停止した場合、モジュールは車両がモジュールの停止位置で既に停止していると判断し、他の要素により車両が停止した場合にも、現在の位置で停止し続けることを計画します。
- ![example](docs/restart_prevention.svg){width=1000} -
parameters
+ ![例](docs/restart_prevention.svg){width=1000} +
パラメータ
- ![example](docs/restart.svg){width=1000} -
outside the hold_stop_margin_distance
+ ![例](docs/restart.svg){width=1000} +
hold_stop_margin_distanceの外側
- ![example](docs/keep_stopping.svg){width=1000} -
inside the hold_stop_margin_distance
+ ![例](docs/keep_stopping.svg){width=1000} +
hold_stop_margin_distanceの内側
-#### Flowchart +#### フローチャート + ```plantuml @startuml @@ -284,9 +289,9 @@ stop @enduml ``` -#### Map Format +#### マップフォーマット -- To avoid sudden braking, the length between the start line and stop line of a virtual traffic light must be longer than $l_{\mathrm{min}}$ calculated as follows, assuming that $v_0$ is the velocity when passing the start line and $a_{\mathrm{min}}$ is minimum acceleration defined in Autoware. +- 急ブレーキを回避するため、仮想信号機の始点と停止線の距離は、始点通過時の速度が$v_0$で、Autowareで定義された最小加速度が$a_{\mathrm{min}}$と仮定して計算される$l_{\mathrm{min}}$よりも長くなければなりません。 $$ \begin{align} @@ -294,6 +299,7 @@ l_{\mathrm{min}} = -\frac{v_0^2}{2 a_{\mathrm{min}}} \end{align} $$ -#### Known Limits +#### 制限事項 + +- 未定 -- tbd. diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md index d4abe170b2bf7..954314cc0c4cd 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md @@ -1,5 +1,6 @@ -## Walkway +## 歩道 -### Role +### 役割 + +このモジュールは、自車が私有地に進入または離脱するために横断歩道を含む横断施設を横断する前に停止することを決定します。 -This module decide to stop before the ego will cross the walkway including crosswalk to enter or exit the private area. diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md index 805e5f27d4129..2ce0267a35fad 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md @@ -1,97 +1,93 @@ -## Dynamic Obstacle Stop +## 動的障害物停止 -### Role +### 役割 -`dynamic_obstacle_stop` is a module that stops the ego vehicle from entering the _immediate_ path of a dynamic object. +`dynamic_obstacle_stop` は、自律走行車がダイナミックオブジェクトの _直近の_ パスに進入することを防止するモジュールです。 -The _immediate_ path of an object is the area that the object would traverse during a given time horizon, assuming constant velocity and heading. +オブジェクトの _直近の_ パスとは、一定の速度と向きを想定した場合に、そのオブジェクトが特定の時間枠内に移動する領域のことです。 -![rviz example](docs/dynamic_obstacle_stop_rviz.png) +![rviz の例](docs/dynamic_obstacle_stop_rviz.png) -### Activation Timing +### 起動タイミング -This module is activated if the launch parameter `launch_dynamic_obstacle_stop_module` is set to true in the motion planning launch file. +このモジュールは、モーションプランニング起動ファイルで起動パラメータ `launch_dynamic_obstacle_stop_module` が true に設定されている場合に起動します。 -### Inner-workings / Algorithms +### 内部構造/アルゴリズム -The module insert a stop point where the ego trajectory collides with the immediate path of an object. -The overall module flow can be summarized with the following 4 steps. +このモジュールは、自律走行車の軌跡とオブジェクトの直近のパスが衝突する位置に停止点を挿入します。 +このモジュールの全体的な流れは、次の 4 つのステップで要約できます。 -1. Filter dynamic objects. -2. Calculate immediate path rectangles of the dynamic objects. -3. Find earliest collision where ego collides with an immediate path rectangle. -4. Insert stop point before the collision. +1. 動的オブジェクトのフィルタリング +2. 動的オブジェクトの直近のパス矩形の計算 +3. 自律走行車が直近のパス矩形と衝突する、最も早い衝突箇所の検出 +4. 衝突前に停止点を挿入 -In addition to these 4 steps, 2 mechanisms are in place to make the stop point of this module more stable: an hysteresis and a decision duration buffer. +これらの 4 つのステップに加えて、2 つのメカニズムが、このモジュールの停止点をより安定させるために用意されています。ヒステリシスと決定期間のバッファです。 -The `hysteresis` parameter is used when a stop point was already being inserted in the previous iteration -and it increases the range where dynamic objects are considered close enough to the ego trajectory to be used by the module. +`hysteresis` パラメータは、前のイテレーションで停止点が既に挿入されていた場合に使用され、動的オブジェクトがモジュールで使用するための自律走行車の軌跡に十分近いとみなされる範囲を拡大します。 -#### Filter dynamic objects +#### 動的オブジェクトのフィルタリング -![filtering example](docs/DynamicObstacleStop-Filtering.drawio.svg) +![フィルタリングの例](docs/DynamicObstacleStop-Filtering.drawio.svg) -An object is considered by the module only if it meets all of the following conditions: +オブジェクトは、次の条件をすべて満たす場合にのみモジュールによって考慮されます。 -- it is a vehicle (pedestrians are ignored); -- it is moving at a velocity higher than defined by the `minimum_object_velocity` parameter; -- it is not too close to the current position of the ego vehicle; -- it is not unavoidable (only if parameter `ignore_unavoidable_collisions` is set to `true`); -- it is close to the ego trajectory. +- 車両である(歩行者は無視する) +- `minimum_object_velocity` パラメータで定義されている以上の速度で走行している +- 自律走行車の現在位置にあまりにも近くない +- 回避不可能ではない(`ignore_unavoidable_collisions` パラメータが `true` に設定されている場合のみ) +- 自律走行車の軌跡に近い -An object is considered unavoidable if it is heading towards the ego vehicle such that even if ego stops, a collision would still occur (assuming the object keeps driving in a straight line). +自律走行車が停止しても衝突が発生する(オブジェクトが直線走行を続けると仮定した場合)ため、オブジェクトは自律走行車の方向に走行している場合に回避不可能とみなされます。 -For the last condition, -the object is considered close enough if its lateral distance from the ego trajectory is less than the threshold parameter `minimum_object_distance_from_ego_trajectory` plus half the width of ego and of the object (including the `extra_object_width` parameter). -In addition, the value of the `hysteresis` parameter is added to the minimum distance if a stop point was inserted in the previous iteration. +最後の条件では、自律走行車の軌跡からのオブジェクトの側方距離が、`minimum_object_distance_from_ego_trajectory` パラメータのしきい値に自律走行車とオブジェクトの幅の半分(`extra_object_width` パラメータを含む)を足した値未満の場合に、オブジェクトは十分に近いとみなされます。 +さらに、前のイテレーションで停止点が挿入されていた場合は、`hysteresis` パラメータの値が最小距離に追加されます。 -#### Calculate immediate path rectangles +#### 直近のパス矩形の計算 -![Immediate paths example](docs/DynamicObstacleStop-ImmediatePaths.drawio.svg) +![直近のパス例](docs/DynamicObstacleStop-ImmediatePaths.drawio.svg) -For each considered object, a rectangle is created representing its _immediate_ path. -The rectangle has the width of the object plus the `extra_object_width` parameter -and its length is the current speed of the object multiplied by the `time_horizon`. +考慮される各オブジェクトについて、その _直近の_ パスを表す矩形が作成されます。 +矩形の幅は、オブジェクトの幅に `extra_object_width` パラメータを加えたもので、長さは、オブジェクトの現在の速度に `time_horizon` を掛けたものです。 -#### Find earliest collision +#### 最も早い衝突箇所の検出 -![Earliest collision example](docs/DynamicObstacleStop-Collision.drawio.svg) +![最も早い衝突箇所の例](docs/DynamicObstacleStop-Collision.drawio.svg) -We build the ego trajectory footprints as the set of ego footprint polygons projected on each trajectory point. -We then calculate the intersections between these ego trajectory footprints and the previously calculated immediate path rectangles. -An intersection is ignored if the object is not driving toward ego, i.e., the absolute angle between the object and the trajectory point is larger than $\frac{3 \pi}{4}$. +次に、これらの自車軌跡フットプリントと、以前に計算された直近経路長方形との交差点を計算します。 +交差点は、オブジェクトが自車に向かって走行していない場合(つまり、オブジェクトと軌跡点の間の絶対角度が $\frac{3 \pi}{4}$ より大きい場合)無視されます。 -The collision point with the lowest arc length when projected on the ego trajectory will be used to calculate the final stop point. +自車軌跡に投影したときの距離が最も短い衝突点は、最終停止点の計算に使用されます。 -#### Insert stop point +#### 停止点を挿入する -![Stop point example](docs/DynamicObstacleStop-StopPoint.drawio.svg) +![停止点の例](docs/DynamicObstacleStop-StopPoint.drawio.svg) -Before inserting a stop point, we calculate the range of trajectory arc lengths where it can be inserted. -The minimum is calculated to satisfy the acceleration and jerk constraints of the vehicle. -If a stop point was inserted in the previous iteration of the module, its arc length is used as the maximum. -Finally, -the stop point arc length is calculated to be the arc length of the previously found collision point minus the `stop_distance_buffer` and the ego vehicle longitudinal offset, clamped between the minimum and maximum values. +停止点を挿入する前に、挿入可能な軌跡距離範囲を計算します。 +最小値は、車両の加速度とジャークの制約を満たすように計算されます。 +前のモジュール反復に停止点が挿入された場合、その距離の範囲が最大値として使用されます。 +最後に、停止点の距離の範囲は、以前に検出された衝突点の距離の範囲から「`stop_distance_buffer`」と自車車両の車軸方向のオフセットを減じたもので、最小値と最大値の間でクリッピングされます。 -#### Duration buffer +#### 持続時間バッファ -To prevent chatter caused by noisy perception, two duration parameters are used. +ノイズの多い認識によるチャタリングを防ぐために、2 つの持続時間パラメータが使用されます。 -- `add_stop_duration_buffer` represents the duration of consecutive collision detection with an object for the corresponding stop point to be added. -- `remove_stop_duration_buffer` represents the duration of consecutive non-detection of collision with an object for the corresponding stop point to be removed. +- `add_stop_duration_buffer` は、対応する停止点が追加されるオブジェクトとの連続衝突検出の持続時間を表します。 +- `remove_stop_duration_buffer` は、対応する停止点が削除されるオブジェクトとの衝突の非検出の連続持続時間を表します。 -Timers and collision points are tracked for each dynamic object independently. +タイマーと衝突点は、各ダイナミックオブジェクトに対して独立して追跡されます。 -### Module Parameters +### モジュールパラメータ + +| パラメーター | タイプ | 説明 | +| ---------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------- | +| `extra_object_width` | double | [m] 検出したオブジェクト周辺の余分な幅 | +| `minimum_object_velocity` | double | [m/s] この値以下の速度のオブジェクトは無視されます | +| `stop_distance_buffer` | double | [m] 停止点と衝突点の間に追加する余分な距離 | +| `time_horizon` | double | [s] 衝突チェックに使用される時間的視野 | +| `hysteresis` | double | [m] 衝突が検出されると、このヒステリシスが衝突検出に使用されます | +| `add_stop_duration_buffer` | double | [s] 停止の判断が追加される前に、衝突が継続的に検出されなければならない時間 | +| `remove_stop_duration_buffer` | double | [s] 衝突が検出されなくなってから停止の判断が削除されるまでの時間 | +| `minimum_object_distance_from_ego_trajectory` | double | [m] 衝突を考慮する場合の、自己軌跡とオブジェクトの足跡間の最小距離 | +| `ignore_unavoidable_collisions` | bool | [-] trueの場合、停止では回避できない衝突を無視します(障害物が直進し続けると仮定した場合) | -| Parameter | Type | Description | -| --------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------ | -| `extra_object_width` | double | [m] extra width around detected objects | -| `minimum_object_velocity` | double | [m/s] objects with a velocity bellow this value are ignored | -| `stop_distance_buffer` | double | [m] extra distance to add between the stop point and the collision point | -| `time_horizon` | double | [s] time horizon used for collision checks | -| `hysteresis` | double | [m] once a collision has been detected, this hysteresis is used on the collision detection | -| `add_stop_duration_buffer` | double | [s] duration where a collision must be continuously detected before a stop decision is added | -| `remove_stop_duration_buffer` | double | [s] duration between no collision being detected and the stop decision being remove | -| `minimum_object_distance_from_ego_trajectory` | double | [m] minimum distance between the footprints of ego and an object to consider for collision | -| `ignore_unavoidable_collisions` | bool | [-] if true, ignore collisions that cannot be avoided by stopping (assuming the obstacle continues going straight) | diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md index ef9fd770c6289..8dab87014fa32 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md @@ -1,188 +1,243 @@ -# Obstacle Velocity Limiter +# 障害物速度制限機能 -## Purpose +## 目的 -This node limits the velocity when driving in the direction of an obstacle. -For example, it allows to reduce the velocity when driving close to a guard rail in a curve. +このノードは、障害物の方向へ走行している際の速度を制限します。 +例えば、カーブでガードレールに接近しているときに速度を下げることができます。 -| Without this node | With this node | -| ----------------------------------------------------: | :-------------------------------------------------- | -| ![obstacle_velocity_limiter_off](./media/ovl_off.png) | ![obstacle_velocity_limiter_on](./media/ovl_on.png) | +## 自動運転ソフトウェアドキュメント -## Inner-workings / Algorithms +### **障害物速度制限器** -Using a parameter `min_ttc` (minimum time to collision), the node set velocity limits such that -no collision with an obstacle would occur, even without new control inputs for a duration of `min_ttc`. +障害物速度制限器ノードは、障害物との衝突を回避するために車両の速度を制限します。このノードを有効にすると、車両は障害物との衝突を回避するために次の操作を行います。 -To achieve this, the motion of the ego vehicle is simulated forward in time at each point of the trajectory to create a corresponding footprint. -If the footprint collides with some obstacle, the velocity at the trajectory point is reduced such that the new simulated footprint do not have any collision. +- 障害物との距離が指定されたしきい値よりも小さい場合、車両の速度を制限します。 +- 障害物が車両の走行経路にある場合、車両の経路を再計画します。 -### Simulated Motion, Footprint, and Collision Distance +障害物速度制限器ノードは、次のコンポーネントを使用して障害物との衝突を検出します。 -The motion of the ego vehicle is simulated at each trajectory point using the `heading`, `velocity`, and `steering` defined at the point. -Footprints are then constructed from these simulations and checked for collision. -If a collision is found, the distance from the trajectory point is used to calculate the adjusted velocity that would produce a collision-free footprint. Parameter `simulation.distance_method` allow to switch between an exact distance calculation and a less expensive approximation using a simple euclidean distance. +- **自車位置** +- **障害物検出** +- **経路計画** -Two models can be selected with parameter `simulation.model` for simulating the motion of the vehicle: a simple particle model and a more complicated bicycle model. +障害物速度制限器ノードは、障害物との衝突を回避するために次のコンポーネントを使用して車両の速度を制限します。 -#### Particle Model +- **速度計画** +- **速度制御** -The particle model uses the constant heading and velocity of the vehicle at a trajectory point to simulate the future motion. -The simulated forward motion corresponds to a straight line and the footprint to a rectangle. +### **機能** -##### Footprint +障害物速度制限器ノードには、次の機能があります。 -The rectangle footprint is built from 2 lines parallel to the simulated forward motion and at a distance of half the vehicle width. +- 障害物との衝突を回避するための車両速度の制限 +- 障害物との衝突を回避するための車両経路の再計画 +- 障害物との衝突を回避するための車両速度の`post resampling` + +### **設定** + +障害物速度制限器ノードは以下のパラメータで設定できます。 + +- 障害物との衝突回避のための最小距離しきい値 +- 車両の速度を制限するための最大速度 +- 車両の速度を`post resampling`するための間隔 + +### **使用方法** + +障害物速度制限器ノードを使用するには、次の手順に従います。 + +1. Autowareの「障害物速度制限器」ノードを起動します。 +2. 障害物との衝突回避のための最小距離しきい値、車両の速度を制限するための最大速度、車両の速度を`post resampling`するための間隔を設定します。 +3. 「障害物速度制限器」ノードを車両の他のコンポーネントに接続します。 + +### **例** + +障害物速度制限器ノードは、次のようなシナリオで使用できます。 + +- 車両が他の車両や歩行者に近づきすぎている場合 +- 車両が交差点に近づきすぎている場合 +- 車両が障害物のある道路を走行している場合 + +### **制約事項** + +障害物速度制限器ノードには、次の制約事項があります。 + +- 障害物を正確に検出できない場合があります。 +- 車両の速度を制限できない場合があります。 +- 車両の経路を再計画できない場合があります。 + +### **トラブルシューティング** + +障害物速度制限器ノードに問題がある場合は、次の手順に従います。 + +1. 障害物との衝突回避のための最小距離しきい値が適切に設定されていることを確認します。 +2. 車両の速度を制限するための最大速度が適切に設定されていることを確認します。 +3. 車両の速度を`post resampling`するための間隔が適切に設定されていることを確認します。 +4. 障害物速度制限器ノードが車両の他のコンポーネントに適切に接続されていることを確認します。 + +## 内部機構/アルゴリズム + +パラメータ`min_ttc`(衝突までの最小時間)を使用し、ノードは速度制限を設定して、`min_ttc`の期間、新しい制御入力がなくても障害物との衝突が発生しないようにします。 + +これを達成するために、各軌跡のポイントで自車位置が時間的にシミュレートされ、対応するフットプリントを作成します。 +フットプリントが障害物と衝突した場合、軌跡のポイントの速度が低減されて、新しいシミュレートされたフットプリントが衝突しなくなります。パラメータ`simulation.distance_method`により、正確な距離計算と、単純なユークリッド距離を使用したより安価な近似との切り替えが可能になります。 + +パラメータ`simulation.model`により、車両の動作をシミュレートするための2つのモデルが選択できます。簡単なパーティクルモデルと、より複雑な自転車モデルです。 + +#### パーティクルモデル + +パーティクルモデルは、軌跡のポイントにおける車両の一定の進行方向と速度を使用して、将来の動作をシミュレートします。 +シミュレートされた前方動作は直線で、フットプリントは長方形になります。 + +##### フットプリント + +長方形のフットプリントは、シミュレートされた前方動作に平行で、車両の幅の半分だけ離れた2本の線で形成されます。 ![particle_footprint_image](./media/particle_footprint.png) -##### Distance +##### 距離 -When a collision point is found within the footprint, the distance is calculated as described in the following figure. +衝突点がフットプリント内にある場合、次の図に示すようにして距離が計算されます。 ![particle_collision_distance_image](./media/particle_distance.png) -#### Bicycle Model +#### 自転車モデル -The bicycle model uses the constant heading, velocity, and steering of the vehicle at a trajectory point to simulate the future motion. -The simulated forward motion corresponds to an arc around the circle of curvature associated with the steering. -Uncertainty in the steering can be introduced with the `simulation.steering_offset` parameter which will generate a range of motion from a left-most to a right-most steering. -This results in 3 curved lines starting from the same trajectory point. -A parameter `simulation.nb_points` is used to adjust the precision of these lines, with a minimum of `2` resulting in straight lines and higher values increasing the precision of the curves. +自転車モデルは、軌跡のポイントにおける車両の一定の進行方向、速度、およびステアリングを使用して、将来の動作をシミュレートします。 +シミュレートされた前方動作は、ステアリングに関連付けられた曲率円の周囲の円弧になります。 +ステアリングの不確実性は、`simulation.steering_offset`パラメータを使用して導入できます。このパラメータは、左端のステアリングから右端のステアリングまでの動作の範囲を生成します。 +これにより、同じ軌跡のポイントから始まる3本の曲線が生成されます。 +パラメータ`simulation.nb_points`は、これらの線の精度を調整するために使用され、最小の`2`は直線になり、値が高くなると曲線の精度が向上します。 -By default, the steering values contained in the trajectory message are used. -Parameter `trajectory_preprocessing.calculate_steering_angles` allows to recalculate these values when set to `true`. +デフォルトでは、軌跡メッセージに含まれるステアリング値が使用されます。 +パラメータ`trajectory_preprocessing.calculate_steering_angles`を`true`に設定すると、これらの値を再計算できます。 -##### Footprint +##### フットプリント -The footprint of the bicycle model is created from lines parallel to the left and right simulated motion at a distance of half the vehicle width. -In addition, the two points on the left and right of the end point of the central simulated motion are used to complete the polygon. +自転車モデルのフットプリントは、シミュレートされた左および右の動作に平行で、車両の幅の半分だけ離れた線で作成されます。 +さらに、中央シミュレートされた動作の終点の左と右にある2つの点が使用されて、多角形が完成されます。 ![bicycle_footprint_image](./media/bicycle_footprint.png) -##### Distance +##### 距離 -The distance to a collision point is calculated by finding the curvature circle passing through the trajectory point and the collision point. +衝突点までの距離は、軌跡のポイントと衝突点を通過する曲率円を求めることによって計算されます。 ![bicycle_collision_distance_image](./media/bicycle_distance.png) -### Obstacle Detection +### 障害物検出 -Obstacles are represented as points or linestrings (i.e., sequence of points) around the obstacles and are constructed from an occupancy grid, a pointcloud, or the lanelet map. -The lanelet map is always checked for obstacles but the other source is switched using parameter `obstacles.dynamic_source`. +レーンレットマップは常に障害物をチェックしていますが、他のソースはパラメーター `obstacles.dynamic_source` を使用して切り替えられます。 -To efficiently find obstacles intersecting with a footprint, they are stored in a [R-tree](https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html). -Two trees are used, one for the obstacle points, and one for the obstacle linestrings (which are decomposed into segments to simplify the R-tree). +フットプリントと交差する障害物を効率的に探すために、それらは R-ツリー ([https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html](https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html)) に格納されます。 +2 つのツリーが使用されます。1 つは障害物点用で、1 つは障害物ラインストリング用です (R-ツリーを簡素化するために、ラインストリングはセグメントに分解されます)。 -#### Obstacle masks +#### オブスタクルマスク -##### Dynamic obstacles +##### 動的障害物 -Moving obstacles such as other cars should not be considered by this module. -These obstacles are detected by the perception modules and represented as polygons. -Obstacles inside these polygons are ignored. +他の車などの移動障害物は、このモジュールでは考慮されません。 +これらの障害物は知覚モジュールで検出され、ポリゴンとして表現されます。 +これらのポリゴン内の障害物は無視されます。 -Only dynamic obstacles with a velocity above parameter `obstacles.dynamic_obstacles_min_vel` are removed. +パラメーター `obstacles.dynamic_obstacles_min_vel` よりも速度が高い動的障害物のみが削除されます。 -To deal with delays and precision errors, the polygons can be enlarged with parameter `obstacles.dynamic_obstacles_buffer`. +遅延や精度のエラーに対処するために、パラメーター `obstacles.dynamic_obstacles_buffer` でポリゴンを拡大できます。 -##### Obstacles outside of the safety envelope +##### 安全範囲外の障害物 -Obstacles that are not inside any forward simulated footprint are ignored if parameter `obstacles.filter_envelope` is set to true. -The safety envelope polygon is built from all the footprints and used as a positive mask on the occupancy grid or pointcloud. +パラメーター `obstacles.filter_envelope` が `true` に設定されている場合、横断シミュレートフットプリント内に入っていない障害物は無視されます。 +安全範囲ポリゴンはすべてのフットプリントから構築され、占有グリッドまたは点群上で正マスクとして使用されます。 -This option can reduce the total number of obstacles which reduces the cost of collision detection. -However, the cost of masking the envelope is usually too high to be interesting. +このオプションは障害物の総数を減らすことができ、衝突検出のコストを削減します。 +ただし、範囲を覆うコストは通常、検討するには高すぎます。 -##### Obstacles on the ego path +##### エゴパス上の障害物 -If parameter `obstacles.ignore_obstacles_on_path` is set to `true`, a polygon mask is built from the trajectory and the vehicle dimension. Any obstacle in this polygon is ignored. +パラメーター `obstacles.ignore_obstacles_on_path` が `true` に設定されている場合、軌道と車両寸法からポリゴンマスクが構築されます。 +このポリゴン内の障害物はすべて無視されます。 -The size of the polygon can be increased using parameter `obstacles.ignore_extra_distance` which is added to the vehicle lateral offset. +ポリゴンのサイズは、車両の横方向オフセットに追加される `obstacles.ignore_extra_distance` パラメーターを使用して増やすことができます。 -This option is a bit expensive and should only be used in case of noisy dynamic obstacles where obstacles are wrongly detected on the ego path, causing unwanted velocity limits. +このオプションは少しコストが高く、不適切な動的障害物がエゴパス上で検出され、不要な速度制限が発生するような、ノイズの多い動的障害物がある場合にのみ使用​​する必要があります。 -#### Lanelet Map +#### レーンレットマップ -Information about static obstacles can be stored in the Lanelet map using the value of the `type` tag of linestrings. -If any linestring has a `type` with one of the value from parameter `obstacles.static_map_tags`, then it will be used as an obstacle. +静的障害物に関する情報は、ラインストリングの `type` タグの値を使用してレーンレットマップに格納できます。 +ラインストリングに `type` がパラメーター `obstacles.static_map_tags` の値のいずれかがある場合、それは障害物として使用されます。 -Obstacles from the lanelet map are not impacted by the masks. +レーンレットマップからの障害物はマスクの影響を受けません。 -#### Occupancy Grid +#### 占有グリッド -Masking is performed by iterating through the cells inside each polygon mask using the [`autoware::grid_map_utils::PolygonIterator`](https://github.com/autowarefoundation/autoware.universe/tree/main/common/autoware_grid_map_utils) function. -A threshold is then applied to only keep cells with an occupancy value above parameter `obstacles.occupancy_grid_threshold`. -Finally, the image is converted to an image and obstacle linestrings are extracted using the opencv function -[`findContour`](https://docs.opencv.org/3.4/d3/dc0/group__imgproc__shape.html#ga17ed9f5d79ae97bd4c7cf18403e1689a). +マスキングは [`autoware::grid_map_utils::PolygonIterator`](https://github.com/autowarefoundation/autoware.universe/tree/main/common/autoware_grid_map_utils) 関数を使用して、各ポリゴンマスク内のセルを反復処理することで実行されます。 +次に、パラメーター `obstacles.occupancy_grid_threshold` よりも高い占有値を持つセルのみを保持するようにしきい値が適用されます。 +最後に、イメージはイメージに変換され、障害物ラインストリングは opencv 関数 +[`findContour`](https://docs.opencv.org/3.4/d3/dc0/group__imgproc__shape.html#ga17ed9f5d79ae97bd4c7cf18403e1689a) を使用して抽出されます。 -#### Pointcloud +#### 点群 -Masking is performed using the [`pcl::CropHull`](https://pointclouds.org/documentation/classpcl_1_1_crop_hull.html) function. -Points from the pointcloud are then directly used as obstacles. +マスキングは [`pcl::CropHull`](https://pointclouds.org/documentation/classpcl_1_1_crop_hull.html) 関数を使用して実行されます。 +次に、点群からの点が障害物として直接使用されます。 -### Velocity Adjustment +### 速度調節 -If a collision is found, the velocity at the trajectory point is adjusted such that the resulting footprint would no longer collide with an obstacle: +衝突が検出された場合、軌跡のポイントでの速度は、その結果のフットプリントが障害物に衝突しなくなるように調整されます: $velocity = \frac{dist\_to\_collision}{min\_ttc}$ -To prevent sudden deceleration of the ego vehicle, the parameter `max_deceleration` limits the deceleration relative to the current ego velocity. -For a trajectory point occurring at a duration `t` in the future (calculated from the original velocity profile), -the adjusted velocity cannot be set lower than $v_{current} - t * max\_deceleration$. +エゴ車両の急激な減速を防ぐために、`max_deceleration` パラメーターは、現在のエゴ速度に対する減速を制限します。 +未来の期間 `t` で発生する軌跡点の場合 (元の速度プロファイルから計算されます)、 + +さらに、`min_adjusted_velocity` パラメータは修正された速度の下限を指定します。 -Furthermore, a parameter `min_adjusted_velocity` -provides a lower bound on the modified velocity. +### 軌道の前処理 -### Trajectory preprocessing +このノードは、自車位置からの入力軌跡の一部のみを変更します。 +パラメータ `trajectory_preprocessing.start_distance` は、自車位置のどれだけ前から速度が修正され始めるかを調整するために使用されます。 +パラメータ `trajectory_preprocessing.max_length` および `trajectory_preprocessing.max_duration` は、速度が調整される軌道の量を制御するために使用されます。 -The node only modifies part of the input trajectory, starting from the current ego position. -Parameter `trajectory_preprocessing.start_distance` is used to adjust how far ahead of the ego position the velocities will start being modified. -Parameters `trajectory_preprocessing.max_length` and `trajectory_preprocessing.max_duration` are used to control how much of the trajectory will see its velocity adjusted. +`trajectory_preprocessing.downsample_factor` パラメータを使用して、精度を犠牲にしてコンピューティングコストを削減するために、軌跡をダウンサンプリングできます。 +たとえば、値 `1` はすべての軌跡点が評価されることを意味し、値 `10` はポイントの 1/10 のみ評価されることを意味します。 -To reduce computation cost at the cost of precision, the trajectory can be downsampled using parameter `trajectory_preprocessing.downsample_factor`. -For example a value of `1` means all trajectory points will be evaluated while a value of `10` means only 1/10th of the points will be evaluated. +## パラメータ -## Parameters +| 名前 | 型 | 説明 | +|---|---|---| +| `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 | 安全エンベロープを使用して動的障害物ソースをフィルタリングするかどうか。 | -| Name | Type | Description | -| --------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| `min_ttc` | float | [s] required minimum time with no collision at each point of the trajectory assuming constant heading and velocity. | -| `distance_buffer` | float | [m] required distance buffer with the obstacles. | -| `min_adjusted_velocity` | float | [m/s] minimum adjusted velocity this node can set. | -| `max_deceleration` | float | [m/s²] maximum deceleration an adjusted velocity can cause. | -| `trajectory_preprocessing.start_distance` | float | [m] controls from which part of the trajectory (relative to the current ego pose) the velocity is adjusted. | -| `trajectory_preprocessing.max_length` | float | [m] controls the maximum length (starting from the `start_distance`) where the velocity is adjusted. | -| `trajectory_preprocessing.max_distance` | float | [s] controls the maximum duration (measured from the `start_distance`) where the velocity is adjusted. | -| `trajectory_preprocessing.downsample_factor` | int | trajectory downsampling factor to allow tradeoff between precision and performance. | -| `trajectory_preprocessing.calculate_steering_angle` | bool | if true, the steering angles of the trajectory message are not used but are recalculated. | -| `simulation.model` | string | model to use for forward simulation. Either "particle" or "bicycle". | -| `simulation.distance_method` | string | method to use for calculating distance to collision. Either "exact" or "approximation". | -| `simulation.steering_offset` | float | offset around the steering used by the bicycle model. | -| `simulation.nb_points` | int | number of points used to simulate motion with the bicycle model. | -| `obstacles.dynamic_source` | string | source of dynamic obstacle used for collision checking. Can be "occupancy_grid", "point_cloud", or "static_only" (no dynamic obstacle). | -| `obstacles.occupancy_grid_threshold` | int | value in the occupancy grid above which a cell is considered an obstacle. | -| `obstacles.dynamic_obstacles_buffer` | float | buffer around dynamic obstacles used when masking an obstacle in order to prevent noise. | -| `obstacles.dynamic_obstacles_min_vel` | float | velocity above which to mask a dynamic obstacle. | -| `obstacles.static_map_tags` | string list | linestring of the lanelet map with this tags are used as obstacles. | -| `obstacles.filter_envelope` | bool | wether to use the safety envelope to filter the dynamic obstacles source. | +## 仮定 / 制約 -## Assumptions / Known limits +このノードが出力する速度プロファイルは現実的なものではなく、加速度やジャークの考慮なく速度が急変することがあります。 +この速度プロファイルは、車両の実際の速度の上限として使用するものとして意図されています。 -The velocity profile produced by this node is not meant to be a realistic velocity profile -and can contain sudden jumps of velocity with no regard for acceleration and jerk. -This velocity profile is meant to be used as an upper bound on the actual velocity of the vehicle. +## (オプション) エラー検出と処理 -## (Optional) Error detection and handling +このノードにとって重要なケースは、障害物が軌道に非常に近距離で誤って検出され、それに対応する速度が非常に低下する場合です。 +これは急ブレーキを引き起こす可能性があり、これらのエラーを軽減するために2つのメカニズムを使用できます。 -The critical case for this node is when an obstacle is falsely detected very close to the trajectory such that -the corresponding velocity suddenly becomes very low. -This can cause a sudden brake and two mechanisms can be used to mitigate these errors. +パラメーター「min_adjusted_velocity」は調整された速度に最小値を設定し、ノードが車両を減速しすぎないようにします。 +パラメーター「max_deceleration」は、調整された速度で発生する最大減速度(現在の自車速度に対する相対値)を設定できます。 -Parameter `min_adjusted_velocity` allow to set a minimum to the adjusted velocity, preventing the node to slow down the vehicle too much. -Parameter `max_deceleration` allow to set a maximum deceleration (relative to the _current_ ego velocity) that the adjusted velocity would incur. +## (オプション) パフォーマンスの特徴付け -## (Optional) Performance characterization +## (オプション) 参照 / 外部リンク -## (Optional) References/External links +## (オプション) 今後の拡張 / 実装されていない部分 -## (Optional) Future extensions / Unimplemented parts diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md index dfc88ef676838..fb1cc55fa69d4 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md @@ -1,142 +1,139 @@ -# Out of Lane +# レーン逸脱 -## Role +## 役割 -There are cases where the ego vehicle footprint goes out of the driving lane, -for example when taking a narrow turn with a large vehicle. -The `out_of_lane` module adds deceleration and stop points to the ego trajectory in order to prevent collisions from occurring in these out of lane cases. +自車のフットプリントが車線を逸脱する場合があります。たとえば、大型車両で狭い角を曲がるときです。 +`out_of_lane`モジュールは、このような車線逸脱時に衝突が発生しないようにするために、車両軌跡に減速ポイントと停止ポイントを追加します。 -## Activation +## アクティベーション -This module is activated if the launch parameter `launch_out_of_lane_module` is set to true. +このモジュールは、起動パラメータ`launch_out_of_lane_module`が`true`に設定されている場合にアクティベートされます。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -This module calculates if out of lane collisions occur and insert stop point before the collisions if necessary. +このモジュールは、車線逸脱衝突が発生するかどうかを計算し、必要に応じて衝突前に停止ポイントを挿入します。 -The algorithm assumes the input ego trajectory contains accurate `time_from_start` -values in order to calculate accurate time to collisions with the predicted objects. +アルゴリズムでは、入力車両軌跡に正確な`time_from_start`値が含まれているものとして、予測オブジェクトとの衝突時刻を正確に計算します。 -Next we explain the inner-workings of the module in more details. +次に、モジュールの内部動作についてさらに詳しく説明します。 -### 1. Ego trajectory footprints +### 1. 車両軌跡フットプリント -In this first step, the ego footprint is projected at each trajectory point and its size is modified based on the `ego.extra_..._offset` parameters. +この最初のステップでは、車両フットプリントが各軌跡ポイントに投影され、そのサイズは`ego.extra_..._offset`パラメータに基づいて修正されます。 -The length of the trajectory used for generating the footprints is limited by the `max_arc_length` parameter. +フットプリントの生成に使用される軌跡の長さは、`max_arc_length`パラメータによって制限されます。 ![ego_footprints](./docs/footprints.png) -### 2. Other lanelets +### 2. 他のレーンのレレット -In the second step, we calculate the lanelets where collisions should be avoided. -We consider all lanelets around the ego vehicle that are not crossed by the trajectory linestring (sequence of trajectory points) or their preceding lanelets. +2番目のステップでは、衝突を回避する必要があるレーンのレレットを計算します。軌跡のラインストリング(軌跡ポイントのシーケンス)またはその先行するレーンのレレットによって横切られない、車両周辺のすべてのレーンのレレットを考慮します。 ![other_lanes](./docs/other_lanes.png) -In the debug visualization, these other lanelets are shown as blue polygons. +デバッグの可視化では、これらの他のレーンのレレットは青い多角形として表示されます。 -### 3. Out of lane areas +### 3. 車線逸脱エリア -Next, for each trajectory point, we create the corresponding out of lane areas by intersection the other lanelets (from step 2) with the trajectory point footprint (from step 1). -Each area is associated with the lanelets overlapped by the area and with the corresponding ego trajectory point. +次に、各軌跡ポイントについて、他のレーンのレレット(ステップ 2 から)を軌跡ポイントのフットプリント(ステップ 1 から)と交差させて、対応する車線逸脱エリアを作成します。 +各エリアは、エリアと重なるレーンのレレットと、対応する車両軌跡ポイントに関連付けられています。 ![out_of_lane_areas](./docs/out_of_lane_areas.png) -In the debug visualization, the out of lane area polygon is connected to the corresponding trajectory point by a line. +デバッグの可視化では、車線逸脱エリアの多角形は、線で対応する軌跡ポイントに接続されています。 -### 4. Predicted objects filtering +### 4. 予測オブジェクトのフィルタリング -We filter objects and their predicted paths with the following conditions: +オブジェクトとその予測パスは、以下の条件でフィルタリングされます。 -- ignore objects with a speed bellow the `minimum_velocity` parameter; -- ignore objects coming from behind the ego vehicle if parameter `ignore_behind_ego` is set to true; -- ignore predicted paths whose confidence value is bellow the `predicted_path_min_confidence` parameter; -- cut the points of predicted paths going beyond the stop line of a red traffic light if parameter `cut_predicted_paths_beyond_red_lights` is set to `true`. +- `minimum_velocity`パラメータ以下の速度のオブジェクトは無視します。 +- パラメータ`ignore_behind_ego`が`true`に設定されている場合は、自車両の後ろから来るオブジェクトを無視します。 +- 信頼度値が`predicted_path_min_confidence`パラメータを下回る予測パスは無視します。 +- パラメータ`cut_predicted_paths_beyond_red_lights`が`true`に設定されている場合は、赤信号の停止線を超える予測パスのポイントをカットします。 | `cut_predicted_paths_beyond_red_lights = false` | `cut_predicted_paths_beyond_red_lights = true` | -| :---------------------------------------------: | :--------------------------------------------: | -| ![](./docs/path_green_light.png) | ![](./docs/path_red_light.png) | +| :----------------------------------------------------: | :---------------------------------------------------: | +| ![](./docs/path_green_light.png) | ![](./docs/path_red_light.png) | -In the debug visualization, the filtered predicted paths are shown in green and the stop lines of red traffic lights are shown in red. +デバッグ可視化では、予測パスは緑、赤信号の停止線は赤で表示されます。 -### 5. Time to collisions +### 5. 衝突までの時間 -For each out of lane area, we calculate the times when a dynamic object will overlap the area based on its filtered predicted paths. +各車線逸脱領域について、予測パスに基づいて、ダイナミックオブジェクトがその領域と重複するまでの時間を計算します。 -In the case where parameter `mode` is set to `threshold` and the calculated time is less than `threshold.time_threshold` parameter, then we decide to avoid the out of lane area. +パラメータ `mode` が `threshold` に設定され、計算された時間が `threshold.time_threshold` パラメータよりも小さい場合、車線逸脱領域を回避すると判断されます。 -In the case where parameter `mode` is set to `ttc`, -we calculate the time to collision by comparing the predicted time of the object with the `time_from_start` field contained in the trajectory point. -If the time to collision is bellow the `ttc.threshold` parameter value, we decide to avoid the out of lane area. +パラメータ `mode` が `ttc` に設定されている場合、 +オブジェクトの予測時間と、軌跡ポイントに含まれる `time_from_start` フィールドを比較して衝突までの時間を計算します。 +衝突までの時間が `ttc.threshold` パラメータ値を下回っている場合、车線逸脱領域の回避が決定されます。 ![ttcs](./docs/ttcs.png) -In the debug visualization, the ttc (in seconds) is displayed on top of its corresponding trajectory point. -The color of the text is red if the collision should be avoided and green otherwise. +デバッグの可視化では、ttc(秒)が対応する軌跡ポイントの上に表示されます。 +衝突を回避する必要がある場合はテキストは赤色、そうでない場合は緑色になります。 -### 6. Calculate the stop or slowdown point +### 6. 停止または減速ポイントの計算 -First, the minimum stopping distance of the ego vehicle is calculated based on the jerk and deceleration constraints set by the velocity smoother parameters. +まず、車両滑らかさパラメータで設定されたジャークおよび減速の制約に基づいて、自車の最小停止距離を計算します。 -We then search for the furthest pose along the trajectory where the ego footprint stays inside of the ego lane (calculate in step 2) and constraint the search to be between the minimum stopping distance and the 1st trajectory point with a collision to avoid (as determined in the previous step). -The search is done by moving backward along the trajectory with a distance step set by the `action.precision` parameter. +次に、軌跡に沿って、自車のフットプリントが自車車線内に留まる最長ポイントを探し、最小停止距離と回避すべき衝突が発生する最初の軌跡ポイント(前の手順で決定)の間に検索範囲を制限します。 +検索は、`action.precision` パラメータで設定されたステップ距離で、軌跡に沿って後方に移動することで実行されます。 -We first do this search for a footprint expanded with the `ego.extra_..._offset`, `action.longitudinal_distance_buffer` and `action.lateral_distance_buffer` parameters. -If no valid pose is found, we search again while only considering the extra offsets but without considering the distance buffers. -If still no valid pose is found, we use the base ego footprint without any offset. -In case no pose is found, we fallback to using the pose before the detected collision without caring if it is out of lane or not. +最初に、この検索を `ego.extra_..._offset`、`action.longitudinal_distance_buffer`、および `action.lateral_distance_buffer` パラメータで拡張されたフットプリントに対して実行します。 +有効なポイントが見つからない場合、超オフセットのみを考慮し、距離バッファは考慮せずに再度検索します。 +それでも有効なポイントが見つからない場合は、オフセットなしのベースの自車フットプリントを使用します。 +ポイントが見つからない場合は、車線逸脱の有無にかかわらず、衝突が検出される前のポイントを使用します。 -Whether it is decided to slow down or stop is determined by the distance between the ego vehicle and the trajectory point to avoid. -If this distance is bellow the `actions.slowdown.threshold`, a velocity of `actions.slowdown.velocity` will be used. -If the distance is bellow the `actions.stop.threshold`, a velocity of `0`m/s will be used. +減速するか停止するかを決定するのは、自車と回避する必要がある軌跡ポイントとの距離です。 +この距離が `actions.slowdown.threshold` を下回ると、`actions.slowdown.velocity` の速度が使用されます。 +距離が `actions.stop.threshold` を下回ると、`0` m/s の速度が使用されます。 ![avoid_collision](./docs/ttcs_avoid.png) -### About stability of the stop/slowdown pose +### 停止/減速ポイントの安定性について -As the input trajectory can change significantly between iterations, -it is expected that the decisions of this module will also change. -To make the decision more stable, a stop or slowdown pose is used for a minimum duration set by the `action.min_duration` parameter. -If during that time a new pose closer to the ego vehicle is generated, then it replaces the previous one. -Otherwise, the stop or slowdown pose will only be discarded after no out of lane collision is detection for the set duration. +入力軌跡は反復間で大幅に変更される可能性があるため、このモジュールの決定も変更されることが想定されます。 +決定をより安定させるため、停止または減速ポイントは `action.min_duration` パラメータで設定された最小時間使用されます。 +その間に自車に近い新しいポイントが生成された場合、古いポイントと置き換えられます。 +それ以外の場合は、設定された時間の間、車線逸脱の衝突が検出されない場合にのみ、停止または減速ポイントは破棄されます。 -## Module Parameters +## モジュールパラメータ -| Parameter | Type | Description | -| ----------------------------- | ------ | --------------------------------------------------------------------------------- | -| `mode` | string | [-] mode used to consider a dynamic object. Candidates: threshold, intervals, ttc | -| `skip_if_already_overlapping` | bool | [-] if true, do not run this module when ego already overlaps another lane | -| `max_arc_length` | double | [m] maximum trajectory arc length that is checked for out_of_lane collisions | +| パラメータ | 型 | 説明 | +| ---------------- | ---- | ---------------------------------------- | +| `mode` | 文字列 | 動的対象の考慮に使用するモード。候補: threshold, intervals, ttc | +| `skip_if_already_overlapping` | ブール値 | 真の場合、自車が既に他の車線と重複している場合、このモジュールを実行しない | +| `max_arc_length` | double | 車線逸脱衝突の確認に使用される最大軌跡弧長 | -| Parameter /threshold | Type | Description | +| パラメータ/しきい値 | 型 | 説明 | | -------------------- | ------ | ---------------------------------------------------------------- | -| `time_threshold` | double | [s] consider objects that will reach an overlap within this time | - -| Parameter /ttc | Type | Description | -| -------------- | ------ | ------------------------------------------------------------------------------------------------------ | -| `threshold` | double | [s] consider objects with an estimated time to collision bellow this value while ego is on the overlap | - -| Parameter /objects | Type | Description | -| --------------------------------------- | ------ | ------------------------------------------------------------------------------- | -| `minimum_velocity` | double | [m/s] ignore objects with a velocity lower than this value | -| `predicted_path_min_confidence` | double | [-] minimum confidence required for a predicted path to be considered | -| `cut_predicted_paths_beyond_red_lights` | bool | [-] if true, predicted paths are cut beyond the stop line of red traffic lights | -| `ignore_behind_ego` | bool | [-] if true, objects behind the ego vehicle are ignored | - -| Parameter /action | Type | Description | -| ------------------------------ | ------ | --------------------------------------------------------------------- | -| `precision` | double | [m] precision when inserting a stop pose in the trajectory | -| `longitudinal_distance_buffer` | double | [m] safety distance buffer to keep in front of the ego vehicle | -| `lateral_distance_buffer` | double | [m] safety distance buffer to keep on the side of the ego vehicle | -| `min_duration` | double | [s] minimum duration needed before a decision can be canceled | -| `slowdown.distance_threshold` | double | [m] insert a slow down when closer than this distance from an overlap | -| `slowdown.velocity` | double | [m] slow down velocity | -| `stop.distance_threshold` | double | [m] insert a stop when closer than this distance from an overlap | - -| Parameter /ego | Type | Description | -| -------------------- | ------ | ---------------------------------------------------- | -| `extra_front_offset` | double | [m] extra front distance to add to the ego footprint | -| `extra_rear_offset` | double | [m] extra rear distance to add to the ego footprint | -| `extra_left_offset` | double | [m] extra left distance to add to the ego footprint | -| `extra_right_offset` | double | [m] extra right distance to add to the ego footprint | +| `time_threshold` | double | [s] この時間内に重なりが生じる可能性のあるオブジェクトを考慮する | + +| Parameter /ttc | Type | Description | +| -------------- | ------ | ----------------------------------------------------------------------------------------------------- | +| `threshold` | double | egoが重なっている間に、この値よりも推定衝突時間(TTC)が短いオブジェクトを考慮します。 | + +| パラメータ / オブジェクト | データ型 | 説明 | +|---|---|---| +| `minimum_velocity` | double | [m/s] この値以下の速度のオブジェクトを無視 | +| `predicted_path_min_confidence` | double | [-] 予測パスが有効と見なされるための最小信頼度 | +| `cut_predicted_paths_beyond_red_lights` | bool | [-] trueの場合、赤信号の停止線の向こう側の予測パスは切断 | +| `ignore_behind_ego` | bool | [-] trueの場合、自車後方のオブジェクトは無視 | + +| パラメータ/アクション | タイプ | 説明 | +| -------------------------------- | ------ | ------------------------------------------------------------------------ | +| `precision` | double | 停止点を軌跡に挿入するときの[m]精度 | +| `longitudinal_distance_buffer` | double | 自車の前方に保持する[m]の安全距離バッファ | +| `lateral_distance_buffer` | double | 自車の側面に保持する[m]の安全距離バッファ | +| `min_duration` | double | 決定をキャンセルできるようになるまでに必要な[s]の最小継続時間 | +| `slowdown.distance_threshold` | double | オーバーラップからこの距離よりも近づいたときに減速を挿入する | +| `slowdown.velocity` | double | 減速速度 | +| `stop.distance_threshold` | double | オーバーラップからこの距離よりも近づいたときに停止を挿入する | + +| パラメータ/自車 | タイプ | 説明 | +| ---------------- | ----- | ---------------------------------------------------- | +| `extra_front_offset` | double | 自車フットプリントに追加する前方距離[m] | +| `extra_rear_offset` | double | 自車フットプリントに追加する後方距離[m] | +| `extra_left_offset` | double | 自車フットプリントに追加する左側距離[m] | +| `extra_right_offset` | double | 自車フットプリントに追加する右側距離[m] | + diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md index 494446828e134..ea4471907a62c 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md @@ -1,58 +1,79 @@ -# Motion Velocity Planner +# 運動速度プランナー -## Overview +## 概要 -`motion_velocity_planner` is a planner to adjust the trajectory velocity based on the obstacles around the vehicle. -It loads modules as plugins. Please refer to the links listed below for detail on each module. +`motion_velocity_planner`は、車両周囲の障害物に基づいて経路速度を調整するためのプランナーです。 +プラグインとしてモジュールを読み込みます。各モジュールの詳細については、以下にリストされているリンクを参照してください。 -![Architecture](./docs/MotionVelocityPlanner-InternalInterface.drawio.svg) +![アーキテクチャ](./docs/MotionVelocityPlanner-InternalInterface.drawio.svg) - [Out of Lane](../autoware_motion_velocity_out_of_lane_module/README.md) -Each module calculates stop and slow down points to be inserted in the ego trajectory. -These points are assumed to correspond to the `base_link` frame of the ego vehicle as it follows the trajectory. -This means that to stop before a wall, a stop point is inserted in the trajectory at a distance ahead of the wall equal to the vehicle front offset (wheelbase + front overhang, see the [vehicle dimensions](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/vehicle-dimensions/). +各モジュールは自車トラジェクトリに挿入される停止および減速点を計算します。 +これらの点は、自車がトラジェクトリに従う場合の自車`base_link`フレームに対応すると想定されています。 +つまり、壁の前に停止するには、車体前オフセット(ホイールベース + 前方オーバーハング、[車両寸法](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/vehicle-dimensions/)を参照)に等しい距離でトラジェクトリに停止点が挿入されます。 -![set_stop_velocity](./docs/set_stop_velocity.drawio.svg) +![停止速度を設定](./docs/set_stop_velocity.drawio.svg) -## Input topics +## 入力トピック -| Name | Type | Description | -| -------------------------------------- | ----------------------------------------------------- | ----------------------------- | -| `~/input/trajectory` | autoware_planning_msgs::msg::Trajectory | input trajectory | -| `~/input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | vector map | -| `~/input/vehicle_odometry` | nav_msgs::msg::Odometry | vehicle position and velocity | -| `~/input/accel` | geometry_msgs::msg::AccelWithCovarianceStamped | vehicle acceleration | -| `~/input/dynamic_objects` | autoware_perception_msgs::msg::PredictedObjects | dynamic objects | -| `~/input/no_ground_pointcloud` | sensor_msgs::msg::PointCloud2 | obstacle pointcloud | -| `~/input/traffic_signals` | autoware_perception_msgs::msg::TrafficLightGroupArray | traffic light states | -| `~/input/virtual_traffic_light_states` | tier4_v2x_msgs::msg::VirtualTrafficLightStateArray | virtual traffic light states | -| `~/input/occupancy_grid` | nav_msgs::msg::OccupancyGrid | occupancy grid | +| 名称 | 型 | 説明 | +| ------------------------------- | ----------------------------------------------- | ---------------------------- | +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 入力軌道 | +| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | +| `~/input/vehicle_odometry` | `nav_msgs::msg::Odometry` | 自車位置と速度 | +| `~/input/accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 自車加速度 | +| `~/input/dynamic_objects` | `autoware_perception_msgs::msg::PredictedObjects` | 動的オブジェクト | +| `~/input/no_ground_pointcloud` | `sensor_msgs::msg::PointCloud2` | 障害物点群 | +| `~/input/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 交通信号状態 | +| `~/input/virtual_traffic_light_states` | `tier4_v2x_msgs::msg::VirtualTrafficLightStateArray` | 仮想交通信号状態 | +| `~/input/occupancy_grid` | `nav_msgs::msg::OccupancyGrid` | オキュパンシグリッド | -## Output topics +## 出力トピック -| Name | Type | Description | -| --------------------------- | ------------------------------------------------- | -------------------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs::msg::Trajectory | Ego trajectory with updated velocity profile | -| `~/output/velocity_factors` | autoware_adapi_v1_msgs::msg::VelocityFactorsArray | factors causing change in the ego velocity profile | +| 名称 | タイプ | 説明 | +|---|---|---| +| `~/output/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 速度プロファイルを更新したエゴトラジェクトリ | +| `~/output/velocity_factors` | `autoware_adapi_v1_msgs::msg::VelocityFactorsArray` | エゴの速度プロファイルを変化させる要因 | -## Services +## サービス -| Name | Type | Description | -| ------------------------- | -------------------------------------------------------- | ---------------------------- | -| `~/service/load_plugin` | autoware_motion_velocity_planner_node::srv::LoadPlugin | To request loading a plugin | -| `~/service/unload_plugin` | autoware_motion_velocity_planner_node::srv::UnloadPlugin | To request unloaded a plugin | +### Planning +- self-localization: `current pose` の更新 +- behavior-planning: `trajectory` の生成 +- trajectory-planning: `trajectory` の追従制御 +- perception: 感知データの提供 -## Node parameters +### Control +- steering-control: ステアリング制御 +- braking-control: ブレーキ制御 +- throttle-control: アクセル制御 -| Parameter | Type | Description | +### Mapping +- map: 地図データの提供 + +### Monitoring +- system-monitoring: システム状態の監視 + +### Visualization +- visualization: 各種情報の可視化 + +| 名前 | 種類 | 説明 | +|---|---|---| +| `~/service/load_plugin` | autoware_motion_velocity_planner_node::srv::LoadPlugin | プラグインのロードをリクエスト | +| `~/service/unload_plugin` | autoware_motion_velocity_planner_node::srv::UnloadPlugin | プラグインのアンロードをリクエスト | + +## ノードパラメータ + +| パラメータ | 型 | 説明 | | ---------------- | ---------------- | ---------------------- | -| `launch_modules` | vector\ | module names to launch | +| `launch_modules` | vector\ | 起動するモジュールの名前 | + +加えて、以下のパラメータをノードに提供する必要があります。 -In addition, the following parameters should be provided to the node: +- [最近接探索パラメータ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/common/nearest_search.param.yaml) +- [車両情報パラメータ](https://github.com/autowarefoundation/sample_vehicle_launch/blob/main/sample_vehicle_description/config/vehicle_info.param.yaml) +- [一般的なPlanningパラメータ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/common/common.param.yaml) +- [Smootherパラメータ](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_velocity_smoother/#parameters) +- ロードされる各プラグインのパラメータ -- [nearest search parameters](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/common/nearest_search.param.yaml); -- [vehicle info parameters](https://github.com/autowarefoundation/sample_vehicle_launch/blob/main/sample_vehicle_description/config/vehicle_info.param.yaml); -- [common planning parameters](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/common/common.param.yaml); -- [smoother parameters](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_velocity_smoother/#parameters) -- Parameters of each plugin that will be loaded. diff --git a/planning/sampling_based_planner/autoware_bezier_sampler/README.md b/planning/sampling_based_planner/autoware_bezier_sampler/README.md index 654193006fad3..e038eaa0a745b 100644 --- a/planning/sampling_based_planner/autoware_bezier_sampler/README.md +++ b/planning/sampling_based_planner/autoware_bezier_sampler/README.md @@ -1,3 +1,4 @@ -# Bézier sampler +## ベジエサンプラー + +このドキュメントでは、ベジエ曲線とその生成に関する実装について説明します。サンプリング戦略は [IEEE](https://ieeexplore.ieee.org/document/8932495) に掲載された論文に従っています。 -Implementation of bézier curves and their generation following the sampling strategy from diff --git a/planning/sampling_based_planner/autoware_frenet_planner/README.md b/planning/sampling_based_planner/autoware_frenet_planner/README.md index 083a880924604..d0d0a83689320 100644 --- a/planning/sampling_based_planner/autoware_frenet_planner/README.md +++ b/planning/sampling_based_planner/autoware_frenet_planner/README.md @@ -1,7 +1,8 @@ -# Frenet planner +# フレーネ計画 -Trajectory generation in Frenet frame. +フレネ座標における経路生成 -## Description +## 説明 + +[オリジナル論文](https://www.researchgate.net/publication/224156269_Optimal_Trajectory_Generation_for_Dynamic_Street_Scenarios_in_a_Frenet_Frame) -[Original paper](https://www.researchgate.net/publication/224156269_Optimal_Trajectory_Generation_for_Dynamic_Street_Scenarios_in_a_Frenet_Frame) diff --git a/planning/sampling_based_planner/autoware_path_sampler/README.md b/planning/sampling_based_planner/autoware_path_sampler/README.md index 27009719c230c..3c77c6d81e203 100644 --- a/planning/sampling_based_planner/autoware_path_sampler/README.md +++ b/planning/sampling_based_planner/autoware_path_sampler/README.md @@ -1,98 +1,187 @@ # Path Sampler -## Purpose +## 目的 -This package implements a node that uses sampling based planning to generate a drivable trajectory. +このパッケージは、サンプリングベースのPlaningを使用して、走行可能な軌跡を作成するノードを実装します。 -## Feature +## 機能 -This package is able to: +このパッケージを使用すると、次のことができます。 -- make the trajectory smooth; -- keep the trajectory inside the drivable area; -- avoid static obstacles; -- stop if no valid trajectory can be generated. +- 軌跡をスムーズにする +- 軌跡を走行可能領域内に保持する +- 静的障害物を回避する +- 有効な軌跡を生成できない場合に停止する -Note that the velocity is just taken over from the input path. +速度は入力パスから取得されることに注意してください。 -## Inputs / Outputs +## 入出力 -### input +### 入力 -| Name | Type | Description | +| 名前 | タイプ | 説明 | | ------------------ | --------------------------------------------- | -------------------------------------------------- | -| `~/input/path` | autoware_planning_msgs/msg/Path | Reference path and the corresponding drivable area | -| `~/input/odometry` | nav_msgs/msg/Odometry | Current state of the ego vehicle | -| `~/input/objects` | autoware_perception_msgs/msg/PredictedObjects | objects to avoid | +| `~/input/path` | autoware_planning_msgs/msg/Path | 基準経路と対応する走行可能領域 | +| `~/input/odometry` | nav_msgs/msg/Odometry | 自車位置の現在の状態 | +| `~/input/objects` | autoware_perception_msgs/msg/PredictedObjects | 回避すべきオブジェクト | -### output +### 自動運転ソフトウェアのドキュメント -| Name | Type | Description | +#### Planning コンポーネント + +Planning コンポーネントは、センシングと知覚から得られた環境情報を使用して、車両の経路を計画しています。 Planning モジュールは、以下のタスクを実行します。 + +* 自車位置の確立 +* 障害物の検出と分類 +* 目的地の決定 +* 経路の計画 +* 経路の追跡 + +Planning コンポーネントは、センサーからのリアルタイムデータを処理して、車両の周囲を正確に把握しています。この情報は、衝突回避や効率的なルートプランニングのために使用されています。 + +#### Motion Planning モジュール + +Motion Planning モジュールは、Planning コンポーネントが生成した経路に基づいて、車両の動きを制御しています。 Motion Planning モジュールは、以下のタスクを実行します。 + +* 車両の運動学モデルの確立 +* 経路追従の生成 +* 経路追従エラーの最小化 +* 障害物回避の計画 + +Motion Planning モジュールは、車両の運動学を考慮して、安全かつ効率的な車両の動きを計画しています。このモジュールは、衝突を回避し、快適な乗り心地を提供する最適な軌跡を生成しています。 + +#### Control モジュール + +Control モジュールは、Motion Planning モジュールが生成した軌跡に基づいて、車両を制御しています。 Control モジュールは、以下のタスクを実行します。 + +* ステアリングの制御 +* アクセルの制御 +* ブレーキの制御 +* 横滑り防止制御 + +Control モジュールは、車両のactuatorにシグナルを送信して、車両の実際の動きを計画された軌跡に一致させています。このモジュールは、車両の安定性と安全性を確保しながら、正確な制御を実現しています。 + +#### Perception モジュール + +Perception モジュールは、車両の周囲を検知し、障害物を識別しています。 Perception モジュールは、以下のタスクを実行します。 + +* センサーデータの収集 +* データの処理とフィルタリング +* 障害物の検出と分類 + +Perception モジュールは、レーダー、カメラ、LIDAR などのセンサーからのデータを処理して、車両の周囲の正確な地図を作成しています。この情報は、衝突回避や障害物回避のために使用されています。 + +#### Localization モジュール + +Localization モジュールは、車両の自車位置と姿勢を決定しています。 Localization モジュールは、以下のタスクを実行します。 + +* センサーデータの収集 +* データの処理とフィルタリング +* 自車位置と姿勢の推定 + +Localization モジュールは、GPS、IMU、車輪速度センサーなどのセンサーからのデータを処理して、車両の自車位置を正確に特定しています。この情報は、経路プランニングや障害物回避のために使用されています。 + +#### Health Monitoring モジュール + +Health Monitoring モジュールは、システムのヘルス状態を監視しています。 Health Monitoring モジュールは、以下のタスクを実行します。 + +* センサーの健康状態の監視 +* データの健全性のチェック +* 障害の検出 +* 復旧メカニズムの起動 + +Health Monitoring モジュールは、システムの健全性を確保し、障害が発生した場合に適切な措置を講じています。このモジュールは、システムの信頼性と安全性を向上させています。 + +#### Safety モジュール + +Safety モジュールは、システムの安全性を確保しています。 Safety モジュールは、以下のタスクを実行します。 + +* 障害物逸脱量の監視 +* 加速度逸脱量の監視 +* 速度逸脱量の監視 +* システムのシャットダウン + +Safety モジュールは、システムの安全パラメータを監視し、逸脱量が許容範囲を超えた場合にシステムをシャットダウンしています。このモジュールは、乗客と周囲の安全を確保しています。 + +#### Autoware + +Autoware は、オープンソースの自動運転ソフトウェアプラットフォームです。 Autoware は、以下のモジュールを含むコンポーネントベースのアーキテクチャを採用しています。 + +* Planning +* Motion Planning +* Control +* Perception +* Localization +* Health Monitoring +* Safety + +Autoware は、自動運転車両の開発を加速化するために設計されており、用途の広い柔軟なプラットフォームを提供しています。 + +| 名称 | タイプ | 説明 | | --------------------- | ------------------------------------- | ----------------------------------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | generated trajectory that is feasible to drive and collision-free | +| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | Drivingを実行可能かつ衝突のない生成された軌跡 | -## Algorithm +## アルゴリズム -Sampling based planning is decomposed into 3 successive steps: +サンプリングベースプランニングは、3つの連続した手順に分解されます。 -1. Sampling: candidate trajectories are generated. -2. Pruning: invalid candidates are discarded. -3. Selection: the best remaining valid candidate is selected. +1. サンプリング: 実行可能経路の候補が生成されます。 +2. プルーニング: 無効な候補が破棄されます。 +3. 選択: 残りの有効な最適候補が選択されます。 -### Sampling +### サンプリング -Candidate trajectories are generated based on the current ego state and some target state. -2 sampling algorithms are currently implemented: sampling with bézier curves or with polynomials in the frenet frame. +実行可能経路の候補は、現在の自車状態とターゲット状態に基づいて生成されます。 +現在、2つのサンプリングアルゴリズムが実装されています。ベジェ曲線を使用したサンプリングと、フレネフレーム内の多項式を使用したサンプリングです。 -### Pruning +### プルーニング -The validity of each candidate trajectory is checked using a set of hard constraints. +各実行可能経路の候補の有効性は、一連のハード制約を使用してチェックされます。 -- collision: ensure no collision with static obstacles; -- curvature: ensure smooth curvature; -- drivable area: ensure the trajectory stays within the drivable area. +- 衝突: 静的障害物との衝突がないことを確認 +- 曲率: 滑らかな曲率を確保 +- 走行可能エリア: 経路が走行可能エリア内にあることを確認 -### Selection +### 選択 -Among the valid candidate trajectories, the _best_ one is determined using a set of soft constraints (i.e., objective functions). +有効な実行可能経路の候補の中から、一連のソフト制約(つまり、目的関数)を使用して最良の候補が決定されます。 -- curvature: prefer smoother trajectories; -- length: prefer longer trajectories; -- lateral deviation: prefer trajectories close to the reference path. +- 曲率: より滑らかな経路を優先 +- 長さ: より長い経路を優先 +- 横偏差: 基準パスに近い経路を優先 -Each soft constraint is associated with a weight to allow tuning of the preferences. +各ソフト制約には重みが関連付けられており、優先度の調整が可能です。 -## Limitations +## 制限 -The quality of the candidates generated with polynomials in frenet frame greatly depend on the reference path. -If the reference path is not smooth, the resulting candidates will probably be undriveable. +フレネフレーム内の多項式で生成された候補の品質は、基準パスに大きく依存します。 +基準パスが滑らかでない場合、生成された候補はおそらく走行できません。 -Failure to find a valid trajectory current results in a suddenly stopping trajectory. +有効な経路を見つけることができない場合、現在は突然停止する経路が発生します。 -## Comparison with the `autoware_path_optimizer` +## `autoware_path_optimizer`との比較 -The `autoware_path_optimizer` uses an optimization based approach, -finding the optimal solution of a mathematical problem if it exists. -When no solution can be found, it is often hard to identify the issue due to the intermediate mathematical representation of the problem. +`autoware_path_optimizer`は、最適化ベースのアプローチを使用しており、数学的問題の最適解が存在する場合にそれを求めます。 +解が見つからない場合、問題の中間数学的表現が原因で、しばしば問題を特定するのが困難です。 -In comparison, the sampling based approach cannot guarantee an optimal solution but is much more straightforward, -making it easier to debug and tune. +比較すると、サンプリングベースアプローチは最適解を保証できませんが、はるかに簡単で、デバッグと調整が容易です。 -## How to Tune Parameters +## パラメータの調整方法 -The sampling based planner mostly offers a trade-off between the consistent quality of the trajectory and the computation time. -To guarantee that a good trajectory is found requires generating many candidates which linearly increases the computation time. +サンプリングベースプランナーは、主に経路の一貫した品質と計算時間のトレードオフを提供します。 +良好な経路が見つかることを保証するには、多くの候補を生成する必要があり、それにより計算時間が線形的に増加します。 TODO -### Drivability in narrow roads +### 狭い道での走行性 -### Computation time +### 計算時間 -### Robustness +### ロバスト性 -### Other options +### その他オプション -## How To Debug +## デバッグ方法 TODO + diff --git a/planning/sampling_based_planner/autoware_sampler_common/README.md b/planning/sampling_based_planner/autoware_sampler_common/README.md index 4bae0bf5d6d7d..7a77d84b105e2 100644 --- a/planning/sampling_based_planner/autoware_sampler_common/README.md +++ b/planning/sampling_based_planner/autoware_sampler_common/README.md @@ -1,6 +1,5 @@ -# Sampler Common +## Sampler Common + +Samplerベースのプランナーの共通関数です。 +パスや軌跡、強く柔らかい制約、カルテシアンフレームとフロネフレームの変換を表現するためのクラスが含まれます。 -Common functions for sampling based planners. -This includes classes for representing paths and trajectories, -hard and soft constraints, -conversion between cartesian and frenet frames, ... diff --git a/sensing/autoware_gnss_poser/README.md b/sensing/autoware_gnss_poser/README.md index 9619038492af0..7f1a682a5add1 100644 --- a/sensing/autoware_gnss_poser/README.md +++ b/sensing/autoware_gnss_poser/README.md @@ -1,46 +1,80 @@ # gnss_poser -## Purpose +## 目的 -The `gnss_poser` is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance. +`gnss_poser`は、GNSSセンシングメッセージを購読し、共分散と共に vehicle pose を計算するノードです。 -This node subscribes to NavSatFix to publish the pose of **base_link**. The data in NavSatFix represents the antenna's position. Therefore, it performs a coordinate transformation using the tf from `base_link` to the antenna's position. The frame_id of the antenna's position refers to NavSatFix's `header.frame_id`. -(**Note that `header.frame_id` in NavSatFix indicates the antenna's frame_id, not the Earth or reference ellipsoid.** [See also NavSatFix definition.](https://docs.ros.org/en/noetic/api/sensor_msgs/html/msg/NavSatFix.html)) +このノードは、**base_link** の pose をパブリッシュするために NavSatFix を購読します。NavSatFix のデータはアンテナの位置を表します。したがって、`base_link` からアンテナの位置への tf を使用して、座標変換を実行します。アンテナの位置の frame_id は NavSatFix の `header.frame_id` を参照します。 +(**NavSatFix の `header.frame_id` は地球や基準楕円体ではなく、アンテナの frame_id を示していることに注意してください。[NavSatFix の定義も参照してください。](https://docs.ros.org/en/noetic/api/sensor_msgs/html/msg/NavSatFix.html))**) -If the transformation from `base_link` to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation. +`base_link` からアンテナへの変換が取得できない場合、座標変換を実行せずにアンテナ位置の pose を出力します。 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -## Inputs / Outputs +## 入力 / 出力 -### Input +### 入力 -| Name | Type | Description | -| ------------------------------ | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectorInfo` | map projection info | -| `~/input/fix` | `sensor_msgs::msg::NavSatFix` | gnss status message | -| `~/input/autoware_orientation` | `autoware_sensing_msgs::msg::GnssInsOrientationStamped` | orientation [click here for more details](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_sensing_msgs) | +| 名称 | タイプ | 説明 | +|---|---|---| +| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectorInfo` | 地図投影情報 | +| `~/input/fix` | `sensor_msgs::msg::NavSatFix` | GNSS状態メッセージ | +| `~/input/autoware_orientation` | `autoware_sensing_msgs::msg::GnssInsOrientationStamped` | 姿勢 [詳細はこちら](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_sensing_msgs) | -### Output +### アウトプット -| Name | Type | Description | -| ------------------------ | ----------------------------------------------- | -------------------------------------------------------------- | -| `~/output/pose` | `geometry_msgs::msg::PoseStamped` | vehicle pose calculated from gnss sensing data | -| `~/output/gnss_pose_cov` | `geometry_msgs::msg::PoseWithCovarianceStamped` | vehicle pose with covariance calculated from gnss sensing data | -| `~/output/gnss_fixed` | `tier4_debug_msgs::msg::BoolStamped` | gnss fix status | +**背景** -## Parameters +Autoware 自動運転ソフトウェアでは、Planning コンポーネントが周囲環境を感知し、車輌の軌道計画を算出します。**Path Planning** モジュールはこの計画を実行します。 -### Core Parameters +**Path Planning** + +Path Planning モジュールは、以下を含む一連の操作を通じて、経路計画を実行します。 + +1. **衝突回避** + - 障害物検出と衝突逸脱量計算 + - 障害物を避けるための経路修正 +2. **ルート追従** + - 指定された経路からの逸脱量計算 + - 経路に沿って車輌を誘導するための経路修正 +3. **加減速制御** + - 車輌の目標速度の計算 + - 加減速逸脱量計算 + - 車輌の速度を制御するための加減速修正 +4. **自車位置推定** + - センサーから受信した情報の統合 + - 'post resampling' ステップにおける自車位置と姿勢の推定 + +**制御フロー** + +Path Planning モジュールの制御フローは次のとおりです。 + +1. センサーデータを受信します。 +2. 自車位置を推定します。 +3. 障害物とルート逸脱量を計算します。 +4. 経路を修正します。 +5. 加減速軌道を計算します。 +6. 車輌を制御します。 + +| 名前 | タイプ | 説明 | +| ------------------------ | ----------------------------------------------- | ------------------------------------------------------------ | +| `~/output/pose` | `geometry_msgs::msg::PoseStamped` | GNSS センシングデータから計算された自車位置 | +| `~/output/gnss_pose_cov` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSS センシングデータから計算された、共分散行列を含む自車位置 | +| `~/output/gnss_fixed` | `tier4_debug_msgs::msg::BoolStamped` | GNSS 固定ステータス | + +## パラメータ + +### コアパラメータ {{ json_to_markdown("sensing/autoware_gnss_poser/schema/gnss_poser.schema.json") }} -## Assumptions / Known limits +## 想定/既知の限界 + +## (オプション) エラー検出と処理 -## (Optional) Error detection and handling +## (オプション) パフォーマンス特性 -## (Optional) Performance characterization +## (オプション) 参照/外部リンク -## (Optional) References/External links +## (オプション) 将来の拡張/未実装部分 -## (Optional) Future extensions / Unimplemented parts diff --git a/sensing/autoware_image_diagnostics/README.md b/sensing/autoware_image_diagnostics/README.md index 03858088564b3..5f707d448a66e 100644 --- a/sensing/autoware_image_diagnostics/README.md +++ b/sensing/autoware_image_diagnostics/README.md @@ -1,55 +1,159 @@ # image_diagnostics -## Purpose +## 目的 -The `image_diagnostics` is a node that check the status of the input raw image. +`image_diagnostics`は、入力された生画像のステータスをチェックするためのノードです。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -Below figure shows the flowchart of image diagnostics node. Each image is divided into small blocks for block state assessment. +下図は、image diagnosticsノードのフローチャートを示しています。各画像は、ブロック状態の評価用に小さなブロックに分割されます。 -![image diagnostics flowchart ](./image/image_diagnostics_overview.svg) +![image diagnosticsフローチャート ](./image/image_diagnostics_overview.svg) -Each small image block state is assessed as below figure. +各小さな画像ブロックのステータスは、下図のように評価されます。 -![block status decision tree ](./image/block_state_decision.svg) +![ブロックステータス決定ツリー ](./image/block_state_decision.svg) -After all image's blocks state are evaluated, the whole image status is summarized as below. +すべての画像ブロックのステータスが評価されると、画像全体のステータスは以下のように要約されます。 -![whole image state decision tree](./image/image_status_decision.svg) +![画像全体のステータス決定ツリー](./image/image_status_decision.svg) -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | +| 名称 | 型 | 説明 | | ----------------- | ------------------------- | ----------- | -| `input/raw_image` | `sensor_msgs::msg::Image` | raw image | +| `input/raw_image` | `sensor_msgs::msg::Image` | 生画像 | -### Output +### 出力 -| Name | Type | Description | +**自動運転ソフトウェアのドキュメント** + +**目的** + +本ドキュメントは、Autowareの自動運転ソフトウェアの設計とアーキテクチャを説明するものです。 + +**アーキテクチャ** + +Autowareのアーキテクチャはモジュール式で、個々のモジュールが特定の機能を担当しています。主なモジュールは以下の通りです。 + +- **Perception (知覚)**: センサーデータから周囲環境のモデルを作成します。 +- **Planning (プランニング)**: 目的地への安全かつ効率的な経路を計画します。 +- **Control (制御)**: 計画に基づいて車両を制御します。 + +**Planningモジュール** + +Planningモジュールは、以下のようなタスクを担当します。 + +- **経路計画**: 目的地への経路を生成します。 +- **モーション計画**: 障害物を避けながら車両を移動させる方法を計画します。 +- **安全確認**: 車両の動きが衝突リスクを含まないことを確認します。 + +**制御モジュール** + +制御モジュールは、以下のようなタスクを担当します。 + +- **ステアリング制御**: 車両のステアリングを制御します。 +- **アクセル/ブレーキ制御**: 車両の速度を制御します。 +- **Stabilization (姿勢安定化)**: 車両の姿勢を安定させます。 + +**センサーデータの処理** + +Autowareは、以下を含むさまざまなセンサーからのデータを処理します。 + +- レーダー +- LiDAR +- カメラ + +センサーデータは、Perceptionモジュールによって周囲環境のモデルを作成するために使用されます。 + +**自車位置の推定** + +自車位置は、以下のセンサーからのデータを使用して推定されます。 + +- GPS +- IMU +- オドメトリ + +**障害物検出** + +障害物は、知覚モジュールによってセンサーデータから検出されます。障害物は以下に分類されます。 + +- 静的(例: ビル、木) +- 動的(例: 車両、歩行者) + +**衝突リスクの評価** + +衝突リスクは、以下に基づいてPlanningモジュールによって評価されます。 + +- 自車と障害物の相対運動 +- 障害物のサイズ +- 障害物の形状 + +**経路計画** + +経路は、以下を考慮して生成されます。 + +- 目的地 +- 障害物 +- 交通規制 + +**モーション計画** + +モーション計画は、以下を使用して生成されます。 + +- 経路 +- 車両の運動力学 +- 障害物 + +**安全確認** + +安全確認は、以下を使用して行われます。 + +- 衝突リスクの評価 +- 障害物の逸脱量 +- 加速度逸脱量 + +**制御** + +制御は以下を使用して行われます。 + +- モーション計画 +- 車両の状態 +- センサーデータ + +**今後の開発** + +Autowareは継続的に開発されており、以下を含む機能の向上が計画されています。 + +- 高精度地図の統合 +- より堅牢な障害物検出 +- より効率的な経路計画 + +| 名前 | タイプ | 説明 | | ----------------------------------- | --------------------------------------- | ------------------------------------- | -| `image_diag/debug/gray_image` | `sensor_msgs::msg::Image` | gray image | -| `image_diag/debug/dft_image` | `sensor_msgs::msg::Image` | discrete Fourier transformation image | -| `image_diag/debug/diag_block_image` | `sensor_msgs::msg::Image` | each block state colorization | -| `image_diag/image_state_diag` | `tier4_debug_msgs::msg::Int32Stamped` | image diagnostics status value | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | diagnostics | +| `image_diag/debug/gray_image` | `sensor_msgs::msg::Image` | グレー画像 | +| `image_diag/debug/dft_image` | `sensor_msgs::msg::Image` | 離散フーリエ変換画像 | +| `image_diag/debug/diag_block_image` | `sensor_msgs::msg::Image` | 各ブロック状態のカラー化 | +| `image_diag/image_state_diag` | `tier4_debug_msgs::msg::Int32Stamped` | 画像診断のステータス値 | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断 | + +## パラメータ -## Parameters +## 想定 / 既知の限界 -## Assumptions / Known limits +- これは画像診断の概念実証であり、アルゴリズムは現在さらなる改善中です。 -- This is proof of concept for image diagnostics and the algorithms still under further improvement. +## (オプション) エラー検出と処理 -## (Optional) Error detection and handling +## (オプション) パフォーマンスの特性評価 -## (Optional) Performance characterization +## (オプション) 参照 / 外部リンク -## (Optional) References/External links +## (オプション) 今後の拡張 / 未実装部分 -## (Optional) Future extensions / Unimplemented parts +- 降雨や埃などの、より具体的な画像の歪み / 遮蔽タイプを検討する。 -- Consider more specific image distortion/occlusion type, for instance raindrop or dust. +- 光学的な観点からの霧や雨による視界の悪化を検討する -- Consider degraded visibility under fog or rain condition from optical point of view diff --git a/sensing/autoware_image_transport_decompressor/README.md b/sensing/autoware_image_transport_decompressor/README.md index acad3739d8fa2..6f7894bd0d756 100644 --- a/sensing/autoware_image_transport_decompressor/README.md +++ b/sensing/autoware_image_transport_decompressor/README.md @@ -1,35 +1,94 @@ # image_transport_decompressor -## Purpose +## 目的 -The `image_transport_decompressor` is a node that decompresses images. +`image_transport_decompressor`は画像を解凍するノードです。 -## Inner-workings / Algorithms +## 内部処理/アルゴリズム -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | +| 名前 | 型 | 説明 | | -------------------------- | ----------------------------------- | ---------------- | -| `~/input/compressed_image` | `sensor_msgs::msg::CompressedImage` | compressed image | +| `~/input/compressed_image` | `sensor_msgs::msg::CompressedImage` | 圧縮画像 | -### Output +**自動運転ソフトウェアドキュメント** -| Name | Type | Description | -| -------------------- | ------------------------- | ------------------ | -| `~/output/raw_image` | `sensor_msgs::msg::Image` | decompressed image | +**Planningコンポーネント** -## Parameters +このコンポーネントは、以下の責務を担います。 + +- 車両の現在の状態に基づく安全で効率的なパス生成 +- パスを速度と加速度のコマンドに変換 +- 周囲環境とのやり取りの統合 + +**主な機能** + +- **グローバルパスプランニング:** 高レベルなパス生成で、出発点から目的地までの大まかなパスを計算します。 +- **ローカルパスプランニング:** より細かいパス生成で、車両の自車位置の周辺でのパスを計算します。 +- **Motion Planning:** 速度と加速度のコマンドを生成し、車両をパスに沿って誘導します。 +- **回避:** 障害物検出と回避、およびセンサーの制約を考慮します。 +- **トラフィック予測:** 周囲の車両の動きを予測し、パスをそれに応じて調整します。 + +**アルゴリズム** + +Planningコンポーネントは、以下を含むさまざまなアルゴリズムを使用します。 + +- Dijkstraアルゴリズム +- A*アルゴリズム +- Velocity-Obstacle法 +- モデル予測制御 + +**インターフェース** + +Planningコンポーネントは、他のコンポーネントと以下のインターフェースを介して相互作用します。 + +- **Perceptionコンポーネント:** センサーデータ、障害物リストを提供します。 +- **Controlコンポーネント:** 速度と加速度のコマンドを受け取ります。 +- **Localizationコンポーネント:** 自車位置と姿勢を提供します。 + +**制限事項** + +Planningコンポーネントには、以下を含むいくつかの制限事項があります。 + +- データの精度とセンサー範囲によって制約されます。 +- 予測は不確実性を伴います。 +- すべての状況下での完全な自動運転を保証することはできません。 + +**Autowareでのインプリメンテーション** + +Planningコンポーネントは、Autowareフレームワークの重要なモジュールとして実装されています。AutowareのPlanningモジュールは、以下を提供します。 + +- さまざまなアルゴリズムとインターフェース +- 'post resampling'を使用したバイアス補正 +- 道路網の統合 +- 効率的な実装 + +**テストと検証** + +Planningコンポーネントのテストと検証は、以下の方法を使用して行われます。 + +- シミュレーション +- 実車両テスト +- 速度逸脱量、加速度逸脱量の監視 + +| Name | Type | Description | +| ------------------------ | ---------------------------- | ------------------------------------ | +| `~/output/raw_image` | `sensor_msgs::msg::Image` | 非圧縮画像 | + +## パラメータ {{ json_to_markdown("sensing/autoware_image_transport_decompressor/schema/image_transport_decompressor.schema.json") }} -## Assumptions / Known limits +## 想定 / 既知の制限 + +## (任意) エラーの検出と処理 -## (Optional) Error detection and handling +## (任意) パフォーマンス特性評価 -## (Optional) Performance characterization +## (任意) 参照 / 外部リンク -## (Optional) References/External links +## (任意) 将来の拡張 / 未実装部分 -## (Optional) Future extensions / Unimplemented parts diff --git a/sensing/autoware_imu_corrector/README.md b/sensing/autoware_imu_corrector/README.md index 805c20c0cb35c..b7a2b57c15505 100644 --- a/sensing/autoware_imu_corrector/README.md +++ b/sensing/autoware_imu_corrector/README.md @@ -2,79 +2,116 @@ ## imu_corrector -`imu_corrector_node` is a node that correct imu data. +`imu_corrector_node`はimuデータを補正するノードです。 -1. Correct yaw rate offset $b$ by reading the parameter. -2. Correct yaw rate standard deviation $\sigma$ by reading the parameter. +1. パラメータを読み込んでヨーレートオフセット$b$を補正します。 +2. パラメータを読み込んでヨーレートの標準偏差$\sigma$を補正します。 -Mathematically, we assume the following equation: +数学的には、以下の式を想定しています。 $$ \tilde{\omega}(t) = \omega(t) + b(t) + n(t) $$ -where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, and $n$ denotes a gaussian noise. -We also assume that $n\sim\mathcal{N}(0, \sigma^2)$. +ここで、$\tilde{\omega}$は観測された角速度、$\omega$は真の角速度、$b$はオフセット、$n$はガウスノイズを表します。 +また、$n\sim\mathcal{N}(0, \sigma^2)$と仮定しています。 - + -### Input +### 入力 -| Name | Type | Description | +| 名称 | 型 | 説明 | | -------- | ----------------------- | ------------ | -| `~input` | `sensor_msgs::msg::Imu` | raw imu data | +| `~input` | `sensor_msgs::msg::Imu` | 未処理のIMUデータ | -### Output +### 自動運転ソフトウェアのドキュメント -| Name | Type | Description | -| --------- | ----------------------- | ------------------ | -| `~output` | `sensor_msgs::msg::Imu` | corrected imu data | +#### Planning コンポーネント -### Parameters +Planning コンポーネントは、Autoware の自動運転システムの重要な部分です。周囲環境を認識し、自車位置を推定し、走行経路を生成する役割があります。これらのタスクのために、Planning コンポーネントはさまざまなセンサーからのデータを統合して使用します。 -| Name | Type | Description | -| ---------------------------- | ------ | ------------------------------------------------ | -| `angular_velocity_offset_x` | double | roll rate offset in imu_link [rad/s] | -| `angular_velocity_offset_y` | double | pitch rate offset imu_link [rad/s] | -| `angular_velocity_offset_z` | double | yaw rate offset imu_link [rad/s] | -| `angular_velocity_stddev_xx` | double | roll rate standard deviation imu_link [rad/s] | -| `angular_velocity_stddev_yy` | double | pitch rate standard deviation imu_link [rad/s] | -| `angular_velocity_stddev_zz` | double | yaw rate standard deviation imu_link [rad/s] | -| `acceleration_stddev` | double | acceleration standard deviation imu_link [m/s^2] | +#### 認識コンポーネント + +認識コンポーネントは、周囲環境の認識を担当する Planning コンポーネントのサブコンポーネントです。カメラ、レーダー、LiDAR などのセンサーからデータを受け取り、オブジェクトを検出、分類、追跡します。検出されたオブジェクトには、車両、歩行者、自転車、道路標識、建物などが含まれます。 + +#### 自車位置推定コンポーネント + +自車位置推定コンポーネントは、Planning コンポーネントのもう 1 つのサブコンポーネントで、自車位置を推定する役割があります。IMU、GNSS、オドメトリなどのセンサーからデータを受け取り、現在位置と姿勢を推定します。 + +#### 走行経路生成コンポーネント + +走行経路生成コンポーネントは、周囲環境認識と自車位置推定の結果に基づいて走行経路を生成する Planning コンポーネントのサブコンポーネントです。速度、加速度、逸脱量などの制約を考慮して、安全で効率的な走行経路を計算します。 + +#### 制約検証コンポーネント + +制約検証コンポーネントは、走行経路が速度、加速度、逸脱量の制約を満たしているかどうかを検証する Planning コンポーネントのサブコンポーネントです。制約逸脱量を検出して、制約違反がある場合に警報を発信します。 + +#### `post resampling` コンポーネント + +`post resampling` コンポーネントは、Planning コンポーネントのサブコンポーネントで、走行経路を高周波で再サンプリングする役割があります。これにより、車両の動的性能や周囲環境の変化に対応できます。 + +#### 制御コンポーネント + +制御コンポーネントは、Autoware の自動運転システムのもう 1 つの重要な部分で、Planning コンポーネントが生成した走行経路に基づいて車両を制御する役割があります。ステアリング、アクセル、ブレーキなどの作動器を使用します。 + +#### コントローラーコンポーネント + +コントローラーコンポーネントは、制御コンポーネントのサブコンポーネントで、車両の速度、加速度、逸脱量を制御する役割があります。PID 制御や状態空間制御などの制御手法を使用します。 + +#### アクターコンポーネント + +アクターコンポーネントは、制御コンポーネントが生成した制御信号に基づいて車両の作動器を制御する制御コンポーネントのサブコンポーネントです。ステアリングコントローラー、アクセルコントローラー、ブレーキコントローラーなどがあります。 + +| 名称 | タイプ | 説明 | +|---|---|---| +| `~output` | `sensor_msgs::msg::Imu` | 補正済みIMUデータ | + +### パラメータ + +| 名称 | タイプ | 説明 | +| --------------------- | ------ | -------------------------------------------- | +| `angular_velocity_offset_x` | double | imu_linkにおけるロール角速度オフセット [rad/s] | +| `angular_velocity_offset_y` | double | imu_linkにおけるピッチ角速度オフセット [rad/s] | +| `angular_velocity_offset_z` | double | imu_linkにおけるヨー角速度オフセット [rad/s] | +| `angular_velocity_stddev_xx` | double | imu_linkにおけるロール角速度の標準偏差 [rad/s] | +| `angular_velocity_stddev_yy` | double | imu_linkにおけるピッチ角速度の標準偏差 [rad/s] | +| `angular_velocity_stddev_zz` | double | imu_linkにおけるヨー角速度の標準偏差 [rad/s] | +| `acceleration_stddev` | double | imu_linkにおける加速度の標準偏差 [m/s^2] | ## gyro_bias_estimator -`gyro_bias_validator` is a node that validates the bias of the gyroscope. It subscribes to the `sensor_msgs::msg::Imu` topic and validate if the bias of the gyroscope is within the specified range. +`gyro_bias_validator`はジャイロのバイアスを検証するノードです。`sensor_msgs::msg::Imu`トピックをサブスクライブし、ジャイロのバイアスが指定範囲内にあるかどうかを確認します。 -Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped. +このノードは、車両が停止している場合に限り、ジャイロデータからバイアスを計算して平均化することに注意してください。 -### Input +### 入力 -| Name | Type | Description | -| ----------------- | ----------------------------------------------- | ---------------- | -| `~/input/imu_raw` | `sensor_msgs::msg::Imu` | **raw** imu data | -| `~/input/pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | ndt pose | +| 名称 | 種類 | 説明 | +| ----------------- | ----------------------------------------------- | --------- | +| `~/input/imu_raw` | `sensor_msgs::msg::Imu` | **未加工** IMU データ | +| `~/input/pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | NDT の自車位置 | -Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged. +入力ポーズは十分に正確であると仮定されています。例えば、NDTを使用する場合、NDTは適切に収束していると仮定します。 -Currently, it is possible to use methods other than NDT as a `pose_source` for Autoware, but less accurate methods are not suitable for IMU bias estimation. +現在、Autowareの`pose_source`としてNDT以外のメソッドを使用することは可能ですが、精度の低いメソッドはIMUバイアスの推定には適していません。 -In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration. +将来、ポーズエラーの慎重な実装により、NDTによって推定されたIMUバイアスは検証だけでなくオンラインキャリブレーションにも使用できる可能性があります。 -### Output +### 出力 -| Name | Type | Description | +| 名称 | タイプ | 説明 | | -------------------- | ------------------------------------ | ----------------------------- | -| `~/output/gyro_bias` | `geometry_msgs::msg::Vector3Stamped` | bias of the gyroscope [rad/s] | +| `~/output/gyro_bias` | `geometry_msgs::msg::Vector3Stamped` | ジャイロスコープのバイアス [rad/s] | + +### パラメータ -### Parameters +このノードは、`imu_corrector.param.yaml`の`angular_velocity_offset_x`、`angular_velocity_offset_y`、`angular_velocity_offset_z`パラメータも使用します。 -Note that this node also uses `angular_velocity_offset_x`, `angular_velocity_offset_y`, `angular_velocity_offset_z` parameters from `imu_corrector.param.yaml`. +| 名前 | 型 | 説明 | +| -------------------------------------| ------ | -------------------------------------------------------------------------------------------------------- | +| `gyro_bias_threshold` | double | ジャイロスコープのバイアスの閾値 [rad/s] | +| `timer_callback_interval_sec` | double | タイマコールバック関数の秒数 [秒] | +| `diagnostics_updater_interval_sec` | double | Diagnostics updater の周期 [秒] | +| `straight_motion_ang_vel_upper_limit` | double | 直線運動と見なさない、ヨー角速度の上限 [rad/s] | -| Name | Type | Description | -| ------------------------------------- | ------ | ------------------------------------------------------------------------------------------- | -| `gyro_bias_threshold` | double | threshold of the bias of the gyroscope [rad/s] | -| `timer_callback_interval_sec` | double | seconds about the timer callback function [sec] | -| `diagnostics_updater_interval_sec` | double | period of the diagnostics updater [sec] | -| `straight_motion_ang_vel_upper_limit` | double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] | diff --git a/sensing/autoware_pcl_extensions/README.md b/sensing/autoware_pcl_extensions/README.md index 930fd56d876c3..66dac20d43eac 100644 --- a/sensing/autoware_pcl_extensions/README.md +++ b/sensing/autoware_pcl_extensions/README.md @@ -1,35 +1,36 @@ # autoware_pcl_extensions -## Purpose +## 目的 -The `autoware_pcl_extensions` is a pcl extension library. The voxel grid filter in this package works with a different algorithm than the original one. +`autoware_pcl_extensions` は pcl 拡張ライブラリです。このパッケージ内のボクセルグリッドフィルターは、元のアルゴリズムとは異なるアルゴリズムで機能します。 -## Inner-workings / Algorithms +## 内部機構 / アルゴリズム -### Original Algorithm [1] +### 元のアルゴリズム [1] -1. create a 3D voxel grid over the input pointcloud data -2. calculate centroid in each voxel -3. all the points are approximated with their centroid +1. 入力点群データの上に 3D ボクセルグリッドを作成します +2. 各ボクセルの重心を計算します +3. すべての点が重心で近似されます -### Extended Algorithm +### 拡張アルゴリズム -1. create a 3D voxel grid over the input pointcloud data -2. calculate centroid in each voxel -3. **all the points are approximated with the closest point to their centroid** +1. 入力点群データの上に 3D ボクセルグリッドを作成します +2. 各ボクセルの重心を計算します +3. **すべての点が重心への最も近い点で近似されます** -## Inputs / Outputs +## 入力 / 出力 -## Parameters +## パラメータ -## Assumptions / Known limits +## 仮定 / 既知の制限事項 -## (Optional) Error detection and handling +## (省略可)エラー検出および処理 -## (Optional) Performance characterization +## (省略可)パフォーマンス特性 -## (Optional) References/External links +## (省略可)参考文献 / 外部リンク [1] -## (Optional) Future extensions / Unimplemented parts +## (省略可)将来の拡張 / 実装されていない部分 + diff --git a/sensing/autoware_pointcloud_preprocessor/README.md b/sensing/autoware_pointcloud_preprocessor/README.md index 4424259a52daa..d945e59f88e85 100644 --- a/sensing/autoware_pointcloud_preprocessor/README.md +++ b/sensing/autoware_pointcloud_preprocessor/README.md @@ -1,91 +1,144 @@ -# autoware_pointcloud_preprocessor +## autoware_pointcloud_preprocessor -## Purpose +## 目的 -The `autoware_pointcloud_preprocessor` is a package that includes the following filters: +`autoware_pointcloud_preprocessor` は以下のフィルタを含むパッケージです: -- removing outlier points -- cropping -- concatenating pointclouds -- correcting distortion -- downsampling +- 外れ値の除去 +- クロッピング +- 点群の連結 +- 歪みの補正 +- ダウンサンプリング -## Inner-workings / Algorithms +## 仕組み/アルゴリズム -Detail description of each filter's algorithm is in the following links. +各フィルタのアルゴリズムの詳細については、以下のリンクを参照してください。 -| Filter Name | Description | Detail | -| ----------------------------- | ---------------------------------------------------------------------------------- | --------------------------------------------- | -| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | [link](docs/concatenate-data.md) | -| crop_box_filter | remove points within a given box | [link](docs/crop-box-filter.md) | -| distortion_corrector | compensate pointcloud distortion caused by ego vehicle's movement during 1 scan | [link](docs/distortion-corrector.md) | -| downsample_filter | downsampling input pointcloud | [link](docs/downsample-filter.md) | -| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | [link](docs/outlier-filter.md) | -| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | [link](docs/passthrough-filter.md) | -| pointcloud_accumulator | accumulate pointclouds for a given amount of time | [link](docs/pointcloud-accumulator.md) | -| vector_map_filter | remove points on the outside of lane by using vector map | [link](docs/vector-map-filter.md) | -| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | [link](docs/vector-map-inside-area-filter.md) | +| フィルター名 | 説明 | 詳細 | +| ----------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------- | +| concatenate_data | 複数の点群を購読し、それらを 1 つの点群に連結します。 | [link](docs/concatenate-data.md) | +| crop_box_filter | 1 回の走査中に自車位置の移動によって生じた点群の歪みを補正します。 | [link](docs/crop-box-filter.md) | +| distortion_corrector | 1 回の走査中に自車位置の移動によって生じた点群の歪みを補正します。 | [link](docs/distortion-corrector.md) | +| downsample_filter | 入力点群をダウンサンプリングします。 | [link](docs/downsample-filter.md) | +| outlier_filter | ハードウェアの問題、雨滴、小さな昆虫によって引き起こされるノイズとして点を削除します。 | [link](docs/outlier-filter.md) | +| passthrough_filter | 与えられたフィールド (例: x、y、z、強度) の範囲外にある点を削除します。 | [link](docs/passthrough-filter.md) | +| pointcloud_accumulator | 一定時間点群を累積します。 | [link](docs/pointcloud-accumulator.md) | +| vector_map_filter | ベクトルマップを使用して、車線の外側の点を削除します。 | [link](docs/vector-map-filter.md) | +| vector_map_inside_area_filter | 指定されたタイプのパラメーターによって、ベクトルマップ領域内の点を削除します。 | [link](docs/vector-map-inside-area-filter.md) | -## Inputs / Outputs +## 入力 / 出力 -### Input +### 入力 -| Name | Type | Description | -| ----------------- | ------------------------------- | ----------------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | reference points | -| `~/input/indices` | `pcl_msgs::msg::Indices` | reference indices | +| 名前 | タイプ | 説明 | +| ---------------- | -------------------------------- | ----------------- | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点群 | +| `~/input/indices` | `pcl_msgs::msg::Indices` | 基準点のインデックス | -### Output +### 出力 -| Name | Type | Description | -| ----------------- | ------------------------------- | --------------- | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | filtered points | +#### 概要 -## Parameters +本ドキュメントは、AutowareのPlanningコンポーネント/モジュールの詳細を説明します。Planningコンポーネントは、車両を目標地点まで誘導するために必要な経路計画と動作計画を生成します。 -### Node Parameters +#### アーキテクチャ -| Name | Type | Default Value | Description | -| ------------------ | ------ | ------------- | ------------------------------------- | -| `input_frame` | string | " " | input frame id | -| `output_frame` | string | " " | output frame id | -| `max_queue_size` | int | 5 | max queue size of input/output topics | -| `use_indices` | bool | false | flag to use pointcloud indices | -| `latched_indices` | bool | false | flag to latch pointcloud indices | -| `approximate_sync` | bool | false | flag to use approximate sync option | +Planningコンポーネントは、以下のモジュールで構成されています。 -## Assumptions / Known limits +- **Local Planner (LP)**: 現在の経路と周辺環境を考慮して、局所的な経路計画を生成します。 +- **Global Planner (GP)**: 長距離の経路計画を生成します。 +- **Behavior Planner (BP)**: 動作計画を生成し、LPで生成された経路を修正します。 +- **Planner Fusion (PF)**: LPとGPの経路を統合します。 -`autoware::pointcloud_preprocessor::Filter` is implemented based on pcl_perception [1] because -of [this issue](https://github.com/ros-perception/perception_pcl/issues/9). +#### 機能 -## Measuring the performance +Planningコンポーネントは、次の機能を提供します。 -In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input -into the perception pipeline. The preprocessing stages are illustrated in the diagram below: +- **経路生成**: 目的地までの経路を生成します。 +- **経路最適化**: 経路を最適化して走行性を向上させます。 +- **障害物回避**: 障害物を検出し、それらを回避する経路を生成します。 +- **速度計画**: 目標速度と加速度を生成します。 + +#### アルゴリズム + +Planningコンポーネントでは、次のアルゴリズムを使用しています。 + +- **A*探索**: 最適経路の探索に使用されます。 +- **Dijkstraのアルゴリズム**: 最短経路の探索に使用されます。 +- **動的計画法**: 最適化された経路の生成に使用されます。 + +#### 入力 + +Planningコンポーネントは、以下の入力を必要とします。 + +- **自車位置**: GPSとセンサーデータから取得されます。 +- **周辺環境マップ**: LiDARやカメラデータから生成されます。 +- **目標地点**: ナビゲーションシステムから取得されます。 + +#### 出力 + +Planningコンポーネントは、以下の出力を生成します。 + +- **経路**: 目的地までの経路。 +- **速度計画**: 目標速度と加速度。 +- **ステアリング指令**: 車両のステアリングを制御するために使用されます。 +- **障害物検出結果**: 車両周辺の障害物を示します。 + +#### 仕様 + +Planningコンポーネントは、以下の仕様を満たしています。 + +- **処理時間**: 100ms以内 +- **速度逸脱量**: 0.5m/s以内 +- **加速度逸脱量**: 0.2m/s²以内 +- **衝突時間最小化**: `post resampling`後に衝突回避 + +#### 注意事項 + +Planningコンポーネントを使用する際は、以下の注意事項を考慮してください。 + +- Planningコンポーネントは、完全ではありません。常に周囲を注意して運転してください。 +- Planningコンポーネントは、周囲環境が正確にマップされている場合に最も効果的です。 +- Planningコンポーネントは、悪天候や複雑な交通状況では十分に機能しない場合があります。 + +| 名称 | タイプ | 説明 | +|---|---|---| +| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリング済みの点群 | + +## パラメータ + +### ノードパラメータ + +| 名称 | タイプ | デフォルト値 | 説明 | +|---|---|---|---| +| `input_frame` | 文字列 | "" | 入力フレームID | +| `output_frame` | 文字列 | "" | 出力フレームID | +| `max_queue_size` | 整数 | 5 | 入力/出力トピックの最大キューサイズ | +| `use_indices` | ブール | false | ポイントクラウドインデックスを使用するフラグ | +| `latched_indices` | ブール | false | ポイントクラウドインデックスをラッチするフラグ | +| `approximate_sync` | ブール | false | 近似同期オプションを使用するフラグ | + +## 想定事項と既知の制限事項 + +`autoware::pointcloud_preprocessor::Filter` は [この問題](https://github.com/ros-perception/perception_pcl/issues/9) により、 pcl_perception [1] に基づいて実装されています。 + +## パフォーマンスの測定 + +Autoware では、各 LiDAR センサーからの点群データは、知覚パイプラインに入力される前にセンシングパイプラインで前処理されます。前処理段階は、以下の図で示されています。 ![pointcloud_preprocess_pipeline.drawio.png](docs%2Fimage%2Fpointcloud_preprocess_pipeline.drawio.png) -Each stage in the pipeline incurs a processing delay. Mostly, we've used `ros2 topic delay /topic_name` to measure -the time between the message header and the current time. This approach works well for small-sized messages. However, -when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because -accessing these large point cloud messages externally impacts the pipeline's performance. +パイプライン内の各段階で処理遅延が発生します。ほとんどの場合、`ros2 topic delay /topic_name`を使用してメッセージヘッダーと現在の時間の間隔を測定します。このアプローチは、小規模のメッセージに適しています。ただし、大規模な点群メッセージを処理する場合、この方法は追加の遅延を生じさせます。これは主に、外部からこれらの大規模な点群メッセージにアクセスすることがパイプラインのパフォーマンスに影響を与えるためです。 -Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process -communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and -can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate. +当社のセンシング/知覚ノードは、プロセス内通信を活用してコンポーザブルノードコンテナー内で実行するように設計されています。これらのメッセージへの外部サブスクリプション(ros2 トピック遅延または rviz2 の使用など)は、追加の遅延をもたらし、外部からサブスクライブすることによってパイプラインを遅くすることさえあります。したがって、これらの測定は正確ではありません。 -To mitigate this issue, we've adopted a method where each node in the pipeline reports its pipeline latency time. -This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the -pipeline. +この問題を軽減するために、パイプライン内の各ノードがパイプラインの待ち時間レポートする方法を採用しました。このアプローチは、プロセス内通信の整合性を確保し、パイプライン内の遅延をより正確に測定できます。 -### Benchmarking The Pipeline +### パイプラインのベンチマーク -The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver's pointcloud -output to the node's output. This data is crucial for assessing the pipeline's health and efficiency. +パイプライン内のノードは、パイプラインの待ち時間をレポートし、センサーからの点群出力からノードの出力までの持続時間を示します。このデータは、パイプラインの正常性と効率を評価するために不可欠です。 -When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the -following ROS 2 topics: +Autoware を実行すると、以下の ROS 2 トピックを購読することで、パイプライン内の各ノードのパイプラインの待ち時間を監視できます。 - `/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms` - `/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms` @@ -93,15 +146,14 @@ following ROS 2 topics: - `/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms` - `/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms` -These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline -from the sensor output of LidarX to each subsequent node. +これらのトピックはパイプラインの待ち時間を提供し、LidarX のセンサー出力から各後続ノードまでのパイプラインのさまざまな段階での遅延に関する洞察を提供します。 -## (Optional) Error detection and handling +## (任意)エラーの検出および処理 -## (Optional) Performance characterization +## (任意)パフォーマンス特性 -## References/External links +## 参照文献/外部リンク [1] -## (Optional) Future extensions / Unimplemented parts +## (任意)今後の拡張/未実装部分 \ No newline at end of file diff --git a/sensing/autoware_radar_scan_to_pointcloud2/README.md b/sensing/autoware_radar_scan_to_pointcloud2/README.md index 507393396b379..22fb2c39a4a7f 100644 --- a/sensing/autoware_radar_scan_to_pointcloud2/README.md +++ b/sensing/autoware_radar_scan_to_pointcloud2/README.md @@ -2,32 +2,34 @@ ## radar_scan_to_pointcloud2_node -- Convert from `radar_msgs::msg::RadarScan` to `sensor_msgs::msg::PointCloud2` -- Calculation cost O(n) - - n: The number of radar return +- `radar_msgs::msg::RadarScan` から `sensor_msgs::msg::PointCloud2` に変換 +- 計算コスト O(n) + - n: レーダーリターンの数 -### Input topics +### 入力トピック -| Name | Type | Description | +| 名 | タイプ | 説明 | | ----------- | -------------------------- | ----------- | -| input/radar | radar_msgs::msg::RadarScan | RadarScan | +| input/radar | radar_msgs::msg::RadarScan | RadarScan | -### Output topics +### 出力トピック -| Name | Type | Description | -| --------------------------- | ----------------------------- | ----------------------------------------------------------------- | -| output/amplitude_pointcloud | sensor_msgs::msg::PointCloud2 | PointCloud2 radar pointcloud whose intensity is amplitude. | -| output/doppler_pointcloud | sensor_msgs::msg::PointCloud2 | PointCloud2 radar pointcloud whose intensity is doppler velocity. | +| 名前 | 型 | 説明 | +|---|---|---| +| output/amplitude_pointcloud | sensor_msgs::msg::PointCloud2 | 強度が振幅のPointCloud2レーダー点群 | +| output/doppler_pointcloud | sensor_msgs::msg::PointCloud2 | 強度がドップラー速度のPointCloud2レーダー点群 | -### Parameters +### パラメータ -| Name | Type | Description | -| ---------------------------- | ---- | ----------------------------------------------------------------------------------------- | -| publish_amplitude_pointcloud | bool | Whether publish radar pointcloud whose intensity is amplitude. Default is `true`. | -| publish_doppler_pointcloud | bool | Whether publish radar pointcloud whose intensity is doppler velocity. Default is `false`. | +| 名称 | タイプ | 説明 | +|---|---|---| +| publish_amplitude_pointcloud | bool | レーダーの点群の強度を振幅で公開するかどうか。初期値は `true` です。 | +| publish_doppler_pointcloud | bool | レーダーの点群の強度をドップラー速度で公開するかどうか。初期値は `false` です。 | + +### 起動方法 -### How to launch ```sh ros2 launch autoware_radar_scan_to_pointcloud2 radar_scan_to_pointcloud2.launch.xml ``` + diff --git a/sensing/autoware_radar_static_pointcloud_filter/README.md b/sensing/autoware_radar_static_pointcloud_filter/README.md index e84e8e998806f..db5dd880c7d4b 100644 --- a/sensing/autoware_radar_static_pointcloud_filter/README.md +++ b/sensing/autoware_radar_static_pointcloud_filter/README.md @@ -2,35 +2,37 @@ ## radar_static_pointcloud_filter_node -Extract static/dynamic radar pointcloud by using doppler velocity and ego motion. -Calculation cost is O(n). `n` is the number of radar pointcloud. +Doppler速度と自車運動を使用して、静的および動的なレーダーポイントクラウドを抽出します。 +計算コストはO(n)で、`n`はレーダーポイントクラウドの数です。 -### Input topics +### 入力トピック -| Name | Type | Description | +| 名称 | 型 | 説明 | | -------------- | -------------------------- | -------------------------- | | input/radar | radar_msgs::msg::RadarScan | RadarScan | -| input/odometry | nav_msgs::msg::Odometry | Ego vehicle odometry topic | +| input/odometry | nav_msgs::msg::Odometry | 自車オドメトリトピック | -### Output topics +### 出力トピック -| Name | Type | Description | -| ------------------------- | -------------------------- | ------------------------ | -| output/static_radar_scan | radar_msgs::msg::RadarScan | static radar pointcloud | -| output/dynamic_radar_scan | radar_msgs::msg::RadarScan | dynamic radar pointcloud | +| 名称 | タイプ | 説明 | +| ------------------------- | -------------------------- | -------------------------------- | +| output/static_radar_scan | radar_msgs::msg::RadarScan | 静的レーダーポイントクラウド | +| output/dynamic_radar_scan | radar_msgs::msg::RadarScan | 動的レーダーポイントクラウド | -### Parameters +### パラメータ -| Name | Type | Description | +| 名前 | タイプ | 説明 | | ------------------- | ------ | ---------------------------------------------------- | -| doppler_velocity_sd | double | Standard deviation for radar doppler velocity. [m/s] | +| doppler_velocity_sd | double | レーダー・ドップラー速度の標準偏差。 [m/s] | + +### 起動方法 -### How to launch ```sh ros2 launch autoware_radar_static_pointcloud_filter radar_static_pointcloud_filter.launch.xml ``` -### Algorithm +### アルゴリズム ![algorithm](docs/radar_static_pointcloud_filter.drawio.svg) + diff --git a/sensing/autoware_radar_threshold_filter/README.md b/sensing/autoware_radar_threshold_filter/README.md index f53ff7119a8eb..5472671097939 100644 --- a/sensing/autoware_radar_threshold_filter/README.md +++ b/sensing/autoware_radar_threshold_filter/README.md @@ -2,47 +2,49 @@ ## radar_threshold_filter_node -Remove noise from radar return by threshold. +しきい値によるレーダーリターンのノイズ除去 -- Amplitude filter: Low amplitude consider noise -- FOV filter: Pointcloud from radar's FOV edge occur perturbation -- Range filter: Too near pointcloud often occur noise +- Amplitdeフィルタ:振幅が低い場合はノイズとみなします +- FOV Filta:レーダーのFOVエッジからのポイントクラウドは摂動が発生します +- 距離フィルタ:近すぎるポイントクラウドはノイズが発生することが多いです -Calculation cost is O(n). `n` is the number of radar return. +計算量はO(n)です。ここで`n`はレーダーリターンの数です。 -### Input topics +### 入力トピック -| Name | Type | Description | +| 名称 | 型 | 説明 | | ----------- | ---------------------------- | --------------------- | -| input/radar | radar_msgs/msg/RadarScan.msg | Radar pointcloud data | +| input/radar | radar_msgs/msg/RadarScan.msg | レーダー・ポイントクラウド・データ | -### Output topics +### 出力トピック -| Name | Type | Description | +| Name | Type | 説明 | | ------------ | ---------------------------- | ------------------------- | -| output/radar | radar_msgs/msg/RadarScan.msg | Filtered radar pointcloud | +| output/radar | radar_msgs/msg/RadarScan.msg | フィルタされたレーダーポイントクラウド | -### Parameters +### パラメータ -- For node parameter +- ノードパラメータ -| Name | Type | Description | +| 名前 | タイプ | 説明 | | ------------------- | ------ | ----------------------------------------------------------------------------------------------------- | -| is_amplitude_filter | bool | if this parameter is true, apply amplitude filter (publish amplitude_min < amplitude < amplitude_max) | -| amplitude_min | double | [dBm^2] | -| amplitude_max | double | [dBm^2] | -| is_range_filter | bool | if this parameter is true, apply range filter (publish range_min < range < range_max) | -| range_min | double | [m] | -| range_max | double | [m] | -| is_azimuth_filter | bool | if this parameter is true, apply angle filter (publish azimuth_min < range < azimuth_max) | -| azimuth_min | double | [rad] | -| azimuth_max | double | [rad] | -| is_z_filter | bool | if this parameter is true, apply z position filter (publish z_min < z < z_max) | -| z_min | double | [m] | -| z_max | double | [m] | - -### How to launch +| is_amplitude_filter | bool | このパラメータが true の場合、振幅フィルタを適用する(`amplitude_min` < 振幅 < `amplitude_max` を公開) | +| amplitude_min | double | [dBm2] | +| amplitude_max | double | [dBm2] | +| is_range_filter | bool | このパラメータが true の場合、レンジフィルタを適用する(`range_min` < 距離 < `range_max` を公開) | +| range_min | double | [m] | +| range_max | double | [m] | +| is_azimuth_filter | bool | このパラメータが true の場合、角度フィルタを適用する(`azimuth_min` < 距離 < `azimuth_max` を公開) | +| azimuth_min | double | [rad] | +| azimuth_max | double | [rad] | +| is_z_filter | bool | このパラメータが true の場合、z 位置フィルタを適用する(`z_min` < z < `z_max` を公開) | +| z_min | double | [m] | +| z_max | double | [m] | + +### 起動方法 + ```sh ros2 launch autoware_radar_threshold_filter radar_threshold_filter.launch.xml ``` + diff --git a/sensing/autoware_radar_tracks_noise_filter/README.md b/sensing/autoware_radar_tracks_noise_filter/README.md index 25e8d2f96e7f7..bc402ce6d35e3 100644 --- a/sensing/autoware_radar_tracks_noise_filter/README.md +++ b/sensing/autoware_radar_tracks_noise_filter/README.md @@ -1,34 +1,82 @@ -# autoware_radar_tracks_noise_filter +## autoware_radar_tracks_noise_filter -This package contains a radar object filter module for `radar_msgs/msg/RadarTrack`. -This package can filter noise objects in RadarTracks. +このパッケージには、`radar_msgs/msg/RadarTrack`用のレーダーオブジェクトフィルタモジュールが含まれています。 +このパッケージは、レーダートラック内のノイズオブジェクトを除去することができます。 -## Algorithm +## アルゴリズム -The core algorithm of this package is `RadarTrackCrossingNoiseFilterNode::isNoise()` function. -See the function and the parameters for details. +このパッケージのコアアルゴリズムは、`RadarTrackCrossingNoiseFilterNode::isNoise()` 関数です。 +詳細は、関数とそのパラメータを参照してください。 -- Y-axis threshold +- Y軸しきい値 -Radar can detect x-axis velocity as doppler velocity, but cannot detect y-axis velocity. -Some radar can estimate y-axis velocity inside the device, but it sometimes lack precision. -In y-axis threshold filter, if y-axis velocity of RadarTrack is more than `velocity_y_threshold`, it treats as noise objects. +レーダーはx軸速度をドップラー速度として検出できますが、y軸速度は検出できません。 +一部のレーダーはデバイス内部でy軸速度を推定できますが、精度が低い場合があります。 +y軸しきい値フィルタでは、レーダートラックのy軸速度が`velocity_y_threshold`より大きい場合、ノイズオブジェクトとして処理されます。 -## Input +## 入力 -| Name | Type | Description | -| ---------------- | ------------------------------ | ------------------- | -| `~/input/tracks` | radar_msgs/msg/RadarTracks.msg | 3D detected tracks. | +| Name | Type | Description | +|---|---|---| +| `~/input/tracks` | `radar_msgs/msg/RadarTracks.msg` | 3D 検出されたトラック(レーダートラック) | -## Output +## 出力 -| Name | Type | Description | -| -------------------------- | ------------------------------ | ---------------- | -| `~/output/noise_tracks` | radar_msgs/msg/RadarTracks.msg | Noise objects | -| `~/output/filtered_tracks` | radar_msgs/msg/RadarTracks.msg | Filtered objects | +このドキュメントは、AutowareオペレーティングシステムのPlanningコンポーネントの設計について記載しています。 -## Parameters +### Planningの概要 + +Planningコンポーネントは、自車位置に基づいて、目的地までの安全な経路を生成します。この経路は、速度、加速度、およびステアリング角の制限に従って生成されます。 + +### 機能 + +Planningコンポーネントには、以下のような機能があります。 + +- 目的地までの経路を生成する。 +- velocity逸脱量、acceleration逸脱量、ステアリング角逸脱量を考慮した安全な経路を生成する。 +- `post resampling`を実行して、経路上の潜在的な障害物を避ける。 +- 経路をNavigationコンポーネントに提供する。 + +### アーキテクチャ + +Planningコンポーネントは、次のモジュールで構成されています。 + +- **Path Planner:** 自車位置に基づいて安全な経路を生成する。 +- **Trajectory Planner:** velocity逸脱量、acceleration逸脱量、ステアリング角逸脱量を考慮した安全な経路を生成する。 +- **Obstacle Avoidance:** `post resampling`を実行して、経路上の潜在的な障害物を避ける。 +- **Route Planner:** Navigationコンポーネントに経路を提供する。 + +### 使用方法 + +Planningコンポーネントを使用するには、次の手順に従ってください。 + +1. 目的地を指定します。 +2. Planningコンポーネントを起動します。 +3. Planningコンポーネントが経路を生成するのを待ちます。 +4. 経路が生成されたら、Navigationコンポーネントに渡します。 + +### 制限事項 + +Planningコンポーネントには、以下のような制限があります。 + +- 障害物を検出できません。 +- 動的な障害物に対応できません。 +- 高速道路での運転に対応していません。 + +### 貢献 + +Autoware Planningコンポーネントに貢献するには、以下のリポジトリを参照してください。 + +[https://github.com/AutowareFoundation/autoware/tree/master/ros/planning](https://github.com/AutowareFoundation/autoware/tree/master/ros/planning) + +| 名称 | 種類 | 説明 | +| -------------------------- | --------------------------------- | ---------------- | +| `~/output/noise_tracks` | radar_msgs/msg/RadarTracks.msg | ノイズオブジェクト | +| `~/output/filtered_tracks` | radar_msgs/msg/RadarTracks.msg | フィルタ処理されたオブジェクト | + +## パラメータ + +| 名前 | タイプ | 説明 | デフォルト値 | +| :--------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------ | :------------ | +| `velocity_y_threshold` | double | Y軸速度の閾値 [m/s]。レーダーのトラックのY軸速度が`velocity_y_threshold`を超える場合、ノイズオブジェクトとして扱われます。 | 7.0 | -| Name | Type | Description | Default value | -| :--------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `velocity_y_threshold` | double | Y-axis velocity threshold [m/s]. If y-axis velocity of RadarTrack is more than `velocity_y_threshold`, it treats as noise objects. | 7.0 | diff --git a/sensing/livox/autoware_livox_tag_filter/README.md b/sensing/livox/autoware_livox_tag_filter/README.md index 21f62355d49df..84f83a93f0e83 100644 --- a/sensing/livox/autoware_livox_tag_filter/README.md +++ b/sensing/livox/autoware_livox_tag_filter/README.md @@ -1,65 +1,115 @@ # livox_tag_filter -## Purpose +## 目的 -The `livox_tag_filter` is a node that removes noise from pointcloud by using the following tags: +`livox_tag_filter`は、次のタグを使用して点群からノイズを除去するノードです。 -- Point property based on spatial position -- Point property based on intensity -- Return number +- 空間位置に基づいた点の特性 +- 強度に基づいた点の特性 +- リターン番号 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| --------- | ------------------------------- | ---------------- | -| `~/input` | `sensor_msgs::msg::PointCloud2` | reference points | +| Name | Type | Description | +|----------------|---------------------------------------------------------|------------------------| +| `~/input` | `sensor_msgs::msg::PointCloud2` | リファレンスポイント | -### Output +### 出力 +### Localizerについて -| Name | Type | Description | -| ---------- | ------------------------------- | --------------- | -| `~/output` | `sensor_msgs::msg::PointCloud2` | filtered points | +このドキュメントでは、AutowareのLocalizerの機能と実装について説明します。Localizerモジュールは、SLAMの結果を出力として受け取り、自車位置と自身の周囲地図を推定します。 -## Parameters +#### 機能 -### Node Parameters +Localizerの主な機能は次のとおりです。 -| Name | Type | Description | -| ------------- | --------------- | -------------------------------------- | -| `ignore_tags` | vector | ignored tags (See the following table) | +- Lidar、カメラ、IMUセンサーデータの統合 +- 移動・静止物体の検出 +- オドメトリとSLAMによる自車位置の推定 +- 車線および障害物の周囲地図の抽出 + +#### 実装 + +Localizerモジュールは、次のコンポーネントで構成されています。 + +- **Sensor Preprocessor:**センサーデータの前処理とフィルタリングを行います。 +- **Odometry:**オドメトリ情報とIMUデータを使用して、自車位置を推定します。 +- **SLAM:**Lidarデータを使用して、周囲環境の地図と自車位置を推定します。 +- **Moving Object Detector:**Lidarデータを使用して、移動物体を検出します。 +- **Lane Extractor:**Lidarデータを使用して、車線を抽出します。 +- **Obstacle Extractor:**Lidarデータを使用して、障害物を抽出します。 + +#### 入出力インターフェース + +Localizerモジュールは、次のインターフェースで入出力を処理します。 + +**入力:** + +- Lidarデータ +- カメラデータ(オプション) +- IMUデータ +- GPSデータ(オプション) + +**出力:** -### Tag Parameters +- 自車位置推定値 +- 自身周囲地図 +- 移動物体リスト +- 車線リスト +- 障害物リスト -| Bit | Description | Options | -| --- | ---------------------------------------- | ------------------------------------------ | -| 0~1 | Point property based on spatial position | 00: Normal | -| | | 01: High confidence level of the noise | -| | | 10: Moderate confidence level of the noise | -| | | 11: Low confidence level of the noise | -| 2~3 | Point property based on intensity | 00: Normal | -| | | 01: High confidence level of the noise | -| | | 10: Moderate confidence level of the noise | -| | | 11: Reserved | -| 4~5 | Return number | 00: return 0 | -| | | 01: return 1 | -| | | 10: return 2 | -| | | 11: return 3 | -| 6~7 | Reserved | | +#### パラメーター -You can download more detail description about the livox from external link [1]. +Localizerモジュールの動作を制御するには、次のパラメーターを使用します。 -## Assumptions / Known limits +- `post resampling`:SLAMの再標本化後に自車位置を更新するかどうかを決定します。 +- `use imu`:自車位置推定にIMUデータを使用するかどうかを決定します。 +- `vel_range_violation`:速度逸脱量のしきい値です。 +- `acc_range_violation`:加速度逸脱量のしきい値です。 -## (Optional) Error detection and handling +| 名前 | 型 | 説明 | +| ---------- | ------------------------------- | ----------- | +| `~/output` | `sensor_msgs::msg::PointCloud2` | フィルタされた点 | -## (Optional) Performance characterization +## パラメータ -## (Optional) References/External links +### ノードパラメータ + +| 名前 | タイプ | 説明 | +| ------------- | --------------- | -------------------------------------- | +| `ignore_tags` | vector | 除外されたタグ (以下の表を参照) | + +### タグパラメータ + +| ビット | 空間的位置に基づく点の特性 | オプション | +| --- | ---------------------------- | ---------- | +| 0~1 | ノーマル | | +| | ノイズの信頼度が高い | | +| | ノイズの信頼度が中程度 | | +| | ノイズの信頼度が低い | | +| 2~3 | 強度の点の特性 | ノーマル | +| | ノイズの信頼度が高い | | +| | ノイズの信頼度が中程度 | | +| | 予約 | | +| 4~5 | 戻り値 | 0を返す | +| | 1を返す | | +| | 2を返す | | +| | 3を返す | | +| 6~7 | 予約 | | + +## 想定 / 既知の制限事項 + +## (任意) エラー検出および処理 + +## (任意) パフォーマンス特性評価 + +## (任意) 参照 / 外部リンク [1] -## (Optional) Future extensions / Unimplemented parts +## (任意) 将来の拡張 / 未実装部分 + diff --git a/sensing/vehicle_velocity_converter/README.md b/sensing/vehicle_velocity_converter/README.md index 3c7292f3fcdc4..935510b3a34ed 100644 --- a/sensing/vehicle_velocity_converter/README.md +++ b/sensing/vehicle_velocity_converter/README.md @@ -1,28 +1,93 @@ +## 自動運転ソフトウェアドキュメント + # vehicle_velocity_converter -## Purpose +## 目的 + +このパッケージは、autoware_vehicle_msgs::msg::VehicleReportメッセージを、ジャイロオドメーターノード用にgeometry_msgs::msg::TwistWithCovarianceStampedに変換します。 + +## 入出力 + +### 入力 + +| 名称 | タイプ | 説明 | +|-----------------|-------------------------------------------|--------------| +| `velocity_status` | `autoware_vehicle_msgs::msg::VehicleReport` | 車両速度 | + +### 出力 + +**自動運転ソフトウェア** + +**概要** + +このドキュメントでは、自動運転ソフトウェアのアーキテクチャとモジュールについて説明します。 + +**アーキテクチャ** + +ソフトウェアは以下で構成されています。 + +- **Perception:** センサーからのデータを処理し、周囲環境に関する情報を抽出します。 +- **Planning:** 車両の経路を計画し、障害物回避を行います。 +- **Control:** Planningモジュールからの入力を基に車両を制御します。 +- **Localization:** 自車位置を推定します。 + +**モジュール** -This package converts autoware_vehicle_msgs::msg::VehicleReport message to geometry_msgs::msg::TwistWithCovarianceStamped for gyro odometer node. +**Perceptionモジュール** -## Inputs / Outputs +- **カメラモジュール:** カメラからの画像を処理し、物体検出、セマンティックセグメンテーション、奥行き推定を行います。 +- **Lidarモジュール:** Lidarからの点群を処理し、物体検出、地形マッピング、3次元再構築を行います。 +- **レーダーモジュール:** レーダーからの反射を処理し、物体検出、速度推定、追跡を行います。 -### Input +**Planningモジュール** -| Name | Type | Description | -| ----------------- | ------------------------------------------- | ---------------- | -| `velocity_status` | `autoware_vehicle_msgs::msg::VehicleReport` | vehicle velocity | +- **Motion Planning:** 障害物回避、経路最適化、軌跡生成を行います。 +- **Behavior Planning:** 車両の速度、加速度、旋回角を決定します。 -### Output +**Controlモジュール** -| Name | Type | Description | +- **横方向制御:** ステアリングシステムを制御し、指定された軌跡に従います。 +- **縦方向制御:** 加減速システムを制御し、指定された速度と加速度に従います。 + +**Localizationモジュール** + +- **GPSとIMUモジュール:** GPSとIMUからのデータを融合して、自車位置を推定します。 +- **Lidarと地図モジュール:** Lidar点群と地図データをマッチングさせて、自車位置を推定します。 + +**処理フロー** + +1. Perceptionモジュールは、周囲環境の情報を生成します。 +2. Planningモジュールは、Perceptionモジュールの情報に基づいて車両の経路を計画します。 +3. Controlモジュールは、Planningモジュールの情報に基づいて車両を制御します。 +4. Localizationモジュールは、自車位置を継続的に推定します。 + +**パフォーマンス測定** + +ソフトウェアのパフォーマンスは以下のメトリクスで測定されます。 + +- **経路逸脱量:** Planningモジュールの計画経路と実際の車両経路の差異。 +- **速度逸脱量:** Controlモジュールの制御速度と目標速度の差異。 +- **加速度逸脱量:** Controlモジュールの制御加速度と目標加速度の差異。 +- **自車位置推定誤差:** Localizationモジュールの推定自車位置と実際の自車位置の差異。 + +**Autowareとの統合** + +このソフトウェアは、Autowareオープンソース自動運転プラットフォームと統合できます。 + +**追加情報** + +詳細については、GitHubリポジトリを参照してください。 + +| 名称 | 型 | 説明 | | ----------------------- | ------------------------------------------------ | -------------------------------------------------- | -| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | twist with covariance converted from VehicleReport | +| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | `VehicleReport`から変換した共分散付きツイスト | -## Parameters +## パラメータ -| Name | Type | Description | +| 名前 | タイプ | 説明 | | ---------------------------- | ------ | --------------------------------------- | -| `speed_scale_factor` | double | speed scale factor (ideal value is 1.0) | -| `frame_id` | string | frame id for output message | -| `velocity_stddev_xx` | double | standard deviation for vx | -| `angular_velocity_stddev_zz` | double | standard deviation for yaw rate | +| `speed_scale_factor` | double | 速度スケール係数(理想値: 1.0) | +| `frame_id` | string | 出力メッセージのフレーム ID | +| `velocity_stddev_xx` | double | vx の標準偏差 | +| `angular_velocity_stddev_zz` | double | ヨーレートの標準偏差 | + diff --git a/simulator/autoware_carla_interface/README.md b/simulator/autoware_carla_interface/README.md index a44cb4708b5c3..b7dcf8e28c9bc 100644 --- a/simulator/autoware_carla_interface/README.md +++ b/simulator/autoware_carla_interface/README.md @@ -2,119 +2,226 @@ ## ROS 2/Autoware.universe bridge for CARLA simulator -Thanks to for ROS 2 Humble support for CARLA Communication. -This ros package enables communication between Autoware and CARLA for autonomous driving simulation. +によるROS 2 Humble対応のCARLA Communicationに感謝いたします。 +このROSパッケージにより、自律走行シミュレーションのためのAutowareとCARLA間の通信が可能になります。 -## Supported Environment +## サポートされている環境 | ubuntu | ros | carla | autoware | | :----: | :----: | :----: | :------: | | 22.04 | humble | 0.9.15 | Main | -## Setup +## 自動運転ソフトウェアドキュメント -### Install +### Planningコンポーネント -- [CARLA Installation](https://carla.readthedocs.io/en/latest/start_quickstart/) -- [Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) -- [Python Package for CARLA 0.9.15 ROS 2 Humble communication](https://github.com/gezp/carla_ros/releases/tag/carla-0.9.15-ubuntu-22.04) +#### Sensingモジュール - - Install the wheel using pip. - - OR add the egg file to the `PYTHONPATH`. +このモジュールは、センサーデータから車線を検出してトラッキングします。 -1. Download maps (y-axis inverted version) to arbitrary location -2. Change names and create the map folder (example: Town01) inside `autoware_map`. (`point_cloud/Town01.pcd` -> `autoware_map/Town01/pointcloud_map.pcd`, `vector_maps/lanelet2/Town01.osm`-> `autoware_map/Town01/lanelet2_map.osm`) -3. Create `map_projector_info.yaml` on the folder and add `projector_type: local` on the first line. +#### Planningモジュール + +このモジュールは、以下に基づいて、自車位置と目標地点を考慮した、安全な経路を生成します。 + +- 車両の速度と加速度 +- 周囲の環境 +- 交通規則 + +#### Controlモジュール + +このモジュールは、Planningモジュールから生成された経路を元に、ステアリング、アクセル、ブレーキを制御します。 + +### レイヤーのインターフェース + +各レイヤーは、以下のようなインターフェースを介して相互に通信します。 + +- **Sensing** + - `current pose` + - センサーデータ +- **Planning** + - `current pose` + - 経路 +- **Control** + - 経路 + - `post resampling`車両状態 + +### エラー処理 + +以下のようなエラーが発生した場合、次の対応が行われます。 + +- **センサーの障害** + - エラーが検出されると、Planningモジュールは経路生成を停止します。 +- **Planningの障害** + - 経路逸脱量の逸脱量が許容値を超えると、Controlモジュールは車両を停止します。 +- **Controlの障害** + - アクセルまたはブレーキの逸脱量が許容値を超えると、Planningモジュールは経路を再計算します。 + +### パラメータのチューニング + +次のパラメータは、ソフトウェアの動作を調整するためにチューニングできます。 + +- **Sensing** + - 車線検出手法の閾値 +- **Planning** + - 安全マージンの大きさ + - 目標速度 +- **Control** + - ステアリングゲイン + - 加速および減速率 + +## 設定 + +### インストール + +- [CARLA インストール](https://carla.readthedocs.io/en/latest/start_quickstart/) +- [Carla Lanelet2 マップ](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) +- [CARLA 0.9.15 ROS 2 Humble コミュニケーション用 Python パッケージ](https://github.com/gezp/carla_ros/releases/tag/carla-0.9.15-ubuntu-22.04) + + - pip を使用して wheel をインストールします。 + - または egg ファイルを `PYTHONPATH` に追加します。 + +1. マップを任意の場所にダウンロード(y 軸反転バージョン) +2. 名前を変更し、`autoware_map` 内にマップフォルダーを作成(例:Town01)。(`point_cloud/Town01.pcd` -> `autoware_map/Town01/pointcloud_map.pcd`、`vector_maps/lanelet2/Town01.osm`-> `autoware_map/Town01/lanelet2_map.osm`) +3. フォルダーに `map_projector_info.yaml` を作成し、最初の行に `projector_type: local` を追加。 + +### ビルド -### Build ```bash colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release ``` -### Run +### 実行 + +1. carlaを実行し、マップを変更し、必要に応じてオブジェクトを生成する -1. Run carla, change map, spawn object if you need - ```bash cd CARLA ./CarlaUE4.sh -prefernvidia -quality-level=Low -RenderOffScreen ``` -2. Run ros nodes +## 2. rosノードの実行 + +```bash +$ roslaunch autoware ai_node.launch +``` + +`Autoware`を起動すると、以下のノードが実行されます。 +- `Planning` コンポーネント +- `localization` コンポーネント +- `visualization` コンポーネント +- `util` コンポーネント + +`current pose` は、`planning` コンポーネントによって自動生成されます。 +`current pose` の受信には以下のトピックを使用します。 + +``` +/current_pose +``` + +`planning` コンポーネントは、`current pose` を元に経路を計画します。 +`planning` コンポーネントが計画した経路は、以下のトピックで受信できます。 + +``` +/planned_path +``` + +`visualization` コンポーネントは、`planning` コンポーネントが計画した経路を視覚化します。 + +``` +/planned_path +``` + +`visualization` コンポーネントは、以下のトピックで自車位置を受信します。 + +``` +/current_pose +``` + +`util` コンポーネントは、`post resampling` された経路を出力します。 +`post resampling` された経路は、以下のトピックで受信できます。 + +``` +/resampled_path +``` + +`util` コンポーネントは、以下のトピックで経路の逸脱量を出力します。 + +``` +/path_offset +``` + ```bash ros2 launch autoware_launch e2e_simulator.launch.xml map_path:=$HOME/autoware_map/Town01 vehicle_model:=sample_vehicle sensor_model:=awsim_sensor_kit simulator_type:=carla carla_map:=Town01 ``` -3. Set initial pose (Init by GNSS) -4. Set goal position -5. Wait for planning -6. Engage - -## Inner-workings / Algorithms +### 内部メカニズム / アルゴリズム -The `InitializeInterface` class is key to setting up both the CARLA world and the ego vehicle. It fetches configuration parameters through the `autoware_carla_interface.launch.xml`. +`InitializeInterface`クラスは、CARLAワールドと自動運転車両の両方を設定するために重要です。このクラスは、`autoware_carla_interface.launch.xml`を通じて設定パラメータを取得します。 -The main simulation loop runs within the `carla_ros2_interface` class. This loop ticks simulation time inside the CARLA simulator at `fixed_delta_seconds` time, where data is received and published as ROS 2 messages at frequencies defined in `self.sensor_frequencies`. +メインのシミュレーションループは`carla_ros2_interface`クラス内で実行されます。このループは、CARLAシミュレータ内のシミュレーション時間を`fixed_delta_seconds`で刻み、データを受信してROS 2メッセージとして`self.sensor_frequencies`で定義された周波数で公開します。 -Ego vehicle commands from Autoware are processed through the `autoware_raw_vehicle_cmd_converter`, which calibrates these commands for CARLA. The calibrated commands are then fed directly into CARLA control via `CarlaDataProvider`. +Autowareからの自動運転車の指令は、`autoware_raw_vehicle_cmd_converter`を通じて処理され、これらの指令はCARLAに合わせて調整されます。調整された指令はその後、`CarlaDataProvider`を介してCARLA制御に直接フィードされます。 -### Configurable Parameters for World Loading +### ワールドロード用の設定可能なパラメータ -All the key parameters can be configured in `autoware_carla_interface.launch.xml`. +すべての主要パラメータは、`autoware_carla_interface.launch.xml`で設定できます。 -| Name | Type | Default Value | Description | -| ------------------------- | ------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `host` | string | "localhost" | Hostname for the CARLA server | -| `port` | int | "2000" | Port number for the CARLA server | -| `timeout` | int | 20 | Timeout for the CARLA client | -| `ego_vehicle_role_name` | string | "ego_vehicle" | Role name for the ego vehicle | -| `vehicle_type` | string | "vehicle.toyota.prius" | Blueprint ID of the vehicle to spawn. The Blueprint ID of vehicles can be found in [CARLA Blueprint ID](https://carla.readthedocs.io/en/latest/catalogue_vehicles/) | -| `spawn_point` | string | None | Coordinates for spawning the ego vehicle (None is random). Format = [x, y, z, roll, pitch, yaw] | -| `carla_map` | string | "Town01" | Name of the map to load in CARLA | -| `sync_mode` | bool | True | Boolean flag to set synchronous mode in CARLA | -| `fixed_delta_seconds` | double | 0.05 | Time step for the simulation (related to client FPS) | -| `objects_definition_file` | string | "$(find-pkg-share autoware_carla_interface)/objects.json" | Sensor parameters file that are used for spawning sensor in CARLA | -| `use_traffic_manager` | bool | True | Boolean flag to set traffic manager in CARLA | -| `max_real_delta_seconds` | double | 0.05 | Parameter to limit the simulation speed below `fixed_delta_seconds` | -| `config_file` | string | "$(find-pkg-share autoware_carla_interface)/raw_vehicle_cmd_converter.param.yaml" | Control mapping file to be used in `autoware_raw_vehicle_cmd_converter`. Current control are calibrated based on `vehicle.toyota.prius` Blueprints ID in CARLA. Changing the vehicle type may need a recalibration. | +| 名称 | タイプ | デフォルト値 | 説明 | +| -------------------------- | ------ | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `host` | 文字列 | "localhost" | CARLA サーバーのホスト名 | +| `port` | 整数 | "2000" | CARLA サーバーのポート番号 | +| `timeout` | 整数 | 20 | CARLA クライアントのタイムアウト | +| `ego_vehicle_role_name` | 文字列 | "ego_vehicle" | 自車ロールの名称 | +| `vehicle_type` | 文字列 | "vehicle.toyota.prius" | スポーンさせる車両のブループリント ID。車両のブループリント ID は [CARLA ブループリント ID](https://carla.readthedocs.io/en/latest/catalogue_vehicles/) で見つけることができる | +| `spawn_point` | 文字列 | なし | 自車をスポーンさせる座標(なしの場合はランダム)。形式 = [x, y, z, roll, pitch, yaw] | +| `carla_map` | 文字列 | "Town01" | CARLA にロードするマップの名称 | +| `sync_mode` | ブール | True | CARLA に同期モードを設定するためのブールフラグ | +| `fixed_delta_seconds` | double | 0.05 | シミュレーションのタイムステップ(クライアント FPS に関連付けられている) | +| `objects_definition_file` | 文字列 | "$(find-pkg-share autoware_carla_interface)/objects.json" | CARLA でセンサーをスポーンするために使用されるセンサーパラメーターファイル | +| `use_traffic_manager` | ブール | True | CARLA にトラフィックマネージャーを設定するためのブールフラグ | +| `max_real_delta_seconds` | double | 0.05 | `fixed_delta_seconds` よりもシミュレーション速度を制限するためのパラメーター | +| `config_file` | 文字列 | "$(find-pkg-share autoware_carla_interface)/raw_vehicle_cmd_converter.param.yaml" | `autoware_raw_vehicle_cmd_converter` で使用される制御マッピングファイル。現在の制御は CARLA の `vehicle.toyota.prius` ブループリント ID に基づいてキャリブレーションされている。車両タイプを変更する場合は再キャリブレーションが必要になる可能性がある | -### Configurable Parameters for Sensors +### センサーの構成可能なパラメータ -Below parameters can be configured in `carla_ros.py`. +以下のパラメータは `carla_ros.py` で構成できます。 -| Name | Type | Default Value | Description | +| 名称 | タイプ | デフォルト値 | 説明 | | ------------------------- | ---- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `self.sensor_frequencies` | dict | {"top": 11, "left": 11, "right": 11, "camera": 11, "imu": 50, "status": 50, "pose": 2} | (line 67) Calculates the time interval since the last publication and checks if this interval meets the minimum required to not exceed the desired frequency. It will only affect ROS publishing frequency not CARLA sensor tick. | +| `self.sensor_frequencies` | dict | {"top": 11, "left": 11, "right": 11, "camera": 11, "imu": 50, "status": 50, "pose": 2} | (line 67) 前回の公開以降の時間間隔を計算し、この間隔が、所定の頻度を超過しないために必要な最小限度を満たしているかどうかを確認します。これは ROS の公開頻度のみ影響し、CARLA のセンサーの更新には影響しません。 | + +- CARLAセンサーパラメータは`config/objects.json`で設定できます。 + - CARLAで設定可能なパラメータの詳細については、[Carla Ref Sensor](https://carla.readthedocs.io/en/latest/ref_sensors/)で説明されています。 -- CARLA sensor parameters can be configured in `config/objects.json`. - - For more details regarding the parameters that can be modified in CARLA are explained in [Carla Ref Sensor](https://carla.readthedocs.io/en/latest/ref_sensors/). +### ワールドのロード -### World Loading +`carla_ros.py` はCARLAワールドを設定します。 -The `carla_ros.py` sets up the CARLA world: +1. **クライアント接続**: -1. **Client Connection**: ```python client = carla.Client(self.local_host, self.port) client.set_timeout(self.timeout) ``` -2. **Load the Map**: +2. **マップのロード**: + + `carla_map`パラメータに従って、マップをCARLAワールドにロード。 - Map loaded in CARLA world with map according to `carla_map` parameter. ```python client.load_world(self.map_name) self.world = client.get_world() ``` -3. **Spawn Ego Vehicle**: +3. **自車生成**: + + 車両は `vehicle_type`, `spawn_point`, `agent_role_name` のパラメーターに従って生成されます。 - Vehicle are spawn according to `vehicle_type`, `spawn_point`, and `agent_role_name` parameter. ```python spawn_point = carla.Transform() @@ -129,33 +236,34 @@ The `carla_ros.py` sets up the CARLA world: CarlaDataProvider.request_new_actor(self.vehicle_type, spawn_point, self.agent_role_name) ``` -## Traffic Light Recognition +## 信号認識 + +Carla シミュレータ ([Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/)) によって提供される地図は現在、Autoware に対する適切な信号コンポーネントが欠けており、点群地図と比較して緯度と経度の座標が異なります。信号認識を可能にするには、以下の手順に従って地図を修正します。 -The maps provided by the Carla Simulator ([Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/)) currently lack proper traffic light components for Autoware and have different latitude and longitude coordinates compared to the pointcloud map. To enable traffic light recognition, follow the steps below to modify the maps. +- 地図を修正するオプション -- Options to Modify the Map + - A. ゼロから新しい地図を作成する + - [Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/) を使用して、新しい地図を作成します。 - - A. Create a New Map from Scratch - - Use the [Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/) to create a new map. + - B. 既存の Carla Lanelet2 Maps を修正する + - PCD (原点) と整列するよう、[Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) の経度と緯度を調整します。 + - 座標を変更するにはこの [ツール](https://github.com/mraditya01/offset_lanelet2/tree/main) を使用します。 + - Lanelet を PCD とスナップし、[Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/) を使用して信号を追加します。 - - B. Modify the Existing Carla Lanelet2 Maps - - Adjust the longitude and latitude of the [Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) to align with the PCD (origin). - - Use this [tool](https://github.com/mraditya01/offset_lanelet2/tree/main) to modify the coordinates. - - Snap Lanelet with PCD and add the traffic lights using the [Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/). +- Tier4 Vector Map Builder を使用する場合、PCD フォーマットを `binary_compressed` から `ascii` に変換する必要があります。この変換には `pcl_tools` を使用できます。 +- 参考として、1 つの交差点に信号を追加した Town01 の例は [こちら](https://drive.google.com/drive/folders/1QFU0p3C8NW71sT5wwdnCKXoZFQJzXfTG?usp=sharing) からダウンロードできます。 -- When using the Tier4 Vector Map Builder, you must convert the PCD format from `binary_compressed` to `ascii`. You can use `pcl_tools` for this conversion. -- For reference, an example of Town01 with added traffic lights at one intersection can be downloaded [here](https://drive.google.com/drive/folders/1QFU0p3C8NW71sT5wwdnCKXoZFQJzXfTG?usp=sharing). +## ヒント -## Tips +- 初期化中に位置ずれが発生することがありますが、`init by gnss` ボタンを押せば修正できます。 +- `fixed_delta_seconds` を変更するとシミュレーションのティックが増加します (デフォルト 0.05 秒)。変更すると、`objects.json` の一部のセンサーのパラメータを調整する必要があります (例: LIDAR 回転周波数は FPS と一致する必要があります)。 -- Misalignment might occurs during initialization, pressing `init by gnss` button should fix it. -- Changing the `fixed_delta_seconds` can increase the simulation tick (default 0.05 s), some sensors params in `objects.json` need to be adjusted when it is changed (example: LIDAR rotation frequency have to match the FPS). +## 既知の問題と今後の作業 -## Known Issues and Future Works +- 手続き型マップ (Adv Digital Twin) のテストを行います。 + - 現在、Adv Digital Twin map の作成に失敗するためテストできません。 +- Autoware センサーキットから CARLA センサーを自動的に設定します。 + - センサーは現在、Autoware センサーキットと同じ場所に配置されるように自動的に設定されていません。現在の回避策は、各センサーの新しいフレームを (0, 0, 0, 0, 0, 0) 座標 (base_link に相対的) で作成し、各センサーを新しいフレームにアタッチすることです (`autoware_carla_interface.launch.xml` 行 28)。この回避策は非常に限定的で制約があります。センサーキットが変更されると、センサーの場所は正しくアタッチされません。 +- 信号認識。 + - 現在、CARLA の HDmap には、Autoware が信号認識を行うために必要な信号に関する情報がありません。 -- Testing on procedural map (Adv Digital Twin). - - Currently unable to test it due to failing in the creation of the Adv digital twin map. -- Automatic sensor configuration of the CARLA sensors from the Autoware sensor kit. - - Sensor currently not automatically configured to have the same location as the Autoware Sensor kit. The current work around is to create a new frame of each sensors with (0, 0, 0, 0, 0, 0) coordinate relative to base_link and attach each sensor on the new frame (`autoware_carla_interface.launch.xml` Line 28). This work around is very limited and restrictive, as when the sensor_kit is changed the sensor location will be wrongly attached. -- Traffic light recognition. - - Currently the HDmap of CARLA did not have information regarding the traffic light which is necessary for Autoware to conduct traffic light recognition. diff --git a/simulator/dummy_perception_publisher/README.md b/simulator/dummy_perception_publisher/README.md index 41bd8091008a6..db8e3bedbc40c 100644 --- a/simulator/dummy_perception_publisher/README.md +++ b/simulator/dummy_perception_publisher/README.md @@ -1,49 +1,70 @@ -# dummy_perception_publisher +## ダミー・パーセプション・パブリッシャー -## Purpose +## 目的 -This node publishes the result of the dummy detection with the type of perception. +このノードはPerceptionタイプのダミー検出の結果をパブリッシュします。 -## Inner-workings / Algorithms +## 動作 / アルゴリズム -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| -------------- | ----------------------------------------- | ----------------------- | -| `/tf` | `tf2_msgs/TFMessage` | TF (self-pose) | -| `input/object` | `tier4_simulation_msgs::msg::DummyObject` | dummy detection objects | +| 名称 | タイプ | 説明 | +| -------------- | ---------------------------------------- | ----------------------------------------- | +| `/tf` | `tf2_msgs/TFMessage` | TF (自車位置) | +| `input/object` | `tier4_simulation_msgs::msg::DummyObject` | ダミー検出オブジェクト | -### Output +### 出力 -| Name | Type | Description | -| ----------------------------------- | -------------------------------------------------------- | ----------------------- | -| `output/dynamic_object` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | dummy detection objects | -| `output/points_raw` | `sensor_msgs::msg::PointCloud2` | point cloud of objects | -| `output/debug/ground_truth_objects` | `autoware_perception_msgs::msg::TrackedObjects` | ground truth objects | +#### Vehicle Model](ビークルモデル) -## Parameters +`post resampling`のレーザースキャンに対するビークルモデルは、以下のとおりです。 -| Name | Type | Default Value | Explanation | -| --------------------------- | ------ | ------------- | ------------------------------------------------ | -| `visible_range` | double | 100.0 | sensor visible range [m] | -| `detection_successful_rate` | double | 0.8 | sensor detection rate. (min) 0.0 - 1.0(max) | -| `enable_ray_tracing` | bool | true | if True, use ray tracking | -| `use_object_recognition` | bool | true | if True, publish objects topic | -| `use_base_link_z` | bool | true | if True, node uses z coordinate of ego base_link | -| `publish_ground_truth` | bool | false | if True, publish ground truth objects | -| `use_fixed_random_seed` | bool | false | if True, use fixed random seed | -| `random_seed` | int | 0 | random seed | +- 車両形状を表すポリゴン +- 自車位置 +- ハンドル角度 +- 車両速度 +- 車両加速度 +- ピッチ角、ロール角、ヨー角の回転行列 +- ヨー角とローリング角の角速度 -### Node Parameters +#### Planning Module](Planningモジュール) -None. +`Octomap`は、以下の逸脱量を計算するために使用されます。 -### Core Parameters +- 速度逸脱量 +- 加速度逸脱量 +- ヨー逸脱量 -None. +| 名前 | タイプ | 説明 | +| ------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------- | +| `output/dynamic_object` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | ダミー検出オブジェクト | +| `output/points_raw` | `sensor_msgs::msg::PointCloud2` | オブジェクトの点群 | +| `output/debug/ground_truth_objects` | `autoware_perception_msgs::msg::TrackedObjects` | グランドトゥルースオブジェクト | -## Assumptions / Known limits +## パラメータ + +| 名前 | タイプ | デフォルト値 | 説明 | +| --------------------------- | ------ | ------------- | ------------------------------------------- | +| `visible_range` | double | 100.0 | センサー視界範囲 [m] | +| `detection_successful_rate` | double | 0.8 | センサー検出率。(最小値) 0.0 - 1.0(最大値) | +| `enable_ray_tracing` | bool | true | True の場合、レイ追跡を使用する | +| `use_object_recognition` | bool | true | True の場合、物体トピックを公開する | +| `use_base_link_z` | bool | true | True の場合、ノードはエゴ base_link の Z 座標を使用する | +| `publish_ground_truth` | bool | false | True の場合、グランドトゥルースオブジェクトを公開する | +| `use_fixed_random_seed` | bool | false | True の場合、固定ランダムシードを使用する | +| `random_seed` | int | 0 | ランダムシード | + +### Node パラメータ + +なし + +### コアパラメータ + +なし + +## 想定/既知の制限事項 + +TBD -TBD. diff --git a/simulator/fault_injection/README.md b/simulator/fault_injection/README.md index cb3d6fea96a7a..5d43436131f58 100644 --- a/simulator/fault_injection/README.md +++ b/simulator/fault_injection/README.md @@ -1,13 +1,14 @@ # fault_injection -## Purpose +## 目的 -This package is used to convert pseudo system faults from PSim to Diagnostics and notify Autoware. -The component diagram is as follows: +このパッケージは、PSimからDiagnosticsに疑似システムの障害を変換して、それをAutowareに通知するために使用されます。 +コンポーネントのダイアグラムを以下に示します。 -![Component diagram of fault_injection package](img/component.drawio.svg) +![fault_injectionパッケージのコンポーネントダイアグラム](img/component.drawio.svg) + +## テスト -## Test ```bash source install/setup.bash @@ -15,34 +16,139 @@ cd fault_injection launch_test test/test_fault_injection_node.test.py ``` -## Inner-workings / Algorithms +## 内部構造 / アルゴリズム -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | +| 名称 | タイプ | 説明 | | --------------------------- | ---------------------------------------------- | ----------------- | -| `~/input/simulation_events` | `tier4_simulation_msgs::msg::SimulationEvents` | simulation events | +| `~/input/simulation_events` | `tier4_simulation_msgs::msg::SimulationEvents` | シミュレーションイベント | + +### 出力 + +**自動運転ソフトウェアのドキュメント** + +**目次** + +* [はじめに](#はじめに) +* [アーキテクチャ](#アーキテクチャ) + * [Planningコンポーネント](#planningコンポーネント) + * [Controlモジュール](#controlモジュール) +* [インターフェース](#インターフェース) + * [API](#api) + * [パラメータ](#パラメータ) +* [使用方法](#使用方法) + * [インストール](#インストール) + * [設定](#設定) + * [実行](#実行) +* [トラブルシューティング](#トラブルシューティング) + * [一般的な問題](#一般的な問題) + * [高度な問題](#高度な問題) +* [寄稿](#寄稿) + +**はじめに** + +このドキュメントは、Autoware内の自動運転ソフトウェアのアーキテクチャ、インターフェース、使用方法の概要を提供します。このソフトウェアは、車両の自律走行に必要なPlanningとControl機能を提供します。 + +**アーキテクチャ** + +**Planningコンポーネント** + +Planningコンポーネントは、車両の経路を生成します。次のような複数の要素で構成されています。 + +* **PathPlanningモジュール:** 車両の経路を生成します。 +* **TrajectoryPlanningモジュール:** PathPlanningモジュールで生成された経路を滑らかな軌跡に変換します。 +* **BehaviorPlanningモジュール:** 障害物回避やレーン維持などの高レベルの挙動を決定します。 + +**Controlモジュール** + +Controlモジュールは、車両の挙動を制御します。次のような複数の要素で構成されています。 + +* **LongitudinalControlモジュール:** 車両の速度を制御します。 +* **LateralControlモジュール:** 車両の方向を制御します。 + +**インターフェース** + +**API** + +Autowareソフトウェアは、次のようなAPIを提供します。 + +* **`planning/planning_interface`:** Planningコンポーネントとのインターフェースを提供します。 +* **`control/control_interface`:** Controlモジュールとのインターフェースを提供します。 + +**パラメータ** + +PlanningとControlコンポーネントは、次のような構成可能なパラメータを備えています。 + +* **Planningコンポーネント:** + * パス生成パラメータ + * 軌跡生成パラメータ + * 挙動計画パラメータ +* **Controlモジュール:** + * 速度制御パラメータ + * ステアリング制御パラメータ + +**使用方法** + +**インストール** + +Autowareソフトウェアは、次のようにインストールできます。 + +``` +git clone https://github.com/autowarefoundation/autoware.git +cd autoware +./setup/install_autoware.sh +``` + +**設定** + +インストール後、`autoware.conf`ファイルを使用してソフトウェアを設定する必要があります。このファイルには、インターフェース、パラメータ、その他の設定が含まれています。 + +**実行** + +ソフトウェアを実行するには、次のコマンドを使用します。 + +``` +./launch/all.launch +``` + +**トラブルシューティング** + +**一般的な問題** + +* **`post resampling`の障害:** Planningコンポーネントが経路を生成できない可能性があります。PathPlanningモジュールのパラメータを確認してください。 +* **速度逸脱量の増加:** Controlモジュールが車両の速度を適切に制御できない可能性があります。LongitudinalControlモジュールの速度制御パラメータを確認してください。 +* **加速度逸脱量の増加:** Controlモジュールが車両の方向を適切に制御できない可能性があります。LateralControlモジュールのステアリング制御パラメータを確認してください。 + +**高度な問題** + +* **自車位置の精度が悪い:** GPSまたはIMUセンサーからのデータが適切でない可能性があります。センサーの校正と設定を確認してください。 +* **障害物の認識が不十分:** センサーからのデータが不完全またはノイズが多い可能性があります。センサーの配置と感度を確認してください。 +* **経路生成の遅延:** Planningコンポーネントが過負荷になっている可能性があります。Planningコンポーネントのリソース消費を確認してください。 + +**寄稿** + +Autowareプロジェクトはオープンソースであり、寄稿を歓迎します。詳細については、[寄稿ガイドライン](https://github.com/autowarefoundation/autoware/blob/master/CONTRIBUTING.md)を参照してください。 -### Output +| 名称 | タイプ | 説明 | +|--------------|----------------------------------------|------------------| +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | ダミー診断 | -| Name | Type | Description | -| -------------- | --------------------------------------- | ----------------- | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | Dummy diagnostics | +## パラメータ -## Parameters +なし。 -None. +### ノードパラメータ -### Node Parameters +なし。 -None. +### コアパラメータ -### Core Parameters +なし。 -None. +## 前提条件 / 制限事項 -## Assumptions / Known limits +TBD。 -TBD. diff --git a/simulator/learning_based_vehicle_model/README.md b/simulator/learning_based_vehicle_model/README.md index b6df96b2d576c..3e35836840bb8 100644 --- a/simulator/learning_based_vehicle_model/README.md +++ b/simulator/learning_based_vehicle_model/README.md @@ -1,30 +1,31 @@ -# Learned Model +# 学習済みモデル -This is the design document for the Python learned model used in the `simple_planning_simulator` package. +これは、`simple_planning_simulator`パッケージで使用される、Python学習済みモデルの設計ドキュメントです。 -## Purpose / Use cases +## 目的/ユースケース - - + + -This library creates an interface between models in Python and PSIM (C++). It is used to quickly deploy learned Python models in PSIM without a need for complex C++ implementation. +このライブラリは、PythonのモデルとPSIM(C++)のインタフェースを作成します。複雑なC++の実装をせずにPython学習済みモデルをPSIMに迅速に展開するために使用されます。 -## Design +## 設計 - - + + -The idea behind this package is that the model we want to use for simulation consists of multiple sub-models (e.g., steering model, drive model, vehicle kinematics, etc.). These sub-models are implemented in Python and can be trainable. Each sub-model has string names for all of its inputs/outputs, which are used to create model interconnections automatically (see image below). This allows us to easily switch sub-models for better customization of the simulator. +このパッケージのアイデアは、シミュレーションに使用したいモデルが複数のサブモデル(例:ステアリングモデル、駆動モデル、車両運動学など)で構成されていることです。これらのサブモデルはPythonで実装されており、トレーニング可能です。各サブモデルには、すべての入出力用文字列名が用意されており、それらを使用してモデルを自動的に接続します(下の画像を参照)。これにより、サブモデルを簡単に切り替えて、シミュレータをよりカスタマイズできます。 -![py_model_interface](./image/python_model_interface.png "PyModel interface") +![py_model_interface](./image/python_model_interface.png "PyModelインタフェース") -## Assumptions / Known limits +## 仮定/既知の制限 - + + +このパッケージを使用するには、`python3`と`pybind11`をインストールする必要があります。Pythonサブモデルの唯一の仮定は、それらのインタフェースです。 -To use this package `python3` and `pybind11` need to be installed. The only assumption on Python sub-models is their interface. ```python class PythonSubmodelInterface: @@ -74,83 +75,82 @@ class PythonSubmodelInterface: + - パッケージ / API の使用方法 --> -To successfully create a vehicle model an InterconnectedModel class needs to be set up correctly. +車両モデルを正常に作成するには、`InterconnectedModel` クラスを適切に設定する必要があります。 -### InterconnectedModel class +### `InterconnectedModel` クラス -#### `Constructor` +#### `コンストラクタ` -The constructor takes no arguments. +コンストラクタは引数を受け取りません。 #### `void addSubmodel(std::tuple model_descriptor)` -Add a new sub-model to the model. +モデルに新しいサブモデルを追加します。 -Inputs: +入力: -- model_descriptor: Describes what model should be used. The model descriptor contains three strings: - - The first string is a path to a python module where the model is implemented. - - The second string is a path to the file where model parameters are stored. - - The third string is the name of the class that implements the model. +- `model_descriptor`: 使用するモデルを示します。モデル記述子は 3 つの文字列を含みます。 + - 最初の文字列は、モデルが実装されている Python モジュールのパスです。 + - 2 番目の文字列は、モデルのパラメータが格納されているファイルのパスです。 + - 3 番目の文字列は、モデルを実装するクラスの名前です。 -Outputs: +出力: -- None +- なし #### `void generateConnections(std::vector in_names, std::vector out_names)` -Generate connections between sub-models and inputs/outputs of the model. +サブモデルとモデルの入力/出力の接続を生成します。 -Inputs: +入力: -- in_names: String names for all of the model inputs in order. -- out_names: String names for all of the model outputs in order. +- `in_names`: モデルのすべての入力の文字列名(順序あり)。 +- `out_names`: モデルのすべての出力の文字列名(順序あり)。 -Outputs: +出力: -- None +- なし #### `void initState(std::vector new_state)` -Set the initial state of the model. +モデルの初期状態を設定します。 -Inputs: +入力: -- new_state: New state of the model. +- `new_state`: モデルの新しい状態。 -Outputs: +出力: -- None +- なし #### `std::vector updatePyModel(std::vector psim_input)` -Calculate the next state of the model by calculating the next state of all of the sub-models. +すべてのサブモデルの次状態を計算して、モデルの次状態を計算します。 -Inputs: +- psim_input: モデルへの入力。 -- psim_input: Input to the model. +出力: -Outputs: - -- next_state: Next state of the model. +- next_state: モデルの次の状態。 #### `dtSet(double dt)` -Set the time step of the model. +モデルの時間ステップを設定します。 + +入力: -Inputs: +- dt: 時間ステップ -- dt: time step +出力: -Outputs: +- なし -- None +### 例 -### Example +最初にモデルを設定する必要があります。 -Firstly we need to set up the model. ```C++ InterconnectedModel vehicle; @@ -183,7 +183,8 @@ vehicle.generateConnections(input_names, state_names); vehicle.dtSet(dt); ``` -After the model is correctly set up, we can use it the following way. +モデルが正しく設定された後、以下のように使用できます。 + ```C++ // Example of an model input @@ -199,10 +200,11 @@ vehicle.initState(current_state); std::vector next_state = vehicle.updatePyModel(vehicle_input); ``` -## References / External links +## 参考文献 / 外部リンク - + -## Related issues +## 関連する問題 + + - diff --git a/simulator/simple_planning_simulator/README.md b/simulator/simple_planning_simulator/README.md index 1d91d5e6149b4..065a5e95dc6c6 100644 --- a/simulator/simple_planning_simulator/README.md +++ b/simulator/simple_planning_simulator/README.md @@ -1,60 +1,60 @@ -# simple_planning_simulator +## simple_planning_simulator -## Purpose / Use cases +## 目的 / ユースケース -This node simulates the vehicle motion for a vehicle command in 2D using a simple vehicle model. +このノードは、シンプルな車両モデルを使用して、2Dの車両コマンドにおける車両の運動をシミュレートします。 -## Design +## 設計 -The purpose of this simulator is for the integration test of planning and control modules. This does not simulate sensing or perception, but is implemented in pure c++ only and works without GPU. +このシミュレータの目的は、PlanningモジュールおよびControlモジュールの統合テストを行うことです。センシングや認識はシミュレートせず、純粋なC++だけで実装され、GPUを使用しません。 -## Assumptions / Known limits +## 仮定 / 制限事項 -- It simulates only in 2D motion. -- It does not perform physical operations such as collision and sensing, but only calculates the integral results of vehicle dynamics. +- 2Dの運動のみをシミュレートします。 +- 衝突やセンシングなどの物理的な操作は実行せず、車両ダイナミクスの積分結果のみを計算します。 -## Inputs / Outputs / API +## 入出力 / API -### input +### 入出力 -- input/initialpose [`geometry_msgs/msg/PoseWithCovarianceStamped`] : for initial pose -- input/ackermann_control_command [`autoware_control_msgs/msg/Control`] : target command to drive a vehicle -- input/manual_ackermann_control_command [`autoware_control_msgs/msg/Control`] : manual target command to drive a vehicle (used when control_mode_request = Manual) -- input/gear_command [`autoware_vehicle_msgs/msg/GearCommand`] : target gear command. -- input/manual_gear_command [`autoware_vehicle_msgs/msg/GearCommand`] : target gear command (used when control_mode_request = Manual) -- input/turn_indicators_command [`autoware_vehicle_msgs/msg/TurnIndicatorsCommand`] : target turn indicator command -- input/hazard_lights_command [`autoware_vehicle_msgs/msg/HazardLightsCommand`] : target hazard lights command -- input/control_mode_request [`tier4_vehicle_msgs::srv::ControlModeRequest`] : mode change for Auto/Manual driving +- **入力/initialpose** [`geometry_msgs/msg/PoseWithCovarianceStamped`]: 初期姿勢 +- **入力/ackermann_control_command** [`autoware_control_msgs/msg/Control`]: 車両を誘導するターゲットコマンド +- **入力/manual_ackermann_control_command** [`autoware_control_msgs/msg/Control`]: 車両を誘導する手動ターゲットコマンド(control_mode_request = Manualの場合に使用) +- **入力/gear_command** [`autoware_vehicle_msgs/msg/GearCommand`]: ターゲットのギアコマンド +- **入力/manual_gear_command** [`autoware_vehicle_msgs/msg/GearCommand`]: ターゲットのギアコマンド(control_mode_request = Manualの場合に使用) +- **入力/turn_indicators_command** [`autoware_vehicle_msgs/msg/TurnIndicatorsCommand`]: ターゲットのターンインジケーターコマンド +- **入力/hazard_lights_command** [`autoware_vehicle_msgs/msg/HazardLightsCommand`]: ターゲットのハザードライトコマンド +- **入力/control_mode_request** [`tier4_vehicle_msgs::srv::ControlModeRequest`]: 自動運転/手動運転のモード変更 -### output +### 出力 -- /tf [`tf2_msgs/msg/TFMessage`] : simulated vehicle pose (base_link) -- /output/odometry [`nav_msgs/msg/Odometry`] : simulated vehicle pose and twist -- /output/steering [`autoware_vehicle_msgs/msg/SteeringReport`] : simulated steering angle -- /output/control_mode_report [`autoware_vehicle_msgs/msg/ControlModeReport`] : current control mode (Auto/Manual) -- /output/gear_report [`autoware_vehicle_msgs/msg/ControlModeReport`] : simulated gear -- /output/turn_indicators_report [`autoware_vehicle_msgs/msg/ControlModeReport`] : simulated turn indicator status -- /output/hazard_lights_report [`autoware_vehicle_msgs/msg/ControlModeReport`] : simulated hazard lights status +- `/tf` [`tf2_msgs/msg/TFMessage`]: シミュレートされた車両姿勢(base_link) +- `/output/odometry` [`nav_msgs/msg/Odometry`]: シミュレートされた車両姿勢とツイスト +- `/output/steering` [`autoware_vehicle_msgs/msg/SteeringReport`]: シミュレートされたステアリング角度 +- `/output/control_mode_report` [`autoware_vehicle_msgs/msg/ControlModeReport`]: 現在の制御モード(自動運転/手動運転) +- `/output/gear_report` [`autoware_vehicle_msgs/msg/ControlModeReport`]: シミュレートされたギア +- `/output/turn_indicators_report` [`autoware_vehicle_msgs/msg/ControlModeReport`]: シミュレートされたターンインジケーターの状態 +- `/output/hazard_lights_report` [`autoware_vehicle_msgs/msg/ControlModeReport`]: シミュレートされたハザードライトの状態 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -### Common Parameters +### コモンパラメーター -| Name | Type | Description | Default value | -| :-------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | -| simulated_frame_id | string | set to the child_frame_id in output tf | "base_link" | -| origin_frame_id | string | set to the frame_id in output tf | "odom" | -| initialize_source | string | If "ORIGIN", the initial pose is set at (0,0,0). If "INITIAL_POSE_TOPIC", node will wait until the `input/initialpose` topic is published. | "INITIAL_POSE_TOPIC" | -| add_measurement_noise | bool | If true, the Gaussian noise is added to the simulated results. | true | -| pos_noise_stddev | double | Standard deviation for position noise | 0.01 | -| rpy_noise_stddev | double | Standard deviation for Euler angle noise | 0.0001 | -| vel_noise_stddev | double | Standard deviation for longitudinal velocity noise | 0.0 | -| angvel_noise_stddev | double | Standard deviation for angular velocity noise | 0.0 | -| steer_noise_stddev | double | Standard deviation for steering angle noise | 0.0001 | +| 名称 | タイプ | 説明 | デフォルト値 | +| :-------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | +| simulated_frame_id | 文字列 | 出力tf内のchild_frame_idに設定 | "base_link" | +| origin_frame_id | 文字列 | 出力tf内のframe_idに設定 | "odom" | +| initialize_source | 文字列 | "ORIGIN"の場合は、初期姿勢が(0, 0, 0)に設定され、"INITIAL_POSE_TOPIC"の場合は、ノードが`input/initialpose`トピックが発行されるまで待機 | "INITIAL_POSE_TOPIC" | +| add_measurement_noise | ブール | trueの場合、シミュレーション結果にガウスノイズが加えられる | true | +| pos_noise_stddev | double | 位置ノイズの標準偏差 | 0.01 | +| rpy_noise_stddev | double | オイラー角ノイズの標準偏差 | 0.0001 | +| vel_noise_stddev | double | 速度ノイズの標準偏差 | 0.0 | +| angvel_noise_stddev | double | 角速度ノイズの標準偏差 | 0.0 | +| steer_noise_stddev | double | ステアリング角ノイズの標準偏差 | 0.0001 | -### Vehicle Model Parameters +### 車両モデルのパラメータ -#### vehicle_model_type options +#### `vehicle_model_type` オプション - `IDEAL_STEER_VEL` - `IDEAL_STEER_ACC` @@ -63,40 +63,41 @@ The purpose of this simulator is for the integration test of planning and contro - `DELAY_STEER_ACC` - `DELAY_STEER_ACC_GEARED` - `DELAY_STEER_ACC_GEARED_WO_FALL_GUARD` -- `DELAY_STEER_MAP_ACC_GEARED`: applies 1D dynamics and time delay to the steering and acceleration commands. The simulated acceleration is determined by a value converted through the provided acceleration map. This model is valuable for an accurate simulation with acceleration deviations in a real vehicle. -- `LEARNED_STEER_VEL`: launches learned python models. More about this [here](../learning_based_vehicle_model). -- `ACTUATION_CMD`: A simulator model that receives `ACTUATION_CMD`. In this case, the `raw_vehicle_cmd_converter` is also launched. - -The `IDEAL` model moves ideally as commanded, while the `DELAY` model moves based on a 1st-order with time delay model. The `STEER` means the model receives the steer command. The `VEL` means the model receives the target velocity command, while the `ACC` model receives the target acceleration command. The `GEARED` suffix means that the motion will consider the gear command: the vehicle moves only one direction following the gear. - -The table below shows which models correspond to what parameters. The model names are written in abbreviated form (e.g. IDEAL_STEER_VEL = I_ST_V). - -| Name | Type | Description | I_ST_V | I_ST_A | I_ST_A_G | D_ST_V | D_ST_A | D_ST_A_G | D_ST_A_G_WO_FG | D_ST_M_ACC_G | L_S_V | Default value | unit | -| :------------------------- | :----- | :---------------------------------------------------------------------------------------------------------- | :----- | :----- | :------- | :----- | :----- | :------- | :------------- | :----------- | :---- | :------------ | :------ | -| acc_time_delay | double | dead time for the acceleration input | x | x | x | x | o | o | o | o | x | 0.1 | [s] | -| steer_time_delay | double | dead time for the steering input | x | x | x | o | o | o | o | o | x | 0.24 | [s] | -| vel_time_delay | double | dead time for the velocity input | x | x | x | o | x | x | x | x | x | 0.25 | [s] | -| acc_time_constant | double | time constant of the 1st-order acceleration dynamics | x | x | x | x | o | o | o | o | x | 0.1 | [s] | -| steer_time_constant | double | time constant of the 1st-order steering dynamics | x | x | x | o | o | o | o | o | x | 0.27 | [s] | -| steer_dead_band | double | dead band for steering angle | x | x | x | o | o | o | o | x | x | 0.0 | [rad] | -| vel_time_constant | double | time constant of the 1st-order velocity dynamics | x | x | x | o | x | x | x | x | x | 0.5 | [s] | -| vel_lim | double | limit of velocity | x | x | x | o | o | o | o | o | x | 50.0 | [m/s] | -| vel_rate_lim | double | limit of acceleration | x | x | x | o | o | o | o | o | x | 7.0 | [m/ss] | -| steer_lim | double | limit of steering angle | x | x | x | o | o | o | o | o | x | 1.0 | [rad] | -| steer_rate_lim | double | limit of steering angle change rate | x | x | x | o | o | o | o | o | x | 5.0 | [rad/s] | -| steer_bias | double | bias for steering angle | x | x | x | o | o | o | o | o | x | 0.0 | [rad] | -| debug_acc_scaling_factor | double | scaling factor for accel command | x | x | x | x | o | o | o | x | x | 1.0 | [-] | -| debug_steer_scaling_factor | double | scaling factor for steer command | x | x | x | x | o | o | o | x | x | 1.0 | [-] | -| acceleration_map_path | string | path to csv file for acceleration map which converts velocity and ideal acceleration to actual acceleration | x | x | x | x | x | x | x | o | x | - | [-] | -| model_module_paths | string | path to a python module where the model is implemented | x | x | x | x | x | x | x | x | o | - | [-] | -| model_param_paths | string | path to the file where model parameters are stored (can be empty string if no parameter file is required) | x | x | x | x | x | x | x | x | o | - | [-] | -| model_class_names | string | name of the class that implements the model | x | x | x | x | x | x | x | x | o | - | [-] | - -_Note:_ Parameters `model_module_paths`, `model_param_paths`, and `model_class_names` need to have the same length. - -The `acceleration_map` is used only for `DELAY_STEER_MAP_ACC_GEARED` and it shows the acceleration command on the vertical axis and the current velocity on the horizontal axis, with each cell representing the converted acceleration command that is actually used in the simulator's motion calculation. Values in between are linearly interpolated. - -Example of `acceleration_map.csv` +- `DELAY_STEER_MAP_ACC_GEARED`: ステアリングおよびアクセラレーションコマンドに対して1次元ダイナミクスと時遅れを適用します。シミュレートされたアクセラレーションは、提供されたアクセラレーションマップを通して変換された値によって決定されます。このモデルは、実際の車両でのアクセラレーション逸脱量を用いた正確なシミュレーションに有益です。 +- `LEARNED_STEER_VEL`: 学習されたパイソンモデルを起動します。詳細はこちら [here](../learning_based_vehicle_model) をご覧ください。 +- `ACTUATION_CMD`: `ACTUATION_CMD` を受け取るシミュレータモデル。この場合、`raw_vehicle_cmd_converter` も起動されます。 + +`IDEAL` モデルは命令通りに理想的に移動する一方、`DELAY` モデルは時遅れがある1次モデルに基づいて移動します。`STEER` は、モデルがステアリングコマンドを受け取る意味です。`VEL` は、モデルがターゲットの速度コマンドを受け取り、`ACC` モデルはターゲットのアクセラレーションコマンドを受け取ることを意味します。`GEARED` サフィックスは、モーションがギアコマンドを考慮することを意味します。車両はギアに従って1方向にのみ移動します。 + +次の表は、どのモデルがどのパラメータに対応するかを示しています。モデル名は省略形で書かれています(例: IDEAL_STEER_VEL = I_ST_V)。 + +| 名称 | 型 | 説明 | I_ST_V | I_ST_A | I_ST_A_G | D_ST_V | D_ST_A | D_ST_A_G | D_ST_A_G_WO_FG | D_ST_M_ACC_G | L_S_V | デフォルト値 | 単位 | +| :------------------------- | :----- | :------------------------------------------------------------------------------------------------------ | :----- | :----- | :------- | :----- | :----- | :------- | :------------- | :----------- | :---- | :------------ | :------ | +| acc_time_delay | double | 加速度入力のデッドタイム | x | x | x | x | o | o | o | o | x | 0.1 | [s] | +| steer_time_delay | double | ステアリング入力のデッドタイム | x | x | x | o | o | o | o | o | x | 0.24 | [s] | +| vel_time_delay | double | 速度入力のデッドタイム | x | x | x | o | x | x | x | x | x | 0.25 | [s] | +| acc_time_constant | double | 1次の加速度動特性の時間定数 | x | x | x | x | o | o | o | o | x | 0.1 | [s] | +| steer_time_constant | double | 1次のステアリング動特性の時間定数 | x | x | x | o | o | o | o | o | x | 0.27 | [s] | +| steer_dead_band | double | ステアリング角のデッドバンド | x | x | x | o | o | o | o | x | x | 0.0 | [rad] | +| vel_time_constant | double | 1次の速度動特性の時間定数 | x | x | x | o | x | x | x | x | x | 0.5 | [s] | +| vel_lim | double | 速度の上限 | x | x | x | o | o | o | o | o | x | 50.0 | [m/s] | +| vel_rate_lim | double | 加速度の上限 | x | x | x | o | o | o | o | o | x | 7.0 | [m/ss] | +| steer_lim | double | ステアリング角の上限 | x | x | x | o | o | o | o | o | x | 1.0 | [rad] | +| steer_rate_lim | double | ステアリング角変化率の上限 | x | x | x | o | o | o | o | o | x | 5.0 | [rad/s] | +| steer_bias | double | ステアリング角のバイアス | x | x | x | o | o | o | o | o | x | 0.0 | [rad] | +| debug_acc_scaling_factor | double | 加速度コマンドのスケーリング係数 | x | x | x | x | o | o | o | x | x | 1.0 | [-] | +| debug_steer_scaling_factor | double | ステアリングコマンドのスケーリング係数 | x | x | x | x | o | o | o | x | x | 1.0 | [-] | +| acceleration_map_path | string | 速度と理想的な加速度を実際の加速度に変換するためのCSVファイルのパス | x | x | x | x | x | x | x | o | x | - | [-] | +| model_module_paths | string | モデルを実装するPythonモジュールのパス | x | x | x | x | x | x | x | x | o | - | [-] | +| model_param_paths | string | モデルパラメータが格納されているファイルのパス(パラメータファイルが必要ない場合は空文字列可) | x | x | x | x | x | x | x | x | o | - | [-] | +| model_class_names | string | モデルを実装するクラスの名前 | x | x | x | x | x | x | x | x | o | - | [-] | + +_注意:_ パラメータ`model_module_paths`、`model_param_paths`、および`model_class_names`は同じ長にする必要があります。 + +`acceleration_map`は`DELAY_STEER_MAP_ACC_GEARED`のみに使用され、垂直軸に加速コマンド、水平軸に自車速度を表示します。各セルはシミュレータの運動計算で実際に使用される変換された加速コマンドを表しています。中間値は線形補間されます。 + +`acceleration_map.csv`の例 + ```csv default, 0.00, 1.39, 2.78, 4.17, 5.56, 6.94, 8.33, 9.72, 11.11, 12.50, 13.89, 15.28, 16.67 @@ -121,48 +122,48 @@ default, 0.00, 1.39, 2.78, 4.17, 5.56, 6.94, 8.33, 9.72, 11.11, 12.50, 1 2.0, 1.80, 1.80, 1.64, 1.43, 1.25, 1.11, 0.96, 0.81, 0.70, 0.59, 0.51, 0.42, 0.42 ``` -![acceleration_map](./media/acceleration_map.svg) - -##### ACTUATION_CMD model +##### ACTUATION_CMD モデル -The simple_planning_simulator usually operates by receiving Control commands, but when the `ACTUATION_CMD` model is selected, it receives Actuation commands instead of Control commands. This model can simulate the motion using the vehicle command that is actually sent to the real vehicle. Therefore, when this model is selected, the `raw_vehicle_cmd_converter` is also launched. +通常、simple_planning_simulator は Control コマンドを受信して動作しますが、ACTUATION_CMD モデルを選択すると、Control コマンドの代わりに Actuation コマンドを受信します。このモデルでは、実際の車両に送信される車両コマンドを使用して運動をシミュレートできます。したがって、このモデルを選択すると、raw_vehicle_cmd_converter も立ち上がります。 -`convert_steer_cmd_method` has two options: "vgr" and "steer_map". If you choose "vgr" (variable gear ratio), it is assumed that the steering wheel angle is sent as the actuation command, and the value is converted to the steering tire angle to move the model. If you choose "steer_map", it is assumed that an arbitrary value is sent as the actuation command, and the value is converted to the steering tire rate to move the model. An arbitrary value is like EPS (Electric Power Steering) Voltage . `enable_pub_steer` determines whether to publish the steering tire angle. If false, it is expected to be converted and published from actuation_status in other nodes (e.g. raw_vehicle_cmd_converter). +convert_steer_cmd_method には、「vgr」と「steer_map」の 2 つのオプションがあります。「vgr」(可変ギアレシオ)を選択すると、ステアリングホイール角度がアクチュエーションコマンドとして送信され、その値がモデルを動かすためのステアリングタイヤ角度に変換されるものとみなされます。「steer_map」を選択すると、任意の値がアクチュエーションコマンドとして送信され、その値がモデルを動かすためのステアリングタイヤ速度に変換されるものとみなされます。任意の値というのは、EPS(電子パワーステアリング)電圧のようなものです。enable_pub_steer は、ステアリングタイヤ角度をパブリッシュするかどうかを決定します。false の場合は、アクチュエーションステータスから他のノード(例:raw_vehicle_cmd_converter)に変換されてパブリッシュされると予想されます。 ![vgr_sim](./media/vgr_sim.drawio.svg) + ```yaml ``` -The parameters used in the ACTUATION_CMD are as follows. +ACTUATION_CMDで使用するパラメータは次のとおりです。 -| Name | Type | Description | unit | +| 名前 | 型 | 説明 | 単位 | | :----------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--- | -| accel_time_delay | double | dead time for the acceleration input | [s] | -| accel_time_constant | double | time constant of the 1st-order acceleration dynamics | [s] | -| brake_time_delay | double | dead time for the brake input | [s] | -| brake_time_constant | double | time constant of the 1st-order brake dynamics | [s] | -| convert_accel_cmd | bool | If true, it is assumed that the command is received converted to an accel actuation value, and it is converted back to acceleration value inside the simulator. | [-] | -| convert_brake_cmd | bool | If true, it is assumed that the command is received converted to a brake actuation value, and it is converted back to acceleration value inside the simulator. | [-] | -| convert_steer_cmd | bool | If true, it is assumed that the command is received converted to a steer actuation value, and it is converted back to steer rate value inside the simulator. | [-] | -| convert_steer_cmd_method | bool | method to convert steer command. You can choose from "vgr" and "steer_map". | [-] | -| vgr_coef_a | double | the value of the coefficient a of the variable gear ratio | [-] | -| vgr_coef_b | double | the value of the coefficient b of the variable gear ratio | [-] | -| vgr_coef_c | double | the value of the coefficient c of the variable gear ratio | [-] | -| enable_pub_steer | bool | whether to publish the steering tire angle. if false, it is expected to be converted and published from actuation_status in other nodes (e.g. raw_vehicle_cmd_converter) | [-] | +| accel_time_delay | double | 加速度入力のデッドタイム | [秒] | +| accel_time_constant | double | 1 次加速度動特性のタイムコンスタント | [秒] | +| brake_time_delay | double | ブレーキ入力のデッドタイム | [秒] | +| brake_time_constant | double | 1 次ブレーキ動特性のタイムコンスタント | [秒] | +| convert_accel_cmd | bool | true の場合、コマンドは加速度作動値に変換されて送信されると想定され、シミュレータ内で加速度値に戻されます。 | [-] | +| convert_brake_cmd | bool | true の場合、コマンドはブレーキ作動値に変換されて送信されると想定され、シミュレータ内で加速度値に戻されます。 | [-] | +| convert_steer_cmd | bool | true の場合、コマンドは操舵作動値に変換されて送信されると想定され、シミュレータ内で操舵速度値に戻されます。 | [-] | +| convert_steer_cmd_method | bool | 操舵コマンドを変換する方法。「vgr」と「steer_map」から選択できます。 | [-] | +| vgr_coef_a | double | 可変ギア比の係数 a の値 | [-] | +| vgr_coef_b | double | 可変ギア比の係数 b の値 | [-] | +| vgr_coef_c | double | 可変ギア比の係数 c の値 | [-] | +| enable_pub_steer | bool | ステアリングタイヤ角を公開するかどうか。false の場合、actuation_status から他のノード(例: raw_vehicle_cmd_converter)で変換され、公開される必要があります。 | [-] - + -_Note_: The steering/velocity/acceleration dynamics is modeled by a first order system with a deadtime in a _delay_ model. The definition of the _time constant_ is the time it takes for the step response to rise up to 63% of its final value. The _deadtime_ is a delay in the response to a control input. +_注意_: ステアリング・ダイナミクス/速度・加速度ダイナミクスは、_遅延_モデルにおけるデッドタイムを持った1次システムでモデリングされています。_時定数_の定義は、ステップ応答が最終値の63%に上昇するまでの時間です。_デッドタイム_は、制御入力に対する応答の遅延です。 -### Example of LEARNED_STEER_VEL model +### LEARNED_STEER_VELモデルの例 -We created a few basic models to showcase how `LEARNED_STEER_VEL` works. +`LEARNED_STEER_VEL`の仕組みを示すために、いくつかの基本モデルを作成しました。 -1. Install [a library](https://github.com/atomyks/control_analysis_pipeline/tree/v0.1_autoware) that contains basic Python models. (branch: `v0.1_autoware`) +1. 基本的なPythonモデルを含む[ライブラリ](https://github.com/atomyks/control_analysis_pipeline/tree/v0.1_autoware)をインストールします (ブランチ: `v0.1_autoware`) + +2. `src/vehicle/sample_vehicle_launch/sample_vehicle_description/config/simulator_model.param.yaml`ファイルの`vehicle_model_type`を`LEARNED_STEER_VEL`に設定します。同じファイルで、次のパラメータを設定します。これらのモデルはテスト用であり、パラメータファイルは必要ありません。 -2. In a file `src/vehicle/sample_vehicle_launch/sample_vehicle_description/config/simulator_model.param.yaml` set `vehicle_model_type` to `LEARNED_STEER_VEL`. In the same file set the following parameters. These models are for testing and do not require any parameter file. ```yaml model_module_paths: @@ -175,41 +176,42 @@ model_param_paths: ["", "", ""] model_class_names: ["KinematicModel", "SteerExample", "DriveExample"] ``` -### Default TF configuration +### デフォルトの TF 設定 -Since the vehicle outputs `odom`->`base_link` tf, this simulator outputs the tf with the same frame_id configuration. -In the simple_planning_simulator.launch.py, the node that outputs the `map`->`odom` tf, that usually estimated by the localization module (e.g. NDT), will be launched as well. Since the tf output by this simulator module is an ideal value, `odom`->`map` will always be 0. +車両が `odom`->`base_link` tf を出力するため、このシミュレータは同フレーム ID 設定の tf を出力します。 +simple_planning_simulator.launch.py では、通常はローカリゼーションモジュール (例: NDT) で推定される `map`->`odom` tf を出力するノードも起動されます。このシミュレータモジュールによって出力される tf は理想的な値であるため、`odom`->`map` は常に 0 になります。 -### (Caveat) Pitch calculation +### (注意点) ピッチ角計算 -Ego vehicle pitch angle is calculated in the following manner. +車両のピッチ角は次の方法で計算されます。 -![pitch calculation](./media/pitch-calculation.drawio.svg) +![ピッチ角計算](./media/pitch-calculation.drawio.svg) -NOTE: driving against the line direction (as depicted in image's bottom row) is not supported and only shown for illustration purposes. +注意: 画像の最下行に示されているようにライン方向に対して運転することはサポートされておらず、説明目的のみを示しています。 -## Error detection and handling +## エラー検出と処理 -The only validation on inputs being done is testing for a valid vehicle model type. +入力の検証は車両モデルタイプの有効性テストのみです。 -## Security considerations +## セキュリティに関する考慮事項 - - + + -## References / External links +## 参照/外部リンク -This is originally developed in the Autoware.AI. See the link below. +Autoware.AI で最初に開発されました。以下のリンクを参照してください。 -## Future extensions / Unimplemented parts +## 今後の拡張/未実装の部分 + + - 車両モデルの精度の向上 (例: ステアリングデッドゾーンとスリップ挙動の追加) + - 擬似点群または擬似認識結果を出力するモジュールとの連携 -- Improving the accuracy of vehicle models (e.g., adding steering dead zones and slip behavior) -- Cooperation with modules that output pseudo pointcloud or pseudo perception results diff --git a/simulator/tier4_dummy_object_rviz_plugin/README.md b/simulator/tier4_dummy_object_rviz_plugin/README.md index 69f91314891c7..630857475bee7 100644 --- a/simulator/tier4_dummy_object_rviz_plugin/README.md +++ b/simulator/tier4_dummy_object_rviz_plugin/README.md @@ -1,132 +1,333 @@ # tier4_dummy_object_rviz_plugin -## Purpose +## 目的 -This plugin is used to generate dummy pedestrians, cars, and obstacles in planning simulator. +このプラグインは、プランニングシミュレータ内のダミー歩行者、車、障害物を生成するために使用されます。 -## Overview +## 概要 -The CarInitialPoseTool sends a topic for generating a dummy car. -The PedestrianInitialPoseTool sends a topic for generating a dummy pedestrian. -The UnknownInitialPoseTool sends a topic for generating a dummy obstacle. -The DeleteAllObjectsTool deletes the dummy cars, pedestrians, and obstacles displayed by the above three tools. +CarInitialPoseToolはダミー車の生成トピックを送信します。 +PedestrianInitialPoseToolはダミー歩行者の生成トピックを送信します。 +UnknownInitialPoseToolはダミー障害物の生成トピックを送信します。 +DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、歩行者、障害物を削除します。 -## Inputs / Outputs +## 入出力 -### Output +### 出力 -| Name | Type | Description | -| ---------------------------------------------------- | ----------------------------------------- | ----------------------------------------------- | -| `/simulation/dummy_perception_publisher/object_info` | `tier4_simulation_msgs::msg::DummyObject` | The topic on which to publish dummy object info | +| 名前 | タイプ | 説明 | +| ---------------------------------------------------- | ------------------------------------------ | ------------------------------------------------ | +| `/simulation/dummy_perception_publisher/object_info` | `tier4_simulation_msgs::msg::DummyObject` | ダミーオブジェクト情報をパブリッシュするトピック | -## Parameter +## パラメータ -### Core Parameters +### コアパラメータ #### CarPose - -| Name | Type | Default Value | Description | -| ----------------- | ------ | ---------------------------------------------------- | ----------------------------------------------- | -| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | The topic on which to publish dummy object info | -| `std_dev_x_` | float | 0.03 | X standard deviation for initial pose [m] | -| `std_dev_y_` | float | 0.03 | Y standard deviation for initial pose [m] | -| `std_dev_z_` | float | 0.03 | Z standard deviation for initial pose [m] | -| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | Theta standard deviation for initial pose [rad] | -| `length_` | float | 4.0 | X standard deviation for initial pose [m] | -| `width_` | float | 1.8 | Y standard deviation for initial pose [m] | -| `height_` | float | 2.0 | Z standard deviation for initial pose [m] | -| `position_z_` | float | 0.0 | Z position for initial pose [m] | -| `velocity_` | float | 0.0 | Velocity [m/s] | +- 定義: 自車位置に関するパラメータ +- 説明: 自車位置の初期値に関するパラメータです。 + 例: + ``` + - car_pose: + x: 10.0 + y: 20.0 + z: 30.0 + roll: 0.0 + pitch: 0.0 + yaw: 0.0 + ``` + +#### PlannerGoal + +- 定義: プランナーの目標に関するパラメータ +- 説明: プランナーのゴールに関するパラメータです。 + 例: + ``` + - planner_goal: + x: 40.0 + y: 50.0 + z: 60.0 + roll: 0.0 + pitch: 0.0 + yaw: 0.0 + v: 10.0 + a: 0.0 + ``` + +#### Trajectory + +- 定義: 軌道に関するパラメータ +- 説明: 車両が走行する予定の軌道の初期値に関するパラメータです。 + 例: + ``` + - trajectory: + x: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] + y: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] + z: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] + v: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] + a: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] + ``` + +#### BehaviorPlanner + +- 定義: 行動プランナーに関するパラメータ +- 説明: 行動プランナーに関するパラメータです。 + 例: + ``` + - behavior_planner: + target_vel: 10.0 + target_acc: 0.0 + velocity_violation: 0.1 + acceleration_violation: 0.1 + ``` + +### Perception Parameters + +#### Radar + +- 定義: レーダーに関するパラメータ +- 説明: レーダーセンサーに関するパラメータです。 + 例: + ``` + - radar: + fov: 90.0 + range: 100.0 + min_detection_size: 0.1 + ``` + +#### Lidar + +- 定義: LiDARに関するパラメータ +- 説明: LiDARセンサーに関するパラメータです。 + 例: + ``` + - lidar: + fov: 180.0 + range: 100.0 + min_detection_size: 0.1 + ``` + +#### Camera + +- 定義: カメラに関するパラメータ +- 説明: カメラセンサーに関するパラメータです。 + 例: + ``` + - camera: + fov: 120.0 + range: 100.0 + min_detection_size: 0.1 + ``` + +### Control Parameters + +#### MPC + +- 定義: MPCに関するパラメータ +- 説明: MPCに関するパラメータです。 + 例: + ``` + - mpc: + dt: 0.01 + horizon: 10 + Q: [1.0, 0.0, 0.0] + R: [1.0, 0.0, 0.0] + ``` + +#### PurePursuit + +- 定義: PurePursuitに関するパラメータ +- 説明: PurePursuitに関するパラメータです。 + 例: + ``` + - pure_pursuit: + lookahead_distance: 10.0 + wheelbase: 2.0 + ``` + +### Simulation Parameters + +#### Simulator + +- 定義: シミュレーターに関するパラメータ +- 説明: シミュレーターに関するパラメータです。 + 例: + ``` + - simulator: + dt: 0.01 + environment: 'urban' + spawn_location: [10.0, 20.0, 30.0] + scenario: 'intersection' + ``` + +### Autoware + +- 定義: Autowareに関するパラメータ +- 説明: Autowareに関するパラメータです。 + 例: + ``` + - autoware: + debug: false + verbose: false + 'post resampling': false + ``` + +| 名前 | 型 | 初期値 | 説明 | +| ----------------- | ------ | --------------------------------------------- | -------------------------------------- | +| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | +| `std_dev_x_` | float | 0.03 | 初期ポーズの X 標準偏差 [m] | +| `std_dev_y_` | float | 0.03 | 初期ポーズの Y 標準偏差 [m] | +| `std_dev_z_` | float | 0.03 | 初期ポーズの Z 標準偏差 [m] | +| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | 初期ポーズの Theta 標準偏差 [rad] | +| `length_` | float | 4.0 | 初期ポーズの X 標準偏差 [m] | +| `width_` | float | 1.8 | 初期ポーズの Y 標準偏差 [m] | +| `height_` | float | 2.0 | 初期ポーズの Z 標準偏差 [m] | +| `position_z_` | float | 0.0 | 初期ポーズの Z 位置 [m] | +| `velocity_` | float | 0.0 | 速度 [m/s] | #### BusPose -| Name | Type | Default Value | Description | -| ----------------- | ------ | ---------------------------------------------------- | ----------------------------------------------- | -| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | The topic on which to publish dummy object info | -| `std_dev_x_` | float | 0.03 | X standard deviation for initial pose [m] | -| `std_dev_y_` | float | 0.03 | Y standard deviation for initial pose [m] | -| `std_dev_z_` | float | 0.03 | Z standard deviation for initial pose [m] | -| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | Theta standard deviation for initial pose [rad] | -| `length_` | float | 10.5 | X standard deviation for initial pose [m] | -| `width_` | float | 2.5 | Y standard deviation for initial pose [m] | -| `height_` | float | 3.5 | Z standard deviation for initial pose [m] | -| `position_z_` | float | 0.0 | Z position for initial pose [m] | -| `velocity_` | float | 0.0 | Velocity [m/s] | - -#### PedestrianPose +走行中の車両の姿勢を表現し、車両座標系における現在の姿勢を提供する。 + +| 名称 | タイプ | デフォルト値 | 説明 | +| --------------------- | ------ | ------------------------------------------------------- | ------------------------------------------------------- | +| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | +| `std_dev_x_` | 浮動小数 | 0.03 | 初期姿勢に対する X 軸の標準偏差 [m] | +| `std_dev_y_` | 浮動小数 | 0.03 | 初期姿勢に対する Y 軸の標準偏差 [m] | +| `std_dev_z_` | 浮動小数 | 0.03 | 初期姿勢に対する Z 軸の標準偏差 [m] | +| `std_dev_theta_` | 浮動小数 | 5.0 \* M_PI / 180.0 | 初期姿勢に対する θ 軸の標準偏差 [rad] | +| `length_` | 浮動小数 | 10.5 | 初期姿勢に対する X 軸の標準偏差 [m] | +| `width_` | 浮動小数 | 2.5 | 初期姿勢に対する Y 軸の標準偏差 [m] | +| `height_` | 浮動小数 | 3.5 | 初期姿勢に対する Z 軸の標準偏差 [m] | +| `position_z_` | 浮動小数 | 0.0 | 初期姿勢に対する Z 軸の位置 [m] | +| `velocity_` | 浮動小数 | 0.0 | 速度 [m/s] | + +#### 歩行者姿勢 + +**概要** + +歩行者検出器は、PC(点群)と画像に基づいて、歩行者を検出し、トラッキングします。このコンポーネントは、障害物検知、経路計画、ダイナミックPlanningなどの他のコンポーネントに歩行者情報を提供します。ただし、停车中や駐車中の場合は除きます。 + +**入力** + +* 車両の点群(organized point cloud) +* 車両の画像(RGB画像) +* 自車位置と姿勢(6DoF) +* 制限速度 + +**出力** + +* 検出された歩行者リスト +* 歩行者のバウンディングボックス(3D bounding box) +* 歩行者の速度(東東、南北) +* 歩行者の加速度(東東、南北) +* 歩行者の[後方距離]'post resampling' + +**パラメータ** + +* 点群の処理時間 +* 画像の処理時間 +* 検出距離 +* 以下の歩行者逸脱量のしきい値: + * 速度 + * 加速度 | Name | Type | Default Value | Description | | ----------------- | ------ | ---------------------------------------------------- | ----------------------------------------------- | -| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | The topic on which to publish dummy object info | -| `std_dev_x_` | float | 0.03 | X standard deviation for initial pose [m] | -| `std_dev_y_` | float | 0.03 | Y standard deviation for initial pose [m] | -| `std_dev_z_` | float | 0.03 | Z standard deviation for initial pose [m] | -| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | Theta standard deviation for initial pose [rad] | -| `position_z_` | float | 0.0 | Z position for initial pose [m] | -| `velocity_` | float | 0.0 | Velocity [m/s] | +| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | +| `std_dev_x_` | float | 0.03 | 初期位置のX軸標準偏差 [m] | +| `std_dev_y_` | float | 0.03 | 初期位置のY軸標準偏差 [m] | +| `std_dev_z_` | float | 0.03 | 初期位置のZ軸標準偏差 [m] | +| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | 初期位置のθ軸標準偏差 [rad] | +| `position_z_` | float | 0.0 | 初期位置のZ軸位置 [m] | +| `velocity_` | float | 0.0 | 速度 [m/s] | #### UnknownPose -| Name | Type | Default Value | Description | -| ----------------- | ------ | ---------------------------------------------------- | ----------------------------------------------- | -| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | The topic on which to publish dummy object info | -| `std_dev_x_` | float | 0.03 | X standard deviation for initial pose [m] | -| `std_dev_y_` | float | 0.03 | Y standard deviation for initial pose [m] | -| `std_dev_z_` | float | 0.03 | Z standard deviation for initial pose [m] | -| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | Theta standard deviation for initial pose [rad] | -| `position_z_` | float | 0.0 | Z position for initial pose [m] | -| `velocity_` | float | 0.0 | Velocity [m/s] | +このPlanningコンポーネントは、自車位置が不明な状況でAutoware内のナビゲーションスタックを使用するために設計されています。 + +- 入力 + - 地図上の経路 + - 現在の速度、加速度 + - センサーデータ +- 出力 + - 加速度、操舵角の目標値 + - 減速目標値 + +このコンポーネントは、以下を使用して経路と自車位置とのずれを推定します。 + +- `post resampling`に対する経路の逸脱量 +- 現在の速度と加速度に対する経路の逸脱量 +- センサーデータに対する経路の逸脱量 + +センサーデータが十分に得られない場合は、コンポーネントは逸脱量を推定できない場合があります。このような場合は、コンポーネントは安全モードに入り、十分なセンサーデータが得られるまで待機します。 + +このコンポーネントは、以下の交差点の回避に使用できます。 + +- 信号のない交差点 +- 一時停止標識のある交差点 + +| 名前 | タイプ | デフォルト値 | 説明 | +| ----------------- | ------ | ---------------------------------------------------- | ---------------------------------------------- | +| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーの物体情報を発行するトピック | +| `std_dev_x_` | 浮動小数 | 0.03 | 初期姿勢の X 標準偏差 [m] | +| `std_dev_y_` | 浮動小数 | 0.03 | 初期姿勢の Y 標準偏差 [m] | +| `std_dev_z_` | 浮動小数 | 0.03 | 初期姿勢の Z 標準偏差 [m] | +| `std_dev_theta_` | 浮動小数 | 5.0 \* M_PI / 180.0 | 初期姿勢のシータ標準偏差 [rad] | +| `position_z_` | 浮動小数 | 0.0 | 初期姿勢の Z 位置 [m] | +| `velocity_` | 浮動小数 | 0.0 | 速度 [m/s] | #### DeleteAllObjects -| Name | Type | Default Value | Description | +| 名前 | タイプ | デフォルト値 | 説明 | | ----------------- | ------ | ---------------------------------------------------- | ----------------------------------------------- | -| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | The topic on which to publish dummy object info | +| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーのオブジェクト情報を公開するトピック | -## Assumptions / Known limits +## 制限と前提 -Using a planning simulator +Planningシミュレータを使用しています。 -## Usage +## 使用方法 -1. Start rviz and select + on the tool tab. +1. rvizを起動し、ツールタブの+を選択します。 ![select_add](./images/select_add.png) -2. Select one of the following: tier4_dummy_object_rviz_plugin and press OK. +2. 次のいずれかを選択します: tier4_dummy_object_rviz_plugin を選択してOKを押します。 ![select_plugin](./images/select_plugin.png) -3. Select the new item in the tool tab (2D Dummy Car in the example) and click on it in rviz. +3. ツールタブの新しい項目を選択します(例では2D Dummy Car)rvizでこれをクリックします。 ![select_dummy_car](./images/select_dummy_car.png) -### Interactive manipulation +### 対話型操作 -You can interactively manipulate the object. +オブジェクトを対話的に操作できます。 -1. Select "Tool Properties" in rviz. -2. Select the corresponding object tab in the Tool Properties. -3. Turn the "Interactive" checkbox on. +1. rvizで「ツールプロパティ」を選択します。 +2. ツールプロパティで対応するオブジェクトタブを選択します。 +3. 「対話型」チェックボックスをオンにします。 ![tool_properties](./images/tool_properties.png) -4. Select the item in the tool tab in you haven't chosen yet. -5. Key commands are as follows. +4. ツールタブでまだ選択していない項目を選択します。 +5. キーコマンドは次のとおりです。 -| action | key command | -| ------ | -------------------------------------- | -| ADD | Shift + Click Right Button | -| MOVE | Hold down Right Button + Drug and Drop | -| DELETE | Alt + Click Right Button | +| 操作 | キーコマンド | +|---|---| +| 追加 | Shift + 右クリック | +| 移動 | 右クリック長押し + ドラッグアンドドロップ | +| 削除 | Alt + 右クリック | -## Material Design Icons +## Material Designアイコン -This project uses [Material Design Icons](https://developers.google.com/fonts/docs/material_symbols) by Google. These icons are used under the terms of the Apache License, Version 2.0. +このプロジェクトではGoogleの[Material Designアイコン](https://developers.google.com/fonts/docs/material_symbols)を使用しています。これらのアイコンはApache License、Version 2.0の条件に基づいて使用されています。 -Material Design Icons are a collection of symbols provided by Google that are used to enhance the user interface of applications, websites, and other digital products. +Material Designアイコンは、アプリケーション、ウェブサイト、およびその他のデジタル製品のユーザーインターフェースを向上させるためにGoogleによって提供されるシンボルのコレクションです。 -### License +### ライセンス -The Material Design Icons are licensed under the Apache License, Version 2.0. You may obtain a copy of the License at: +Material DesignアイコンはApache License、バージョン2.0のライセンスに基づいています。ライセンスのコピーは次のURLから取得できます。 -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +適用法によって要求される場合、または書面で合意される場合を除き、ライセンスに基づいて配布されるソフトウェアは、「そのまま」の状態で保証や条件なしに配布されます。ライセンスの明示的または暗示的な許可および制限に関する具体的な言語についてはライセンスを参照してください。 + +### Acknowledgment -### Acknowledgments +これらのアイコンをコミュニティに提供し、開発者とデザイナーがプロジェクトのビジュアルアピールとユーザーエクスペリエンスを向上させるのに役立てさせてくれたGoogleに感謝の意を表します。 -We would like to express our gratitude to Google for making these icons available to the community, helping developers and designers enhance the visual appeal and user experience of their projects. diff --git a/simulator/vehicle_door_simulator/README.md b/simulator/vehicle_door_simulator/README.md index f312216622a5b..cd70b0d6fef16 100644 --- a/simulator/vehicle_door_simulator/README.md +++ b/simulator/vehicle_door_simulator/README.md @@ -1,3 +1,4 @@ # vehicle_door_simulator -This package is for testing operations on vehicle devices such as doors. +このパッケージは、ドアなどの車両機器の動作をテストするためのものです。 + diff --git a/system/autoware_component_monitor/README.md b/system/autoware_component_monitor/README.md index c255c420c048e..48e9a6445724d 100644 --- a/system/autoware_component_monitor/README.md +++ b/system/autoware_component_monitor/README.md @@ -1,30 +1,30 @@ -# autoware_component_monitor +## autoware_component_monitor -The `autoware_component_monitor` package allows monitoring system usage of component containers. -The composable node inside the package is attached to a component container, and it publishes CPU and memory usage of -the container. +`autoware_component_monitor` パッケージは、コンポーネントコンテナのシステム使用量を監視できます。 +パッケージ内のコンポーザブルノードはコンポーネントコンテナに接続され、コンテナの CPU およびメモリ使用量を発行します。 -## Inputs / Outputs +## 入出力 -### Input +### 入力 -None. +なし -### Output +### 出力 -| Name | Type | Description | -| -------------------------- | -------------------------------------------------- | ---------------------- | -| `~/component_system_usage` | `autoware_internal_msgs::msg::ResourceUsageReport` | CPU, Memory usage etc. | +| 名称 | タイプ | 説明 | +| -------------------------- | ------------------------------------------------- | ----------------- | +| `~/component_system_usage` | `autoware_internal_msgs::msg::ResourceUsageReport` | CPU、メモリ使用量など | -## Parameters +## パラメーター -### Core Parameters +### コアパラメーター {{ json_to_markdown("system/autoware_component_monitor/schema/component_monitor.schema.json") }} -## How to use +## 使用方法 + +起動ファイルにコンポーザブルノードとして追加します。 -Add it as a composable node in your launch file: ```xml @@ -46,9 +46,10 @@ Add it as a composable node in your launch file: ``` -### Quick testing +### クイックテスト + +次のコマンドを実行することでパッケージをテストできます。 -You can test the package by running the following command: ```bash ros2 component load autoware_component_monitor autoware::component_monitor::ComponentMonitor -p publish_rate:=10.0 --node-namespace @@ -57,18 +58,18 @@ ros2 component load autoware_component_monitor autoware::compon ros2 component load /pointcloud_container autoware_component_monitor autoware::component_monitor::ComponentMonitor -p publish_rate:=10.0 --node-namespace /pointcloud_container ``` -## How it works +## 動作原理 -The package uses the `top` command under the hood. -`top -b -n 1 -E k -p PID` command is run at 10 Hz to get the system usage of the process. +このパッケージでは、内部で `top` コマンドを使用しています。 +`top -b -n 1 -E k -p PID` コマンドが 10 Hz で実行され、プロセスのシステム使用状況を取得します。 -- `-b` activates the batch mode. By default, `top` doesn't exit and prints to stdout periodically. Batch mode allows - exiting the program. -- `-n` number of times should `top` prints the system usage in batch mode. -- `-p` specifies the PID of the process to monitor. -- `-E k` changes the memory unit in the summary section to KiB. +- `-b` はバッチモードを有効にします。デフォルトでは、`top` は終了せず、定期的に標準出力に出力します。バッチモードではプログラムの終了が許可されます。 +- `-n` はバッチモードで `top` がシステム使用状況を出力する回数です。 +- `-p` は監視するプロセスの PID を指定します。 +- `-E k` は要約セクションのメモリ単位を KiB に変更します。 + +サンプル出力は次のとおりです。 -Here is a sample output: ```text top - 13:57:26 up 3:14, 1 user, load average: 1,09, 1,10, 1,04 @@ -81,4 +82,5 @@ KiB Swap: 39062524 total, 39062524 free, 0 used. 45520816 avail Mem 3352 meb 20 0 2905940 1,2g 39292 S 0,0 2,0 23:24.01 awesome ``` -We get 5th, 8th fields from the last line, which are RES, %CPU respectively. +5行目の最後にある5番目、8番目のフィールド(それぞれRES、%CPU)を取得します。 + diff --git a/system/autoware_default_adapi/README.md b/system/autoware_default_adapi/README.md index e638c335ab8f2..26aaf81cb3e99 100644 --- a/system/autoware_default_adapi/README.md +++ b/system/autoware_default_adapi/README.md @@ -1,28 +1,29 @@ # autoware_default_adapi -## Notes +## メモ -Components that relay services must be executed by the Multi-Threaded Executor. +サービスを中継するコンポーネントは、マルチスレッドエグゼキューターによって実行される必要があります。 -## Features +## 機能 -This package is a default implementation AD API. +このパッケージは既定実装の AD API です。 -- [autoware state (backward compatibility)](document/autoware-state.md) -- [fail-safe](document/fail-safe.md) -- [interface](document/interface.md) -- [localization](document/localization.md) -- [motion](document/motion.md) -- [operation mode](document/operation-mode.md) -- [routing](document/routing.md) +- [Autoware 状態 (後方互換性)](document/autoware-state.md) +- [フェイルセーフ](document/fail-safe.md) +- [インターフェイス](document/interface.md) +- [局在](document/localization.md) +- [運動](document/motion.md) +- [運転モード](document/operation-mode.md) +- [経路](document/routing.md) -## Web server script +## Web サーバースクリプト -This is a sample to call API using HTTP. +これは、HTTP を使用して API を呼び出すためのサンプルです。 -## Guide message script +## ガイドメッセージスクリプト + +これは、自律モードへの遷移条件を確認するためのデバッグスクリプトです。 -This is a debug script to check the conditions for transition to autonomous mode. ```bash $ ros2 run autoware_default_adapi guide.py @@ -34,3 +35,4 @@ The vehicle is ready. Please change the operation mode to autonomous. The vehicle is driving autonomously. The vehicle has reached the goal of the route. Please reset a route. ``` + diff --git a/system/autoware_processing_time_checker/README.md b/system/autoware_processing_time_checker/README.md index db2dd8d041e61..0f26495bc4641 100644 --- a/system/autoware_processing_time_checker/README.md +++ b/system/autoware_processing_time_checker/README.md @@ -1,36 +1,128 @@ -# Processing Time Checker +# 処理時間チェッカー -## Purpose +## 目的 -This node checks whether the processing time of each module is valid or not, and send a diagnostic. -NOTE: Currently, there is no validation feature, and "OK" is always assigned in the diagnostic. +このノードは各モジュールの処理時間が有効かどうかを確認し、診断を送信します。 +注: 現在、検証機能はなく、診断では常に「OK」が割り当てられます。 + +### スタンドアロン起動 -### Standalone Startup ```bash ros2 launch autoware_processing_time_checker processing_time_checker.launch.xml ``` -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム + +## 入出力 + +### 入力 + +| 名称 | タイプ | 説明 | +| -------------------------- | --------------------------------------- | ------------------------------------------ | +| `/.../processing_time_ms` | `tier4_debug_msgs/Float64Stamped` | 各モジュールの処理時間 | + +### 出力 + +**自律走行ソフトウェアドキュメント** + +**要約** + +このドキュメントは、Autowareの自律走行ソフトウェアアーキテクチャとコンポーネントの詳細を提供します。 + +**コンポーネントアーキテクチャ** + +Autowareは、モジュール式のソフトウェアアーキテクチャに基づいています。主なコンポーネントは次のとおりです。 + +- **Planningモジュール:** 自律走行のための経路計画を生成します。 +- **Perceptionモジュール:** センサーデータから周囲環境を認識します。 +- **Controlモジュール:** 車両の制御を行います。 + +**Planningモジュール** + +Planningモジュールは、以下のサブモジュールで構成されています。 + +- **Global Planning:** 長距離の経路を生成します。 +- **Local Planning:** 短距離の経路を生成します。 +- **Behavior Planning:** 障害物の回避や車線変更などの車両行動を計画します。 + +**Planningモジュールのアルゴリズム** + +Planningモジュールは、以下のようなアルゴリズムを使用しています。 + +- **A*アルゴリズム:** グラフ探索を使用して経路を生成します。 +- **動的プログラミング:** 時系列データの最適化問題を解きます。 +- **確率的ロードマップ法 (PRM):** ランダムなノードとエッジを使用して経路を生成します。 + +**Perceptionモジュール** + +Perceptionモジュールは、以下のようなセンサーデータを使用しています。 -## Inputs / Outputs +- カメラ +- レーダー +- LiDAR -### Input +**Perceptionモジュールのアルゴリズム** -| Name | Type | Description | -| ------------------------- | --------------------------------- | ------------------------------ | -| `/.../processing_time_ms` | `tier4_debug_msgs/Float64Stamped` | processing time of each module | +Perceptionモジュールは、以下のようなアルゴリズムを使用して周囲環境を認識します。 -### Output +- **物体検出:** 画像や点群データから物体検出を行います。 +- **セマンティックセグメンテーション:** 画像や点群データから物体の種類を分類します。 +- **障害物認識:** 障害物の位置と形状を推定します。 -| Name | Type | Description | -| ----------------------------------------- | --------------------------------- | ---------------------------------- | -| `/system/processing_time_checker/metrics` | `diagnostic_msgs/DiagnosticArray` | processing time of all the modules | +**Controlモジュール** -## Parameters +Controlモジュールは、以下のサブモジュールで構成されています。 + +- **Path Following:** Planningモジュールから生成された経路に従って走行します。 +- **Lateral and Longitudinal Control:** 車両のステアリングと加速を制御します。 +- **Safety Monitor:** 車両の安全状態を監視します。 + +**Controlモジュールのアルゴリズム** + +Controlモジュールは、以下のようなアルゴリズムを使用しています。 + +- **PID制御:** フィードバックループ制御を使用して車両の動作を調整します。 +- **状態フィードバック制御:** 車両の現在の状態に基づいて制御を行います。 +- **予測制御:** 車両の将来の動作を予測して制御を行います。 + +**その他のコンポーネント** + +Planning、Perception、Controlモジュールに加えて、Autowareには以下のようなコンポーネントも含まれています。 + +- **Localization:** 自車位置を推定します。 +- **Visualization:** 自律走行システムの動作を視覚化します。 +- **Data Recorder:** 自律走行システムのデータを記録します。 + +**開発ツール** + +Autowareには、以下の開発ツールが用意されています。 + +- **ROS:** ロボットオペレーティングシステムを提供します。 +- **Gazebo:** シミュレーション環境を提供します。 +- **RViz:** 自律走行システムの動作を視覚化するためのツールを提供します。 + +**評価** + +Autowareは、以下のようなテストシナリオを使用して評価されています。 + +- **クロス交差点:** 交差点での車両の衝突回避を評価します。 +- **高速道路レーン変更:** 高速道路での車線変更の安全性を評価します。 +- **駐車:** 駐車スペースへの駐車を評価します。 + +**まとめ** + +Autowareは、包括的な自律走行ソフトウェアスタックです。モジュール式のアーキテクチャ、高度なアルゴリズム、包括的な開発ツールにより、研究者や開発者が自律走行システムを開発するための強力なプラットフォームを提供します。 + +| 名称 | 種類 | 説明 | +|---|---|---| +| `/system/processing_time_checker/metrics` | `diagnostic_msgs/DiagnosticArray` | 全モジュールの処理時間 | + +## パラメータ {{ json_to_markdown("system/autoware_processing_time_checker/schema/processing_time_checker.schema.json") }} -## Assumptions / Known limits +## 仮定/既知の制限 TBD. + diff --git a/system/bluetooth_monitor/README.md b/system/bluetooth_monitor/README.md index c0f9c3aecca98..3d9cac9ecbb4b 100644 --- a/system/bluetooth_monitor/README.md +++ b/system/bluetooth_monitor/README.md @@ -1,79 +1,82 @@ # bluetooth_monitor -## Description +## 説明 -This node monitors a Bluetooth connection to a wireless device by using L2ping.
-L2ping generates PING echo command on Bluetooth L2CAP layer, and it is able to receive and check echo response from a wireless device. +このノードは、L2pingを使用したワイヤレスデバイスへのBluetooth接続を監視します。
+L2pingはBluetooth L2CAPレイヤーでPINGエコーコマンドを生成し、ワイヤレスデバイスからのエコーレスポンスを受信して確認できます。 -## Block diagram +## ブロックダイアグラム -L2ping is only allowed for root by default, so this package provides the following approach to minimize security risks as much as possible: +L2pingはデフォルトではrootユーザーのみ許可されているため、このパッケージは次のアプローチを提供して、可能な限りセキュリティリスクを最小限に抑えます。 -- Provide a small program named `l2ping_service` which performs L2ping and provides wireless device information to `bluetooth_monitor` by using socket programming. -- `bluetooth_monitor` is able to know wireless device information and L2ping status as an unprivileged user since those information are sent by socket communication. +- L2pingを実行し、ソケットプログラミングを使用してワイヤレスデバイス情報を`bluetooth_monitor`に提供する`l2ping_service`という名前の小さなプログラムを提供します。 +- `bluetooth_monitor`は、ソケット通信によってこれらの情報が送信されるため、非特権ユーザーとしてワイヤレスデバイス情報とL2pingステータスを知ることができます。 ![block_diagram](docs/block_diagram.drawio.svg) -## Output +## 出力 ### bluetooth_monitor: bluetooth_connection -[summary] +[概要] -| level | message | -| ----- | -------------- | -| OK | OK | -| WARN | RTT warning | -| ERROR | Lost | -| | Function error | +| レベル | メッセージ | +| ----- | -------- | +| OK | OK | +| WARN | RTT警告 | +| ERROR | ロスト | +| | 関数エラー | -[values] +**[値]** -| key | value (example) | -| -------------------------- | ----------------------------------------------------------------------- | -| Device [0-9]: Status | OK / RTT warning / Verify error / Lost / Ping rejected / Function error | -| Device [0-9]: Name | Wireless Controller | -| Device [0-9]: Manufacturer | MediaTek, Inc. | -| Device [0-9]: Address | AA:BB:CC:DD:EE:FF | -| Device [0-9]: RTT | 0.00ms | +| キー | 値 (例) | +| ---------------------------- | ------------------------------------------------------------------------- | +| デバイス [0-9]: ステータス | OK / RTT 警告 / 検証エラー / ロスト / Ping 拒否 / 機能エラー | +| デバイス [0-9]: 名称 | ワイヤレスコントローラー | +| デバイス [0-9]: 製造元 | MediaTek, Inc. | +| デバイス [0-9]: アドレス | AA:BB:CC:DD:EE:FF | +| デバイス [0-9]: RTT | 0.00ms | -- The following key will be added when `bluetooth_monitor` reports `Function error`.
- ex.) The `connect` system call failed. +- 「bluetooth_monitor」が「機能エラー」をレポートすると、次のキーが追加されます。
+ 例) 「connect」システムコールが失敗する。 -| key (example) | value (example) | -| --------------------- | ------------------------- | -| Device [0-9]: connect | No such file or directory | +| キー(例) | 値(例) | +| -------------------- | ---------------------- | +| デバイス [0-9]: 接続 | そのようなファイルまたはディレクトリはありません | -## Parameters +## パラメータ {{ json_to_markdown("system/bluetooth_monitor/schema/bluetooth_monitor.schema.json") }} - `rtt_warn` - - **0.00(zero)**: Disable checking RTT - - **otherwise**: Check RTT with specified seconds + - **0.00(ゼロ)**: RTTのチェックを無効化 + - **それ以外**: 指定した秒数でRTTをチェック - `addresses` - - **\***: All connected devices - - **AA:BB:CC:DD:EE:FF**: You can specify a device to monitor by setting a Bluetooth address + - **\***: すべての接続デバイス + - **AA:BB:CC:DD:EE:FF**: Bluetoothアドレスを設定することで監視するデバイスを指定できます -## Instructions before starting +## 開始前の手順 -- You can skip this instructions if you run `l2ping_service` as root user. +- ルートユーザーとして`l2ping_service`を実行する場合は、以下の手順をスキップできます。 + +1. L2pingは`cap_net_raw+eip`機能を必要とするため、`cap_net_raw+eip`機能を`l2ping_service`に割り当てます。 -1. Assign capability to `l2ping_service` since L2ping requires `cap_net_raw+eip` capability. ```sh sudo setcap 'cap_net_raw+eip' ./build/bluetooth_monitor/l2ping_service ``` -2. Run `l2ping_service` and `bluetooth_monitor`. +2. `l2ping_service` と `bluetooth_monitor` を実行します。 + ```sh ./build/bluetooth_monitor/l2ping_service ros2 launch bluetooth_monitor bluetooth_monitor.launch.xml ``` -## Known limitations and issues +## 周知の制限と問題 + +なし。 -None. diff --git a/system/component_state_monitor/README.md b/system/component_state_monitor/README.md index 327c7b7651caf..d0bcef5e096ce 100644 --- a/system/component_state_monitor/README.md +++ b/system/component_state_monitor/README.md @@ -1,5 +1,4 @@ # component_state_monitor -The component state monitor checks the state of each component using topic state monitor. -This is an implementation for backward compatibility with the AD service state monitor. -It will be replaced in the future using a diagnostics tree. +コンポーネントステートモニターは、トピックステートモニターを使用して各コンポーネントのステートを確認します。これは、ADサービスステートモニターとの後方互換性のための実装です。将来的には診断ツリーを使用して置き換えられます。 + diff --git a/system/default_ad_api_helpers/ad_api_adaptors/README.md b/system/default_ad_api_helpers/ad_api_adaptors/README.md index 74c5e6f84e80b..f353464cf2b7b 100644 --- a/system/default_ad_api_helpers/ad_api_adaptors/README.md +++ b/system/default_ad_api_helpers/ad_api_adaptors/README.md @@ -2,34 +2,35 @@ ## initial_pose_adaptor -This node makes it easy to use the localization AD API from RViz. -When a initial pose topic is received, call the localization initialize API. -This node depends on the map height fitter library. -[See here for more details.](../../../map/autoware_map_height_fitter/README.md) +このノードを使用すると、RVizからローカライゼーションAD APIを簡単に使用できます。 +初期姿勢トピックを受信すると、ローカライズの初期化APIを呼び出します。 +このノードはマップ高度適合ライブラリに依存します。 +[詳細はここを参照してください。](../../../map/autoware_map_height_fitter/README.md) -| Interface | Local Name | Global Name | Description | +| インターフェイス | ローカル名 | グローバル名 | 説明 | | ------------ | ----------- | ---------------------------- | ----------------------------------------- | -| Subscription | initialpose | /initialpose | The pose for localization initialization. | -| Client | - | /api/localization/initialize | The localization initialize API. | +| サブスクリプション | initialpose | /initialpose | ローカリゼーション初期化の姿勢 | +| クライアント | - | /api/localization/initialize | ローカリゼーション初期化 API | ## routing_adaptor -This node makes it easy to use the routing AD API from RViz. -When a goal pose topic is received, reset the waypoints and call the API. -When a waypoint pose topic is received, append it to the end of the waypoints to call the API. -The clear API is called automatically before setting the route. +このノードを使用すると、RVizからrouting AD APIを簡単に利用できます。 +ゴールの姿勢トピックを受信すると、ウェイポイントをリセットしてAPIを呼び出します。 +ウェイポイントの姿勢トピックを受信すると、APIを呼び出すためのウェイポイントの末尾に追加されます。 +ルートを設定する前に、clear APIが自動的に呼び出されます。 -| Interface | Local Name | Global Name | Description | -| ------------ | ------------------ | ------------------------------------- | -------------------------------------------------- | -| Subscription | - | /api/routing/state | The state of the routing API. | -| Subscription | ~/input/fixed_goal | /planning/mission_planning/goal | The goal pose of route. Disable goal modification. | -| Subscription | ~/input/rough_goal | /rviz/routing/rough_goal | The goal pose of route. Enable goal modification. | -| Subscription | ~/input/reroute | /rviz/routing/reroute | The goal pose of reroute. | -| Subscription | ~/input/waypoint | /planning/mission_planning/checkpoint | The waypoint pose of route. | -| Client | - | /api/routing/clear_route | The route clear API. | -| Client | - | /api/routing/set_route_points | The route points set API. | -| Client | - | /api/routing/change_route_points | The route points change API. | +| Interface | Local Name | Global Name | Description | +| ---------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------- | +| 購読 | - | /api/routing/state | ルーティング API の状態 | +| 購読 | ~/input/fixed_goal | /planning/mission_planning/goal | 経路のゴール目標値(目標の変更は無効) | +| 購読 | ~/input/rough_goal | /rviz/routing/rough_goal | 経路のゴール目標値(目標の変更を有効) | +| 購読 | ~/input/reroute | /rviz/routing/reroute | 再経路の目標位置 | +| 購読 | ~/input/waypoint | /planning/mission_planning/checkpoint | 経路のウェイポイント位置 | +| クライアント | - | /api/routing/clear_route | ルートクリア API | +| クライアント | - | /api/routing/set_route_points | ルートポイント設定 API | +| クライアント | - | /api/routing/change_route_points | ルートポイント変更 API | -## parameters +## パラメーター {{ json_to_markdown("/system/default_ad_api_helpers/ad_api_adaptors/schema/ad_api_adaptors.schema.json") }} + diff --git a/system/default_ad_api_helpers/automatic_pose_initializer/README.md b/system/default_ad_api_helpers/automatic_pose_initializer/README.md index 4fda3706356d3..24934e5d01963 100644 --- a/system/default_ad_api_helpers/automatic_pose_initializer/README.md +++ b/system/default_ad_api_helpers/automatic_pose_initializer/README.md @@ -2,10 +2,11 @@ ## automatic_pose_initializer -This node calls localization initialize API when the localization initialization state is uninitialized. -Since the API uses GNSS pose when no pose is specified, initialization using GNSS can be performed automatically. +このノードは、ローカリゼーション初期化状態が初期化されていない場合にローカリゼーション初期化APIを呼び出します。 +APIは、ポーズが指定されていない場合にGNSSポーズを使用するため、GNSSを使用した初期化を自動的に実行できます。 + +| インターフェース | ローカル名 | グローバル名 | 説明 | +| ---------------- | ---------- | ----------------------------------- | --------------------------------------- | +| サブスクリプション | - | /api/localization/initialization_state | ローカリゼーションの初期状態API | +| クライアント | - | /api/localization/initialize | ローカリゼーションの初期化API | -| Interface | Local Name | Global Name | Description | -| ------------ | ---------- | -------------------------------------- | ------------------------------------------ | -| Subscription | - | /api/localization/initialization_state | The localization initialization state API. | -| Client | - | /api/localization/initialize | The localization initialize API. | diff --git a/system/diagnostic_graph_aggregator/README.md b/system/diagnostic_graph_aggregator/README.md index c0cd78e0610c2..74fa8538d944d 100644 --- a/system/diagnostic_graph_aggregator/README.md +++ b/system/diagnostic_graph_aggregator/README.md @@ -1,33 +1,33 @@ # diagnostic_graph_aggregator -## Overview +## 概要 -The diagnostic graph aggregator node subscribes to diagnostic array and publishes aggregated diagnostic graph. -As shown in the diagram below, this node introduces extra diagnostic status for intermediate functional units. +diagnostic_graph_aggregatorノードは診断配列をサブスクライブして、集計した診断グラフをパブリッシュします。 +下の図に示すように、このノードは中間的な機能単位のための追加の診断ステータスを導入します。 ![overview](./doc/overview.drawio.svg) -## Diagnostic graph structures +## 診断グラフの構造 -The diagnostic graph is actually a set of fault tree analysis (FTA) for each operation mode of Autoware. -Since the status of the same node may be referenced by multiple nodes, the overall structure is a directed acyclic graph (DAG). -Each node in the diagnostic graph represents the diagnostic status of a specific functional unit, including the input diagnostics. -So we define this as "unit", and call the unit corresponding to the input diagnosis "diag unit" and the others "node unit". +診断グラフは、実際にはAutowareの各オペレーションモードに対するフォールトツリー解析(FTA)のセットです。 +同じノードのステータスは複数のノードによって参照される可能性があるため、全体的な構造は有向非巡回グラフ(DAG)です。 +診断グラフ内の各ノードは、入力診断を含む特定の機能単位の診断ステータスを表します。 +そのため、これを「ユニット」と定義し、入力診断に対応するユニットを「diagユニット」、その他を「ノードユニット」と呼びます。 -Every unit has an error level that is the same as DiagnosticStatus, a unit type, and optionally a unit path. -In addition, every diag unit has a message, a hardware_id, and values that are the same as DiagnosticStatus. -The unit type represents how the unit status is calculated, such as AND or OR. -The unit path is any unique string that represents the functionality of the unit. +すべてのユニットには、DiagnosticStatusと同じエラーレベル、ユニットタイプ、ユニットパス(オプション)があります。 +さらに、すべてのdiagユニットには、DiagnosticStatusと同じメッセージ、hardware_id、および値があります。 +ユニットタイプは、ユニットステータスがANDまたはORなどの方法で計算される方法を表します。 +ユニットパスは、ユニットの機能を表す一意の文字列です。 -NOTE: This feature is currently under development. -The diagnostic graph also supports "link" because there are cases where connections between units have additional status. -For example, it is natural that many functional units will have an error status until initialization is complete. +**注意:** この機能は現在開発中です。 +ユニット間の接続にステータスが追加されるケースがあるため、診断グラフは「リンク」もサポートしています。 +たとえば、多くの機能ユニットは、初期化が完了するまでエラーステータスになるのは当然です。 -## Operation mode availability +## オペレーションモードの可用性 -For MRM, this node publishes the status of the top-level functional units in the dedicated message. -Therefore, the diagnostic graph must contain functional units with the following names. -This feature breaks the generality of the graph and may be changed to a plugin or another node in the future. +MRMでは、このノードは専用のメッセージに最上位の機能単位のステータスをパブリッシュします。 +そのため、診断グラフには次の名前の機能単位が含まれている必要があります。 +この機能はグラフの一般的な性質を損ない、将来的にはプラグインまたは別のノードに変更される可能性があります。 - /autoware/operation/stop - /autoware/operation/autonomous @@ -37,54 +37,57 @@ This feature breaks the generality of the graph and may be changed to a plugin o - /autoware/operation/comfortable-stop - /autoware/operation/pull-over -## Interfaces +## インターフェイス -| Interface Type | Interface Name | Data Type | Description | -| -------------- | ------------------------------------- | ------------------------------------------------- | ---------------------------------- | -| subscription | `/diagnostics` | `diagnostic_msgs/msg/DiagnosticArray` | Diagnostics input. | -| publisher | `/diagnostics_graph/unknowns` | `diagnostic_msgs/msg/DiagnosticArray` | Diagnostics not included in graph. | -| publisher | `/diagnostics_graph/struct` | `tier4_system_msgs/msg/DiagGraphStruct` | Diagnostic graph (static part). | -| publisher | `/diagnostics_graph/status` | `tier4_system_msgs/msg/DiagGraphStatus` | Diagnostic graph (dynamic part). | -| publisher | `/system/operation_mode/availability` | `tier4_system_msgs/msg/OperationModeAvailability` | Operation mode availability. | +| インターフェイス種別 | インターフェイス名 | データ型 | 説明 | +|---|---|---|---| +| サブスクリプション | `/diagnostics` | `diagnostic_msgs/msg/DiagnosticArray` | 診断入力 | +| パブリッシャー | `/diagnostics_graph/unknowns` | `diagnostic_msgs/msg/DiagnosticArray` | グラフに含まれない診断 | +| パブリッシャー | `/diagnostics_graph/struct` | `tier4_system_msgs/msg/DiagGraphStruct` | 診断グラフ(静的部分) | +| パブリッシャー | `/diagnostics_graph/status` | `tier4_system_msgs/msg/DiagGraphStatus` | 診断グラフ(動的部分) | +| パブリッシャー | `/system/operation_mode/availability` | `tier4_system_msgs/msg/OperationModeAvailability` | オペレーションモードの可用性 | -## Parameters +## パラメータ -| Parameter Name | Data Type | Description | -| --------------------------------- | --------- | ------------------------------------------ | -| `graph_file` | `string` | Path of the config file. | -| `rate` | `double` | Rate of aggregation and topic publication. | -| `input_qos_depth` | `uint` | QoS depth of input array topic. | -| `graph_qos_depth` | `uint` | QoS depth of output graph topic. | -| `use_operation_mode_availability` | `bool` | Use operation mode availability publisher. | +| パラメータ名 | データ型 | 説明 | +|---|---|---| +| `graph_file` | `string` | コンフィグファイルのパス | +| `rate` | `double` | 集計とトピック公開のレート | +| `input_qos_depth` | `uint` | 入力配列トピックのQoS深度 | +| `graph_qos_depth` | `uint` | 出力グラフトピックのQoS深度 | +| `use_operation_mode_availability` | `bool` | 運転モード利用可能パブリッシャーを使用する | -## Examples +## 例 -This is an example of a diagnostic graph configuration. The configuration can be split into multiple files. +これは診断グラフ構成の例です。構成は複数のファイルに分割できます。 - [main.yaml](./example/graph/main.yaml) - [module1.yaml](./example/graph/module1.yaml) - [module2.yaml](./example/graph/module2.yaml) + ```bash ros2 launch diagnostic_graph_aggregator example-main.launch.xml ``` -You can reuse the graph by making partial edits. For example, disable hardware checks for simulation. +シミュレーションではハードウェアチェックを無効化することで、グラフを部分的に編集して再利用できます。 - [edit.yaml](./example/graph/edit.yaml) + ```bash ros2 launch diagnostic_graph_aggregator example-edit.launch.xml ``` -## Debug tools +## デバッグツール - [tree](./doc/tool/tree.md) - [diagnostic_graph_utils](../diagnostic_graph_utils/README.md) -## Graph file format +## グラフファイル形式 - [graph](./doc/format/graph.md) - [path](./doc/format/path.md) - [unit](./doc/format/unit.md) - [edit](./doc/format/edit.md) + diff --git a/system/diagnostic_graph_utils/README.md b/system/diagnostic_graph_utils/README.md index a06d664622bff..023a4739fcf19 100644 --- a/system/diagnostic_graph_utils/README.md +++ b/system/diagnostic_graph_utils/README.md @@ -1,13 +1,14 @@ # diagnostic_graph_utils -This package is a utility for diagnostic graph published by [diagnostic_graph_aggregator](../diagnostic_graph_aggregator/README.md). +本パッケージは、[diagnostic_graph_aggregator](../diagnostic_graph_aggregator/README.md)が公開する診断グラフに対するユーティリティです。 -## ROS node +## ROSノード -- [dump](./doc/node/dump.md) -- [converter](./doc/node/converter.md) +- [dump](./doc/node/dump_ja.md) +- [converter](./doc/node/converter_ja.md) -## C++ library +## C++ライブラリ - [DiagGraph](./include/diagnostic_graph_utils/graph.hpp) - [DiagGraphSubscription](./include/diagnostic_graph_utils/subscription.hpp) + diff --git a/system/dummy_diag_publisher/README.md b/system/dummy_diag_publisher/README.md index 9704cc4af9bc5..bb0a3a188a025 100644 --- a/system/dummy_diag_publisher/README.md +++ b/system/dummy_diag_publisher/README.md @@ -1,53 +1,56 @@ # dummy_diag_publisher -## Purpose +## 目的 -This package outputs a dummy diagnostic data for debugging and developing. +このパッケージは、デバッグや開発用のダミー診断データをアウトプットします。 -## Inputs / Outputs +## 入出力 -### Outputs +### 出力 -| Name | Type | Description | +| 名前 | タイプ | 説明 | | -------------- | ---------------------------------------- | ------------------- | -| `/diagnostics` | `diagnostic_msgs::msgs::DiagnosticArray` | Diagnostics outputs | +| `/diagnostics` | `diagnostic_msgs::msgs::DiagnosticArray` | 診断出力 | -## Parameters +## パラメータ -### Node Parameters +### ノードパラメータ -The parameter `DIAGNOSTIC_NAME` must be a name that exists in the parameter YAML file. If the parameter `status` is given from a command line, the parameter `is_active` is automatically set to `true`. +パラメータ`DIAGNOSTIC_NAME`は、パラメータYAMLファイルに存在する名前でなければなりません。`status`パラメータがコマンドラインから指定された場合、`is_active`パラメータは自動的に`true`に設定されます。 -| Name | Type | Default Value | Explanation | Reconfigurable | -| --------------------------- | ------ | ------------- | --------------------------------------- | -------------- | -| `update_rate` | int | `10` | Timer callback period [Hz] | false | -| `DIAGNOSTIC_NAME.is_active` | bool | `true` | Force update or not | true | -| `DIAGNOSTIC_NAME.status` | string | `"OK"` | diag status set by dummy diag publisher | true | +| 名称 | タイプ | 既定値 | 説明 | 再構成可能 | +| ----------------------------- | ------ | ---------- | -------------------------------------------- | ----------- | +| `update_rate` | int | `10` | タイマーコールバックの周期 [Hz] | false | +| `DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制的に更新するかどうか | true | +| `DIAGNOSTIC_NAME.status` | string | `"OK"` | ダミー診断パブリッシャーによる診断ステータス | true | -### YAML format for dummy_diag_publisher +### dummy_diag_publisher の YAML フォーマット -If the value is `default`, the default value will be set. +値が `default` の場合、既定値が設定されます。 -| Key | Type | Default Value | Explanation | -| ------------------------------------------ | ------ | ------------- | --------------------------------------- | -| `required_diags.DIAGNOSTIC_NAME.is_active` | bool | `true` | Force update or not | -| `required_diags.DIAGNOSTIC_NAME.status` | string | `"OK"` | diag status set by dummy diag publisher | +| キー | タイプ | デフォルト値 | 説明 | +| --------------------------------------- | ------ | ----------- | ---------------------------------------------------------------------| +| `required_diags.DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制アップデートするか否か | +| `required_diags.DIAGNOSTIC_NAME.status` | string | `"OK"` | ダミー診断パブリッシャーによって設定された診断ステータス | -## Assumptions / Known limits +## 想定事項/既知の制約事項 -TBD. +まだありません。 -## Usage +## 使用方法 + +### 起動 -### launch ```sh ros2 launch dummy_diag_publisher dummy_diag_publisher.launch.xml ``` -### reconfigure +### 再構成 + ```sh ros2 param set /dummy_diag_publisher velodyne_connection.status "Warn" ros2 param set /dummy_diag_publisher velodyne_connection.is_active true ``` + diff --git a/system/dummy_infrastructure/README.md b/system/dummy_infrastructure/README.md index d032bfa1a7e3d..d9f0f285808fc 100644 --- a/system/dummy_infrastructure/README.md +++ b/system/dummy_infrastructure/README.md @@ -1,41 +1,43 @@ # dummy_infrastructure -This is a debug node for infrastructure communication. +こちらは、インフラストラクチャ通信用のデバッグノードです。 + +## 使用方法 -## Usage ```sh ros2 launch dummy_infrastructure dummy_infrastructure.launch.xml ros2 run rqt_reconfigure rqt_reconfigure ``` -## Inputs / Outputs +## 入力 / 出力 + +### 入力 -### Inputs +| 名称 | 種別 | 説明 | +| ----------------------- | ---------------------------------------------------- | ---------------------- | +| `~/input/command_array` | `tier4_v2x_msgs::msg::InfrastructureCommandArray` | V2Xインフラコマンド | -| Name | Type | Description | -| ----------------------- | ------------------------------------------------- | ---------------------- | -| `~/input/command_array` | `tier4_v2x_msgs::msg::InfrastructureCommandArray` | Infrastructure command | +### 出力 -### Outputs +| 名前 | タイプ | 説明 | +| -------------------------- | ---------------------------------------------------------------------- | ------------------------------ | +| `~/output/state_array` | `tier4_v2x_msgs::msg::VirtualTrafficLightStateArray` | バーチャルトラフィックライトアレイ | -| Name | Type | Description | -| ---------------------- | ---------------------------------------------------- | --------------------------- | -| `~/output/state_array` | `tier4_v2x_msgs::msg::VirtualTrafficLightStateArray` | Virtual traffic light array | +## パラメーター -## Parameters +### ノードパラメーター -### Node Parameters +| 名称 | 種別 | デフォルト値 | 説明 | +| ------------------- | ------ | ------------- | ------------------------------------------------------ | +| `update_rate` | double | `10.0` | タイマーコールバック周期 [Hz] | +| `use_first_command` | bool | `true` | インスト読み取り ID を考慮するかどうするか | +| `use_command_state` | bool | `false` | コマンドの状態を考慮するかどうするか | +| `instrument_id` | string | `` | コマンド ID として使用 | +| `approval` | bool | `false` | `approval` フィールドを ROS パラメータに設定する | +| `is_finalized` | bool | `false` | `finalization` が完了していない場合、一時停止線で停止する | -| Name | Type | Default Value | Explanation | -| ------------------- | ------ | ------------- | ------------------------------------------------- | -| `update_rate` | double | `10.0` | Timer callback period [Hz] | -| `use_first_command` | bool | `true` | Consider instrument id or not | -| `use_command_state` | bool | `false` | Consider command state or not | -| `instrument_id` | string | `` | Used as command id | -| `approval` | bool | `false` | set approval filed to ros param | -| `is_finalized` | bool | `false` | Stop at stop_line if finalization isn't completed | +## 仮定 / 既知の限界 -## Assumptions / Known limits +未定です。 -TBD. diff --git a/system/duplicated_node_checker/README.md b/system/duplicated_node_checker/README.md index 81b53e36c9f6d..8111b7224542e 100644 --- a/system/duplicated_node_checker/README.md +++ b/system/duplicated_node_checker/README.md @@ -1,37 +1,39 @@ -# Duplicated Node Checker +# 重複ノードチェッカー -## Purpose +## 目的 -This node monitors the ROS 2 environments and detect duplication of node names in the environment. -The result is published as diagnostics. +このノードは ROS 2 環境をモニタリングし、環境内のノード名の重複を検出します。 +結果は診断として公開されます。 + +### スタンドアロン起動 -### Standalone Startup ```bash ros2 launch duplicated_node_checker duplicated_node_checker.launch.xml ``` -## Inner-workings / Algorithms +## インナーワーキング / アルゴリズム -The types of topic status and corresponding diagnostic status are following. +トピックステータスとその診断ステータスの対応は次のとおりです。 -| Duplication status | Diagnostic status | Description | -| --------------------- | ----------------- | -------------------------- | -| `OK` | OK | No duplication is detected | -| `Duplicated Detected` | ERROR | Duplication is detected | +| **重複ステータス** | **診断ステータス** | **説明** | +|---|---|---| +| `OK` | OK | 重複は検出されません | +| `重複検出` | エラー | 重複が検出されました | -## Inputs / Outputs +## 入出力 -### Output +### 出力 -| Name | Type | Description | +| 名称 | 型 | 説明 | | -------------- | --------------------------------- | ------------------- | -| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | Diagnostics outputs | +| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断出力 | -## Parameters +## パラメーター {{ json_to_markdown("system/duplicated_node_checker/schema/duplicated_node_checker.schema.json") }} -## Assumptions / Known limits +## 想定事項 / 制限事項 + +未定 -TBD. diff --git a/system/mrm_comfortable_stop_operator/README.md b/system/mrm_comfortable_stop_operator/README.md index dffa28f1dfa49..abbfbab76464b 100644 --- a/system/mrm_comfortable_stop_operator/README.md +++ b/system/mrm_comfortable_stop_operator/README.md @@ -1,43 +1,112 @@ # mrm_comfortable_stop_operator -## Purpose +## 目的 -MRM comfortable stop operator is a node that generates comfortable stop commands according to the comfortable stop MRM order. +MRM comfortable stop operatorは、MRM comfortable stopコマンドに従って快適な停止コマンドを生成するノードです。 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| -------------------------------------- | ------------------------------------ | ------------------- | -| `~/input/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM execution order | +| 名称 | 型 | 説明 | +| ------------------------------------ | ----------------------------------- | ----------------- | +| `~/input/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM実行オーダー | -### Output +### 出力 -| Name | Type | Description | -| -------------------------------------- | ----------------------------------------------------- | ---------------------------- | -| `~/output/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM execution status | -| `~/output/velocity_limit` | `tier4_planning_msgs::msg::VelocityLimit` | Velocity limit command | -| `~/output/velocity_limit/clear` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | Velocity limit clear command | +**自己位置推定** -## Parameters +自己位置推定モジュールは、センサからの測定値に基づいて、車両の現在の位置と姿勢を推定します。このモジュールは、以下を含むさまざまなセンサのデータを統合します。 -### Node Parameters +- GPS +- IMU +- 車輪速センサ +- カメラ -| Name | Type | Default value | Explanation | +統合されたデータは、状態推定器を使用して、車両の現在の状態を推定するために使用されます。 + +**経路計画** + +経路計画モジュールは、起点と終点の間の経路を計画します。このモジュールは、以下を含むさまざまな要因を考慮します。 + +- 交通規則 +- 地図データ +- 障害物 + +計画された経路は、経路追従モジュールに渡されます。 + +**経路追従** + +経路追従モジュールは、計画された経路に従って車両を制御します。このモジュールは、以下を使用して、車両のステアリングとアクセル/ブレーキを制御します。 + +- 自車位置 +- 目標経路 +- センサからの測定値 + +**障害物回避** + +障害物回避モジュールは、車両の周囲の障害物を検出し、回避します。このモジュールは、以下を使用して、障害物を検出します。 + +- カメラ +- レーダー +- 超音波センサ + +障害物が検出されると、回避モジュールは、障害物を回避するための回避策を生成します。 + +**安全** + +安全モジュールは、車両の安全な動作を確保します。このモジュールは、以下を行います。 + +- モニタリングシステムの健全性 +- 障害物の存在の検出 +- 衝突の回避 + +**Autowareのアーキテクチャ** + +Autowareのアーキテクチャは、以下を含むモジュール構造に基づいています。 + +- Perception: センサデータの処理と物体認識 +- Planning: 経路の計画と経路追従 +- Control: 車両の制御 +- Safety: 安全の確保 + +これらのモジュールは、モジュール間インターフェースを使用して相互に通信します。 + +**Autowareの機能** + +Autowareは、以下を含むさまざまな機能を提供します。 + +- 車線逸脱防止 +- 衝突警告 +- 自動緊急ブレーキ +- アダプティブクルーズコントロール +- 自動運転 + +| 名前 | 型 | 説明 | +| ------------------------------------ | -------------------------------------------------------- | ---------------------------------------- | +| `~/output/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM実行状態 | +| `~/output/velocity_limit` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | +| `~/output/velocity_limit/clear` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | + +## パラメーター + +### ノードパラメーター + +| 名称 | 型 | デフォルト値 | 説明 | | ----------- | ---- | ------------- | ----------------------------- | -| update_rate | int | `10` | Timer callback frequency [Hz] | +| update_rate | int | `10` | タイマーコールバック頻度 [Hz] | -### Core Parameters +### コアパラメータ -| Name | Type | Default value | Explanation | -| ---------------- | ------ | ------------- | ------------------------------------------------- | -| min_acceleration | double | `-1.0` | Minimum acceleration for comfortable stop [m/s^2] | -| max_jerk | double | `0.3` | Maximum jerk for comfortable stop [m/s^3] | -| min_jerk | double | `-0.3` | Minimum jerk for comfortable stop [m/s^3] | +| 名前 | 型 | デフォルト値 | 説明 | +| ---------------- | ------ | ------------- | --------------------------------------------------- | +| min_acceleration | double | `-1.0` | 快適な停止のための最低加速度 [m/s^2] | +| max_jerk | double | `0.3` | 快適な停止のための最大ジャーク [m/s^3] | +| min_jerk | double | `-0.3` | 快適な停止のための最小ジャーク [m/s^3] | -## Assumptions / Known limits +## 想定事項/既知の制限 TBD. + diff --git a/system/mrm_emergency_stop_operator/README.md b/system/mrm_emergency_stop_operator/README.md index 203303c0ea748..3db2df7f2491c 100644 --- a/system/mrm_emergency_stop_operator/README.md +++ b/system/mrm_emergency_stop_operator/README.md @@ -1,43 +1,76 @@ # mrm_emergency_stop_operator -## Purpose +## 目的 -MRM emergency stop operator is a node that generates emergency stop commands according to the emergency stop MRM order. +MRM emergency stop operatorは、緊急停止MRM順序に基づいて緊急停止コマンドを生成するノードです。 -## Inner-workings / Algorithms +## 内部動作/アルゴリズム -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| ------------------------------------ | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| `~/input/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM execution order | -| `~/input/control/control_cmd` | `autoware_control_msgs::msg::Control` | Control command output from the last node of the control component. Used for the initial value of the emergency stop command. | -| | | | +| 名前 | タイプ | 説明 | +| ---------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `~/input/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM 実行命令 | +| `~/input/control/control_cmd` | `autoware_control_msgs::msg::Control` | 制御コンポーネントの最後のノードから出力される制御コマンド。緊急停止コマンドの初期値に使用されます。 | -### Output +### 出力 -| Name | Type | Description | -| ----------------------------------------- | ------------------------------------------- | ---------------------- | -| `~/output/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM execution status | -| `~/output/mrm/emergency_stop/control_cmd` | `autoware_control_msgs::msg::Control` | Emergency stop command | +このドキュメントでは、AutowareのPlanningコンポーネントの技術的詳細について説明します。 -## Parameters +#### Planning Framework -### Node Parameters +Planningコンポーネントは、次のようなサブコンポーネントで構成されています。 -| Name | Type | Default value | Explanation | -| ----------- | ---- | ------------- | ----------------------------- | -| update_rate | int | `30` | Timer callback frequency [Hz] | +- **Motion Generator:** 自車位置と目標速度に基づいて、滑らかな軌跡を生成します。 +- **Path Planning:** 環境の障害物や道路構造を考慮しながら、軌跡を最適化します。 +- **Trajectory Planning:** 自車位置、目標速度、障害物に対して安全で快適な軌跡を作成します。 -### Core Parameters +#### Dynamic Obstacle Avoidance -| Name | Type | Default value | Explanation | +このモジュールは、周囲の動的障害物(車両、歩行者など)を検出し、衝突回避を計画します。以下のような戦略を使用します。 + +- **Velocity Smoothing:** 障害物との衝突を回避するために、速度逸脱量を最小限に抑えます。 +- **Acceleration Smoothing:** 障害物との衝突を回避するために、加速度逸脱量を最小限に抑えます。 +- **Lateral Avoidance:** 障害物との衝突を回避するために、横方向の回避動作を計画します。 + +#### Static Obstacle Handling + +このモジュールは、静的障害物(道路標識、ガードレールなど)を考慮して、軌跡を安全かつ効率的に計画します。以下のアルゴリズムを使用します: + +- **'Post Resampling':** 障害物周辺の軌跡を再サンプリングして、より正確な衝突予測を行います。 +- **Rejection Sampling:** 障害物との衝突の可能性が最も低い軌跡をランダムに選択します。 + +#### その他の機能 + +Planningコンポーネントには、以下を含むその他の機能もあります: + +- **Goal Planning:** 目的地に到達するための高レベルの軌跡を計画します。 +- **Velocity Planning:** 安全で快適な速度プロファイルを決定します。 +- **Safety Checks:** 軌跡が安全で、車両の制限内であることを確認します。 + +| 名称 | タイプ | 説明 | +| ----------------------------------------- | ------------------------------------------ | ------------------------------------------- | +| `~/output/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM 実行ステータス | +| `~/output/mrm/emergency_stop/control_cmd` | `autoware_control_msgs::msg::Control` | 緊急停止コマンド | + +## パラメータ + +### ノードパラメータ + +| 名称 | 種別 | デフォルト値 | 説明 | +| ---------- | ---- | ------------ | ------------------------------------------ | +| update_rate | int | `30` | タイマーコールバック周波数 [Hz] | + +### コアパラメーター + +| 名称 | タイプ | デフォルト値 | 説明 | | ------------------- | ------ | ------------- | ---------------------------------------------- | -| target_acceleration | double | `-2.5` | Target acceleration for emergency stop [m/s^2] | -| target_jerk | double | `-1.5` | Target jerk for emergency stop [m/s^3] | +| target_acceleration | double | `-2.5` | 緊急停止時の目標加速度 [m/s^2] | +| target_jerk | double | `-1.5` | 緊急停止時の目標ジャーク [m/s^3] | + +## 前提条件/既知の制限 -## Assumptions / Known limits +未定。 -TBD. diff --git a/system/mrm_handler/README.md b/system/mrm_handler/README.md index 8ccb95e6ca8d3..fe6f5b172961c 100644 --- a/system/mrm_handler/README.md +++ b/system/mrm_handler/README.md @@ -1,44 +1,89 @@ # mrm_handler -## Purpose +## 目的 -MRM Handler is a node to select a proper MRM from a system failure state contained in OperationModeAvailability. +MRM Handlerは、OperationModeAvailabilityに含まれるシステム障害状態から適切なMRMを選択するノードです。 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -### State Transitions +### 状態遷移 ![mrm-state](image/mrm-state.svg) -## Inputs / Outputs +## 入出力 -### Input +### 入力 -| Name | Type | Description | -| -------------------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | Used to decide whether vehicle is stopped or not | -| `/system/operation_mode/availability` | `tier4_system_msgs::msg::OperationModeAvailability` | Used to select proper MRM from system available mrm behavior contained in operationModeAvailability | -| `/vehicle/status/control_mode` | `autoware_vehicle_msgs::msg::ControlModeReport` | Used to check vehicle mode: autonomous or manual | -| `/system/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | Used to check if MRM emergency stop operation is available | -| `/system/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | Used to check if MRM comfortable stop operation is available | -| `/system/mrm/pull_over_manager/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | Used to check if MRM pull over operation is available | -| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | Used to check whether the current operation mode is AUTO or STOP. | +| 名称 | 種別 | 説明 | +| -------------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 車両が停止しているかどうか判断するために使用 | +| `/system/operation_mode/availability` | `tier4_system_msgs::msg::OperationModeAvailability` | operationModeAvailabilityに示されている適切なMRMをシステム利用可能なMRM動作から選択するために使用 | +| `/vehicle/status/control_mode` | `autoware_vehicle_msgs::msg::ControlModeReport` | 車両モード(自律運転または手動運転)をチェックするために使用 | +| `/system/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM緊急停止動作が利用可能かどうかをチェックするために使用 | +| `/system/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM快適停止動作が利用可能かどうかをチェックするために使用 | +| `/system/mrm/pull_over_manager/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRMプルオーバー動作が利用可能かどうかをチェックするために使用 | +| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | 現在の動作モードがAUTOまたはSTOPであるかどうかを確認するために使用 | -### Output +### 出力 -| Name | Type | Description | +**自己位置推定(Self-Localization)** + +自己位置推定は、'post resampling`を実行する前に、周囲の地図に対して車両の現在の位置('current pose`)を推定します。これにより、正確な自己位置を確保し、周囲の障害物を適切に把握できます。 + +**パスプランニング(Path Planning)** + +パスプランニングでは、現時点での自車位置から目標地点まで移動する最適なパスを生成します。障害物や交通状況などの情報を考慮して、安全で効率的な経路を特定します。 + +**モーションプランニング(Motion Planning)** + +モーションプランニングは、生成されたパスに従って、車両の運動を制御します。加速度、速度などの車両の動作を決定し、障害物との衝突を回避する安全な動作を確保します。 + +**障害物検出(Object Detection)** + +障害物検出は、周囲の環境を監視し、車両の周囲にある静止または移動中の障害物を特定します。これにより、衝突の回避と安全な動作を確保できます。 + +**センサー融合(Sensor Fusion)** + +センサー融合は、レーダー、LiDAR、カメラなどの複数のセンサーからのデータを統合し、より正確で完全な周囲環境の認識を行います。これにより、車両が周囲の状況をより適切に把握できます。 + +**システム統合(System Integration)** + +システム統合は、自己位置推定、パスプランニング、モーションプランニング、障害物検出、センサー融合などのさまざまなコンポーネントを組み合わせ、統一された自律走行システムを作成します。この統合により、安全で効率的な自律走行が可能になります。 + +**Autoware** + +Autowareは、オープンソースの自律走行ソフトウェアプラットフォームであり、自己位置推定、パスプランニング、モーションプランニング、障害物検出などのコンポーネントを含む、自律走行に必要な機能を包括的に提供しています。 + +**パフォーマンス評価** + +パフォーマンス評価では、自律走行システムの安全性、効率性、信頼性を測定します。これには、車両の動作、障害物の回避、交通状況への適応などの指標が含まれます。 + +**セーフティ(Safety)** + +安全は自律走行システムの最優先事項です。システムは障害物の検出、衝突の回避、安全な動作を確保するように設計されています。 + +**効率性(Efficiency)** + +効率性は、自律走行システムが目的地に安全かつ迅速に到着するために重要です。システムは、最適なパスを生成し、適切な速度を決定し、エネルギー消費を最小化するように設計されています。 + +**信頼性(Reliability)** + +信頼性は、自律走行システムがさまざまな状況下で予測可能かつ一貫して動作するために重要です。システムは、センサーの故障、天候の変化、交通状況の変化に耐えられるように設計されています。 + +| 名前 | 種類 | 説明 | | --------------------------------------- | ------------------------------------------------- | ----------------------------------------------------- | -| `/system/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | Required to execute proper MRM (send gear cmd) | -| `/system/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | Required to execute proper MRM (send turn signal cmd) | -| `/system/fail_safe/mrm_state` | `autoware_adapi_v1_msgs::msg::MrmState` | Inform MRM execution state and selected MRM behavior | -| `/system/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | Execution order for MRM emergency stop | -| `/system/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | Execution order for MRM comfortable stop | -| `/system/mrm/pull_over_manager/operate` | `tier4_system_msgs::srv::OperateMrm` | Execution order for MRM pull over | +| `/system/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | MRMの適切な実行に必要な(ギアコマンドを送信) | +| `/system/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | MRMの適切な実行に必要な(ターンシグナルコマンドを送信) | +| `/system/fail_safe/mrm_state` | `autoware_adapi_v1_msgs::msg::MrmState` | MRM実行状態と選択されたMRM挙動を通知 | +| `/system/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM緊急停止用実行命令 | +| `/system/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM快適停止用実行命令 | +| `/system/mrm/pull_over_manager/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM停車用実行命令 | -## Parameters +## パラメータ {{ json_to_markdown("system/mrm_handler/schema/mrm_handler.schema.json") }} -## Assumptions / Known limits +## 前提条件 / 制限事項 + +未定 -TBD. diff --git a/system/system_diagnostic_monitor/README.md b/system/system_diagnostic_monitor/README.md index 94f5897076ff6..ee8d14acca6b1 100644 --- a/system/system_diagnostic_monitor/README.md +++ b/system/system_diagnostic_monitor/README.md @@ -1,16 +1,17 @@ # system_diagnostic_monitor -This package contains default configurations of diagnostic graph and scripts for system integration. +このパッケージには、システム統合のための診断グラフの既定の設定とスクリプトが含まれています。 -## Configs +## 設定 -| Name | Description | -| ------------------------------------------------- | ------------------------------------------------------------ | -| [autoware-main.yaml](./config/autoware-main.yaml) | Diagnostic graphs for basic monitoring of Autoware. | -| [autoware-psim.yaml](./config/autoware-psim.yaml) | Diagnostic graph with some units disabled for the simulator. | +| 名称 | 説明 | +| ------------------------------------------------- | ----------------------------------------------------- | +| [autoware-main.yaml](./config/autoware-main.yaml) | Autowareの基本モニタリングのための診断グラフ。 | +| [autoware-psim.yaml](./config/autoware-psim.yaml) | シミュレーター用に一部ユニットを無効にした診断グラフ。 | -## Scripts +## スクリプト + +| 名称 | 説明 | +| -------------------------------------------------------------------- | ------------------------------------------------ | +| [component_state_diagnostics](./script/component_state_diagnostics.py) | コンポーネント状態を変換するノード。 | -| Name | Description | -| ---------------------------------------------------------------------- | --------------------------------------------------- | -| [component_state_diagnostics](./script/component_state_diagnostics.py) | Node that converts component states to diagnostics. | diff --git a/system/system_monitor/README.md b/system/system_monitor/README.md index 6203ad45d4b3a..860cfbe166d71 100644 --- a/system/system_monitor/README.md +++ b/system/system_monitor/README.md @@ -1,34 +1,35 @@ -# System Monitor for Autoware +# Autoware向けシステムモニタ -**Further improvement of system monitor functionality for Autoware.** +**Autowareのシステムモニタ機能のさらなる向上。** -## Description +## 概要 -This package provides the following nodes for monitoring system: +このパッケージは、システムのモニタリング用として次のノードを提供します。 -- CPU Monitor -- HDD Monitor -- Memory Monitor -- Network Monitor -- NTP Monitor -- Process Monitor -- GPU Monitor -- Voltage Monitor +- CPUモニタ +- HDDモニタ +- メモリモニタ +- ネットワークモニタ +- NTPモニタ +- プロセスモニタ +- GPUモニタ +- 電圧モニタ -### Supported architecture +### サポート対象アーキテクチャ - x86_64 - arm64v8/aarch64 -### Operation confirmed platform +### 動作確認済みプラットフォーム -- PC system intel core i7 +- PCシステムインテルCore i7 - NVIDIA Jetson AGX Xavier -- Raspberry Pi4 Model B +- Raspberry Pi4モデルB -## How to use +## 使用方法 + +他のパッケージと同様に、colcon buildとlaunchを使用します。 -Use colcon build and launch in the same way as other packages. ```sh colcon build @@ -36,165 +37,175 @@ source install/setup.bash ros2 launch system_monitor system_monitor.launch.xml ``` -CPU and GPU monitoring method differs depending on platform.
-CMake automatically chooses source to be built according to build environment.
-If you build this package on intel platform, CPU monitor and GPU monitor which run on intel platform are built. - -## ROS topics published by system monitor - -Every topic is published in 1 minute interval. - -- [CPU Monitor](docs/topics_cpu_monitor.md) -- [HDD Monitor](docs/topics_hdd_monitor.md) -- [Mem Monitor](docs/topics_mem_monitor.md) -- [Net Monitor](docs/topics_net_monitor.md) -- [NTP Monitor](docs/topics_ntp_monitor.md) -- [Process Monitor](docs/topics_process_monitor.md) -- [GPU Monitor](docs/topics_gpu_monitor.md) -- [Voltage Monitor](docs/topics_voltage_monitor.md) - -[Usage] ✓:Supported, -:Not supported - -| Node | Message | Intel | arm64(tegra) | arm64(raspi) | Notes | -| --------------- | ---------------------------- | :---: | :----------: | :----------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| CPU Monitor | CPU Temperature | ✓ | ✓ | ✓ | | -| | CPU Usage | ✓ | ✓ | ✓ | | -| | CPU Load Average | ✓ | ✓ | ✓ | | -| | CPU Thermal Throttling | ✓ | - | ✓ | | -| | CPU Frequency | ✓ | ✓ | ✓ | Notification of frequency only, normally error not generated. | -| HDD Monitor | HDD Temperature | ✓ | ✓ | ✓ | | -| | HDD PowerOnHours | ✓ | ✓ | ✓ | | -| | HDD TotalDataWritten | ✓ | ✓ | ✓ | | -| | HDD RecoveredError | ✓ | ✓ | ✓ | | -| | HDD Usage | ✓ | ✓ | ✓ | | -| | HDD ReadDataRate | ✓ | ✓ | ✓ | | -| | HDD WriteDataRate | ✓ | ✓ | ✓ | | -| | HDD ReadIOPS | ✓ | ✓ | ✓ | | -| | HDD WriteIOPS | ✓ | ✓ | ✓ | | -| | HDD Connection | ✓ | ✓ | ✓ | | -| Memory Monitor | Memory Usage | ✓ | ✓ | ✓ | | -| Net Monitor | Network Connection | ✓ | ✓ | ✓ | | -| | Network Usage | ✓ | ✓ | ✓ | Notification of usage only, normally error not generated. | -| | Network CRC Error | ✓ | ✓ | ✓ | Warning occurs when the number of CRC errors in the period reaches the threshold value. The number of CRC errors that occur is the same as the value that can be confirmed with the ip command. | -| | IP Packet Reassembles Failed | ✓ | ✓ | ✓ | | -| NTP Monitor | NTP Offset | ✓ | ✓ | ✓ | | -| Process Monitor | Tasks Summary | ✓ | ✓ | ✓ | | -| | High-load Proc[0-9] | ✓ | ✓ | ✓ | | -| | High-mem Proc[0-9] | ✓ | ✓ | ✓ | | -| GPU Monitor | GPU Temperature | ✓ | ✓ | - | | -| | GPU Usage | ✓ | ✓ | - | | -| | GPU Memory Usage | ✓ | - | - | | -| | GPU Thermal Throttling | ✓ | - | - | | -| | GPU Frequency | ✓ | ✓ | - | For Intel platform, monitor whether current GPU clock is supported by the GPU. | -| Voltage Monitor | CMOS Battery Status | ✓ | - | - | Battery Health for RTC and BIOS - | - -## ROS parameters - -See [ROS parameters](docs/ros_parameters.md). - -## Notes - -### CPU monitor for intel platform - -Thermal throttling event can be monitored by reading contents of MSR(Model Specific Register), and accessing MSR is only allowed for root by default, so this package provides the following approach to minimize security risks as much as possible:
- -- Provide a small program named 'msr_reader' which accesses MSR and sends thermal throttling status to CPU monitor by using socket programming. -- Run 'msr_reader' as a specific user instead of root. -- CPU monitor is able to know the status as an unprivileged user since thermal throttling status is sent by socket communication. - -### Instructions before starting - -1. Create a user to run 'msr_reader'. +プラットフォームによってCPUおよびGPU監視方法は異なります。
+CMakeは自動的にビルド環境に応じたビルド対象のソースを選択します。
+このパッケージをインテルプラットフォームでビルドする場合、インテルプラットフォームで動作するCPUモニターとGPUモニターがビルドされます。 + +## システムモニターによって公開されるROSトピック + +各トピックは1分間隔で公開されます。 + +- [CPUモニター](docs/topics_cpu_monitor.md) +- [HDDモニター](docs/topics_hdd_monitor.md) +- [Memモニター](docs/topics_mem_monitor.md) +- [Netモニター](docs/topics_net_monitor.md) +- [NTPモニター](docs/topics_ntp_monitor.md) +- [Processモニター](docs/topics_process_monitor.md) +- [GPUモニター](docs/topics_gpu_monitor.md) +- [電圧モニター](docs/topics_voltage_monitor.md) + +[使用状況] ✓:サポート、-:サポートなし + +| ノード | メッセージ | Intel | arm64(tegra) | arm64(raspi) | メモ | +| --------------- | ---------------------------- | :---: | :----------: | :----------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| CPUモニター | CPU温度 | ✓ | ✓ | ✓ | | +| | CPU使用率 | ✓ | ✓ | ✓ | | +| | CPU負荷平均 | ✓ | ✓ | ✓ | | +| | CPUサーマルスロットリング | ✓ | - | ✓ | | +| | CPU周波数 | ✓ | ✓ | ✓ | 周波数の通知のみで、通常エラーは生成されません。 | +| HDDモニター | HDD温度 | ✓ | ✓ | ✓ | | +| | HDD通電時間 | ✓ | ✓ | ✓ | | +| | HDD総書き込みデータ量 | ✓ | ✓ | ✓ | | +| | HDD復旧エラー | ✓ | ✓ | ✓ | | +| | HDD使用率 | ✓ | ✓ | ✓ | | +| | HDDリードデータレート | ✓ | ✓ | ✓ | | +| | HDDライトデータレート | ✓ | ✓ | ✓ | | +| | HDDリードIOPS | ✓ | ✓ | ✓ | | +| | HDDライトIOPS | ✓ | ✓ | ✓ | | +| | HDD接続 | ✓ | ✓ | ✓ | | +| メモリモニター | メモリ使用率 | ✓ | ✓ | ✓ | | +| ネットワークモニタ | ネットワーク接続 | ✓ | ✓ | ✓ | | +| | ネットワーク使用率 | ✓ | ✓ | ✓ | 使用率の通知のみで、通常エラーは生成されません。 | +| | ネットワークCRCエラー | ✓ | ✓ | ✓ | 周期内のCRCエラー数が閾値に達すると警告が発生します。発生するCRCエラー数は、`ip`コマンドで確認できる値と同じです。 | +| | IPパケット再構成失敗 | ✓ | ✓ | ✓ | | +| NTPモニター | NTPオフセット | ✓ | ✓ | ✓ | | +| プロセスモニター | タスクの概要 | ✓ | ✓ | ✓ | | +| | 高負荷プロセス[0-9] | ✓ | ✓ | ✓ | | +| | 高メモリプロセス[0-9] | ✓ | ✓ | ✓ | | +| GPUモニター | GPU温度 | ✓ | ✓ | - | | +| | GPU使用率 | ✓ | ✓ | - | | +| | GPUメモリ使用率 | ✓ | - | - | | +| | GPUサーマルスロットリング | ✓ | - | - | | +| | GPU周波数 | ✓ | ✓ | - | インテルプラットフォームでは、現在のGPUクロックがGPUでサポートされているかどうかを監視します。 | +| 電圧モニター | CMOSバッテリーステータス | ✓ | - | - | RTCとBIOSのバッテリーの健全性 | + +## ROSパラメータ + +[ROSパラメータ](docs/ros_parameters.md)を参照してください。 + +## 注意 + +### Intelプラットフォーム用CPUモニター + +サーマルスロットリングイベントはMSR(モデル固有レジスタ)の内容を読み取ることで監視でき、デフォルトではrootのみがMSRにアクセスできます。そのため、このパッケージでは、セキュリティリスクを可能な限り最小限に抑えるために、次のアプローチを提供しています。 + +- MSRにアクセスしてサーマルスロットリングステータスをCPUモニターにソケットプログラミングを使用して送信する「msr_reader」という小さなプログラムを提供する。 +- rootではなく、特定のユーザーとして「msr_reader」を実行する。 +- CPUモニターは、サーマルスロットリングステータスがソケット通信で送信されるため、非特権ユーザーとしてステータスを知ることができます。 + +### 開始前の手順 + +1. 「msr_reader」を実行するユーザーを作成します。 + ```sh sudo adduser ``` -2. Load kernel module 'msr' into your target system.
- The path '/dev/cpu/CPUNUM/msr' appears. +2. 対象システムに `msr` カーネルモジュールをロードする。
+ `/dev/cpu/CPUNUM/msr` パスが出現する。 + ```sh sudo modprobe msr ``` -3. Allow user to access MSR with read-only privilege using the Access Control List (ACL). +3. アクセス制御リスト(ACL)を使用して、読み取り専用アクセス権でMSRにユーザーアクセスを許可します。 + ```sh sudo setfacl -m u::r /dev/cpu/*/msr ``` -4. Assign capability to 'msr_reader' since msr kernel module requires rawio capability. +4. 'msr_reader'にcapabilityを割り当てます。msrカーネルモジュールにはrawioのcapabilityが必要です。 + ```sh sudo setcap cap_sys_rawio=ep install/system_monitor/lib/system_monitor/msr_reader ``` -5. Run 'msr_reader' as the user you created, and run system_monitor as a generic user. +5. 作成したユーザとして「msr_reader」を実行し、汎用ユーザとしてsystem_monitorを実行します。 + ```sh su install/system_monitor/lib/system_monitor/msr_reader ``` -### See also +### 参照 [msr_reader](docs/msr_reader.md) -## HDD Monitor +## HDDモニター -Generally, S.M.A.R.T. information is used to monitor HDD temperature and life of HDD, and normally accessing disk device node is allowed for root user or disk group.
-As with the CPU monitor, this package provides an approach to minimize security risks as much as possible:
+HDDの温度と寿命の監視には一般にS.M.A.R.T.情報が使用され、通常、diskデバイスノードへのアクセスはrootユーザーまたはdiskグループに制限されています。
+CPUモニターと同様に、このパッケージはセキュリティリスクをできるだけ最小限に抑えるアプローチを提供します。
-- Provide a small program named 'hdd_reader' which accesses S.M.A.R.T. information and sends some items of it to HDD monitor by using socket programming. -- Run 'hdd_reader' as a specific user. -- HDD monitor is able to know some items of S.M.A.R.T. information as an unprivileged user since those are sent by socket communication. +- 'hdd_reader'という小さなプログラムを提供し、S.M.A.R.T.情報にアクセスしてソケットプログラミングを使用してHDDモニターに一部のアイテムを送信します。 +- 'hdd_reader'を特定のユーザーとして実行します。 +- HDDモニターは、ソケット通信によって送信されるため、非特権ユーザーとして一部のS.M.A.R.T.情報を知ることができます。 -### Instructions before starting +### 開始前の手順 + +1. 'hdd_reader'を実行するユーザーを作成します。 -1. Create a user to run 'hdd_reader'. ```sh sudo adduser ``` -2. Add user to the disk group. +2. ディスクグループにユーザーを追加します。 + ```sh sudo usermod -a -G disk ``` -3. Assign capabilities to 'hdd_reader' since SCSI kernel module requires rawio capability to send ATA PASS-THROUGH (12) command and NVMe kernel module requires admin capability to send Admin Command. +3. SCSIカーネルモジュールがATA PASS-THROUGH (12)コマンドを送信するには `rawio` 機能が必要で、NVMeカーネルモジュールは管理コマンドを送信するには `admin` 機能が必要なので、`hdd_reader`に機能を割り当てます。 + ```sh sudo setcap 'cap_sys_rawio=ep cap_sys_admin=ep' install/system_monitor/lib/system_monitor/hdd_reader ``` -4. Run 'hdd_reader' as the user you created, and run system_monitor as a generic user. +4. 作成したユーザーとして `hdd_reader` を実行し、一般的ユーザーとして `system_monitor` を実行します。 + ```sh su install/system_monitor/lib/system_monitor/hdd_reader ``` -### See also +### 関連情報 [hdd_reader](docs/hdd_reader.md) -## GPU Monitor for intel platform +## インテルプラットフォームのGPUモニター -Currently GPU monitor for intel platform only supports NVIDIA GPU whose information can be accessed by NVML API. +現在、インテルプラットフォームのGPUモニターは、NVML APIから情報にアクセスできるNVIDIA GPUのみをサポートしています。 -Also you need to install CUDA libraries. -For installation instructions for CUDA 10.0, see [NVIDIA CUDA Installation Guide for Linux](https://docs.nvidia.com/cuda/archive/10.0/cuda-installation-guide-linux/index.html). +また、CUDAライブラリのインストールが必要です。 +CUDA 10.0のインストール手順については、[NVIDIA CUDAインストールガイドfor Linux](https://docs.nvidia.com/cuda/archive/10.0/cuda-installation-guide-linux/index.html)を参照してください。 -## Voltage monitor for CMOS Battery +## CMOSバッテリの電圧モニター + +一部のプラットフォームには、RTCとCMOS用の内蔵バッテリがあります。このノードは、cat /proc/driver/rtcの実行結果からバッテリの状態を判断します。 +また、lm-sensorsがインストールされていれば、結果を利用することが可能です。 +ただし、sensorsの戻り値はチップセットによって異なるため、対応する電圧を抽出するための文字列を設定する必要があります。 +また、警告とエラーの電圧を設定する必要があります。 +たとえば、電圧が2.9V未満になると警告し、2.7V未満になるとエラーを出す場合。 +チップセットnct6106でのsensorsの実行結果は次のとおりで、「in7:」はCMOSバッテリの電圧です。 -Some platforms have built-in batteries for the RTC and CMOS. This node determines the battery status from the result of executing cat /proc/driver/rtc. -Also, if lm-sensors is installed, it is possible to use the results. -However, the return value of sensors varies depending on the chipset, so it is necessary to set a string to extract the corresponding voltage. -It is also necessary to set the voltage for warning and error. -For example, if you want a warning when the voltage is less than 2.9V and an error when it is less than 2.7V. -The execution result of sensors on the chipset nct6106 is as follows, and "in7:" is the voltage of the CMOS battery. ```txt $ sensors @@ -217,7 +228,8 @@ fan1: 2789 RPM (min = 0 RPM) fan2: 0 RPM (min = 0 RPM) ``` -The setting value of voltage_monitor.param.yaml is as follows. +次の通り、voltage_monitor.param.yaml の設定値です。 + ```yaml /**: @@ -227,9 +239,10 @@ The setting value of voltage_monitor.param.yaml is as follows. cmos_battery_label: "in7:" ``` -The above values of 2.7V and 2.90V are hypothetical. Depending on the motherboard and chipset, the value may vary. However, if the voltage of the lithium battery drops below 2.7V, it is recommended to replace it. -In the above example, the message output to the topic /diagnostics is as follows. -If the voltage < 2.9V then: +以下の2.7Vと2.90Vの値は仮説です。マザーボードとチップセットによって値は異なる場合があります。ただし、リチウム電池の電圧が2.7Vを下回った場合は、交換することをお勧めします。 +上記の例では、トピック/診断に出力されるメッセージは次のとおりです。 +電圧<2.9Vの場合: + ```txt name: /autoware/system/resource_monitoring/voltage/cmos_battery @@ -240,7 +253,8 @@ If the voltage < 2.9V then: value: Low Battery ``` -If the voltage < 2.7V then: +電圧 < 2.7V の場合: + ```txt name: /autoware/system/resource_monitoring/voltage/cmos_battery @@ -251,7 +265,8 @@ If the voltage < 2.7V then: value: Battery Died ``` -If neither, then: +そうでない場合は、 + ```txt name: /autoware/system/resource_monitoring/voltage/cmos_battery @@ -262,11 +277,12 @@ If neither, then: value: OK ``` -If the CMOS battery voltage drops less than voltage_error or voltage_warn,It will be a warning. -If the battery runs out, the RTC will stop working when the power is turned off. However, since the vehicle can run, it is not an error. The vehicle will stop when an error occurs, but there is no need to stop immediately. -It can be determined by the value of "Low Battery" or "Battery Died". +CMOS バッテリー電圧が `voltage_error` または `voltage_warn` より低下した場合、警告となります。 +バッテリーが切れた場合、電源がオフになると RTC の動作が停止します。ただし、車両が走行できるため、これはエラーではありません。エラーが発生すると車両は停止しますが、すぐに停止する必要はありません。 +「Low Battery」または「Battery Died」の値で判断できます。 + +## UML 図 -## UML diagrams +[クラス図](docs/class_diagrams.md) を参照してください。 +[シーケンス図](docs/seq_diagrams.md) を参照してください。 -See [Class diagrams](docs/class_diagrams.md). -See [Sequence diagrams](docs/seq_diagrams.md). diff --git a/system/topic_state_monitor/README.md b/system/topic_state_monitor/README.md index 28333305ef5a9..1e9f4b62709bb 100644 --- a/system/topic_state_monitor/README.md +++ b/system/topic_state_monitor/README.md @@ -1,60 +1,91 @@ # topic_state_monitor -## Purpose +## 目的 -This node monitors input topic for abnormalities such as timeout and low frequency. -The result of topic status is published as diagnostics. +このノードは異常なタイムアウトや低周波などの入力トピックを監視します。 +トピックステータスの結果は診断として公開されます。 -## Inner-workings / Algorithms +## 内部処理 / アルゴリズム -The types of topic status and corresponding diagnostic status are following. +トピックステータスの種類と対応する診断ステータスは次のとおりです。 -| Topic status | Diagnostic status | Description | -| ------------- | ----------------- | ---------------------------------------------------- | -| `OK` | OK | The topic has no abnormalities | -| `NotReceived` | ERROR | The topic has not been received yet | -| `WarnRate` | WARN | The frequency of the topic is dropped | -| `ErrorRate` | ERROR | The frequency of the topic is significantly dropped | -| `Timeout` | ERROR | The topic subscription is stopped for a certain time | +| トピック状態 | 診断状態 | 説明 | +|---|---|---| +| `OK` | OK | トピックに異常なし | +| `NotReceived` | ERROR | トピックが未受信 | +| `WarnRate` | WARN | トピックの受信頻度が低下 | +| `ErrorRate` | ERROR | トピックの受信頻度が大幅に低下 | +| `Timeout` | ERROR | トピックサブスクリプションが一定時間停止 | -## Inputs / Outputs +## 入力 / 出力 -### Input +### 入力 -| Name | Type | Description | -| -------- | -------- | --------------------------------- | -| any name | any type | Subscribe target topic to monitor | +| 名前 | タイプ | 説明 | +|---|---|---| +| 任意の名前 | 任意のタイプ | 監視対象のトピックを購読 | -### Output +### 出力 -| Name | Type | Description | +Autowareの自動運転ソフトウェアは、Perception、Planning、Controlの3つの主要なコンポーネントで構成されています。これらのコンポーネントは、次のタスクを実行します。 + +**Perception** + +* センサーからの生のデータを処理し、車載環境の3Dモデルを作成します。 +* 物体検出、物体分類、セグメンテーションなどのタスクを実行します。 + +**Planning** + +* 環境マップを使用し、自車位置を決定します。 +* 障害物を回避し、安全な経路を生成する、経路計画と軌跡生成を行います。 + +**Control** + +* 経路に従って車両を制御し、加速、ブレーキング、ステアリングを行います。 +* 速度、加速度、ヨー角などの逸脱量を最小限に抑えます。 + +**Autoware**では、Planningコンポーネントが以下を行います。 + +* Planningモジュールの主な機能は'post resampling'後のパス生成です。 +* パス生成は、'post resampling'後の以下の情報に基づいて行われます。 +* 'post resampling'後の自車位置と周囲環境のマップ +* 経路制約(速度制限、道路標識など) +* 障害物の検出結果と予測された経路 + +**Autoware**では、以下のPlanningアルゴリズムが実装されています。 + +* **ダイナミックウィンドウアプローチ(DWA):** リアルタイムで経路を生成し、障害物を回避するためのアルゴリズムです。 +* **モデル予測制御(MPC):** 制御入力のシーケンスを最適化して、 заданную経路を追従するためのアルゴリズムです。 + +| 名前 | 型 | 説明 | | -------------- | --------------------------------- | ------------------- | -| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | Diagnostics outputs | +| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断結果出力 | -## Parameters +## パラメータ -### Node Parameters +### ノードパラメータ -| Name | Type | Default Value | Description | -| ----------------- | ------ | ------------- | ------------------------------------------------------------- | -| `topic` | string | - | Name of target topic | -| `topic_type` | string | - | Type of target topic (used if the topic is not transform) | -| `frame_id` | string | - | Frame ID of transform parent (used if the topic is transform) | -| `child_frame_id` | string | - | Frame ID of transform child (used if the topic is transform) | -| `transient_local` | bool | false | QoS policy of topic subscription (Transient Local/Volatile) | -| `best_effort` | bool | false | QoS policy of topic subscription (Best Effort/Reliable) | -| `diag_name` | string | - | Name used for the diagnostics to publish | -| `update_rate` | double | 10.0 | Timer callback period [Hz] | +| 名称 | 型 | デフォルト値 | 説明 | +| ----------------- | ------ | ------------- | ------------------------------------------------------------------- | +| `topic` | 文字列 | - | ターゲット・トピック名 | +| `topic_type` | 文字列 | - | ターゲット・トピックの型 (トピックが変換でない場合に使用する) | +| `frame_id` | 文字列 | - | 変換親のフレーム ID (トピックが変換の場合に使用する) | +| `child_frame_id` | 文字列 | - | 変換子のフレーム ID (トピックが変換の場合に使用する) | +| `transient_local` | ブール | false | トピック・サブスクリプションの QoS ポリシー (Transient Local/Volatile) | +| `best_effort` | ブール | false | トピック・サブスクリプションの QoS ポリシー (Best Effort/Reliable) | +| `diag_name` | 文字列 | - | 診断の発行に使用される名前 | +| `update_rate` | double | 10.0 | タイマー・コールバック期間 [Hz] | -### Core Parameters +### コアパラメータ -| Name | Type | Default Value | Description | -| ------------- | ------ | ------------- | ---------------------------------------------------------------------------------------------------- | -| `warn_rate` | double | 0.5 | If the topic rate is lower than this value, the topic status becomes `WarnRate` | -| `error_rate` | double | 0.1 | If the topic rate is lower than this value, the topic status becomes `ErrorRate` | -| `timeout` | double | 1.0 | If the topic subscription is stopped for more than this time [s], the topic status becomes `Timeout` | -| `window_size` | int | 10 | Window size of target topic for calculating frequency | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------- | ------ | ------------- | ---------------------------------------------------------------------------------------------------------- | +| `warn_rate` | double | 0.5 | トピックレートがこの値を下回ると、トピックステータスは`WarnRate`になる | +| `error_rate` | double | 0.1 | トピックレートがこの値を下回ると、トピックステータスは`ErrorRate`になる | +| `timeout` | double | 1.0 | トピックサブスクリプションがこの時間を超えて停止すると、トピックステータスは`Timeout`になる | +| `window_size` | int | 10 | 周波数の計算用のターゲットトピックのウィンドウサイズ | -## Assumptions / Known limits +## 想定条件 / 制約 TBD. + diff --git a/system/velodyne_monitor/README.md b/system/velodyne_monitor/README.md index f8381dbd41159..d4ccaf17ec2fa 100644 --- a/system/velodyne_monitor/README.md +++ b/system/velodyne_monitor/README.md @@ -1,83 +1,80 @@ # velodyne_monitor -## Purpose +## 目的 -This node monitors the status of Velodyne LiDARs. -The result of the status is published as diagnostics. -Take care not to use this diagnostics to decide the lidar error. -Please read [Assumptions / Known limits](#assumptions--known-limits) for the detail reason. +このノードは、Velodyne LiDAR のステータスを監視します。 +ステータスの結果は診断として公開されます。この診断を使用して LiDAR エラーを判定することは避けてください。 +詳細な理由については[前提条件/既知の制限事項](#assumptions--known-limits) をお読みください。 -## Inner-workings / Algorithms +## 内部動作 / アルゴリズム -The status of Velodyne LiDAR can be retrieved from `http://[ip_address]/cgi/{info, settings, status, diag}.json`. +Velodyne LiDAR のステータスは `http://[ip_address]/cgi/{info, settings, status, diag}.json` から取得できます。 -The types of abnormal status and corresponding diagnostics status are following. +異常ステータスと対応する診断ステータスのタイプは次のとおりです。 -| Abnormal status | Diagnostic status | -| --------------------------------------------------- | ----------------- | -| No abnormality | OK | -| Top board temperature is too cold | ERROR | -| Top board temperature is cold | WARN | -| Top board temperature is too hot | ERROR | -| Top board temperature is hot | WARN | -| Bottom board temperature is too cold | ERROR | -| Bottom board temperature is cold | WARN | -| Bottom board temperature is too hot | ERROR | -| Bottom board temperature is hot | WARN | -| Rpm(Rotations per minute) of the motor is too low | ERROR | -| Rpm(Rotations per minute) of the motor is low | WARN | -| Connection error (cannot get Velodyne LiDAR status) | ERROR | +| 異常状態 | 診断ステータス | +| -------------------------------------------------- | ---------------- | +| 異常なし | OK | +| 基板の上面の温度が低すぎる | ERROR | +| 基板の上面の温度が低い | WARN | +| 基板の上面の温度が高すぎる | ERROR | +| 基板の上面の温度が高い | WARN | +| 基板の下面の温度が低すぎる | ERROR | +| 基板の下面の温度が低い | WARN | +| 基板の下面の温度が高すぎる | ERROR | +| 基板の下面の温度が高い | WARN | +| モーターの回転数(rpm)が低すぎる | ERROR | +| モーターの回転数(rpm)が低い | WARN | +| 接続エラー(Velodyne LiDARステータスを取得できない) | ERROR | -## Inputs / Outputs +## 入力 / 出力 -### Input +### 入力 -None +なし -### Output +### 出力 -| Name | Type | Description | +| Name | Type | 説明 | | -------------- | --------------------------------- | ------------------- | -| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | Diagnostics outputs | +| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断出力 | -## Parameters +## パラメータ -### Node Parameters +### ノードパラメータ -| Name | Type | Default Value | Description | -| --------- | ------ | ------------- | --------------------------------------------------------- | -| `timeout` | double | 0.5 | Timeout for HTTP request to get Velodyne LiDAR status [s] | +| 名前 | 型 | デフォルト値 | 説明 | +| --------- | ------ | ------------- | -------------------------------------------------------- | +| `timeout` | double | 0.5 | Velodyne LiDAR のステータスを取得するための HTTP リクエストのタイムアウト [s] | -### Core Parameters +### 主要パラメータ -| Name | Type | Default Value | Description | +| 名前 | 型 | デフォルト値 | 説明 | | ----------------- | ------ | --------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `ip_address` | string | "192.168.1.201" | IP address of target Velodyne LiDAR | -| `temp_cold_warn` | double | -5.0 | If the temperature of Velodyne LiDAR is lower than this value, the diagnostics status becomes WARN [°C] | -| `temp_cold_error` | double | -10.0 | If the temperature of Velodyne LiDAR is lower than this value, the diagnostics status becomes ERROR [°C] | -| `temp_hot_warn` | double | 75.0 | If the temperature of Velodyne LiDAR is higher than this value, the diagnostics status becomes WARN [°C] | -| `temp_hot_error` | double | 80.0 | If the temperature of Velodyne LiDAR is higher than this value, the diagnostics status becomes ERROR [°C] | -| `rpm_ratio_warn` | double | 0.80 | If the rpm rate of the motor (= current rpm / default rpm) is lower than this value, the diagnostics status becomes WARN | -| `rpm_ratio_error` | double | 0.70 | If the rpm rate of the motor (= current rpm / default rpm) is lower than this value, the diagnostics status becomes ERROR | - -### Config files - -Config files for several velodyne models are prepared. -The `temp_***` parameters are set with reference to the operational temperature from each datasheet. -Moreover, the `temp_hot_***` of each model are set highly as 20 from operational temperature. -Now, `VLP-16.param.yaml` is used as default argument because it is lowest spec. - -| Model Name | Config name | Operational Temperature [℃] | -| -------------- | ------------------------- | --------------------------- | -| VLP-16 | VLP-16.param.yaml | -10 to 60 | -| VLP-32C | VLP-32C.param.yaml | -20 to 60 | -| VLS-128 | VLS-128.param.yaml | -20 to 60 | -| Velarray M1600 | Velarray_M1600.param.yaml | -40 to 85 | -| HDL-32E | HDL-32E.param.yaml | -10 to 60 | - -## Assumptions / Known limits - -This node uses the [http_client](https://github.com/microsoft/cpprestsdk) and request results by GET method. -It takes a few seconds to get results, or generate a timeout exception if it does not succeed the GET request. -This occurs frequently and the diagnostics aggregator output STALE. -Therefore I recommend to stop using this results to decide the lidar error, and only monitor it to confirm lidar status. +| `ip_address` | 文字列 | "192.168.1.201" | ターゲット Velodyne LiDAR の IP アドレス | +| `temp_cold_warn` | double | -5.0 | Velodyne LiDAR の温度がこの値を下回ると、診断ステータスが WARN になります [°C] | +| `temp_cold_error` | double | -10.0 | Velodyne LiDAR の温度がこの値を下回ると、診断ステータスが ERROR になります [°C] | +| `temp_hot_warn` | double | 75.0 | Velodyne LiDAR の温度がこの値を超えると、診断ステータスが WARN になります [°C] | +| `temp_hot_error` | double | 80.0 | Velodyne LiDAR の温度がこの値を超えると、診断ステータスが ERROR になります [°C] | +| `rpm_ratio_warn` | double | 0.80 | モーターの回転数率(= 現在の回転数 / デフォルト回転数)がこの値を下回ると、診断ステータスが WARN になります | +| `rpm_ratio_error` | double | 0.70 | モーターの回転数率(= 現在の回転数 / デフォルト回転数)がこの値を下回ると、診断ステータスが ERROR になります | + +### 設定ファイル + +いくつかの Velodyne モデルの設定ファイルは準備されています。 +`temp_***` パラメータは各データシートの動作温度を基準に設定されています。 +さらに、各モデルの `temp_hot_***` は動作温度より 20 高く設定されています。 +現在、`VLP-16.param.yaml` が最も低い仕様であるためデフォルト引数として使用されています。 + +| モデル名 | 設定名 | 実稼働温度 [℃] | +| --------------------- | -------------------------------------- | ------------------------- | +| VLP-16 | VLP-16.param.yaml | -10 ~ 60 | +| VLP-32C | VLP-32C.param.yaml | -20 ~ 60 | +| VLS-128 | VLS-128.param.yaml | -20 ~ 60 | +| Velarray M1600 | Velarray_M1600.param.yaml | -40 ~ 85 | +| HDL-32E | HDL-32E.param.yaml | -10 ~ 60 | + +## 前提 / 制限事項 + +このノードは[http_client](https://github.com/microsoft/cpprestsdk)を使用し、結果をGETメソッドで要求します。このノードは結果を取得するのに数秒かかります。GETリクエストが成功しない場合はタイムアウト例外を生成します。これは頻繁に発生し、診断アグリゲータが出力を古くしたと判断します。そのため、この結果をレーザスキャナのエラーを判断するために使用しなくなり、レーザスキャナのステータスを確認するためにのみ監視することをお勧めします。 + diff --git a/tools/reaction_analyzer/README.md b/tools/reaction_analyzer/README.md index 3ff1168f96bfb..fac0822755ed6 100644 --- a/tools/reaction_analyzer/README.md +++ b/tools/reaction_analyzer/README.md @@ -1,200 +1,156 @@ # Reaction Analyzer -## Description +## 説明 -The main purpose of the reaction analyzer package is to measure the reaction times of various nodes within a ROS-based -autonomous driving simulation environment by subscribing to pre-determined topics. This tool is particularly useful for -evaluating the performance of perception, planning, and control pipelines in response to dynamic changes in the -environment, such as sudden obstacles. To be able to measure both control outputs and perception outputs, it was -necessary to divide the node into two running_mode: `planning_control` and `perception_planning`. +reaction analyzerパッケージの主な目的は、ROSベースの自動運転シミュレーション環境内のさまざまなノードの反応時間を、事前に決定されたトピックをサブスクライブすることで測定することです。このツールは特に、急な障害物などの環境の変化に対する知覚、Plannining、制御パイプラインのパフォーマンスを評価するのに役立ちます。制御出力と知覚出力を両方を測定できるように、ノードを2つのrunning_mode(`planning_control`と`perception_planning`)に分割する必要がありました。 ![ReactionAnalyzerDesign.png](media%2FReactionAnalyzerDesign.png) -### Planning Control Mode +### Plannining制御モード -In this mode, the reaction analyzer creates a dummy publisher for the PredictedObjects and PointCloud2 topics. In the -beginning of the test, it publishes the initial position of the ego vehicle and the goal position to set the test -environment. Then, it spawns a sudden obstacle in front of the ego vehicle. After the obstacle is spawned, it starts to -search reacted messages of the planning and control nodes in the pre-determined topics. When all the topics are reacted, -it calculates the reaction time of the nodes and statistics by comparing `reacted_times` of each of the nodes -with `spawn_cmd_time`, and it creates a csv file to store the results. +このモードでは、reaction analyzerは、PredictedObjectsトピックとPointCloud2トピックのダミーパブリッシャーを作成します。テストの開始時に、自己位置の初期値と目標値を公開して、テスト環境を設定します。次に、自己車両の前に突然の障害物を産出します。障害物が発生すると、事前に決定されたトピックで、Planniningノードと制御ノードの応答メッセージの検索が開始されます。すべてのトピックが反応すると、各ノードの`spawn_cmd_time`に対する`reacted_times`を比較して、ノードの反応時間と統計を計算し、結果を格納するCSVファイルを作成します。 -### Perception Planning Mode +### 知覚Planniningモード -In this mode, the reaction analyzer reads the rosbag files which are recorded from AWSIM, and it creates a topic -publisher for each topic inside the rosbag to replay the rosbag. It reads two rosbag files: `path_bag_without_object` -and `path_bag_with_object`. Firstly, it replays the `path_bag_without_object` to set the initial position of the ego -vehicle and the goal position. After `spawn_time_after_init` seconds , it replays the `path_bag_with_object` to spawn a -sudden obstacle in front of the ego vehicle. After the obstacle is spawned, it starts to search the reacted messages of -the perception and planning nodes in the pre-determined topics. When all the topics are reacted, it calculates the -reaction time of the nodes and statistics by comparing `reacted_times` of each of the nodes with `spawn_cmd_time`, and -it creates a csv file to store the results. +このモードでは、reaction analyzerはAWSIMから記録されたrosbagファイルを読み取り、rosbagを再生するためにrosbag内の各トピックのトピックパブリッシャーを作成します。`path_bag_without_object`と`path_bag_with_object`の2つのrosbagファイルが読み取られます。最初に、`path_bag_without_object`を再生して自己車両の初期位置と目標位置を設定します。`spawn_time_after_init`秒後、`path_bag_with_object`を再生して、自己車両の前に突然の障害物を産出します。障害物が発生すると、事前に決定されたトピックで、知覚ノードとPlanniningノードの応答メッセージの検索が開始されます。すべてのトピックが反応すると、各ノードの`spawn_cmd_time`に対する`reacted_times`を比較して、ノードの反応時間と統計を計算し、結果を格納するCSVファイルを作成します。 -#### Point Cloud Publisher Type +#### Point Cloud Publisherのタイプ -To get better analyze for Perception & Sensing pipeline, the reaction analyzer can publish the point cloud messages in 3 -different ways: `async_header_sync_publish`, `sync_header_sync_publish` or `async_publish`. (`T` is the period of the -lidar's output) +知覚・センシングパイプラインのより優れた分析を得るために、reaction analyzerは3つの異なる方法(`async_header_sync_publish`、`sync_header_sync_publish`、または`async_publish`)でポイントクラウドメッセージを公開できます。(`T`はlidarの出力の周期です) ![PointcloudPublisherType.png](media%2FPointcloudPublisherType.png) -- `async_header_sync_publish`: It publishes the point cloud messages synchronously with asynchronous header times. It - means that each of the lidar's output will be published at the same time, but the headers of the point cloud messages - includes different timestamps because of the phase difference. -- `sync_header_sync_publish`: It publishes the point cloud messages synchronously with synchronous header times. It - means that each of the lidar's output will be published at the same time, and the headers of the point cloud messages - includes the same timestamps. -- `async_publish`: It publishes the point cloud messages asynchronously. It means that each of the lidar's output will - be published at different times. +- `async_header_sync_publish`:非同期ヘッダ時間と同期してポイントクラウドメッセージを公開します。つまり、lidarの出力はすべて同じ時間に公開されますが、ポイントクラウドメッセージのヘッダには位相差のために異なるタイムスタンプが含まれます。 +- `sync_header_sync_publish`:同期ヘッダ時間と同期してポイントクラウドメッセージを公開します。つまり、lidarの出力はすべて同じ時間に公開され、ポイントクラウドメッセージのヘッダには同じタイムスタンプが含まれます。 +- `async_publish`:非同期にポイントクラウドメッセージを公開します。つまり、lidarの出力はすべて異なる時間に公開されます。 -## Usage +## 使用法 -The common parameters you need to define for both running modes are `output_file_path`, `test_iteration`, -and `reaction_chain` list. `output_file_path` is the output file path is the path where the results and statistics -will be stored. `test_iteration` defines how many tests will be performed. The `reaction_chain` list is the list of the -pre-defined topics you want to measure their reaction times. +どちらのランニングモードでも定義する必要がある一般的なパラメータは、`output_file_path`、`test_iteration`、および`reaction_chain`リストです。`output_file_path`は、結果と統計が格納される出力ファイルのパスです。`test_iteration`は、実行されるテストの数を定義します。`reaction_chain`リストは、反応時間を測定する事前に定義されたトピックのリストです。 -**IMPORTANT:** Ensure the `reaction_chain` list is correctly defined: +**重要:** `reaction_chain`リストが正しく定義されていることを確認してください。 -- For `perception_planning` mode, **do not** define `Control` nodes. -- For `planning_control` mode, **do not** define `Perception` nodes. +- `perception_planning`モードでは、`Control`ノードを定義しないでください。 -### Prepared Test Environment +### 事前に準備されたテスト環境 -- Download the demonstration test map from the - link [here](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip). After - downloading, - extract the zip file and use its path as `[MAP_PATH]` in the following commands. +- デモテスト用マップは、[こちら](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip)のリンクからダウンロードできます。ダウンロード後、zipファイルを展開して、パスを以下のコマンドの`[MAP_PATH]`として使用します。 -#### Planning Control Mode +#### 計画制御モード + +- 次の`reaction_chain`リストで、計画ノードと制御ノードのみを定義する必要があります。デフォルトのパラメータで、次のコマンドでテストを開始できます。 -- You need to define only Planning and Control nodes in the `reaction_chain` list. With the default parameters, - you can start to test with the following command: ```bash ros2 launch reaction_analyzer reaction_analyzer.launch.xml running_mode:=planning_control vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit map_path:=[MAP_PATH] ``` -After the command, the `simple_planning_simulator` and the `reaction_analyzer` will be launched. It will automatically -start to test. After the test is completed, the results will be stored in the `output_file_path` you defined. +コマンド実行後、`simple_planning_simulator` と `reaction_analyzer` が起動されます。テストが自動的に開始されます。テストの終了後、結果は定義した `output_file_path` に保存されます。 + +#### 知覚プランニングモード -#### Perception Planning Mode +- Google Drive から rosbag ファイルをダウンロードします。 + リンクは [こちら](https://drive.google.com/drive/folders/1eJMEdt4WbU-W6MPXlNTkIhZtwpof0HcO?usp=sharing)。 +- zip ファイルを展開し、`.db3` ファイルのパスをパラメーター `path_bag_without_object` と `path_bag_with_object` に設定します。 +- 以下のコマンドでテストを開始できます。 -- Download the rosbag files from the Google Drive - link [here](https://drive.google.com/drive/folders/1eJMEdt4WbU-W6MPXlNTkIhZtwpof0HcO?usp=sharing). -- Extract the zip file and set the path of the `.db3` files to parameters `path_bag_without_object` - and `path_bag_with_object`. -- You can start to test with the following command: ```bash ros2 launch reaction_analyzer reaction_analyzer.launch.xml running_mode:=perception_planning vehicle_model:=sample_vehicle sensor_model:=awsim_labs_sensor_kit map_path:=[MAP_PATH] ``` -- On the first run of the tool in perception_planning mode, initialization might take longer than expected. Please allow some time for the process to complete. +- 最初に perception_planning モードでツールを実行する際、初期化が予想より長引く場合があります。処理が完了するまでしばらくお待ちください。 -After the command, the `e2e_simulator` and the `reaction_analyzer` will be launched. It will automatically start -to test. After the test is completed, the results will be stored in the `output_file_path` you defined. +コマンドを実行すると、 `e2e_simulator` と `reaction_analyzer` が起動します。自動的にテストが開始されます。テストが完了すると、定義した `output_file_path` に結果が保存されます。 -#### Prepared Test Environment +#### 準備されたテスト環境 -**Scene without object:** +**障害物なしのシーン:** ![sc1-awsim.png](media%2Fsc1-awsim.png) ![sc1-rviz.png](media%2Fsc1-rviz.png) -**Scene object:** +**障害物のあるシーン:** ![sc2-awsim.png](media%2Fsc2-awsim.png) ![sc2-rviz.png](media%2Fsc2-rviz.png) -### Custom Test Environment +### カスタムテスト環境 -**If you want to run the reaction analyzer with your custom test environment, you need to redefine some of the -parameters. -The parameters you need to redefine are `initialization_pose`, `entity_params`, `goal_pose`, and `topic_publisher` ( -for `perception_planning` mode) parameters.** +**カスタムテスト環境でリアクションアナライザを実行する場合は、パラメータの一部を再定義する必要があります。 +再定義する必要があるパラメータは `initialization_pose`, `entity_params`, `goal_pose`, `topic_publisher` (`perception_planning` モード用)パラメータです。** + +- `initialization_pose`, `entity_params`, `goal_pose` を設定するには: +- AWSIM 環境を実行します。AWSIM のチュートリアルは [こちら](https://autowarefoundation.github.io/AWSIM/main/GettingStarted/QuickStartDemo/) からご覧いただけます。 +- 次のコマンドで e2e_simulator を実行します。 -- To set `initialization_pose`, `entity_params`, `goal_pose`: -- Run the AWSIM environment. Tutorial for AWSIM can be found - [here](https://autowarefoundation.github.io/AWSIM/main/GettingStarted/QuickStartDemo/). -- Run the e2e_simulator with the following command: ```bash ros2 launch autoware_launch e2e_simulator.launch.xml vehicle_model:=sample_vehicle sensor_model:=awsim_labs_sensor_kit map_path:=[MAP_PATH] ``` -- After the EGO is initialized, you can position the ego vehicle in the desired location using the `2D Pose Estimate` button in RViz. -- After the EGO located in desired position, please localize the dummy obstacle by using the traffic controller. You can access the traffic control section by pressing the 'ESC' key. +- EGO が初期化された後、RViz の `2D Pose Estimate` ボタンを使用して、自車を希望の位置に配置できます。 +- 自車が希望の位置に配置された後、交通管制を利用してダミー障害物を配置してください。交通管制セクションには Esc キーを押してアクセスできます。 + +**EGO とダミー車両を配置したら、これらのエンティティの位置を `reaction_analyzer.param.yaml` 内の地図フレームに書き込む必要があります。この方法:** -**After localize EGO and dummy vehicle, we should write the positions of these entities in the map frame -in `reaction_analyzer.param.yaml`. To achieve this:** +- `/awsim/ground_truth/vehicle/pose` トピックから初期化ポーズを取得します。 +- `/perception/object_recognition/objects` トピックからエンティティのパラメータを取得します。 +- `/planning/mission_planning/goal` トピックから目標ポーズを取得します。 -- Get initialization pose from `/awsim/ground_truth/vehicle/pose` topic. -- Get entity params from `/perception/object_recognition/objects` topic. -- Get goal pose from `/planning/mission_planning/goal` topic. +**注:`initialization_pose` は `planning_control` モードでのみ有効です。** -**PS: `initialization_pose` is only valid for `planning_control` mode.** +- パラメータが記録された後、テスト用の ROS バッグを記録する必要があります。ROS バッグを記録するには、次のコマンドを使用できます。 -- After the parameters were noted, we should record the rosbags for the test. To record the rosbags, you can use the - following command: ```bash ros2 bag record --all ``` -- You should record two rosbags: one without the object and one with the object. You can use the traffic controller to - spawn the object in front of the EGO vehicle or remove it. - -**NOTE: You should record the rosbags in the same environment with the same position of the EGO vehicle. You don't need -to run Autoware while recording.** - -- After you record the rosbags, you can set the `path_bag_without_object` and `path_bag_with_object` parameters with the - paths of the recorded rosbags. - -## Results - -The results will be stored in the `csv` file format and written to the `output_file_path` you defined. It shows each -pipeline of the Autoware by using header timestamp of the messages, and it reports `Node Latency`, `Pipeline Latency`, -and `Total Latency` -for each of the nodes. - -- `Node Latency`: The time difference between previous and current node's reaction timestamps. If it is the first node - in the pipeline, it is same as `Pipeline Latency`. -- `Pipeline Latency`: The time difference between published time of the message and pipeline header time. -- `Total Latency`: The time difference between the message's published timestamp and the spawn obstacle command sent - timestamp. - -## Parameters - -| Name | Type | Description | -| ---------------------------------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| `timer_period` | double | [s] Period for the main processing timer. | -| `test_iteration` | int | Number of iterations for the test. | -| `output_file_path` | string | Directory path where test results and statistics will be stored. | -| `spawn_time_after_init` | double | [s] Time delay after initialization before spawning objects. Only valid `perception_planning` mode. | -| `spawn_distance_threshold` | double | [m] Distance threshold for spawning objects. Only valid `planning_control` mode. | -| `poses.initialization_pose` | struct | Initial pose of the vehicle, containing `x`, `y`, `z`, `roll`, `pitch`, and `yaw` fields. Only valid `planning_control` mode. | -| `poses.entity_params` | struct | Parameters for entities (e.g., obstacles), containing `x`, `y`, `z`, `roll`, `pitch`, `yaw`, `x_dimension`, `y_dimension`, and `z_dimension`. | -| `poses.goal_pose` | struct | Goal pose of the vehicle, containing `x`, `y`, `z`, `roll`, `pitch`, and `yaw` fields. | -| `topic_publisher.path_bag_without_object` | string | Path to the ROS bag file without objects. Only valid `perception_planning` mode. | -| `topic_publisher.path_bag_with_object` | string | Path to the ROS bag file with objects. Only valid `perception_planning` mode. | -| `topic_publisher.spawned_pointcloud_sampling_distance` | double | [m] Sampling distance for point clouds of spawned objects. Only valid `planning_control` mode. | -| `topic_publisher.dummy_perception_publisher_period` | double | [s] Publishing period for the dummy perception data. Only valid `planning_control` mode. | -| `topic_publisher.pointcloud_publisher.pointcloud_publisher_type` | string | Defines how the PointCloud2 messages are going to be published. Modes explained above. | -| `topic_publisher.pointcloud_publisher.pointcloud_publisher_period` | double | [s] Publishing period of the PointCloud2 messages. | -| `topic_publisher.pointcloud_publisher.publish_only_pointcloud_with_object` | bool | Default false. Publish only the point cloud messages with the object. | -| `reaction_params.first_brake_params.debug_control_commands` | bool | Debug publish flag. | -| `reaction_params.first_brake_params.control_cmd_buffer_time_interval` | double | [s] Time interval for buffering control commands. | -| `reaction_params.first_brake_params.min_number_descending_order_control_cmd` | int | Minimum number of control commands in descending order for triggering brake. | -| `reaction_params.first_brake_params.min_jerk_for_brake_cmd` | double | [m/s³] Minimum jerk value for issuing a brake command. | -| `reaction_params.search_zero_vel_params.max_looking_distance` | double | [m] Maximum looking distance for zero velocity on trajectory | -| `reaction_params.search_entity_params.search_radius` | double | [m] Searching radius for spawned entity. Distance between ego pose and entity pose. | -| `reaction_chain` | struct | List of the nodes with their topics and topic's message types. | - -## Limitations - -- Reaction analyzer has some limitation like `PublisherMessageType`, `SubscriberMessageType` and `ReactionType`. It is - currently supporting following list: - -- **Publisher Message Types:** +- オブジェクトがない状態とオブジェクトがある状態の 2 つの rosbag を記録する必要があります。トラフィックコントローラーを使用して、EGO ビークルの前にオブジェクトを生成するか削除できます。 + +**注: 記録時に同じ環境で EGO ビークルの同じ位置を使用する必要があります。記録中に Autoware を実行する必要はありません。** + +- Rosbag を記録したら、`path_bag_without_object` パラメータと `path_bag_with_object` パラメータに、記録された rosbag のパスを設定できます。 + +## 結果 + +結果は `csv` ファイル形式で保存され、定義した `output_file_path` に書き込まれます。メッセージのヘッダータイムスタンプを使用して Autoware の各パイプラインを表示し、各ノードの `ノード遅延`、`パイプライン遅延`、および `合計遅延` をレポートします。 + +- `ノード遅延`: 直前のノードの反応タイムスタンプと現在のノードの反応タイムスタンプの時差です。パイプライン内の最初のノードの場合、`パイプライン遅延` と同じです。 +- `パイプライン遅延`: メッセージの公開時間とパイプラインヘッダー時間の時差です。 +- `合計遅延`: メッセージの公開タイムスタンプと障害物の生成コマンドが送信されたタイムスタンプの時差です。 + +## パラメータ + +| 名称 | タイプ | 説明 | +| ----------------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| `timer_period` | double | [s] メイン処理タイマーのピリオド。 | +| `test_iteration` | int | テストの繰り返し回数。 | +| `output_file_path` | string | テスト結果と統計情報を格納するディレクトリパス。 | +| `spawn_time_after_init` | double | [s] オブジェクトをスポーンする前の初期化後のタイムディレイ。 `perception_planning` モードでのみ有効。 | +| `spawn_distance_threshold` | double | [m] オブジェクトスポーンの距離しきい値。 `planning_control` モードでのみ有効。 | +| `poses.initialization_pose` | struct | 車両の初期姿勢で `x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。 `planning_control` モードでのみ有効。 | +| `poses.entity_params` | struct | エンティティ(障害物など)のパラメータで `x`, `y`, `z`, `roll`, `pitch`, `yaw`, `x_dimension`, `y_dimension`, `z_dimension` を含む。 | +| `poses.goal_pose` | struct | 車両のゴール姿勢で `x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。 | +| `topic_publisher.path_bag_without_object` | string | オブジェクトなしの ROS バッグファイルへのパス。 `perception_planning` モードでのみ有効。 | +| `topic_publisher.path_bag_with_object` | string | オブジェクトありの ROS バッグファイルへのパス。 `perception_planning` モードでのみ有効。 | +| `topic_publisher.spawned_pointcloud_sampling_distance` | double | [m] スポーンされたオブジェクトの点群のサンプリング距離。 `planning_control` モードでのみ有効。 | +| `topic_publisher.dummy_perception_publisher_period` | double | [s] ダミー知覚データの公開周期。 `planning_control` モードのみ有効。 | +| `topic_publisher.pointcloud_publisher.pointcloud_publisher_type` | string | PointCloud2 メッセージの公開方法を定義します。上記で説明したモード。 | +| `topic_publisher.pointcloud_publisher.pointcloud_publisher_period` | double | [s] PointCloud2 メッセージの公開周期。 | +| `topic_publisher.pointcloud_publisher.publish_only_pointcloud_with_object` | bool | デフォルトは false。オブジェクトのある点群メッセージのみを公開します。 | +| `reaction_params.first_brake_params.debug_control_commands` | bool | デバッグ公開フラグ。 | +| `reaction_params.first_brake_params.control_cmd_buffer_time_interval` | double | [s] 制御コマンドのバッファー処理のタイムインターバル。 | +| `reaction_params.first_brake_params.min_number_descending_order_control_cmd` | int | ブレーキトリガーの降順制御コマンドの最小数。 | +| `reaction_params.first_brake_params.min_jerk_for_brake_cmd` | double | [m/s³] ブレーキコマンドを発行するための最小ジャーク値。 | +| `reaction_params.search_zero_vel_params.max_looking_distance` | double | [m] 軌道上でゼロ速度を探すための最大探索距離。 | +| `reaction_params.search_entity_params.search_radius` | double | [m] スポーンされたエンティティの検索半径。自己位置とエンティティ位置間の距離。 | +| `reaction_chain` | struct | トピックとそのトピックのメッセージタイプを持つノードのリスト。 | + +## 制限 + +- 反応解析器は、`PublisherMessageType`、`SubscriberMessageType`、`ReactionType` などの制限があります。現時点では以下のリストをサポートしています。 + +- **Publisher メッセージ タイプ:** - `sensor_msgs/msg/PointCloud2` - `sensor_msgs/msg/CameraInfo` @@ -208,7 +164,7 @@ for each of the nodes. - `autoware_vehicle_msgs/msg/TurnIndicatorsReport` - `autoware_vehicle_msgs/msg/VelocityReport` -- **Subscriber Message Types:** +- **Subscriber メッセージ タイプ:** - `sensor_msgs/msg/PointCloud2` - `autoware_perception_msgs/msg/DetectedObjects` @@ -217,13 +173,12 @@ for each of the nodes. - `autoware_planning_msgs/msg/Trajectory` - `autoware_control_msgs/msg/Control` -- **Reaction Types:** +- **反応のタイプ:** - `FIRST_BRAKE` - `SEARCH_ZERO_VEL` - `SEARCH_ENTITY` -## Future improvements +## 将来の改善点 + +- 反応分析は、より多くの反応タイプを追加することで改善できます。現在サポートしているのは `FIRST_BRAKE`、`SEARCH_ZERO_VEL`、`SEARCH_ENTITY` だけです。メッセージ タイプごとに反応タイプを追加することで拡張できます。 -- The reaction analyzer can be improved by adding more reaction types. Currently, it is supporting only `FIRST_BRAKE`, - `SEARCH_ZERO_VEL`, and `SEARCH_ENTITY` reaction types. It can be extended by adding more reaction types for each of - the message types. diff --git a/vehicle/autoware_accel_brake_map_calibrator/README.md b/vehicle/autoware_accel_brake_map_calibrator/README.md index 024c8059a169e..69a28ec7a4a36 100644 --- a/vehicle/autoware_accel_brake_map_calibrator/README.md +++ b/vehicle/autoware_accel_brake_map_calibrator/README.md @@ -1,179 +1,182 @@ # accel_brake_map_calibrator -The role of this node is to automatically calibrate `accel_map.csv` / `brake_map.csv` used in the `autoware_raw_vehicle_cmd_converter` node. +本ノードの役割は、`autoware_raw_vehicle_cmd_converter` ノードで使用される `accel_map.csv` / `brake_map.csv` を自動的に較正することです。 -The base map, which is lexus's one by default, is updated iteratively with the loaded driving data. +基本マップ(デフォルトはlexusのもの)が、ロードされた運転データで反復的に更新されます。 -## How to calibrate +## 較正方法 -### Launch Calibrator +### キャリブレータの起動 + +Autoware の起動後、次のコマンドで `autoware_accel_brake_map_calibrator` を実行し、自律走行を行います。注:自律走行中に同じ車両インターフェイスを使用できる場合は、手動走行でもデータを収集できます(例:ジョイスティックの使用)。 -After launching Autoware, run the `autoware_accel_brake_map_calibrator` by the following command and then perform autonomous driving. Note: You can collect data with manual driving if it is possible to use the same vehicle interface as during autonomous driving (e.g. using a joystick). ```sh ros2 launch autoware_accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true ``` -Or if you want to use rosbag files, run the following commands. +もしrosbagファイルを使用したい場合は、以下のコマンドを実行してください。 + ```sh ros2 launch autoware_accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true use_sim_time:=true ros2 bag play --clock ``` -During the calibration with setting the parameter `progress_file_output` to true, the log file is output in [directory of *autoware_accel_brake_map_calibrator*]/config/ . You can also see accel and brake maps in [directory of *autoware_accel_brake_map_calibrator*]/config/accel_map.csv and [directory of *autoware_accel_brake_map_calibrator*]/config/brake_map.csv after calibration. +**キャリブレーション** -### Calibration plugin +パラメータ `progress_file_output` を true に設定してキャリブレーションすると、ログファイルが [autoware_accel_brake_map_calibrator ディレクトリ]/config/ に出力されます。キャリブレーション後は、[autoware_accel_brake_map_calibrator ディレクトリ]/config/accel_map.csv および [autoware_accel_brake_map_calibrator ディレクトリ]/config/brake_map.csv でアクセルマップとブレーキマップを確認できます。 -The `rviz:=true` option displays the RViz with a calibration plugin as below. +### キャリブレーションプラグイン + +`rviz:=true` オプションを使用すると、RViz が以下のキャリブレーションプラグインと一緒に表示されます。

-The current status (velocity and pedal) is shown in the plugin. The color on the current cell varies green/red depending on the current data is valid/invalid. The data that doesn't satisfy the following conditions are considered invalid and will not be used for estimation since aggressive data (e.g. when the pedal is moving fast) causes bad calibration accuracy. +現在の状態(速度とペダル)がプラグインに表示されます。現在のセルの色は、現在のデータが有効か無効かに応じて緑色または赤色で変わります。次の条件を満たさないデータは無効と見なされ、推定には使用されません。これは、過激なデータ(ペダルが急速に移動しているときなど)がキャリブレーションの精度を低下させるためです。 + +- 速度とペダルの状態がインデックス値から一定の範囲内にある +- ステア値、ペダル速度、ピッチ値などが対応するしきい値よりも小さい +- 速度がしきい値よりも大きい -- The velocity and pedal conditions are within certain ranges from the index values. -- The steer value, pedal speed, pitch value, etc. are less than corresponding thresholds. -- The velocity is higher than a threshold. +詳細なパラメータは、パラメータセクションで説明されています。 -The detailed parameters are described in the parameter section. +**注:**キャリブレーション中は、現在の状態が赤色か緑色かを気にしないでください。すべてのセルが赤色になるまでデータを取得し続ければ十分です。 -Note: You don't need to worry about whether the current state is red or green during calibration. Just keep getting data until all the cells turn red. +マップ内の各セルの値は最初は灰色ですが、そのセル内の有効なデータの数が蓄積されるにつれて青色から赤色に変化します。マップの各セルが赤色に近くなるまでキャリブレーションを続けることをお勧めします。特に、停止付近の性能は 0 ~ 6 m/s の速度と +0.2 ~ -0.4 のペダル値に大きく依存するため、これらの領域に焦点を当てることが望ましいです。 -The value of each cell in the map is gray at first, and it changes from blue to red as the number of valid data in the cell accumulates. It is preferable to continue the calibration until each cell of the map becomes close to red. In particular, the performance near the stop depends strongly on the velocity of 0 ~ 6m/s range and the pedal value of +0.2 ~ -0.4, range so it is desirable to focus on those areas. +### 診断 -### Diagnostics +`accel brake map_calibrator` はキャリブレーションのステータスに応じて診断メッセージを発行します。診断タイプ `WARN` は、現在のアクセル/ブレーキマップが不正確であると推定されることを示します。この状況では、アクセル/ブレーキマップの再キャリブレーションを実行することを強くお勧めします。 -The `accel brake map_calibrator` publishes diagnostics message depending on the calibration status. -Diagnostic type `WARN` indicates that the current accel/brake map is estimated to be inaccurate. In this situation, it is strongly recommended to perform a re-calibration of the accel/brake map. +| 状態 | 診断タイプ | 診断メッセージ | 説明 | +| ----------------------- | ---------------- | ------------------------------------------------- | -------------------------------------------- | +| キャリブレーション不要 | `OK` | "OK" | | +| キャリブレーション必要 | `WARN` | "アクセル/ブレーキマップのキャリブレーションが必要です。" | 現在のアクセル/ブレーキマップの精度は低いかもしれません。 | -| Status | Diagnostics Type | Diagnostics message | Description | -| ----------------------- | ---------------- | ------------------------------------------ | --------------------------------------------------- | -| No calibration required | `OK` | "OK" | | -| Calibration Required | `WARN` | "Accel/brake map Calibration is required." | The accuracy of current accel/brake map may be low. | +この診断ステータスは、以下のROSトピックでも確認できます。 -This diagnostics status can be also checked on the following ROS topic. ```sh ros2 topic echo /accel_brake_map_calibrator/output/update_suggest ``` -When the diagnostics type is `WARN`, `True` is published on this topic and the update of the accel/brake map is suggested. +診断タイプが `WARN` の場合、このトピックに `True` がパブリッシュされ、accel/brake マップの更新が提案されます。 -### Evaluation of the accel / brake map accuracy +### accel / brake マップ精度の評価 -The accuracy of map is evaluated by the **Root Mean Squared Error (RMSE)** between the observed acceleration and predicted acceleration. +マップの精度は、観測加速度と予測加速度の **2乗平均平方根誤差 (RMSE)** で評価されます。 -**TERMS:** +**用語:** -- `Observed acceleration`: the current vehicle acceleration which is calculated as a derivative value of the wheel speed. +- `観測加速度`: ホイール速度の微分から計算される現在の車両の加速度。 -- `Predicted acceleration`: the output of the original accel/brake map, which the Autoware is expecting. The value is calculated using the current pedal and velocity. +- `予測加速度`: Autoware が期待する、accel/brake マップの元の出力。この値は、現在のペダルと速度を使用して計算されます。 -You can check additional error information with the following topics. +以下のトピックで追加のエラー情報を確認できます。 -- `/accel_brake_map_calibrator/output/current_map_error` : The error of the original map set in the `csv_path_accel/brake_map` path. The original map is not accurate if this value is large. -- `/accel_brake_map_calibrator/output/updated_map_error` : The error of the map calibrated in this node. The calibration quality is low if this value is large. -- `/accel_brake_map_calibrator/output/map_error_ratio` : The error ratio between the original map and updated map (ratio = updated / current). If this value is less than 1, it is desirable to update the map. +- `/accel_brake_map_calibrator/output/current_map_error` : `csv_path_accel/brake_map` パスで設定された元のマップのエラー。この値が大きい場合、元のマップは正確ではありません。 +- `/accel_brake_map_calibrator/output/updated_map_error` : このノードで較正されたマップのエラー。この値が大きい場合、較正品質は低いです。 +- `/accel_brake_map_calibrator/output/map_error_ratio` : 元のマップと更新されたマップのエラー率 (比率 = 更新 / 現在のマップ)。この値が 1 未満の場合、マップを更新することが望ましいです。 -### How to visualize calibration data +### 較正データを視覚化する -The process of calibration can be visualized as below. Since these scripts need the log output of the calibration, the `pedal_accel_graph_output` parameter must be set to true while the calibration is running for the visualization. +較正のプロセスは以下のように視覚化できます。これらのスクリプトには較正のログ出力が必要なので、視覚化のために較正を実行している間は `pedal_accel_graph_output` のパラメータを true に設定する必要があります。 -#### Visualize plot of relation between acceleration and pedal +#### アクセルと加速度の関係のグラフを視覚化する + +以下のコマンドで、較正で使用されたデータのプロットを表示します。各速度範囲のプロットでは、ペダルと加速度の関係が分布表示されており、ピッチ角に応じて色付けされた生のデータポイントが含まれています。 -The following command shows the plot of used data in the calibration. In each plot of velocity ranges, you can see the distribution of the relationship between pedal and acceleration, and raw data points with colors according to their pitch angles. ```sh ros2 run autoware_accel_brake_map_calibrator view_plot.py ``` -![sample pic](media/log_sample.png) +#### 加速度/速度/ペダルのデータに関する統計を視覚化 -#### Visualize statistics about acceleration/velocity/pedal data +以下のコマンドは、キャリブレーションの統計を示します。 -The following command shows the statistics of the calibration: +- 平均値 +- 標準偏差 +- データ数 -- mean value -- standard deviation -- number of data +各地図セル内のすべてのデータについて。 -of all data in each map cell. ```sh ros2 run autoware_accel_brake_map_calibrator view_statistics.py ``` -![sample pic2](media/statistics_sample.png) +### キャリブレートされた加速 / ブレーキマップをいつでも保存する方法 -### How to save the calibrated accel / brake map anytime you want +次のコマンドでいつでも加速およびブレーキマップを保存できます。 -You can save accel and brake map anytime with the following command. ```sh ros2 service call /accel_brake_map_calibrator/update_map_dir tier4_vehicle_msgs/srv/UpdateAccelBrakeMap "path: ''" ``` -You can also save accel and brake map in the default directory where Autoware reads accel_map.csv/brake_map.csv using the RViz plugin (AccelBrakeMapCalibratorButtonPanel) as following. +AutowareでAccel_map.csv/brake_map.csvを読み込むデフォルトのディレクトリにaccelマップとブレーキマップを保存するには、RVizプラグイン(AccelBrakeMapCalibratorButtonPanel)を使用します。 -1. Click _Panels_ tab, and select AccelBrakeMapCalibratorButtonPanel. +1.「パネル」タブをクリックして、AccelBrakeMapCalibratorButtonPanelを選択します。 ![add_panel](./media/add_panel.png) -2. Select the panel, and the button will appear at the bottom of RViz. +2.パネルを選択すると、ボタンがRVizの下部に表示されます。 ![calibrator_button_panel](./media/calibrator_button_panel.png) -3. Press the button, and the accel / brake map will be saved. - (The button cannot be pressed in certain situations, such as when the calibrator node is not running.) +3.ボタンを押すと、accel /ブレーキマップが保存されます。(キャリブレーターノードが実行されていない場合など、特定の状況ではボタンを押せません。) ![push_calibration_button](./media/push_calibration_button.png) -## Parameters - -## System Parameters - -| Name | Type | Description | Default value | -| :----------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- | -| update_method | string | you can select map calibration method. "update_offset_each_cell" calculates offsets for each grid cells on the map. "update_offset_total" calculates the total offset of the map. | "update_offset_each_cell" | -| get_pitch_method | string | "tf": get pitch from tf, "none": unable to perform pitch validation and pitch compensation | "tf" | -| pedal_accel_graph_output | bool | if true, it will output a log of the pedal accel graph. | true | -| progress_file_output | bool | if true, it will output a log and csv file of the update process. | false | -| default_map_dir | str | directory of default map | [directory of *autoware_raw_vehicle_cmd_converter*]/data/default/ | -| calibrated_map_dir | str | directory of calibrated map | [directory of *autoware_accel_brake_map_calibrator*]/config/ | -| update_hz | double | hz for update | 10.0 | - -## Algorithm Parameters - -| Name | Type | Description | Default value | -| :----------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| initial_covariance | double | Covariance of initial acceleration map (larger covariance makes the update speed faster) | 0.05 | -| velocity_min_threshold | double | Speeds smaller than this are not used for updating. | 0.1 | -| velocity_diff_threshold | double | When the velocity data is more than this threshold away from the grid reference speed (center value), the associated data is not used for updating. | 0.556 | -| max_steer_threshold | double | If the steer angle is greater than this value, the associated data is not used for updating. | 0.2 | -| max_pitch_threshold | double | If the pitch angle is greater than this value, the associated data is not used for updating. | 0.02 | -| max_jerk_threshold | double | If the ego jerk calculated from ego acceleration is greater than this value, the associated data is not used for updating. | 0.7 | -| pedal_velocity_thresh | double | If the pedal moving speed is greater than this value, the associated data is not used for updating. | 0.15 | -| pedal_diff_threshold | double | If the current pedal value is more then this threshold away from the previous value, the associated data is not used for updating. | 0.03 | -| max_accel | double | Maximum value of acceleration calculated from velocity source. | 5.0 | -| min_accel | double | Minimum value of acceleration calculated from velocity source. | -5.0 | -| pedal_to_accel_delay | double | The delay time between actuation_cmd to acceleration, considered in the update logic. | 0.3 | -| update_suggest_thresh | double | threshold of RMSE ratio that update suggest flag becomes true. ( RMSE ratio: [RMSE of new map] / [RMSE of original map] ) | 0.7 | -| max_data_count | int | For visualization. When the data num of each grid gets this value, the grid color gets red. | 100 | -| accel_brake_value_source | string | Whether to use actuation_status or actuation_command as accel/brake sources. value | status | - -## Test utility scripts - -### Constant accel/brake command test - -These scripts are useful to test for accel brake map calibration. These generate an `ActuationCmd` with a constant accel/brake value given interactively by a user through CLI. +## パラメータ + +## システムパラメータ + +| 名称 | タイプ | 説明 | デフォルト値 | +| :-----------------------------------| :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- | +| update_method | string | マップのキャリブレーション手法を選択できます。"update_offset_each_cell" は、マップ上の各グリッドセルのオフセットを計算します。 "update_offset_total" は、マップの合計オフセットを計算します。 | "update_offset_each_cell" | +| get_pitch_method | string | "tf": tf からピッチを取得する、"none": ピッチ検証とピッチ補正を実行できません。 | "tf" | +| pedal_accel_graph_output | bool | true の場合、ペダルアクセルのログを出力します。 | true | +| progress_file_output | bool | true の場合、更新プロセスのログと CSV ファイルを出力します。 | false | +| default_map_dir | str | デフォルトのマップディレクトリ | [autoware_raw_vehicle_cmd_converter のディレクトリ]/data/default/ | +| calibrated_map_dir | str | キャリブレーションされたマップディレクトリ | [autoware_accel_brake_map_calibrator のディレクトリ]/config/ | +| update_hz | double | 更新の Hz | 10.0 | + +## アルゴリズムパラメータ + +| 名称 | 種別 | 説明 | デフォルト値 | +| :----------------------- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| initial_covariance | double | 初期加速度マップの共分散 (共分散が大きいほど更新速度が向上) | 0.05 | +| velocity_min_threshold | double | これより小さい速度は更新に使用されない。 | 0.1 | +| velocity_diff_threshold | double | 速度データがこのしきい値よりグリッド参照速度 (中央値) から離れている場合、関連データは更新に使用されない。 | 0.556 | +| max_steer_threshold | double | ステアリング角度がこの値より大きい場合、関連データは更新に使用されない。 | 0.2 | +| max_pitch_threshold | double | ピッチ角度がこの値より大きい場合、関連データは更新に使用されない。 | 0.02 | +| max_jerk_threshold | double | 自車加速度から計算された自車ジャークがこの値より大きい場合、関連データは更新に使用されない。 | 0.7 | +| pedal_velocity_thresh | double | ペダル移動速度がこの値より大きい場合、関連データは更新に使用されない。 | 0.15 | +| pedal_diff_threshold | double | 現在ペダル値がこのしきい値より前の値から離れている場合、関連データは更新に使用されない。 | 0.03 | +| max_accel | double | 速度ソースから計算される加速度の最大値。 | 5.0 | +| min_accel | double | 速度ソースから計算される加速度の最小値。 | -5.0 | +| pedal_to_accel_delay | double | 加速度への actuation_cmd との間の遅延時間 (更新ロジックで考慮)。 | 0.3 | +| update_suggest_thresh | double | RMSE 比率がこの値になる更新の提案フラグ (RMSE 比率: [新しいマップの RMSE] / [元のマップの RMSE])。 | 0.7 | +| max_data_count | int | 視覚化用。各グリッドのデータ数がこの値になると、グリッドの色が赤になる。 | 100 | +| accel_brake_value_source | string | 加速度/ブレーキソースとして actuation_status または actuation_command を使用するかどうか。 | status | + +## テストユーティリティースクリプト + +### 定常加速/制動コマンドテスト + +これらのスクリプトは、加速/制動マップ較正のテストに役立ちます。これらは、ユーザーがCLIを介して対話的に与える定数の加速/制動値を持つ`ActuationCmd`を生成します。 - accel_tester.py - brake_tester.py - actuation_cmd_publisher.py -The `accel/brake_tester.py` receives a target accel/brake command from CLI. It sends a target value to `actuation_cmd_publisher.py` which generates the `ActuationCmd`. You can run these scripts by the following commands in the different terminals, and it will be as in the screenshot below. +`accel/brake_tester.py`は、CLIからターゲットの加速/制動コマンドを受け取ります。ターゲット値を`actuation_cmd_publisher.py`に送信し、これが`ActuationCmd`を生成します。次のコマンドを別のターミナルで実行して、これらのスクリプトを実行でき、以下のスクリーンショットのようになります。 + ```bash ros2 run autoware_accel_brake_map_calibrator accel_tester.py @@ -183,41 +186,42 @@ ros2 run autoware_accel_brake_map_calibrator actuation_cmd_publisher.py ![actuation_cmd_publisher_util](./media/actuation_cmd_publisher_util.png) -## Calibration Method +## 校正手法 -Two algorithms are selectable for the acceleration map update, [update_offset_four_cell_around](#update_offset_four_cell_around-1) and [update_offset_each_cell](#update_offset_each_cell). Please see the link for details. +2つのアルゴリズム、[update_offset_four_cell_around](#update_offset_four_cell_around-1)と[update_offset_each_cell](#update_offset_each_cell)が加速度マップ更新用に選択できます。詳細についてはリンクを参照してください。 -### Data Preprocessing +### データの前処理 -Before calibration, missing or unusable data (e.g., too large handle angles) must first be eliminated. The following parameters are used to determine which data to remove. +校正の前に、欠損または使用不能なデータ(例:ハンドル角が大きすぎる)をまず取り除く必要があります。以下のパラメーターは、除去するデータを決定するために使用されます。 -#### Parameters +#### パラメーター -| Name | Description | Default Value | +| 名 | 説明 | デフォルト値 | | ---------------------- | ---------------------------- | ------------- | -| velocity_min_threshold | Exclude minimal velocity | 0.1 | -| max_steer_threshold | Exclude large steering angle | 0.2 | -| max_pitch_threshold | Exclude large pitch angle | 0.02 | -| max_jerk_threshold | Exclude large jerk | 0.7 | -| pedal_velocity_thresh | Exclude large pedaling speed | 0.15 | +| velocity_min_threshold | 最小速度を除外 | 0.1 | +| max_steer_threshold | 大きなステアリング角を除外 | 0.2 | +| max_pitch_threshold | 大きなピッチ角を除外 | 0.02 | +| max_jerk_threshold | 大きなジャークを除外 | 0.7 | +| pedal_velocity_thresh | 大きなペダリング速度を除外 | 0.15 | ### update_offset_each_cell -Update by Recursive Least Squares(RLS) method using data close enough to each grid. +各格子に十分近いデータを使用して、再帰的最小二乗法(RLS)手法で更新します。 -**Advantage** : Only data close enough to each grid is used for calibration, allowing accurate updates at each point. +**利点** : 各グリッドに十分近いデータのみがキャリブレーションに使用されるため、各ポイントで正確な更新が可能です。 -**Disadvantage** : Calibration is time-consuming due to a large amount of data to be excluded. +**欠点** : 除外するデータ量が多いため、キャリブレーションに時間がかかります。 -#### Parameters +#### パラメータ -Data selection is determined by the following thresholds. -| Name | Default Value | -| ----------------------- | ------------- | +データの選択は、次のしきい値によって決定されます。 + +| 名前 | 既定値 | +| ------------------- | -------- | | velocity_diff_threshold | 0.556 | | pedal_diff_threshold | 0.03 | -#### Update formula +#### フォーミュラの更新 $$ \begin{align} @@ -227,34 +231,35 @@ $$ \end{align} $$ -#### Variables +#### 変数 -| Variable name | Symbol | -| ------------------ | ----------- | -| covariance | $p[n-1]$ | -| map_offset | $\theta[n]$ | -| forgetting*factor* | $\lambda$ | -| phi | $x(=1)$ | -| measured_acc | $y$ | +| 変数名 | 記号 | +|---|---| +| 共分散 | $p[n-1]$ | +| マップオフセット | $\theta[n]$ | +| forgetting factor | $\lambda$ | +| フィー | $x(=1)$ | +| 測定加速度 | $y$ | ### update_offset_four_cell_around [1] -Update the offsets by RLS in four grids around newly obtained data. By considering linear interpolation, the update takes into account appropriate weights. Therefore, there is no need to remove data by thresholding. +RLS(再帰的最小二乗法)により、新規取得データ周囲の 4 つのグリッドにおけるオフセットを更新します。この更新では、線形補間を考慮するため、適切な重み付けが適用されます。そのため、しきい値によるデータの除去を行う必要はありません。 -**Advantage** : No data is wasted because updates are performed on the 4 grids around the data with appropriate weighting. -**Disadvantage** : Accuracy may be degraded due to extreme bias of the data. For example, if data $z(k)$ is biased near $Z_{RR}$ in Fig. 2, updating is performed at the four surrounding points ( $Z_{RR}$, $Z_{RL}$, $Z_{LR}$, and $Z_{LL}$), but accuracy at $Z_{LL}$ is not expected. +**利点:** 適切な重み付けを使用してデータ周囲の 4 つのグリッドにおいて更新を行うため、データが無駄になりません。 +**欠点:** データの極端なバイアスにより、精度の低下が発生する可能性があります。たとえば、図 2 の $Z_{RR}$ 付近でデータ $z(k)$ がバイアスされた場合、4 つの周囲点($Z_{RR}$、$Z_{RL}$、$Z_{LR}$、および $Z_{LL}$)で更新が実行されますが、$Z_{LL}$ の精度は期待できません。

-#### Implementation +#### 実装 -See eq.(7)-(10) in [1] for the updated formula. In addition, eq.(17),(18) from [1] are used for Anti-Windup. +更新式については、[1] の式 (7)~(10) を参照してください。さらに、Anti-Windup については [1] の式 (17) および (18) が使用されます。 -### References +### 参考資料 [1] [Gabrielle Lochrie, Michael Doljevic, Mario Nona, Yongsoon Yoon, Anti-Windup Recursive Least Squares Method for Adaptive Lookup Tables with Application to Automotive Powertrain Control Systems, IFAC-PapersOnLine, Volume 54, Issue 20, 2021, Pages 840-845](https://www.sciencedirect.com/science/article/pii/S240589632102320X) + diff --git a/vehicle/autoware_external_cmd_converter/README.md b/vehicle/autoware_external_cmd_converter/README.md index 40003d330757a..32ed476375510 100644 --- a/vehicle/autoware_external_cmd_converter/README.md +++ b/vehicle/autoware_external_cmd_converter/README.md @@ -1,73 +1,74 @@ # external_cmd_converter -`external_cmd_converter` is a node that converts desired mechanical input to acceleration and velocity by using accel/brake map. +`external_cmd_converter` は、アクセル/ブレーキマップを使用して目的のメカニカル入力を加速度と速度に変換するノードです。 -## Algorithm +## アルゴリズム -### How to calculate reference acceleration and velocity +### 参照加速度と速度の計算方法 -A reference acceleration and velocity are derived from the throttle and brake values of external control commands. +参照加速度と速度は、外部制御コマンドのアクセルとブレーキ値から導出されます。 -#### Reference Acceleration +#### 参照加速度 -A reference acceleration is calculated from accel_brake_map based on values of a desired_pedal and a current velocity; +参照加速度は、目的ペダル値と現在の速度に基づいて accel_brake_map から計算されます。 $$ - pedal_d = throttle_d - brake_d, + ペダル_d = スロットル_d - ブレーキ_d, $$ $$ - acc_{ref} = Acc(pedal_d, v_{x,current}). + acc_{ref} = Acc(ペダル_d, v_{x,現在}). $$ -| Parameter | Description | +| パラメーター | 説明 | | --------------- | ----------------------------------------------------------------------------------------- | -| $throttle_d$ | throttle value of external control command (`~/in/external_control_cmd.control.throttle`) | -| $brake_d$ | brake value of external control command (`~/in/external_control_cmd.control.brake`) | -| $v_{x,current}$ | current longitudinal velocity (`~/in/odometry.twist.twist.linear.x`) | +| $throttle_d$ | 外部制御コマンドのアクセル値 (`~/in/external_control_cmd.control.throttle`) | +| $brake_d$ | 外部制御コマンドのブレーキ値 (`~/in/external_control_cmd.control.brake`) | +| $v_{x,current}$ | 現在縦速度 (`~/in/odometry.twist.twist.linear.x`) | | Acc | accel_brake_map | -#### Reference Velocity +#### リファレンス速度 -A reference velocity is calculated based on a current velocity and a reference acceleration: +リファレンス速度は、現在の速度とリファレンス加速度に基づいて計算されます。 $$ v_{ref} = v_{x,current} + k_{v_{ref}} \cdot \text{sign}_{gear} \cdot acc_{ref}. $$ -| Parameter | Description | -| -------------------- | --------------------------------------------------------------------- | -| $acc_{ref}$ | reference acceleration | -| $k_{v_{ref}}$ | reference velocity gain | -| $\text{sign}_{gear}$ | gear command (`~/in/shift_cmd`) (Drive/Low: 1, Reverse: -1, Other: 0) | +| パラメータ | 説明 | +| -------------------- | --------------------------------------------------------------------------- | +| $acc_{ref}$ | 基準加速度 | +| $k_{v_{ref}}$ | 基準速度ゲイン | +| $\text{sign}_{gear}$ | ギアコマンド (`~/in/shift_cmd`) (Drive/Low: 1, Reverse: -1, その他: 0) | -## Input topics +## 入力トピック -| Name | Type | Description | -| --------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -| `~/in/external_control_cmd` | tier4_external_api_msgs::msg::ControlCommand | target `throttle/brake/steering_angle/steering_angle_velocity` is necessary to calculate desired control command. | -| `~/input/shift_cmd"` | autoware_vehicle_msgs::GearCommand | current command of gear. | -| `~/input/emergency_stop` | tier4_external_api_msgs::msg::Heartbeat | emergency heart beat for external command. | -| `~/input/current_gate_mode` | tier4_control_msgs::msg::GateMode | topic for gate mode. | -| `~/input/odometry` | navigation_msgs::Odometry | twist topic in odometry is used. | +| 名称 | タイプ | 説明 | +| --------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `~/in/external_control_cmd` | tier4_external_api_msgs::msg::ControlCommand | 目標`スロットル/ブレーキ/操舵角/操舵角速度`は、目的制御コマンドを計算するために必要。 | +| `~/input/shift_cmd"` | autoware_vehicle_msgs::GearCommand | 現在のギア状態。 | +| `~/input/emergency_stop` | tier4_external_api_msgs::msg::Heartbeat | 外部コマンドに対する緊急ハートビート。 | +| `~/input/current_gate_mode` | tier4_control_msgs::msg::GateMode | ゲートモード用のトピック。 | +| `~/input/odometry` | navigation_msgs::Odometry | オドメトリ内のツイストトピックが使用される。 | -## Output topics +## 出力トピック -| Name | Type | Description | +| 名称 | タイプ | 説明 | | ------------------- | ----------------------------------- | ------------------------------------------------------------------ | -| `~/out/control_cmd` | autoware_control_msgs::msg::Control | ackermann control command converted from selected external command | +| `~/out/control_cmd` | autoware_control_msgs::msg::Control | 外部コマンドから変換したアッカーマン型制御コマンド | -## Parameters +## パラメータ -| Parameter | Type | Description | +| パラメータ | タイプ | 説明 | | ------------------------- | ------ | ----------------------------------------------------- | -| `ref_vel_gain_` | double | reference velocity gain | -| `timer_rate` | double | timer's update rate | -| `wait_for_first_topic` | double | if time out check is done after receiving first topic | -| `control_command_timeout` | double | time out check for control command | -| `emergency_stop_timeout` | double | time out check for emergency stop command | +| `ref_vel_gain_` | double | 基準速度ゲイン | +| `timer_rate` | double | タイマーの更新レート | +| `wait_for_first_topic` | double | 最初のトピック受信後にタイムアウトチェックを行う場合 | +| `control_command_timeout` | double | 制御コマンドのタイムアウトチェック | +| `emergency_stop_timeout` | double | エマージェンシーストップコマンドのタイムアウトチェック | -## Limitation +## 制限事項 + +未定 -tbd. diff --git a/vehicle/autoware_raw_vehicle_cmd_converter/README.md b/vehicle/autoware_raw_vehicle_cmd_converter/README.md index 1df083f5c5370..8939a0c7f9071 100644 --- a/vehicle/autoware_raw_vehicle_cmd_converter/README.md +++ b/vehicle/autoware_raw_vehicle_cmd_converter/README.md @@ -1,38 +1,39 @@ # autoware_raw_vehicle_cmd_converter -## Overview +## 概要 -The raw_vehicle_command_converter is a crucial node in vehicle automation systems, responsible for translating desired steering and acceleration inputs into specific vehicle control commands. This process is achieved through a combination of a lookup table and an optional feedback control system. +raw_vehicle_command_converter は、望ましいステアリングおよび加速度入力を具体的な車両制御コマンドに変換する、車両自動化システムにおける重要なノードです。この処理は、ルックアップテーブルとオプションのフィードバック制御システムの組み合わせによって実現されます。 -### Lookup Table +### ルックアップテーブル -The core of the converter's functionality lies in its use of a CSV-formatted lookup table. This table encapsulates the relationship between the throttle/brake pedal (depending on your vehicle control interface) and the corresponding vehicle acceleration across various speeds. The converter utilizes this data to accurately translate target accelerations into appropriate throttle/brake values. +変換器の機能の中心は、CSV 形式のルックアップテーブルを使用することです。このテーブルは、スロットル/ブレーキペダル(車両制御インターフェイスによって異なります)と、さまざまな速度における対応する車両加速度との関係性をカプセル化します。変換器はこのデータを使用して、目標加速度を適切なスロットル/ブレーキ値に正確に変換します。 ![accel-brake-map-table](./figure/accel-brake-map-table.png) -### Creation of Reference Data +### 基準データの作成 -Reference data for the lookup table is generated through the following steps: +ルックアップテーブルの基準データは、次の手順で生成されます。 -1. **Data Collection**: On a flat road, a constant value command (e.g., throttle/brake pedal) is applied to accelerate or decelerate the vehicle. -2. **Recording Data**: During this phase, both the IMU acceleration and vehicle velocity data are recorded. -3. **CSV File Generation**: A CSV file is created, detailing the relationship between command values, vehicle speed, and resulting acceleration. +1. **データ収集**: 平坦な道路で、一定値のコマンド(例: スロットル/ブレーキペダル)が適用されて車両を加速または減速させます。 +2. **データ記録**: この段階で、IMU 加速度と車両速度の両方のデータが記録されます。 +3. **CSV ファイル生成**: コマンド値、車両速度、および結果として得られた加速度の関係を示す CSV ファイルが作成されます。 -Once the acceleration map is crafted, it should be loaded when the RawVehicleCmdConverter node is launched, with the file path defined in the launch file. +アクセルマップが作成されると、RawVehicleCmdConverter ノードを起動するときにロードされ、起動ファイルでファイルパスが定義されます。 -### Auto-Calibration Tool +### 自動キャリブレーションツール -For ease of calibration and adjustments to the lookup table, an auto-calibration tool is available. More information and instructions for this tool can be found [here](https://github.com/autowarefoundation/autoware.universe/blob/main/vehicle/autoware_accel_brake_map_calibrator/README.md). +ルックアップテーブルのキャリブレーションと調整を容易にするために、自動キャリブレーションツールが用意されています。このツールの詳細と手順は [こちら](https://github.com/autowarefoundation/autoware.universe/blob/main/vehicle/autoware_accel_brake_map_calibrator/README.md) で確認できます。 -### Variable Gear Ratio (VGR) +### 可変ギア比 (VGR) -This is a gear ratio for converting tire angle to steering angle. Generally, to improve operability, the gear ratio becomes dynamically larger as the speed increases or the steering angle becomes smaller. For a certain vehicle, data was acquired and the gear ratio was approximated by the following formula. +これは、タイヤ角をステアリング角に変換するためのギア比です。一般的に、操作性を向上させるために、速度が上がるにつれて、またはステアリング角が小さくなるにつれて、ギア比が動的に大きくなります。特定の車両では、データが収集され、ギア比は次の公式で近似されました。 $$ a + b \times v^2 - c \times \lvert \delta \rvert $$ -For that vehicle, the coefficients were as follows. +その車両の場合、係数は次のとおりでした。 + ```yaml vgr_coef_a: 15.713 @@ -42,29 +43,29 @@ vgr_coef_c: 0.042 ![vgr](./figure/vgr.svg) -When `convert_steer_cmd_method: "vgr"` is selected, the node receives the control command from the controller as the desired tire angle and calculates the desired steering angle to output. -Also, when `convert_actuation_to_steering_status: true`, this node receives the `actuation_status` topic and calculates the steer tire angle from the `steer_wheel_angle` and publishes it. +`convert_steer_cmd_method: "vgr"`が選択されている場合、このノードはコントローラーからの制御コマンドを目的タイヤ角として受け取り、出力する目的操舵角を計算します。また、`convert_actuation_to_steering_status: true`の場合、このノードは`actuation_status`トピックを受信し、`steer_wheel_angle`から操舵タイヤ角を計算してパブリッシュします。 -## Input topics +## 入力トピック -| Name | Type | Description | -| -------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `~/input/control_cmd` | autoware_control_msgs::msg::Control | target `velocity/acceleration/steering_angle/steering_angle_velocity` is necessary to calculate actuation command. | -| `~/input/steering"` | autoware_vehicle_msgs::msg::SteeringReport | subscribe only when `convert_actuation_to_steering_status: false`. current status of steering used for steering feed back control | -| `~/input/odometry` | navigation_msgs::Odometry | twist topic in odometry is used. | -| `~/input/actuation_status` | tier4_vehicle_msgs::msg::ActuationStatus | actuation status is assumed to receive the same type of status as sent to the vehicle side. For example, if throttle/brake pedal/steer_wheel_angle is sent, the same type of status is received. In the case of steer_wheel_angle, it is used to calculate steer_tire_angle and VGR in this node. | +| 名称 | タイプ | 説明 | +| -------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `~/input/control_cmd` | `autoware_control_msgs::msg::Control` | ターゲットの速度/加速度/ステアリング角度/ステアリング角度速度は、アクチュエータコマンドを計算するために必要です。 | +| `~/input/steering"` | `autoware_vehicle_msgs::msg::SteeringReport` | `convert_actuation_to_steering_status: false` の場合のみサブスクライブします。ステアリングフィードバック制御に使用されるステアリングの現在の状態 | +| `~/input/odometry` | `navigation_msgs::Odometry` | オドメトリの `twist` トピックが使用されます。 | +| `~/input/actuation_status` | `tier4_vehicle_msgs::msg::ActuationStatus` | アクチュエータステータスは、車両側に送信されるのと同じタイプのステータスを受信すると想定されています。たとえば、スロットル/ブレーキペダル/ステアリングホイール角度が送信された場合、同じタイプのステータスが受信されます。ステアリングホイール角度の場合は、このノードでステアリングタイヤ角度と VGR の計算に使用されます。 | -## Output topics +## 出力トピック -| Name | Type | Description | -| -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | -| `~/output/actuation_cmd` | tier4_vehicle_msgs::msg::ActuationCommandStamped | actuation command for vehicle to apply mechanical input | -| `~/output/steering_status` | autoware_vehicle_msgs::msg::SteeringReport | publish only when `convert_actuation_to_steering_status: true`. steer tire angle is calculated from steer wheel angle and published. | +| 名称 | タイプ | 説明 | +| -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | +| `~/output/actuation_cmd` | `tier4_vehicle_msgs::msg::ActuationCommandStamped` | 車両が機械的入力を適用するためのアクチュエーションコマンド | +| `~/output/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | `convert_actuation_to_steering_status: true` の場合のみ公開されます。ステアリングタイヤ角度はステアリングホイール角度から計算されて公開されます。 | -## Parameters +## パラメータ {{ json_to_markdown("vehicle/autoware_raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json") }} -## Limitation +## 制限事項 + +現在のフィードバック実装は、操舵制御のみに適用されます。 -The current feed back implementation is only applied to steering control. From 512142b1d13d3765f88b3cd85ef399bf2bf69930 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Wed, 13 Nov 2024 14:11:03 +0900 Subject: [PATCH 2/4] fix 404 error page Signed-off-by: Takamasa Horibe --- common/component_interface_utils/README.md | 101 ++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/common/component_interface_utils/README.md b/common/component_interface_utils/README.md index 8152eedae35fc..2a2b191c854a0 100644 --- a/common/component_interface_utils/README.md +++ b/common/component_interface_utils/README.md @@ -1,2 +1,101 @@ -404: Not Found +# component_interface_utils +## Features + +This is a utility package that provides the following features: + +- Instantiation of the wrapper class +- Logging for service and client +- Service exception for response +- Relays for topic and service + +## Design + +This package provides the wrappers for the interface classes of rclcpp. +The wrappers limit the usage of the original class to enforce the processing recommended by the component interface. +Do not inherit the class of rclcpp, and forward or wrap the member function that is allowed to be used. + +## Instantiation of the wrapper class + +The wrapper class requires interface information in this format. + +```cpp +struct SampleService +{ + using Service = sample_msgs::srv::ServiceType; + static constexpr char name[] = "/sample/service"; +}; + +struct SampleMessage +{ + using Message = sample_msgs::msg::MessageType; + static constexpr char name[] = "/sample/message"; + static constexpr size_t depth = 1; + static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE; + static constexpr auto durability = RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL; +}; +``` + +Create the wrapper using the above definition as follows. + +```cpp +// header file +component_interface_utils::Service::SharedPtr srv_; +component_interface_utils::Client::SharedPtr cli_; +component_interface_utils::Publisher::SharedPtr pub_; +component_interface_utils::Subscription::SharedPtr sub_; + +// source file +const auto node = component_interface_utils::NodeAdaptor(this); +node.init_srv(srv_, callback); +node.init_cli(cli_); +node.init_pub(pub_); +node.init_sub(sub_, callback); +``` + +## Logging for service and client + +If the wrapper class is used, logging is automatically enabled. The log level is `RCLCPP_INFO`. + +## Service exception for response + +If the wrapper class is used and the service response has status, throwing `ServiceException` will automatically catch and set it to status. +This is useful when returning an error from a function called from the service callback. + +```cpp +void service_callback(Request req, Response res) +{ + function(); + res->status.success = true; +} + +void function() +{ + throw ServiceException(ERROR_CODE, "message"); +} +``` + +If the wrapper class is not used or the service response has no status, manually catch the `ServiceException` as follows. + +```cpp +void service_callback(Request req, Response res) +{ + try { + function(); + res->status.success = true; + } catch (const ServiceException & error) { + res->status = error.status(); + } +} +``` + +## Relays for topic and service + +There are utilities for relaying services and messages of the same type. + +```cpp +const auto node = component_interface_utils::NodeAdaptor(this); +service_callback_group_ = create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); +node.relay_message(pub_, sub_); +node.relay_service(cli_, srv_, service_callback_group_); // group is for avoiding deadlocks +``` From 9fcaa73ce81ec958b20f69d3b8120527da25ed1b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 05:27:23 +0000 Subject: [PATCH 3/4] style(pre-commit): autofix --- README.md | 129 +++--- common/README.md | 1 - common/autoware_ad_api_specs/README.md | 1 - .../README.md | 1 - common/autoware_geography_utils/README.md | 1 - common/autoware_grid_map_utils/README.md | 1 - common/autoware_interpolation/README.md | 11 +- common/autoware_kalman_filter/README.md | 1 - common/autoware_motion_utils/README.md | 6 - .../README.md | 1 - .../README.md | 19 +- .../autoware_overlay_rviz_plugin/README.md | 29 +- .../autoware_perception_rviz_plugin/README.md | 29 +- common/autoware_point_types/README.md | 1 - common/autoware_signal_processing/README.md | 1 - common/autoware_test_utils/README.md | 6 - common/autoware_universe_utils/README.md | 8 - common/bag_time_manager_rviz_plugin/README.md | 1 - common/glog_component/README.md | 2 - common/tier4_adapi_rviz_plugin/README.md | 1 - common/tier4_api_utils/README.md | 1 - .../tier4_camera_view_rviz_plugin/README.md | 1 - common/tier4_datetime_rviz_plugin/README.md | 1 - .../tier4_localization_rviz_plugin/README.md | 57 ++- common/tier4_planning_rviz_plugin/README.md | 272 +++++------ common/tier4_state_rviz_plugin/README.md | 65 ++- common/tier4_system_rviz_plugin/README.md | 5 +- .../tier4_traffic_light_rviz_plugin/README.md | 5 +- common/tier4_vehicle_rviz_plugin/README.md | 87 ++-- common/traffic_light_utils/README.md | 1 - common/tvm_utility/README.md | 5 +- common/tvm_utility/artifacts/README.md | 1 - .../README.md | 61 ++- control/autoware_control_validator/README.md | 47 +- .../autoware_external_cmd_selector/README.md | 39 +- control/autoware_joy_controller/README.md | 170 ++++--- .../autoware_lane_departure_checker/README.md | 135 +++--- .../autoware_mpc_lateral_controller/README.md | 220 ++++----- .../README.md | 82 ++-- .../README.md | 69 ++- .../README.md | 154 +++--- control/autoware_pure_pursuit/README.md | 1 - control/autoware_shift_decider/README.md | 38 +- .../README.md | 196 ++++---- .../README.md | 1 - .../README.md | 3 - control/autoware_vehicle_cmd_gate/README.md | 105 +++-- .../control_performance_analysis/README.md | 116 +++-- control/predicted_path_checker/README.md | 69 ++- .../autoware_control_evaluator/README.md | 1 - evaluator/autoware_evaluator_utils/README.md | 1 - .../autoware_planning_evaluator/README.md | 16 +- evaluator/diagnostic_converter/README.md | 5 +- evaluator/kinematic_evaluator/README.md | 1 - evaluator/localization_evaluator/README.md | 1 - .../perception_online_evaluator/README.md | 25 +- launch/tier4_autoware_api_launch/README.md | 2 - launch/tier4_control_launch/README.md | 2 - launch/tier4_localization_launch/README.md | 2 - launch/tier4_map_launch/README.md | 2 - launch/tier4_perception_launch/README.md | 2 - launch/tier4_planning_launch/README.md | 2 - launch/tier4_sensing_launch/README.md | 4 - launch/tier4_simulator_launch/README.md | 4 +- launch/tier4_system_launch/README.md | 2 - launch/tier4_vehicle_launch/README.md | 13 +- localization/autoware_ekf_localizer/README.md | 51 +- .../autoware_geo_pose_projector/README.md | 15 +- localization/autoware_gyro_odometer/README.md | 53 +-- .../README.md | 1 - .../autoware_ar_tag_based_localizer/README.md | 69 ++- .../autoware_lidar_marker_localizer/README.md | 41 +- .../README.md | 17 +- .../autoware_localization_util/README.md | 1 - .../autoware_ndt_scan_matcher/README.md | 201 ++++---- localization/autoware_pose2twist/README.md | 15 +- .../README.md | 47 +- .../autoware_pose_estimator_arbiter/README.md | 105 ++--- .../example_rule/README.md | 34 +- .../autoware_pose_initializer/README.md | 78 ++-- .../README.md | 75 ++- localization/autoware_stop_filter/README.md | 61 +-- localization/autoware_twist2accel/README.md | 37 +- localization/yabloc/README.md | 30 +- localization/yabloc/yabloc_common/README.md | 55 ++- .../yabloc/yabloc_image_processing/README.md | 264 +++++------ localization/yabloc/yabloc_monitor/README.md | 13 +- .../yabloc/yabloc_particle_filter/README.md | 236 +++++----- .../yabloc/yabloc_pose_initializer/README.md | 24 +- map/autoware_map_height_fitter/README.md | 7 +- map/autoware_map_projection_loader/README.md | 9 +- map/autoware_map_tf_generator/README.md | 20 +- map/map_loader/README.md | 10 +- map/util/lanelet2_map_preprocessor/README.md | 1 - perception/autoware_bytetrack/README.md | 140 +++--- perception/autoware_cluster_merger/README.md | 53 ++- .../README.md | 123 +++-- .../README.md | 132 +++--- .../README.md | 23 +- .../README.md | 1 - .../autoware_detection_by_tracker/README.md | 43 +- .../autoware_elevation_map_loader/README.md | 163 ++++--- .../autoware_euclidean_cluster/README.md | 61 ++- .../autoware_ground_segmentation/README.md | 39 +- .../README.md | 45 +- .../README.md | 106 +++-- .../autoware_lidar_centerpoint/README.md | 116 ++--- .../autoware_lidar_transfusion/README.md | 93 ++-- .../autoware_map_based_prediction/README.md | 79 ++-- .../autoware_multi_object_tracker/README.md | 17 +- perception/autoware_object_merger/README.md | 61 +-- .../autoware_object_range_splitter/README.md | 56 +-- .../README.md | 1 - .../README.md | 67 ++- .../README.md | 20 +- .../README.md | 2 - .../README.md | 4 +- .../README.md | 2 - .../autoware_radar_object_tracker/README.md | 65 ++- .../README.md | 19 +- .../autoware_shape_estimation/README.md | 29 +- .../autoware_simple_object_merger/README.md | 3 - .../autoware_tensorrt_classifier/README.md | 1 - perception/autoware_tensorrt_common/README.md | 1 - perception/autoware_tensorrt_yolox/README.md | 85 ++-- .../autoware_tracking_object_merger/README.md | 38 +- .../autoware_traffic_light_arbiter/README.md | 46 +- .../README.md | 209 ++++----- .../README.md | 55 ++- .../README.md | 43 +- .../README.md | 437 ++++++++++-------- .../README.md | 31 +- .../README.md | 73 ++- perception/perception_utils/README.md | 1 - planning/README.md | 7 - planning/autoware_costmap_generator/README.md | 64 ++- .../README.md | 183 +++++--- planning/autoware_freespace_planner/README.md | 112 +++-- .../README.md | 4 +- planning/autoware_mission_planner/README.md | 75 ++- .../README.md | 1 - .../README.md | 246 +++++----- .../autoware_obstacle_stop_planner/README.md | 146 +++--- planning/autoware_path_optimizer/README.md | 19 +- planning/autoware_path_smoother/README.md | 1 - .../autoware_planning_test_manager/README.md | 28 +- .../README.md | 10 +- .../autoware_planning_validator/README.md | 54 +-- .../README.md | 7 +- planning/autoware_route_handler/README.md | 1 - planning/autoware_rtc_interface/README.md | 10 - planning/autoware_scenario_selector/README.md | 27 +- .../README.md | 4 +- .../README.md | 56 ++- planning/autoware_velocity_smoother/README.md | 305 ++++++------ .../README.md | 11 +- .../README.md | 39 +- .../README.md | 185 ++++---- .../README.md | 242 +++++----- .../autoware_behavior_path_planner/README.md | 87 ++-- .../README.md | 11 +- .../README.md | 8 +- .../README.md | 254 +++++----- .../README.md | 110 ++--- .../README.md | 14 +- .../README.md | 126 +++-- .../README.md | 24 +- .../README.md | 196 ++++---- .../README.md | 7 +- .../README.md | 20 +- .../README.md | 111 ++--- .../README.md | 55 ++- .../README.md | 1 - .../README.md | 133 +++--- .../README.md | 21 +- .../README.md | 14 +- .../README.md | 2 - .../README.md | 14 +- .../README.md | 20 +- .../README.md | 1 - .../README.md | 23 +- .../README.md | 45 +- .../README.md | 65 ++- .../README.md | 46 +- .../autoware_bezier_sampler/README.md | 1 - .../autoware_frenet_planner/README.md | 1 - .../autoware_path_sampler/README.md | 83 ++-- .../autoware_sampler_common/README.md | 1 - sensing/autoware_gnss_poser/README.md | 17 +- sensing/autoware_image_diagnostics/README.md | 21 +- .../README.md | 13 +- sensing/autoware_imu_corrector/README.md | 45 +- sensing/autoware_pcl_extensions/README.md | 1 - .../README.md | 46 +- .../README.md | 24 +- .../README.md | 20 +- .../autoware_radar_threshold_filter/README.md | 36 +- .../README.md | 19 +- .../livox/autoware_livox_tag_filter/README.md | 44 +- sensing/vehicle_velocity_converter/README.md | 19 +- simulator/autoware_carla_interface/README.md | 52 +-- .../dummy_perception_publisher/README.md | 39 +- simulator/fault_injection/README.md | 82 ++-- .../learning_based_vehicle_model/README.md | 4 - simulator/simple_planning_simulator/README.md | 98 ++-- .../tier4_dummy_object_rviz_plugin/README.md | 139 +++--- simulator/vehicle_door_simulator/README.md | 1 - system/autoware_component_monitor/README.md | 8 +- system/autoware_default_adapi/README.md | 2 - .../README.md | 14 +- system/bluetooth_monitor/README.md | 29 +- system/component_state_monitor/README.md | 1 - .../ad_api_adaptors/README.md | 29 +- .../automatic_pose_initializer/README.md | 9 +- system/diagnostic_graph_aggregator/README.md | 31 +- system/diagnostic_graph_utils/README.md | 1 - system/dummy_diag_publisher/README.md | 25 +- system/dummy_infrastructure/README.md | 26 +- system/duplicated_node_checker/README.md | 14 +- .../mrm_comfortable_stop_operator/README.md | 31 +- system/mrm_emergency_stop_operator/README.md | 31 +- system/mrm_handler/README.md | 29 +- system/system_diagnostic_monitor/README.md | 11 +- system/system_monitor/README.md | 80 ++-- system/topic_state_monitor/README.md | 81 ++-- system/velodyne_monitor/README.md | 67 ++- tools/reaction_analyzer/README.md | 51 +- .../README.md | 106 ++--- .../autoware_external_cmd_converter/README.md | 47 +- .../README.md | 18 +- 230 files changed, 5489 insertions(+), 5798 deletions(-) diff --git a/README.md b/README.md index 87ac18a59a9a4..a77c2e5d53c97 100644 --- a/README.md +++ b/README.md @@ -27,20 +27,20 @@ Autoware Universeコンポーネントの詳細を探りたい場合は、MKDocs バッジをクリックしてcodecovのウェブサイトに移動すると、詳細を確認できます。 -| コンポーネント | 対応範囲 | -| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Common | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Common%20Packages&query=$.[0].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Common%20Packages) | -| Control | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Control%20Packages&query=$.[1].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Control%20Packages) | -| Evaluator | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Evaluator%20Packages&query=$.[2].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Evaluator%20Packages) | -| Launch | TBD | -| Localization | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Localization%20Packages&query=$.[4].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Localization%20Packages) | -| Map | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Map%20Packages&query=$.[5].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Map%20Packages) | -| Perception | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Perception%20Packages&query=$.[6].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Perception%20Packages) | -| Planning | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Planning%20Packages&query=$.[7].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Planning%20Packages) | -| Sensing | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Sensing%20Packages&query=$.[8].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Sensing%20Packages) | -| Simulator | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Simulator%20Packages&query=$.[9].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Simulator%20Packages) | -| System | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=System%20Packages&query=$.[10].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=System%20Packages) | -| Vehicle | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Vehicle%20Packages&query=$.[11].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Vehicle%20Packages) | +| コンポーネント | 対応範囲 | +| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Common | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Common%20Packages&query=$.[0].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Common%20Packages) | +| Control | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Control%20Packages&query=$.[1].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Control%20Packages) | +| Evaluator | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Evaluator%20Packages&query=$.[2].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Evaluator%20Packages) | +| Launch | TBD | +| Localization | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Localization%20Packages&query=$.[4].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Localization%20Packages) | +| Map | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Map%20Packages&query=$.[5].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Map%20Packages) | +| Perception | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Perception%20Packages&query=$.[6].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Perception%20Packages) | +| Planning | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Planning%20Packages&query=$.[7].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Planning%20Packages) | +| Sensing | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Sensing%20Packages&query=$.[8].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Sensing%20Packages) | +| Simulator | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Simulator%20Packages&query=$.[9].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Simulator%20Packages) | +| System | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=System%20Packages&query=$.[10].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=System%20Packages) | +| Vehicle | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Vehicle%20Packages&query=$.[11].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Vehicle%20Packages) | **自動運転ソフトウェアに関するドキュメント** @@ -50,96 +50,95 @@ Autoware Universeコンポーネントの詳細を探りたい場合は、MKDocs #### ユースケースと要件 -* 自車位置と目的地の認識 -* 安全かつ効率的な経路の作成 -* 障害物回避と衝突予測 -* 高速道路と市街地でのナビゲーション対応 +- 自車位置と目的地の認識 +- 安全かつ効率的な経路の作成 +- 障害物回避と衝突予測 +- 高速道路と市街地でのナビゲーション対応 #### 実装の詳細 -* 動的パスプランニングアルゴリズム(例:A*、D*ライト)を使用したリアルタイム経路生成 -* 車載センサー(LiDAR、カメラ、レーダー)からのデータ統合 -* 障害物検出と逸脱量リスク評価のための物体検出アルゴリズム -* 高精度地図データの活用 +- 動的パスプランニングアルゴリズム(例:A*、D*ライト)を使用したリアルタイム経路生成 +- 車載センサー(LiDAR、カメラ、レーダー)からのデータ統合 +- 障害物検出と逸脱量リスク評価のための物体検出アルゴリズム +- 高精度地図データの活用 #### パフォーマンスの測定基準 -* 目的地への到着時間 -* 走行距離と燃料消費量 -* 障害物との衝突回避率 -* 加速度逸脱量、速度逸脱量 +- 目的地への到着時間 +- 走行距離と燃料消費量 +- 障害物との衝突回避率 +- 加速度逸脱量、速度逸脱量 ### Perceptionモジュール #### ユースケースと要件 -* 車両周囲の環境認識 -* 動的および静的障害物の検出と追跡 -* 物体の形状、サイズ、速度の推定 -* 交通状況のモニタリングと予測 +- 車両周囲の環境認識 +- 動的および静的障害物の検出と追跡 +- 物体の形状、サイズ、速度の推定 +- 交通状況のモニタリングと予測 #### 実装の詳細 -* LiDARとカメラからのデータを融合した物体検出と追跡アルゴリズム -* 領域ベースの物体検出器(例:YOLO、Faster R-CNN) -* ニューラルネットワークを使用した特徴抽出と分類 -* 地図データの活用とセンシングデータへの投影 +- LiDARとカメラからのデータを融合した物体検出と追跡アルゴリズム +- 領域ベースの物体検出器(例:YOLO、Faster R-CNN) +- ニューラルネットワークを使用した特徴抽出と分類 +- 地図データの活用とセンシングデータへの投影 #### パフォーマンスの測定基準 -* 物体検出の精度(mAP) -* 物体追跡の精度(IDF1) -* 処理スループット(FPS) -* エラー検出率(例:偽検出率、偽陰性率) +- 物体検出の精度(mAP) +- 物体追跡の精度(IDF1) +- 処理スループット(FPS) +- エラー検出率(例:偽検出率、偽陰性率) ### Controlモジュール #### ユースケースと要件 -* アクセル、ブレーキ、ステアリングの制御 -* 経路計画からの命令の追従 -* 障害物回避のための緊急回避動作 -* 車両の安定性とハンドリングの維持 +- アクセル、ブレーキ、ステアリングの制御 +- 経路計画からの命令の追従 +- 障害物回避のための緊急回避動作 +- 車両の安定性とハンドリングの維持 #### 実装の詳細 -* PID制御器を使用したフィードバック制御 -* モデル予測制御(MPC)を使用した最適制御 -* 先行車両追従のための適応制御アルゴリズム -* 緊急回避のための最適化されたパスクレプランニング +- PID制御器を使用したフィードバック制御 +- モデル予測制御(MPC)を使用した最適制御 +- 先行車両追従のための適応制御アルゴリズム +- 緊急回避のための最適化されたパスクレプランニング #### パフォーマンスの測定基準 -* 経路からの逸脱量 -* アクセル、ブレーキ、ステアリング操作の応答性 -* エネルギー効率(例:燃料消費量) +- 経路からの逸脱量 +- アクセル、ブレーキ、ステアリング操作の応答性 +- エネルギー効率(例:燃料消費量) ### Sensingモジュール #### ユースケースと要件 -* 車両周囲の環境データの収集 -* LiDAR、カメラ、レーダーなど、複数のセンサーのデータ統合 -* データの収集と'post resampling'のリアルタイム処理 -* センサーキャリブレーションとエラー補正 +- 車両周囲の環境データの収集 +- LiDAR、カメラ、レーダーなど、複数のセンサーのデータ統合 +- データの収集と'post resampling'のリアルタイム処理 +- センサーキャリブレーションとエラー補正 #### 実装の詳細 -* ROS(Robot Operating System)ベースのセンサーデータ統合システム -* センサーデータの同期と'post resampling'のリアルタイム処理 -* レーザー、RGB、深度データの融合技術 -* 固有のセンサーデバイスドライバの開発 +- ROS(Robot Operating System)ベースのセンサーデータ統合システム +- センサーデータの同期と'post resampling'のリアルタイム処理 +- レーザー、RGB、深度データの融合技術 +- 固有のセンサーデバイスドライバの開発 #### パフォーマンスの測定基準 -* データの収集範囲と精度 -* データの'post resampling'と同期化の精度 -* センサーキャリブレーションの品質 -* 処理スループット(FPS) +- データの収集範囲と精度 +- データの'post resampling'と同期化の精度 +- センサーキャリブレーションの品質 +- 処理スループット(FPS) ### Autowareとの統合 -* ROSベースのアーキテクチャによるAutowareへのシームレスな統合 -* モジュールの再利用性と拡張性 -* オープンソースコミュニティによる継続的な開発とサポート - +- ROSベースのアーキテクチャによるAutowareへのシームレスな統合 +- モジュールの再利用性と拡張性 +- オープンソースコミュニティによる継続的な開発とサポート diff --git a/common/README.md b/common/README.md index 3127d9bf459b9..6d79c7f504f0f 100644 --- a/common/README.md +++ b/common/README.md @@ -14,4 +14,3 @@ Autoware.Universe Commonフォルダは他のAutowareコンポーネントで使 1. `autoware_universe_utils` 2. `autoware_motion_utils` - diff --git a/common/autoware_ad_api_specs/README.md b/common/autoware_ad_api_specs/README.md index c415ee8f77768..f096969b769b2 100644 --- a/common/autoware_ad_api_specs/README.md +++ b/common/autoware_ad_api_specs/README.md @@ -1,4 +1,3 @@ # autoware_adapi_specs このパッケージは、Autoware AD APIの仕様です。 - diff --git a/common/autoware_component_interface_tools/README.md b/common/autoware_component_interface_tools/README.md index d9c32b2e02958..3fdba57f0fbb1 100644 --- a/common/autoware_component_interface_tools/README.md +++ b/common/autoware_component_interface_tools/README.md @@ -5,4 +5,3 @@ ## service_log_checker `component_interface_utils`のサービスログを監視し、レスポンスステータスがエラーかどうかを表示します。 - diff --git a/common/autoware_geography_utils/README.md b/common/autoware_geography_utils/README.md index 13a19553c3f70..506e05b538dda 100644 --- a/common/autoware_geography_utils/README.md +++ b/common/autoware_geography_utils/README.md @@ -3,4 +3,3 @@ ## 目的 このパッケージには、その他の package で使用される地理関連関数があります。必要に応じて参照してください。 - diff --git a/common/autoware_grid_map_utils/README.md b/common/autoware_grid_map_utils/README.md index 86d47a444af9d..5a496effe12f7 100644 --- a/common/autoware_grid_map_utils/README.md +++ b/common/autoware_grid_map_utils/README.md @@ -46,4 +46,3 @@ - - - diff --git a/common/autoware_interpolation/README.md b/common/autoware_interpolation/README.md index a17d9d6945b1b..9c5ebf02e9ca8 100644 --- a/common/autoware_interpolation/README.md +++ b/common/autoware_interpolation/README.md @@ -20,11 +20,11 @@ 100点に対するスプライン補間の計算コストを評価し、3対角行列アルゴリズムという最良のものを採用しました。 3対角行列アルゴリズム以外の方法は`spline_interpolation`パッケージに存在しますが、Autowareからは削除されています。 -| 手法 | 計算時間 | -| --------------------------------- | ---------------- | -| 三対角行列アルゴリズム | 0.007 [ms] | -| 前処理共役勾配法 | 0.024 [ms] | -| 逐次過剰緩和法 | 0.074 [ms] | +| 手法 | 計算時間 | +| ---------------------- | ---------- | +| 三対角行列アルゴリズム | 0.007 [ms] | +| 前処理共役勾配法 | 0.024 [ms] | +| 逐次過剰緩和法 | 0.074 [ms] | ### スプライン補間アルゴリズム @@ -105,4 +105,3 @@ x = \end{pmatrix} \end{align} $$ - diff --git a/common/autoware_kalman_filter/README.md b/common/autoware_kalman_filter/README.md index 921f5dd086956..b44312db25683 100644 --- a/common/autoware_kalman_filter/README.md +++ b/common/autoware_kalman_filter/README.md @@ -7,4 +7,3 @@ ## 想定 / 既知の制限 TBD. - diff --git a/common/autoware_motion_utils/README.md b/common/autoware_motion_utils/README.md index 8a7c744edd44d..b8924d66bdf6d 100644 --- a/common/autoware_motion_utils/README.md +++ b/common/autoware_motion_utils/README.md @@ -20,7 +20,6 @@ Autowareにおける`セグメント`は、次のような2つの連続したポ 最初の関数は、距離とヨーのしきい値を使用して最近接インデックスを見つけるものです。 - ```cpp template size_t findFirstNearestIndexWithSoftConstraints( @@ -45,7 +44,6 @@ size_t findFirstNearestIndexWithSoftConstraints( 2 番目の関数は、`lane_id`であるレーンの最も近いインデックスを見付けます。 - ```cpp size_t findNearestIndexFromLaneId( const tier4_planning_msgs::msg::PathWithLaneId & path, @@ -67,7 +65,6 @@ size_t findNearestIndexFromLaneId( したがって、実装は以下のようになります。 - ```cpp const size_t ego_nearest_idx = findFirstNearestIndexWithSoftConstraints(points, ego_pose, ego_nearest_dist_threshold, ego_nearest_yaw_threshold); const size_t ego_nearest_seg_idx = findFirstNearestIndexWithSoftConstraints(points, ego_pose, ego_nearest_dist_threshold, ego_nearest_yaw_threshold); @@ -81,7 +78,6 @@ const size_t ego_nearest_seg_idx = findFirstNearestIndexWithSoftConstraints(poin したがって、動的オブジェクトではヨー閾値は考慮されるべきではありません。 実装は次のようになります。 - ```cpp const size_t dynamic_obj_nearest_idx = findFirstNearestIndexWithSoftConstraints(points, dynamic_obj_pose, dynamic_obj_nearest_dist_threshold); const size_t dynamic_obj_nearest_seg_idx = findFirstNearestIndexWithSoftConstraints(points, dynamic_obj_pose, dynamic_obj_nearest_dist_threshold); @@ -94,7 +90,6 @@ Laneletマップでは、交通対象は特定のレーンに属しています 実装方法は次のとおりです。 - ```cpp // first extract `lane_id` which the traffic object belong to. const size_t traffic_obj_nearest_idx = findNearestIndexFromLaneId(path_with_lane_id, traffic_obj_pos, lane_id); @@ -106,4 +101,3 @@ const size_t traffic_obj_nearest_seg_idx = findNearestSegmentIndexFromLaneId(pat `trajectory.hpp` の一部テンプレート関数は、主に特定の型 (`autoware_planning_msgs::msg::PathPoint`, `autoware_planning_msgs::msg::PathPoint`, `autoware_planning_msgs::msg::TrajectoryPoint`) で使用されるため、コンパイル時間を短縮するために `extern template` 関数としてエクスポートされています。 `autoware_motion_utils.hpp` ヘッダーファイルは、このファイルを直接/間接的に含むソースファイルがプリプロセスに時間がかかったため削除されました。 - diff --git a/common/autoware_object_recognition_utils/README.md b/common/autoware_object_recognition_utils/README.md index b3d12dc62e9ce..a6779dfe39f5b 100644 --- a/common/autoware_object_recognition_utils/README.md +++ b/common/autoware_object_recognition_utils/README.md @@ -5,4 +5,3 @@ このパッケージには、オブジェクト認識モジュール全体に有用な共通関数のライブラリが含まれています。 このパッケージには、さまざまなデータ型、メッセージ型間の相互変換や、それらに対する一般的な操作の実行を行う関数が含まれる場合があります。 - diff --git a/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md b/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md index 6ec60efb8729f..7cac808dd5c50 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md +++ b/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md @@ -6,18 +6,18 @@ ### 入力 -| 名称 | 種類 | 説明 | -| ------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------ | -| `/planning/mission_remaining_distance_time` | `autoware_planning_msgs::msg::MissionRemainingDistanceTime` | ミッションの残り距離と時間を表すトピック | +| 名称 | 種類 | 説明 | +| ------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------- | +| `/planning/mission_remaining_distance_time` | `autoware_planning_msgs::msg::MissionRemainingDistanceTime` | ミッションの残り距離と時間を表すトピック | ## オーバーレイパラメータ -| 名前 | タイプ | デフォルト値 | 説明 | -| -------- | ---- | ------------- | --------------------------------- | -| `Width` | int | 170 | オーバーレイの幅 [`px`] | -| `Height` | int | 100 | オーバーレイの高さ [`px`] | -| `Right` | int | 10 | 右端からの余白 [`px`] | -| `Top` | int | 10 | 上端からの余白 [`px`] | +| 名前 | タイプ | デフォルト値 | 説明 | +| -------- | ------ | ------------ | ------------------------- | +| `Width` | int | 170 | オーバーレイの幅 [`px`] | +| `Height` | int | 100 | オーバーレイの高さ [`px`] | +| `Right` | int | 10 | 右端からの余白 [`px`] | +| `Top` | int | 10 | 上端からの余白 [`px`] | ミッションの詳細表示は、画面の右上に配置されています。 @@ -33,4 +33,3 @@ - - - diff --git a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md index 6f3313ddfa8b2..3fa6ad7fd3a27 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md +++ b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md @@ -13,15 +13,15 @@ RViz2の3Dシーン上に2Dオーバーレイを表示するためのプラグ ### 入力 -| 名前 | 種類 | 説明 | -| -------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------- | -| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両速度のトピック | -| `/vehicle/status/turn_indicators_status` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ウインカーの状態のトピック | -| `/vehicle/status/hazard_status` | `autoware_vehicle_msgs::msg::HazardReport` | ハザードランプの状態のトピック | -| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングの状態のトピック | -| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアのステータスに関するトピック | -| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限に関するトピック | -| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 信号機のステータスに関するトピック | +| 名前 | 種類 | 説明 | +| ------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------- | +| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両速度のトピック | +| `/vehicle/status/turn_indicators_status` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ウインカーの状態のトピック | +| `/vehicle/status/hazard_status` | `autoware_vehicle_msgs::msg::HazardReport` | ハザードランプの状態のトピック | +| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングの状態のトピック | +| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアのステータスに関するトピック | +| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限に関するトピック | +| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 信号機のステータスに関するトピック | ## パラメータ @@ -29,13 +29,13 @@ RViz2の3Dシーン上に2Dオーバーレイを表示するためのプラグ #### SignalDisplay -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------------------ | ------ | -------------------- | --------------------------------- | -| `property_width_` | int | 128 | プロッターウィンドウの幅 [px] | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------------------ | ------ | -------------------- | ------------------------------- | +| `property_width_` | int | 128 | プロッターウィンドウの幅 [px] | | `property_height_` | int | 128 | プロッターウィンドウの高さ [px] | | `property_left_` | int | 128 | プロッターウィンドウの左 [px] | -| `property_top_` | int | 128 | プロッターウィンドウの上 [px] | -| `property_signal_color_` | QColor | QColor(25, 255, 240) | ターンシグナルの色 | +| `property_top_` | int | 128 | プロッターウィンドウの上 [px] | +| `property_signal_color_` | QColor | QColor(25, 255, 240) | ターンシグナルの色 | ## 前提条件 / 制約 @@ -52,4 +52,3 @@ TBD. 3. 必要に応じて、トピックの名前を入力します。 ![select_topic_name](./assets/images/select_topic_name.png) - diff --git a/common/autoware_perception_rviz_plugin/README.md b/common/autoware_perception_rviz_plugin/README.md index 318dd9534e39d..1f7ac11a3de50 100644 --- a/common/autoware_perception_rviz_plugin/README.md +++ b/common/autoware_perception_rviz_plugin/README.md @@ -18,52 +18,64 @@ ### 検出された物体 #### 入力タイプ + - `AutowareAuto::DetectedObject` #### Visualized Result + - `rviz::MarkerArray` ### LandMarks #### Input Types + - `AutowareAuto::LandMark` #### Visualized Result + - `rviz::MarkerArray` ### PointClouds #### Input Types + - `AutowareAuto::PointCloud` - `AutowareAuto::LidarPointCloud` - `AutowareAuto::CameraPointCloud` - `AutowareAuto::PointCloud2` #### Visualized Result + - `sensor_msgs::PointCloud2` ### TrackingObjects #### Input Types + - `AutowareAuto::TrackedObject` #### Visualized Result + - `rviz::MarkerArray` ### TrafficLights #### Input Types + - `AutowareAuto::TrafficLight` #### Visualized Result + - `rviz::MarkerArray` ### Planning (optional) #### Input Types + - `AutowareAuto::Trajectory` #### Visualized Result + - `rviz::MarkerArray` ## Configuration @@ -202,8 +214,8 @@ rviz roslaunch autoware_perception_rviz_plugin autoware_perception_rviz_plugin.launch ``` -| 名称 | タイプ | 説明 | -| ---------- | ------------------------------------------------ | ---------------------- | +| 名称 | タイプ | 説明 | +| ---- | ------------------------------------------------ | ------------ | | | `autoware_perception_msgs::msg::DetectedObjects` | 検出結果配列 | #### 可視化結果 @@ -214,9 +226,9 @@ roslaunch autoware_perception_rviz_plugin autoware_perception_rviz_plugin.launch #### 入力タイプ -| 名称 | タイプ | 説明 | -|---|---|---| -| | `autoware_perception_msgs::msg::TrackedObjects` | 追跡結果の配列 | +| 名称 | タイプ | 説明 | +| ---- | ----------------------------------------------- | -------------- | +| | `autoware_perception_msgs::msg::TrackedObjects` | 追跡結果の配列 | #### 可視化結果 @@ -228,9 +240,9 @@ roslaunch autoware_perception_rviz_plugin autoware_perception_rviz_plugin.launch #### 入力タイプ -| 名前 | 種別 | 説明 | -| ---- | ------------------------------------------------- | ------------------------- | -| | `autoware_perception_msgs::msg::PredictedObjects` | prediction結果配列 | +| 名前 | 種別 | 説明 | +| ---- | ------------------------------------------------- | ------------------ | +| | `autoware_perception_msgs::msg::PredictedObjects` | prediction結果配列 | #### 可視化結果 @@ -243,4 +255,3 @@ roslaunch autoware_perception_rviz_plugin autoware_perception_rviz_plugin.launch [1] ## 今後の拡張/未実装部分 - diff --git a/common/autoware_point_types/README.md b/common/autoware_point_types/README.md index e6a9baa18431e..cbdf847649975 100644 --- a/common/autoware_point_types/README.md +++ b/common/autoware_point_types/README.md @@ -120,4 +120,3 @@ - `max_lateral_acceleration`: 最大横加速度 (m/s²) - `max_steer_acceleration`: 最大操舵角加速度 (m/s²) - `max_steer_angle_rate`: 最大操舵角速度 (rad/s) - diff --git a/common/autoware_signal_processing/README.md b/common/autoware_signal_processing/README.md index e8b1281ef865b..61331144ee74e 100644 --- a/common/autoware_signal_processing/README.md +++ b/common/autoware_signal_processing/README.md @@ -10,4 +10,3 @@ ## 想定 / 既知の制限 未定です。 - diff --git a/common/autoware_test_utils/README.md b/common/autoware_test_utils/README.md index a7edb06217cdf..d4169de39a144 100644 --- a/common/autoware_test_utils/README.md +++ b/common/autoware_test_utils/README.md @@ -45,7 +45,6 @@ road_shouldersレーンレットマップは、次のようなroad_shoulderタ planning_simulatorを次のように簡単に起動できます。 - ```bash ros2 launch autoware_test_utils psim_road_shoulder.launch.xml vehicle_model:=<> sensor_model:=<> use_sim_time:=true ``` @@ -64,7 +63,6 @@ ros2 launch autoware_test_utils psim_road_shoulder.launch.xml vehicle_model:=<> 次のようにして簡単にplanning_simulatorを起動できます - ```bash ros2 launch autoware_test_utils psim_intersection.launch.xml vehicle_model:=<> sensor_model:=<> use_sim_time:=true ``` @@ -79,20 +77,17 @@ ros2 launch autoware_test_utils psim_intersection.launch.xml vehicle_model:=<> s [PR説明](https://github.com/autowarefoundation/autoware.universe/pull/9207)で提示されているように、ユーザーはテストマップ上でPlanning Simulationを実行中にシーンのスナップショットをyamlファイルに保存することができます。 - ```bash ros2 launch autoware_test_utils psim_road_shoulder.launch.xml vehicle_model:= sensor_model:= ros2 launch autoware_test_utils psim_intersection.launch.xml vehicle_model:= sensor_model:= ``` - ```bash ros2 service call /autoware_test_utils/topic_snapshot_saver std_srvs/srv/Empty \{\} ``` トピックを保存するトピックのリストとフィールド名は、`config/sample_topic_snapshot.yaml` で指定されています。 - ```yaml # setting fields: @@ -107,4 +102,3 @@ self_odometry: ``` 各フィールドは、`autoware_test_utils/mock_data_parser.hpp` で定義された関数を使用して ROS メッセージタイプに解析できます。 - diff --git a/common/autoware_universe_utils/README.md b/common/autoware_universe_utils/README.md index f539ab5c48fa8..480ebbefe390a 100644 --- a/common/autoware_universe_utils/README.md +++ b/common/autoware_universe_utils/README.md @@ -16,7 +16,6 @@ ##### コンストラクタ - ```cpp template explicit TimeKeeper(Reporters... reporters); @@ -59,7 +58,6 @@ explicit TimeKeeper(Reporters... reporters); - 以下に示すように、`start_track`と`end_track`を使用して時間測定を開始および終了できます。 - ```cpp time_keeper.start_track("example_function"); // Your function code here @@ -70,7 +68,6 @@ explicit TimeKeeper(Reporters... reporters); ##### 例 - ```cpp #include @@ -143,7 +140,6 @@ int main(int argc, char ** argv) - 出力(コンソール) - ```text ========================== func_a (6.243ms) : This is a comment for func_a @@ -153,7 +149,6 @@ int main(int argc, char ** argv) - 出力 (`ros2 topic echo /processing_time`) - ```text --- nodes: @@ -182,7 +177,6 @@ int main(int argc, char ** argv) ##### コンストラクタ - ```cpp ScopedTimeTrack(const std::string & func_name, TimeKeeper & time_keeper); ``` @@ -192,10 +186,8 @@ ScopedTimeTrack(const std::string & func_name, TimeKeeper & time_keeper); ##### デストラクター - ```cpp ~ScopedTimeTrack(); ``` - `ScopedTimeTrack`オブジェクトを破壊し、関数の追跡を終了します。 - diff --git a/common/bag_time_manager_rviz_plugin/README.md b/common/bag_time_manager_rviz_plugin/README.md index 7c8ce5bf85664..717300efb3ae8 100644 --- a/common/bag_time_manager_rviz_plugin/README.md +++ b/common/bag_time_manager_rviz_plugin/README.md @@ -24,4 +24,3 @@ TBD - Pause/Resume: クロックを一時停止/再開します。 - ApplyRate: クロックのレートを適用します。 - diff --git a/common/glog_component/README.md b/common/glog_component/README.md index fcb0d7e7d9354..483ea0c493d16 100644 --- a/common/glog_component/README.md +++ b/common/glog_component/README.md @@ -8,7 +8,6 @@ コンテナで `glog_component` を読み込む場合、起動ファイルは以下のようになります。 - ```py glog_component = ComposableNode( package="glog_component", @@ -28,4 +27,3 @@ container = ComposableNodeContainer( ], ) ``` - diff --git a/common/tier4_adapi_rviz_plugin/README.md b/common/tier4_adapi_rviz_plugin/README.md index 9aba8a004d036..aca903d0ed0dc 100644 --- a/common/tier4_adapi_rviz_plugin/README.md +++ b/common/tier4_adapi_rviz_plugin/README.md @@ -27,4 +27,3 @@ Material Design アイコンは Apache License, Version 2.0 のもとでライ ### 謝辞 これらのアイコンをコミュニティに提供し、開発者とデザイナーがプロジェクトの視覚的魅力とユーザーエクスペリエンスを強化するのに役立てている Google に感謝の意を表します。 - diff --git a/common/tier4_api_utils/README.md b/common/tier4_api_utils/README.md index bb39f8331bb19..44d8457620edd 100644 --- a/common/tier4_api_utils/README.md +++ b/common/tier4_api_utils/README.md @@ -2,4 +2,3 @@ これはサービスを呼び出したときにログを記録するクラスの古い実装です。 代わりに[component_interface_utils](../component_interface_utils/README.md)を使用してください。 - diff --git a/common/tier4_camera_view_rviz_plugin/README.md b/common/tier4_camera_view_rviz_plugin/README.md index b074b28ef8c47..e35f5f5cb3450 100644 --- a/common/tier4_camera_view_rviz_plugin/README.md +++ b/common/tier4_camera_view_rviz_plugin/README.md @@ -25,4 +25,3 @@ RVizに`tier4_camera_view_rviz_plugin/BirdEyeViewTool`ツールを追加しま ### 謝辞 これらのアイコンをコミュニティに提供し、開発者やデザイナーがプロジェクトのビジュアルアピールとユーザーエクスペリエンスを向上させることができるよう支援するGoogleに感謝の意を表します。 - diff --git a/common/tier4_datetime_rviz_plugin/README.md b/common/tier4_datetime_rviz_plugin/README.md index 7705dc1e5b92b..480d9cede83a9 100644 --- a/common/tier4_datetime_rviz_plugin/README.md +++ b/common/tier4_datetime_rviz_plugin/README.md @@ -14,4 +14,3 @@ TBD。 ![select_panel](./images/select_panels.png) 2. tier4_datetime_rviz_plugin/AutowareDateTimePanelを選択して、OKを押します。 ![select_datetime_plugin](./images/select_datetime_plugin.png) - diff --git a/common/tier4_localization_rviz_plugin/README.md b/common/tier4_localization_rviz_plugin/README.md index 2a6fbeb81671a..4b41a82c626db 100644 --- a/common/tier4_localization_rviz_plugin/README.md +++ b/common/tier4_localization_rviz_plugin/README.md @@ -10,14 +10,14 @@ ### Pose履歴 -| 名称 | タイプ | 説明 | -| ---- | ----- | ------------------------------------------------------------------------------------------------- | +| 名称 | タイプ | 説明 | +| ------------ | --------------------------------- | --------------------------------------------------------------------------------------------------- | | `input/pose` | `geometry_msgs::msg::PoseStamped` | `input/pose` には、ekf_localizer、ndt_scan_matching、または GNSS で計算された局所化の結果を入れます | ### 共分散を持つ自車位置履歴 -| 名称 | 型 | 説明 | -| ---------------------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| 名称 | 型 | 説明 | +| ---------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | `input/pose_with_covariance` には、ekf_localizer、ndt_scan_matching、GNSS によって計算された、ローカリゼーションの結果を配置します。 | ## パラメータ @@ -26,33 +26,33 @@ ### 自車位置履歴 -| 名称 | タイプ | デフォルト値 | 説明 | -| ----------------------- | ------ | ------------- | ------------------------- | -| `property_buffer_size_` | int | 100 | トピックのバッファサイズ | -| `property_line_view_` | bool | true | Lineプロパティを使用 | -| `property_line_width_` | float | 0.1 | Lineプロパティの幅 [m] | -| `property_line_alpha_` | float | 1.0 | Lineプロパティのアルファ | -| `property_line_color_` | QColor | Qt::white | Lineプロパティの色 | +| 名称 | タイプ | デフォルト値 | 説明 | +| ----------------------- | ------ | ------------ | ------------------------ | +| `property_buffer_size_` | int | 100 | トピックのバッファサイズ | +| `property_line_view_` | bool | true | Lineプロパティを使用 | +| `property_line_width_` | float | 0.1 | Lineプロパティの幅 [m] | +| `property_line_alpha_` | float | 1.0 | Lineプロパティのアルファ | +| `property_line_color_` | QColor | Qt::white | Lineプロパティの色 | ### 自車位置の共分散履歴 -| 名称 | タイプ | デフォルト値 | 説明 | -| ----------------------------- | ------ | ------------ | --------------------------------------- | -| `property_buffer_size_` | int | 100 | トピックのバッファサイズ | -| `property_path_view_` | bool | true | パスプロパティを使用するか否か | -| `property_shape_type_` | string | Line | LineまたはArrow | -| `property_line_width_` | float | 0.1 | Lineプロパティの幅 [m] | -| `property_line_alpha_` | float | 1.0 | Lineプロパティのアルファ | -| `property_line_color_` | QColor | Qt::white | Lineプロパティの色 | -| `property_arrow_shaft_length` | float | 0.3 | Arrowプロパティのシャフトの長さ | -| `property_arrow_shaft_diameter` | float | 0.15 | Arrowプロパティのシャフトの直径 | -| `property_arrow_head_length` | float | 0.2 | Arrowプロパティのヘッドの長さ | -| `property_arrow_head_diameter` | float | 0.3 | Arrowプロパティのヘッドの直径 | -| `property_arrow_alpha_` | float | 1.0 | Arrowプロパティのアルファ | -| `property_arrow_color_` | QColor | Qt::white | Arrowプロパティの色 | -| `property_sphere_scale_` | float | 1.0 | Sphereプロパティのスケール | -| `property_sphere_alpha_` | float | 0.5 | Sphereプロパティのアルファ | -| `property_sphere_color_` | QColor | (204, 51, 204) | Sphereプロパティの色 | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------------------------- | ------ | -------------- | ------------------------------- | +| `property_buffer_size_` | int | 100 | トピックのバッファサイズ | +| `property_path_view_` | bool | true | パスプロパティを使用するか否か | +| `property_shape_type_` | string | Line | LineまたはArrow | +| `property_line_width_` | float | 0.1 | Lineプロパティの幅 [m] | +| `property_line_alpha_` | float | 1.0 | Lineプロパティのアルファ | +| `property_line_color_` | QColor | Qt::white | Lineプロパティの色 | +| `property_arrow_shaft_length` | float | 0.3 | Arrowプロパティのシャフトの長さ | +| `property_arrow_shaft_diameter` | float | 0.15 | Arrowプロパティのシャフトの直径 | +| `property_arrow_head_length` | float | 0.2 | Arrowプロパティのヘッドの長さ | +| `property_arrow_head_diameter` | float | 0.3 | Arrowプロパティのヘッドの直径 | +| `property_arrow_alpha_` | float | 1.0 | Arrowプロパティのアルファ | +| `property_arrow_color_` | QColor | Qt::white | Arrowプロパティの色 | +| `property_sphere_scale_` | float | 1.0 | Sphereプロパティのスケール | +| `property_sphere_alpha_` | float | 0.5 | Sphereプロパティのアルファ | +| `property_sphere_color_` | QColor | (204, 51, 204) | Sphereプロパティの色 | ## 想定/既知の制限 @@ -68,4 +68,3 @@ TBD. ![select_topic_name](./images/select_topic_name.png) 4. 軌道と共分散を表示できます。 ![ex_pose_with_covariance_history](./images/ex_pose_with_covariance_history.png) - diff --git a/common/tier4_planning_rviz_plugin/README.md b/common/tier4_planning_rviz_plugin/README.md index 402222d8578ab..7cd3f11e93409 100644 --- a/common/tier4_planning_rviz_plugin/README.md +++ b/common/tier4_planning_rviz_plugin/README.md @@ -10,17 +10,19 @@ jsk_overlay_utils.cppとjsk_overlay_utils.hppはBSDライセンスです。 ## 入出力 ### 入力 + - current pose - velocity profile - planned trajectory -- v\_max +- v_max ### Output + - No outputs ## Usage -```roslaunch tier4_planning_rviz_plugin tier4_planning_rviz_plugin.launch [args...]``` +`roslaunch tier4_planning_rviz_plugin tier4_planning_rviz_plugin.launch [args...]` ## Arguments @@ -34,11 +36,11 @@ jsk_overlay_utils.cppとjsk_overlay_utils.hppはBSDライセンスです。 --max_longitudinal_jerk 1.0 ``` -| 名前 | タイプ | 説明 | -| --------------------------------------------- | ----------------------------------------- | ------------------------------------------- | -| `/input/path` | `autoware_planning_msgs::msg::Path` | パスをサブスクライブするトピック | -| `/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | トラジェクトリをサブスクライブするトピック | -| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs/msg/VelocityLimit` | 最大速度をパブリッシュするトピック | +| 名前 | タイプ | 説明 | +| -------------------------------------------------- | ----------------------------------------- | ------------------------------------------ | +| `/input/path` | `autoware_planning_msgs::msg::Path` | パスをサブスクライブするトピック | +| `/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | トラジェクトリをサブスクライブするトピック | +| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs/msg/VelocityLimit` | 最大速度をパブリッシュするトピック | ### 出力 @@ -50,35 +52,35 @@ jsk_overlay_utils.cppとjsk_overlay_utils.hppはBSDライセンスです。 #### 入力 -* 自車位置(`current pose`) -* 目的地 -* 障害物マップ -* 走行制限マップ +- 自車位置(`current pose`) +- 目的地 +- 障害物マップ +- 走行制限マップ #### 出力 -* 経路(`post resampling`) -* 速度プロファイル -* 加速度逸脱量 -* 速度逸脱量 +- 経路(`post resampling`) +- 速度プロファイル +- 加速度逸脱量 +- 速度逸脱量 #### アルゴリズム 経路計画モジュールは、以下を含む複数のサブコンポーネントを使用します。 -* **経路探索:** A*アルゴリズムを使用して、障害物を回避する最適な経路を探索します。 -* **経路平滑化:** 経路の急カーブや急激な速度変化を滑らかにします。 -* **速度計画:** 速度制限や加速制限を考慮して、安全な速度プロファイルを作成します。 +- **経路探索:** A\*アルゴリズムを使用して、障害物を回避する最適な経路を探索します。 +- **経路平滑化:** 経路の急カーブや急激な速度変化を滑らかにします。 +- **速度計画:** 速度制限や加速制限を考慮して、安全な速度プロファイルを作成します。 #### 注意事項 -* 経路計画モジュールは、障害物マップと走行制限マップの正確性に依存します。 -* モジュールは動的環境では動作しません。 -* 経路は**推奨経路**であることに注意してください。実際の経路は、センサーデータや他の制御システムによって修正される可能性があります。 +- 経路計画モジュールは、障害物マップと走行制限マップの正確性に依存します。 +- モジュールは動的環境では動作しません。 +- 経路は**推奨経路**であることに注意してください。実際の経路は、センサーデータや他の制御システムによって修正される可能性があります。 -| 名称 | 種別 | 説明 | -| --------------------------------------- | ------------------------------ | ----------------------------------------- | -| `/planning/mission_planning/checkpoint` | `geometry_msgs/msg/PoseStamped` | チェックポイントを公開するトピック | +| 名称 | 種別 | 説明 | +| --------------------------------------- | ------------------------------- | ---------------------------------- | +| `/planning/mission_planning/checkpoint` | `geometry_msgs/msg/PoseStamped` | チェックポイントを公開するトピック | ## パラメーター @@ -86,13 +88,13 @@ jsk_overlay_utils.cppとjsk_overlay_utils.hppはBSDライセンスです。 #### MissionCheckpoint -| 名前 | 型 | 初期値 | 説明 | -|---|---|---|---| -| `pose_topic_property_` | 文字列 | `mission_checkpoint` | チェックポイントを発行するトピック | -| `std_dev_x_` | 浮動小数 | 0.5 | チェックポイント姿勢の X 標準偏差 [m] | -| `std_dev_y_` | 浮動小数 | 0.5 | チェックポイント姿勢の Y 標準偏差 [m] | -| `std_dev_theta_` | 浮動小数 | M_PI / 12.0 | チェックポイント姿勢の Theta 標準偏差 [rad] | -| `position_z_` | 浮動小数 | 0.0 | チェックポイント姿勢の Z 位置 [m] | +| 名前 | 型 | 初期値 | 説明 | +| ---------------------- | -------- | -------------------- | ------------------------------------------- | +| `pose_topic_property_` | 文字列 | `mission_checkpoint` | チェックポイントを発行するトピック | +| `std_dev_x_` | 浮動小数 | 0.5 | チェックポイント姿勢の X 標準偏差 [m] | +| `std_dev_y_` | 浮動小数 | 0.5 | チェックポイント姿勢の Y 標準偏差 [m] | +| `std_dev_theta_` | 浮動小数 | M_PI / 12.0 | チェックポイント姿勢の Theta 標準偏差 [rad] | +| `position_z_` | 浮動小数 | 0.0 | チェックポイント姿勢の Z 位置 [m] | #### Path @@ -100,32 +102,32 @@ jsk_overlay_utils.cppとjsk_overlay_utils.hppはBSDライセンスです。 各セグメントには、以下のパラメータが含まれています。 -* 開始と終了の経路ポイント -* 最大速度と加速度 -* スプライン補完(オプション) +- 開始と終了の経路ポイント +- 最大速度と加速度 +- スプライン補完(オプション) **Planning** コンポーネントは、以下を考慮して経路を最適化します。 -* 交通規制(速度制限、停止線など) -* 交通状況(他の車両、歩行者など) -* 車両の動力学(加速度、減速度、曲がる能力) +- 交通規制(速度制限、停止線など) +- 交通状況(他の車両、歩行者など) +- 車両の動力学(加速度、減速度、曲がる能力) 最適化された経路が計算されたら、**Planning** コンポーネントはこれを実行される一連のコマンド(コントロールコマンド)に変換します。コントロールコマンドには、車両の速度、加速度、ステアリングの目標値が含まれます。 -| 名称 | 型 | デフォルト値 | 説明 | -| ------------------------------------ | ------ | ------------- | ---------------------------------------------------- | -| `property_path_view_` | bool | true | パスプロパティを使用するかどうか | -| `property_path_width_view_` | bool | false | 一定の幅を使用するかどうか | -| `property_path_width_` | float | 2.0 | パスプロパティの幅 [m] | -| `property_path_alpha_` | float | 1.0 | パスプロパティのアルファ | -| `property_path_color_view_` | bool | false | 一定の色を使用するかどうか | -| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | -| `property_velocity_view_` | bool | true | 速度プロパティを使用するかどうか | -| `property_velocity_alpha_` | float | 1.0 | 速度プロパティのアルファ | -| `property_velocity_scale_` | float | 0.3 | 速度プロパティのスケール | -| `property_velocity_color_view_` | bool | false | 一定の色を使用するかどうか | -| `property_velocity_color_` | QColor | Qt::black | 速度プロパティの色 | -| `property_vel_max_` | float | 3.0 | 最大速度 [m/s] | +| 名称 | 型 | デフォルト値 | 説明 | +| ------------------------------- | ------ | ------------ | -------------------------------- | +| `property_path_view_` | bool | true | パスプロパティを使用するかどうか | +| `property_path_width_view_` | bool | false | 一定の幅を使用するかどうか | +| `property_path_width_` | float | 2.0 | パスプロパティの幅 [m] | +| `property_path_alpha_` | float | 1.0 | パスプロパティのアルファ | +| `property_path_color_view_` | bool | false | 一定の色を使用するかどうか | +| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | +| `property_velocity_view_` | bool | true | 速度プロパティを使用するかどうか | +| `property_velocity_alpha_` | float | 1.0 | 速度プロパティのアルファ | +| `property_velocity_scale_` | float | 0.3 | 速度プロパティのスケール | +| `property_velocity_color_view_` | bool | false | 一定の色を使用するかどうか | +| `property_velocity_color_` | QColor | Qt::black | 速度プロパティの色 | +| `property_vel_max_` | float | 3.0 | 最大速度 [m/s] | #### 走行可能領域 @@ -135,14 +137,16 @@ jsk_overlay_utils.cppとjsk_overlay_utils.hppはBSDライセンスです。 DrivableAreaモジュールは、現在の周りの走行可能なエリアを検出し、それをトラジェクトリプランニングとローカルプランニングに提供します。 **入力** -* 自車位置と姿勢 -* センサーデータ(点群、画像など) -* Map data (lane information, drivable area information) -* タスクマニュアル(実行するタスク) + +- 自車位置と姿勢 +- センサーデータ(点群、画像など) +- Map data (lane information, drivable area information) +- タスクマニュアル(実行するタスク) **出力** -* 走行可能領域の点群 -* 走行可能領域のポリゴン + +- 走行可能領域の点群 +- 走行可能領域のポリゴン **アルゴリズム** DrivableAreaモジュールは、以下のステップで走行可能領域を検出します。 @@ -155,39 +159,39 @@ DrivableAreaモジュールは、以下のステップで走行可能領域を **パラメータ** DrivableAreaモジュールの動作は、次のパラメータで構成できます。 -* センサーパラメータ(スキャン範囲、解像度など) -* フィルターパラメータ(地面検出しきい値、障害物検出しきい値など) -* 抽出パラメータ(走行可能エリアの最小サイズ、最大傾斜角度など) -* `post resampling`パラメータ(カーネルサイズ、シグマ値など) +- センサーパラメータ(スキャン範囲、解像度など) +- フィルターパラメータ(地面検出しきい値、障害物検出しきい値など) +- 抽出パラメータ(走行可能エリアの最小サイズ、最大傾斜角度など) +- `post resampling`パラメータ(カーネルサイズ、シグマ値など) **評価指標** DrivableAreaモジュールの性能は、以下の指標によって評価できます。 -* 正答率 -* 再現率 -* F1スコア -* 処理時間 +- 正答率 +- 再現率 +- F1スコア +- 処理時間 **依存関係** DrivableAreaモジュールは、以下のコンポーネントに依存しています。 -* ロケーション(自車位置と姿勢の提供) -* センサー(点群と画像データの提供) -* マップ(レーン情報と走行可能エリア情報の提供) -* タスクマネージャー(実行するタスクの提供) +- ロケーション(自車位置と姿勢の提供) +- センサー(点群と画像データの提供) +- マップ(レーン情報と走行可能エリア情報の提供) +- タスクマネージャー(実行するタスクの提供) **制限事項** DrivableAreaモジュールには、次の制限事項があります。 -* センサーの死角の影響を受けます。 -* 動的障害物(歩行者、車両など)を検出できません。 -* 急激な勾配や複雑な環境では、走行可能領域を正確に検出できない場合があります。 +- センサーの死角の影響を受けます。 +- 動的障害物(歩行者、車両など)を検出できません。 +- 急激な勾配や複雑な環境では、走行可能領域を正確に検出できない場合があります。 | 名前 | タイプ | 初期値 | 説明 | -| ------------------------ | ----- | ------- | --------------------------------------- | -| `color_scheme_property_` | 整数 | 0 | 走行可能エリアプロパティのカラーテーマ | -| `alpha_property_` | float | 0.2 | 走行可能エリアプロパティのアルファ値 | -| `draw_under_property_` | bool | false | 背景として描画するか否か | +| ------------------------ | ------ | ------ | -------------------------------------- | +| `color_scheme_property_` | 整数 | 0 | 走行可能エリアプロパティのカラーテーマ | +| `alpha_property_` | float | 0.2 | 走行可能エリアプロパティのアルファ値 | +| `draw_under_property_` | bool | false | 背景として描画するか否か | #### PathFootprint @@ -204,21 +208,22 @@ PathFootprintは、次の機能を提供します。 - PathFootprintは、最も高い評価を得たトラジェクトリを返します。 - これにより、Autoware.Planningコンポーネントは、自車位置と目標値に基づいて、最適なトラジェクトリを選択できます。 -| Name | Type | Default Value | Description | -| -------------------------------- | ------ | ------------- | ---------------------------------------------- | +| Name | Type | Default Value | Description | +| -------------------------------- | ------ | ------------- | ---------------------------------------------------- | | `property_path_footprint_view_` | bool | true | パスフットプリントプロパティを使用するかどうかの設定 | -| `property_path_footprint_alpha_` | float | 1.0 | パスフットプリントプロパティのアルファ値 | -| `property_path_footprint_color_` | QColor | Qt::black | パスフットプリントプロパティの色 | -| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | -| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | -| `property_rear_overhang_` | float | 1.03 | リアオーバーハング [m] | +| `property_path_footprint_alpha_` | float | 1.0 | パスフットプリントプロパティのアルファ値 | +| `property_path_footprint_color_` | QColor | Qt::black | パスフットプリントプロパティの色 | +| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | +| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | +| `property_rear_overhang_` | float | 1.03 | リアオーバーハング [m] | #### Trajectory AutowareのTrajectoryコンポーネントは、次のことを行う責任があります。 -* センサー情報から障害物と車線の認識(perception)。 -* 動的経路計画(Dynamic Path Planning)による、自車位置と障害物に関する知識に基づく経路の生成。 -* エラストキネティックモデル(Elastokinetic Model)による、経路に対する速度、加速度制御。 + +- センサー情報から障害物と車線の認識(perception)。 +- 動的経路計画(Dynamic Path Planning)による、自車位置と障害物に関する知識に基づく経路の生成。 +- エラストキネティックモデル(Elastokinetic Model)による、経路に対する速度、加速度制御。 経路の生成プロセスは、2つの主要なサブプロセスに分かれています。 @@ -226,32 +231,34 @@ AutowareのTrajectoryコンポーネントは、次のことを行う責任が 2. **ローカルパスプランニング**:障害物と自車位置に基づいて現実的な経路を計算します。 ローカルパスプランニングでは、以下を考慮して経路を計算します。 -* 障害物逸脱量 -* 加速度逸脱量 -* 速度逸脱量 + +- 障害物逸脱量 +- 加速度逸脱量 +- 速度逸脱量 また、経路の生成時には以下の制約が考慮されます。 -* 最小曲率半径 -* 最大速度 -* 最大加速度 + +- 最小曲率半径 +- 最大速度 +- 最大加速度 経路が生成されると、'post resampling`が適用され、Planningコンポーネントに渡される前に、経路が滑らかで連続的になります。 -| 名称 | 型 | 初期値 | 説明 | -| --------------------------------------- | -------- | ----------- | ----------------------------------------------------- | -| `property_path_view_` | 論理値 | true | パスプロパティを使用するかどうか | -| `property_path_width_` | 浮動小数 | 2.0 | パスプロパティの幅 [m] | -| `property_path_alpha_` | 浮動小数 | 1.0 | パスプロパティのアルファ | -| `property_path_color_view_` | 論理値 | false | 定数値を使用するかどうか | -| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | -| `property_velocity_view_` | 論理値 | true | Velocityプロパティを使用するかどうか | -| `property_velocity_alpha_` | 浮動小数 | 1.0 | Velocityプロパティのアルファ | -| `property_velocity_scale_` | 浮動小数 | 0.3 | Velocityプロパティのスケール | -| `property_velocity_color_view_` | 論理値 | false | 定数値を使用するかどうか | -| `property_velocity_color_` | QColor | Qt::black | Velocityプロパティの色 | -| `property_velocity_text_view_` | 論理値 | false | Velocityをテキストで表示する | -| `property_velocity_text_scale_` | 浮動小数 | 0.3 | Velocityプロパティのスケール | -| `property_vel_max_` | 浮動小数 | 3.0 | 最大速度 [m/s] | +| 名称 | 型 | 初期値 | 説明 | +| ------------------------------- | -------- | --------- | ------------------------------------ | +| `property_path_view_` | 論理値 | true | パスプロパティを使用するかどうか | +| `property_path_width_` | 浮動小数 | 2.0 | パスプロパティの幅 [m] | +| `property_path_alpha_` | 浮動小数 | 1.0 | パスプロパティのアルファ | +| `property_path_color_view_` | 論理値 | false | 定数値を使用するかどうか | +| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | +| `property_velocity_view_` | 論理値 | true | Velocityプロパティを使用するかどうか | +| `property_velocity_alpha_` | 浮動小数 | 1.0 | Velocityプロパティのアルファ | +| `property_velocity_scale_` | 浮動小数 | 0.3 | Velocityプロパティのスケール | +| `property_velocity_color_view_` | 論理値 | false | 定数値を使用するかどうか | +| `property_velocity_color_` | QColor | Qt::black | Velocityプロパティの色 | +| `property_velocity_text_view_` | 論理値 | false | Velocityをテキストで表示する | +| `property_velocity_text_scale_` | 浮動小数 | 0.3 | Velocityプロパティのスケール | +| `property_vel_max_` | 浮動小数 | 3.0 | 最大速度 [m/s] | #### TrajectoryFootprint @@ -259,39 +266,39 @@ AutowareのTrajectoryコンポーネントは、次のことを行う責任が このコンポーネントは次の入力を取ります。 -* `CurrentPose`:自車位置 -* `LaneCenterline`:車線の中心線 -* `Trajectory`:プランニングコンポーネントから提供された経路 +- `CurrentPose`:自車位置 +- `LaneCenterline`:車線の中心線 +- `Trajectory`:プランニングコンポーネントから提供された経路 そして次の出力を生成します: -* `TrajectoryFootprint`:経路幅と経路半径が追加された経路 - -| 名前 | タイプ | デフォルト値 | 説明 | -| -------------------------------------- | ------ | -------------------------- | ----------------------------------------- | -| `property_trajectory_footprint_view_` | bool | true | Trajectory Footprint プロパティを使用するかどうか | -| `property_trajectory_footprint_alpha_` | float | 1.0 | Trajectory Footprint プロパティのアルファ値 | -| `property_trajectory_footprint_color_` | QColor | QColor(230, 230, 50) | Trajectory Footprint プロパティのカラー値 | -| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | -| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | -| `property_rear_overhang_` | float | 1.03 | リアオーバーハング [m] | -| `property_trajectory_point_view_` | bool | false | Trajectory Point プロパティを使用するかどうか | -| `property_trajectory_point_alpha_` | float | 1.0 | Trajectory Point プロパティのアルファ値 | -| `property_trajectory_point_color_` | QColor | QColor(0, 60, 255) | Trajectory Point プロパティのカラー値 | -| `property_trajectory_point_radius_` | float | 0.1 | Trajectory Point プロパティの半径値 | +- `TrajectoryFootprint`:経路幅と経路半径が追加された経路 + +| 名前 | タイプ | デフォルト値 | 説明 | +| -------------------------------------- | ------ | -------------------- | ------------------------------------------------- | +| `property_trajectory_footprint_view_` | bool | true | Trajectory Footprint プロパティを使用するかどうか | +| `property_trajectory_footprint_alpha_` | float | 1.0 | Trajectory Footprint プロパティのアルファ値 | +| `property_trajectory_footprint_color_` | QColor | QColor(230, 230, 50) | Trajectory Footprint プロパティのカラー値 | +| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | +| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | +| `property_rear_overhang_` | float | 1.03 | リアオーバーハング [m] | +| `property_trajectory_point_view_` | bool | false | Trajectory Point プロパティを使用するかどうか | +| `property_trajectory_point_alpha_` | float | 1.0 | Trajectory Point プロパティのアルファ値 | +| `property_trajectory_point_color_` | QColor | QColor(0, 60, 255) | Trajectory Point プロパティのカラー値 | +| `property_trajectory_point_radius_` | float | 0.1 | Trajectory Point プロパティの半径値 | #### MaxVelocity Planningモジュールによって計算された最も速く走行可能な速度。この速度は、周囲環境や自車位置に基づいてシステムが決定します。 -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------------- | ------ | -------------------------------------------------- | ------------------------------------------------ | -| `property_topic_name_` | 文字列 | `/planning/scenario_planning/current_max_velocity` | 最大速度を購読するためのトピック | -| `property_text_color_` | QColor | QColor(255, 255, 255) | テキストの色 | -| `property_left_` | 整数 | 128 | プロッタウィンドウの左側 [px] | -| `property_top_` | 整数 | 128 | プロッタウィンドウの上 [px] | -| `property_length_` | 整数 | 96 | プロッタウィンドウの長さ [px] | -| `property_value_scale_` | 浮動小数 | 1.0 / 4.0 | 値のスケール | +| 名前 | タイプ | デフォルト値 | 説明 | +| ----------------------- | -------- | -------------------------------------------------- | -------------------------------- | +| `property_topic_name_` | 文字列 | `/planning/scenario_planning/current_max_velocity` | 最大速度を購読するためのトピック | +| `property_text_color_` | QColor | QColor(255, 255, 255) | テキストの色 | +| `property_left_` | 整数 | 128 | プロッタウィンドウの左側 [px] | +| `property_top_` | 整数 | 128 | プロッタウィンドウの上 [px] | +| `property_length_` | 整数 | 96 | プロッタウィンドウの長さ [px] | +| `property_value_scale_` | 浮動小数 | 1.0 / 4.0 | 値のスケール | ## 使用方法 @@ -319,4 +326,3 @@ Material Designアイコンは、Apache Licenseバージョン2.0のライセン ### 確認 Googleがこれらのアイコンをコミュニティに公開し、開発者やデザイナーがプロジェクトの視覚的魅力とユーザーエクスペリエンスを向上させることができることに対し、謝意を表したいと思います。 - diff --git a/common/tier4_state_rviz_plugin/README.md b/common/tier4_state_rviz_plugin/README.md index 55c690d69ba84..edd17786658dc 100644 --- a/common/tier4_state_rviz_plugin/README.md +++ b/common/tier4_state_rviz_plugin/README.md @@ -9,14 +9,14 @@ ### 入力 -| 名前 | タイプ | 説明 | -| -------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------- | -| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | オペレーションモードの状態を表します | -| `/api/routing/state` | `autoware_adapi_v1_msgs::msg::RouteState` | ルートの状態を表します | +| 名前 | タイプ | 説明 | +| ---------------------------------------- | -------------------------------------------------------------- | ---------------------------------------- | +| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | オペレーションモードの状態を表します | +| `/api/routing/state` | `autoware_adapi_v1_msgs::msg::RouteState` | ルートの状態を表します | | `/api/localization/initialization_state` | `autoware_adapi_v1_msgs::msg::LocalizationInitializationState` | ローカリゼーション初期化の状態を表します | -| `/api/motion/state` | `autoware_adapi_v1_msgs::msg::MotionState` | モーションの状態を表します | -| `/api/autoware/get/emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急事態の状態を表します | -| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアの状態を表します | +| `/api/motion/state` | `autoware_adapi_v1_msgs::msg::MotionState` | モーションの状態を表します | +| `/api/autoware/get/emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急事態の状態を表します | +| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアの状態を表します | ### 出力 @@ -46,16 +46,16 @@ Control層は、計画された経路に基づいて車両を制御する。こ Autowareは、次のような主要モジュールで構成されている。 -* **Perception:** - * LIDAR Point Cloud Filter - * Object Detection - * Object Tracking -* **Planning:** - * Path Planning - * Trajectory Generation -* **Control:** - * Motion Planner - * Vehicle Control +- **Perception:** + - LIDAR Point Cloud Filter + - Object Detection + - Object Tracking +- **Planning:** + - Path Planning + - Trajectory Generation +- **Control:** + - Motion Planner + - Vehicle Control **実装** @@ -67,21 +67,21 @@ Autowareは、自動運転車両の開発に使用できる。研究目的でも **追加資料** -* [Autoware GitHubリポジトリ](https://github.com/autowarefoundation/autoware.auto) -* [Autowareドキュメント](https://www.autoware.org/documentation/) - -| 名前 | タイプ | 説明 | -| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | -| `/api/operation_mode/change_to_autonomous` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 自動運転モードに変更するサービス | -| `/api/operation_mode/change_to_stop` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 停止モードに変更するサービス | -| `/api/operation_mode/change_to_local` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | ローカルモードに変更するサービス | -| `/api/operation_mode/change_to_remote` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | リモートモードに変更するサービス | -| `/api/operation_mode/enable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autowareによる車両制御を有効にするサービス | -| `/api/operation_mode/disable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autowareによる車両制御を無効にするサービス | -| `/api/routing/clear_route` | `autoware_adapi_v1_msgs::srv::ClearRoute` | ルート状態をクリアするサービス | -| `/api/motion/accept_start` | `autoware_adapi_v1_msgs::srv::AcceptStart` | 車両の始動を受け入れるサービス | -| `/api/autoware/set/emergency` | `tier4_external_api_msgs::srv::SetEmergency` | 外部緊急状態を設定するサービス | -| `/planning/scenario_planning/max_velocity_default` | `tier4_planning_msgs::msg::VelocityLimit` | 車両の最大速度を設定するトピック | +- [Autoware GitHubリポジトリ](https://github.com/autowarefoundation/autoware.auto) +- [Autowareドキュメント](https://www.autoware.org/documentation/) + +| 名前 | タイプ | 説明 | +| -------------------------------------------------- | -------------------------------------------------- | ------------------------------------------ | +| `/api/operation_mode/change_to_autonomous` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 自動運転モードに変更するサービス | +| `/api/operation_mode/change_to_stop` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 停止モードに変更するサービス | +| `/api/operation_mode/change_to_local` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | ローカルモードに変更するサービス | +| `/api/operation_mode/change_to_remote` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | リモートモードに変更するサービス | +| `/api/operation_mode/enable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autowareによる車両制御を有効にするサービス | +| `/api/operation_mode/disable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autowareによる車両制御を無効にするサービス | +| `/api/routing/clear_route` | `autoware_adapi_v1_msgs::srv::ClearRoute` | ルート状態をクリアするサービス | +| `/api/motion/accept_start` | `autoware_adapi_v1_msgs::srv::AcceptStart` | 車両の始動を受け入れるサービス | +| `/api/autoware/set/emergency` | `tier4_external_api_msgs::srv::SetEmergency` | 外部緊急状態を設定するサービス | +| `/planning/scenario_planning/max_velocity_default` | `tier4_planning_msgs::msg::VelocityLimit` | 車両の最大速度を設定するトピック | ## 使用方法 @@ -96,4 +96,3 @@ Autowareは、自動運転車両の開発に使用できる。研究目的でも 3. 自動ボタンがアクティブ化されていれば、クリックでエンゲージできます。 ![select_auto](./images/select_auto_ja.png) - diff --git a/common/tier4_system_rviz_plugin/README.md b/common/tier4_system_rviz_plugin/README.md index 9c657087c9a9f..20d60b9034f93 100644 --- a/common/tier4_system_rviz_plugin/README.md +++ b/common/tier4_system_rviz_plugin/README.md @@ -6,7 +6,6 @@ ## 入力 -| 名前 | タイプ | 説明 | -| --------------------------------- | ------------------------------------------------ | ------------------------------------------------------------ | +| 名前 | タイプ | 説明 | +| --------------------------------- | ------------------------------------------------ | ------------------------------------------------ | | `/system/emergency/hazard_status` | `autoware_system_msgs::msg::HazardStatusStamped` | このトピックは Autoware からの緊急情報を表します | - diff --git a/common/tier4_traffic_light_rviz_plugin/README.md b/common/tier4_traffic_light_rviz_plugin/README.md index 62f23680fbf0b..222978c159d04 100644 --- a/common/tier4_traffic_light_rviz_plugin/README.md +++ b/common/tier4_traffic_light_rviz_plugin/README.md @@ -8,8 +8,8 @@ ### 出力 -| 名称 | 型 | 説明 | -| ------------------------------------------------------ | ------------------------------------------------------ | ----------------------------- | +| 名称 | 型 | 説明 | +| ------------------------------------------------------- | ------------------------------------------------------- | -------------- | | `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 交通信号の公開 | ## 操作方法 @@ -32,4 +32,3 @@
- diff --git a/common/tier4_vehicle_rviz_plugin/README.md b/common/tier4_vehicle_rviz_plugin/README.md index 44e67e3157ca0..1096cbb9497d3 100644 --- a/common/tier4_vehicle_rviz_plugin/README.md +++ b/common/tier4_vehicle_rviz_plugin/README.md @@ -11,12 +11,12 @@ jsk_overlay_utils.cpp および jsk_overlay_utils.hpp は BSD ライセンスで ### 入力 -| 名前 | タイプ | 説明 | -| ------------------------------------ | ---------------------------------------------------------- | -------------------------------------- | -| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両の捻じれ | -| `/control/turn_signal_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ターンシグナルのステータス | -| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングのステータス | -| `/localization/acceleration` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 加速度 | +| 名前 | タイプ | 説明 | +| --------------------------------- | -------------------------------------------------- | -------------------------- | +| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両の捻じれ | +| `/control/turn_signal_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ターンシグナルのステータス | +| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングのステータス | +| `/localization/acceleration` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 加速度 | ## パラメータ @@ -24,64 +24,62 @@ jsk_overlay_utils.cpp および jsk_overlay_utils.hpp は BSD ライセンスで #### ConsoleMeter -| 名 | 型 | デフォルト値 | 説明 | -| --------------------------------- | ------ | ---------------------------- | ----------------------------------------- | -| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | -| `property_left_` | int | 128 | プロッタウィンドウの左 [px] | -| `property_top_` | int | 128 | プロッタウィンドウの上 [px] | -| `property_length_` | int | 256 | プロッタウィンドウの高さ [px] | -| `property_value_height_offset_` | int | 0 | プロッタウィンドウの高さオフセット [px] | -| `property_value_scale_` | float | 1.0 / 6.667 | 値のスケール | +| 名 | 型 | デフォルト値 | 説明 | +| ------------------------------- | ------ | -------------------- | --------------------------------------- | +| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | +| `property_left_` | int | 128 | プロッタウィンドウの左 [px] | +| `property_top_` | int | 128 | プロッタウィンドウの上 [px] | +| `property_length_` | int | 256 | プロッタウィンドウの高さ [px] | +| `property_value_height_offset_` | int | 0 | プロッタウィンドウの高さオフセット [px] | +| `property_value_scale_` | float | 1.0 / 6.667 | 値のスケール | #### SteeringAngle -| Name | Type | Default Value | Description | -| ------------------------------- | ------ | -------------------- | ---------------------------------------- | -| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | -| `property_left_` | int | 128 | プロッタウィンドウの左辺 [px] | +| Name | Type | Default Value | Description | +| ------------------------------- | ------ | -------------------- | --------------------------------------- | +| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | +| `property_left_` | int | 128 | プロッタウィンドウの左辺 [px] | | `property_top_` | int | 128 | プロッタウィンドウの上辺 [px] | | `property_length_` | int | 256 | プロッタウィンドウの高さ [px] | | `property_value_height_offset_` | int | 0 | プロッタウィンドウの高さオフセット [px] | | `property_value_scale_` | float | 1.0 / 6.667 | 値のスケール | -| `property_handle_angle_scale_` | float | 3.0 | ハンドル角に対する操舵角のスケール | +| `property_handle_angle_scale_` | float | 3.0 | ハンドル角に対する操舵角のスケール | #### TurnSignal Planningモジュールは、 поворотный сигнал からの情報を消費します。 -| 名称 | タイプ | 初期値 | 説明 | -| ------------------ | ---- | ------ | ---------------------------------------- | -| `property_left_` | int | 128 | プロッタウィンドウの左端 [px] | -| `property_top_` | int | 128 | プロッタウィンドウの上端 [px] | -| `property_width_` | int | 256 | プロッタウィンドウの左幅 [px] | -| `property_height_` | int | 256 | プロッタウィンドウの高さ [px] | +| 名称 | タイプ | 初期値 | 説明 | +| ------------------ | ------ | ------ | ----------------------------- | +| `property_left_` | int | 128 | プロッタウィンドウの左端 [px] | +| `property_top_` | int | 128 | プロッタウィンドウの上端 [px] | +| `property_width_` | int | 256 | プロッタウィンドウの左幅 [px] | +| `property_height_` | int | 256 | プロッタウィンドウの高さ [px] | #### 速度履歴 - -| Name | Type | Default Value | 説明 | +| Name | Type | Default Value | 説明 | | ------------------------------- | ------ | ------------- | -------------------------- | -| `property_velocity_timeout_` | float | 10.0 | 速度タイムアウト [秒] | -| `property_velocity_alpha_` | float | 1.0 | 速度のアルファ | -| `property_velocity_scale_` | float | 0.3 | 速度のスケール | -| `property_velocity_color_view_` | bool | false | 定色を使用 | -| `property_velocity_color_` | QColor | Qt::black | 速度履歴の色 | +| `property_velocity_timeout_` | float | 10.0 | 速度タイムアウト [秒] | +| `property_velocity_alpha_` | float | 1.0 | 速度のアルファ | +| `property_velocity_scale_` | float | 0.3 | 速度のスケール | +| `property_velocity_color_view_` | bool | false | 定色を使用 | +| `property_velocity_color_` | QColor | Qt::black | 速度履歴の色 | | `property_vel_max_` | float | 3.0 | 色の境界速度の最大値 [m/s] | #### 加速度計 - -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------------------------- | ------ | -------------------- | --------------------------------------------------- | -| `property_normal_text_color_` | QColor | QColor(25, 255, 240) | 通常のテキストの色 | -| `property_emergency_text_color_` | QColor | QColor(255, 80, 80) | 緊急時の加速度の色 | -| `property_left_` | int | 896 | プロッターウィンドウの左端 [px] | -| `property_top_` | int | 128 | プロッターウィンドウの上端 [px] | -| `property_length_` | int | 256 | プロッターウィンドウの高さ [px] | -| `property_value_height_offset_` | int | 0 | プロッターウィンドウの高さオフセット [px] | -| `property_value_scale_` | float | 1 / 6.667 | 値テキストのスケール | -| `property_emergency_threshold_max_` | float | 1.0 | 緊急時の最大加速度のしきい値 [m/s^2] | -| `property_emergency_threshold_min_` | float | -2.5 | 緊急時の最小加速度のしきい値 [m/s^2] | +| 名前 | タイプ | デフォルト値 | 説明 | +| ----------------------------------- | ------ | -------------------- | ----------------------------------------- | +| `property_normal_text_color_` | QColor | QColor(25, 255, 240) | 通常のテキストの色 | +| `property_emergency_text_color_` | QColor | QColor(255, 80, 80) | 緊急時の加速度の色 | +| `property_left_` | int | 896 | プロッターウィンドウの左端 [px] | +| `property_top_` | int | 128 | プロッターウィンドウの上端 [px] | +| `property_length_` | int | 256 | プロッターウィンドウの高さ [px] | +| `property_value_height_offset_` | int | 0 | プロッターウィンドウの高さオフセット [px] | +| `property_value_scale_` | float | 1 / 6.667 | 値テキストのスケール | +| `property_emergency_threshold_max_` | float | 1.0 | 緊急時の最大加速度のしきい値 [m/s^2] | +| `property_emergency_threshold_min_` | float | -2.5 | 緊急時の最小加速度のしきい値 [m/s^2] | ## 既定値 / 既知の制約 @@ -95,4 +93,3 @@ Planningモジュールは、 поворотный сигнал からの情報 ![select_vehicle_plugin](./images/select_vehicle_plugin.png) 3. ステータスを表示するトピックの名前を入力します。 ![select_topic_name](./images/select_topic_name.png) - diff --git a/common/traffic_light_utils/README.md b/common/traffic_light_utils/README.md index 32acb085a19ad..6b7e2451b4d51 100644 --- a/common/traffic_light_utils/README.md +++ b/common/traffic_light_utils/README.md @@ -4,4 +4,3 @@ このパッケージには、トラフィックライト認識モジュール全体で有用な共通関数のライブラリが含まれています。 このパッケージには、ROIタイプの処理、さまざまなデータ型とメッセージ型間の変換、およびそれらに関連する共通関数の関数が含まれる場合があります。 - diff --git a/common/tvm_utility/README.md b/common/tvm_utility/README.md index f7c17d040ba35..e7ad111f97aa2 100644 --- a/common/tvm_utility/README.md +++ b/common/tvm_utility/README.md @@ -16,7 +16,6 @@ TVMベースの機械学習推論パイプラインを構築するために役 パイプラインの各ステージには、入力データをパラメータとして取得し、出力データを返す`schedule`関数があります。パイプラインオブジェクトが作成されると、`pipeline.schedule`が呼び出されてパイプラインが実行されます。 - ```{cpp} int main() { create_subscription("points_raw", @@ -49,7 +48,6 @@ int main() { 関数を活用するパッケージのソースディレクトリの構造は次のとおりです。 - ```{text} . ├── data @@ -68,7 +66,6 @@ int main() { 他のモデルファイルはパッケージフォルダの下の autoware_data フォルダ内に、次の構造を使用して格納する必要があります。 - ```{text} $HOME/autoware_data @@ -124,4 +121,4 @@ $HOME/autoware_data ## 関連する問題 - +``` diff --git a/common/tvm_utility/artifacts/README.md b/common/tvm_utility/artifacts/README.md index 7fb482bef715e..04ed025b69272 100644 --- a/common/tvm_utility/artifacts/README.md +++ b/common/tvm_utility/artifacts/README.md @@ -4,4 +4,3 @@ 例: ./artifacts/yolo_v2_tiny - diff --git a/control/autoware_autonomous_emergency_braking/README.md b/control/autoware_autonomous_emergency_braking/README.md index 2fea30db0cc00..62e95f0b13a63 100644 --- a/control/autoware_autonomous_emergency_braking/README.md +++ b/control/autoware_autonomous_emergency_braking/README.md @@ -194,36 +194,36 @@ AEB モジュールは、自動運転車両が後退している場合にも衝 ## パラメータ -| Name | 単位 | タイプ | 説明 | デフォルト値 | -| :--------------------------------- | :----- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| publish_debug_markers | [なし] | ブール | デバッグマーカーを発行するフラグ | true | -| publish_debug_pointcloud | [なし] | ブール | デバッグに使用されるポイントクラウドを発行するフラグ | false | -| use_predicted_trajectory | [なし] | ブール | コントロールモジュールからの予測パスの使用フラグ | true | -| use_imu_path | [なし] | ブール | センサーデータによって生成された予測パスの使用フラグ | true | -| use_object_velocity_calculation | [なし] | ブール | オブジェクト速度計算の使用フラグ。 `false` に設定すると、オブジェクト速度は 0 [m/s] に設定されます。 | true | -| check_autoware_state | [なし] | ブール | Autoware ステートチェックの有効/無効フラグ。 `false` に設定すると、エゴ車が AUTONOMOUS ステートにない場合でも AEB モジュールは動作します。 | true | -| detection_range_min_height | [m] | 倍精度 | 誤検出によるゴーストブレーキを回避するために使用される検出範囲の最小高さ | 0.0 | -| detection_range_max_height_margin | [m] | 倍精度 | 誤検出によるゴーストブレーキを回避するために使用される検出範囲の最大高さのマージン。 `detection_range_max_height = vehicle_height + detection_range_max_height_margin` | 0.0 | -| voxel_grid_x | [m] | 倍精度 | ボクセルグリッドフィルタの X 軸ダウンサンプリングパラメータ | 0.05 | -| voxel_grid_y | [m] | 倍精度 | ボクセルグリッドフィルタの Y 軸ダウンサンプリングパラメータ | 0.05 | -| voxel_grid_z | [m] | 倍精度 | ボクセルグリッドフィルタの Z 軸ダウンサンプリングパラメータ | 減速 | -| cluster tolerance | [m] | 倍精度 | 2 つの点の間に許容可能な最大距離。それ以下の距離では、同じクラスタの一部とみなされます。 | 0.15 | -| cluster_minimum_height | [m] | 倍精度 | クラスタ内の少なくとも 1 つの点が衝突対象の可能性のあるクラスタに含まれるために、この値よりも高くする必要があります。 | 0.1 | -| minimum_cluster_size | [なし] | 整数 | 対象の障害物として考慮されるためには、クラスタに必要最低限のポイント数 | 10 | -| maximum_cluster_size | [なし] | 整数 | 対象の障害物として考慮されるためには、クラスタに含まれる最大ポイント数 | 10000 | -| min_generated_imu_path_length | [m] | 倍精度 | センサーによって生成された予測パスの最小距離 | 0.5 | -| max_generated_imu_path_length | [m] | 倍精度 | センサーによって生成された予測パスの最大距離 | 10.0 | -| expand_width | [m] | 倍精度 | 衝突チェック時のエゴ車両の拡張幅 | 0.1 | -| longitudinal_offset | [m] | 倍精度 | 衝突チェック時の縦方向オフセット距離 | 2.0 | -| t_response | [s] | 倍精度 | エゴ車が前方の車両を検知してから減速を開始するまでの反応時間 | 1.0 | -| a_ego_min | [m/ss] | 倍精度 | エゴ車両の最大減速度 | -3.0 | -| a_obj_min | [m/ss] | 倍精度 | オブジェクトの最大減速度 | -3.0 | -| imu_prediction_time_horizon | [s] | 倍精度 | センサーによって生成された予測パスの時間範囲 | 1.5 | -| imu_prediction_time_interval | [s] | 倍精度 | センサーによって生成された予測パスの時間間隔 | Planning | -| mpc_prediction_time_horizon | [s] | 倍精度 | mpc によって生成された予測パスの時間範囲 | 1.5 | -| mpc_prediction_time_interval | [s] | 倍精度 | mpc によって生成された予測パスの時間間隔 | 0.1 | -| aeb_hz | [なし] | 倍精度 | AEBが1秒間に動作する頻度 | 10 | -| speed_calculation_expansion_margin | [m] | 倍精度 | 開始速度計算時のエゴ車両の拡張幅 | 0.1 | +| Name | 単位 | タイプ | 説明 | デフォルト値 | +| :--------------------------------- | :----- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| publish_debug_markers | [なし] | ブール | デバッグマーカーを発行するフラグ | true | +| publish_debug_pointcloud | [なし] | ブール | デバッグに使用されるポイントクラウドを発行するフラグ | false | +| use_predicted_trajectory | [なし] | ブール | コントロールモジュールからの予測パスの使用フラグ | true | +| use_imu_path | [なし] | ブール | センサーデータによって生成された予測パスの使用フラグ | true | +| use_object_velocity_calculation | [なし] | ブール | オブジェクト速度計算の使用フラグ。 `false` に設定すると、オブジェクト速度は 0 [m/s] に設定されます。 | true | +| check_autoware_state | [なし] | ブール | Autoware ステートチェックの有効/無効フラグ。 `false` に設定すると、エゴ車が AUTONOMOUS ステートにない場合でも AEB モジュールは動作します。 | true | +| detection_range_min_height | [m] | 倍精度 | 誤検出によるゴーストブレーキを回避するために使用される検出範囲の最小高さ | 0.0 | +| detection_range_max_height_margin | [m] | 倍精度 | 誤検出によるゴーストブレーキを回避するために使用される検出範囲の最大高さのマージン。 `detection_range_max_height = vehicle_height + detection_range_max_height_margin` | 0.0 | +| voxel_grid_x | [m] | 倍精度 | ボクセルグリッドフィルタの X 軸ダウンサンプリングパラメータ | 0.05 | +| voxel_grid_y | [m] | 倍精度 | ボクセルグリッドフィルタの Y 軸ダウンサンプリングパラメータ | 0.05 | +| voxel_grid_z | [m] | 倍精度 | ボクセルグリッドフィルタの Z 軸ダウンサンプリングパラメータ | 減速 | +| cluster tolerance | [m] | 倍精度 | 2 つの点の間に許容可能な最大距離。それ以下の距離では、同じクラスタの一部とみなされます。 | 0.15 | +| cluster_minimum_height | [m] | 倍精度 | クラスタ内の少なくとも 1 つの点が衝突対象の可能性のあるクラスタに含まれるために、この値よりも高くする必要があります。 | 0.1 | +| minimum_cluster_size | [なし] | 整数 | 対象の障害物として考慮されるためには、クラスタに必要最低限のポイント数 | 10 | +| maximum_cluster_size | [なし] | 整数 | 対象の障害物として考慮されるためには、クラスタに含まれる最大ポイント数 | 10000 | +| min_generated_imu_path_length | [m] | 倍精度 | センサーによって生成された予測パスの最小距離 | 0.5 | +| max_generated_imu_path_length | [m] | 倍精度 | センサーによって生成された予測パスの最大距離 | 10.0 | +| expand_width | [m] | 倍精度 | 衝突チェック時のエゴ車両の拡張幅 | 0.1 | +| longitudinal_offset | [m] | 倍精度 | 衝突チェック時の縦方向オフセット距離 | 2.0 | +| t_response | [s] | 倍精度 | エゴ車が前方の車両を検知してから減速を開始するまでの反応時間 | 1.0 | +| a_ego_min | [m/ss] | 倍精度 | エゴ車両の最大減速度 | -3.0 | +| a_obj_min | [m/ss] | 倍精度 | オブジェクトの最大減速度 | -3.0 | +| imu_prediction_time_horizon | [s] | 倍精度 | センサーによって生成された予測パスの時間範囲 | 1.5 | +| imu_prediction_time_interval | [s] | 倍精度 | センサーによって生成された予測パスの時間間隔 | Planning | +| mpc_prediction_time_horizon | [s] | 倍精度 | mpc によって生成された予測パスの時間範囲 | 1.5 | +| mpc_prediction_time_interval | [s] | 倍精度 | mpc によって生成された予測パスの時間間隔 | 0.1 | +| aeb_hz | [なし] | 倍精度 | AEBが1秒間に動作する頻度 | 10 | +| speed_calculation_expansion_margin | [m] | 倍精度 | 開始速度計算時のエゴ車両の拡張幅 | 0.1 | ## 制約事項 @@ -236,4 +236,3 @@ AEB モジュールは、自動運転車両が後退している場合にも衝 - センサーデータから作成された予測経路の精度は、自車に搭載されたセンサーの精度に依存します。 ![aeb_range](./image/range.drawio.svg) - diff --git a/control/autoware_control_validator/README.md b/control/autoware_control_validator/README.md index 9a3b89a863029..9d025e7ffc841 100644 --- a/control/autoware_control_validator/README.md +++ b/control/autoware_control_validator/README.md @@ -9,10 +9,10 @@ 検証に対して、次の機能がサポートされており、しきい値をパラメータによって設定できます。 以下にリストされている機能は常に最新のインプリメンテーションに対応しているわけではありません。 -| 説明 | 引数 | 診断式 | -| ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | :--------------------------------------------------: | -| 逆速度: 計測速度が目標速度と符号が異なる。 | 計測速度 $v$、目標速度 $\hat{v}$、および速度パラメータ $c$ | $v \hat{v} < 0, \quad \lvert v \rvert > c$ | -| 過速度: 計測速度が目標速度を著しく上回る。 | 計測速度 $v$、目標速度 $\hat{v}$、比率パラメータ $r$、およびオフセットパラメータ $c$ | $\lvert v \rvert > (1 + r) \lvert \hat{v} \rvert + c$ | +| 説明 | 引数 | 診断式 | +| ------------------------------------------ | ------------------------------------------------------------------------------------ | :---------------------------------------------------: | +| 逆速度: 計測速度が目標速度と符号が異なる。 | 計測速度 $v$、目標速度 $\hat{v}$、および速度パラメータ $c$ | $v \hat{v} < 0, \quad \lvert v \rvert > c$ | +| 過速度: 計測速度が目標速度を著しく上回る。 | 計測速度 $v$、目標速度 $\hat{v}$、比率パラメータ $r$、およびオフセットパラメータ $c$ | $\lvert v \rvert > (1 + r) \lvert \hat{v} \rvert + c$ | - **基準軌跡と予測軌跡の逸脱量チェック**: 予測軌跡と基準軌跡との間の最大逸脱量が指定されたしきい値を超えている場合、無効になります。 @@ -24,11 +24,11 @@ `control_validator` には、次の入力量があります。 -| 名前 | タイプ | 説明 | -| ----------------------------------- | ------------------------------------- | ----------------------------------------------------------------------------------- | -| `~/input/kinematics` | nav_msgs/Odometry | 自車位置とツイスト | -| `~/input/reference_trajectory` | autoware_planning_msgs/Trajectory | Planningモジュールから出力され、追従すべきリファレンストラジェクトリ | -| `~/input/predicted_trajectory` | autoware_planning_msgs/Trajectory | Controlモジュールから出力された予測軌跡 | +| 名前 | タイプ | 説明 | +| ------------------------------ | --------------------------------- | -------------------------------------------------------------------- | +| `~/input/kinematics` | nav_msgs/Odometry | 自車位置とツイスト | +| `~/input/reference_trajectory` | autoware_planning_msgs/Trajectory | Planningモジュールから出力され、追従すべきリファレンストラジェクトリ | +| `~/input/predicted_trajectory` | autoware_planning_msgs/Trajectory | Controlモジュールから出力された予測軌跡 | ### 出力 @@ -51,10 +51,10 @@ Autoware.Autoは、以下のような内部処理を実行します。 - **状態推定:** GNSS、IMU、オドメトリなどのセンサから自車位置を推定します。 - **センサフュージョン:** 複数のセンサからデータを統合して、より正確でロバストな推定を行います。 -| 名前 | タイプ | 説明 | -| -------------------------- | ---------------------------------------- | -------------------------------------------------------------------- | +| 名前 | タイプ | 説明 | +| ---------------------------- | ---------------------------------------- | ----------------------------------------------------- | | `~/output/validation_status` | control_validator/ControlValidatorStatus | 経路の有効性/無効性の理由を知らせるバリデーターの状態 | -| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告する診断 | +| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告する診断 | ## パラメータ @@ -62,11 +62,11 @@ Autoware.Autoは、以下のような内部処理を実行します。 ### システムパラメータ -| 名前 | 型 | 説明 | デフォルト値 | -| :--------------------------- | :--- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------ | -| `publish_diag` | bool | trueの場合、診断msgが公開されます。 | true | -| `diag_error_count_threshold` | int | 連続して無効な軌跡の数がこのしきい値を超えた場合、diagはERRORに設定されます(例:しきい値= 1の場合、軌跡が無効であっても、次の軌跡が有効な場合はdiagはERRORになりません)。 | true | -| `display_on_terminal` | bool | エラーメッセージをターミナルに表示します。 | true | +| 名前 | 型 | 説明 | デフォルト値 | +| :--------------------------- | :--- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| `publish_diag` | bool | trueの場合、診断msgが公開されます。 | true | +| `diag_error_count_threshold` | int | 連続して無効な軌跡の数がこのしきい値を超えた場合、diagはERRORに設定されます(例:しきい値= 1の場合、軌跡が無効であっても、次の軌跡が有効な場合はdiagはERRORになりません)。 | true | +| `display_on_terminal` | bool | エラーメッセージをターミナルに表示します。 | true | ### アルゴリズムパラメータ @@ -74,10 +74,9 @@ Autoware.Autoは、以下のような内部処理を実行します。 インデックスが以下のしきい値を超えた場合、入力軌跡は無効と検出されます。 -| 名称 | タイプ | 説明 | デフォルト値 | -| :---------------------------------- | :----- | :--------------------------------------------------------------------------------------------------------- | :------------ | -| `thresholds.max_distance_deviation` | double | 予測パスと基準軌道間の最大距離逸脱量の無効なしきい値 [m] | 1.0 | -| `thresholds.rolling_back_velocity` | double | 自車速度の有効性を検証するためのしきい値速度 [m/s] | 0.5 | -| `thresholds.over_velocity_offset` | double | 自車速度の有効性を検証するためのしきい値速度オフセット [m/s] | 2.0 | -| `thresholds.over_velocity_ratio` | double | 自車速度の有効性を検証するためのしきい値速度比率 [*] | 0.2 | - +| 名称 | タイプ | 説明 | デフォルト値 | +| :---------------------------------- | :----- | :----------------------------------------------------------- | :----------- | +| `thresholds.max_distance_deviation` | double | 予測パスと基準軌道間の最大距離逸脱量の無効なしきい値 [m] | 1.0 | +| `thresholds.rolling_back_velocity` | double | 自車速度の有効性を検証するためのしきい値速度 [m/s] | 0.5 | +| `thresholds.over_velocity_offset` | double | 自車速度の有効性を検証するためのしきい値速度オフセット [m/s] | 2.0 | +| `thresholds.over_velocity_ratio` | double | 自車速度の有効性を検証するためのしきい値速度比率 [*] | 0.2 | diff --git a/control/autoware_external_cmd_selector/README.md b/control/autoware_external_cmd_selector/README.md index 0b61813eca35b..ce4bc46ae69a9 100644 --- a/control/autoware_external_cmd_selector/README.md +++ b/control/autoware_external_cmd_selector/README.md @@ -10,30 +10,29 @@ ### 入力トピック -| 名前 | タイプ | 説明 | -| --------------------------------------------- | ---- | --------------------------------------------------------- | -| `/api/external/set/command/local/control` | TBD | 局所的。制御の計算値 | -| `/api/external/set/command/local/heartbeat` | TBD | 局所的。ハートビート | -| `/api/external/set/command/local/shift` | TBD | 局所的。ドライブ、リアなどのようなギアシフト | -| `/api/external/set/command/local/turn_signal` | TBD | 局所的。左折、右折などのターなのが信号 | -| `/api/external/set/command/remote/control` | TBD | リモート。制御の計算値 | -| `/api/external/set/command/remote/heartbeat` | TBD | リモート。ハートビート | -| `/api/external/set/command/remote/shift` | TBD | リモート。ドライブ、リアなどのようなギアシフト | -| `/api/external/set/command/remote/turn_signal` | TBD | リモート。左折、右折などのターのが信号 | +| 名前 | タイプ | 説明 | +| ---------------------------------------------- | ------ | ---------------------------------------------- | +| `/api/external/set/command/local/control` | TBD | 局所的。制御の計算値 | +| `/api/external/set/command/local/heartbeat` | TBD | 局所的。ハートビート | +| `/api/external/set/command/local/shift` | TBD | 局所的。ドライブ、リアなどのようなギアシフト | +| `/api/external/set/command/local/turn_signal` | TBD | 局所的。左折、右折などのターなのが信号 | +| `/api/external/set/command/remote/control` | TBD | リモート。制御の計算値 | +| `/api/external/set/command/remote/heartbeat` | TBD | リモート。ハートビート | +| `/api/external/set/command/remote/shift` | TBD | リモート。ドライブ、リアなどのようなギアシフト | +| `/api/external/set/command/remote/turn_signal` | TBD | リモート。左折、右折などのターのが信号 | ### 出力トピック -| 名前 | タイプ | 説明 | -| --------------------------------------------------------- | --------------------------------------------------- | ----------------------------------------------- | -| `/control/external_cmd_selector/current_selector_mode` | TBD | 現在選択中のモード(リモートまたはローカル) | -| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | ノードがアクティブかどうかを確認する | -| `/external/selected/external_control_cmd` | TBD | 現在のモードで制御コマンドを透過する | -| `/external/selected/gear_cmd` | autoware_vehicle_msgs::msg::GearCommand | 現在のモードでギアコマンドを透過する | -| `/external/selected/hazard_lights_cmd` | autoware_vehicle_msgs::msg::HazardLightsCommand | 現在のモードでハザードランプを透過する | -| `/external/selected/heartbeat` | TBD | 現在のモードでハートビートを透過する | -| `/external/selected/turn_indicators_cmd` | autoware_vehicle_msgs::msg::TurnIndicatorsCommand | 現在のモードでターンインジケーターを透過する | +| 名前 | タイプ | 説明 | +| ------------------------------------------------------ | ------------------------------------------------- | -------------------------------------------- | +| `/control/external_cmd_selector/current_selector_mode` | TBD | 現在選択中のモード(リモートまたはローカル) | +| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | ノードがアクティブかどうかを確認する | +| `/external/selected/external_control_cmd` | TBD | 現在のモードで制御コマンドを透過する | +| `/external/selected/gear_cmd` | autoware_vehicle_msgs::msg::GearCommand | 現在のモードでギアコマンドを透過する | +| `/external/selected/hazard_lights_cmd` | autoware_vehicle_msgs::msg::HazardLightsCommand | 現在のモードでハザードランプを透過する | +| `/external/selected/heartbeat` | TBD | 現在のモードでハートビートを透過する | +| `/external/selected/turn_indicators_cmd` | autoware_vehicle_msgs::msg::TurnIndicatorsCommand | 現在のモードでターンインジケーターを透過する | ## パラメータ {{json_to_markdown("control/autoware_external_cmd_selector/schema/external_cmd_selector.schema.json")}} - diff --git a/control/autoware_joy_controller/README.md b/control/autoware_joy_controller/README.md index 14456cc7b8dc2..bf8e6fa1b34cb 100644 --- a/control/autoware_joy_controller/README.md +++ b/control/autoware_joy_controller/README.md @@ -8,7 +8,6 @@ ### ROS 2起動 - ```bash # With default config (ds4) ros2 launch autoware_joy_controller joy_controller.launch.xml @@ -24,84 +23,84 @@ ros2 launch autoware_joy_controller joy_controller.launch.xml config_file:=/path ### 入力トピック -| 名称 | 型 | 説明 | -| ------------------ | ----------------------- | --------------------------------- | -| `~/input/joy` | sensor_msgs::msg::Joy | ジョイコントローラの指令 | +| 名称 | 型 | 説明 | +| ------------------ | ----------------------- | ------------------------------------ | +| `~/input/joy` | sensor_msgs::msg::Joy | ジョイコントローラの指令 | | `~/input/odometry` | nav_msgs::msg::Odometry | 自車位置を取得するための自己位置推定 | ### 出力トピック -| 名前 | タイプ | 説明 | -| ----------------------------------- | --------------------------------------------------- | ---------------------------------------- | -| `~/output/control_command` | `autoware_control_msgs::msg::Control` | 横方向および縦方向制御コマンド | -| `~/output/external_control_command` | `tier4_external_api_msgs::msg::ControlCommandStamped` | 横方向および縦方向制御コマンド | -| `~/output/shift` | `tier4_external_api_msgs::msg::GearShiftStamped` | ギアコマンド | -| `~/output/turn_signal` | `tier4_external_api_msgs::msg::TurnSignalStamped` | ウインカーコマンド | -| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード(AutoまたはExternal) | -| `~/output/heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | ハートビート | -| `~/output/vehicle_engage` | `autoware_vehicle_msgs::msg::Engage` | 車両エンゲージ | +| 名前 | タイプ | 説明 | +| ----------------------------------- | ----------------------------------------------------- | ---------------------------------- | +| `~/output/control_command` | `autoware_control_msgs::msg::Control` | 横方向および縦方向制御コマンド | +| `~/output/external_control_command` | `tier4_external_api_msgs::msg::ControlCommandStamped` | 横方向および縦方向制御コマンド | +| `~/output/shift` | `tier4_external_api_msgs::msg::GearShiftStamped` | ギアコマンド | +| `~/output/turn_signal` | `tier4_external_api_msgs::msg::TurnSignalStamped` | ウインカーコマンド | +| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード(AutoまたはExternal) | +| `~/output/heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | ハートビート | +| `~/output/vehicle_engage` | `autoware_vehicle_msgs::msg::Engage` | 車両エンゲージ | ## パラメータ -| パラメーター | タイプ | 説明 | -| ---------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `joy_type` | string | ジョイコントローラータイプ (初期値: DS4) | -| `update_rate` | double | 制御コマンドを公開するための更新レート | -| `accel_ratio` | double | 加速度を計算するための比率 (指示加速度は比率 \* 操作量) | -| `brake_ratio` | double | 減速度を計算するための比率 (指示加速度は -比率 \* 操作量) | -| `steer_ratio` | double | 減加速度を計算するための比率 (指示舵角は比率 \* 操作量) | -| `steering_angle_velocity` | double | 操作のときの舵角速度 | -| `accel_sensitivity` | double | 外部APIの加速度を計算するための感度 (指示加速度は pow(操作量, 1 / 感度)) | -| `brake_sensitivity` | double | 外部APIの減加速度を計算するための感度 (指示加速度は pow(操作量, 1 / 感度)) | -| `raw_control` | bool | 真の場合、入力車体運動をスキップする | -| `velocity_gain` | double | 加速度によって計算される速度の比率 | -| `max_forward_velocity` | double | 前方へ進む絶対最大速度 | -| `max_backward_velocity` | double | 後方へ進む絶対最大速度 | -| `backward_accel_ratio` | double | 減速度を計算するための比率 (Commanded acceleration is -ratio \* 操作量) | +| パラメーター | タイプ | 説明 | +| ------------------------- | ------ | -------------------------------------------------------------------------- | +| `joy_type` | string | ジョイコントローラータイプ (初期値: DS4) | +| `update_rate` | double | 制御コマンドを公開するための更新レート | +| `accel_ratio` | double | 加速度を計算するための比率 (指示加速度は比率 \* 操作量) | +| `brake_ratio` | double | 減速度を計算するための比率 (指示加速度は -比率 \* 操作量) | +| `steer_ratio` | double | 減加速度を計算するための比率 (指示舵角は比率 \* 操作量) | +| `steering_angle_velocity` | double | 操作のときの舵角速度 | +| `accel_sensitivity` | double | 外部APIの加速度を計算するための感度 (指示加速度は pow(操作量, 1 / 感度)) | +| `brake_sensitivity` | double | 外部APIの減加速度を計算するための感度 (指示加速度は pow(操作量, 1 / 感度)) | +| `raw_control` | bool | 真の場合、入力車体運動をスキップする | +| `velocity_gain` | double | 加速度によって計算される速度の比率 | +| `max_forward_velocity` | double | 前方へ進む絶対最大速度 | +| `max_backward_velocity` | double | 後方へ進む絶対最大速度 | +| `backward_accel_ratio` | double | 減速度を計算するための比率 (Commanded acceleration is -ratio \* 操作量) | ## P65 ジョイスティック キーマップ -| 操作 | ボタン | -|---|---| -| 加速度 | R2 | -| ブレーキ | L2 | -| ステアリング | レフトスティックの左右 | -| アップシフト | カーソル上 | -| ダウンシフト | カーソル下 | -| Driveシフト | カーソル左 | -| リバースシフト | カーソル右 | -| 左折ウィンカー | L1 | -| 右折ウィンカー | R1 | -| ウィンカー解除 | A | -| ゲートモード | B | -| 緊急停止 | セレクト | -| 緊急停止解除 | スタート | -| Autoware起動 | X | -| Autoware停止 | Y | -| Vehicle起動 | PS | -| Vehicle停止 | 右トリガー | +| 操作 | ボタン | +| -------------- | ---------------------- | +| 加速度 | R2 | +| ブレーキ | L2 | +| ステアリング | レフトスティックの左右 | +| アップシフト | カーソル上 | +| ダウンシフト | カーソル下 | +| Driveシフト | カーソル左 | +| リバースシフト | カーソル右 | +| 左折ウィンカー | L1 | +| 右折ウィンカー | R1 | +| ウィンカー解除 | A | +| ゲートモード | B | +| 緊急停止 | セレクト | +| 緊急停止解除 | スタート | +| Autoware起動 | X | +| Autoware停止 | Y | +| Vehicle起動 | PS | +| Vehicle停止 | 右トリガー | ## DS4 ジョイスティック キーマップ -| アクション | ボタン | -| -------------------- | -------------------------- | -| 加速 | R2、×、または右スティック上 | -| 減速 | L2、□、または右スティック下 | -| ステアリング | 左スティック左右 | -| シフトアップ | カーソル上 | -| シフトダウン | カーソル下 | -| シフトドライブ | カーソル左 | -| シフトリバース | カーソル右 | -| 左ウィンカー | L1 | -| 右ウィンカー | R1 | -| ウィンカー解除 | SHARE | -| ゲートモード | OPTIONS | -| 緊急停止 | PS | -| 緊急停止解除 | PS | -| Autoware起動 | ○ | -| Autoware停止 | ○ | -| 車両起動 | △ | -| 車両停止 | △ | +| アクション | ボタン | +| -------------- | --------------------------- | +| 加速 | R2、×、または右スティック上 | +| 減速 | L2、□、または右スティック下 | +| ステアリング | 左スティック左右 | +| シフトアップ | カーソル上 | +| シフトダウン | カーソル下 | +| シフトドライブ | カーソル左 | +| シフトリバース | カーソル右 | +| 左ウィンカー | L1 | +| 右ウィンカー | R1 | +| ウィンカー解除 | SHARE | +| ゲートモード | OPTIONS | +| 緊急停止 | PS | +| 緊急停止解除 | PS | +| Autoware起動 | ○ | +| Autoware停止 | ○ | +| 車両起動 | △ | +| 車両停止 | △ | ## XBOX ジョイスティック キーマッピング @@ -111,25 +110,25 @@ ros2 launch autoware_joy_controller joy_controller.launch.xml config_file:=/path ### 操作方法 -| 操作 | ボタン | -|---|---| -| 加速 | RT | -| ブレーキ | LT | -| ステアリング | 左スティック
左/右 | -| アップシフト | カーソル上 | -| ダウンシフト | カーソル下 | -| ドライブシフト | カーソル左 | -| リバースシフト | カーソル右 | -| 左ウインカー | LB | -| 右ウインカー | RB | -| ウインカー解除 | A | -| ゲートモード | B | -| 緊急停止 | ビュー | -| 緊急停止解除 | メニュー | -| Autoware 起動 | X | -| Autoware 停止 | Y | -| Vehicle 起動 | 左スティックボタン | -| Vehicle 停止 | 右スティックボタン | +| 操作 | ボタン | +| -------------- | --------------------- | +| 加速 | RT | +| ブレーキ | LT | +| ステアリング | 左スティック
左/右 | +| アップシフト | カーソル上 | +| ダウンシフト | カーソル下 | +| ドライブシフト | カーソル左 | +| リバースシフト | カーソル右 | +| 左ウインカー | LB | +| 右ウインカー | RB | +| ウインカー解除 | A | +| ゲートモード | B | +| 緊急停止 | ビュー | +| 緊急停止解除 | メニュー | +| Autoware 起動 | X | +| Autoware 停止 | Y | +| Vehicle 起動 | 左スティックボタン | +| Vehicle 停止 | 右スティックボタン | ### Planningコンポーネント @@ -140,4 +139,3 @@ ros2 launch autoware_joy_controller joy_controller.launch.xml config_file:=/path #### velocity逸脱量の計算 #### acceleration逸脱量の計算 - diff --git a/control/autoware_lane_departure_checker/README.md b/control/autoware_lane_departure_checker/README.md index a54c51b30d21d..e40d564e3082e 100644 --- a/control/autoware_lane_departure_checker/README.md +++ b/control/autoware_lane_departure_checker/README.md @@ -16,31 +16,31 @@ 1. 車両座標系における誤差楕円(共分散)の標準偏差を計算します。 - 1. 共分散を車両座標系に変換します。 - - $$ - \begin{align} - \left( \begin{array}{cc} x_{vehicle}\\ y_{vehicle}\\ \end{array} \right) = R_{map2vehicle} \left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) - \end{align} - $$ - - 車両座標系における共分散を計算します。 - - $$ - \begin{align} - Cov_{vehicle} &= E \left[ - \left( \begin{array}{cc} x_{vehicle}\\ y_{vehicle}\\ \end{array} \right) (x_{vehicle}, y_{vehicle}) \right] \\ - &= E \left[ R\left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) - (x_{map}, y_{map})R^t - \right] \\ - &= R E\left[ \left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) - (x_{map}, y_{map}) - \right] R^t \\ - &= R Cov_{map} R^t - \end{align} - $$ - - 2. `post resampling`に展開する縦方向の長さは、$Cov_{vehicle}(0,0)$における$x_{vehicle}$の周辺分布に対応します。同様に、横方向の長さは$Cov_{vehicle}(1,1)$における$x_{vehicle}$の周辺分布に対応します。Wikipediaの参照 [こちら](https://en.wikipedia.org/wiki/Multivariate_normal_distribution#Marginal_distributions)。 + 1. 共分散を車両座標系に変換します。 + + $$ + \begin{align} + \left( \begin{array}{cc} x_{vehicle}\\ y_{vehicle}\\ \end{array} \right) = R_{map2vehicle} \left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) + \end{align} + $$ + + 車両座標系における共分散を計算します。 + + $$ + \begin{align} + Cov_{vehicle} &= E \left[ + \left( \begin{array}{cc} x_{vehicle}\\ y_{vehicle}\\ \end{array} \right) (x_{vehicle}, y_{vehicle}) \right] \\ + &= E \left[ R\left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) + (x_{map}, y_{map})R^t + \right] \\ + &= R E\left[ \left( \begin{array}{cc} x_{map}\\ y_{map}\\ \end{array} \right) + (x_{map}, y_{map}) + \right] R^t \\ + &= R Cov_{map} R^t + \end{align} + $$ + + 2. `post resampling`に展開する縦方向の長さは、$Cov_{vehicle}(0,0)$における$x_{vehicle}$の周辺分布に対応します。同様に、横方向の長さは$Cov_{vehicle}(1,1)$における$x_{vehicle}$の周辺分布に対応します。Wikipediaの参照 [こちら](https://en.wikipedia.org/wiki/Multivariate_normal_distribution#Marginal_distributions)。 2. `footprint_margin_scale`を乗じた標準偏差に基づいてフットプリントを拡張します。 @@ -64,56 +64,55 @@ #### 一般パラメータ -| 名称 | 型 | 説明 | デフォルト値 | -| :------------------------- | :----- | :---------------------------------------------------------------------------------------------------------- | :------------ | -| will_out_of_lane_checker | bool | 自車フットプリントが車線から逸脱するかどうかのチェッカーを有効にする | True | -| out_of_lane_checker | bool | 自車フットプリントが車線外にあるかどうかをチェッカーを有効にする | True | -| boundary_departure_checker | bool | 自車フットプリントがboundary_types_to_detectで指定された境界から逸脱するかどうかのチェッカーを有効にする | False | -| update_rate | double | パブリッシュする頻度 [Hz] | 10.0 | -| visualize_lanelet | bool | レーンレットを視覚化するフラグ | False | +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------------- | :----- | :------------------------------------------------------------------------------------------------------- | :----------- | +| will_out_of_lane_checker | bool | 自車フットプリントが車線から逸脱するかどうかのチェッカーを有効にする | True | +| out_of_lane_checker | bool | 自車フットプリントが車線外にあるかどうかをチェッカーを有効にする | True | +| boundary_departure_checker | bool | 自車フットプリントがboundary_types_to_detectで指定された境界から逸脱するかどうかのチェッカーを有効にする | False | +| update_rate | double | パブリッシュする頻度 [Hz] | 10.0 | +| visualize_lanelet | bool | レーンレットを視覚化するフラグ | False | #### 車線逸脱のためのパラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `include_right_lanes` | ブール | 境界に右のレーンレットを含めるかどうか | `False` | -| `include_left_lanes` | ブール | 境界に左のレーンレットを含めるかどうか | `False` | -| `include_opposite_lanes` | ブール | 境界に対向のレーンレットを含めるかどうか | `False` | -| `include_conflicting_lanes` | ブール | 境界に交差するレーンレットを含めるかどうか | `False` | +| 名前 | タイプ | 説明 | デフォルト値 | +| --------------------------- | ------ | ------------------------------------------ | ------------ | +| `include_right_lanes` | ブール | 境界に右のレーンレットを含めるかどうか | `False` | +| `include_left_lanes` | ブール | 境界に左のレーンレットを含めるかどうか | `False` | +| `include_opposite_lanes` | ブール | 境界に対向のレーンレットを含めるかどうか | `False` | +| `include_conflicting_lanes` | ブール | 境界に交差するレーンレットを含めるかどうか | `False` | #### 路側逸脱 パラメータ -* `# (m)`: 路側逸脱開始のしきい値 `'post resampling'` 距離(メートル) -* `# (rad)`: 路側逸脱開始のしきい値 `'post resampling'` 曲率(ラジアン) -* `# (m)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の速度(メートル) -* `# (s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の経過時間(秒) -* `#`: `'post resampling'` 路側逸脱開始時の自車位置における heading 偏差(ラジアン) -* `# (m)`: `'post resampling'` 路側逸脱開始時の自車位置における lateral offset(メートル) -* `#`: `'post resampling'` 路側逸脱開始時の vehicle `'post resampling'` の速度(メートル/秒) -* `# (m^2/s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の acceleration 逸脱量(平方メートル/秒) -* `# (m^2/s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の velocity 逸脱量(平方メートル/秒) -* `# (m^2/s)`: 路側逸脱中の vehicle `'post resampling'` の heading 逸脱量(平方メートル/秒) -* `# (m)`: `'post resampling'` 路側逸脱終了時の vehicle `'post resampling'` の速度(メートル/秒) -* `#`: `'post resampling'` 路側逸脱終了時の自車位置における heading 偏差 -* `# (s)`: `'post resampling'` 路側逸脱終了時の vehicle `'post resampling'` の経過時間 -* `# (cm)`: 静止時の vehicle `'post resampling'` の steering wheel angle(センチメートル) -* `# (m)`: 静止時の vehicle `'post resampling'` の lateral offset(メートル) -* `#`: 静止時の vehicle `'post resampling'` の速度(メートル/秒) - -| 名称 | タイプ | 説明 | デフォルト値 | -| :----------------------- | :--------------------------- | :--------------------------------------------------------- | :------------ | +- `# (m)`: 路側逸脱開始のしきい値 `'post resampling'` 距離(メートル) +- `# (rad)`: 路側逸脱開始のしきい値 `'post resampling'` 曲率(ラジアン) +- `# (m)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の速度(メートル) +- `# (s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の経過時間(秒) +- `#`: `'post resampling'` 路側逸脱開始時の自車位置における heading 偏差(ラジアン) +- `# (m)`: `'post resampling'` 路側逸脱開始時の自車位置における lateral offset(メートル) +- `#`: `'post resampling'` 路側逸脱開始時の vehicle `'post resampling'` の速度(メートル/秒) +- `# (m^2/s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の acceleration 逸脱量(平方メートル/秒) +- `# (m^2/s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の velocity 逸脱量(平方メートル/秒) +- `# (m^2/s)`: 路側逸脱中の vehicle `'post resampling'` の heading 逸脱量(平方メートル/秒) +- `# (m)`: `'post resampling'` 路側逸脱終了時の vehicle `'post resampling'` の速度(メートル/秒) +- `#`: `'post resampling'` 路側逸脱終了時の自車位置における heading 偏差 +- `# (s)`: `'post resampling'` 路側逸脱終了時の vehicle `'post resampling'` の経過時間 +- `# (cm)`: 静止時の vehicle `'post resampling'` の steering wheel angle(センチメートル) +- `# (m)`: 静止時の vehicle `'post resampling'` の lateral offset(メートル) +- `#`: 静止時の vehicle `'post resampling'` の速度(メートル/秒) + +| 名称 | タイプ | 説明 | デフォルト値 | +| :----------------------- | :------------------------- | :---------------------------------------------------- | :------------ | | boundary_types_to_detect | std::vector\ | boundary_departure_checkerで検出するline_stringタイプ | [road_border] | ### 主要パラメータ -| 名称 | 種類 | 説明 | デフォルト値 | -| :------------------------- | :----- | :------------------------------------------------------------------------------------------------------- | :------------ | -| footprint_margin_scale | 数値 | footprintマージンを拡張する係数。標準偏差に1を乗算 | 1.0 | -| footprint_extra_margin | 数値 | footprintマージンを拡張する係数。 レーン逸脱のチェック時 | 0.0 | -| resample_interval | 数値 | trajectoryを再サンプリングする際のポイント間の最小ユークリッド距離 (m) | 0.3 | -| max_deceleration | 数値 | 制動距離を計算する際の最大減速度 | 2.8 | -| delay_time | 数値 | 制動距離を計算する際のブレーキ作動までの遅延時間 (秒) | 1.3 | -| max_lateral_deviation | 数値 | 車両座標系における最大横方向逸脱距離 (m) | 2.0 | -| max_longitudinal_deviation | 数値 | 車両座標系における最大縦方向逸脱距離 (m) | 2.0 | -| max_yaw_deviation_deg | 数値 | trajectoryからの自己車両の最大ヨー逸脱角度 (度) | 60.0 | - +| 名称 | 種類 | 説明 | デフォルト値 | +| :------------------------- | :--- | :--------------------------------------------------------------------- | :----------- | +| footprint_margin_scale | 数値 | footprintマージンを拡張する係数。標準偏差に1を乗算 | 1.0 | +| footprint_extra_margin | 数値 | footprintマージンを拡張する係数。 レーン逸脱のチェック時 | 0.0 | +| resample_interval | 数値 | trajectoryを再サンプリングする際のポイント間の最小ユークリッド距離 (m) | 0.3 | +| max_deceleration | 数値 | 制動距離を計算する際の最大減速度 | 2.8 | +| delay_time | 数値 | 制動距離を計算する際のブレーキ作動までの遅延時間 (秒) | 1.3 | +| max_lateral_deviation | 数値 | 車両座標系における最大横方向逸脱距離 (m) | 2.0 | +| max_longitudinal_deviation | 数値 | 車両座標系における最大縦方向逸脱距離 (m) | 2.0 | +| max_yaw_deviation_deg | 数値 | trajectoryからの自己車両の最大ヨー逸脱角度 (度) | 60.0 | diff --git a/control/autoware_mpc_lateral_controller/README.md b/control/autoware_mpc_lateral_controller/README.md index ceff4c3bb0f46..46b27afc40159 100644 --- a/control/autoware_mpc_lateral_controller/README.md +++ b/control/autoware_mpc_lateral_controller/README.md @@ -23,7 +23,7 @@ - kinematics:ステアリング1次の遅れを持つ自転車運動学モデル。 - kinematics_no_delay:ステアリング遅れのない自転車運動学モデル。 - dynamics:スリップ角を考慮する自転車動力学モデル。 -運動学モデルがデフォルトで使用されています。詳細については、参照 [1]を参照してください。 + 運動学モデルがデフォルトで使用されています。詳細については、参照 [1]を参照してください。 最適化には2次計画問題(QP)ソルバーが使用され、現在2つのオプションが実装されています。 @@ -48,6 +48,7 @@ ## 入力 / 出力 / API - 入力: + - trajectory :リファレンストラジェクト(`autoware_api_msgs/Trajectory`) - vehicle_state :現在の車両のステータス(`autoware_auto_msgs/VehicleState`) - current_pose :自車位置(`geometry_msgs/PoseStamped`) @@ -55,6 +56,7 @@ - planned_trajectory :計画された軌道(`autoware_msgs/PlannedTrajectory`) - 出力: + - vehicle_control_cmd :車両制御コマンド(`autoware_auto_msgs/VehicleControlCommand`) - API: @@ -88,13 +90,13 @@ #### システム -| 名前 | タイプ | 説明 | デフォルト値 | -| :------------------------ | :------ | :------------------------------------------------------------------------------------ | :------------ | -| traj_resample_dist | double | 再サンプリングにおけるウェイポイント間の距離 [m] | 0.1 | -| use_steer_prediction | boolean | ステアリング予測を使用するフラグ(ステアリング測定値は使用しない) | false | -| admissible_position_error | double | 追従位置誤差がこの値 [m] より大きい場合に車両を停止する | 5.0 | -| admissible_yaw_error_rad | double | 追従ヨー角誤差がこの値 [rad] より大きい場合に車両を停止する | 1.57 | -| use_delayed_initial_state | boolean | 予測軌道の初期状態として `x0_delayed` を使用するフラグ | true | +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------------ | :------ | :----------------------------------------------------------------- | :----------- | +| traj_resample_dist | double | 再サンプリングにおけるウェイポイント間の距離 [m] | 0.1 | +| use_steer_prediction | boolean | ステアリング予測を使用するフラグ(ステアリング測定値は使用しない) | false | +| admissible_position_error | double | 追従位置誤差がこの値 [m] より大きい場合に車両を停止する | 5.0 | +| admissible_yaw_error_rad | double | 追従ヨー角誤差がこの値 [rad] より大きい場合に車両を停止する | 1.57 | +| use_delayed_initial_state | boolean | 予測軌道の初期状態として `x0_delayed` を使用するフラグ | true | #### パススムージング @@ -103,20 +105,23 @@ トリガーは、自車位置の更新、経路の変更、経路の`post resampling`の更新です。 #### レベル0の経路 + レベル0のレイヤーでは、Smoothed Path Providerによって、パスのスムージングによって生成された経路が提供されます。 #### レベル1のPlanning + レベル1のPlanningコンポーネントは、以下を行います。 + - スムーズな経路を`post resampling`に使用します。 - スムーズな経路に基づいて、velocity 逸脱量とacceleration 逸脱量を計算します。 - Velocity ControllerとAcceleration Controllerに逸脱量を通知します。 -| 名称 | タイプ | 説明 | デフォルト値 | -| :-------------------------------- | :------ | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| path_smoothingを有効にする | boolean | パスの平滑化フラグ。リサンプリングノイズを低減するためにパスリサンプリングを使用する場合は、`True`にします。 | `False` | -| path_filter_moving_ave_num | int | path smoothingのために移動平均フィルタのデータポイントの数 | `25` | -| curvature_smoothing_num_traj | int | 軌道の曲率計算に使用される点のインデックス距離:p(i-num)、p(i)、p(i+num)。`num`が大きいほどノイズの少ない値になります。 | `15` | -| curvature_smoothing_num_ref_steer | int | 参照ステアリングコマンドの曲率計算に使用される点のインデックス距離:p(i-num)、p(i)、p(i+num)。`num`が大きいほどノイズの少ない値になります。 | `15` | +| 名称 | タイプ | 説明 | デフォルト値 | +| :-------------------------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------ | :----------- | +| path_smoothingを有効にする | boolean | パスの平滑化フラグ。リサンプリングノイズを低減するためにパスリサンプリングを使用する場合は、`True`にします。 | `False` | +| path_filter_moving_ave_num | int | path smoothingのために移動平均フィルタのデータポイントの数 | `25` | +| curvature_smoothing_num_traj | int | 軌道の曲率計算に使用される点のインデックス距離:p(i-num)、p(i)、p(i+num)。`num`が大きいほどノイズの少ない値になります。 | `15` | +| curvature_smoothing_num_ref_steer | int | 参照ステアリングコマンドの曲率計算に使用される点のインデックス距離:p(i-num)、p(i)、p(i+num)。`num`が大きいほどノイズの少ない値になります。 | `15` | #### 軌道予測 @@ -128,7 +133,7 @@ Planningコンポーネントは、自車位置と目的地などの高レベル #### 経路検索 -経路検索は、始点と終点の間の経路を計算するプロセスです。経路検索アルゴリズムには、Dijkstraアルゴリズム、A*アルゴリズム、Floyd-Warshallアルゴリズムなどがあります。 +経路検索は、始点と終点の間の経路を計算するプロセスです。経路検索アルゴリズムには、Dijkstraアルゴリズム、A\*アルゴリズム、Floyd-Warshallアルゴリズムなどがあります。 ##### コスト関数 @@ -152,9 +157,9 @@ Planningコンポーネントは、自車位置と目的地などの高レベル 軌道生成アルゴリズムには、以下のようなものがあります。 -* **レファレンストラジャクトリ追従**:レファレンストラジャクトリを生成し、自車をそれに追従させます。 -* **最適制御**:最適化手法を使用して、コスト関数を最小化する軌道生成します。 -* **機械学習**:機械学習モデルを使用して、軌道を予測します。 +- **レファレンストラジャクトリ追従**:レファレンストラジャクトリを生成し、自車をそれに追従させます。 +- **最適制御**:最適化手法を使用して、コスト関数を最小化する軌道生成します。 +- **機械学習**:機械学習モデルを使用して、軌道を予測します。 ### 経路プランの実行 @@ -162,15 +167,15 @@ Planningコンポーネントは、自車位置と目的地などの高レベル 経路プラン追従は、自車を経路プランに沿って制御するプロセスです。経路プラン追従コントローラーには、以下のようなものがあります。 -* **制約性モデル予測制御(MPC)**:制約を考慮して自車を制御します。 -* **占有空間パス計画(OCPP)**:障害物を避けながら自車を制御します。 +- **制約性モデル予測制御(MPC)**:制約を考慮して自車を制御します。 +- **占有空間パス計画(OCPP)**:障害物を避けながら自車を制御します。 #### 軌道追従 軌道追従は、自車を軌道に沿って制御するプロセスです。軌道追従コントローラーには、以下のようなものがあります。 -* **PIDコントローラー**:誤差を最小化するフィードバック制御を行います。 -* **カルマンフィルター**:雑音を推定してより正確な制御を実現します。 +- **PIDコントローラー**:誤差を最小化するフィードバック制御を行います。 +- **カルマンフィルター**:雑音を推定してより正確な制御を実現します。 ### 安全性評価 @@ -178,93 +183,93 @@ Planningコンポーネントは、自車位置と目的地などの高レベル 運動学的検証は、軌道が物理的に実行可能であることを確認するプロセスです。運動学的検証では、以下の要素を考慮します。 -* **速度逸脱量** -* **加速度逸脱量** -* **ジャーク逸脱量** +- **速度逸脱量** +- **加速度逸脱量** +- **ジャーク逸脱量** #### 動力学的検証 動力学的検証は、軌道が車両の動力学を考慮して実行可能であることを確認するプロセスです。動力学的検証では、以下の要素を考慮します。 -* **タイヤの滑り** -* **車両の安定性** -* **サスペンションの影響** +- **タイヤの滑り** +- **車両の安定性** +- **サスペンションの影響** #### 障害物検出 障害物検出は、軌道上の障害物を検出するプロセスです。障害物検出には、以下の方法があります。 -* **センサーデータ(LiDAR、カメラ、レーダーなど)** -* **地図データ** -* **'post resampling'(前回のサンプルからの差分)**による検出 +- **センサーデータ(LiDAR、カメラ、レーダーなど)** +- **地図データ** +- **'post resampling'(前回のサンプルからの差分)**による検出 -| 名称 | 種類 | 説明 | デフォルト値 | -| :---------------------------------- | :------ | :----------------------------------------------------------- | :------------ | -| extend_trajectory_for_end_yaw_control | boolean | end yaw 制御のための軌道の延伸フラグ | true | +| 名称 | 種類 | 説明 | デフォルト値 | +| :------------------------------------ | :------ | :----------------------------------- | :----------- | +| extend_trajectory_for_end_yaw_control | boolean | end yaw 制御のための軌道の延伸フラグ | true | #### MPC最適化 -| 名前 | タイプ | 説明 | デフォルト値 | -| :-------------------------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| qp_solver_type | 文字列 | QPソルバーオプション。以下で詳細に説明します。 | "osqp" | -| mpc_prediction_horizon | 整数 | MPCのステップごとの合計予測 | 50 | -| mpc_prediction_dt | float | 1ステップあたりの予測時間[単位:秒] | 0.1 | -| mpc_weight_lat_error | float | 横方向の逸脱量の重み | 1.0 | -| mpc_weight_heading_error | float | ヘディングの逸脱量の重み | 0.0 | -| mpc_weight_heading_error_squared_vel | float | ヘディングの逸脱量 * 速度の重み | 0.3 | -| mpc_weight_steering_input | float | ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) | 1.0 | -| mpc_weight_steering_input_squared_vel | float | ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) * 速度 | 0.25 | -| mpc_weight_lat_jerk | float | 横方向のジャーク(steer(i) - steer(i-1)) * 速度 の重み | 0.1 | -| mpc_weight_steer_rate | float | ステアリング速度の重み[単位:rad/s] | 0.0 | -| mpc_weight_steer_acc | float | ステアリング速度の微分の重み[rad/ss] | 0.000001 | -| mpc_low_curvature_weight_lat_error | float | [低曲率軌道で使用] 横方向の逸脱量の重み | 0.1 | -| mpc_low_curvature_weight_heading_error | float | [低曲率軌道で使用] ヘディングの逸脱量の重み | 0.0 | -| mpc_low_curvature_weight_heading_error_squared_vel | float | [低曲率軌道で使用] ヘディングの逸脱量 * 速度の重み | 0.3 | -| mpc_low_curvature_weight_steering_input | float | [低曲率軌道で使用] ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) | 1.0 | -| mpc_low_curvature_weight_steering_input_squared_vel | float | [低曲率軌道で使用] ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) * 速度 | 0.25 | -| mpc_low_curvature_weight_lat_jerk | float | [低曲率軌道で使用] 横方向のジャーク(steer(i) - steer(i-1)) * 速度 の重み | 0.0 | -| mpc_low_curvature_weight_steer_rate | float | [低曲率軌道で使用] ステアリング速度の重み[単位:rad/s] | 0.0 | -| mpc_low_curvature_weight_steer_acc | float | [低曲率軌道で使用] ステアリング速度の微分の重み[rad/ss] | 0.000001 | -| mpc_low_curvature_thresh_curvature | float | "low_curvature"パラメータを使用するための曲率のしきい値 | 0.0 | -| mpc_weight_terminal_lat_error | float | mpcの安定性を向上させるための行列Qの最終横方向の逸脱量の重み | 1.0 | -| mpc_weight_terminal_heading_error | float | mpcの安定性を向上させるための行列Qの最終ヘディングの逸脱量の重み | 0.1 | -| mpc_zero_ff_steer_deg | float | フィードフォワード角度がゼロになるしきい値 | 0.5 | -| mpc_acceleration_limit | float | 車両加速度の制限 | 2.0 | -| mpc_velocity_time_constant | float | 速度スムージングに使用される時定数 | 0.3 | -| mpc_min_prediction_length | float | 最小予測の長さ | 5.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------------------------------- | :----- | :----------------------------------------------------------------------------------------------- | :----------- | +| qp_solver_type | 文字列 | QPソルバーオプション。以下で詳細に説明します。 | "osqp" | +| mpc_prediction_horizon | 整数 | MPCのステップごとの合計予測 | 50 | +| mpc_prediction_dt | float | 1ステップあたりの予測時間[単位:秒] | 0.1 | +| mpc_weight_lat_error | float | 横方向の逸脱量の重み | 1.0 | +| mpc_weight_heading_error | float | ヘディングの逸脱量の重み | 0.0 | +| mpc_weight_heading_error_squared_vel | float | ヘディングの逸脱量 \* 速度の重み | 0.3 | +| mpc_weight_steering_input | float | ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) | 1.0 | +| mpc_weight_steering_input_squared_vel | float | ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) \* 速度 | 0.25 | +| mpc_weight_lat_jerk | float | 横方向のジャーク(steer(i) - steer(i-1)) \* 速度 の重み | 0.1 | +| mpc_weight_steer_rate | float | ステアリング速度の重み[単位:rad/s] | 0.0 | +| mpc_weight_steer_acc | float | ステアリング速度の微分の重み[rad/ss] | 0.000001 | +| mpc_low_curvature_weight_lat_error | float | [低曲率軌道で使用] 横方向の逸脱量の重み | 0.1 | +| mpc_low_curvature_weight_heading_error | float | [低曲率軌道で使用] ヘディングの逸脱量の重み | 0.0 | +| mpc_low_curvature_weight_heading_error_squared_vel | float | [低曲率軌道で使用] ヘディングの逸脱量 \* 速度の重み | 0.3 | +| mpc_low_curvature_weight_steering_input | float | [低曲率軌道で使用] ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) | 1.0 | +| mpc_low_curvature_weight_steering_input_squared_vel | float | [低曲率軌道で使用] ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) \* 速度 | 0.25 | +| mpc_low_curvature_weight_lat_jerk | float | [低曲率軌道で使用] 横方向のジャーク(steer(i) - steer(i-1)) \* 速度 の重み | 0.0 | +| mpc_low_curvature_weight_steer_rate | float | [低曲率軌道で使用] ステアリング速度の重み[単位:rad/s] | 0.0 | +| mpc_low_curvature_weight_steer_acc | float | [低曲率軌道で使用] ステアリング速度の微分の重み[rad/ss] | 0.000001 | +| mpc_low_curvature_thresh_curvature | float | "low_curvature"パラメータを使用するための曲率のしきい値 | 0.0 | +| mpc_weight_terminal_lat_error | float | mpcの安定性を向上させるための行列Qの最終横方向の逸脱量の重み | 1.0 | +| mpc_weight_terminal_heading_error | float | mpcの安定性を向上させるための行列Qの最終ヘディングの逸脱量の重み | 0.1 | +| mpc_zero_ff_steer_deg | float | フィードフォワード角度がゼロになるしきい値 | 0.5 | +| mpc_acceleration_limit | float | 車両加速度の制限 | 2.0 | +| mpc_velocity_time_constant | float | 速度スムージングに使用される時定数 | 0.3 | +| mpc_min_prediction_length | float | 最小予測の長さ | 5.0 | #### 車両モデル -| 名称 | 種別 | 説明 | デフォルト値 | -|---|---|---|---| -| vehicle_model_type | 文字列 | mpc予測のための車両モデルの種別 | "kinematics" | -| input_delay | 倍精度 | 遅延補正のためのステアリング入力遅延時間 | 0.24 | -| vehicle_model_steer_tau | 倍精度 | ステアリングの動特性時間定数 (1d近似) [秒] | 0.3 | -| steer_rate_lim_dps_list_by_curvature | 倍精度配列 | 曲率に応じて制限されるステアリング角速度の制限値のリスト [deg/s] | [40.0, 50.0, 60.0] | -| curvature_list_for_steer_rate_lim | 倍精度配列 | アセンディング順の曲率のリストにより、ステアリング角速度の制限値の補間が決定される [/m] | [0.001, 0.002, 0.01] | -| steer_rate_lim_dps_list_by_velocity | 倍精度配列 | 速度に応じて制限されるステアリング角速度の制限値のリスト [deg/s] | [60.0, 50.0, 40.0] | -| velocity_list_for_steer_rate_lim | 倍精度配列 | アセンディング順の速度のリストにより、ステアリング角速度の制限値の補間が決定される [m/s] | [10.0, 15.0, 20.0] | -| acceleration_limit | 倍精度 | 軌道速度の変更のための加速度の制限 [m/ss] | 2.0 | -| velocity_time_constant | 倍精度 | 軌道速度の変更のための速度の動特性時間定数 [s] | 0.3 | +| 名称 | 種別 | 説明 | デフォルト値 | +| ------------------------------------ | ---------- | ---------------------------------------------------------------------------------------- | -------------------- | +| vehicle_model_type | 文字列 | mpc予測のための車両モデルの種別 | "kinematics" | +| input_delay | 倍精度 | 遅延補正のためのステアリング入力遅延時間 | 0.24 | +| vehicle_model_steer_tau | 倍精度 | ステアリングの動特性時間定数 (1d近似) [秒] | 0.3 | +| steer_rate_lim_dps_list_by_curvature | 倍精度配列 | 曲率に応じて制限されるステアリング角速度の制限値のリスト [deg/s] | [40.0, 50.0, 60.0] | +| curvature_list_for_steer_rate_lim | 倍精度配列 | アセンディング順の曲率のリストにより、ステアリング角速度の制限値の補間が決定される [/m] | [0.001, 0.002, 0.01] | +| steer_rate_lim_dps_list_by_velocity | 倍精度配列 | 速度に応じて制限されるステアリング角速度の制限値のリスト [deg/s] | [60.0, 50.0, 40.0] | +| velocity_list_for_steer_rate_lim | 倍精度配列 | アセンディング順の速度のリストにより、ステアリング角速度の制限値の補間が決定される [m/s] | [10.0, 15.0, 20.0] | +| acceleration_limit | 倍精度 | 軌道速度の変更のための加速度の制限 [m/ss] | 2.0 | +| velocity_time_constant | 倍精度 | 軌道速度の変更のための速度の動特性時間定数 [s] | 0.3 | #### ノイズリダクションのローパスフィルタ -| 名前 | タイプ | 説明 | デフォルト値 | -| :------------------------ | :----- | :------------------------------------------------------------------------------ | :------------ | -| steering_lpf_cutoff_hz | double | ステアリング出力コマンドに対するローパスフィルタのカットオフ周波数 [hz] | 3.0 | -| error_deriv_lpf_cutoff_hz | double | エラー微分にローパスフィルタを適用する際のカットオフ周波数 [Hz] | 5.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------------ | :----- | :---------------------------------------------------------------------- | :----------- | +| steering_lpf_cutoff_hz | double | ステアリング出力コマンドに対するローパスフィルタのカットオフ周波数 [hz] | 3.0 | +| error_deriv_lpf_cutoff_hz | double | エラー微分にローパスフィルタを適用する際のカットオフ周波数 [Hz] | 5.0 | #### 停止状態 -| 名前 | タイプ | 説明 | デフォルト値 | -| :--------------------------------------- | :------ | :------------------------------------------------------------------------------------------- | :----------: | -| stop_state_entry_ego_speed \*1 | double | 停止状態への移行条件に使用される自車速度のしきい値 | 0.001 | -| stop_state_entry_target_speed \*1 | double | 停止状態への移行条件に使用される目標速度のしきい値 | 0.001 | -| converged_steer_rad | double | 操舵の収束に使用されるしきい値 | 0.1 | -| keep_steer_control_until_converged | boolean | 操舵が収束するまで操舵制御を維持する | true | -| new_traj_duration_time | double | 新しい経路と見なされる時間のしきい値 | 1.0 | -| new_traj_end_dist | double | 新しい経路と見なされる軌道終端間の距離のしきい値 | 0.3 | -| mpc_converged_threshold_rps | double | 最適化の出力が収束したと判断するためのしきい値、停止状態で使用される | 0.01 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------- | :------ | :------------------------------------------------------------------- | :----------: | +| stop_state_entry_ego_speed \*1 | double | 停止状態への移行条件に使用される自車速度のしきい値 | 0.001 | +| stop_state_entry_target_speed \*1 | double | 停止状態への移行条件に使用される目標速度のしきい値 | 0.001 | +| converged_steer_rad | double | 操舵の収束に使用されるしきい値 | 0.1 | +| keep_steer_control_until_converged | boolean | 操舵が収束するまで操舵制御を維持する | true | +| new_traj_duration_time | double | 新しい経路と見なされる時間のしきい値 | 1.0 | +| new_traj_end_dist | double | 新しい経路と見なされる軌道終端間の距離のしきい値 | 0.3 | +| mpc_converged_threshold_rps | double | 最適化の出力が収束したと判断するためのしきい値、停止状態で使用される | 0.01 | (\*1) 不要なステアリング操作を防止するため、ステアリングコマンドは停止状態では前の値に固定されます。 @@ -272,32 +277,32 @@ Planningコンポーネントは、自車位置と目的地などの高レベル `steering_offset` 名前空間で定義します。このロジックは、最小設計パラメータで可能な限りシンプルに設計されています。 -| 名前 | 種類 | 説明 | デフォルト値 | -| :-------------------------------------- | :------ | :--------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_auto_steering_offset_removal | boolean | ステアリングオフセットを推定して補正を適用する | true | -| update_vel_threshold | double | 速度がこの値より小さい場合、データはオフセット推定に使用されない | 5.56 | -| update_steer_threshold | double | ステアリング角度がこの値より大きい場合、データはオフセット推定に使用されない | 0.035 | -| average_num | int | この数字の平均がステアリングオフセットとして使用される | 1000 | -| steering_offset_limit | double | オフセット補正に適用する角度制限 | 0.02 | +| 名前 | 種類 | 説明 | デフォルト値 | +| :---------------------------------- | :------ | :--------------------------------------------------------------------------- | :----------- | +| enable_auto_steering_offset_removal | boolean | ステアリングオフセットを推定して補正を適用する | true | +| update_vel_threshold | double | 速度がこの値より小さい場合、データはオフセット推定に使用されない | 5.56 | +| update_steer_threshold | double | ステアリング角度がこの値より大きい場合、データはオフセット推定に使用されない | 0.035 | +| average_num | int | この数字の平均がステアリングオフセットとして使用される | 1000 | +| steering_offset_limit | double | オフセット補正に適用する角度制限 | 0.02 | ##### 力学モデル(WIP) -| 名称 | 種類 | 説明 | デフォルト値 | -| :--------------------------- | :------ | :-------------------------------------------------------------------| :------------ | -| `cg_to_front_m` | double | ベースリンクからフロントアクスルまでの距離             | 1.228 | -| `cg_to_rear_m` | double | ベースリンクからリアアクスルまでの距離              | 1.5618 | -| `mass_fl` | double | フロント左タイヤに加わる質量                     | 600 | -| `mass_fr` | double | フロント右タイヤに加わる質量                     | 600 | -| `mass_rl` | double | リア左タイヤに加わる質量                     | 600 | -| `mass_rr` | double | リア右タイヤに加わる質量                     | 600 | -| `cf` | double | フロントコーナリングパワー                     | 155494.663 | -| `cr` | double | リアコーナリングパワー                     | 155494.663 | +| 名称 | 種類 | 説明 | デフォルト値 | +| :-------------- | :----- | :-------------------------------------------------------------------- | :----------- | +| `cg_to_front_m` | double | ベースリンクからフロントアクスルまでの距離              | 1.228 | +| `cg_to_rear_m` | double | ベースリンクからリアアクスルまでの距離               | 1.5618 | +| `mass_fl` | double | フロント左タイヤに加わる質量                      | 600 | +| `mass_fr` | double | フロント右タイヤに加わる質量                      | 600 | +| `mass_rl` | double | リア左タイヤに加わる質量                      | 600 | +| `mass_rr` | double | リア右タイヤに加わる質量                      | 600 | +| `cf` | double | フロントコーナリングパワー                      | 155494.663 | +| `cr` | double | リアコーナリングパワー                      | 155494.663 | #### デバッグ -| 名前 | 種類 | 説明 | デフォルト値 | -| :------------------------- | :------ | :-------------------------------------------------------------------------------- | :------------ | -| publish_debug_trajectories | ブール | デバッグ目的で予測軌跡と再サンプリングされた基準軌跡を公開 | true | +| 名前 | 種類 | 説明 | デフォルト値 | +| :------------------------- | :----- | :--------------------------------------------------------- | :----------- | +| publish_debug_trajectories | ブール | デバッグ目的で予測軌跡と再サンプリングされた基準軌跡を公開 | true | ### MPCパラメータのチューニング方法 @@ -406,7 +411,7 @@ Planningコンポーネントは、以下のような性能要件を満たす必 - **安全性:** Planningコンポーネントは、車両が安全に操作されるように経路を計画する必要があります。 - **効率性:** Planningコンポーネントは、計算効率が高く、リアルタイムで動作する必要があります。 -- ** robustness:** Planningコンポーネントは、不完全な情報や予測不可能なイベントに対しても堅牢である必要があります。 +- **robustness:** Planningコンポーネントは、不完全な情報や予測不可能なイベントに対しても堅牢である必要があります。 ### Planningコンポーネントの検証 @@ -415,4 +420,3 @@ Planningコンポーネントは、シミュレーションと実車テストの - **path planning**の正確性 - **Trajectory planning**の滑らかさと効率性 - **Collision avoidance**の有効性 - diff --git a/control/autoware_obstacle_collision_checker/README.md b/control/autoware_obstacle_collision_checker/README.md index 18fb4b3010188..a385168ed1d93 100644 --- a/control/autoware_obstacle_collision_checker/README.md +++ b/control/autoware_obstacle_collision_checker/README.md @@ -8,7 +8,6 @@ ### フローチャート - ```plantuml @startuml skinparam monochrome true @@ -58,13 +57,13 @@ stop ### 入力 -| 名前 | 型 | 説明 | -|---|---|---| -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 基準軌跡 | -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測軌跡 | -| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避すべき障害物の点群 | -| `/tf` | `tf2_msgs::msg::TFMessage` | TF | -| `/tf_static` | `tf2_msgs::msg::TFMessage` | スタティックTF | +| 名前 | 型 | 説明 | +| ---------------------------------------------- | ----------------------------------------- | -------------------------------------- | +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 基準軌跡 | +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測軌跡 | +| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避すべき障害物の点群 | +| `/tf` | `tf2_msgs::msg::TFMessage` | TF | +| `/tf_static` | `tf2_msgs::msg::TFMessage` | スタティックTF | ### 出力 @@ -76,60 +75,59 @@ Planningモジュールは、Autowareの重要なコンポーネントの1つで **主な機能** -* **経路計画:** - * ダイナミック計画法を使用して、周囲の環境を考慮した最適な経路を生成します。 - * 衝突回避と安全性を確保するために、予測可能な障害物パスを予測します。 -* **モーション計画:** - * 経路計画に基づいて、目標速度と加速度を決定します。 -* **コマンド生成:** - * 目標速度と加速度を使用して、車両のハンドルとアクセル/ブレーキの制御コマンドを生成します。 +- **経路計画:** + - ダイナミック計画法を使用して、周囲の環境を考慮した最適な経路を生成します。 + - 衝突回避と安全性を確保するために、予測可能な障害物パスを予測します。 +- **モーション計画:** + - 経路計画に基づいて、目標速度と加速度を決定します。 +- **コマンド生成:** + - 目標速度と加速度を使用して、車両のハンドルとアクセル/ブレーキの制御コマンドを生成します。 **入力** -* Perceptionモジュールからのセンサデータ - * LiDAR - * レーダー - * カメラ -* 自車位置 +- Perceptionモジュールからのセンサデータ + - LiDAR + - レーダー + - カメラ +- 自車位置 **出力** -* 計画された経路 -* 目標速度と加速度 -* ハンドルとアクセル/ブレーキの制御コマンド +- 計画された経路 +- 目標速度と加速度 +- ハンドルとアクセル/ブレーキの制御コマンド **考慮事項** -* **センサーの不確実性:** センサーデータは不確実性を伴うため、Planningモジュールはロバストで信頼性の高い出力を生成する必要があります。 -* **現実世界の制約:** 計画された経路は、道路の傾斜、交通信号、その他の現実世界の制約を考慮する必要があります。 -* **リアルタイム処理:** Planningモジュールは、リアルタイムで動作して、車両の安全な運転を確保する必要があります。 +- **センサーの不確実性:** センサーデータは不確実性を伴うため、Planningモジュールはロバストで信頼性の高い出力を生成する必要があります。 +- **現実世界の制約:** 計画された経路は、道路の傾斜、交通信号、その他の現実世界の制約を考慮する必要があります。 +- **リアルタイム処理:** Planningモジュールは、リアルタイムで動作して、車両の安全な運転を確保する必要があります。 **追加の機能** -* **'post resampling' 局所パス計画:** センサーデータの更新に応じて、局所パスをリアルタイムで調整します。 -* **多様なパラメータ設定:** 車両のモデル、環境条件、運転スタイルに応じて、Planningモジュールのパラメータを調整できます。 -* **詳細なログ記録:** Planningモジュールの動作を診断し、改善するために、ログデータを記録できます。 +- **'post resampling' 局所パス計画:** センサーデータの更新に応じて、局所パスをリアルタイムで調整します。 +- **多様なパラメータ設定:** 車両のモデル、環境条件、運転スタイルに応じて、Planningモジュールのパラメータを調整できます。 +- **詳細なログ記録:** Planningモジュールの動作を診断し、改善するために、ログデータを記録できます。 **関連ドキュメント** -* Autoware Planningモジュールユーザーガイド -* Autoware Planningモジュール開発者ガイド +- Autoware Planningモジュールユーザーガイド +- Autoware Planningモジュール開発者ガイド -| 変数名 | 型 | 説明 | -| ------------ | --------------------------------------- | -------------------------- | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 視覚化用マーカー | +| 変数名 | 型 | 説明 | +| ---------------- | -------------------------------------- | ---------------- | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 視覚化用マーカー | ## パラメータ -| 名称 | 型 | 説明 | デフォルト値 | -| :------------------ | :------- | :----------------------------------------------------- | :------------ | -| `delay_time` | `double` | 車両の遅延時間 [s] | 0.3 | -| `footprint_margin` | `double` | 車両形状のマージン [m] | 0.0 | -| `max_deceleration` | `double` | 自車停止時の最大減速度 [m/s^2] | 2.0 | -| `resample_interval` | `double` | `post resampling`された軌道データの区間 [m] | 0.3 | -| `search_radius` | `double` | 軌道データから点群への探索距離 [m] | 5.0 | +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------ | :------- | :------------------------------------------ | :----------- | +| `delay_time` | `double` | 車両の遅延時間 [s] | 0.3 | +| `footprint_margin` | `double` | 車両形状のマージン [m] | 0.0 | +| `max_deceleration` | `double` | 自車停止時の最大減速度 [m/s^2] | 2.0 | +| `resample_interval` | `double` | `post resampling`された軌道データの区間 [m] | 0.3 | +| `search_radius` | `double` | 軌道データから点群への探索距離 [m] | 5.0 | ## 前提 / 既知の制限事項 適切な衝突確認を行うためには、予測軌道とノイズのない障害物点群の予測値を取得する必要があります。 - diff --git a/control/autoware_operation_mode_transition_manager/README.md b/control/autoware_operation_mode_transition_manager/README.md index 3b46d4f231ccc..6e73e39c55cfe 100644 --- a/control/autoware_operation_mode_transition_manager/README.md +++ b/control/autoware_operation_mode_transition_manager/README.md @@ -87,55 +87,54 @@ {{ json_to_markdown("control/autoware_operation_mode_transition_manager/schema/operation_mode_transition_manager.schema.json") }} -| 名称 | 型 | 説明 | デフォルト値 | -| :------------------------------- | :---- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | -| `transition_timeout` | `float` | ステート遷移が __指定時間内に完了しない__場合、遷移が失敗と見なされます。 | 10.0 | -| `frequency_hz` | `float` | 実行 hz | 10.0 | -| `enable_engage_on_driving` | `bool` | 車両 __走行中に自動運転モードをオンにする__かどうかを指定します。 false の場合、車両速度が 0 以外の状況では走行モードへの切り替えを拒否します。パラメータを調整せずにこの機能を使用すると、急減速などの問題が発生する可能性があることに注意してください。使用する前に、走行条件と vehicle_cmd_gate 遷移フィルタが適切に調整されていることを確認してください。 | 0.1 | -| `check_engage_condition` | `bool` | false の場合、自動遷移は常に利用可能です。 | 0.1 | -| `nearest_dist_deviation_threshold` | `float` | 最も近い軌跡ポイントを見つけるために使用される距離の閾値 | 3.0 | -| `nearest_yaw_deviation_threshold` | `float` | 最も近い軌跡ポイントを見つけるために使用される角度の閾値 | 1.57 | +| 名称 | 型 | 説明 | デフォルト値 | +| :--------------------------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------- | +| `transition_timeout` | `float` | ステート遷移が **指定時間内に完了しない**場合、遷移が失敗と見なされます。 | 10.0 | +| `frequency_hz` | `float` | 実行 hz | 10.0 | +| `enable_engage_on_driving` | `bool` | 車両 **走行中に自動運転モードをオンにする**かどうかを指定します。 false の場合、車両速度が 0 以外の状況では走行モードへの切り替えを拒否します。パラメータを調整せずにこの機能を使用すると、急減速などの問題が発生する可能性があることに注意してください。使用する前に、走行条件と vehicle_cmd_gate 遷移フィルタが適切に調整されていることを確認してください。 | 0.1 | +| `check_engage_condition` | `bool` | false の場合、自動遷移は常に利用可能です。 | 0.1 | +| `nearest_dist_deviation_threshold` | `float` | 最も近い軌跡ポイントを見つけるために使用される距離の閾値 | 3.0 | +| `nearest_yaw_deviation_threshold` | `float` | 最も近い軌跡ポイントを見つけるために使用される角度の閾値 | 1.57 | `engage_acceptable_limits` 関連パラメータについて: -| 名前 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `allow_autonomous_in_stopped` | `bool` | 停止時に他のチェックに失敗しても、自律走行への移行が許可される場合はtrue | true | -| `dist_threshold` | `double` | `Autonomous` への移行では、軌跡と自車位置の距離がこの距離内にある必要がある | 1.5 | -| `yaw_threshold` | `double` | `Autonomous` への移行では、軌跡と自車位置のヨー角がこのしきい値内にある必要がある | 0.524 | -| `speed_upper_threshold` | `double` | `Autonomous` への移行では、制御コマンドと自車位置の速度偏差はこのしきい値内にある必要がある | 10.0 | -| `speed_lower_threshold` | `double` | `Autonomous` への移行では、制御コマンドと自車位置の速度偏差はこのしきい値内にある必要がある | -10.0 | -| `acc_threshold` | `double` | `Autonomous` への移行では、制御コマンドの加速度はこのしきい値未満である必要がある | 1.5 | -| `lateral_acc_threshold` | `double` | `Autonomous` への移行では、制御コマンドの横加速度はこのしきい値未満である必要がある | 1.0 | -| `lateral_acc_diff_threshold` | `double` | `Autonomous` への移行では、制御コマンドの横加速度偏差はこのしきい値未満である必要がある | 0.5 | +| 名前 | タイプ | 説明 | デフォルト値 | +| ----------------------------- | -------- | ------------------------------------------------------------------------------------------- | ------------ | +| `allow_autonomous_in_stopped` | `bool` | 停止時に他のチェックに失敗しても、自律走行への移行が許可される場合はtrue | true | +| `dist_threshold` | `double` | `Autonomous` への移行では、軌跡と自車位置の距離がこの距離内にある必要がある | 1.5 | +| `yaw_threshold` | `double` | `Autonomous` への移行では、軌跡と自車位置のヨー角がこのしきい値内にある必要がある | 0.524 | +| `speed_upper_threshold` | `double` | `Autonomous` への移行では、制御コマンドと自車位置の速度偏差はこのしきい値内にある必要がある | 10.0 | +| `speed_lower_threshold` | `double` | `Autonomous` への移行では、制御コマンドと自車位置の速度偏差はこのしきい値内にある必要がある | -10.0 | +| `acc_threshold` | `double` | `Autonomous` への移行では、制御コマンドの加速度はこのしきい値未満である必要がある | 1.5 | +| `lateral_acc_threshold` | `double` | `Autonomous` への移行では、制御コマンドの横加速度はこのしきい値未満である必要がある | 1.0 | +| `lateral_acc_diff_threshold` | `double` | `Autonomous` への移行では、制御コマンドの横加速度偏差はこのしきい値未満である必要がある | 0.5 | `stable_check`関連パラメーター: -| 名称 | 型 | 説明 | デフォルト値 | -| :---------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `duration` | `数値` | この期間、安定条件が満たされると遷移が完了する。 | 0.1 | -| `dist_threshold` | `数値` | 経路と自車位置の距離が一定範囲内にある場合、`自律` への遷移が完了する。 | 1.5 | -| `yaw_threshold` | `数値` | 経路と自車位置のヨー角が一定範囲内にある場合、`自律` への遷移が完了する。 | 0.262 | -| `speed_upper_threshold` | `数値` | 制御コマンドと自車位置の速度偏差が一定範囲内にある場合、`自律` への遷移が完了する。 | 2.0 | -| `speed_lower_threshold` | `数値` | 制御コマンドと自車位置の速度偏差が一定範囲内にある場合、`自律` への遷移が完了する。 | 2.0 | +| 名称 | 型 | 説明 | デフォルト値 | +| :---------------------- | :----- | :---------------------------------------------------------------------------------- | :----------- | +| `duration` | `数値` | この期間、安定条件が満たされると遷移が完了する。 | 0.1 | +| `dist_threshold` | `数値` | 経路と自車位置の距離が一定範囲内にある場合、`自律` への遷移が完了する。 | 1.5 | +| `yaw_threshold` | `数値` | 経路と自車位置のヨー角が一定範囲内にある場合、`自律` への遷移が完了する。 | 0.262 | +| `speed_upper_threshold` | `数値` | 制御コマンドと自車位置の速度偏差が一定範囲内にある場合、`自律` への遷移が完了する。 | 2.0 | +| `speed_lower_threshold` | `数値` | 制御コマンドと自車位置の速度偏差が一定範囲内にある場合、`自律` への遷移が完了する。 | 2.0 | ## 各パラメータ設定におけるエンゲージチェック挙動 このマトリックスは、車両をエンゲージできるシナリオを、パラメータ設定の組み合わせに基づいて記述しています。 -| `enable_engage_on_driving` | `check_engage_condition` | `allow_autonomous_in_stopped` | 許容されるEngageのシナリオ | -| :------------------------: | :----------------------: | :---------------------------: | :---------------------------------------------------------------- | -| x | x | x | 車両が停止している場合のみ | -| x | x | o | 車両が停止している場合のみ | -| x | o | x | 車両が停止しており、すべてのEngage条件が満たされている場合 | -| x | o | o | 車両が停止している場合のみ | -| o | x | x | 常に(注意:推奨されません) | -| o | x | o | 常に(注意:推奨されません) | -| o | o | x | 車両の状態に関係なく、すべてのEngage条件が満たされた場合 | +| `enable_engage_on_driving` | `check_engage_condition` | `allow_autonomous_in_stopped` | 許容されるEngageのシナリオ | +| :------------------------: | :----------------------: | :---------------------------: | :------------------------------------------------------------------- | +| x | x | x | 車両が停止している場合のみ | +| x | x | o | 車両が停止している場合のみ | +| x | o | x | 車両が停止しており、すべてのEngage条件が満たされている場合 | +| x | o | o | 車両が停止している場合のみ | +| o | x | x | 常に(注意:推奨されません) | +| o | x | o | 常に(注意:推奨されません) | +| o | o | x | 車両の状態に関係なく、すべてのEngage条件が満たされた場合 | | o | o | o | すべてのEngage条件が満たされている場合、または車両が停止している場合 | ## Future extensions / Unimplemented parts - 後方互換インターフェイスを削除する必要があります。 - このノードは、`vehicle_cmd_gate` との密接な連携があるため、それに統合する必要があります。 - diff --git a/control/autoware_pid_longitudinal_controller/README.md b/control/autoware_pid_longitudinal_controller/README.md index 89895dbdcd335..9c1965ebfde14 100644 --- a/control/autoware_pid_longitudinal_controller/README.md +++ b/control/autoware_pid_longitudinal_controller/README.md @@ -56,9 +56,9 @@ longitudinal_controllerは、フィードフォワード / フィードバック 倾斜情報には2つの情報源があり、パラメータによって切り替えることができます。 - - 傾斜角から現在の勾配を計算します - - 長所: 容易に入手可能 - - 短所: 車両の振動の影響により、正確な勾配情報を抽出できません +- 傾斜角から現在の勾配を計算します +- 長所: 容易に入手可能 +- 短所: 車両の振動の影響により、正確な勾配情報を抽出できません - 軌道の Z 座標 - ターゲット軌跡における前輪と後輪位置の Z 座標の差から道路勾配を計算します - 長所: 経路の Z 座標が適切に維持されている場合、ピッチ情報よりも正確 @@ -116,11 +116,12 @@ longitudinal_controllerは、フィードフォワード / フィードバック - 傾斜角から現在の勾配を計算します ## 軌道の Z 座標 - - ターゲット軌道の前輪と後輪位置の Z 座標の差から道路勾配を計算 - - 長所: 経路の Z 座標が適切に維持されていれば、ピッチ情報よりも正確 - - 長所: (まだ実装されていない) 遅延補正と組み合わせて使用できる - - 短所: 高精細マップの Z 座標が必要 - - 短所: (現時点では) フリースペースプランニングに対応していない + +- ターゲット軌道の前輪と後輪位置の Z 座標の差から道路勾配を計算 +- 長所: 経路の Z 座標が適切に維持されていれば、ピッチ情報よりも正確 +- 長所: (まだ実装されていない) 遅延補正と組み合わせて使用できる +- 短所: 高精細マップの Z 座標が必要 +- 短所: (現時点では) フリースペースプランニングに対応していない ## 前提 / 制限事項 @@ -161,57 +162,57 @@ longitudinal_controllerは、フィードフォワード / フィードバック `param/lateral_controller_defaults.param.yaml` で定義されている既定のパラメータは、時速 40 km 未満の運転のために AutonomouStuff Lexus RX 450h に調整されています。 -| 名称 | 型 | 説明 | デフォルト値 | -| :-------------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `delay_compensation_time` | double | 縦制御の遅延 [s] | 0.17 | -| `enable_smooth_stop` | bool | STOPPING への遷移を有効にするフラグ | true | -| `enable_overshoot_emergency` | bool | `emergency_state_overshoot_stop_dist` で指定された距離でエゴが停止線を超えた場合に EMERGENCY への遷移を有効にするフラグ | true | -| `enable_large_tracking_error_emergency` | bool | 軌道とエゴの姿勢の大きなずれにより、最も近い軌跡ポイントの検索が失敗した場合に EMERGENCY への遷移を有効にするフラグ | true | -| `enable_slope_compensation` | bool | 勾配補正のための出力加速度を変更するフラグ。勾配角のソースはエゴの姿勢または軌道の角度から選択できます。 `use_trajectory_for_pitch_calculation` を参照してください。 | true | -| `enable_brake_keeping_before_stop` | bool | エゴが停止する前の DRIVE 状態中に特定の加速度を維持するフラグ。 [ブレーキの維持](#brake-keeping) を参照 | false | -| `enable_keep_stopped_until_steer_convergence` | bool | ステアが収束するまで停止状態を維持するフラグ | true | -| `max_acc` | double | 出力加速度の最大値 [m/s^2] | 3.0 | -| `min_acc` | double | 出力加速度の最小値 [m/s^2] | -5.0 | -| `max_jerk` | double | 出力加速度のジャークの最大値 [m/s^3] | 2.0 | -| `min_jerk` | double | 出力加速度のジャークの最小値 [m/s^3] | -5.0 | -| `use_trajectory_for_pitch_calculation` | bool | true の場合、勾配は軌跡の z レベルから推定されます。それ以外の場合は、エゴの姿勢のピッチ角が使用されます。 | false | -| `lpf_pitch_gain` | double | ピッチ推定用のローパスフィルターのゲイン | 0.95 | -| `max_pitch_rad` | double | 推定ピッチの最大値 [rad] | 0.1 | -| `min_pitch_rad` | double | 推定ピッチの最小値 [rad] | -0.1 | +| 名称 | 型 | 説明 | デフォルト値 | +| :-------------------------------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| `delay_compensation_time` | double | 縦制御の遅延 [s] | 0.17 | +| `enable_smooth_stop` | bool | STOPPING への遷移を有効にするフラグ | true | +| `enable_overshoot_emergency` | bool | `emergency_state_overshoot_stop_dist` で指定された距離でエゴが停止線を超えた場合に EMERGENCY への遷移を有効にするフラグ | true | +| `enable_large_tracking_error_emergency` | bool | 軌道とエゴの姿勢の大きなずれにより、最も近い軌跡ポイントの検索が失敗した場合に EMERGENCY への遷移を有効にするフラグ | true | +| `enable_slope_compensation` | bool | 勾配補正のための出力加速度を変更するフラグ。勾配角のソースはエゴの姿勢または軌道の角度から選択できます。 `use_trajectory_for_pitch_calculation` を参照してください。 | true | +| `enable_brake_keeping_before_stop` | bool | エゴが停止する前の DRIVE 状態中に特定の加速度を維持するフラグ。 [ブレーキの維持](#brake-keeping) を参照 | false | +| `enable_keep_stopped_until_steer_convergence` | bool | ステアが収束するまで停止状態を維持するフラグ | true | +| `max_acc` | double | 出力加速度の最大値 [m/s^2] | 3.0 | +| `min_acc` | double | 出力加速度の最小値 [m/s^2] | -5.0 | +| `max_jerk` | double | 出力加速度のジャークの最大値 [m/s^3] | 2.0 | +| `min_jerk` | double | 出力加速度のジャークの最小値 [m/s^3] | -5.0 | +| `use_trajectory_for_pitch_calculation` | bool | true の場合、勾配は軌跡の z レベルから推定されます。それ以外の場合は、エゴの姿勢のピッチ角が使用されます。 | false | +| `lpf_pitch_gain` | double | ピッチ推定用のローパスフィルターのゲイン | 0.95 | +| `max_pitch_rad` | double | 推定ピッチの最大値 [rad] | 0.1 | +| `min_pitch_rad` | double | 推定ピッチの最小値 [rad] | -0.1 | ### 状態遷移 -| 名称 | タイプ | 説明 | デフォルト値 | -| :---------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| drive_state_stop_dist | double | 停止位置までの距離が`drive_state_stop_dist` + `drive_state_offset_stop_dist` [m]を超えると、DRIVE状態に移行します。 | 0.5 | -| drive_state_offset_stop_dist | double | 停止位置までの距離が`drive_state_stop_dist` + `drive_state_offset_stop_dist` [m]を超えると、DRIVE状態に移行します。 | 1.0 | -| stopping_state_stop_dist | double | 停止位置までの距離が`stopping_state_stop_dist` [m]未満になるとSTOPPING状態に移行します。 | 0.5 | -| stopped_state_entry_vel | double | STOPPED状態への遷移時の自車速度のしきい値 [m/s] | 0.01 | -| stopped_state_entry_acc | double | STOPPED状態への遷移時の自車加速度のしきい値 [m/s^2] | 0.1 | -| emergency_state_overshoot_stop_dist | double | `enable_overshoot_emergency`が真の場合、自車が停止位置から`emergency_state_overshoot_stop_dist`メートル先にあるとEMERGENCY状態に移行します。 [m] | 1.5 | -| emergency_state_traj_trans_dev | double | 自車位置が最寄りの軌跡ポイントから`emergency_state_traj_tran_dev`メートル離れているとEMERGENCY状態に移行します。 [m] | 3.0 | -| emergency_state_traj_rot_dev | double | 自車の方位が最寄りの軌跡ポイントの方位から`emergency_state_traj_rot_dev`ラジアン離れているとEMERGENCY状態に移行します。 [rad] | 0.784 | +| 名称 | タイプ | 説明 | デフォルト値 | +| :---------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| drive_state_stop_dist | double | 停止位置までの距離が`drive_state_stop_dist` + `drive_state_offset_stop_dist` [m]を超えると、DRIVE状態に移行します。 | 0.5 | +| drive_state_offset_stop_dist | double | 停止位置までの距離が`drive_state_stop_dist` + `drive_state_offset_stop_dist` [m]を超えると、DRIVE状態に移行します。 | 1.0 | +| stopping_state_stop_dist | double | 停止位置までの距離が`stopping_state_stop_dist` [m]未満になるとSTOPPING状態に移行します。 | 0.5 | +| stopped_state_entry_vel | double | STOPPED状態への遷移時の自車速度のしきい値 [m/s] | 0.01 | +| stopped_state_entry_acc | double | STOPPED状態への遷移時の自車加速度のしきい値 [m/s^2] | 0.1 | +| emergency_state_overshoot_stop_dist | double | `enable_overshoot_emergency`が真の場合、自車が停止位置から`emergency_state_overshoot_stop_dist`メートル先にあるとEMERGENCY状態に移行します。 [m] | 1.5 | +| emergency_state_traj_trans_dev | double | 自車位置が最寄りの軌跡ポイントから`emergency_state_traj_tran_dev`メートル離れているとEMERGENCY状態に移行します。 [m] | 3.0 | +| emergency_state_traj_rot_dev | double | 自車の方位が最寄りの軌跡ポイントの方位から`emergency_state_traj_rot_dev`ラジアン離れているとEMERGENCY状態に移行します。 [rad] | 0.784 | ### DRIVE パラメータ -| 名称 | 型 | 説明 | デフォルト値 | -| :------------------------------------ | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| kp | double | Longitudinal制御のPゲイン | 1.0 | -| ki | double | Longitudinal制御のIゲイン | 0.1 | -| kd | double | Longitudinal制御のDゲイン | 0.0 | -| max_out | double | DRIVE状態におけるPID出力加速度の最大値[m/s²] | 1.0 | -| min_out | double | DRIVE状態におけるPID出力加速度の最小値[m/s²] | -1.0 | -| max_p_effort | double | Pゲインにおける加速度の最大値 | 1.0 | -| min_p_effort | double | Pゲインにおける加速度の最小値 | -1.0 | -| max_i_effort | double | Iゲインにおける加速度の最大値 | 0.3 | -| min_i_effort | double | Iゲインにおける加速度の最小値 | -0.3 | -| max_d_effort | double | Dゲインにおける加速度の最大値 | 0.0 | -| min_d_effort | double | Dゲインにおける加速度の最小値 | 0.0 | -| lpf_vel_error_gain | double | 速度誤差のローパスフィルタのゲイン | 0.9 | -| enable_integration_at_low_speed | bool | 車両速度が`current_vel_threshold_pid_integration`未満の場合に、加速度誤差の積分を有効にするか否か | false | -| current_vel_threshold_pid_integration | double | 現在の速度の絶対値がこのパラメータより大きい場合にのみ、I項に対して速度誤差を積分します。 [m/s] | 0.5 | -| time_threshold_before_pid_integration | double | PID誤差の積分を有効にするまでに車両の無移動が経過する必要がある時間。 [s] | 5.0 | -| brake_keeping_acc | double | `enable_brake_keeping_before_stop`が真の場合、自我が停止する前にDRIVE状態中に特定の加速度が維持されます [m/s²] [ブレーキキープ](#brake-keeping)を参照 | 0.2 | +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------------------------ | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| kp | double | Longitudinal制御のPゲイン | 1.0 | +| ki | double | Longitudinal制御のIゲイン | 0.1 | +| kd | double | Longitudinal制御のDゲイン | 0.0 | +| max_out | double | DRIVE状態におけるPID出力加速度の最大値[m/s²] | 1.0 | +| min_out | double | DRIVE状態におけるPID出力加速度の最小値[m/s²] | -1.0 | +| max_p_effort | double | Pゲインにおける加速度の最大値 | 1.0 | +| min_p_effort | double | Pゲインにおける加速度の最小値 | -1.0 | +| max_i_effort | double | Iゲインにおける加速度の最大値 | 0.3 | +| min_i_effort | double | Iゲインにおける加速度の最小値 | -0.3 | +| max_d_effort | double | Dゲインにおける加速度の最大値 | 0.0 | +| min_d_effort | double | Dゲインにおける加速度の最小値 | 0.0 | +| lpf_vel_error_gain | double | 速度誤差のローパスフィルタのゲイン | 0.9 | +| enable_integration_at_low_speed | bool | 車両速度が`current_vel_threshold_pid_integration`未満の場合に、加速度誤差の積分を有効にするか否か | false | +| current_vel_threshold_pid_integration | double | 現在の速度の絶対値がこのパラメータより大きい場合にのみ、I項に対して速度誤差を積分します。 [m/s] | 0.5 | +| time_threshold_before_pid_integration | double | PID誤差の積分を有効にするまでに車両の無移動が経過する必要がある時間。 [s] | 5.0 | +| brake_keeping_acc | double | `enable_brake_keeping_before_stop`が真の場合、自我が停止する前にDRIVE状態中に特定の加速度が維持されます [m/s²] [ブレーキキープ](#brake-keeping)を参照 | 0.2 | ### STOPPING パラメーター(スムーズストップ) @@ -221,19 +222,19 @@ longitudinal_controllerは、フィードフォワード / フィードバック 車両がある一定時間停止しなかったり、停止位置を何メートルか超えた場合は、すぐに停止するための弱い加速度(`weak_stop_acc`)が生成されます。 車両がまだ走っている場合は、すぐに停止するための強い加速度(`strong_stop_acc`)が生成されます。 -| 名前 | タイプ | 説明 | デフォルト値 | -| :--------------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------- | :------------ | -| smooth_stop_max_strong_acc | double | 最大強加速 [m/s^2] | -0.5 | -| smooth_stop_min_strong_acc | double | 最小強加速 [m/s^2] | -0.8 | -| smooth_stop_weak_acc | double | 弱加速 [m/s^2] | -0.3 | -| smooth_stop_weak_stop_acc | double | 弱停止加速 [m/s^2] | -0.8 | -| smooth_stop_strong_stop_acc | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートル離れたときに出力される強加速 [m/s^2] | -3.4 | -| smooth_stop_max_fast_vel | double | 自車が高速走行中とみなす、最大の高速限界速度 [m/s]。高速走行中とみなされると、強加速が出力されます。 | 0.5 | -| smooth_stop_min_running_vel | double | 自車が走行中とみなす、最低走行速度 [m/s] | 0.01 | -| smooth_stop_min_running_acc | double | 自車が走行中とみなす、最低走行加速度 [m/s^2] | 0.01 | -| smooth_stop_weak_stop_time | double | 弱加速を出力する最大時間 [s]。時間を超えると強加速が出力されます。 | 0.8 | -| smooth_stop_weak_stop_dist | double | 自車が停止ポイントから `smooth_stop_weak_stop_dist` メートルの距離にあるとき、弱加速が出力されます [m] | -0.3 | -| smooth_stop_strong_stop_dist | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートルの距離にあるとき、強加速が出力されます [m] | -0.5 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :--------------------------- | :----- | :------------------------------------------------------------------------------------------------------- | :----------- | +| smooth_stop_max_strong_acc | double | 最大強加速 [m/s^2] | -0.5 | +| smooth_stop_min_strong_acc | double | 最小強加速 [m/s^2] | -0.8 | +| smooth_stop_weak_acc | double | 弱加速 [m/s^2] | -0.3 | +| smooth_stop_weak_stop_acc | double | 弱停止加速 [m/s^2] | -0.8 | +| smooth_stop_strong_stop_acc | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートル離れたときに出力される強加速 [m/s^2] | -3.4 | +| smooth_stop_max_fast_vel | double | 自車が高速走行中とみなす、最大の高速限界速度 [m/s]。高速走行中とみなされると、強加速が出力されます。 | 0.5 | +| smooth_stop_min_running_vel | double | 自車が走行中とみなす、最低走行速度 [m/s] | 0.01 | +| smooth_stop_min_running_acc | double | 自車が走行中とみなす、最低走行加速度 [m/s^2] | 0.01 | +| smooth_stop_weak_stop_time | double | 弱加速を出力する最大時間 [s]。時間を超えると強加速が出力されます。 | 0.8 | +| smooth_stop_weak_stop_dist | double | 自車が停止ポイントから `smooth_stop_weak_stop_dist` メートルの距離にあるとき、弱加速が出力されます [m] | -0.3 | +| smooth_stop_strong_stop_dist | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートルの距離にあるとき、強加速が出力されます [m] | -0.5 | ### STOPPED パラメーター @@ -241,23 +242,22 @@ longitudinal_controllerは、フィードフォワード / フィードバック そのため、`stopped_acc` には、車両に最大のブレーキを適用することを可能にする値を設定する必要があります。 `stopped_acc` が十分に低いと、急勾配で滑落する可能性があります。 -| Name | Type | Description | Default value | -| :----------- | :----- | :----------------------------------------------------------------------------------- | :------------ | -| stopped_vel | double | STOPPED状態における目標速度 [m/s] | 0.0 | -| stopped_acc | double | STOPPED状態における目標加速度 [m/s^2] | -3.4 | -| stopped_jerk | double | STOPPED状態における目標ジャーク [m/s^3] | -5.0 | +| Name | Type | Description | Default value | +| :----------- | :----- | :-------------------------------------- | :------------ | +| stopped_vel | double | STOPPED状態における目標速度 [m/s] | 0.0 | +| stopped_acc | double | STOPPED状態における目標加速度 [m/s^2] | -3.4 | +| stopped_jerk | double | STOPPED状態における目標ジャーク [m/s^3] | -5.0 | ### EMERGENCYパラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -| :------------- | :----- | :------------------------------------------------ | :------------ | -| emergency_vel | 倍精度浮動小数点 | EMERGENCY状態での目標速度 [m/s] | 0.0 | -| emergency_acc | 倍精度浮動小数点 | EMERGENCY状態での目標加速度 [m/s^2] | -5.0 | -| emergency_jerk | 倍精度浮動小数点 | EMERGENCY状態での目標ジャーク [m/s^3] | -3.0 | +| 名称 | タイプ | 説明 | デフォルト値 | +| :------------- | :--------------- | :------------------------------------ | :----------- | +| emergency_vel | 倍精度浮動小数点 | EMERGENCY状態での目標速度 [m/s] | 0.0 | +| emergency_acc | 倍精度浮動小数点 | EMERGENCY状態での目標加速度 [m/s^2] | -5.0 | +| emergency_jerk | 倍精度浮動小数点 | EMERGENCY状態での目標ジャーク [m/s^3] | -3.0 | ## 参考文献 / 外部リンク ## 今後の拡張 / 未実装の部分 ## 関連する課題 - diff --git a/control/autoware_pure_pursuit/README.md b/control/autoware_pure_pursuit/README.md index 3f5be1717fa6c..157043674dfcf 100644 --- a/control/autoware_pure_pursuit/README.md +++ b/control/autoware_pure_pursuit/README.md @@ -17,4 +17,3 @@ - LateralSyncData - ステアリングアングルの収束 - `autoware_planning_msgs/Trajectory`: 自車に対する予測パス - diff --git a/control/autoware_shift_decider/README.md b/control/autoware_shift_decider/README.md index c0aa422982d48..3cd3a217d7769 100644 --- a/control/autoware_shift_decider/README.md +++ b/control/autoware_shift_decider/README.md @@ -8,7 +8,6 @@ ### フローチャート - ```plantuml @startuml skinparam monochrome true @@ -38,8 +37,8 @@ stop ### 入力 -| 名称 | タイプ | 説明 | -| --------------------- | ------------------------------------- | ---------------------------- | +| 名称 | タイプ | 説明 | +| --------------------- | ------------------------------------- | -------------------- | | `~/input/control_cmd` | `autoware_control_msgs::msg::Control` | 車両の制御コマンド。 | ### 出力 @@ -48,7 +47,7 @@ stop **更新履歴** -* 2023年3月15日: ドキュメントの初回公開 +- 2023年3月15日: ドキュメントの初回公開 **概要** @@ -58,20 +57,20 @@ stop Autoware のアーキテクチャはモジュール化されており、次のコンポーネントで構成されています。 -* **Perception (認識)**: カメラ、レーダー、LIDAR から受信したセンサーデータを処理し、自車位置と周囲環境のモデルを作成します。 -* **Planning (計画)**: 知覚された環境に基づいて、安全で効率的な経路を計画します。 -* **Control (制御)**: 計画された経路に従って車両を制御し、センサーデータとフィードバックを使用して適応します。 -* **Localization (自己位置推定)**: 車両の位置と姿勢をリアルタイムで追跡します。 +- **Perception (認識)**: カメラ、レーダー、LIDAR から受信したセンサーデータを処理し、自車位置と周囲環境のモデルを作成します。 +- **Planning (計画)**: 知覚された環境に基づいて、安全で効率的な経路を計画します。 +- **Control (制御)**: 計画された経路に従って車両を制御し、センサーデータとフィードバックを使用して適応します。 +- **Localization (自己位置推定)**: 車両の位置と姿勢をリアルタイムで追跡します。 **機能** Autoware は以下を含む幅広い機能を提供します。 -* **障害物検出と回避**: 歩行者、車両、その他の障害物を検出し、衝突を回避します。 -* **経路追従**: 計画された経路に沿って車両を正確に制御します。 -* **交通信号認識**: 交通信号を検出し、それらに従って動作します。 -* **駐車支援**: 車両の自動駐車を支援します。 -* **ビジョンベースの自己位置推定**: カメラ画像を使用して車両の位置と姿勢を推定します。 +- **障害物検出と回避**: 歩行者、車両、その他の障害物を検出し、衝突を回避します。 +- **経路追従**: 計画された経路に沿って車両を正確に制御します。 +- **交通信号認識**: 交通信号を検出し、それらに従って動作します。 +- **駐車支援**: 車両の自動駐車を支援します。 +- **ビジョンベースの自己位置推定**: カメラ画像を使用して車両の位置と姿勢を推定します。 **使用方法** @@ -84,17 +83,17 @@ Autoware を使用するには、次の手順に従います。 **注意事項** -* 自動運転システムは常に慎重に使用し、道路交通法を遵守する必要があります。 -* Autoware は開発中のソフトウェアであり、常に改善されています。 -* システムを十分にテストせずに使用しないでください。 +- 自動運転システムは常に慎重に使用し、道路交通法を遵守する必要があります。 +- Autoware は開発中のソフトウェアであり、常に改善されています。 +- システムを十分にテストせずに使用しないでください。 **免責事項** Autoware はオープンソースソフトウェアであり、いかなる保証もなしに提供されています。ユーザーは自己責任でこのソフトウェアを使用するものとします。 -| Name | Type | Description | -| -------------------- | -------------------------------------------- | ------------------------------------- | -| `~output/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 前進 / 後退走行時のギア | +| Name | Type | Description | +| ------------------ | ----------------------------------------- | ----------------------- | +| `~output/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 前進 / 後退走行時のギア | ## パラメータ @@ -103,4 +102,3 @@ Autoware はオープンソースソフトウェアであり、いかなる保 ## 仮定 / 制限事項 TBD - diff --git a/control/autoware_smart_mpc_trajectory_follower/README.md b/control/autoware_smart_mpc_trajectory_follower/README.md index 70eca571a8925..4b13b25c25532 100644 --- a/control/autoware_smart_mpc_trajectory_follower/README.md +++ b/control/autoware_smart_mpc_trajectory_follower/README.md @@ -32,26 +32,24 @@ シミュレーションを実行するには、次のコマンドを実行します。 - ```bash ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit trajectory_follower_mode:=smart_mpc_trajectory_follower ``` [!NOTE] + > 名目モデルの[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml)が設定されている場合は、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)の`trained_model_parameter:control_application:use_trained_model`を`false`に設定してください。学習済みモデルを使用して実行するには、`trained_model_parameter:control_application:use_trained_model`を`true`に設定しますが、学習済みモデルは次の手順に従って生成する必要があります。 ### モデルの学習と制御への反映 学習データを収集するには、autowareを起動して、走行を行い、次のコマンドでrosbagデータを記録します。 - ```bash ros2 bag record /localization/kinematic_state /localization/acceleration /vehicle/status/steering_status /control/command/control_cmd /control/trajectory_follower/control_cmd /control/trajectory_follower/lane_departure_checker_node/debug/deviation/lateral /control/trajectory_follower/lane_departure_checker_node/debug/deviation/yaw /system/operation_mode/state /vehicle/status/control_mode /sensing/imu/imu_data /debug_mpc_x_des /debug_mpc_y_des /debug_mpc_v_des /debug_mpc_yaw_des /debug_mpc_acc_des /debug_mpc_steer_des /debug_mpc_X_des_converted /debug_mpc_x_current /debug_mpc_error_prediction /debug_mpc_max_trajectory_err /debug_mpc_emergency_stop_mode /debug_mpc_goal_stop_mode /debug_mpc_total_ctrl_time /debug_mpc_calc_u_opt_time ``` rosbagのディレクトリに[rosbag2.bash](./autoware_smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash)を移動させて、ディレクトリで下記コマンドを実行します - ```bash bash rosbag2.bash ``` @@ -64,7 +62,6 @@ rosbagデータをCSV形式に変換してモデルをトレーニングしま 代わりに、Python環境で次のコマンドを実行することで同様の結果を得ることができます。 - ```python from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model model_trainer = train_drive_NN_model.train_drive_NN_model() @@ -80,7 +77,6 @@ LSTM を使用すると、セル状態および隠れ状態は履歴時系列デ トレーニングと検証に使用される rosbag ディレクトリのパス (`dir_0`、`dir_1`、`dir_2`、`dir_val_0`、`dir_val_1`、`dir_val_2`...) と、モデルを保存するディレクトリ (`save_dir`) から、Python 環境で次のようにモデルを保存できます。 - ```python from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model model_trainer = train_drive_NN_model.train_drive_NN_model() @@ -100,7 +96,6 @@ model_trainer.save_models(save_dir) 多項式回帰の実行後は、次のとおり、NNを残差でトレーニングできます。 - ```python model_trainer.get_trained_model(use_polynomial_reg=True) ``` @@ -111,7 +106,6 @@ model_trainer.get_trained_model(use_polynomial_reg=True) NN モデルが使用されず、多項式回帰のみが実行される場合は、次のコマンドを実行します: - ```python model_trainer.get_trained_model(use_polynomial_reg=True,force_NN_model_to_zero=True) ``` @@ -123,7 +117,6 @@ model_trainer.get_trained_model(use_polynomial_reg=True,force_NN_model_to_zero=T ここではサンプル車両のホイールベースが2.79 mであるところ、コントローラ側に2.0 mという誤った値を入力した場合の適応性能の検証を例として示します。 コントローラに2.0 mのホイールベースを与えるため、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml)の`nominal_parameter:vehicle_info:wheel_base`の値を2.0に設定し、次のコマンドを実行します。 - ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache ``` @@ -142,7 +135,6 @@ ROS バッグを記録し、ROS バッグを記録し、「モデルのトレー ここで取得したトレーニング済みモデルを使用して制御するには、`trained_model_parameter:control_application:use_trained_model` を `true` に設定し、同様に Autoware を起動し、同じルートで ROS バッグを記録しながら走行します。 走行が完了したら、「モデルのトレーニングと制御への反映」で説明した方法を使用して ROS バッグファイルを CSV 形式に変換します。`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb` で `lateral_error_visualize` 関数を公称の ROS バッグファイル `rosbag_nominal` とトレーニング済み ROS バッグファイル `rosbag_trained` に対して実行すると、次のように横方向偏差のグラフを取得できます。 - ```python lateral_error_visualize(dir_name=rosbag_nominal,ylim=[-1.2,1.2]) lateral_error_visualize(dir_name=rosbag_trained,ylim=[-1.2,1.2]) @@ -165,14 +157,12 @@ lateral_error_visualize(dir_name=rosbag_trained,ylim=[-1.2,1.2]) } ``` - ```json { "wheel_base": 2.79 } ``` 次に、`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator` に移動した後、以下のコマンドを実行してパイソンシミュレータ上でスラローム走行をノミナル制御を使用してテストします。 - ```bash python3 run_python_simulator.py nominal_test ``` @@ -191,7 +181,6 @@ python3 run_python_simulator.py nominal_test 得られたモデルに基づく8の字走行と運転を使用してトレーニングを実行するには、以下のコマンドを実行します。 - ```bash python3 run_python_simulator.py ``` @@ -217,19 +206,17 @@ python3 run_python_simulator.py まず、公称モデル設定の値をデフォルト値に戻すために、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) の `nominal_parameter:vehicle_info:wheel_base` の値を 2.79 に設定して、次のコマンドを実行します。 - ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache ``` 次に、`sim_setting.json` を次のように修正します: - ```json { "steer_time_delay": 1.01 } ``` - このように、`steer_time_delay` を 1.01 秒に設定して実験を実施します。 +このように、`steer_time_delay` を 1.01 秒に設定して実験を実施します。 公称モデルを使用した走行の結果は次のとおりです。 @@ -253,26 +240,25 @@ LSTM を含むモデルを使用したパフォーマンスは、含まないモ Python シミュレータに渡すことができるパラメータは次のとおりです。 -| パラメータ | 型 | 説明 | -| ------------------------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| steer_bias | 浮動 | ステアリングバイアス [rad] | -| steer_rate_lim | 浮動 | ステアリングレートの制限 [rad/s] | -| vel_rate_lim | 浮動 | 加速度制限 [m/s^2] | -| wheel_base | 浮動 | ホイールベース [m] |: -| steer_dead_band | 浮動 | ステアリングデッドバンド [rad] | -| adaptive_gear_ratio_coef | リスト[浮動] | タイヤ角からステアリングホイール角への速度依存ギア比に関する情報を指定する 6 個の長さを持つフローティングポイントのリスト | -| acc_time_delay | 浮動 | 加速度遅延時間 [s] | -| steer_time_delay | 浮動 | ステアリング遅延時間 [s] | -| acc_time_constant | 浮動 | 加速度時定数 [s] | -| steer_time_constant | 浮動 | ステアリング時定数 [s] | -| accel_map_scale | 浮動 | 加速度入力値から実際の加速度の実現への対応する歪みを拡大するパラメータ。
対応情報は `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/accel_map.csv` に格納されています。 | -| acc_scaling | 浮動 | 加速度スケーリング | -| steer_scaling | 浮動 | ステアリングスケーリング | -| vehicle_type | 整数 | 0 から 4 までの値を取ります。
各車両タイプについては以下で説明します。 | +| パラメータ | 型 | 説明 | +| ------------------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | +| steer_bias | 浮動 | ステアリングバイアス [rad] | +| steer_rate_lim | 浮動 | ステアリングレートの制限 [rad/s] | +| vel_rate_lim | 浮動 | 加速度制限 [m/s^2] | +| wheel_base | 浮動 | ホイールベース [m] | : | +| steer_dead_band | 浮動 | ステアリングデッドバンド [rad] | +| adaptive_gear_ratio_coef | リスト[浮動] | タイヤ角からステアリングホイール角への速度依存ギア比に関する情報を指定する 6 個の長さを持つフローティングポイントのリスト | +| acc_time_delay | 浮動 | 加速度遅延時間 [s] | +| steer_time_delay | 浮動 | ステアリング遅延時間 [s] | +| acc_time_constant | 浮動 | 加速度時定数 [s] | +| steer_time_constant | 浮動 | ステアリング時定数 [s] | +| accel_map_scale | 浮動 | 加速度入力値から実際の加速度の実現への対応する歪みを拡大するパラメータ。
対応情報は `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/accel_map.csv` に格納されています。 | +| acc_scaling | 浮動 | 加速度スケーリング | +| steer_scaling | 浮動 | ステアリングスケーリング | +| vehicle_type | 整数 | 0 から 4 までの値を取ります。
各車両タイプについては以下で説明します。 | 例えば、シミュレーション側に0.01 [rad]のステア係数バイアスと0.001 [rad]のステアデッドバンドを与える場合は、`sim_setting.json`を次のように編集します。 - ```json { "steer_bias": 0.01, "steer_dead_band": 0.001 } ``` @@ -283,14 +269,14 @@ Python シミュレータに渡すことができるパラメータは次のと ## 自動運転ソフトウェアのパラメータ設定 -| パラメータ | 値 | -|---|---| -| ホイールベース | 2.79 | -| 加速度応答遅れ時間 | 0.1 | +| パラメータ | 値 | +| ------------------------ | ---- | +| ホイールベース | 2.79 | +| 加速度応答遅れ時間 | 0.1 | | ステアリング応答遅れ時間 | 0.27 | -| 加速度応答時間定数 | 0.1 | +| 加速度応答時間定数 | 0.1 | | ステアリング応答時間定数 | 0.24 | -| 加速度スケーリング | 1.0 | +| 加速度スケーリング | 1.0 | ##### vehicle_type_1 @@ -300,27 +286,27 @@ Python シミュレータに渡すことができるパラメータは次のと ### パラメータ -| パラメータ | 値 | -|---|---| -| ホイールベース | 4.76 | -| 加速度タイム遅延 | 1.0 | -| ステアリングタイム遅延 | 1.0 | -| 加速度タイム定数 | 1.0 | -| ステアリングタイム定数 | 1.0 | -| 加速度スケーリング | 0.2 | +| パラメータ | 値 | +| ---------------------- | ---- | +| ホイールベース | 4.76 | +| 加速度タイム遅延 | 1.0 | +| ステアリングタイム遅延 | 1.0 | +| 加速度タイム定数 | 1.0 | +| ステアリングタイム定数 | 1.0 | +| 加速度スケーリング | 0.2 | ##### vehicle_type_2 この車両タイプは、小型バスを想定しています。 -| パラメータ | 値 | -| ------------------- | ----- | -| ホイールベース | 4.76 | -| 加速度遅延時間 | 0.5 | -| 操舵遅延時間 | 0.5 | -| 加速度タイムコンスタント | 0.5 | -| 操舵タイムコンスタント | 0.5 | -| 加速度スケーリング | 0.5 | +| パラメータ | 値 | +| ------------------------ | ---- | +| ホイールベース | 4.76 | +| 加速度遅延時間 | 0.5 | +| 操舵遅延時間 | 0.5 | +| 加速度タイムコンスタント | 0.5 | +| 操舵タイムコンスタント | 0.5 | +| 加速度スケーリング | 0.5 | ##### vehicle_type_3 @@ -330,27 +316,27 @@ Python シミュレータに渡すことができるパラメータは次のと ### パラメータ -| パラメータ | 値 | -|---|---| -| ホイーベース | 1.335 | -| 加速度時間遅延 | 0.3 | -| 操舵時間遅延 | 0.3 | -| 加速度時間定数 | 0.3 | -| 操舵時間定数 | 0.3 | -| 加速度スケーリング | 1.5 | +| パラメータ | 値 | +| ------------------ | ----- | +| ホイーベース | 1.335 | +| 加速度時間遅延 | 0.3 | +| 操舵時間遅延 | 0.3 | +| 加速度時間定数 | 0.3 | +| 操舵時間定数 | 0.3 | +| 加速度スケーリング | 1.5 | ##### vehicle_type_4 この車両タイプは小型ロボット向けです。 -| パラメータ | 値 | -| ------------------- | ---- | -| ホイールベース | 0.395 | -| 加速遅延時間 | 0.2 | -| ステアリング遅延時間 | 0.2 | -| 加速時間定数 | 0.2 | +| パラメータ | 値 | +| -------------------- | ----- | +| ホイールベース | 0.395 | +| 加速遅延時間 | 0.2 | +| ステアリング遅延時間 | 0.2 | +| 加速時間定数 | 0.2 | | ステアリング時間定数 | 0.2 | -| 加速度スケーリング | 1.0 | +| 加速度スケーリング | 1.0 | #### Pythonシミュレーターでの自動テスト @@ -358,7 +344,6 @@ Python シミュレータに渡すことができるパラメータは次のと [run_sim.py](./autoware_smart_mpc_trajectory_follower/python_simulator/run_sim.py)で設定されたパラメータ変更範囲内で走行実験を実行するには、`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator`に移動し、次のコマンドを実行します。 - ```bash python3 run_sim.py --param_name steer_bias ``` @@ -367,7 +352,6 @@ python3 run_sim.py --param_name steer_bias 一度に制限値以外のすべてのパラメーターのテストを実行するには、次のコマンドを実行します: - ```bash python3 run_auto_test.py ``` @@ -384,15 +368,14 @@ Auto_testの実行結果を`auto_test`ディレクトリに保存しています `run_sim.py`で次のパラメータを設定できます。 -| パラメータ | 型 | 説明 | -| ------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| USE_TRAINED_MODEL_DIFF | bool | トレーニングされたモデルの導関数が制御に反映されるか? | -| DATA_COLLECTION_MODE | DataCollectionMode | どの方式でトレーニングデータを収集するか
"DataCollectionMode.ff": フィードフォワード入力で直線走行
"DataCollectionMode.pp": ピュアパーシュート制御で8の字走行
"DataCollectionMode.mpc": mpcでスラローム走行 | -| USE_POLYNOMIAL_REGRESSION | bool | NNの前に多項式回帰を実行するか? | -| USE_SELECTED_POLYNOMIAL | bool | USE_POLYNOMIAL_REGRESSIONがTrueの場合、あらかじめ選択された多項式のみを使用して多項式回帰を実行する。
多項式の選択は、車両の公称モデルに基づくいくつかパラメータのシフトを吸収できるように意図されている。 +| パラメータ | 型 | 説明 | +| ------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| USE_TRAINED_MODEL_DIFF | bool | トレーニングされたモデルの導関数が制御に反映されるか? | +| DATA_COLLECTION_MODE | DataCollectionMode | どの方式でトレーニングデータを収集するか
"DataCollectionMode.ff": フィードフォワード入力で直線走行
"DataCollectionMode.pp": ピュアパーシュート制御で8の字走行
"DataCollectionMode.mpc": mpcでスラローム走行 | +| USE_POLYNOMIAL_REGRESSION | bool | NNの前に多項式回帰を実行するか? | +| USE_SELECTED_POLYNOMIAL | bool | USE_POLYNOMIAL_REGRESSIONがTrueの場合、あらかじめ選択された多項式のみを使用して多項式回帰を実行する。
多項式の選択は、車両の公称モデルに基づくいくつかパラメータのシフトを吸収できるように意図されている。 | -> [!注意] -> `run_sim.py` を実行すると、`run_sim.py` で設定された `use_trained_model_diff` が [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) で設定された `trained_model_parameter:control_application:use_trained_model_diff` より優先されます。 +> [!注意] > `run_sim.py` を実行すると、`run_sim.py` で設定された `use_trained_model_diff` が [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) で設定された `trained_model_parameter:control_application:use_trained_model_diff` より優先されます。 #### Pure Pursuit の走行データのカーネル密度推定 @@ -404,31 +387,30 @@ Pure Pursuit 走行から取得したデータの分布は、カーネル密度 車両モデルの公称パラメータは、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) ファイルを編集することで変更できます。 公称パラメータを変更した後、次のコマンドを実行してキャッシュを削除する必要があります。 + ```bash rm ~/.cache/autoware/autoware_smart_mpc_trajectory_follower/params/ ``` - ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache ``` **通常パラメータは次のとおりです。** -| パラメータ | 型 | 説明 | -| ------------------------------------------------ | ----- | -------------------------------------- | -| nominal_parameter:vehicle_info:wheel_base | float | ホイールベース [m] | -| nominal_parameter:acceleration:acc_time_delay | float | 加速度タイム遅延 [s] | -| nominal_parameter:acceleration:acc_time_constant | float | 加速度タイム定数 [s] | -| nominal_parameter:steering:steer_time_delay | float | ステアリングタイム遅延 [s] | -| nominal_parameter:steering:steer_time_constant | float | ステアリングタイム定数 [s] | +| パラメータ | 型 | 説明 | +| ------------------------------------------------ | ----- | -------------------------- | +| nominal_parameter:vehicle_info:wheel_base | float | ホイールベース [m] | +| nominal_parameter:acceleration:acc_time_delay | float | 加速度タイム遅延 [s] | +| nominal_parameter:acceleration:acc_time_constant | float | 加速度タイム定数 [s] | +| nominal_parameter:steering:steer_time_delay | float | ステアリングタイム遅延 [s] | +| nominal_parameter:steering:steer_time_constant | float | ステアリングタイム定数 [s] | ## コントロールパラメータの変更と再読み込み 制御パラメータは、ファイル[mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml)と[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)を変更することで変更できます。 パラメータの変更はAutowareを再起動することで反映できますが、次のコマンドを使用することでAutowareを実行中のまま反映できます。 - ```bash ros2 topic pub /pympc_reload_mpc_param_trigger std_msgs/msg/String "data: ''" --once ``` @@ -437,36 +419,35 @@ ros2 topic pub /pympc_reload_mpc_param_trigger std_msgs/msg/String "data: ''" -- ### `mpc_param.yaml` -| パラメータ | 型 | 説明 | -| ----------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| mpc_parameter:system:mode | str | 制御モード
"ilqr": iLQRモード
"mppi": MPPIモード
"mppi_ilqr": iLQRの初期値はMPPIソリューションによって与えられる | +| パラメータ | 型 | 説明 | +| ------------------------------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| mpc_parameter:system:mode | str | 制御モード
"ilqr": iLQRモード
"mppi": MPPIモード
"mppi_ilqr": iLQRの初期値はMPPIソリューションによって与えられる | | mpc_parameter:cost_parameters:Q | list[float] | 状態のステージコスト
長さ8のリスト、順に: 直線偏差、横方向偏差、速度偏差、偏航角偏差、加速度偏差、ステア偏差、加速度入力偏差、ステア入力偏差のコスト重み | -| mpc_parameter:cost_parameters:Q_c | list[float] | 状態の次のtiming_Q_cに相当するhorizon内のコスト
リストの構成要素の対応はQの場合と同じ | -| mpc_parameter:cost_parameters:Q_f | list[float] | 状態の終端コスト
リストの構成要素の対応はQの場合と同じ | -| mpc_parameter:cost_parameters:R | list[float] | 長さ2のリスト、R[0]は加速度入力値の変化率のコストの重み、R[1]はステア入力値の変化率のコストの重み | -| mpc_parameter:mpc_setting:timing_Q_c | list[int] | 状態のステージコストがQ_cに設定されるhorizon番号 | -| mpc_parameter:compensation:acc_fb_decay | float | MPC外部のコンペンセータの観測された加速度値と予測加速度値の間の誤差を積分する際の減哀係数 | -| mpc_parameter:compensation:acc_fb_gain | float | 加速度補償のゲイン | -| mpc_parameter:compensation:max_error_acc | float | 最大加速度補償 (m/s^2) | -| mpc_parameter:compensation:steer_fb_decay | float | MPC外部のコンペンセータにおける観測ステアリング値と予測ステアリング値の間の誤差を積分する際の減衰係数 | -| mpc_parameter:compensation:steer_fb_gain | float | ステアリング補償のゲイン | -| mpc_parameter:compensation:max_error_steer | float | 最大ステアリング補償 (rad) | +| mpc_parameter:cost_parameters:Q_c | list[float] | 状態の次のtiming_Q_cに相当するhorizon内のコスト
リストの構成要素の対応はQの場合と同じ | +| mpc_parameter:cost_parameters:Q_f | list[float] | 状態の終端コスト
リストの構成要素の対応はQの場合と同じ | +| mpc_parameter:cost_parameters:R | list[float] | 長さ2のリスト、R[0]は加速度入力値の変化率のコストの重み、R[1]はステア入力値の変化率のコストの重み | +| mpc_parameter:mpc_setting:timing_Q_c | list[int] | 状態のステージコストがQ_cに設定されるhorizon番号 | +| mpc_parameter:compensation:acc_fb_decay | float | MPC外部のコンペンセータの観測された加速度値と予測加速度値の間の誤差を積分する際の減哀係数 | +| mpc_parameter:compensation:acc_fb_gain | float | 加速度補償のゲイン | +| mpc_parameter:compensation:max_error_acc | float | 最大加速度補償 (m/s^2) | +| mpc_parameter:compensation:steer_fb_decay | float | MPC外部のコンペンセータにおける観測ステアリング値と予測ステアリング値の間の誤差を積分する際の減衰係数 | +| mpc_parameter:compensation:steer_fb_gain | float | ステアリング補償のゲイン | +| mpc_parameter:compensation:max_error_steer | float | 最大ステアリング補償 (rad) | ### `trained_model_param.yaml` -| パラメータ | 型 | 説明 | -| ------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| trained_model_parameter:control_application:use_trained_model | bool | 学習済みモデルが制御に反映されるかどうかを示します。 | +| パラメータ | 型 | 説明 | +| ------------------------------------------------------------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| trained_model_parameter:control_application:use_trained_model | bool | 学習済みモデルが制御に反映されるかどうかを示します。 | | trained_model_parameter:control_application:use_trained_model_diff | bool | 学習済みモデルの微分値が制御に反映されるかどうかを示します。
use_trained_modelがTrueの場合にのみ意味があり、Falseの場合は、運動の方程式の微分には公称モデルが使用され、学習済みモデルは予測にのみ使用されます。 | -| trained_model_parameter:memory_for_training:use_memory_for_training | bool | 学習のためにLSTMを含むモデルを使用するかどうかを示します。 | -| trained_model_parameter:memory_for_training:use_memory_diff | bool | LSTMの前時点でのセル状態および隠れ状態に対する微分が制御に反映されるかどうかを示します。 | +| trained_model_parameter:memory_for_training:use_memory_for_training | bool | 学習のためにLSTMを含むモデルを使用するかどうかを示します。 | +| trained_model_parameter:memory_for_training:use_memory_diff | bool | LSTMの前時点でのセル状態および隠れ状態に対する微分が制御に反映されるかどうかを示します。 | ## 減速停止モードの解除要求 予測軌跡がターゲット軌跡から大きく逸脱した場合、システムは減速停止モードに入り、車両は停止します。 減速停止モードをキャンセルして車両を走行可能にするには、次のコマンドを実行します。 - ```bash ros2 topic pub /pympc_stop_mode_reset_request std_msgs/msg/String "data: ''" --once ``` @@ -480,4 +461,3 @@ ros2 topic pub /pympc_stop_mode_reset_request std_msgs/msg/String "data: ''" --o - ゴール付近の停止動作では、制御が別の簡単な制御則に切り替わります。結果として、停止動作はゴール付近を除いて機能しない場合があります。加速度マップが大幅にシフトしている場合も停止は困難です。 - `vehicle_type_1` のように大型バス向けに想定されているように、ダイナミクスが公称モデルから大きく逸脱している場合、うまく制御できない可能性があります。 - diff --git a/control/autoware_trajectory_follower_base/README.md b/control/autoware_trajectory_follower_base/README.md index 6508e2bc02868..c609e5b62be20 100644 --- a/control/autoware_trajectory_follower_base/README.md +++ b/control/autoware_trajectory_follower_base/README.md @@ -51,4 +51,3 @@ ## 関連する問題 - diff --git a/control/autoware_trajectory_follower_node/README.md b/control/autoware_trajectory_follower_node/README.md index 15a547193a229..98464b5f8df95 100644 --- a/control/autoware_trajectory_follower_node/README.md +++ b/control/autoware_trajectory_follower_node/README.md @@ -10,7 +10,6 @@ デフォルトでは、次の `Controller` クラスのコントローラインスタンスが使用されます。 - ```plantuml @startuml package autoware_trajectory_follower_base { @@ -93,7 +92,6 @@ InputData ..> Controller `Controller` クラスのプロセスフローは次のとおりです。 - ```cpp // 1. create input data const auto input_data = createInputData(*get_clock()); @@ -158,4 +156,3 @@ control_cmd_pub_->publish(out); [PlotJuggler](https://github.com/facontidavide/PlotJuggler) の設定ファイルが `config` フォルダに用意されており、読み込むとデバッグに役立つ情報を自動的に購読して視覚化できます。 さらに、予測された MPC 経路が `output/lateral/predicted_trajectory` トピックに発行され、Rviz で視覚化できます。 - diff --git a/control/autoware_vehicle_cmd_gate/README.md b/control/autoware_vehicle_cmd_gate/README.md index 8fbe47fefae1a..c9fc498e253eb 100644 --- a/control/autoware_vehicle_cmd_gate/README.md +++ b/control/autoware_vehicle_cmd_gate/README.md @@ -8,24 +8,24 @@ ### 入力 -| 名前 | タイプ | 説明 | -| --------------------------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------- | -| `~/input/steering` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリング状態 | -| `~/input/auto/control_cmd` | `autoware_control_msgs::msg::Control` | Planningモジュールからの横方向・縦方向速度コマンド | -| `~/input/auto/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | Planningモジュールからのターンインジケータコマンド | -| `~/input/auto/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | Planningモジュールからのハザードランプコマンド | -| `~/input/auto/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | Planningモジュールからのギアコマンド | -| `~/input/external/control_cmd` | `autoware_control_msgs::msg::Control` | 外部からの横方向・縦方向速度コマンド | -| `~/input/external/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | 外部からのターンインジケータコマンド | -| `~/input/external/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 外部からのハザードランプコマンド | -| `~/input/external/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 外部からのギアコマンド | -| `~/input/external_emergency_stop_heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | ハートビート | -| `~/input/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード (AUTO または EXTERNAL) | -| `~/input/emergency/control_cmd` | `autoware_control_msgs::msg::Control` | エマージェンシーハンドラからの横方向・縦方向速度コマンド | -| `~/input/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | エマージェンシーハンドラからのハザードランプコマンド | -| `~/input/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | エマージェンシーハンドラからのギアコマンド | -| `~/input/engage` | `autoware_vehicle_msgs::msg::Engage` | エンゲージ信号 | -| `~/input/operation_mode` | `autoware_adapi_v1_msgs::msg::OperationModeState` | Autowareの動作モード | +| 名前 | タイプ | 説明 | +| ------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------- | +| `~/input/steering` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリング状態 | +| `~/input/auto/control_cmd` | `autoware_control_msgs::msg::Control` | Planningモジュールからの横方向・縦方向速度コマンド | +| `~/input/auto/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | Planningモジュールからのターンインジケータコマンド | +| `~/input/auto/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | Planningモジュールからのハザードランプコマンド | +| `~/input/auto/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | Planningモジュールからのギアコマンド | +| `~/input/external/control_cmd` | `autoware_control_msgs::msg::Control` | 外部からの横方向・縦方向速度コマンド | +| `~/input/external/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | 外部からのターンインジケータコマンド | +| `~/input/external/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 外部からのハザードランプコマンド | +| `~/input/external/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 外部からのギアコマンド | +| `~/input/external_emergency_stop_heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | ハートビート | +| `~/input/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード (AUTO または EXTERNAL) | +| `~/input/emergency/control_cmd` | `autoware_control_msgs::msg::Control` | エマージェンシーハンドラからの横方向・縦方向速度コマンド | +| `~/input/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | エマージェンシーハンドラからのハザードランプコマンド | +| `~/input/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | エマージェンシーハンドラからのギアコマンド | +| `~/input/engage` | `autoware_vehicle_msgs::msg::Engage` | エンゲージ信号 | +| `~/input/operation_mode` | `autoware_adapi_v1_msgs::msg::OperationModeState` | Autowareの動作モード | ### 出力 @@ -107,44 +107,44 @@ Autowareは、オープンソースの自動運転ソフトウェアプラットフォームです。主要な機能として上記で説明したコンポーネントを提供します。詳細については、Autowareのドキュメントを参照してください。 -| 名前 | 型 | 説明 | -| -------------------------------------- | --------------------------------------------------- | -------------------------------------------------------- | -| `~/output/vehicle_cmd_emergency` | `tier4_vehicle_msgs::msg::VehicleEmergencyStamped` | コマンド内の緊急状態 | -| `~/output/command/control_cmd` | `autoware_control_msgs::msg::Control` | 車両への横方向および縦方向速度コマンド | -| `~/output/command/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | 車両へのターンインジケータコマンド | -| `~/output/command/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 車両へのハザードランプコマンド | -| `~/output/command/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 車両へのギアコマンド | -| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード(AUTOまたはEXTERNAL) | -| `~/output/engage` | `autoware_vehicle_msgs::msg::Engage` | エンゲージ信号 | -| `~/output/external_emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急信号 | -| `~/output/operation_mode` | `tier4_system_msgs::msg::OperationMode` | `vehicle_cmd_gate`の現在の動作モード | +| 名前 | 型 | 説明 | +| -------------------------------------- | --------------------------------------------------- | -------------------------------------- | +| `~/output/vehicle_cmd_emergency` | `tier4_vehicle_msgs::msg::VehicleEmergencyStamped` | コマンド内の緊急状態 | +| `~/output/command/control_cmd` | `autoware_control_msgs::msg::Control` | 車両への横方向および縦方向速度コマンド | +| `~/output/command/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | 車両へのターンインジケータコマンド | +| `~/output/command/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 車両へのハザードランプコマンド | +| `~/output/command/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 車両へのギアコマンド | +| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード(AUTOまたはEXTERNAL) | +| `~/output/engage` | `autoware_vehicle_msgs::msg::Engage` | エンゲージ信号 | +| `~/output/external_emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急信号 | +| `~/output/operation_mode` | `tier4_system_msgs::msg::OperationMode` | `vehicle_cmd_gate`の現在の動作モード | ## パラメータ -| パラメータ | 型 | 説明 | -| ------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `update_period` | double | 更新周期 | -| `use_emergency_handling` | bool | エマージェンシーハンドラ使用時はtrue | -| `check_external_emergency_heartbeat` | bool | エマージェンシーストップのハートビートを確認する場合true | -| `system_emergency_heartbeat_timeout` | double | システムエマージェンシーのタイムアウト | -| `external_emergency_stop_heartbeat_timeout` | double | 外部エマージェンシーのタイムアウト | -| `filter_activated_count_threshold` | int | フィルタアクティベーションのしきい値 | -| `filter_activated_velocity_threshold` | double | フィルタアクティベーションの速度しきい値 | -| `stop_hold_acceleration` | double | 車両が停止する場合の縦断加速度コマンド | -| `emergency_acceleration` | double | 車両がエマージェンシーで停止する場合の縦断加速度コマンド | -| `moderate_stop_service_acceleration` | double | 車両がモデレートストップサービスで停止する場合の縦断加速度コマンド | -| `nominal.vel_lim` | double | 縦断速度の制限(自律運転モードでアクティブ化) | -| `nominal.reference_speed_point` | | コントロールコマンドの制限の計算時に参照速度点として使用される速度点(自律運転モードでアクティブ化)。この配列のサイズは制限配列のサイズと同じにする必要があります。 | -| `nominal.lon_acc_lim` | | 縦断加速度の限界値の配列(自律運転モードでアクティブ化) | -| `nominal.lon_jerk_lim` | | 縦断ジャークの限界値の配列(自律運転モードでアクティブ化) | -| `nominal.lat_acc_lim` | | 横断加速度の限界値の配列(自律運転モードでアクティブ化) | -| `nominal.lat_jerk_lim` | | 横断ジャークの限界値の配列(自律運転モードでアクティブ化) | -| `on_transition.vel_lim` | double | 縦断速度の制限(トランジションモードでアクティブ化) | +| パラメータ | 型 | 説明 | +| ------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `update_period` | double | 更新周期 | +| `use_emergency_handling` | bool | エマージェンシーハンドラ使用時はtrue | +| `check_external_emergency_heartbeat` | bool | エマージェンシーストップのハートビートを確認する場合true | +| `system_emergency_heartbeat_timeout` | double | システムエマージェンシーのタイムアウト | +| `external_emergency_stop_heartbeat_timeout` | double | 外部エマージェンシーのタイムアウト | +| `filter_activated_count_threshold` | int | フィルタアクティベーションのしきい値 | +| `filter_activated_velocity_threshold` | double | フィルタアクティベーションの速度しきい値 | +| `stop_hold_acceleration` | double | 車両が停止する場合の縦断加速度コマンド | +| `emergency_acceleration` | double | 車両がエマージェンシーで停止する場合の縦断加速度コマンド | +| `moderate_stop_service_acceleration` | double | 車両がモデレートストップサービスで停止する場合の縦断加速度コマンド | +| `nominal.vel_lim` | double | 縦断速度の制限(自律運転モードでアクティブ化) | +| `nominal.reference_speed_point` | | コントロールコマンドの制限の計算時に参照速度点として使用される速度点(自律運転モードでアクティブ化)。この配列のサイズは制限配列のサイズと同じにする必要があります。 | +| `nominal.lon_acc_lim` | | 縦断加速度の限界値の配列(自律運転モードでアクティブ化) | +| `nominal.lon_jerk_lim` | | 縦断ジャークの限界値の配列(自律運転モードでアクティブ化) | +| `nominal.lat_acc_lim` | | 横断加速度の限界値の配列(自律運転モードでアクティブ化) | +| `nominal.lat_jerk_lim` | | 横断ジャークの限界値の配列(自律運転モードでアクティブ化) | +| `on_transition.vel_lim` | double | 縦断速度の制限(トランジションモードでアクティブ化) | | `on_transition.reference_speed_point` | | コントロールコマンドの制限の計算時に参照速度点として使用される速度点(トランジションモードでアクティブ化)。この配列のサイズは制限配列のサイズと同じにする必要があります。 | -| `on_transition.lon_acc_lim` | | 縦断加速度の限界値の配列(トランジションモードでアクティブ化) | -| `on_transition.lon_jerk_lim` | | 縦断ジャークの限界値の配列(トランジションモードでアクティブ化) | -| `on_transition.lat_acc_lim` | | 横断加速度の限界値の配列(トランジションモードでアクティブ化) | -| `on_transition.lat_jerk_lim` | | 横断ジャークの限界値の配列(トランジションモードでアクティブ化) | +| `on_transition.lon_acc_lim` | | 縦断加速度の限界値の配列(トランジションモードでアクティブ化) | +| `on_transition.lon_jerk_lim` | | 縦断ジャークの限界値の配列(トランジションモードでアクティブ化) | +| `on_transition.lat_acc_lim` | | 横断加速度の限界値の配列(トランジションモードでアクティブ化) | +| `on_transition.lat_jerk_lim` | | 横断ジャークの限界値の配列(トランジションモードでアクティブ化) | ## フィルタ機能 @@ -171,4 +171,3 @@ Autowareは、オープンソースの自動運転ソフトウェアプラット 出力コマンドのトピック: `turn_indicators_cmd`, `hazard_light` および `gear_cmd` は `gate_mode` に基づいて選択されます。 ただし、コマンドの継続性を確保するために、モードが変更された場合でも、新しい入力コマンドのトピックが届くまでこれらのコマンドは変更されません。 - diff --git a/control/control_performance_analysis/README.md b/control/control_performance_analysis/README.md index d73209fcdeb90..11a83d9da48ed 100644 --- a/control/control_performance_analysis/README.md +++ b/control/control_performance_analysis/README.md @@ -25,82 +25,81 @@ ### 入力トピック -| 名前 | タイプ | 説明 | -| ------------------------------------ | --------------------------------------- | --------------------------------------- | -| `/planning/scenario_planning/trajectory` | `autoware_planning_msgs::msg::Trajectory` | Planningモジュールからの出力軌道 | -| `/control/command/control_cmd` | `autoware_control_msgs::msg::Control` | Controlモジュールからの出力制御コマンド | -| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | 車両からのステアリング情報 | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | オドメトリからツイストを使用 | -| `/tf` | `tf2_msgs::msg::TFMessage` | TFから自車位置を抽出 | +| 名前 | タイプ | 説明 | +| ---------------------------------------- | -------------------------------------------- | --------------------------------------- | +| `/planning/scenario_planning/trajectory` | `autoware_planning_msgs::msg::Trajectory` | Planningモジュールからの出力軌道 | +| `/control/command/control_cmd` | `autoware_control_msgs::msg::Control` | Controlモジュールからの出力制御コマンド | +| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | 車両からのステアリング情報 | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | オドメトリからツイストを使用 | +| `/tf` | `tf2_msgs::msg::TFMessage` | TFから自車位置を抽出 | ## 出力トピック **AutowareのAPIバージョン:** 1.16.0-rc0 -| トピック | データタイプ | 説明 | -|---|---|---| -| `/vehicle/localization/current_pose` | `geometry_msgs/PoseStamped` | 自車位置の現在の推定値。このトピックにパブリッシュされるデータは、誤差を軽減するために、センサーデータから後処理やフィルタリングを経て得られたものです。 | -| `/trajectory/planning/lane_waypoints` | `autoware_planning_msgs/Lane` | 計画されたパス内のウェイポイントを格納します。| -| `/trajectory/planning/lattice_waypoints` | `autoware_planning_msgs/Lattice` | 速度と横方向位置(逸脱量)の組み合わせに対する、計画されたパスのウェイポイントを格納します。| -| `/trajectory/planning/optimized_trajectory` | `autoware_planning_msgs/OptimizedTrajectory` | 経路最適化モジュールによって最適化された経路のウェイポイントを格納します。| -| `/planning/planning_flag` | `autoware_planning_msgs/PlanningFlag` | 計画状態に関するフラグを格納します。0:停止、1:フォロー、2:計画中です。| -| `/planning/velocity_plan` | `autoware_planning_msgs/VelocityPlan` | 速度計画モジュールによって計算された車速と加速度の値を格納します。| -| `/control_command` | `autoware_msgs/ControlCommandStamped` | 制御モジュールへ送信される、モーターとステアリングの制御コマンドを格納します。| -| `/localization/odometry` | `nav_msgs/Odometry` | オドメトリ情報。| -| `/localization/estimation` | `geometry_msgs/PoseWithCovarianceStamped` | オドメトリ推定値。| -| `/velodyne_points` | `sensor_msgs/PointCloud2` | Velodyneセンサーからの点群。| -| `/image/front_camera/image_raw` | `sensor_msgs/Image` | フロントカメラからの生の画像データ。| -| `/image/rear_camera/image_raw` | `sensor_msgs/Image` | リアカメラからの生の画像データ。| - -| 名称 | タイプ | 説明 | +| トピック | データタイプ | 説明 | +| ------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `/vehicle/localization/current_pose` | `geometry_msgs/PoseStamped` | 自車位置の現在の推定値。このトピックにパブリッシュされるデータは、誤差を軽減するために、センサーデータから後処理やフィルタリングを経て得られたものです。 | +| `/trajectory/planning/lane_waypoints` | `autoware_planning_msgs/Lane` | 計画されたパス内のウェイポイントを格納します。 | +| `/trajectory/planning/lattice_waypoints` | `autoware_planning_msgs/Lattice` | 速度と横方向位置(逸脱量)の組み合わせに対する、計画されたパスのウェイポイントを格納します。 | +| `/trajectory/planning/optimized_trajectory` | `autoware_planning_msgs/OptimizedTrajectory` | 経路最適化モジュールによって最適化された経路のウェイポイントを格納します。 | +| `/planning/planning_flag` | `autoware_planning_msgs/PlanningFlag` | 計画状態に関するフラグを格納します。0:停止、1:フォロー、2:計画中です。 | +| `/planning/velocity_plan` | `autoware_planning_msgs/VelocityPlan` | 速度計画モジュールによって計算された車速と加速度の値を格納します。 | +| `/control_command` | `autoware_msgs/ControlCommandStamped` | 制御モジュールへ送信される、モーターとステアリングの制御コマンドを格納します。 | +| `/localization/odometry` | `nav_msgs/Odometry` | オドメトリ情報。 | +| `/localization/estimation` | `geometry_msgs/PoseWithCovarianceStamped` | オドメトリ推定値。 | +| `/velodyne_points` | `sensor_msgs/PointCloud2` | Velodyneセンサーからの点群。 | +| `/image/front_camera/image_raw` | `sensor_msgs/Image` | フロントカメラからの生の画像データ。 | +| `/image/rear_camera/image_raw` | `sensor_msgs/Image` | リアカメラからの生の画像データ。 | + +| 名称 | タイプ | 説明 | | --------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------- | -| `/control_performance/performance_vars` | control_performance_analysis::msg::ErrorStamped | パフォーマンス解析の結果 | +| `/control_performance/performance_vars` | control_performance_analysis::msg::ErrorStamped | パフォーマンス解析の結果 | | `/control_performance/driving_status` | control_performance_analysis::msg::DrivingMonitorStamped | 走行ステータス(加速度、ジャークなど)のモニタリング | ### 出力 #### control_performance_analysis::msg::DrivingMonitorStamped -| 名称 | タイプ | 説明 | -| ---------------------------- | ----- | ---------------------------------------------------------- | -| `longitudinal_acceleration` | float | [m/s^2] | -| `longitudinal_jerk` | float | [m/s^3] | -| `lateral_acceleration` | float | [m/s^2] | -| `lateral_jerk` | float | [m/s^3] | -| `desired_steering_angle` | float | [rad] | -| `controller_processing_time` | float | 2つの制御コマンドメッセージ間のタイムスタンプ [ms] | +| 名称 | タイプ | 説明 | +| ---------------------------- | ------ | -------------------------------------------------- | +| `longitudinal_acceleration` | float | [m/s^2] | +| `longitudinal_jerk` | float | [m/s^3] | +| `lateral_acceleration` | float | [m/s^2] | +| `lateral_jerk` | float | [m/s^3] | +| `desired_steering_angle` | float | [rad] | +| `controller_processing_time` | float | 2つの制御コマンドメッセージ間のタイムスタンプ [ms] | #### control_performance_analysis::msg::ErrorStamped - -| 名称 | タイプ | 説明 | -| ------------------------------------------ | ----- | ----------------------------------------------------------------------------------------------------------------- | -| `lateral_error` | float | [m] | -| `lateral_error_velocity` | float | [m/s] | -| `lateral_error_acceleration` | float | [m/s^2] | -| `longitudinal_error` | float | [m] | -| `longitudinal_error_velocity` | float | [m/s] | -| `longitudinal_error_acceleration` | float | [m/s^2] | -| `heading_error` | float | [rad] | -| `heading_error_velocity` | float | [rad/s] | -| `control_effort_energy` | float | [u * R * u^T] | -| `error_energy` | float | lateral_error^2 + heading_error^2 | -| `value_approximation` | float | V = xPx' ; 自車位置に基づく状態空間のパフォーマンス指数を近似した値 | -| `curvature_estimate` | float | [1/m] | -| `curvature_estimate_pp` | float | [1/m] | -| `vehicle_velocity_error` | float | [m/s] | -| `tracking_curvature_discontinuity_ability` | float | 曲率変化を追従する能力を測定 [`abs(delta(curvature)) / (1 + abs(delta(lateral_error))`] | +| 名称 | タイプ | 説明 | +| ------------------------------------------ | ------ | --------------------------------------------------------------------------------------- | +| `lateral_error` | float | [m] | +| `lateral_error_velocity` | float | [m/s] | +| `lateral_error_acceleration` | float | [m/s^2] | +| `longitudinal_error` | float | [m] | +| `longitudinal_error_velocity` | float | [m/s] | +| `longitudinal_error_acceleration` | float | [m/s^2] | +| `heading_error` | float | [rad] | +| `heading_error_velocity` | float | [rad/s] | +| `control_effort_energy` | float | [u * R * u^T] | +| `error_energy` | float | lateral_error^2 + heading_error^2 | +| `value_approximation` | float | V = xPx' ; 自車位置に基づく状態空間のパフォーマンス指数を近似した値 | +| `curvature_estimate` | float | [1/m] | +| `curvature_estimate_pp` | float | [1/m] | +| `vehicle_velocity_error` | float | [m/s] | +| `tracking_curvature_discontinuity_ability` | float | 曲率変化を追従する能力を測定 [`abs(delta(curvature)) / (1 + abs(delta(lateral_error))`] | ## パラメータ -| 名称 | 型 | 説明 | -| --------------------------------------- | ---------------- | --------------------------------------------------------------------- | -| `curvature_interval_length` | double | current curvature 推定に使用 | -| `prevent_zero_division_value` | double | ゼロ除算を回避するための値(デフォルトは `0.001`) | -| `odom_interval` | unsigned integer | odom メッセージ間のインターバル(より滑らかな曲線には大きくする) | -| `acceptable_max_distance_to_waypoint` | double | 軌道ポイントと車両の最大距離 [m] | -| `acceptable_max_yaw_difference_rad` | double | 軌道ポイントと車両の最大ヨー角差 [rad] | -| `low_pass_filter_gain` | double | ローパスフィルタのゲイン | +| 名称 | 型 | 説明 | +| ------------------------------------- | ---------------- | ----------------------------------------------------------------- | +| `curvature_interval_length` | double | current curvature 推定に使用 | +| `prevent_zero_division_value` | double | ゼロ除算を回避するための値(デフォルトは `0.001`) | +| `odom_interval` | unsigned integer | odom メッセージ間のインターバル(より滑らかな曲線には大きくする) | +| `acceptable_max_distance_to_waypoint` | double | 軌道ポイントと車両の最大距離 [m] | +| `acceptable_max_yaw_difference_rad` | double | 軌道ポイントと車両の最大ヨー角差 [rad] | +| `low_pass_filter_gain` | double | ローパスフィルタのゲイン | ## 操作方法 @@ -119,4 +118,3 @@ ## 今後の改善 - カットオフ周波数、微分方程式、離散状態空間の更新を使用して LPF を実装します。 - diff --git a/control/predicted_path_checker/README.md b/control/predicted_path_checker/README.md index f76127047e8c4..cc2886a4755d9 100644 --- a/control/predicted_path_checker/README.md +++ b/control/predicted_path_checker/README.md @@ -34,14 +34,14 @@ Predicted Path Checkerパッケージは、自律車両が制御モジュール ## 入力 -| 名 | 型 | 説明 | -| ------------------------------------- | ------------------------------------------------ | --------------------------------------------------- | -| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | リファレンストライジェクチャリ | -| `~/input/predicted_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測されたトランスジェクチャリ | -| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObject` | 環境における動的オブジェクト | +| 名 | 型 | 説明 | +| ------------------------------------- | ------------------------------------------------ | ---------------------------------------------- | +| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | リファレンストライジェクチャリ | +| `~/input/predicted_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測されたトランスジェクチャリ | +| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObject` | 環境における動的オブジェクト | | `~/input/odometry` | `nav_msgs::msg::Odometry` | 自車の速度を取得するためのオドメトリメッセージ | -| `~/input/current_accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 現在の加速度 | -| `/control/vehicle_cmd_gate/is_paused` | `tier4_control_msgs::msg::IsPaused` | 車両の現在の停止状態 | +| `~/input/current_accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 現在の加速度 | +| `/control/vehicle_cmd_gate/is_paused` | `tier4_control_msgs::msg::IsPaused` | 車両の現在の停止状態 | ## 出力 @@ -63,39 +63,38 @@ Predicted Path Checkerパッケージは、自律車両が制御モジュール - `post resampling`における経路可視化の改善 - 自車位置のより正確な表現 -| 名称 | 型 | 説明 | -| ------------------------------------ | ---------------------------------------- | ---------------------------------------- | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | -| `~/debug/virtual_wall` | `visualization_msgs::msg::MarkerArray` | 可視化用の仮想の壁のマーカー | -| `/control/vehicle_cmd_gate/set_pause` | `tier4_control_msgs::srv::SetPause` | 車両を停止させるための停止サービス | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticStatus` | 車両の診断状況 | +| 名称 | 型 | 説明 | +| ------------------------------------- | ---------------------------------------- | ---------------------------------- | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | +| `~/debug/virtual_wall` | `visualization_msgs::msg::MarkerArray` | 可視化用の仮想の壁のマーカー | +| `/control/vehicle_cmd_gate/set_pause` | `tier4_control_msgs::srv::SetPause` | 車両を停止させるための停止サービス | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticStatus` | 車両の診断状況 | ## パラメータ ### ノードパラメータ -| 名称 | 型 | 説明 | デフォルト値 | -| :---------------------------------- | :------- | :-------------------------------------------------------------------- | :------------ | -| `update_rate` | `倍精度浮動小数点` | 更新レート [Hz] | 10.0 | -| `delay_time` | `倍精度浮動小数点` | 緊急対応で考慮される時間遅延 [s] | 0.17 | -| `max_deceleration` | `倍精度浮動小数点` | 自動運転車両が停止するための最大減速度 [m/s^2] | 1.5 | -| `resample_interval` | `倍精度浮動小数点` | 軌道の再サンプリング間隔 [m] | 0.5 | -| `stop_margin` | `倍精度浮動小数点` | 停止マージン [m] | 0.5 | -| `ego_nearest_dist_threshold` | `倍精度浮動小数点` | 自動運転車両の最近接距離閾値 [m] | 3.0 | -| `ego_nearest_yaw_threshold` | `倍精度浮動小数点` | 自動運転車両の最近接ヨー角閾値 [rad] | 1.046 | -| `min_trajectory_check_length` | `倍精度浮動小数点` | メートル単位での最短軌道チェックの長さ [m] | 1.5 | -| `trajectory_check_time` | `倍精度浮動小数点` | 軌道チェック時間 [s] | 3.0 | -| `distinct_point_distance_threshold` | `倍精度浮動小数点` | 異なる点の距離閾値 [m] | 0.3 | -| `distinct_point_yaw_threshold` | `倍精度浮動小数点` | 異なる点のヨー角閾値 [deg] | 5.0 | -| `filtering_distance_threshold` | `倍精度浮動小数点` | 距離がこの値より大きい場合、オブジェクトを無視します [m] | 1.5 | -| `use_object_prediction` | `ブーリアン` | Trueの場合、ノードはデルタ時間に関連してオブジェクトの自車位置を予測します [-] | true | +| 名称 | 型 | 説明 | デフォルト値 | +| :---------------------------------- | :----------------- | :----------------------------------------------------------------------------- | :----------- | +| `update_rate` | `倍精度浮動小数点` | 更新レート [Hz] | 10.0 | +| `delay_time` | `倍精度浮動小数点` | 緊急対応で考慮される時間遅延 [s] | 0.17 | +| `max_deceleration` | `倍精度浮動小数点` | 自動運転車両が停止するための最大減速度 [m/s^2] | 1.5 | +| `resample_interval` | `倍精度浮動小数点` | 軌道の再サンプリング間隔 [m] | 0.5 | +| `stop_margin` | `倍精度浮動小数点` | 停止マージン [m] | 0.5 | +| `ego_nearest_dist_threshold` | `倍精度浮動小数点` | 自動運転車両の最近接距離閾値 [m] | 3.0 | +| `ego_nearest_yaw_threshold` | `倍精度浮動小数点` | 自動運転車両の最近接ヨー角閾値 [rad] | 1.046 | +| `min_trajectory_check_length` | `倍精度浮動小数点` | メートル単位での最短軌道チェックの長さ [m] | 1.5 | +| `trajectory_check_time` | `倍精度浮動小数点` | 軌道チェック時間 [s] | 3.0 | +| `distinct_point_distance_threshold` | `倍精度浮動小数点` | 異なる点の距離閾値 [m] | 0.3 | +| `distinct_point_yaw_threshold` | `倍精度浮動小数点` | 異なる点のヨー角閾値 [deg] | 5.0 | +| `filtering_distance_threshold` | `倍精度浮動小数点` | 距離がこの値より大きい場合、オブジェクトを無視します [m] | 1.5 | +| `use_object_prediction` | `ブーリアン` | Trueの場合、ノードはデルタ時間に関連してオブジェクトの自車位置を予測します [-] | true | ### 衝突チェッカーパラメータ -| 名称 | 型 | 説明 | デフォルト値 | -| :--------------------------------- | :------- | :---------------------------------------------------------------- | :------------ | -| `width_margin` | `double` | 衝突検査における幅マージン [Hz] | 0.2 | -| `chattering_threshold` | `double` | 衝突検出におけるチャタリングしきい値 [s] | 0.2 | -| `z_axis_filtering_buffer` | `double` | Z軸フィルタリングバッファ [m] | 0.3 | -| `enable_z_axis_obstacle_filtering` | `bool` | Z軸障害物フィルタリングが有効かどうかを示すフラグ | false | - +| 名称 | 型 | 説明 | デフォルト値 | +| :--------------------------------- | :------- | :------------------------------------------------ | :----------- | +| `width_margin` | `double` | 衝突検査における幅マージン [Hz] | 0.2 | +| `chattering_threshold` | `double` | 衝突検出におけるチャタリングしきい値 [s] | 0.2 | +| `z_axis_filtering_buffer` | `double` | Z軸フィルタリングバッファ [m] | 0.3 | +| `enable_z_axis_obstacle_filtering` | `bool` | Z軸障害物フィルタリングが有効かどうかを示すフラグ | false | diff --git a/evaluator/autoware_control_evaluator/README.md b/evaluator/autoware_control_evaluator/README.md index 6e0d0dd48c3f9..905b88064d76d 100644 --- a/evaluator/autoware_control_evaluator/README.md +++ b/evaluator/autoware_control_evaluator/README.md @@ -15,4 +15,3 @@ 制御評価器モジュールは、自車の運動学的および位置に関する情報を絶えず公開します。経路弧補正座標の縦方向 `s` と横方向 `t` を使用して、現在の自車レーン ID を公開します。また、現在の自車の速度、加速度、ジャークを診断メッセージで公開します。 この情報は、他のノードが ROSbag を使用した自動評価を実行するために使用できます。自車位置と運動学的情報を評価された制御モジュールの出力と照合することで、ROSbag 再現の特定の興味深いポイントにおいて評価された制御モジュールが適切に対応したかどうかを判断できます。 - diff --git a/evaluator/autoware_evaluator_utils/README.md b/evaluator/autoware_evaluator_utils/README.md index 16e202b58bd0e..b13c2568177d3 100644 --- a/evaluator/autoware_evaluator_utils/README.md +++ b/evaluator/autoware_evaluator_utils/README.md @@ -3,4 +3,3 @@ ## 目的 このパッケージは、他のエバリュエータパッケージ向けのユーティリティ関数を提供します。 - diff --git a/evaluator/autoware_planning_evaluator/README.md b/evaluator/autoware_planning_evaluator/README.md index 5dc7cc7456071..886a4d66bea09 100644 --- a/evaluator/autoware_planning_evaluator/README.md +++ b/evaluator/autoware_planning_evaluator/README.md @@ -26,7 +26,6 @@ `MetricsCalculator` は、以下の関数を呼び出すことでメトリクス統計を計算します。 - ```C++ Stat MetricsCalculator::calculate(const Metric metric, const Trajectory & traj) const; ``` @@ -35,7 +34,7 @@ Stat MetricsCalculator::calculate(const Metric metric, const Trajectory - `metrics/metric.hpp`: `M` を `enum`、文字列変換マップ、説明マップに追加します。 - `metrics_calculator.cpp`: `calculate` 関数の `switch/case` ステートメントに `M` を追加します。 -- `selected_metrics` パラメータに `M` を追加します。 +- `selected_metrics` パラメータに `M` を追加します。 ## 入出力 @@ -43,17 +42,17 @@ Stat MetricsCalculator::calculate(const Metric metric, const Trajectory **自動運転ソフトウェア ドキュメント(日本語訳)** -| 名前 | 型 | 説明 | -|---|---|---| -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 評価するメインのPlanning | -| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 逸脱量の測定に使用する基準Planning | -| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 障害物 | +| 名前 | 型 | 説明 | +| ------------------------------ | ------------------------------------------------- | ---------------------------------- | +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 評価するメインのPlanning | +| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 逸脱量の測定に使用する基準Planning | +| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 障害物 | ### 出力 各メトリックは、メトリック名にちなんだトピックで公開されます。 -| 名称 | 種別 | 説明 | +| 名称 | 種別 | 説明 | | ----------- | --------------------------------------- | ----------------------------------------------------- | | `~/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | メトリックごとのDiagnosticStatusを持つDiagnosticArray | @@ -77,4 +76,3 @@ Stat MetricsCalculator::calculate(const Metric metric, const Trajectory - `motion_evaluator_node`。 - エゴの実際の動作から時間の経過に伴ってトラジェクトリを構築するノード。 - 現在実装されているのは概念実証のみです。 - diff --git a/evaluator/diagnostic_converter/README.md b/evaluator/diagnostic_converter/README.md index 8b0053213e3b8..1b14bd879d80c 100644 --- a/evaluator/diagnostic_converter/README.md +++ b/evaluator/diagnostic_converter/README.md @@ -39,8 +39,8 @@ ## パラメータ -| 名前 | 型 | 説明 | -| :------------------ | :--------------- | :------------------------------------------------------------ | +| 名前 | 型 | 説明 | +| :------------------ | :------------- | :-------------------------------------------------------- | | `diagnostic_topics` | 文字列のリスト | UserDefinedValueに変換するDiagnosticArrayトピックのリスト | ## 想定 / 既知の制限 @@ -48,4 +48,3 @@ `DiagnosticStatus` の `KeyValue` オブジェクト内の値は、`double` 型であると想定されています。 ## 将来の拡張 / 未実装部分 - diff --git a/evaluator/kinematic_evaluator/README.md b/evaluator/kinematic_evaluator/README.md index e99a7ab2cbc49..f02f6be2155a7 100644 --- a/evaluator/kinematic_evaluator/README.md +++ b/evaluator/kinematic_evaluator/README.md @@ -5,4 +5,3 @@ TBD ## パラメータ {{json_to_markdown("evaluator/kinematic_evaluator/schema/kinematic_evaluator.schema.json")}} - diff --git a/evaluator/localization_evaluator/README.md b/evaluator/localization_evaluator/README.md index ec00e67ac6a11..50d26005c87dd 100644 --- a/evaluator/localization_evaluator/README.md +++ b/evaluator/localization_evaluator/README.md @@ -5,4 +5,3 @@ ## パラメーター {{ json_to_markdown("evaluator/localization_evaluator/schema/localization_evaluator.schema.json", "ja") }} - diff --git a/evaluator/perception_online_evaluator/README.md b/evaluator/perception_online_evaluator/README.md index 2e4372d1c0b9a..30481bd4102e9 100644 --- a/evaluator/perception_online_evaluator/README.md +++ b/evaluator/perception_online_evaluator/README.md @@ -23,8 +23,7 @@ 過去のオブジェクトの予測経路と実際の移動経路を比較して、**移動中のオブジェクト**の逸脱量を算出します。各オブジェクトについて、予測経路のポイントと実際の経路の対応するポイント間の平均距離を、指定された時間ステップまで計算します。言い換えると、平均変位誤差(ADE)を計算します。評価対象のオブジェクトは $T_N$ 秒前のオブジェクトで、$T_N$ は予測時間幅 $[T_1, T_2, ..., T_N]$ の最大値です。 -> [!NOTE] -> $T_N$ 秒前のオブジェクトは、すべてのメトリクスで対象オブジェクトです。これは、メトリクス全体で対象オブジェクトの時間を統一するためです。 +> [!NOTE] > $T_N$ 秒前のオブジェクトは、すべてのメトリクスで対象オブジェクトです。これは、メトリクス全体で対象オブジェクトの時間を統一するためです。 ![path_deviation_each_object](./images/path_deviation_each_object.drawio.svg) @@ -55,9 +54,10 @@ ADE_{min} = min(ADE_j) \end{align} $$ -Var_{max} = max(Var_j) \\ -Var_{min} = min(Var_j) +Var*{max} = max(Var_j) \\ +Var*{min} = min(Var_j) \end{align} + $$ - $n_{objects}$: オブジェクト数 @@ -107,10 +107,13 @@ $$ 指定された検出範囲内の各クラスの一意のオブジェクトの数をカウントします。全オブジェクトカウントは次のように計算されます。 + $$ + \begin{align} -\text{全オブジェクトカウント (クラス、範囲)} & = \left| \bigcup_{t=0}^{T_{\text{now}}} \{ \text{uuid} \mid \text{class}(t, \text{uuid}) = C \wedge \text{position}(t, \text{uuid}) \in R \} \right| +\text{全オブジェクトカウント (クラス、範囲)} & = \left| \bigcup*{t=0}^{T*{\text{now}}} \{ \text{uuid} \mid \text{class}(t, \text{uuid}) = C \wedge \text{position}(t, \text{uuid}) \in R \} \right| \end{align} + $$ ここで、 @@ -124,10 +127,13 @@ $$ 指定された検出範囲内の各クラスのオブジェクトの平均数をカウントします。この指標は、uuid を考慮せずに 1 フレームで検出されたオブジェクトの数を測定します。平均オブジェクト数は次のように計算されます。 + $$ + \begin{align} -\text{平均オブジェクト数(クラス、範囲)} = \frac{1}{N} \sum_{t=0}^{T_{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| +\text{平均オブジェクト数(クラス、範囲)} = \frac{1}{N} \sum*{t=0}^{T*{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| \end{align} + $$ ここで、 @@ -139,10 +145,13 @@ $$ 最後の `objects_count_window_seconds` において、指定された検出範囲内の各クラスのオブジェクトの平均数をカウントします。この指標は、uuid を考慮せずに 1 フレームで検出されたオブジェクトの数を測定します。区間オブジェクト数は次のように計算されます。 + $$ + \begin{align} -\text{区間オブジェクト数(クラス、範囲)} = \frac{1}{W} \sum_{t=T_{\text{now}} - T_W}^{T_{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| +\text{区間オブジェクト数(クラス、範囲)} = \frac{1}{W} \sum*{t=T*{\text{now}} - T*W}^{T*{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| \end{align} + $$ ここで、 @@ -190,4 +199,4 @@ $$ - オブジェクトの分割に対するメトリクス - 通常は静止しているが移動するオブジェクトに対するメトリクス - 消滅したオブジェクトのメトリクス - +$$ diff --git a/launch/tier4_autoware_api_launch/README.md b/launch/tier4_autoware_api_launch/README.md index 8200943511c40..6fbf6ae17985b 100644 --- a/launch/tier4_autoware_api_launch/README.md +++ b/launch/tier4_autoware_api_launch/README.md @@ -12,7 +12,6 @@ `autoware_api.launch.xml`を使用するには、以下のように`*.launch.xml`に含めることができます。 - ```xml ``` @@ -20,4 +19,3 @@ ## 注意 処理負荷を軽減するため、ROS 2 の [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) 機能(ROS 1 の Nodelet に類似)を使用しています。 - diff --git a/launch/tier4_control_launch/README.md b/launch/tier4_control_launch/README.md index 74cdde685fd7a..0607b57368e00 100644 --- a/launch/tier4_control_launch/README.md +++ b/launch/tier4_control_launch/README.md @@ -14,7 +14,6 @@ `PACKAGE_param_path` としてパラメータパスを設定する必要があります。設定するパラメータパスのリストは `planning.launch.xml` の先頭に記載されています。 - ```xml @@ -29,4 +28,3 @@ ## 注釈 処理負荷を削減するため、ROS 2における[Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html)の機能(ROS 1におけるNodeletに類似)を使用します。 - diff --git a/launch/tier4_localization_launch/README.md b/launch/tier4_localization_launch/README.md index a864823d36ee6..21a78f2687ab0 100644 --- a/launch/tier4_localization_launch/README.md +++ b/launch/tier4_localization_launch/README.md @@ -16,7 +16,6 @@ さらに、`PACKAGE_param_path`としてパラメータのパスを提供する必要があります。提供する必要のあるパラメータパスのリストは、`localization.launch.xml`の先頭に記載されています。 - ```xml @@ -29,4 +28,3 @@ ... ``` - diff --git a/launch/tier4_map_launch/README.md b/launch/tier4_map_launch/README.md index 872e5f5f050e3..310cac8182db8 100644 --- a/launch/tier4_map_launch/README.md +++ b/launch/tier4_map_launch/README.md @@ -14,7 +14,6 @@ `PACKAGE_param_path` としてパラメータパスを提供する必要があることに注意してください。提供する必要があるパラメータパスのリストは、`map.launch.xml` の最上部に記載されています。 - ```xml @@ -34,4 +33,3 @@ ## 注釈 処理負荷を軽減するために、ROS 2 の [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) 機能を使用しています(ROS 1 の Nodelet と同様)。 - diff --git a/launch/tier4_perception_launch/README.md b/launch/tier4_perception_launch/README.md index a2826996bbc9c..5dc43c36e2a68 100644 --- a/launch/tier4_perception_launch/README.md +++ b/launch/tier4_perception_launch/README.md @@ -14,7 +14,6 @@ パラメータパスを `PACKAGE_param_path` として指定する必要があることに注意してください。指定する必要のあるパラメータパスのリストは、`perception.launch.xml` の先頭部に記載されています。 - ```xml @@ -26,4 +25,3 @@ ... ``` - diff --git a/launch/tier4_planning_launch/README.md b/launch/tier4_planning_launch/README.md index 0e709db504f44..2103820ceef38 100644 --- a/launch/tier4_planning_launch/README.md +++ b/launch/tier4_planning_launch/README.md @@ -12,7 +12,6 @@ パラメータのパスを`PACKAGE_param_path`として指定する必要があることに注意してください。指定する必要のあるパラメータのパスは`planning.launch.xml`の先頭で記載されています。 - ```xml @@ -21,4 +20,3 @@ ... ``` - diff --git a/launch/tier4_sensing_launch/README.md b/launch/tier4_sensing_launch/README.md index 91b6091b7274a..92c142578a7d0 100644 --- a/launch/tier4_sensing_launch/README.md +++ b/launch/tier4_sensing_launch/README.md @@ -12,7 +12,6 @@ `sensing.launch.xml` を使用するには、`*.launch.xml` に以下のように含めることができます。 - ```xml @@ -26,7 +25,6 @@ このパッケージは、`launch`で指定されたセンサーモデルのセンサー設定を見つけます。 - ```bash launch/ ├── aip_x1 # Sensor model name @@ -44,8 +42,6 @@ launch/ 例) - ```xml ``` - diff --git a/launch/tier4_simulator_launch/README.md b/launch/tier4_simulator_launch/README.md index 32b6385163e68..513c20ff0e9cb 100644 --- a/launch/tier4_simulator_launch/README.md +++ b/launch/tier4_simulator_launch/README.md @@ -10,7 +10,6 @@ ## 使用方法 - ```xml @@ -18,5 +17,4 @@ ``` -simple\_planning\_simulator で使用されるシミュレータ モデルは、パッケージ "`VEHICLE\_MODEL`\_description" の "config/simulator\_model.param.yaml" からロードされています。 - +simple_planning_simulator で使用されるシミュレータ モデルは、パッケージ "`VEHICLE\_MODEL`\_description" の "config/simulator_model.param.yaml" からロードされています。 diff --git a/launch/tier4_system_launch/README.md b/launch/tier4_system_launch/README.md index f162936079072..82f7e546663d0 100644 --- a/launch/tier4_system_launch/README.md +++ b/launch/tier4_system_launch/README.md @@ -12,7 +12,6 @@ パラメータパスを `PACKAGE_param_path` として指定する必要があります。必要となるパラメータパスのリストは `system.launch.xml` の先頭に記述されています。 - ```xml @@ -24,4 +23,3 @@ ... ``` - diff --git a/launch/tier4_vehicle_launch/README.md b/launch/tier4_vehicle_launch/README.md index 9453c5118a7da..66248633ede64 100644 --- a/launch/tier4_vehicle_launch/README.md +++ b/launch/tier4_vehicle_launch/README.md @@ -12,7 +12,6 @@ `*.launch.xml` に次のように含めることで、`vehicle.launch.xml` を使用できます。 - ```xml @@ -29,12 +28,10 @@ 例) - ```xml ``` - ```xml ``` @@ -43,16 +40,15 @@ ### 引数 -| 名称 | タイプ | 説明 | デフォルト | -| ------------- | ------ | ------------------ | ------- | -| sensor_model | 文字列 | センサーモデル名 | 空文字 | -| vehicle_model | 文字列 | 車両モデル名 | 空文字 | +| 名称 | タイプ | 説明 | デフォルト | +| ------------- | ------ | ---------------- | ---------- | +| sensor_model | 文字列 | センサーモデル名 | 空文字 | +| vehicle_model | 文字列 | 車両モデル名 | 空文字 | ### 使用方法 `*.launch.xml`に次のように記述できます。 - ```xml @@ -63,4 +59,3 @@ ``` - diff --git a/localization/autoware_ekf_localizer/README.md b/localization/autoware_ekf_localizer/README.md index 25e81b2327036..61ad8bc650166 100644 --- a/localization/autoware_ekf_localizer/README.md +++ b/localization/autoware_ekf_localizer/README.md @@ -36,24 +36,24 @@ autoware_ekf_localizerの全体的なフローチャートを以下に示しま ### サブスクライブするトピック -| 名前 | タイプ | 説明 | -| -------------------------------------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| `measured_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 測定共分散行列を持つ入力ポーズソース | -| `measured_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 測定共分散行列を持つ入力ツイストソース | -| `initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKF の初期ポーズ。推定ポーズは開始時にゼロで初期化されます。公開されるたびにこのメッセージで初期化されます。 | +| 名前 | タイプ | 説明 | +| -------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `measured_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 測定共分散行列を持つ入力ポーズソース | +| `measured_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 測定共分散行列を持つ入力ツイストソース | +| `initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKF の初期ポーズ。推定ポーズは開始時にゼロで初期化されます。公開されるたびにこのメッセージで初期化されます。 | ### 公開トピック -| 名前 | タイプ | 説明 | -| --------------------------------- | ------------------------------------------------ | -------------------------------------------- | -| `ekf_odom` | `nav_msgs::msg::Odometry` | 推定オドメトリ。 | -| `ekf_pose` | `geometry_msgs::msg::PoseStamped` | 推定ポーズ。 | -| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 共分散を含む推定ポーズ。 | -| `ekf_biased_pose` | `geometry_msgs::msg::PoseStamped` | Yawバイアスを含む推定ポーズ。 | -| `ekf_biased_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Yawバイアスを含む共分散付き推定ポーズ。 | -| `ekf_twist` | `geometry_msgs::msg::TwistStamped` | 推定ツイスト。 | -| `ekf_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 共分散を含む推定ツイスト。 | -| `diagnostics` | `diagnostics_msgs::msg::DiagnosticArray` | 診断情報。 | +| 名前 | タイプ | 説明 | +| --------------------------------- | ------------------------------------------------ | --------------------------------------- | +| `ekf_odom` | `nav_msgs::msg::Odometry` | 推定オドメトリ。 | +| `ekf_pose` | `geometry_msgs::msg::PoseStamped` | 推定ポーズ。 | +| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 共分散を含む推定ポーズ。 | +| `ekf_biased_pose` | `geometry_msgs::msg::PoseStamped` | Yawバイアスを含む推定ポーズ。 | +| `ekf_biased_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Yawバイアスを含む共分散付き推定ポーズ。 | +| `ekf_twist` | `geometry_msgs::msg::TwistStamped` | 推定ツイスト。 | +| `ekf_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 共分散を含む推定ツイスト。 | +| `diagnostics` | `diagnostics_msgs::msg::DiagnosticArray` | 診断情報。 | ### 公開 TF @@ -137,16 +137,16 @@ EKFは観測による更新前にマハラノビス距離を使用してゲー 現在のところ、共分散推定の精度はあまり良くないため、偽陽性による拒否を減らすために、有意水準を非常に小さい値に設定することをお勧めします。 | 重要度レベル | 2 次元結果の閾値 | 3 次元結果の閾値 | -| ---------------- | -------------------- | -------------------- | -| $10 ^ {-2}$ | 9.21 | 11.3 | -| $10 ^ {-3}$ | 13.8 | 16.3 | -| $10 ^ {-4}$ | 18.4 | 21.1 | -| $10 ^ {-5}$ | 23.0 | 25.9 | -| $10 ^ {-6}$ | 27.6 | 30.7 | -| $10 ^ {-7}$ | 32.2 | 35.4 | -| $10 ^ {-8}$ | 36.8 | 40.1 | -| $10 ^ {-9}$ | 41.4 | 44.8 | -| $10 ^ {-10}$ | 46.1 | 49.5 | +| ------------ | ---------------- | ---------------- | +| $10 ^ {-2}$ | 9.21 | 11.3 | +| $10 ^ {-3}$ | 13.8 | 16.3 | +| $10 ^ {-4}$ | 18.4 | 21.1 | +| $10 ^ {-5}$ | 23.0 | 25.9 | +| $10 ^ {-6}$ | 27.6 | 30.7 | +| $10 ^ {-7}$ | 32.2 | 35.4 | +| $10 ^ {-8}$ | 36.8 | 40.1 | +| $10 ^ {-9}$ | 41.4 | 44.8 | +| $10 ^ {-10}$ | 46.1 | 49.5 | ## カルマンフィルタモデル @@ -205,4 +205,3 @@ pose_estimator は base_link を地図座標系で公開すると予想されて ## 参考資料 [1] Anderson, B. D. O., & Moore, J. B. (1979). Optimal filtering. Englewood Cliffs, NJ: Prentice-Hall. - diff --git a/localization/autoware_geo_pose_projector/README.md b/localization/autoware_geo_pose_projector/README.md index a67b863323fe6..0407bedab3540 100644 --- a/localization/autoware_geo_pose_projector/README.md +++ b/localization/autoware_geo_pose_projector/README.md @@ -6,17 +6,17 @@ ## 購読トピック -| 名前 | タイプ | 説明 | -| ------------------------- | ---------------------------------------------------- | -------------------- | -| `input_geo_pose` | `geographic_msgs::msg::GeoPoseWithCovarianceStamped` | 地理参照された位置 | +| 名前 | タイプ | 説明 | +| ------------------------- | ---------------------------------------------------- | ------------------------ | +| `input_geo_pose` | `geographic_msgs::msg::GeoPoseWithCovarianceStamped` | 地理参照された位置 | | `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectedObjectInfo` | マッププロジェクター情報 | ## 公開トピック -| 名称 | 型 | 説明 | -| ------------- | ------------------------------------------------- | ---------------------------------------- | -| `output_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | マップフレーム内のポーズ | -| `/tf` | `tf2_msgs::msg::TFMessage` | 親リンクと子リンク間のtf | +| 名称 | 型 | 説明 | +| ------------- | ----------------------------------------------- | ------------------------ | +| `output_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | マップフレーム内のポーズ | +| `/tf` | `tf2_msgs::msg::TFMessage` | 親リンクと子リンク間のtf | ## パラメータ @@ -26,4 +26,3 @@ 使用する投影タイプによっては、共分散を変換できない可能性があります。入力トピックの共分散は、対角行列として(緯度、経度、高度)で表されます。 現在、x軸を東向き、y軸を北向きと想定しています。そのため、この仮定が破られると、特に緯度と経度の共分散が異なる場合は、変換が正しく処理されない可能性があります。 - diff --git a/localization/autoware_gyro_odometer/README.md b/localization/autoware_gyro_odometer/README.md index 43e13e705cdde..db0f73cacdfc2 100644 --- a/localization/autoware_gyro_odometer/README.md +++ b/localization/autoware_gyro_odometer/README.md @@ -7,18 +7,20 @@ ## 入力 / 出力 ### 入力 + - `/vehicle/odometry/twist` (geometry_msgs/Twist): ロボットのひねり速度 - `/imu//data_raw` (sensor_msgs/Imu): IMU データ - `/tf` (tf2/TransformStamped): ロボットの TF トランスフォーム - `/vehicle/wheel_cmd` (vehicle_msgs/WheelCmd): 車輪速度 ### 出力 + - `/vehicle/twist` (geometry_msgs/Twist): 補償されたひねり速度 -| 名称 | 型 | 説明 | -| ------------------------ | ------------------------------------------------ | ---------------------------------- | +| 名称 | 型 | 説明 | +| ------------------------------- | ------------------------------------------------ | ------------------------ | | `vehicle/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 車両の共分散付きツイスト | -| `imu` | `sensor_msgs::msg::Imu` | センサーの IMU | +| `imu` | `sensor_msgs::msg::Imu` | センサーの IMU | ### アウトプット @@ -34,26 +36,26 @@ y = y0 + \int vsin(θ) dt ここで、 -* `x` は x 軸上の自車位置 -* `y` は y 軸上の自車位置 -* `θ` は自車の偏角 -* `v` は車両の速度 -* `ω` は車両の角速度 -* `x0`、`y0`、`θ0` は初期条件 +- `x` は x 軸上の自車位置 +- `y` は y 軸上の自車位置 +- `θ` は自車の偏角 +- `v` は車両の速度 +- `ω` は車両の角速度 +- `x0`、`y0`、`θ0` は初期条件 車両の速度と加速度は、Planning コンポーネンによって生成されます。Planning コンポーネンは、周囲環境に関する情報をセンサから収集し、車両を目的地まで安全かつ効率的に移動させる目的経路を生成します。 ダイナミクス モデルは、以下の基準に基づいて、自車位置と姿勢の推定値を評価します。 -* **速度逸脱量:** Planning コンポーネンによって指定された速度からの自車速度の逸脱量 -* **加速度逸脱量:** Planning コンポーネンによって指定された加速度からの自車加速度の逸脱量 -* **軌跡逸脱量:** Planning コンポーネンによって指定された軌跡からの自車位置の逸脱量 +- **速度逸脱量:** Planning コンポーネンによって指定された速度からの自車速度の逸脱量 +- **加速度逸脱量:** Planning コンポーネンによって指定された加速度からの自車加速度の逸脱量 +- **軌跡逸脱量:** Planning コンポーネンによって指定された軌跡からの自車位置の逸脱量 Autoware では、こうした基準を使用して、ダイナミクス モデルの推定値の精度が検証されます。 -| 名称 | 種別 | 説明 | -| --------------------- | ------------------------------------------------- | ----------------------------- | -| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 共分散付き推測速度 | +| 名称 | 種別 | 説明 | +| ----------------------- | ------------------------------------------------ | ------------------ | +| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 共分散付き推測速度 | ## パラメータ @@ -75,14 +77,13 @@ Autoware では、こうした基準を使用して、ダイナミクス モデ drawing -| 名称 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | -| -------------------------------- | -------------------------------------------------------------------------------------------- | ---------------------- | -------------------------------------------------------- | -| `topic_time_stamp` | サービスを呼び出すときのタイムスタンプ [ナノ秒] | なし | なし | -| `is_arrived_first_vehicle_twist` | 車両の Twist トピックを少なくとも 1 回受信したかどうかのフラグ | まだ受信していない | なし | -| `is_arrived_first_imu` | IMU トピックを少なくとも 1 回受信したかどうかのフラグ | まだ受信していない | なし | -| `vehicle_twist_time_stamp_dt` | 現在時刻と最新の車両の Twist トピック間の時間差 [秒] | なし | 時間差が `message_timeout_sec` より **長い** | -| `imu_time_stamp_dt` | 現在時刻と最新の IMU トピック間の時間差 [秒] | なし | 時間差が `message_timeout_sec` より **長い** | -| `vehicle_twist_queue_size` | `vehicle_twist_queue` のサイズ | なし | なし | -| `imu_queue_size` | `gyro_queue` のサイズ | なし | なし | -| `is_succeed_transform_imu` | IMU の変換の成功/失敗フラグ | なし | 変換が失敗した | - +| 名称 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | +| -------------------------------- | -------------------------------------------------------------- | ------------------ | -------------------------------------------- | +| `topic_time_stamp` | サービスを呼び出すときのタイムスタンプ [ナノ秒] | なし | なし | +| `is_arrived_first_vehicle_twist` | 車両の Twist トピックを少なくとも 1 回受信したかどうかのフラグ | まだ受信していない | なし | +| `is_arrived_first_imu` | IMU トピックを少なくとも 1 回受信したかどうかのフラグ | まだ受信していない | なし | +| `vehicle_twist_time_stamp_dt` | 現在時刻と最新の車両の Twist トピック間の時間差 [秒] | なし | 時間差が `message_timeout_sec` より **長い** | +| `imu_time_stamp_dt` | 現在時刻と最新の IMU トピック間の時間差 [秒] | なし | 時間差が `message_timeout_sec` より **長い** | +| `vehicle_twist_queue_size` | `vehicle_twist_queue` のサイズ | なし | なし | +| `imu_queue_size` | `gyro_queue` のサイズ | なし | なし | +| `is_succeed_transform_imu` | IMU の変換の成功/失敗フラグ | なし | 変換が失敗した | diff --git a/localization/autoware_landmark_based_localizer/README.md b/localization/autoware_landmark_based_localizer/README.md index 66c4a6e678c23..897a8fb9dec15 100644 --- a/localization/autoware_landmark_based_localizer/README.md +++ b/localization/autoware_landmark_based_localizer/README.md @@ -61,4 +61,3 @@ このモードでは、x、y、z の相対位置だけが正しいように、新しい自車位置を計算します。 この手法では、方位の補正は行えませんが、マーカー検出の方位誤差の影響を受けません。 - diff --git a/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md b/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md index 719d5cfa44598..8785b0c6333f6 100644 --- a/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md +++ b/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md @@ -13,11 +13,11 @@ ARタグの位置と向きは、Lanelet2フォーマットで記述されてい #### 入力 -| 名 | 型 | 説明 | -| :--------------------- | :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `~/input/lanelet2_map` | `autoware_map_msgs::msg::LaneletMapBin` | Lanelet 2データ | -| `~/input/image` | `sensor_msgs::msg::Image` | カメラ画像 | -| `~/input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | +| 名 | 型 | 説明 | +| :--------------------- | :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `~/input/lanelet2_map` | `autoware_map_msgs::msg::LaneletMapBin` | Lanelet 2データ | +| `~/input/image` | `sensor_msgs::msg::Image` | カメラ画像 | +| `~/input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | | `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | IMU補正なしのEKF推定値。誤検知のフィルタリングに使用され、検出したARタグの妥当性を評価します。EKF推定値とARタグで検出した推定値が一定の時間と空間範囲内にある場合のみ、検出したARタグの推定値は有効と見なされ、パブリッシュされます。 | #### 出力 @@ -32,49 +32,49 @@ ARタグの位置と向きは、Lanelet2フォーマットで記述されてい **2.1 Perception(感知)モジュール** -* カメラ、レーダー、LiDARなどのセンサーからのデータを処理し、周囲環境の3Dマップを作成します。 -* 交通標識、歩行者、障害物などのオブジェクトを検出し、追跡します。 +- カメラ、レーダー、LiDARなどのセンサーからのデータを処理し、周囲環境の3Dマップを作成します。 +- 交通標識、歩行者、障害物などのオブジェクトを検出し、追跡します。 **2.2 Localization(自己位置推定)モジュール** -* GNSS、IMU、車輪エンコーダーなどのセンサーデータを処理し、自車位置を推定します。 -* スラム(SLAM)アルゴリズムを使用して、周囲環境の地図を作成・更新します。 +- GNSS、IMU、車輪エンコーダーなどのセンサーデータを処理し、自車位置を推定します。 +- スラム(SLAM)アルゴリズムを使用して、周囲環境の地図を作成・更新します。 **2.3 Planning(計画)モジュール** -* 感知モジュールからのオブジェクト情報を基に、車両の経路と速度計画を生成します。 -* 障害物回避、レーンキープなどの計画を実行するコントローラーを提供します。 +- 感知モジュールからのオブジェクト情報を基に、車両の経路と速度計画を生成します。 +- 障害物回避、レーンキープなどの計画を実行するコントローラーを提供します。 **2.4 Behavior Planning(挙動計画)モジュール** -* 交通規則を遵守するための車両挙動を生成します。 -* 自動運転レベルに応じた異なる挙動をサポートしています。 +- 交通規則を遵守するための車両挙動を生成します。 +- 自動運転レベルに応じた異なる挙動をサポートしています。 **2.5 Control(制御)モジュール** -* 計画モジュールからのコマンドに基づいて、車両のステアリング、ブレーキ、アクセルを制御します。 -* 縦方向、横方向の制御のためのコントローラーを提供します。 +- 計画モジュールからのコマンドに基づいて、車両のステアリング、ブレーキ、アクセルを制御します。 +- 縦方向、横方向の制御のためのコントローラーを提供します。 **3. 安全機能** Autowareには、次の安全機能が組み込まれています。 -* **衝突回避システム:** 障害物との衝突を回避するための緊急回避策を実行します。 -* **速度逸脱量管理:** 設定された速度制限を超えた場合に警告を発し、車両を減速します。 -* **加速度逸脱量管理:** 快適さと安全性を確保するための急加速度や急減速を防止します。 -* **車両制御の監視:** 制御モジュールの動作を監視し、異常が発生した場合に車両を停止させます。 +- **衝突回避システム:** 障害物との衝突を回避するための緊急回避策を実行します。 +- **速度逸脱量管理:** 設定された速度制限を超えた場合に警告を発し、車両を減速します。 +- **加速度逸脱量管理:** 快適さと安全性を確保するための急加速度や急減速を防止します。 +- **車両制御の監視:** 制御モジュールの動作を監視し、異常が発生した場合に車両を停止させます。 **4. データ処理パイプライン** Autowareのデータ処理パイプラインは、次の手順に従います。 -* **センサーデータの取得:** センサーから生のデータを収集します。 -* **'post resampling'によるデータフィルタリング:** ノイズや不要なデータを除去します。 -* **オブジェクト検出と追跡:** 感知モジュールがオブジェクトの検出と追跡を実行します。 -* **自己位置推定:** 自己位置推定モジュールが自車位置を推定します。 -* **経路計画:** 計画モジュールが経路と速度計画を生成します。 -* **挙動計画:** 挙動計画モジュールが車両挙動を生成します。 -* **制御:** 制御モジュールが車両の制御を実行します。 +- **センサーデータの取得:** センサーから生のデータを収集します。 +- **'post resampling'によるデータフィルタリング:** ノイズや不要なデータを除去します。 +- **オブジェクト検出と追跡:** 感知モジュールがオブジェクトの検出と追跡を実行します。 +- **自己位置推定:** 自己位置推定モジュールが自車位置を推定します。 +- **経路計画:** 計画モジュールが経路と速度計画を生成します。 +- **挙動計画:** 挙動計画モジュールが車両挙動を生成します。 +- **制御:** 制御モジュールが車両の制御を実行します。 **5. インターフェース** @@ -84,13 +84,13 @@ Autowareは、ROS(Robot Operating System)上で動作します。 ROSノー Autowareはオープンソースプロジェクトであり、誰でも貢献できます。 Autowareコミュニティは、ドキュメント、フォーラム、サポートでユーザーをサポートしています。 -| 名称 | タイプ | 説明 | -| :--------------------------------- | :--------------------------------------------------------------- | :------------------------------------------------------------------------- | -| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定姿勢 | -| `~/debug/result` | `sensor_msgs::msg::Image` | [デバッグトピック] マーカー検出結果が、入力画像に重ね書きされた画像 | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] Rviz内で薄い板として可視化するロード済ランドマーク | -| `/tf` | `geometry_msgs::msg::TransformStamped` | カメラから検出されたタグまでのトランスフォーム | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断結果 | +| 名称 | タイプ | 説明 | +| :------------------------------ | :---------------------------------------------- | :-------------------------------------------------------------------- | +| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定姿勢 | +| `~/debug/result` | `sensor_msgs::msg::Image` | [デバッグトピック] マーカー検出結果が、入力画像に重ね書きされた画像 | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] Rviz内で薄い板として可視化するロード済ランドマーク | +| `/tf` | `geometry_msgs::msg::TransformStamped` | カメラから検出されたタグまでのトランスフォーム | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断結果 | ## パラメータ @@ -100,7 +100,6 @@ Autowareはオープンソースプロジェクトであり、誰でも貢献で Autowareを起動する際、`artag` を `pose_source` に設定します。 - ```bash ros2 launch autoware_launch ... \ pose_source:=artag \ @@ -122,7 +121,6 @@ ros2 launch autoware_launch ... \ トピック名を再マッピングし、実行してください。 - ```bash ros2 bag play /path/to/ar_tag_based_localizer_sample_bag/ -r 0.5 -s sqlite3 \ --remap /sensing/camera/front/image:=/sensing/camera/traffic_light/image_raw \ @@ -142,4 +140,3 @@ ros2 bag play /path/to/ar_tag_based_localizer_sample_bag/ -r 0.5 -s sqlite3 \ ## 原理 ![principle](../doc_image/principle.png) - diff --git a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md index 01f28f628f3d5..5c11cd7b845e3 100644 --- a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md +++ b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md @@ -7,24 +7,26 @@ ### `lidar_marker_localizer` ノード #### 入力 + - `/hesai406/points` (`PointCloud`) - - ヘサイ406のLiDARポイントクラウド + - ヘサイ406のLiDARポイントクラウド - `/current_pose` (`Odometry`) - - 自車位置 + - 自車位置 - `/static_map` (`StaticMap`) - - 静的地図(反転させた座標系) + - 静的地図(反転させた座標系) #### 出力 + - `/lidar_marker_localizer/output` (`Odometry`) - - 検出された反射器に基づく、自車位置の推定値 + - 検出された反射器に基づく、自車位置の推定値 - `/lidar_marker_localizer/debug` (`MarkerArray`) - - デバッグ用マーカー + - デバッグ用マーカー -| 名前 | 型 | 説明 | -|---|---|---| -| `~/input/lanelet2_map` | `autoware_map_msgs::msg::HADMapBin` | lanelet2データ | -| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 点群 | -| `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKFによる自車位置 | +| 名前 | 型 | 説明 | +| ---------------------- | ----------------------------------------------- | ----------------- | +| `~/input/lanelet2_map` | `autoware_map_msgs::msg::HADMapBin` | lanelet2データ | +| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 点群 | +| `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKFによる自車位置 | #### 出力 @@ -82,14 +84,14 @@ Autoware はオープンソースプロジェクトであり、コミュニテ このドキュメントに記載されている情報は、正確で最新であることを目指していますが、Autoware Foundation はその正確性または完全性について保証しません。Autoware の使用は、ユーザー自身の責任において行われるものとします。 -| 名前 | 種類 | 説明 | -| :-----------------------------------| :------------------------------------------------- | :--------------------------------------------------------------------- | -| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定姿勢 | -| `~/debug/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] 推定姿勢 | -| `~/debug/marker_detected` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 検出されたマーカートピック | -| `~/debug/marker_mapped` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] Rvizで薄板として可視化するための読み込まれたランドマーク | -| `~/debug/marker_pointcloud` | `sensor_msgs::msg::PointCloud2` | 検出されたマーカーのPointCloud | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断結果 | +| 名前 | 種類 | 説明 | +| :------------------------------ | :---------------------------------------------- | :-------------------------------------------------------------------------- | +| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定姿勢 | +| `~/debug/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] 推定姿勢 | +| `~/debug/marker_detected` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 検出されたマーカートピック | +| `~/debug/marker_mapped` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] Rvizで薄板として可視化するための読み込まれたランドマーク | +| `~/debug/marker_pointcloud` | `sensor_msgs::msg::PointCloud2` | 検出されたマーカーのPointCloud | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断結果 | ## パラメータ @@ -99,7 +101,6 @@ Autoware はオープンソースプロジェクトであり、コミュニテ Autowareを起動する際は、`pose_source`に`lidar-marker`を設定します。 - ```bash ros2 launch autoware_launch ... \ pose_source:=lidar-marker \ @@ -110,7 +111,6 @@ ros2 launch autoware_launch ... \ ### フローチャート - ```plantuml @startuml @@ -180,4 +180,3 @@ end group - [TIER IV](https://tier4.jp/en/) - [大成建設](https://www.taisei.co.jp/english/) - [Yuri Shimizu](https://github.com/YuriShimizu824) - diff --git a/localization/autoware_localization_error_monitor/README.md b/localization/autoware_localization_error_monitor/README.md index dcb5f93a0bafe..6bc9d91ac8739 100644 --- a/localization/autoware_localization_error_monitor/README.md +++ b/localization/autoware_localization_error_monitor/README.md @@ -16,8 +16,8 @@ autoware_localization_error_monitorは、位置推定の結果の不確かさを ### 入力 -| 名前 | タイプ | 説明 | -| ------------ | ------------------------- | ------------------- | +| 名前 | タイプ | 説明 | +| ------------ | ------------------------- | ------------ | | `input/odom` | `nav_msgs::msg::Odometry` | 自車位置結果 | ### 出力 @@ -83,15 +83,14 @@ Autowareはオープンソースプロジェクトです。貢献に興味があ Autowareに関する詳細情報は、以下のリソースを参照してください。 -- 公式ウェブサイト: https://www.autoware.ai -- GitHubリポジトリ: https://github.com/autowarefoundation/autoware.ai +- 公式ウェブサイト: +- GitHubリポジトリ: -| 名称 | 型 | 説明 | -| ---------------------- | --------------------------------------- | ------------------- | -| `debug/ellipse_marker` | `visualization_msgs::msg::Marker` | 楕円マーカー | -| `diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断出力 | +| 名称 | 型 | 説明 | +| ---------------------- | --------------------------------------- | ------------ | +| `debug/ellipse_marker` | `visualization_msgs::msg::Marker` | 楕円マーカー | +| `diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断出力 | ## パラメータ {{ json_to_markdown("localization/autoware_localization_error_monitor/schema/localization_error_monitor.schema.json", True) }} - diff --git a/localization/autoware_localization_util/README.md b/localization/autoware_localization_util/README.md index 289de2931eae1..a0608e4983c95 100644 --- a/localization/autoware_localization_util/README.md +++ b/localization/autoware_localization_util/README.md @@ -3,4 +3,3 @@ `autoware_localization_util` はローカライゼーション用のユーティリティパッケージです。 このパッケージにはノードはなく、ライブラリのみです。 - diff --git a/localization/autoware_ndt_scan_matcher/README.md b/localization/autoware_ndt_scan_matcher/README.md index 93d668eaf884c..8805c00c822fb 100644 --- a/localization/autoware_ndt_scan_matcher/README.md +++ b/localization/autoware_ndt_scan_matcher/README.md @@ -15,42 +15,42 @@ autoware_ndt_scan_matcherはNDTスキャンマッチング手法を使用した ### 入力 -| 名称 | タイプ | 説明 | -| ----------------------------------- | --------------------------------------------- | --------------------------------------- | -| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 初期位置 | -| `points_raw` | `sensor_msgs::msg::PointCloud2` | センサポイントクラウド | -| `sensing/gnss/pose_with_covariance` | `sensor_msgs::msg::PoseWithCovarianceStamped` | 正規化項の基本位置 | +| 名称 | タイプ | 説明 | +| ----------------------------------- | ----------------------------------------------- | ---------------------- | +| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 初期位置 | +| `points_raw` | `sensor_msgs::msg::PointCloud2` | センサポイントクラウド | +| `sensing/gnss/pose_with_covariance` | `sensor_msgs::msg::PoseWithCovarianceStamped` | 正規化項の基本位置 | `sensing/gnss/pose_with_covariance` は、正則化が有効な場合にのみ必要です。 ### 出力 -| 名前 | タイプ | 説明 | -| ----------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| `ndt_pose` | `geometry_msgs::msg::PoseStamped` | 推定位相 | -| `ndt_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 共分散による推定位相 | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断 | -| `points_aligned` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングでアラインされた点群 | -| `points_aligned_no_ground` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングでアラインされた、地面を除いた点群 | -| `initial_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] スキャンマッチングで使用される初期位相 | -| `multi_ndt_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 実時間共分散推定におけるさまざまな初期位相からの推定位相 | -| `multi_initial_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 実時間共分散推定における初期位相 | -| `exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングの実行時間 [ミリ秒] | -| `transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングのスコア | -| `no_ground_transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 地面のない LiDAR スキャンのスコア | -| `iteration_num` | `tier4_debug_msgs::msg::Int32Stamped` | [デバッグトピック] スキャンマッチングのイテレーション数 | -| `initial_to_result_relative_pose` | `geometry_msgs::msg::PoseStamped` | [デバッグトピック] 初期点と収束点間の相対位相 | -| `initial_to_result_distance` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 初期点と収束点間の距離 [メートル] | -| `initial_to_result_distance_old` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される古い 2 つの初期点のうちの 1 つと収束点の距離差 [メートル] | -| `initial_to_result_distance_new` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される新しい 2 つの初期点のうちの 1 つと収束点の距離差 [メートル] | -| `ndt_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] デバッグ用のマーカー | -| `monte_carlo_initial_pose_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] 初期位置推定に使用されるパーティクル | +| 名前 | タイプ | 説明 | +| --------------------------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `ndt_pose` | `geometry_msgs::msg::PoseStamped` | 推定位相 | +| `ndt_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 共分散による推定位相 | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断 | +| `points_aligned` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングでアラインされた点群 | +| `points_aligned_no_ground` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングでアラインされた、地面を除いた点群 | +| `initial_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] スキャンマッチングで使用される初期位相 | +| `multi_ndt_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 実時間共分散推定におけるさまざまな初期位相からの推定位相 | +| `multi_initial_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 実時間共分散推定における初期位相 | +| `exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングの実行時間 [ミリ秒] | +| `transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングのスコア | +| `no_ground_transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 地面のない LiDAR スキャンのスコア | +| `iteration_num` | `tier4_debug_msgs::msg::Int32Stamped` | [デバッグトピック] スキャンマッチングのイテレーション数 | +| `initial_to_result_relative_pose` | `geometry_msgs::msg::PoseStamped` | [デバッグトピック] 初期点と収束点間の相対位相 | +| `initial_to_result_distance` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 初期点と収束点間の距離 [メートル] | +| `initial_to_result_distance_old` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される古い 2 つの初期点のうちの 1 つと収束点の距離差 [メートル] | +| `initial_to_result_distance_new` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される新しい 2 つの初期点のうちの 1 つと収束点の距離差 [メートル] | +| `ndt_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] デバッグ用のマーカー | +| `monte_carlo_initial_pose_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] 初期位置推定に使用されるパーティクル | ### サービス -| Name | Type | Description | -| --------------- | --------------------------------------------------------------- | --------------------------------- | -| `ndt_align_srv` | `autoware_localization_srvs::srv::PoseWithCovarianceStamped` | 初期姿勢推定サービス | +| Name | Type | Description | +| --------------- | ------------------------------------------------------------ | -------------------- | +| `ndt_align_srv` | `autoware_localization_srvs::srv::PoseWithCovarianceStamped` | 初期姿勢推定サービス | ## パラメーター @@ -195,14 +195,14 @@ Autowareは `ndt_scan_matcher` 用の動的マップロード機能をサポー #### 追加出力 -| 名 | タイプ | 説明 | -| ---- | ---- | ---- | +| 名 | タイプ | 説明 | +| ----------------------------- | ------------------------------- | ---------------------------------------------------------- | | `debug/loaded_pointcloud_map` | `sensor_msgs::msg::PointCloud2` | ローカライゼーション用に使用される点群マップ(デバッグ用) | #### 追加クライアント -| 名前 | 型 | 説明 | -| ------------------- | ------------------------------------------------------ | ------------------ | +| 名前 | 型 | 説明 | +| ------------------- | ------------------------------------------------------ | -------------------------- | | `client_map_loader` | `autoware_map_msgs::srv::GetDifferentialPointCloudMap` | マップ読み込みクライアント | ### パラメータ @@ -220,10 +220,10 @@ Autowareは `ndt_scan_matcher` 用の動的マップロード機能をサポー Autoware チュートリアルの `sample-map-rosbag` の分割された PCD マップを次に示します。[`sample-map-rosbag_split.zip`](https://github.com/autowarefoundation/autoware.universe/files/10349104/sample-map-rosbag_split.zip) -| PCDファイル | NDTがマップを読み込む方法 | -| :------------: | :------------------: | -| 単一ファイル | 一括(標準) | -| 複数ファイル | 動的 | +| PCDファイル | NDTがマップを読み込む方法 | +| :----------: | :-----------------------: | +| 単一ファイル | 一括(標準) | +| 複数ファイル | 動的 | ## グランドLiDARスキャンなしでのスキャンマッチングスコア @@ -269,27 +269,27 @@ MULTI_NDT_SCOREモードでは、出力2D共分散のスケールを温度に応 drawing -| Name | 説明 | 警告への遷移条件 | エラーへの遷移条件 | 推定結果の破棄の有無 ( `skipping_publish_num` に影響) | -| ------------------------------------------------ | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ----------------------------------------------------- | -| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | いいえ | -| `sensor_points_size` | センサーポイントのサイズ | サイズが `sensor_points.timeout_sec` より **長い** | なし | はい | -| `sensor_points_delay_time_sec` | センサーポイントの遅延時間 | 時刻が `sensor_points.timeout_sec` より **長い** | なし | はい | -| `is_succeed_transform_sensor_points` | センサーポイントの変換が成功したかどうか | なし | 失敗 | はい | -| `sensor_points_max_distance` | センサーポイントの最大距離 | 最大距離が `sensor_points.required_distance` より **短い** | なし | はい | -| `is_activated` | ノードが "active" 状態であるかどうか | "active" 状態ではない | なし | `is_activated` が false の場合、推定は実行されず、 `skipping_publish_num` は 0 に設定されます。 | -| `is_succeed_interpolate_initial_pose` | 初期姿勢の補間が成功したかどうか | 失敗。
(1) `initial_pose_buffer_` のサイズが **2** より小さい。
(2) 初期姿勢とセンサーポイントクラウド間のタイムスタンプの差が `validation.initial_pose_timeout_sec` より **長い**。
(3) 線形補間に使用される 2 つ の初期姿勢間の距離の差が `validation.initial_pose_distance_tolerance_m` より **長い** | なし | はい | -| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | はい | -| `iteration_num` | 整列を計算する回数 | 回数が `ndt.max_iterations` より **多い** | なし | はい | -| `local_optimal_solution_oscillation_num` | ソリューションが振動していると判断された回数 | 回数が **10** より **多い** | なし | はい | -| `transform_probability` | マップがセンサーポイントとどれほどよく一致するかを表すスコア | スコアが `score_estimation.converged_param_transform_probability` より **小さい** (`score_estimation.converged_param_type` が 0=TRANSFORM_PROBABILITY の場合のみ) | なし | はい | -| `transform_probability_diff` | 現在 `ndt` 最適化のtpスコア差 | なし | なし | いいえ | -| `transform_probability_before` | 現在 `ndt` 最適化前のtpスコア | なし | なし | いいえ | -| `nearest_voxel_transformation_likelihood` | マップがセンサーポイントとどれほどよく一致するかを表すスコア | スコアが `score_estimation.converged_param_nearest_voxel_transformation_likelihood` より **小さい** (`score_estimation.converged_param_type` が 1=NEAREST_VOXEL_TRANSFORMATION_LIKELIHOOD の場合のみ) | なし | はい | -| `nearest_voxel_transformation_likelihood_diff` | 現在 `ndt` 最適化のnvtlスコア差 | なし | なし | いいえ | -| `nearest_voxel_transformation_likelihood_before` | 現在 `ndt` 最適化前のnvtlスコア | なし | なし | いいえ | -| `distance_initial_to_result` | 収束処理前と後の位置間の距離 | 距離が `validation.initial_to_result_distance_tolerance_m` より **長い** | なし | いいえ | -| `execution_time` | 収束処理時間 | 時刻が `validation.critical_upper_bound_exe_time_ms` より **長い** | なし | いいえ | -| `skipping_publish_num` | 連続して推定結果を破棄した回数 | 回数が `validation.skipping_publish_num` 以上 | なし | - | +| Name | 説明 | 警告への遷移条件 | エラーへの遷移条件 | 推定結果の破棄の有無 ( `skipping_publish_num` に影響) | +| ------------------------------------------------ | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------- | +| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | いいえ | +| `sensor_points_size` | センサーポイントのサイズ | サイズが `sensor_points.timeout_sec` より **長い** | なし | はい | +| `sensor_points_delay_time_sec` | センサーポイントの遅延時間 | 時刻が `sensor_points.timeout_sec` より **長い** | なし | はい | +| `is_succeed_transform_sensor_points` | センサーポイントの変換が成功したかどうか | なし | 失敗 | はい | +| `sensor_points_max_distance` | センサーポイントの最大距離 | 最大距離が `sensor_points.required_distance` より **短い** | なし | はい | +| `is_activated` | ノードが "active" 状態であるかどうか | "active" 状態ではない | なし | `is_activated` が false の場合、推定は実行されず、 `skipping_publish_num` は 0 に設定されます。 | +| `is_succeed_interpolate_initial_pose` | 初期姿勢の補間が成功したかどうか | 失敗。
(1) `initial_pose_buffer_` のサイズが **2** より小さい。
(2) 初期姿勢とセンサーポイントクラウド間のタイムスタンプの差が `validation.initial_pose_timeout_sec` より **長い**。
(3) 線形補間に使用される 2 つ の初期姿勢間の距離の差が `validation.initial_pose_distance_tolerance_m` より **長い** | なし | はい | +| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | はい | +| `iteration_num` | 整列を計算する回数 | 回数が `ndt.max_iterations` より **多い** | なし | はい | +| `local_optimal_solution_oscillation_num` | ソリューションが振動していると判断された回数 | 回数が **10** より **多い** | なし | はい | +| `transform_probability` | マップがセンサーポイントとどれほどよく一致するかを表すスコア | スコアが `score_estimation.converged_param_transform_probability` より **小さい** (`score_estimation.converged_param_type` が 0=TRANSFORM_PROBABILITY の場合のみ) | なし | はい | +| `transform_probability_diff` | 現在 `ndt` 最適化のtpスコア差 | なし | なし | いいえ | +| `transform_probability_before` | 現在 `ndt` 最適化前のtpスコア | なし | なし | いいえ | +| `nearest_voxel_transformation_likelihood` | マップがセンサーポイントとどれほどよく一致するかを表すスコア | スコアが `score_estimation.converged_param_nearest_voxel_transformation_likelihood` より **小さい** (`score_estimation.converged_param_type` が 1=NEAREST_VOXEL_TRANSFORMATION_LIKELIHOOD の場合のみ) | なし | はい | +| `nearest_voxel_transformation_likelihood_diff` | 現在 `ndt` 最適化のnvtlスコア差 | なし | なし | いいえ | +| `nearest_voxel_transformation_likelihood_before` | 現在 `ndt` 最適化前のnvtlスコア | なし | なし | いいえ | +| `distance_initial_to_result` | 収束処理前と後の位置間の距離 | 距離が `validation.initial_to_result_distance_tolerance_m` より **長い** | なし | いいえ | +| `execution_time` | 収束処理時間 | 時刻が `validation.critical_upper_bound_exe_time_ms` より **長い** | なし | いいえ | +| `skipping_publish_num` | 連続して推定結果を破棄した回数 | 回数が `validation.skipping_publish_num` 以上 | なし | - | ※`sensor_points_callback`は`trigger_node_service`および`ndt_align_service`と同一コールバックグループを共有しています。結果的に、初期ポーズ推定に時間がかかりすぎると、この診断は古くなる可能性があります。 @@ -297,29 +297,29 @@ MULTI_NDT_SCOREモードでは、出力2D共分散のスケールを温度に応 drawing -| 名前 | 説明 | 注意の状態への遷移条件 | エラーの状態への遷移条件 | -| ------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------------------------------- | -------------------------------------------------------- | -| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | -| `is_activated` | ノードが「アクティブ」状態であるかどうか | 「アクティブ」状態以外 | なし | -| `is_expected_frame_id` | 入力フレーム IDが `frame.map_frame`と同一かどうか | なし | 異なる場合 | +| 名前 | 説明 | 注意の状態への遷移条件 | エラーの状態への遷移条件 | +| ---------------------- | ------------------------------------------------- | ---------------------- | ------------------------ | +| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | +| `is_activated` | ノードが「アクティブ」状態であるかどうか | 「アクティブ」状態以外 | なし | +| `is_expected_frame_id` | 入力フレーム IDが `frame.map_frame`と同一かどうか | なし | 異なる場合 | ### regularization_pose_subscriber_status drawing -| Name | Description | Transition condition to Warning | Transition condition to Error | -| ------------------------- | --------------------------------------- | ---------------------------------- | ----------------------------- | -| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | +| Name | Description | Transition condition to Warning | Transition condition to Error | +| ------------------ | ---------------------------- | ------------------------------- | ----------------------------- | +| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | ### trigger_node_service_status 図 -| 名称 | 説明 | Warningへの移行条件 | Errorへの移行条件 | -| ------------------------- | --------------------------------------------------- | -------------------------- | --------------------- | -| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | -| `is_activated` | ノードが「アクティブ」状態か否か | なし | なし | -| `is_succeed_service` | サービスプロセスの成功または失敗 | なし | なし | +| 名称 | 説明 | Warningへの移行条件 | Errorへの移行条件 | +| ------------------------- | -------------------------------- | ------------------- | ----------------- | +| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | +| `is_activated` | ノードが「アクティブ」状態か否か | なし | なし | +| `is_succeed_service` | サービスプロセスの成功または失敗 | なし | なし | ※ この診断はサービスが呼び出されたときにのみ発行されるので、初期姿勢推定が完了すると古いものになります。 @@ -328,22 +328,22 @@ MULTI_NDT_SCOREモードでは、出力2D共分散のスケールを温度に応 図 -| 名前 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | -| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ------------------- | -| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | -| `is_succeed_transform_initial_pose` | 初期位置の変換に成功したかどうか | なし | エラー | -| `is_need_rebuild` | マップを再構築する必要があるかどうか。まだマップがロードされていない場合、または「`distance_last_update_position_to_current_position encounters`」がエラー状態の場合、マップの再構築が必要と見なされ、`is_need_rebuild` が `True` になります | なし | なし | -| `maps_size_before` | マップの更新前のマップ数 | なし | なし | -| `is_succeed_call_pcd_loader` | pcd_loader サービスの呼び出しに成功したかどうか | エラー | なし | -| `maps_to_add_size` | 追加されるマップ数 | なし | なし | -| `maps_to_remove_size` | 削除されるマップ数 | なし | なし | -| `map_update_execution_time` | マップの更新にかかる時間 | なし | なし | -| `maps_size_after` | マップの更新後のマップ数 | なし | なし | -| `is_updated_map` | マップが更新されたかどうか。マップの更新を実行できなかった場合、またはマップを更新する必要がなかった場合、`False` になります。 | なし | `is_updated_map` が `False` で `is_need_rebuild` が `True` | -| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | -| `is_set_sensor_points` | センサーポイントが設定されているかどうか | 設定されていない | なし | -| `best_particle_score` | 粒子のベストスコア | なし | なし | -| `is_succeed_service` | サービスの処理が成功したかどうか | エラー | なし | +| 名前 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | +| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ---------------------------------------------------------- | +| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | +| `is_succeed_transform_initial_pose` | 初期位置の変換に成功したかどうか | なし | エラー | +| `is_need_rebuild` | マップを再構築する必要があるかどうか。まだマップがロードされていない場合、または「`distance_last_update_position_to_current_position encounters`」がエラー状態の場合、マップの再構築が必要と見なされ、`is_need_rebuild` が `True` になります | なし | なし | +| `maps_size_before` | マップの更新前のマップ数 | なし | なし | +| `is_succeed_call_pcd_loader` | pcd_loader サービスの呼び出しに成功したかどうか | エラー | なし | +| `maps_to_add_size` | 追加されるマップ数 | なし | なし | +| `maps_to_remove_size` | 削除されるマップ数 | なし | なし | +| `map_update_execution_time` | マップの更新にかかる時間 | なし | なし | +| `maps_size_after` | マップの更新後のマップ数 | なし | なし | +| `is_updated_map` | マップが更新されたかどうか。マップの更新を実行できなかった場合、またはマップを更新する必要がなかった場合、`False` になります。 | なし | `is_updated_map` が `False` で `is_need_rebuild` が `True` | +| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | +| `is_set_sensor_points` | センサーポイントが設定されているかどうか | 設定されていない | なし | +| `best_particle_score` | 粒子のベストスコア | なし | なし | +| `is_succeed_service` | サービスの処理が成功したかどうか | エラー | なし | ※ この診断はサービスが呼び出され時にのみ発行されるため、初期ポーズ推定が完了すると古くなります。 @@ -352,18 +352,17 @@ MULTI_NDT_SCOREモードでは、出力2D共分散のスケールを温度に応 drawing -| 項目 | 説明 | 警告状態への移行条件 | エラー状態への移行条件 | -| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| `timer_callback_time_stamp` | `timer_callback` の呼び出しタイムスタンプ | なし | なし | -| `is_activated` | ノードが "activate" 状態であるかどうか | "activate" 状態でない | なし | -| `is_set_last_update_position` | `last_update_position` が設定されているかどうか | 設定されてない | なし | -| `distance_last_update_position_to_current_position` | `last_update_position` から現在の位置までの距離 | なし | (距離 + `dynamic_map_loading.lidar_radius`) が `dynamic_map_loading.map_radius` より **大きい** | -| `is_need_rebuild` | マップを再構築する必要があるかどうか。まだマップが読み込まれていなかったり、`distance_last_update_position_to_current_position` がエラー状態を検出したりすると、マップを再構築する必要があり、`is_need_rebuild` が `True` になる。 | なし | なし | -| `maps_size_before` | マップ更新前のマップの数 | なし | なし | -| `is_succeed_call_pcd_loader` | `pcd_loader` サービスを呼び出すことに成功したかどうか | 失敗 | なし | -| `maps_to_add_size` | 追加するマップの数 | なし | なし | -| `maps_to_remove_size` | 削除するマップの数 | なし | なし | -| `map_update_execution_time` | マップ更新の時間 | なし | なし | -| `maps_size_after` | マップ更新後のマップの数 | なし | なし | -| `is_updated_map` | マップが更新されたかどうか。マップの更新が実行できなかったか、マップを更新する必要がなかった場合、`False` になる | なし | `is_updated_map` が `False` だが `is_need_rebuild` が `True` | - +| 項目 | 説明 | 警告状態への移行条件 | エラー状態への移行条件 | +| --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ----------------------------------------------------------------------------------------------- | +| `timer_callback_time_stamp` | `timer_callback` の呼び出しタイムスタンプ | なし | なし | +| `is_activated` | ノードが "activate" 状態であるかどうか | "activate" 状態でない | なし | +| `is_set_last_update_position` | `last_update_position` が設定されているかどうか | 設定されてない | なし | +| `distance_last_update_position_to_current_position` | `last_update_position` から現在の位置までの距離 | なし | (距離 + `dynamic_map_loading.lidar_radius`) が `dynamic_map_loading.map_radius` より **大きい** | +| `is_need_rebuild` | マップを再構築する必要があるかどうか。まだマップが読み込まれていなかったり、`distance_last_update_position_to_current_position` がエラー状態を検出したりすると、マップを再構築する必要があり、`is_need_rebuild` が `True` になる。 | なし | なし | +| `maps_size_before` | マップ更新前のマップの数 | なし | なし | +| `is_succeed_call_pcd_loader` | `pcd_loader` サービスを呼び出すことに成功したかどうか | 失敗 | なし | +| `maps_to_add_size` | 追加するマップの数 | なし | なし | +| `maps_to_remove_size` | 削除するマップの数 | なし | なし | +| `map_update_execution_time` | マップ更新の時間 | なし | なし | +| `maps_size_after` | マップ更新後のマップの数 | なし | なし | +| `is_updated_map` | マップが更新されたかどうか。マップの更新が実行できなかったか、マップを更新する必要がなかった場合、`False` になる | なし | `is_updated_map` が `False` だが `is_need_rebuild` が `True` | diff --git a/localization/autoware_pose2twist/README.md b/localization/autoware_pose2twist/README.md index 7787ab9f91039..03e527110db76 100644 --- a/localization/autoware_pose2twist/README.md +++ b/localization/autoware_pose2twist/README.md @@ -10,10 +10,12 @@ ## 入出力 ### 入力 + - `/diff_poses`: 車両の過去の `post resampling` ポーズ順序(ジオリファレンス済み) - `/current_pose`: 車両の自車位置と姿勢(ジオリファレンス済み) ### 出力 + - `/twist`: 速度 - `/linear_x`: `twist.linear.x` の値 - `/linear_y`: `twist.linear.y` の値 @@ -29,8 +31,8 @@ - `/acceleration_error_rot`: 回転加速度逸脱量 - `/filtered_velocity`: フィルタリングされた速度 -| 名称 | 種別 | 説明 | -|---|---|---| +| 名称 | 種別 | 説明 | +| ---- | ------------------------------- | ------------------------------ | | pose | geometry_msgs::msg::PoseStamped | 速度計算に使用する姿勢のソース | ## 自動運転ソフトウェアドキュメント @@ -122,11 +124,11 @@ Autowareシステムは、以下の指標を使用して評価されます。 - 加速度逸脱量 - 速度逸脱量 -| 名前 | 種類 | 説明 | -| --------- | ------------------------------------- | --------------------------------------------- | +| 名前 | 種類 | 説明 | +| --------- | ------------------------------------- | -------------------------------------- | | twist | geometry_msgs::msg::TwistStamped | 入力された姿勢履歴から計算した捻り率。 | -| linear_x | tier4_debug_msgs::msg::Float32Stamped | 出力捻り率の線形 x フィールド。 | -| angular_z | tier4_debug_msgs::msg::Float32Stamped | 出力捻り率の角速度 z フィールド。 | +| linear_x | tier4_debug_msgs::msg::Float32Stamped | 出力捻り率の線形 x フィールド。 | +| angular_z | tier4_debug_msgs::msg::Float32Stamped | 出力捻り率の角速度 z フィールド。 | ## パラメータ @@ -135,4 +137,3 @@ Autowareシステムは、以下の指標を使用して評価されます。 ## 仮定 / 既知の制約 なし - diff --git a/localization/autoware_pose_covariance_modifier/README.md b/localization/autoware_pose_covariance_modifier/README.md index ea5d093c490b5..b999c41f94cec 100644 --- a/localization/autoware_pose_covariance_modifier/README.md +++ b/localization/autoware_pose_covariance_modifier/README.md @@ -51,7 +51,6 @@ GNSS システムは、共分散測定に変換できる信頼性の高い標準 ローカリゼーションでは NDT ポーズのみが使用されます。GNSS ポーズは初期化にのみ使用されます。 - ```mermaid graph TD ndt_scan_matcher["ndt_scan_matcher"] --> |"/localization/pose_estimator/pose_with_covariance"| ekf_localizer["ekf_localizer"] @@ -68,7 +67,6 @@ class ekf_localizer cl_node; 以下に、プロセスと定義済みの閾値を示すフローチャートを示します。 - ```mermaid graph TD gnss_poser["gnss_poser"] --> |"/sensing/gnss/
pose_with_covariance"| pose_covariance_modifier_node @@ -133,19 +131,19 @@ class gnss_ndt_pose cl_output; ### サブスクライブするトピック -| 名称 | タイプ | 説明 | -| ------------------------------- | -------------------------------------------- | --------------------------- | -| `input_gnss_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSSポーズ入力トピック。 | -| `input_ndt_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | NDTポーズ入力トピック。 | +| 名称 | タイプ | 説明 | +| -------------------------------- | ----------------------------------------------- | ------------------------ | +| `input_gnss_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSSポーズ入力トピック。 | +| `input_ndt_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | NDTポーズ入力トピック。 | ### 発行トピック -| 名称 | 型 | 説明 | -| ------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -| `output_pose_with_covariance_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 出力姿勢トピック。このトピックはekf_localizerパッケージで使用されます。 | -| `selected_pose_type` | `std_msgs::msg::String` | このパッケージの出力でどの姿勢ソースが使用されるかを宣言します。 | -| `output/ndt_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢のndt位置標準偏差の平均(x-y)。enable_debug_topicsがtrueの場合にのみ公開されます。 | -| `output/gnss_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢のGNSS位置標準偏差の平均(x-y)。enable_debug_topicsがtrueの場合にのみ公開されます。 | +| 名称 | 型 | 説明 | +| ----------------------------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `output_pose_with_covariance_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 出力姿勢トピック。このトピックはekf_localizerパッケージで使用されます。 | +| `selected_pose_type` | `std_msgs::msg::String` | このパッケージの出力でどの姿勢ソースが使用されるかを宣言します。 | +| `output/ndt_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢のndt位置標準偏差の平均(x-y)。enable_debug_topicsがtrueの場合にのみ公開されます。 | +| `output/gnss_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢のGNSS位置標準偏差の平均(x-y)。enable_debug_topicsがtrueの場合にのみ公開されます。 | ### パラメーター @@ -164,19 +162,19 @@ GNSSポーズトピックはNDTよりも高い周波数を持つ場合があり 入力が次の周波数を持つと仮定します。 | 情報源 | 周波数 | -| ------ | --------- | -| GNSS | 200 Hz | -| NDT | 10 Hz | +| ------ | ------ | +| GNSS | 200 Hz | +| NDT | 10 Hz | このパッケージは、モードに応じて出力のポーズを発行します。 最終的な結果: -| モード | 出力周波数 | -|---|---| -| GNSSのみ | 200 Hz | -| GNSS + NDT | 210 Hz | -| NDTのみ | 10 Hz | +| モード | 出力周波数 | +| ---------- | ---------- | +| GNSSのみ | 200 Hz | +| GNSS + NDT | 210 Hz | +| NDTのみ | 10 Hz | ### NDT共分散値の上書き方法および時期 @@ -197,11 +195,11 @@ NDT共分散値は、以下の条件を満たした場合に上書きされま オブジェクトの障害物逸脱量がvelocity逸脱量よりも著しく大きい場合、速度が0である場合でも、オブジェクトの障害物逸脱量はゼロにはなりません。 -| モード | 出力、共分散 | -| ---------- | ------------------------------------------- | -| GNSS のみ | GNSS、修正なし | +| モード | 出力、共分散 | +| ---------- | --------------------------------- | +| GNSS のみ | GNSS、修正なし | | GNSS + NDT | **GNSS:** 修正なし、**NDT:** 補間 | -| NDT のみ | NDT、修正なし | +| NDT のみ | NDT、修正なし | NDT 共分散値は `GNSS + NDT` モードでのみ上書きされます。 @@ -223,4 +221,3 @@ NDT 共分散値は `GNSS + NDT` モードでのみ上書きされます。 - 最終値 = `ndt_std_dev_bound_lower` + `ndt_std_dev_bound_upper` - `ndt_std_dev_target` (逆数を求める) 範囲から範囲への lerp アニメーション - diff --git a/localization/autoware_pose_estimator_arbiter/README.md b/localization/autoware_pose_estimator_arbiter/README.md index bb79b7ae3d550..50e4450aa7fa8 100644 --- a/localization/autoware_pose_estimator_arbiter/README.md +++ b/localization/autoware_pose_estimator_arbiter/README.md @@ -49,7 +49,6 @@ rosbagは[AWSIM](https://tier4.github.io/AWSIM/)によって作成されたシミュレーションデータです。 マップは、AWSIMのドキュメンテーションページで公開されている[オリジナルマップデータ](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip)を編集したもので、複数の`pose_estimators`に適したものになっています。 - ```bash ros2 launch autoware_launch logging_simulator.launch.xml \ map_path:= \ @@ -69,8 +68,8 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ ### サービス -| 名称 | 種類 | 説明 | -| ----------------- | ------------------------------- | ------------------------------- | +| 名称 | 種類 | 説明 | +| ---------------- | ------------------------------- | ---------------------------- | | `/config_logger` | logging_demo::srv::ConfigLogger | ログレベルを変更するサービス | ### クライアント @@ -99,43 +98,49 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ - 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/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入力 | +| `/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`の障害:** @@ -143,23 +148,22 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ ## 自動運転ソフトウェア -| 名称 | 型 | 説明 | -| ----------------------------------- | ------------------------------------------------------------ | ------------------------------------------------ | -| `/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` | ローカリゼーション初期化状態 | +| 名称 | 型 | 説明 | +| ----------------------------- | -------------------------------------------------------------- | ---------------------------- | +| `/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 | [デバッグトピック] 現在のステータスなどのデバッグ情報 | +| 名前 | タイプ | 説明 | +| -------------------------------------- | --------------------------------------------- | ----------------------------------------------------- | +| `/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 | [デバッグトピック] 現在のステータスなどのデバッグ情報 |
@@ -169,7 +173,6 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ > [!TIP] - > ```bash > ros2 service call /localization/autoware_pose_estimator_arbiter/config_logger logging_demo/srv/ConfigLogger \ > '{logger_name: localization.autoware_pose_estimator_arbiter, level: debug}' @@ -230,7 +233,6 @@ ArTag ストッパーは、ランドマークローカルライザの前にあ ユーザーは、ランタイム引数 `pose_source` にアンダースコアの連結として `pose_estimator` 名を渡すことで、目的の `pose_estimators` を起動できます。 - ```bash ros2 launch autoware_launch logging_simulator.launch.xml \ map_path:= \ @@ -242,14 +244,14 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ 予期しない文字列が `pose_source` に含まれていた場合でも、適切にフィルタされます。 詳細は下記の表を参照してください。 -| 実行時引数 | autoware_pose_estimator_arbiterのパラメータ(pose_source) | -| ----------- | --------------------------------------------------------- | -| `pose_source:=ndt` | `["ndt"]` | -| `pose_source:=nan` | `[]` | -| `pose_source:=yabloc_ndt` | `["ndt","yabloc"]` | -| `pose_source:=yabloc_ndt_ndt_ndt` | `["ndt","yabloc"]` | -| `pose_source:=ndt_yabloc_eagleye` | `["ndt","yabloc","eagleye"]` | -| `pose_source:=ndt_yabloc_nan_eagleye_artag` | `["ndt","yabloc","eagleye","artag"]` | +| 実行時引数 | autoware_pose_estimator_arbiterのパラメータ(pose_source) | +| ------------------------------------------- | -------------------------------------------------------- | +| `pose_source:=ndt` | `["ndt"]` | +| `pose_source:=nan` | `[]` | +| `pose_source:=yabloc_ndt` | `["ndt","yabloc"]` | +| `pose_source:=yabloc_ndt_ndt_ndt` | `["ndt","yabloc"]` | +| `pose_source:=ndt_yabloc_eagleye` | `["ndt","yabloc","eagleye"]` | +| `pose_source:=ndt_yabloc_nan_eagleye_artag` | `["ndt","yabloc","eagleye","artag"]` | ## 切り替えルール @@ -266,7 +268,6 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ これは既定で最もシンプルなルールです。このルールは、現在の状態に関係なく、すべての pose_estimator を有効にします。 - ```mermaid flowchart LR A{ } @@ -292,25 +293,26 @@ flowchart LR 自車位置推定器の組み合わせを指定するだけで、pose_initializer に適切なパラメータが自動的に与えられます。 - **Autoware 開発者:** Autoware 開発者は、どのパラメータが割り当てられているかを知るためにこの表を参照できます。 - **新しい自車位置推定スイッチを実装する人:** -開発者は、この表を拡張し、pose_initializer に適切なパラメータを割り当てるように実装する必要があります。 + 開発者は、この表を拡張し、pose_initializer に適切なパラメータを割り当てるように実装する必要があります。 +
-| pose_source | invoked initialization method | `ndt_enabled` | `yabloc_enabled` | `gnss_enabled` | `sub_gnss_pose_cov` | -| :-------------------------: | ----------------------------- | ------------- | ---------------- | -------------- | -------------------------------------------- | -| ndt | ndt | true | false | true | /sensing/gnss/pose_with_covariance | -| yabloc | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | +| pose_source | invoked initialization method | `ndt_enabled` | `yabloc_enabled` | `gnss_enabled` | `sub_gnss_pose_cov` | +| :-------------------------: | ------------------------------------ | ------------- | ---------------- | -------------- | -------------------------------------------- | +| ndt | ndt | true | false | true | /sensing/gnss/pose_with_covariance | +| yabloc | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | | eagleye | 車両はしばらく走行する必要があります | false | false | true | /localization/pose_estimator/eagleye/... | -| artag | 2D 姿勢推定(RViz) | false | false | true | /sensing/gnss/pose_with_covariance | -| ndt, yabloc | ndt | true | true | true | /sensing/gnss/pose_with_covariance | -| ndt, eagleye | ndt | true | false | true | /sensing/gnss/pose_with_covariance | -| ndt, artag | ndt | true | false | true | /sensing/gnss/pose_with_covariance | -| yabloc, eagleye | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | -| yabloc, artag | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | +| artag | 2D 姿勢推定(RViz) | false | false | true | /sensing/gnss/pose_with_covariance | +| ndt, yabloc | ndt | true | true | true | /sensing/gnss/pose_with_covariance | +| ndt, eagleye | ndt | true | false | true | /sensing/gnss/pose_with_covariance | +| ndt, artag | ndt | true | false | true | /sensing/gnss/pose_with_covariance | +| yabloc, eagleye | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | +| yabloc, artag | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | | eagleye, artag | 車両はしばらく走行する必要があります | false | false | true | /localization/pose_estimator/eagleye/pose... | -| ndt, yabloc, eagleye | ndt | true | true | true | /sensing/gnss/pose_with_covariance | -| ndt, eagleye, artag | ndt | true | false | true | /sensing/gnss/pose_with_covariance | -| yabloc, eagleye, artag | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | -| ndt, yabloc, eagleye, artag | ndt | true | true | true | /sensing/gnss/pose_with_covariance | +| ndt, yabloc, eagleye | ndt | true | true | true | /sensing/gnss/pose_with_covariance | +| ndt, eagleye, artag | ndt | true | false | true | /sensing/gnss/pose_with_covariance | +| yabloc, eagleye, artag | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | +| ndt, yabloc, eagleye, artag | ndt | true | true | true | /sensing/gnss/pose_with_covariance | ## 今後の計画 @@ -335,4 +337,3 @@ pose_estimator に大量の計算を伴う時系列処理が含まれている この問題は複数の pose_estimator を実現するための基本的な問題であり、この場合に提案されたアーキテクチャに関係なく発生することに注意してください。 - diff --git a/localization/autoware_pose_estimator_arbiter/example_rule/README.md b/localization/autoware_pose_estimator_arbiter/example_rule/README.md index d1e42b38109d4..0acc5f7f2bf79 100644 --- a/localization/autoware_pose_estimator_arbiter/example_rule/README.md +++ b/localization/autoware_pose_estimator_arbiter/example_rule/README.md @@ -12,7 +12,6 @@ ### Pcdマップを使用したルール - ```mermaid flowchart LR A{PCD is enough dense } @@ -30,43 +29,42 @@ flowchart LR **1.2. 利点** -* 道路ネットワーク上の走行経路生成を正確化します。 -* 交通状況に適応して安全で効率的な走行を実現します。 +- 道路ネットワーク上の走行経路生成を正確化します。 +- 交通状況に適応して安全で効率的な走行を実現します。 **2. アーキテクチャ** ベクトルマップベースルール機能は、以下のコンポーネントで構成されています。 -* **ベクトルマップ解析器:** ベクトルマップから道路ネットワーク情報を抽出します。 -* **ルール処理:** 道路ネットワーク制約に基づいて走行経路にルールを適用します。 +- **ベクトルマップ解析器:** ベクトルマップから道路ネットワーク情報を抽出します。 +- **ルール処理:** 道路ネットワーク制約に基づいて走行経路にルールを適用します。 **3. ルール** ベクトルマップベースルール機能は、次のようなルールを走行経路に適用します。 -* **車線逸脱量:** 車線境界からの逸脱量を制限します。 -* **加速逸脱量:** 加速に関する制限を適用します。 -* **速度逸脱量:** 速度に関する制限を適用します。 -* **停止線遵守:** 停止線で車両を停止させます。 -* **優先順位付き交差点:** 交差点における優先順位を遵守します。 +- **車線逸脱量:** 車線境界からの逸脱量を制限します。 +- **加速逸脱量:** 加速に関する制限を適用します。 +- **速度逸脱量:** 速度に関する制限を適用します。 +- **停止線遵守:** 停止線で車両を停止させます。 +- **優先順位付き交差点:** 交差点における優先順位を遵守します。 **4. 使用方法** ベクトルマップベースルール機能を使用するには、次の手順に従います。 -* Autoware.Autoのルート設定ファイルでベクトルマップパスを指定します。 -* ナビゲーションコンポーネントを有効にします。 -* `post resampling`を使用している場合は、Planningパラメータを設定してベクトルマップベースのルールを有効にします。 +- Autoware.Autoのルート設定ファイルでベクトルマップパスを指定します。 +- ナビゲーションコンポーネントを有効にします。 +- `post resampling`を使用している場合は、Planningパラメータを設定してベクトルマップベースのルールを有効にします。 **5. 制限事項** -* ベクトルの品質に依存します。 -* すべての道路をカバーしていない場合があります。 +- ベクトルの品質に依存します。 +- すべての道路をカバーしていない場合があります。 **6. 関連ドキュメント** -* [Autoware.Autoドキュメント](https://autoware.github.io/autoware.auto/) - +- [Autoware.Autoドキュメント](https://autoware.github.io/autoware.auto/) ```mermaid flowchart LR @@ -95,7 +93,6 @@ flowchart LR エリアが正しく読み取られていることを確認するには、エリアのタイプを「`pose_estimator_specify`」にして、サブタイプをndt、yabloc、eagleye、またはartagのいずれかにします。 - ```xml @@ -145,4 +142,3 @@ flowchart LR ``` - diff --git a/localization/autoware_pose_initializer/README.md b/localization/autoware_pose_initializer/README.md index 4bdf0d275cba9..2ced2cf100fb6 100644 --- a/localization/autoware_pose_initializer/README.md +++ b/localization/autoware_pose_initializer/README.md @@ -12,64 +12,69 @@ ### サービス -| 名前 | タイプ | 説明 | -| -------------------------- | ---------------------------------------------------- | ----------------------- | -| `/localization/initialize` | tier4_localization_msgs::srv::InitializeLocalization | APIからの初期位置 | +| 名前 | タイプ | 説明 | +| -------------------------- | ---------------------------------------------------- | ----------------- | +| `/localization/initialize` | tier4_localization_msgs::srv::InitializeLocalization | APIからの初期位置 | ### クライアント -| 名称 | タイプ | 説明 | -| --------------------------------------- | --------------------------------------------------------- | ------------------------- | -| `/localization/pose_estimator/ndt_align_srv` | tier4_localization_msgs::srv::PoseWithCovarianceStamped | 位推定サービス | +| 名称 | タイプ | 説明 | +| -------------------------------------------- | ------------------------------------------------------- | -------------- | +| `/localization/pose_estimator/ndt_align_srv` | tier4_localization_msgs::srv::PoseWithCovarianceStamped | 位推定サービス | ### サブスクリプション - - -| 名称 | タイプ | 説明 | -|---|---|---| -| `/sensing/gnss/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | GNSSから取得した自車位置 | -| `/sensing/vehicle_velocity_converter/twist_with_covariance` | geometry_msgs::msg::TwistStamped | 停止確認用の速度 | +| 名称 | タイプ | 説明 | +| ----------------------------------------------------------- | --------------------------------------------- | ------------------------ | +| `/sensing/gnss/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | GNSSから取得した自車位置 | +| `/sensing/vehicle_velocity_converter/twist_with_covariance` | geometry_msgs::msg::TwistStamped | 停止確認用の速度 | ### 論文 ### Autoware の技術スタック + Autoware は、自動運転車両の開発と実装のためのオープンソースソフトウェアプラットフォームです。以下に、主なコンポーネントとモジュールをリストします。 #### Planning -* **Motion Planning:** 車両の安全で効率的な経路を生成します。 -* **Behavior Planning:** 車両の挙動を決定し、障害物回避や速度調整を行います。 + +- **Motion Planning:** 車両の安全で効率的な経路を生成します。 +- **Behavior Planning:** 車両の挙動を決定し、障害物回避や速度調整を行います。 #### Perception -* **Object Detection (2D/3D):** センサーからのデータを使用して、車両周辺の物体(歩行者、車両、障害物など)を検出します。 -* **Lane Detection:** カメラ画像を使用して、道路上の車線を検出します。 -* **Free Space Estimation:** 車両周辺の走行可能な領域を推定します。 + +- **Object Detection (2D/3D):** センサーからのデータを使用して、車両周辺の物体(歩行者、車両、障害物など)を検出します。 +- **Lane Detection:** カメラ画像を使用して、道路上の車線を検出します。 +- **Free Space Estimation:** 車両周辺の走行可能な領域を推定します。 #### Control -* **Longitudinal Control:** 車両の縦方向運動(加速度、減速度)を制御します。 -* **Lateral Control:** 車両の横方向運動(ステアリング)を制御します。 -* **Path Tracking:** 生成されたパスに従って車両を誘導します。 + +- **Longitudinal Control:** 車両の縦方向運動(加速度、減速度)を制御します。 +- **Lateral Control:** 車両の横方向運動(ステアリング)を制御します。 +- **Path Tracking:** 生成されたパスに従って車両を誘導します。 #### Localization -* **Odometry:** IMUやGNSSなどのセンサーを使用して、自車位置を推定します。 -* **Mapping:** 環境の地図を作成し、自車位置をローカライズするために使用します。 -* **Loop Closure Detection:** 地図内のループを検出し、ローカライゼーションの精度を向上させます。 + +- **Odometry:** IMUやGNSSなどのセンサーを使用して、自車位置を推定します。 +- **Mapping:** 環境の地図を作成し、自車位置をローカライズするために使用します。 +- **Loop Closure Detection:** 地図内のループを検出し、ローカライゼーションの精度を向上させます。 #### Sensor Interface -* **Sensor Fusion:** 複数のセンサーからのデータを統合し、より正確で堅牢な認識情報を作成します。 -* **'Post Resampling' Sensor Fusion:** センサーデータの処理を最適化して、リアルタイムパフォーマンスを向上させます。 + +- **Sensor Fusion:** 複数のセンサーからのデータを統合し、より正確で堅牢な認識情報を作成します。 +- **'Post Resampling' Sensor Fusion:** センサーデータの処理を最適化して、リアルタイムパフォーマンスを向上させます。 #### Software Architecture -* **ROS 2:** Autoware のコアアーキテクチャとして使用される、堅牢でスケーラブルなミドルウェア。 -* **DDS:** データをリアルタイムで配信するための高性能ミドルウェア。 -* **Python:** スクリプティングや構成に使用されます。 -* **C++:** リアルタイムコンポーネントやカーネルモジュールに使用されます。 - -| 名称 | 型 | 説明 | -| ------------------------------------ | ------------------------------------------------------------ | --------------------------- | -| `/localization/initialization_state` | autoware_adapi_v1_msgs::msg::LocalizationInitializationState | 位相初期化状態 | + +- **ROS 2:** Autoware のコアアーキテクチャとして使用される、堅牢でスケーラブルなミドルウェア。 +- **DDS:** データをリアルタイムで配信するための高性能ミドルウェア。 +- **Python:** スクリプティングや構成に使用されます。 +- **C++:** リアルタイムコンポーネントやカーネルモジュールに使用されます。 + +| 名称 | 型 | 説明 | +| ------------------------------------ | ------------------------------------------------------------ | ---------------------- | +| `/localization/initialization_state` | autoware_adapi_v1_msgs::msg::LocalizationInitializationState | 位相初期化状態 | | `/initialpose3d` | geometry_msgs::msg::PoseWithCovarianceStamped | 計算された自車初期位相 | -| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | 診断 | +| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | 診断 | ## 診断 @@ -89,7 +94,6 @@ Autoware は、自動運転車両の開発と実装のためのオープンソ ### GNSS推定位置の使用 - ```bash ros2 service call /localization/initialize tier4_localization_msgs/srv/InitializeLocalization ``` @@ -98,7 +102,6 @@ GNSS 推定位置は初期推測として使用され、局所化アルゴリズ ### 入力位置の使用 - ```bash ros2 service call /localization/initialize tier4_localization_msgs/srv/InitializeLocalization " pose_with_covariance: @@ -124,7 +127,6 @@ method: 0 ### 直接的な初期位置セット - ```bash ros2 service call /localization/initialize tier4_localization_msgs/srv/InitializeLocalization " pose_with_covariance: @@ -150,7 +152,6 @@ method: 1 ### Via ros2 トピックの送信 - ```bash ros2 topic pub --once /initialpose geometry_msgs/msg/PoseWithCovarianceStamped " header: @@ -171,4 +172,3 @@ pose: 「initialpose (rviz から)」と同じ動作をします。 [ad_api_adaptors](https://github.com/autowarefoundation/autoware.universe/tree/main/system/default_ad_api_helpers/ad_api_adaptors) によって position.z と共分散が上書きされるため、それらを入力する必要はありません。 - diff --git a/localization/autoware_pose_instability_detector/README.md b/localization/autoware_pose_instability_detector/README.md index 55b82c9b702f2..2a006e4059922 100644 --- a/localization/autoware_pose_instability_detector/README.md +++ b/localization/autoware_pose_instability_detector/README.md @@ -57,13 +57,13 @@ $$ \tau_x = v_{\rm max}\frac{\beta_v}{100} \Delta t + \epsilon_x\\ $$ -| 記号 | 説明 | 単位 | -| ------------- | -------------------------------------------------------------------------------- | ----- | -| $\tau_x$ | 縦軸方向の差のしきい値 | m | -| $v_{\rm max}$ | 最大速度 | m/s | -| $\beta_v$ | 最大速度の許容スケールファクター | $\%$ | -| $\Delta t$ | 時間間隔 | s | -| $\epsilon_x$ | 姿勢推定器(例:ndt_scan_matcher)の縦軸方向の誤差許容値 | m | +| 記号 | 説明 | 単位 | +| ------------- | -------------------------------------------------------- | ---- | +| $\tau_x$ | 縦軸方向の差のしきい値 | m | +| $v_{\rm max}$ | 最大速度 | m/s | +| $\beta_v$ | 最大速度の許容スケールファクター | $\%$ | +| $\Delta t$ | 時間間隔 | s | +| $\epsilon_x$ | 姿勢推定器(例:ndt_scan_matcher)の縦軸方向の誤差許容値 | m | ### `diff_position_y` および `diff_position_z` @@ -79,11 +79,11 @@ $$ \tau_y = l + \epsilon_y $$ -| シンボル | 説明 | 単位 | -| ------------ | ----------------------------------------------------------------------------------------------- | ---- | -| $\tau_y$ | 横軸誤差の閾値 | $m$ | -| $l$ | 上記の画像で示される最大横方向距離 (計算方法は付録を参照) | $m$ | -| $\epsilon_y$ | ポーズ推定器 (例: ndt_scan_matcher) の横軸方向での許容誤差 | $m$ | +| シンボル | 説明 | 単位 | +| ------------ | ---------------------------------------------------------- | ---- | +| $\tau_y$ | 横軸誤差の閾値 | $m$ | +| $l$ | 上記の画像で示される最大横方向距離 (計算方法は付録を参照) | $m$ | +| $\epsilon_y$ | ポーズ推定器 (例: ndt_scan_matcher) の横軸方向での許容誤差 | $m$ | `pose_instability_detector`では、y軸のしきい値はx軸と同じ値に設定されています。相違するのはpose estimatorの誤差許容度だけです。 @@ -95,16 +95,16 @@ $$ \tau_\phi = \tau_\theta = \tau_\psi = \left(\omega_{\rm max}\frac{\beta_\omega}{100} + b \right) \Delta t + \epsilon_\psi $$ -| 記号 | 説明 | 単位 | -|---|---|---| -| $\tau_\phi$ | ロール角差のしきい値 | rad | -| $\tau_\theta$ | ピッチ角差のしきい値 | rad | -| $\tau_\psi$ | ヨー角差のしきい値 | rad | -| $\omega_{\rm max}$ | 最大角速度 | rad/s | -| $\beta_\omega$ | 最大角速度の許容スケール誤差 | % | -| $b$ | 角速度のバイアス許容値 | rad/s | -| $\Delta t$ | 時間間隔 | s | -| $\epsilon_\psi$ | 姿勢推定器(例:ndt_scan_matcher)のヨー角エラー許容値 | rad | +| 記号 | 説明 | 単位 | +| ------------------ | ------------------------------------------------------ | ----- | +| $\tau_\phi$ | ロール角差のしきい値 | rad | +| $\tau_\theta$ | ピッチ角差のしきい値 | rad | +| $\tau_\psi$ | ヨー角差のしきい値 | rad | +| $\omega_{\rm max}$ | 最大角速度 | rad/s | +| $\beta_\omega$ | 最大角速度の許容スケール誤差 | % | +| $b$ | 角速度のバイアス許容値 | rad/s | +| $\Delta t$ | 時間間隔 | s | +| $\epsilon_\psi$ | 姿勢推定器(例:ndt_scan_matcher)のヨー角エラー許容値 | rad | ## パラメーター @@ -112,10 +112,10 @@ $$ ## 入力 -| 名称 | 型 | 説明 | -| -------------------- | ----------------------------------------------- | --------------------- | -| `~/input/odometry` | `nav_msgs::msg::Odometry` | EKFにより推定された姿勢 | -| `~/input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | ひねりだけでなく速度も表す | +| 名称 | 型 | 説明 | +| ------------------ | ------------------------------------------------ | -------------------------- | +| `~/input/odometry` | `nav_msgs::msg::Odometry` | EKFにより推定された姿勢 | +| `~/input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | ひねりだけでなく速度も表す | ## 出力 @@ -125,9 +125,9 @@ $$ 私たちのソフトウェアは、安全で効率的な自動運転を実現するために必要なすべてのモジュールを含んでいます。これらは、以下のコンポーネントで構成されています。 -* **Planning (計画)**: パスを生成し、速度プロフィールを決定します。 -* **Control (制御)**: 計画されたパスに従って車両を制御します。 -* **Perception (認識)**: 周囲環境を認識し、障害物や道路標識を検出します。 +- **Planning (計画)**: パスを生成し、速度プロフィールを決定します。 +- **Control (制御)**: 計画されたパスに従って車両を制御します。 +- **Perception (認識)**: 周囲環境を認識し、障害物や道路標識を検出します。 ### 2. アーキテクチャ @@ -157,9 +157,9 @@ Perceptionモジュールは、LIDARとカメラデータを使用して、障 私たちのソフトウェアは、以下の安全性機能を備えています。 -* **障害物検出**: 周囲の障害物を検出し、衝突を回避します。 -* **速度制限**: 設定された速度制限を超えないように車両を制御します。 -* **自己診断**: システムのコンポーネントを監視し、異常を検出します。 +- **障害物検出**: 周囲の障害物を検出し、衝突を回避します。 +- **速度制限**: 設定された速度制限を超えないように車両を制御します。 +- **自己診断**: システムのコンポーネントを監視し、異常を検出します。 ### 6. 性能 @@ -175,13 +175,13 @@ Planningモジュールは、障害物を効果的に回避し、安全なパス 自動運転ソフトウェアの開発には、以下のような課題があります。 -* **障害物の検出**: すべての種類の障害物を確実に検出することは困難な場合があります。 -* **Planing**: 障害物が多い環境では、安全で効率的なパスを生成するのは困難な場合があります。 -* **安全性**: 自動運転車両は、あらゆる状況で安全に行動する必要があります。 +- **障害物の検出**: すべての種類の障害物を確実に検出することは困難な場合があります。 +- **Planing**: 障害物が多い環境では、安全で効率的なパスを生成するのは困難な場合があります。 +- **安全性**: 自動運転車両は、あらゆる状況で安全に行動する必要があります。 私たちは、これらの課題に取り組み、私たちのソフトウェアを継続的に改善しています。 -| 名前 | タイプ | 説明 | +| 名前 | タイプ | 説明 | | ------------------- | ------------------------------------- | ----------- | | `~/debug/diff_pose` | geometry_msgs::msg::PoseStamped | diff_pose | | `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | Diagnostics | @@ -190,7 +190,7 @@ Planningモジュールは、障害物を効果的に回避し、安全なパス 最大横距離 $l$ の計算では、`pose_instability_detector` ノードは次の姿勢を推定します。 -| 自車位置 | heading速度 $v$ | angular速度 $\omega$ | +| 自車位置 | heading速度 $v$ | angular速度 $\omega$ | | ------------------------------- | ------------------------------------------------ | -------------------------------------------------------------- | | Nominalデッドレコニング位置 | $v_{\rm max}$ | $\omega_{\rm max}$ | | コーナーAのデッドレコニング位置 | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | @@ -227,4 +227,3 @@ $$ $$ 各コーナーについてこの変動を計算し、予測航法ポーズとコーナーポーズの距離を比較することで、横距離 $l$ の最大値を取得します。 - diff --git a/localization/autoware_stop_filter/README.md b/localization/autoware_stop_filter/README.md index 912946ed52de9..759aaaecc5488 100644 --- a/localization/autoware_stop_filter/README.md +++ b/localization/autoware_stop_filter/README.md @@ -12,12 +12,14 @@ ### 入力 -| 名称 | タイプ | 説明 | -| ------------ | ------------------------- | --------------------- | +| 名称 | タイプ | 説明 | +| ------------ | ------------------------- | ------------------------------ | | `input/odom` | `nav_msgs::msg::Odometry` | ローカライゼーションオドメトリ | ### 出力 + #### ドキュメント: 自動運転ソフトウェア概要 + **URL:** 自動運転ソフトウェアは、車両の安全で効率的な自動運転を可能にするソフトウェアシステムです。このドキュメントでは、Autowareのアーキテクチャ、コンポーネント、インターフェイスについて説明します。 @@ -26,42 +28,42 @@ Autowareは、モジュール式で階層的なアーキテクチャを採用しています。各モジュールは、特定の機能を実行し、他のモジュールとインターフェイスします。主なモジュールを以下に示します。 -* **Perception:** センサーデータから環境認識を実行します。 -* **Localization:** GNSS、IMU、LiDARなどのセンサーを統合して自車位置を推定します。 -* **Planning:** 安全で効率的な経路を生成します。 -* **Control:** 計画された経路に従って車両を制御します。 -* **Behavior Planning:** ハザード回避、車線変更などの高レベルの動作を決定します。 -* **Decision Making:** PerceptionとPlanningの出力を統合して運転判断を下します。 +- **Perception:** センサーデータから環境認識を実行します。 +- **Localization:** GNSS、IMU、LiDARなどのセンサーを統合して自車位置を推定します。 +- **Planning:** 安全で効率的な経路を生成します。 +- **Control:** 計画された経路に従って車両を制御します。 +- **Behavior Planning:** ハザード回避、車線変更などの高レベルの動作を決定します。 +- **Decision Making:** PerceptionとPlanningの出力を統合して運転判断を下します。 **コンポーネント** Autowareの主なコンポーネントを以下に示します。 -* **Node Manager:** ノード間の通信を管理します。 -* **Estimator:** IMU、GNSS、LiDARデータを使用して車両の動きを推定します。 -* **Perception:** LiDAR、カメラ、レーダーデータからオブジェクトを検出し、分類します。 -* **Map:** 経路計画に使用される環境マップを提供します。 -* **Planning:** 経路の選択、速度計画を実行します。 -* **Control:** ステアリング、アクセル、ブレーキを制御します。 -* **Safety Monitor:** システムの健全性を監視し、異常が発生した場合に介入します。 +- **Node Manager:** ノード間の通信を管理します。 +- **Estimator:** IMU、GNSS、LiDARデータを使用して車両の動きを推定します。 +- **Perception:** LiDAR、カメラ、レーダーデータからオブジェクトを検出し、分類します。 +- **Map:** 経路計画に使用される環境マップを提供します。 +- **Planning:** 経路の選択、速度計画を実行します。 +- **Control:** ステアリング、アクセル、ブレーキを制御します。 +- **Safety Monitor:** システムの健全性を監視し、異常が発生した場合に介入します。 **インターフェイス** Autowareのコンポーネントは、ROS(Robot Operating System)を使用して相互に通信します。主なインターフェイスを以下に示します。 -* **/current_pose:** 自車位置と姿勢 -* **/detected_objects:** 感知されたオブジェクトの情報 -* **/planned_path:** 計画された経路 -* **/control_command:** 車両の制御コマンド -* **/safety_status:** システムの健全性に関する情報 +- **/current_pose:** 自車位置と姿勢 +- **/detected_objects:** 感知されたオブジェクトの情報 +- **/planned_path:** 計画された経路 +- **/control_command:** 車両の制御コマンド +- **/safety_status:** システムの健全性に関する情報 **逸脱量** AutowareのPlanningコンポーネントは、経路計画中に以下のような逸脱量を考慮します。 -* velocity_deceleration:** 速度逸脱量 -* acceleration_deceleration:** 加速度逸脱量 -* jerk_deceleration:** ジャーク逸脱量 +- velocity_deceleration:\*\* 速度逸脱量 +- acceleration_deceleration:\*\* 加速度逸脱量 +- jerk_deceleration:\*\* ジャーク逸脱量 **'post resampling'** @@ -71,15 +73,14 @@ Planningコンポーネントは、Planningされた経路を'post resampling' Autowareの詳細については、以下のリソースを参照してください。 -* [Autoware公式サイト](https://www.autoware.org) -* [Autowareドキュメント](https://docs.autoware.org/) +- [Autoware公式サイト](https://www.autoware.org) +- [Autowareドキュメント](https://docs.autoware.org/) -| 名前 | 型 | 説明 | -| ----------------- | ------------------------------------- | ---------------------------------------------------------- | -| `output/odom` | `nav_msgs::msg::Odometry` | 縦方向とヨー方向のツイストが抑制されたオドメトリ | -| `debug/stop_flag` | `tier4_debug_msgs::msg::BoolStamped` | 車両が停止しているかどうかを示すフラグ | +| 名前 | 型 | 説明 | +| ----------------- | ------------------------------------ | ------------------------------------------------ | +| `output/odom` | `nav_msgs::msg::Odometry` | 縦方向とヨー方向のツイストが抑制されたオドメトリ | +| `debug/stop_flag` | `tier4_debug_msgs::msg::BoolStamped` | 車両が停止しているかどうかを示すフラグ | ## パラメータ {{ json_to_markdown("localization/autoware_stop_filter/schema/stop_filter.schema.json") }} - diff --git a/localization/autoware_twist2accel/README.md b/localization/autoware_twist2accel/README.md index 8c66fb02f424e..6bbb5bbff44da 100644 --- a/localization/autoware_twist2accel/README.md +++ b/localization/autoware_twist2accel/README.md @@ -8,10 +8,10 @@ ### 入力 -| 名前 | タイプ | 説明 | -| ------------- | ----------------------------------------------- | --------------- | +| 名前 | タイプ | 説明 | +| ------------- | ------------------------------------------------ | ---------------------------- | | `input/odom` | `nav_msgs::msg::Odometry` | ローカリゼーションオドメトリ | -| `input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | ツイスト | +| `input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | ツイスト | ### 出力 @@ -25,37 +25,37 @@ Planningモジュールは、自車の将来的なパスを生成する責任を負います。以下のサブモジュールで構成されます。 -* **Path Planning:** 自車の経路を生成します。 -* **Behavior Planning:** 自車の速度と加速度のトラジェクトリを生成します。 -* **Trajectory Optimization:** `post resampling`と加速度滑ら化を使用して、トラジェクトリを最適化します。 +- **Path Planning:** 自車の経路を生成します。 +- **Behavior Planning:** 自車の速度と加速度のトラジェクトリを生成します。 +- **Trajectory Optimization:** `post resampling`と加速度滑ら化を使用して、トラジェクトリを最適化します。 **3. Predictionモジュール** Predictionモジュールは、周囲環境の動的物体を予測する責任を負います。次のサブモジュールで構成されます。 -* **Object Tracking:** レーザーセンサーとカメラ画像を使用して、周囲の物体を追跡します。 -* **Motion Forecasting:** 物体の将来的な運動を予測します。 -* **Intent Recognition:** 物体の意図を認識し、それらの将来的な行動を予測します。 +- **Object Tracking:** レーザーセンサーとカメラ画像を使用して、周囲の物体を追跡します。 +- **Motion Forecasting:** 物体の将来的な運動を予測します。 +- **Intent Recognition:** 物体の意図を認識し、それらの将来的な行動を予測します。 **4. Controlモジュール** Controlモジュールは、Planningモジュールで生成されたパスおよびトラジェクトリに基づいて、車両を制御します。次のサブモジュールで構成されます。 -* **Lateral Control:** 車両の横方向の運動を制御します。 -* **Longitudinal Control:** 車両の縦方向の運動を制御します。 -* **Safety Monitor:** 安全性を確保し、必要に応じて緊急停止します。 +- **Lateral Control:** 車両の横方向の運動を制御します。 +- **Longitudinal Control:** 車両の縦方向の運動を制御します。 +- **Safety Monitor:** 安全性を確保し、必要に応じて緊急停止します。 **5. パフォーマンス評価** 自動運転ソフトウェアのパフォーマンスは、以下の指標を使用して評価されます。 -* **障害物回避距離:** 自車が障害物を検出して回避するまでの距離。 -* **速度逸脱量:** 自車の実際の速度と理想的な速度との差。 -* **加速度逸脱量:** 自車の実際の加速度と理想的な加速度との差。 -* **追従距離逸脱量:** 自車と前走車との距離の差。 +- **障害物回避距離:** 自車が障害物を検出して回避するまでの距離。 +- **速度逸脱量:** 自車の実際の速度と理想的な速度との差。 +- **加速度逸脱量:** 自車の実際の加速度と理想的な加速度との差。 +- **追従距離逸脱量:** 自車と前走車との距離の差。 -| 名称 | 型 | 説明 | -| -------------- | ------------------------------------------------ | ---------------------- | +| 名称 | 型 | 説明 | +| -------------- | ------------------------------------------------ | ---------- | | `output/accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 推定加速度 | ## パラメータ @@ -65,4 +65,3 @@ Controlモジュールは、Planningモジュールで生成されたパスお ## 今後の取り組み 今後の取り組みとしては、加速度を EKF 状態に統合することが含まれます。 - diff --git a/localization/yabloc/README.md b/localization/yabloc/README.md index 0e4168c9b711b..0e71701ddc881 100644 --- a/localization/yabloc/README.md +++ b/localization/yabloc/README.md @@ -21,7 +21,6 @@ Autoware を起動するときに、`pose_source:=yabloc` を引数として設 YabLoc を実行するためのコマンドの例を以下に示します。 - ```shell ros2 launch autoware_launch logging_simulator.launch.xml \ map_path:=$HOME/autoware_map/sample-map-rosbag\ @@ -51,10 +50,10 @@ YabLocはこれらのセグメントを各パーティクルに変換し、そ -| index | トピック名 | 説明 | -| ----- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | `/localization/yabloc/pf/predicted_particle_marker` | パーティクルフィルタの粒子分布。赤い粒子は有力候補を示す。 | -| 2 | `/localization/yabloc/pf/scored_cloud` | 3D投影線分群。色はマップとの一致度を示す。 | +| index | トピック名 | 説明 | +| ----- | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | `/localization/yabloc/pf/predicted_particle_marker` | パーティクルフィルタの粒子分布。赤い粒子は有力候補を示す。 | +| 2 | `/localization/yabloc/pf/scored_cloud` | 3D投影線分群。色はマップとの一致度を示す。 | | 3 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | 推定された自車位置に基づいて画像にレーンレット2(黄色の線)を重ねた画像。実際の道路標識とよく一致していれば、ローカリゼーションが正確に行われていることを示す。 | ### デバッグ用の画像トピック @@ -63,23 +62,22 @@ YabLocはこれらのセグメントを各パーティクルに変換し、そ -| index | トピック名 | 説明 | -| ----- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| 1 | `/localization/yabloc/pf/cost_map_image` | レーンレット2から作成されたコストマップ | -| 2 | `/localization/yabloc/pf/match_image` | 射影された線分 | -| 3 | `/localization/yabloc/image_processing/image_with_colored_line_segment` | 分類された線分。緑色の線分は、パーティクル補正に使用されます | -| 4 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | レーンレット2のオーバーレイ | -| 5 | `/localization/yabloc/image_processing/segmented_image` | グラフベースのセグメンテーション結果 | +| index | トピック名 | 説明 | +| ----- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | +| 1 | `/localization/yabloc/pf/cost_map_image` | レーンレット2から作成されたコストマップ | +| 2 | `/localization/yabloc/pf/match_image` | 射影された線分 | +| 3 | `/localization/yabloc/image_processing/image_with_colored_line_segment` | 分類された線分。緑色の線分は、パーティクル補正に使用されます | +| 4 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | レーンレット2のオーバーレイ | +| 5 | `/localization/yabloc/image_processing/segmented_image` | グラフベースのセグメンテーション結果 | ## 制限事項 - YabLocとNDTを同時に動作させることはサポートされていません。 - - 二つを同時に動作させることは計算コストが高くなる可能性があるためです。 - - また、ほとんどの場合NDTはYabLocよりも優れているため、同時に動作させることのメリットは少ないです。 + - 二つを同時に動作させることは計算コストが高くなる可能性があるためです。 + - また、ほとんどの場合NDTはYabLocよりも優れているため、同時に動作させることのメリットは少ないです。 - ロールとピッチの推定を行わないため、一部の認識ノードが正しく動作しない可能性があります。 - 現在、複数のカメラはサポートされていません。将来的にはサポートされる予定です。 - 交差点など、路面標示が少ない場所では、推定はGNSS、IMU、車両のホイールオドメトリに大きく依存します。 - Lanelet2に路面境界または路面標示が含まれていない場合、推定は失敗する可能性があります。 - Autowareチュートリアルで提供されているサンプルrosbagには画像が含まれていないため、YabLocで実行することはできません。 - - YabLocの機能をテストしたい場合は、この[PR](https://github.com/autowarefoundation/autoware.universe/pull/3946)で提供されているサンプルテストデータが役立ちます。 - + - YabLocの機能をテストしたい場合は、この[PR](https://github.com/autowarefoundation/autoware.universe/pull/3946)で提供されているサンプルテストデータが役立ちます。 diff --git a/localization/yabloc/yabloc_common/README.md b/localization/yabloc/yabloc_common/README.md index 5a906338b8f9e..db4c3d83cfa7a 100644 --- a/localization/yabloc/yabloc_common/README.md +++ b/localization/yabloc/yabloc_common/README.md @@ -15,10 +15,10 @@ #### 入力 -| 名称 | 種別 | 説明 | -| ------------------ | -------------------------------------- | ----------------------------------- | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクタマップ | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置 | +| 名称 | 種別 | 説明 | +| ------------------ | --------------------------------------- | ------------ | +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクタマップ | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置 | #### 出力 @@ -82,13 +82,13 @@ このソフトウェアは開発中のソフトウェアであり、すべての状況で確実に機能するわけではありません。自動運転中は常に周囲に注意を払い、必要に応じて手動操作を行ってください。 ``` -| 名称 | タイプ | 説明 | -| ----------------------- | ------------------------------------- | ------------------------------------------------------------------------------- | +| 名称 | タイプ | 説明 | +| ----------------------- | ---------------------------------- | -------------------------------------------------------------------------- | | `output/ground` | `std_msgs::msg::Float32MultiArray` | 推定された路面パラメーター。x、y、z、normal_x、normal_y、normal_z を含む。 | -| `output/ground_markers` | `visualization_msgs::msg::Marker` | 推定された路面の状態の可視化 | -| `output/ground_status` | `std_msgs::msg::String` | 路面状態の推定状態のログ | -| `output/height` | `std_msgs::msg::Float32` | 高度 | -| `output/near_cloud` | `sensor_msgs::msg::PointCloud2` | Lanelet2 から抽出され、路面の傾斜推定に使用される点群 | +| `output/ground_markers` | `visualization_msgs::msg::Marker` | 推定された路面の状態の可視化 | +| `output/ground_status` | `std_msgs::msg::String` | 路面状態の推定状態のログ | +| `output/height` | `std_msgs::msg::Float32` | 高度 | +| `output/near_cloud` | `sensor_msgs::msg::PointCloud2` | Lanelet2 から抽出され、路面の傾斜推定に使用される点群 | ### パラメーター @@ -104,8 +104,8 @@ #### 入力 -| 名称 | タイプ | 説明 | -|---|---|---| +| 名称 | タイプ | 説明 | +| ------------------ | --------------------------------------- | ------------ | | `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vectorマップ | #### 出力 @@ -136,38 +136,37 @@ Planningコンポーネントは、次のサブコンポーネントで構成さ Planningコンポーネントは、次の機能を実行します。 -* Perceptionによって提供される環境情報を使用して、安全な経路を計画します。 -* Predictionによって提供される物体の動き予測を使用して、計画された経路に沿った衝突の可能性を評価します。 -* 車両の速度、加速度逸脱量、操舵逸脱量などの制約を考慮して、実行可能な挙動を生成します。 +- Perceptionによって提供される環境情報を使用して、安全な経路を計画します。 +- Predictionによって提供される物体の動き予測を使用して、計画された経路に沿った衝突の可能性を評価します。 +- 車両の速度、加速度逸脱量、操舵逸脱量などの制約を考慮して、実行可能な挙動を生成します。 **Planningコンポーネントの入力** Planningコンポーネントの入力には、次のものが含まれます。 -* 自車位置 -* Perceptionによって提供される環境データ -* Predictionによって提供される物体の動き予測 -* 車両の制限事項 +- 自車位置 +- Perceptionによって提供される環境データ +- Predictionによって提供される物体の動き予測 +- 車両の制限事項 **Planningコンポーネントの出力** Planningコンポーネントの出力には、次のものが含まれます。 -* 安全な経路 -* 車両の加速、減速、操舵の挙動 +- 安全な経路 +- 車両の加速、減速、操舵の挙動 **追加のリソース** -* [Autoware 公式ドキュメント](https://docs.autoware.org/) +- [Autoware 公式ドキュメント](https://docs.autoware.org/) -| 名称 | タイプ | 説明 | -| -------------------------- | ------------------------------------- | -------------------------------------- | +| 名称 | タイプ | 説明 | +| -------------------------- | -------------------------------------- | ------------------------------------------------ | | `output/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出したバウンディングボックス | -| `output/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出した路面標示 | -| `output/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出した標識 | -| `output/sign_board_marker` | `visualization_msgs::msg::MarkerArray` | 可視化された標識 | +| `output/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出した路面標示 | +| `output/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出した標識 | +| `output/sign_board_marker` | `visualization_msgs::msg::MarkerArray` | 可視化された標識 | ### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_common/schema/ll2_decomposer.schema.json") }} - diff --git a/localization/yabloc/yabloc_image_processing/README.md b/localization/yabloc/yabloc_image_processing/README.md index 2a2cda3e9a507..f534ca677d9b8 100644 --- a/localization/yabloc/yabloc_image_processing/README.md +++ b/localization/yabloc/yabloc_image_processing/README.md @@ -19,8 +19,8 @@ #### 入力 -| 名前 | タイプ | 説明 | -| ----------------- | ------------------------ | ----------------- | +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------- | -------- | | `input/image_raw` | `sensor_msgs::msg::Image` | 非歪画像 | ## 自動運転ソフトウェアドキュメント(マークダウン形式) @@ -73,10 +73,10 @@ Integrationモジュールは、Planningモジュール、Controlモジュール Autowareのアーキテクチャがご理解いただけたかと思います。質問やご提案がありましたら、お気軽にお問い合わせください。 -| 名称 | タイプ | 説明 | -| ------------------------------------ | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| `output/image_with_line_segments` | `sensor_msgs::msg::Image` | 線分を強調表示した画像 | -| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 点群としての検出された線分。各点は x、y、z、normal_x、normal_y、normal_z を含み、z と normal_z は常に空です。 | +| 名称 | タイプ | 説明 | +| --------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `output/image_with_line_segments` | `sensor_msgs::msg::Image` | 線分を強調表示した画像 | +| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 点群としての検出された線分。各点は x、y、z、normal_x、normal_y、normal_z を含み、z と normal_z は常に空です。 | ## graph_segmentation @@ -88,8 +88,8 @@ Autowareのアーキテクチャがご理解いただけたかと思います。 #### 入力 -| Name | Type | Description | -| ----------------- | ------------------------- | ----------------- | +| Name | Type | Description | +| ----------------- | ------------------------- | ------------------ | | `input/image_raw` | `sensor_msgs::msg::Image` | 歪み補正された画像 | ## 自動運転ソフトウェア仕様書 @@ -102,62 +102,62 @@ Autowareのアーキテクチャがご理解いただけたかと思います。 #### 入出力 -* **入力:** - * 自車位置 - * マップ - * 障害物検出 -* **出力:** - * 経路 - * 加速 - * ハンドリング +- **入力:** + - 自車位置 + - マップ + - 障害物検出 +- **出力:** + - 経路 + - 加速 + - ハンドリング #### アルゴリズム 計画コンポーネントは、以下を含むさまざまなアルゴリズムを使用している: -* **経路計画:** A*アルゴリズム、Dijkstraアルゴリズム -* **動作計画:** Model Predictive Control (MPC)、最適制御 -* **障害物回避:** Velocity Obstacles法、Dynamic Window Approach (DWA) +- **経路計画:** A\*アルゴリズム、Dijkstraアルゴリズム +- **動作計画:** Model Predictive Control (MPC)、最適制御 +- **障害物回避:** Velocity Obstacles法、Dynamic Window Approach (DWA) #### パフォーマンス指標 -* **経路の安全性:** 障害物逸脱量、速度逸脱量、加速度逸脱量の最小化 -* **経路の効率性:** 移動時間の最小化、燃料消費の最小化 -* **計算時間:** リアルタイム要件の遵守 +- **経路の安全性:** 障害物逸脱量、速度逸脱量、加速度逸脱量の最小化 +- **経路の効率性:** 移動時間の最小化、燃料消費の最小化 +- **計算時間:** リアルタイム要件の遵守 #### システムアーキテクチャ 計画コンポーネントは、以下を含むモジュール式アーキテクチャで設計されている: -* **経路プランナー:** 経路を生成する -* **動作プランナー:** 車両の操作を生成する -* **障害物検出と回避:** 障害物を検出し、それらを回避する経路と操作を生成する +- **経路プランナー:** 経路を生成する +- **動作プランナー:** 車両の操作を生成する +- **障害物検出と回避:** 障害物を検出し、それらを回避する経路と操作を生成する #### 統合 計画コンポーネントは、Autowareシステムの他のコンポーネントと統合されている。これらには、以下が含まれる: -* センサーインターフェース: 障害物検出データを計画コンポーネントに提供する -* 制御インターフェース: 計画コンポーネントから車両の制御系に動作コマンドを送信する -* HMIインターフェース: 計画経路と車両の操作をユーザーに表示する +- センサーインターフェース: 障害物検出データを計画コンポーネントに提供する +- 制御インターフェース: 計画コンポーネントから車両の制御系に動作コマンドを送信する +- HMIインターフェース: 計画経路と車両の操作をユーザーに表示する #### テストと検証 計画コンポーネントは、シミュレーション環境と実車テストで徹底的にテストされている。このテストには以下が含まれる: -* **シミュレーション:** さまざまなシナリオ下での計画コンポーネントの動作の検証 -* **実車テスト:** 実際の世界での計画コンポーネントの性能評価 +- **シミュレーション:** さまざまなシナリオ下での計画コンポーネントの動作の検証 +- **実車テスト:** 実際の世界での計画コンポーネントの性能評価 #### リリースノート -* **バージョ ン1.0:** 初期リリース -* **バージョン1.1:** 障害物検出と回避の改善 -* **バージョン1.2:** パフォーマンスの向上とバグ修正 +- **バージョ ン1.0:** 初期リリース +- **バージョン1.1:** 障害物検出と回避の改善 +- **バージョン1.2:** パフォーマンスの向上とバグ修正 -| 名称 | 型 | 説明 | -| ------------------------ | ------------------------- | -------------------------------------------------------- | +| 名称 | 型 | 説明 | +| ------------------------ | ------------------------- | ------------------------------------------------------------ | | `output/mask_image` | `sensor_msgs::msg::Image` | 路面領域として特定されたマスクされたセグメントを含むイメージ | -| `output/segmented_image` | `sensor_msgs::msg::Image` | 可視化用のセグメントイメージ | +| `output/segmented_image` | `sensor_msgs::msg::Image` | 可視化用のセグメントイメージ | ### パラメータ @@ -172,15 +172,16 @@ Autowareのアーキテクチャがご理解いただけたかと思います。 ### 入出力 #### 入力 + - `lane_detected_raw` : レーン検出の生データ - `line_detected_raw` : 線検出の生データ - `current_pose` : 自車位置 -| 名前 | タイプ | 説明 | -|----|----|----| -| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 検出された線分 | -| `input/mask_image` | `sensor_msgs::msg::Image` | 路面領域と判断されたマスクされたセグメントを持つ画像 | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラの非歪み情報 | +| 名前 | タイプ | 説明 | +| --------------------------- | ------------------------------- | ---------------------------------------------------- | +| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 検出された線分 | +| `input/mask_image` | `sensor_msgs::msg::Image` | 路面領域と判断されたマスクされたセグメントを持つ画像 | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラの非歪み情報 | #### 出力 @@ -254,11 +255,11 @@ Controlコンポーネントは以下の機能を担当します。 - **計算コスト:** コンポーネントが使用する計算リソース - **センサーの限界:** センサーの能力と制限 -| 名前 | 型 | 説明 | -| ------------------------------------------------ | ---------------------------------- | ------------------------------------------------------------------- | -| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | ビジュアライゼーション用のフィルタ処理済み線分 | -| `output/projected_image` | `sensor_msgs::msg::Image` | ビジュアライゼーション用の投影されたフィルタ処理済み線分 | -| `output/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影されたフィルタ処理済み線分 | +| 名前 | 型 | 説明 | +| -------------------------------------- | ------------------------------- | -------------------------------------------------------- | +| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | ビジュアライゼーション用のフィルタ処理済み線分 | +| `output/projected_image` | `sensor_msgs::msg::Image` | ビジュアライゼーション用の投影されたフィルタ処理済み線分 | +| `output/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影されたフィルタ処理済み線分 | ### パラメータ @@ -273,20 +274,22 @@ Controlコンポーネントは以下の機能を担当します。 ### 入力 / 出力 #### 入力 - - camera_topic(`/{}'.format(camera_name)) - - 型: sensor_msgs/Image - - 説明: 歪んだカメラ画像 + +- camera_topic(`/{}'.format(camera_name)) + - 型: sensor_msgs/Image + - 説明: 歪んだカメラ画像 #### 出力 - - camera_topic_undistort - - 型: sensor_msgs/Image - - 説明: ゆがみの補正されたカメラ画像 -| 名前 | タイプ | 説明 | -| ------------------------------------ | --------------------------------------------------- | --------------------------------------------------- | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | -| `input/image_raw` | `sensor_msgs::msg::Image` | 未加工のカメラ画像 | -| `input/image_raw/compressed` | `sensor_msgs::msg::CompressedImage` | 圧縮されたカメラ画像 | +- camera_topic_undistort + - 型: sensor_msgs/Image + - 説明: ゆがみの補正されたカメラ画像 + +| 名前 | タイプ | 説明 | +| ---------------------------- | ----------------------------------- | -------------------- | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 未加工のカメラ画像 | +| `input/image_raw/compressed` | `sensor_msgs::msg::CompressedImage` | 圧縮されたカメラ画像 | このノードは、圧縮画像と生画像の両方のトピックをサブスクライブします。 生画像が一度でもサブスクライブされると、圧縮画像のサブスクライブが停止します。 @@ -294,9 +297,9 @@ Controlコンポーネントは以下の機能を担当します。 #### 出力 -| 名前 | タイプリスト | 説明 | -| -------------------- | ------------------------------------ | ------------------------- | -| `output/camera_info` | `sensor_msgs::msg::CameraInfo` | リサイズされたカメラ情報 | +| 名前 | タイプリスト | 説明 | +| -------------------- | ----------------------------------- | ------------------------ | +| `output/camera_info` | `sensor_msgs::msg::CameraInfo` | リサイズされたカメラ情報 | | `output/image_raw` | `sensor_msgs::msg::CompressedImage` | 非歪とリサイズされた画像 | ### パラメータ @@ -309,14 +312,12 @@ Controlコンポーネントは以下の機能を担当します。 いくつかのノードは `/base_link` から `/sensing/camera/traffic_light/image_raw/compressed` のフレーム ID (例: `/traffic_light_left_camera/camera_optical_link`) への `/tf_static` を必要とします。tf_static が正しいかどうかは以下のコマンドで確認できます。 - ```shell ros2 run tf2_ros tf2_echo base_link traffic_light_left_camera/camera_optical_link ``` プロトタイプ車両の使用、正確なキャリブレーションデータの欠如、またはその他の回避できない理由によって間違った`/tf_static`がブロードキャストされた場合、 `override_camera_frame_id`内の`frame_id`を指定すると便利です。非空の文字列を指定すると、`/image_processing/undistort_node`は`camera_info`内の`frame_id`を書き換えます。たとえば、以下のように異なる`tf_static`を指定できます。 - ```shell ros2 launch yabloc_launch sample_launch.xml override_camera_frame_id:=fake_camera_optical_link ros2 run tf2_ros static_transform_publisher \ @@ -338,15 +339,15 @@ ros2 run tf2_ros static_transform_publisher \ #### 入力 -| 名前 | タイプ | 説明 | -| ---------------------------------- | ---------------------------------- | ------------------------------------------------- | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置 | -| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 路面マーキング以外の投影された線分 | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 無歪カメラ情報 | -| `input/image_raw` | `sensor_msgs::msg::Image` | 無歪カメラ画像 | -| `input/ground` | `std_msgs::msg::Float32MultiArray` | 地面勾配 | -| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面マーキングに関するlanelet2要素 | -| `input/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | 交通標識に関するlanelet2要素 | +| 名前 | タイプ | 説明 | +| ------------------------------------- | ---------------------------------- | ---------------------------------- | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置 | +| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 路面マーキング以外の投影された線分 | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 無歪カメラ情報 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 無歪カメラ画像 | +| `input/ground` | `std_msgs::msg::Float32MultiArray` | 地面勾配 | +| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面マーキングに関するlanelet2要素 | +| `input/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | 交通標識に関するlanelet2要素 | **自動運転ソフトウェアに関するドキュメント** @@ -358,32 +359,32 @@ Planningモジュールは、自車位置と周囲環境データを元に、安 **機能** -* **経路生成:** 自車位置から目的地までの最適な経路を計算します。 -* **速度計画:** 経路に沿った安全かつ快適な速度プロファイルを計算します。 -* **衝突回避:** 周囲の障害物との衝突を回避するための回避操作を計算します。 -* **車線維持:** 車線を維持するためのステアリング制御を計算します。 +- **経路生成:** 自車位置から目的地までの最適な経路を計算します。 +- **速度計画:** 経路に沿った安全かつ快適な速度プロファイルを計算します。 +- **衝突回避:** 周囲の障害物との衝突を回避するための回避操作を計算します。 +- **車線維持:** 車線を維持するためのステアリング制御を計算します。 **アーキテクチャ** Planningモジュールは、以下で構成されています。 -* **TrajGen:** 経路を生成します。 -* **TwistGenerator:** 速度プロファイルを計算します。 -* **ObstacleManager:** 障害物を管理します。 -* **LaneManager:** 車線を管理します。 +- **TrajGen:** 経路を生成します。 +- **TwistGenerator:** 速度プロファイルを計算します。 +- **ObstacleManager:** 障害物を管理します。 +- **LaneManager:** 車線を管理します。 **入出力** **入力:** -* 自車位置 -* 周囲環境データ (LiDAR、カメラなど) +- 自車位置 +- 周囲環境データ (LiDAR、カメラなど) **出力:** -* 計画された経路 -* 目標速度と加速度 -* ステアリング制御 +- 計画された経路 +- 目標速度と加速度 +- ステアリング制御 **インターフェイス** @@ -397,26 +398,26 @@ Planningモジュールのパラメータは、`/autoware/planning`ネームス Planningモジュールの性能は、以下によって向上できます。 -* 高精度のセンサーデータを使用する -* 現在の実速度をフィードバックする -* 障害物の位置を正確に予測する +- 高精度のセンサーデータを使用する +- 現在の実速度をフィードバックする +- 障害物の位置を正確に予測する **制限事項** -* 静的障害物のみを処理します。 -* 悪天候では性能が低下する可能性があります。 -* 急カーブや狭い道路で問題が発生する可能性があります。 +- 静的障害物のみを処理します。 +- 悪天候では性能が低下する可能性があります。 +- 急カーブや狭い道路で問題が発生する可能性があります。 **依存関係** Planningモジュールには、以下のコンポーネントが必要です。 -* PointCloudPreprocessor -* Mapping -* Localization -* Prediction -* ObstacleDetection -* Control +- PointCloudPreprocessor +- Mapping +- Localization +- Prediction +- ObstacleDetection +- Control **テスト** @@ -426,19 +427,19 @@ Planningモジュールは、シミュレーションと実車テストの両方 詳細については、以下のドキュメントを参照してください。 -* [Planningモジュール設計ドキュメント](https://github.com/autowarefoundation/autoware.ai/blob/master/docs/design/planning-module.md) -* [Planningモジュールソースコード](https://github.com/autowarefoundation/autoware.ai/tree/master/ros/autoware_planning) +- [Planningモジュール設計ドキュメント](https://github.com/autowarefoundation/autoware.ai/blob/master/docs/design/planning-module.md) +- [Planningモジュールソースコード](https://github.com/autowarefoundation/autoware.ai/tree/master/ros/autoware_planning) **追加情報** -* Planningモジュールでは、`post resampling`などの手法を使用しています。 -* Planningモジュールは、velocity逸脱量やacceleration逸脱量などのパラメータを調整できます。 -* Planningモジュールは、他のPlanningアルゴリズムと統合できます。 +- Planningモジュールでは、`post resampling`などの手法を使用しています。 +- Planningモジュールは、velocity逸脱量やacceleration逸脱量などのパラメータを調整できます。 +- Planningモジュールは、他のPlanningアルゴリズムと統合できます。 -| 名前 | 型 | 説明 | -| ------------------------------- | --------------------------------- | ---------------------------------------------------------- | -| `output/lanelet2_overlay_image` | `sensor_msgs::msg::Image` | レーンレット2のオーバーレイ画像 | -| `output/projected_marker` | `visualization_msgs::msg::Marker` | 路面マーキング以外の3D投影された線分 | +| 名前 | 型 | 説明 | +| ------------------------------- | --------------------------------- | ------------------------------------ | +| `output/lanelet2_overlay_image` | `sensor_msgs::msg::Image` | レーンレット2のオーバーレイ画像 | +| `output/projected_marker` | `visualization_msgs::msg::Marker` | 路面マーキング以外の3D投影された線分 | ## line_segments_overlay @@ -450,9 +451,9 @@ Planningモジュールは、シミュレーションと実車テストの両方 #### 入力 -| 名前 | タイプ | 説明 | -| --------------------------- | ------------------------------- | ------------------------ | -| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 分類線分 | +| 名前 | タイプ | 説明 | +| --------------------------- | ------------------------------- | ------------------ | +| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 分類線分 | | `input/image_raw` | `sensor_msgs::msg::Image` | 補正解除カメラ画像 | #### 出力 @@ -463,42 +464,41 @@ Planningモジュールは、シミュレーションと実車テストの両方 計画コンポーネントは、周囲の環境を認識し、それに応じて経路を計画します。 -* **地図管理:** ナビゲーションマップのロード、解析、更新を担当。 -* **センサーフュージョン:** レーダー、LiDAR、カメラなどのセンサーデータを集約し、周囲の環境の包括的な表現を作成。 -* **オドメトリー:** 自車位置の追跡と推定。 -* **パスプランニング:** 障害物や交通規制を考慮した安全で効率的な経路の生成。 -* **トラフィック予測:** 周辺車両の軌跡を予測し、それに応じて経路を調整。 +- **地図管理:** ナビゲーションマップのロード、解析、更新を担当。 +- **センサーフュージョン:** レーダー、LiDAR、カメラなどのセンサーデータを集約し、周囲の環境の包括的な表現を作成。 +- **オドメトリー:** 自車位置の追跡と推定。 +- **パスプランニング:** 障害物や交通規制を考慮した安全で効率的な経路の生成。 +- **トラフィック予測:** 周辺車両の軌跡を予測し、それに応じて経路を調整。 **制御コンポーネント** 制御コンポーネントは、計画コンポーネントによって生成された経路に従って車両を操作します。 -* **縦制御:** 加減速の制御を担当。 -* **横制御:** ステアリングの制御を担当。 -* **ブレーキ制御:** ブレーキの適用を担当。 -* **アクチュエーターインターフェース:** コントローラコマンドと車両アクチュエーターのインターフェース。 -* **安定性制御:** 車両の安定性を確保する機能を提供。 +- **縦制御:** 加減速の制御を担当。 +- **横制御:** ステアリングの制御を担当。 +- **ブレーキ制御:** ブレーキの適用を担当。 +- **アクチュエーターインターフェース:** コントローラコマンドと車両アクチュエーターのインターフェース。 +- **安定性制御:** 車両の安定性を確保する機能を提供。 **他のコンポーネント** -* **ビヘイビアープランナー:** 車両の一般的な動作を指定。 -* **RVIZビジュアライザー:** システムの動作を可視化する。 -* **ロギングシステム:** システムの動作とデータを記録。 +- **ビヘイビアープランナー:** 車両の一般的な動作を指定。 +- **RVIZビジュアライザー:** システムの動作を可視化する。 +- **ロギングシステム:** システムの動作とデータを記録。 **Autowareのアーキテクチャ** -* **モジュール性:** 各コンポーネントは独立しており、他のコンポーネントと簡単に統合できます。 -* **再利用性:** コンポーネントは再利用可能で、さまざまな自動運転システムで利用できます。 -* **オープンソース:** Autowareはオープンソースプラットフォームであり、コミュニティによって継続的に開発されています。 +- **モジュール性:** 各コンポーネントは独立しており、他のコンポーネントと簡単に統合できます。 +- **再利用性:** コンポーネントは再利用可能で、さまざまな自動運転システムで利用できます。 +- **オープンソース:** Autowareはオープンソースプラットフォームであり、コミュニティによって継続的に開発されています。 **使用上の注意** -* システムは依然として開発中であり、限定的な使用に限定されています。 -* システムを使用する前に、関連する安全対策を講じてください。 -* 'post resampling`のデータを使用する場合、元のデータの不確実性と時間遅延に注意してください。 -* 速度逸脱量または加速度逸脱量が高い場合、システムの応答が遅れる可能性があります。 - -| 名前 | 型 | 説明 | -| --------------------------------------------------- | --------------------------- | ------------------------------------------------------------- | -| `output/image_with_colored_line_segments` | `sensor_msgs::msg::Image` | 線分がハイライトされた画像 | +- システムは依然として開発中であり、限定的な使用に限定されています。 +- システムを使用する前に、関連する安全対策を講じてください。 +- 'post resampling`のデータを使用する場合、元のデータの不確実性と時間遅延に注意してください。 +- 速度逸脱量または加速度逸脱量が高い場合、システムの応答が遅れる可能性があります。 +| 名前 | 型 | 説明 | +| ----------------------------------------- | ------------------------- | -------------------------- | +| `output/image_with_colored_line_segments` | `sensor_msgs::msg::Image` | 線分がハイライトされた画像 | diff --git a/localization/yabloc/yabloc_monitor/README.md b/localization/yabloc/yabloc_monitor/README.md index 6454f0f08e28a..a98f7f4df3beb 100644 --- a/localization/yabloc/yabloc_monitor/README.md +++ b/localization/yabloc/yabloc_monitor/README.md @@ -16,8 +16,8 @@ YabLoc モニターは YabLoc Localization システムの状態を監視する ### 入力 -| 名前 | 型 | 説明 | -| --------------------- | --------------------------- | ------------------------------- | +| 名前 | 型 | 説明 | +| --------------------- | --------------------------- | -------------------- | | `~/input/yabloc_pose` | `geometry_msgs/PoseStamped` | YabLocの最終出力姿勢 | ### 出力 @@ -74,13 +74,12 @@ Path Planningモジュールには、次の主要な定数が含まれていま 付録には、Path Planningモジュールの使用方法に関する追加情報が含まれています。 -* `post resampling`処理に関するセクションを含んでいます。 +- `post resampling`処理に関するセクションを含んでいます。 -| Name | Type | Description | -| -------------- | --------------------------------- | ------------------- | -| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断結果出力 | +| Name | Type | Description | +| -------------- | --------------------------------- | ------------ | +| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断結果出力 | ### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_monitor/schema/yabloc_monitor.schema.json", "ja") }} - diff --git a/localization/yabloc/yabloc_particle_filter/README.md b/localization/yabloc/yabloc_particle_filter/README.md index 540439b3da894..8dcaa03e5bd56 100644 --- a/localization/yabloc/yabloc_particle_filter/README.md +++ b/localization/yabloc/yabloc_particle_filter/README.md @@ -16,23 +16,25 @@ ### 入出力 #### 入力 + - `/localization/particle_cloud/sample` (ParticleCloud) #### 出力 + - `/localization/particle_cloud/prediction_sample` (ParticleCloud) - `/localization/particle_cloud/prediction_weight` (ParticleWeightArray) ### パラメータ -| パラメータ | 説明 | 型 | デフォルト | -| --- | --- | --- | --- | -| `resampling` | 仮説の再サンプリングを実行するかどうか | bool | true | -| `resampling_threshold` | 仮説が再サンプリングされる前の重みの最小しきい値 | double | 0.001 | -| `min_num_particles` | 再サンプリング後の最小パーティクル数 | int | 100 | -| `max_num_particles` | 再サンプリング後の最大パーティクル数 | int | 10000 | -| `temporal_variance` | `'post resampling'`仮説の生成に対する時系列的な分散 | double | 0.0 | -| `translational_variance` | `'post resampling'`仮説の生成に対する並進的な分散 | double | 0.0 | -| `rotational_variance` | `'post resampling'`仮説の生成に対する回転的な分散 | double | 0.0 | +| パラメータ | 説明 | 型 | デフォルト | +| ------------------------ | --------------------------------------------------- | ------ | ---------- | +| `resampling` | 仮説の再サンプリングを実行するかどうか | bool | true | +| `resampling_threshold` | 仮説が再サンプリングされる前の重みの最小しきい値 | double | 0.001 | +| `min_num_particles` | 再サンプリング後の最小パーティクル数 | int | 100 | +| `max_num_particles` | 再サンプリング後の最大パーティクル数 | int | 10000 | +| `temporal_variance` | `'post resampling'`仮説の生成に対する時系列的な分散 | double | 0.0 | +| `translational_variance` | `'post resampling'`仮説の生成に対する並進的な分散 | double | 0.0 | +| `rotational_variance` | `'post resampling'`仮説の生成に対する回転的な分散 | double | 0.0 | ## gnss_particle_corrector @@ -43,20 +45,22 @@ ### 入出力 #### 入力 + - `/localization/particle_cloud/ground_truth` (ParticleCloud) - `/localization/particle_cloud/prediction_sample` (ParticleCloud) - `/localization/gnss/odometry` (Odometry) #### 出力 + - `/localization/particle_cloud/correction_weight` (ParticleWeightArray) ### パラメータ -| パラメータ | 説明 | 型 | デフォルト | -| --- | --- | --- | --- | -| `gnss_model` | GNSSの測定モデル | string | `'gnss_sim'` | +| パラメータ | 説明 | 型 | デフォルト | +| ------------------- | -------------------------- | ------ | ------------- | +| `gnss_model` | GNSSの測定モデル | string | `'gnss_sim'` | | `gnss_device_model` | 使用するGNSSデバイスモデル | string | `'ublox_f9p'` | -| `gnss_max_age` | GNSS測定値の最大許容時間 | double | 1.0 | +| `gnss_max_age` | GNSS測定値の最大許容時間 | double | 1.0 | ## camera_particle_corrector @@ -67,28 +71,30 @@ ### 入出力 #### 入力 + - `/ localization / particle_cloud / ground_truth` (ParticleCloud) - `/ localization / particle_cloud / prediction_sample` (ParticleCloud) - `/localization/camera/detection` (DetectionArray) #### 出力 + - `/localization/particle_cloud/correction_weight` (ParticleWeightArray) ### パラメータ -| パラメータ | 説明 | 型 | デフォルト | -| --- | --- | --- | --- | -| `camera_model` | カメラの測定モデル | string | `'camera_sim'` | -| `camera_device_model` | 使用するカメラデバイスモデル | string | `'realsense_d435'` | -| `camera_max_age` | カメラ測定値の最大許容時間 | double | 1.0 | -| `detection_distance_threshold` | 検出とパーティクルの位置の距離の最大しきい値 | double | 1.0 | +| パラメータ | 説明 | 型 | デフォルト | +| ------------------------------ | -------------------------------------------- | ------ | ------------------ | +| `camera_model` | カメラの測定モデル | string | `'camera_sim'` | +| `camera_device_model` | 使用するカメラデバイスモデル | string | `'realsense_d435'` | +| `camera_max_age` | カメラ測定値の最大許容時間 | double | 1.0 | +| `detection_distance_threshold` | 検出とパーティクルの位置の距離の最大しきい値 | double | 1.0 | -| 名前 | 種類 | 説明 | -| ----------------------------- | ------------------------------------------------ | ----------------------------------------------------- | -| `input/initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | パーティクルの初期位置を指定 | -| `input/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 予測更新の線速度と角速度 | -| `input/height` | `std_msgs::msg::Float32` | 地形高 | -| `input/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 補正ノードによって重み付けされたパーティクル | +| 名前 | 種類 | 説明 | +| ----------------------------- | ------------------------------------------------ | -------------------------------------------- | +| `input/initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | パーティクルの初期位置を指定 | +| `input/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 予測更新の線速度と角速度 | +| `input/height` | `std_msgs::msg::Float32` | 地形高 | +| `input/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 補正ノードによって重み付けされたパーティクル | #### 出力 @@ -104,10 +110,10 @@ Perceptionコンポーネントは、カメラ、LiDAR、レーダーなどの Planningコンポーネントは、Perceptionから得られたデータを基に、安全で効率的な走行経路を生成します。経路生成では、以下の要因が考慮されます。 -* 周囲環境の認識 -* 障害物回避 -* 車両の運動力学(速度、加速度) -* 交通規則 +- 周囲環境の認識 +- 障害物回避 +- 車両の運動力学(速度、加速度) +- 交通規則 **Control** @@ -115,34 +121,34 @@ Controlコンポーネントは、Planningから生成された経路に従っ **追加機能** -* **Lane Keeping Assist (LKA):** 車線を維持するアシスタント -* **Adaptive Cruise Control (ACC):** 前方車両との車間距離を維持するクルーズコントロール -* **Emergency Braking:** 衝突の可能性がある場合に自動的にブレーキをかける機能 +- **Lane Keeping Assist (LKA):** 車線を維持するアシスタント +- **Adaptive Cruise Control (ACC):** 前方車両との車間距離を維持するクルーズコントロール +- **Emergency Braking:** 衝突の可能性がある場合に自動的にブレーキをかける機能 **評価** Autowareの性能は、さまざまな指標を使用して評価できます。 -* **Planning評価:** - * 障害物逸脱量(velocity, acceleration) - * 車線逸脱量 - * 安全距離 -* **Control評価:** - * 追従精度 - * 'post resampling'精度 - * 車両の安定性 +- **Planning評価:** + - 障害物逸脱量(velocity, acceleration) + - 車線逸脱量 + - 安全距離 +- **Control評価:** + - 追従精度 + - 'post resampling'精度 + - 車両の安定性 **使用例** Autowareの自動運転ソフトウェアは、自動運転車両、ロボタクシー、ラストワンマイル配送などのさまざまな用途で使用できます。 -| 名前 | 内容 | 説明 | -|---|---|---| -| `output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 粒子中心と共分散 | -| `output/pose` | `geometry_msgs::msg::PoseStamped` | 粒子中心と共分散 | -| `output/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測ノードで重み付けされた粒子 | -| `debug/init_marker` | `visualization_msgs::msg::Marker` | 初期位置のデバッグ用可視化 | -| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子の可視化。`visualize` が true の場合に配信 | +| 名前 | 内容 | 説明 | +| ------------------------------ | ----------------------------------------------- | ---------------------------------------------- | +| `output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 粒子中心と共分散 | +| `output/pose` | `geometry_msgs::msg::PoseStamped` | 粒子中心と共分散 | +| `output/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測ノードで重み付けされた粒子 | +| `debug/init_marker` | `visualization_msgs::msg::Marker` | 初期位置のデバッグ用可視化 | +| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子の可視化。`visualize` が true の場合に配信 | ### パラメータ @@ -150,8 +156,8 @@ Autowareの自動運転ソフトウェアは、自動運転車両、ロボタク ### サービス -| 名称 | 種類 | 説明 | -| -------------------- | ------------------------ | ---------------------------------------------------- | +| 名称 | 種類 | 説明 | +| -------------------- | ------------------------ | ------------------------------ | | `yabloc_trigger_srv` | `std_srvs::srv::SetBool` | yabloc推定の有効化および無効化 | ## gnss_particle_corrector @@ -164,15 +170,16 @@ Autowareの自動運転ソフトウェアは、自動運転車両、ロボタク ### 入出力 #### 入力 -- ublox\_msgs::NavPVT:[GNSS情報](https://docs.autoware.io/en/latest/autoware.auto/msgs/ublox_msgs/message/NavPVT.html) -- geometry\_msgs::PoseWithCovarianceStamped:[自車位置](https://docs.autoware.io/en/latest/autoware.auto/msgs/geometry_msgs/message/PoseWithCovarianceStamped.html) -| 名前 | タイプ | 説明 | -| ------------------------------ | ------------------------------------------------ | ------------------------------------------------------- | -| `input/height` | `std_msgs::msg::Float32` | 地上高度 | -| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 推定パーティクル | -| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSS測定 (use_ublox_msgがfalseの場合に使用) | -| `input/navpvt` | `ublox_msgs::msg::NavPVT` | GNSS測定 (use_ublox_msgがtrueの場合に使用) | +- ublox_msgs::NavPVT:[GNSS情報](https://docs.autoware.io/en/latest/autoware.auto/msgs/ublox_msgs/message/NavPVT.html) +- geometry_msgs::PoseWithCovarianceStamped:[自車位置](https://docs.autoware.io/en/latest/autoware.auto/msgs/geometry_msgs/message/PoseWithCovarianceStamped.html) + +| 名前 | タイプ | 説明 | +| ---------------------------- | ----------------------------------------------- | ------------------------------------------- | +| `input/height` | `std_msgs::msg::Float32` | 地上高度 | +| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 推定パーティクル | +| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSS測定 (use_ublox_msgがfalseの場合に使用) | +| `input/navpvt` | `ublox_msgs::msg::NavPVT` | GNSS測定 (use_ublox_msgがtrueの場合に使用) | **自動運転ソフトウェアの設計に関するドキュメント** @@ -180,46 +187,46 @@ Autowareの自動運転ソフトウェアは、自動運転車両、ロボタク **状態推定と構想** -* 最新の自車位置、周囲環境のステータス、予定ルートを把握するための状態推定 -* 障害物の検知、予測、および分類に基づいたパス計画の構想 +- 最新の自車位置、周囲環境のステータス、予定ルートを把握するための状態推定 +- 障害物の検知、予測、および分類に基づいたパス計画の構想 **動作計画** -* 経路最適化と障害物回避のためのグローバルプランナー -* 局所プランナーによるリアルタイム動作計画の生成 +- 経路最適化と障害物回避のためのグローバルプランナー +- 局所プランナーによるリアルタイム動作計画の生成 **制御** -* 車両の動的特性を考慮した制御器の設計 -* 経路追従、速度制御、障害物回避のための閉ループ制御 +- 車両の動的特性を考慮した制御器の設計 +- 経路追従、速度制御、障害物回避のための閉ループ制御 **シミュレーションとテスト** -* 仮想環境を使用した自動運転システムのシミュレーション -* 実際のテスト走路での実車テスト +- 仮想環境を使用した自動運転システムのシミュレーション +- 実際のテスト走路での実車テスト **システムアーキテクチャ** -* モジュール化されたソフトウェアアーキテクチャ -* さまざまなセンサーとアクチュエーターとのインターフェース +- モジュール化されたソフトウェアアーキテクチャ +- さまざまなセンサーとアクチュエーターとのインターフェース **Autowareソフトウェアスタック** -* オープンソースの自動運転ソフトウェアプラットフォーム -* Planning、制御、センシング、シミュレーションのためのモジュールを提供 +- オープンソースの自動運転ソフトウェアプラットフォーム +- Planning、制御、センシング、シミュレーションのためのモジュールを提供 **主要な概念** -* **'post resampling'**:状態推定後の予測された経路 -* **速度逸脱量**:目標速度からの逸脱 -* **加速度逸脱量**:目標加速度からの逸脱 -* **制御限界**:車両の物理的な制約による制御器の入出力の限界 -* **Lanelet2**:道路環境を表現するためのデータ構造 +- **'post resampling'**:状態推定後の予測された経路 +- **速度逸脱量**:目標速度からの逸脱 +- **加速度逸脱量**:目標加速度からの逸脱 +- **制御限界**:車両の物理的な制約による制御器の入出力の限界 +- **Lanelet2**:道路環境を表現するためのデータ構造 -| 名前 | タイプ | 説明 | -| ------------------------------ | -------------------------------------------- | -------------------------------------------------------- | -| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 重み付けられた粒子 | -| `debug/gnss_range_marker` | `visualization_msgs::msg::MarkerArray` | GNSS の重み分布 | +| 名前 | タイプ | 説明 | +| ------------------------------ | -------------------------------------------- | ---------------------------------------------------------------- | +| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 重み付けられた粒子 | +| `debug/gnss_range_marker` | `visualization_msgs::msg::MarkerArray` | GNSS の重み分布 | | `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子のビジュアライゼーション. `visualize` が真の場合に公開される | ### パラメータ @@ -236,13 +243,13 @@ Autowareの自動運転ソフトウェアは、自動運転車両、ロボタク #### 入力 -| 名称 | タイプ | 説明 | -| --------------------------------- | ----------------------------------------- | --------------------------------------------------------------- | -| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測粒子 | -| `input/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | 路面標示を線分に変換したもの | -| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面標示を線分に変換したもの | -| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影線分 | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置周辺のエリアマップを取得するための参照 | +| 名称 | タイプ | 説明 | +| ------------------------------------- | -------------------------------------------- | ---------------------------------------------- | +| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測粒子 | +| `input/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | 路面標示を線分に変換したもの | +| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面標示を線分に変換したもの | +| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影線分 | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置周辺のエリアマップを取得するための参照 | #### 出力 @@ -252,11 +259,11 @@ Autoware Planning 2.x のモジュール開発チュートリアル ### 必要条件 -* C++ の中級レベルの知識 -* ROS の基本的な知識 -* Autoware の基本的な知識 +- C++ の中級レベルの知識 +- ROS の基本的な知識 +- Autoware の基本的な知識 -###推奨アプローチ +### 推奨アプローチ Planning 2.x でモジュールを開発するには、以下の推奨アプローチに従うことをお勧めします。 @@ -270,20 +277,20 @@ Planning 2.x でモジュールを開発するには、以下の推奨アプロ Planning 2.x のモジュールは、以下のような構成になっています。 -* **リソース:** モジュールによって使用される設定ファイルやパラメータです。 -* **インターフェース:** モジュールと外部コンポーネントとのやり取りに使用されるクラスと関数です。 -* **アルゴリズム:** モジュールの内部ロジックを実装するコードです。 -* **テスト:** モジュールを検証するためのテストケースです。 -* **ドキュメント:** モジュールのインターフェース、実装、テストについての説明です。 +- **リソース:** モジュールによって使用される設定ファイルやパラメータです。 +- **インターフェース:** モジュールと外部コンポーネントとのやり取りに使用されるクラスと関数です。 +- **アルゴリズム:** モジュールの内部ロジックを実装するコードです。 +- **テスト:** モジュールを検証するためのテストケースです。 +- **ドキュメント:** モジュールのインターフェース、実装、テストについての説明です。 ### モジュールの例 以下に、Planning 2.x で実装されているモジュールの例をいくつか示します。 -* **Local Planner:** 自車位置から近接将来の軌道を生成します。 -* **Global Planner:** 長期的な将来の軌道を生成します。 -* **Behavior Planner:** 自車の動作を決定します。 -* **Prediction Module:** 他者の動きを予測します。 +- **Local Planner:** 自車位置から近接将来の軌道を生成します。 +- **Global Planner:** 長期的な将来の軌道を生成します。 +- **Behavior Planner:** 自車の動作を決定します。 +- **Prediction Module:** 他者の動きを予測します。 ### モジュール開発の手順 @@ -302,24 +309,24 @@ Planning 2.x でモジュールを開発するには、以下の手順に従い Planning 2.x のモジュールをメンテナンスするには、以下のベストプラクティスに従うことをお勧めします。 -* **コードの変更を記録する:** コードの変更をコミットログに記録します。 -* **継続的な統合を使用する:** 変更があると自動的にモジュールをテストおよびビルドする継続的な統合システムを使用します。 -* **モジュールを更新する:** Planning の新しいバージョンがリリースされたら、モジュールを更新します。 +- **コードの変更を記録する:** コードの変更をコミットログに記録します。 +- **継続的な統合を使用する:** 変更があると自動的にモジュールをテストおよびビルドする継続的な統合システムを使用します。 +- **モジュールを更新する:** Planning の新しいバージョンがリリースされたら、モジュールを更新します。 ### サポート Planning 2.x のモジュール開発に関するサポートについては、[Autoware フォーラム](https://forum.autoware.ai/) にアクセスしてください。 -| 名前 | タイプ | 説明 | -| ----------------- | ----------------------------------------------- | ---------------------------------------------------------- | -| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | ウェイト付き粒子 | -| `debug/cost_map_image` | `sensor_msgs::msg::Image` | lanelet2 から生成されたコストマップ | -| `debug/cost_map_range` | `visualization_msgs::msg::MarkerArray` | コストマップ境界 | -| `debug/match_image` | `sensor_msgs::msg::Image` | 投影線分画像 | -| `debug/scored_cloud` | `sensor_msgs::msg::PointCloud2` | ウェイト付き3D線分 | -| `debug/scored_post_cloud` | `sensor_msgs::msg::PointCloud2` | ウェイト付き3D線分(不確実なもの) | -| `debug/state_string` | `std_msgs::msg::String` | ノード状態を表す文字列 | -| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子ビジュアライゼーション.`visualize` が True の場合に公開 | +| 名前 | タイプ | 説明 | +| ------------------------------ | -------------------------------------------- | ----------------------------------------------------------- | +| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | ウェイト付き粒子 | +| `debug/cost_map_image` | `sensor_msgs::msg::Image` | lanelet2 から生成されたコストマップ | +| `debug/cost_map_range` | `visualization_msgs::msg::MarkerArray` | コストマップ境界 | +| `debug/match_image` | `sensor_msgs::msg::Image` | 投影線分画像 | +| `debug/scored_cloud` | `sensor_msgs::msg::PointCloud2` | ウェイト付き3D線分 | +| `debug/scored_post_cloud` | `sensor_msgs::msg::PointCloud2` | ウェイト付き3D線分(不確実なもの) | +| `debug/state_string` | `std_msgs::msg::String` | ノード状態を表す文字列 | +| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子ビジュアライゼーション.`visualize` が True の場合に公開 | ### パラメータ @@ -327,7 +334,6 @@ Planning 2.x のモジュール開発に関するサポートについては、[ ### サービス -| 名 | 種類 | 説明 | -| ------------ | ------------------------ | ----------------------------------------- | -| `switch_srv` | `std_srvs::srv::SetBool` | 補正の有効化と無効化 | - +| 名 | 種類 | 説明 | +| ------------ | ------------------------ | -------------------- | +| `switch_srv` | `std_srvs::srv::SetBool` | 補正の有効化と無効化 | diff --git a/localization/yabloc/yabloc_pose_initializer/README.md b/localization/yabloc/yabloc_pose_initializer/README.md index a3cafdcd17492..599ac30c1cdc5 100644 --- a/localization/yabloc/yabloc_pose_initializer/README.md +++ b/localization/yabloc/yabloc_pose_initializer/README.md @@ -8,7 +8,6 @@ 手動でモデルをダウンロードして解凍するには、次の手順を実行します。 - ```bash $ mkdir -p ~/autoware_data/yabloc_pose_initializer/ $ wget -P ~/autoware_data/yabloc_pose_initializer/ \ @@ -44,6 +43,7 @@ $ tar xzf ~/autoware_data/yabloc_pose_initializer/resources.tar.gz -C ~/autoware - このノードは、ADAPIの要求に応じ、カメラを使用して初期位置を推定します。 #### 入力 + - `/planning/scenario_planning/current_pose`:自車位置 - `/planning/scenario_planning/autoware/config/mission`:ミッション設定 - `/localization/hdmap`:HDマップ @@ -55,13 +55,14 @@ $ tar xzf ~/autoware_data/yabloc_pose_initializer/resources.tar.gz -C ~/autoware - `/planning/scenario_planning/current_frame_id`:現在のフレームID #### 出力 + - `/planning/scenario_planning/autoware/initial_pose`:初期位置推定結果 -| 名称 | 型 | 説明 | -| ------------------- | ------------------------------------ | -------------------------- | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 非歪みカメラ情報 | -| `input/image_raw` | `sensor_msgs::msg::Image` | 非歪みカメラ画像 | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | +| 名称 | 型 | 説明 | +| ------------------- | --------------------------------------- | ---------------- | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 非歪みカメラ情報 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 非歪みカメラ画像 | +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | #### 出力 @@ -121,8 +122,8 @@ Perceptionモジュールは、カメラ、レーダー、LiDARなどのセン 検証および検証モジュールは、Autowareシステムの安全性、信頼性、およびパフォーマンスを評価するためのツールと手順を提供します。 -| 名 | 型 | 説明 | -| ------------------- | -------------------------------------- | ----------------------- | +| 名 | 型 | 説明 | +| ------------------- | -------------------------------------- | ------------ | | `output/candidates` | `visualization_msgs::msg::MarkerArray` | 初期姿勢候補 | ### パラメータ @@ -131,7 +132,6 @@ Perceptionモジュールは、カメラ、レーダー、LiDARなどのセン ### サービス -| 名前 | タイプ | 説明 | -| ------------------------ | -------------------------------------------------------------- | ------------------------------------- | -| `yabloc_align_srv` | `tier4_localization_msgs::srv::PoseWithCovarianceStamped` | 初期姿勢推定リクエスト | - +| 名前 | タイプ | 説明 | +| ------------------ | --------------------------------------------------------- | ---------------------- | +| `yabloc_align_srv` | `tier4_localization_msgs::srv::PoseWithCovarianceStamped` | 初期姿勢推定リクエスト | diff --git a/map/autoware_map_height_fitter/README.md b/map/autoware_map_height_fitter/README.md index d97a2cce88283..513fedd7527fc 100644 --- a/map/autoware_map_height_fitter/README.md +++ b/map/autoware_map_height_fitter/README.md @@ -10,8 +10,8 @@ ## トピックサブスクリプション -| Topic Name | 説明 | -| ---------------- | -------------------------------------------------------------------------------------------- | +| Topic Name | 説明 | +| ---------------- | ----------------------------------------------------------------------------------------------- | | ~/pointcloud_map | `enable_partial_load = false` の場合のみ使用される、ポイントクラウド マップ全体を含んだトピック | ## サービスクライアント @@ -19,6 +19,7 @@ ### Planningモジュール #### 制御信号の生成 + - **概要** - Planningモジュールは、障害物検出、経路計画、経路追従に基づいて、制御信号を生成します。 - **入力** @@ -29,6 +30,6 @@ - 車両の速度、加速度、操舵角度のコマンド ## サービス名 | 説明 + ---|---| | ~/partial_map_load | 局部地図を読み込むサービス - diff --git a/map/autoware_map_projection_loader/README.md b/map/autoware_map_projection_loader/README.md index d50993caa3644..a597fd31c211d 100644 --- a/map/autoware_map_projection_loader/README.md +++ b/map/autoware_map_projection_loader/README.md @@ -13,7 +13,6 @@ `map_path` ディレクトリに `map_projector_info.yaml` という名前の YAML ファイルを用意する必要があります。 `pointcloud_map_metadata.yaml` については、`map_loader` の Readme を参照してください。 - ```bash sample-map-rosbag ├── lanelet2_map.osm @@ -28,8 +27,6 @@ sample-map-rosbag ### ローカル座標を使用 - - ```yaml # map_projector_info.yaml projector_type: local @@ -48,7 +45,6 @@ projector_type: local MGRSを使用する場合は、MGRSグリッドも指定してください。 - ```yaml # map_projector_info.yaml projector_type: MGRS @@ -64,7 +60,6 @@ mgrs_grid: 54SUE ローカルカートシャンUTMを使用する場合は、マップの原点も指定してください。 - ```yaml # map_projector_info.yaml projector_type: LocalCartesianUTM @@ -79,7 +74,6 @@ map_origin: TransverseMercator投影を使用する場合は、マップ原点も指定してください。 - ```yaml # map_projector_info.yaml projector_type: TransverseMercator @@ -92,11 +86,10 @@ map_origin: ## 送信トピック -- `~/map_projector_info` (tier4\_map\_msgs/MapProjectorInfo): このトピックは、マッププロジェクターの定義情報を示します。 +- `~/map_projector_info` (tier4_map_msgs/MapProjectorInfo): このトピックは、マッププロジェクターの定義情報を示します。 ## パラメーター これらのパラメーターは起動引数から渡されると想定されており、`map_projection_loader.param.yaml`に直接書き込むことを推奨しません。 {{ json_to_markdown("map/autoware_map_projection_loader/schema/map_projection_loader.schema.json") }} - diff --git a/map/autoware_map_tf_generator/README.md b/map/autoware_map_tf_generator/README.md index b7464d84e2574..88665a7788be5 100644 --- a/map/autoware_map_tf_generator/README.md +++ b/map/autoware_map_tf_generator/README.md @@ -18,20 +18,21 @@ ### 入力 #### autoware_pcd_map_tf_generator + - ~/map/pcd_map/point_cloud2: PCD形式のマップデータ - ~/localization/current_pose: 自車位置のトピック -| 名前 | タイプ | 説明 | -| --------------------- | ------------------------------------------------ | ------------------------------------------------------------------------ | +| 名前 | タイプ | 説明 | +| --------------------- | ------------------------------- | ------------------------------------------------------------------------- | | `/map/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | `viewer` フレームの位置を計算するためのポイントクラウドマップを購読します | #### autoware_vector_map_tf_generator Vector map publisher that converts map messages received on the ROS topic `/map` to a TF tree, and publishes it on the ROS topic `/tf`. -| 名前 | タイプ | 説明 | -| ------------------- | -------------------------------------------- | ------------------------------------------------------------- | -| `/map/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップをサブスクライブして `viewer` フレームの位置を計算する | +| 名前 | タイプ | 説明 | +| ----------------- | --------------------------------------- | -------------------------------------------------------------------- | +| `/map/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップをサブスクライブして `viewer` フレームの位置を計算する | ### 定常状態計画(SSS)プロセス @@ -44,19 +45,23 @@ SSSプロセスは、以下のようなタスクを実行します。 SSSプロセスは、以下からなる複数のモジュールで構成されています。 - **障害物除去モジュール:** + - レーダーセンサーやカメラセンサーから取得した障害物情報を処理します。 - 障害物情報をSSSマップにマージして、通行可能な領域を更新します。 - **パス計画モジュール:** + - Local Plannerから生成されたパスを受け取ります。 - SSSマップ上の通行可能な領域に基づいて、パスを修正して安全性を確保します。 - **速度計画モジュール:** + - パス計画モジュールから修正されたパスを受け取ります。 - 速度逸脱量と加速度逸脱量を計算します。 - Reference Pathに沿った速度プロファイルを作成します。 - **Reference Path生成モジュール:** + - パス計画モジュールから修正されたパスと速度プロファイルを受け取ります。 - パスを滑らかに補間して、Reference Pathを生成します。 - 自車位置を考慮してReference Pathを補正します。 @@ -65,8 +70,8 @@ SSSプロセスは、以下からなる複数のモジュールで構成され - Reference Pathをリサンプリングして、一定の時間間隔でデータポイントを作成します。 - 'post resampling'によって、以降のコンポーネントへのスムーズなデータ引き渡しが可能になります。 -| 名称 | タイプ | 説明 | -| ------------ | ------------------------ | ------------------------- | +| 名称 | タイプ | 説明 | +| ------------ | ------------------------ | ---------------------------------- | | `/tf_static` | `tf2_msgs/msg/TFMessage` | `viewer`フレームをブロードキャスト | ## パラメータ @@ -82,4 +87,3 @@ SSSプロセスは、以下からなる複数のモジュールで構成され ## 想定 / 制限事項 未定義。 - diff --git a/map/map_loader/README.md b/map/map_loader/README.md index 51c7807105f78..40a15e4b018c7 100644 --- a/map/map_loader/README.md +++ b/map/map_loader/README.md @@ -22,7 +22,7 @@ 単一の .pcd ファイルまたは複数の .pcd ファイルを提供できます。複数の PCD データを使用する場合は、次のルールに従う必要があります。 -1. **ポイントクラウド マップは、`map_projection_loader` で定義された同じ座標に投影する必要があります**。これは、車線マップと、局所座標と測地座標を変換する他のパッケージと整合性を保つためです。詳細については、[``map_projection_loader`` の README](https://github.com/autowarefoundation/autoware.universe/tree/main/map/autoware_map_projection_loader/README.md) を参照してください。 +1. **ポイントクラウド マップは、`map_projection_loader` で定義された同じ座標に投影する必要があります**。これは、車線マップと、局所座標と測地座標を変換する他のパッケージと整合性を保つためです。詳細については、[`map_projection_loader` の README](https://github.com/autowarefoundation/autoware.universe/tree/main/map/autoware_map_projection_loader/README.md) を参照してください。 2. **x 軸と y 軸に平行な直線で分割する必要があります**。このシステムは、対角線または曲線による分割をサポートしていません。 3. **各軸に沿った分割サイズは等しくする必要があります**。特に、分割サイズが大きすぎる (たとえば、100 m 以上) 場合は、[ndt_scan_matcher](https://github.com/autowarefoundation/autoware.universe/tree/main/localization/autoware_ndt_scan_matcher) と [autoware_compare_map_segmentation](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_compare_map_segmentation) の動的マップのローディング機能に悪影響を与える可能性があるため注意してください。 4. **すべての分割マップは互いに重複しないようにする必要があります**。 @@ -32,7 +32,6 @@ メタデータは次のようになります。 - ```yaml x_resolution: 20.0 y_resolution: 20.0 @@ -48,9 +47,9 @@ D.pcd: [1240, 2520] # -> 1240 < x < 1260, 2520 < y < 2540 点群マップのフォーマットは次のとおりです。 -```` +``` .pcd -```` +``` - `x_resolution`と`y_resolution` - `A.pcd`, `B.pcd`などはPCDファイルの名前です。 @@ -62,7 +61,6 @@ D.pcd: [1240, 2520] # -> 1240 < x < 1260, 2520 < y < 2540 点群マップが1つしかない場合、Autowareはデフォルトで次のディレクトリ構造を使用します。 - ```bash sample-map-rosbag ├── lanelet2_map.osm @@ -71,7 +69,6 @@ sample-map-rosbag 複数ロズバッグがある場合は、次のようになります。マルチポイントクラウドマップファイルがある場合はメタデータを用意する必要があります。 - ```bash sample-map-rosbag ├── lanelet2_map.osm @@ -178,4 +175,3 @@ lanelet2_map_visualizationは、autoware_map_msgs/LaneletMapBinメッセージ ### パブリッシュするトピック - ~output/lanelet2_map_marker (visualization_msgs/MarkerArray) : RViz用の可視化メッセージ - diff --git a/map/util/lanelet2_map_preprocessor/README.md b/map/util/lanelet2_map_preprocessor/README.md index 43dbec43e8cf2..e6394d74e54cd 100644 --- a/map/util/lanelet2_map_preprocessor/README.md +++ b/map/util/lanelet2_map_preprocessor/README.md @@ -1,2 +1 @@ このパッケージは に移動されました。 - diff --git a/perception/autoware_bytetrack/README.md b/perception/autoware_bytetrack/README.md index 3b5fa5db21381..a749f0741eb9c 100644 --- a/perception/autoware_bytetrack/README.md +++ b/perception/autoware_bytetrack/README.md @@ -34,8 +34,8 @@ #### 入力 -| 名称 | タイプ | 説明 | -|---|---|---| +| 名称 | タイプ | 説明 | +| --------- | -------------------------------------------------- | ---------------------------------------------- | | `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックスを伴う検出オブジェクト | #### 自動運転ソフトウェアの日本語ドキュメント @@ -48,44 +48,44 @@ Autowareは、モジュール化されたアーキテクチャに基づいており、次の主要なコンポーネントで構成されています。 -* **Perception:** センサーデータからオブジェクト、道路、およびその他の環境情報を検出し、追跡します。 -* **Planning:** 自車の経路を生成し、周囲の状況に応じて最適化します。 -* **Control:** 生成された経路に従って自車を制御します。 -* **Localization:** 自車位置と姿勢を推定します。 -* **Behavior Planning:** 交通規則や社会的規範に基づいて、自車の挙動を制御します。 -* **Map:** 道路網、交通規制、およびその他の環境情報を提供します。 +- **Perception:** センサーデータからオブジェクト、道路、およびその他の環境情報を検出し、追跡します。 +- **Planning:** 自車の経路を生成し、周囲の状況に応じて最適化します。 +- **Control:** 生成された経路に従って自車を制御します。 +- **Localization:** 自車位置と姿勢を推定します。 +- **Behavior Planning:** 交通規則や社会的規範に基づいて、自車の挙動を制御します。 +- **Map:** 道路網、交通規制、およびその他の環境情報を提供します。 **コンポーネント** **Perceptionコンポーネント** -* カメラ感知 -* LiDAR感知 -* レーダー感知 +- カメラ感知 +- LiDAR感知 +- レーダー感知 **Planningコンポーネント** -* Motion Planning -* Trajectory Planning -* Path Tracking +- Motion Planning +- Trajectory Planning +- Path Tracking **Controlコンポーネント** -* ステアリング制御 -* アクセル/ブレーキ制御 -* 協調運動制御 +- ステアリング制御 +- アクセル/ブレーキ制御 +- 協調運動制御 **Localizationコンポーネント** -* GPS -* IMU -* オドメトリ +- GPS +- IMU +- オドメトリ **Behavior Planningコンポーネント** -* 交通信号制御 -* 歩行者横断制御 -* 車線変更制御 +- 交通信号制御 +- 歩行者横断制御 +- 車線変更制御 **インターフェース** @@ -95,9 +95,9 @@ Autowareコンポーネントは、ROSインターフェースを使用して相 Autowareは、開発プロセスをサポートするための独自のツールを提供しています。 -* **Autoware.AI:** Autowareソフトウェアを構築、テスト、展開するための包括的なプラットフォーム。 -* **OpenPlanner:** プランニングアルゴリズムの開発とシミュレーションのためのツール。 -* **CARLA:** 自動運転ソフトウェアのテストのためのシミュレーター。 +- **Autoware.AI:** Autowareソフトウェアを構築、テスト、展開するための包括的なプラットフォーム。 +- **OpenPlanner:** プランニングアルゴリズムの開発とシミュレーションのためのツール。 +- **CARLA:** 自動運転ソフトウェアのテストのためのシミュレーター。 **追加情報** @@ -107,36 +107,36 @@ Autowareコミュニティフォーラムおよびドキュメントページか このドキュメントに記載されている情報は、Autowareプロジェクトの現在の開発状況に基づいています。将来のリリースで変更される場合があります。 -| 名称 | タイプ | 説明 | -|---|---|---| -| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックスを含む検出した物体 | -| `out/objects/debug/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各物体のユニバーサル一意識別子(UUID) | +| 名称 | タイプ | 説明 | +| ------------------------ | -------------------------------------------------- | ------------------------------------------ | +| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックスを含む検出した物体 | +| `out/objects/debug/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各物体のユニバーサル一意識別子(UUID) | ### bytetrack_visualizer #### 入力 -| 名称 | 型 | 説明 | -|---|---|---| -| `in/image` | `sensor_msgs/Image` または `sensor_msgs/CompressedImage` | オブジェクト検出を実行する入力画像 | -| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2D バウンディングボックスを備えた検出オブジェクト | -| `in/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各オブジェクトの一意の識別子 (UUID) | -| `in/planning_status` | PlanningStatus | Planningモジュールによって計算された、自車位置と周囲の車両の状況 | -| `out/path` | `tier4_planning_msgs/Path` | Planningモジュールによって生成された予定経路 | -| `out/predicted_objects` | `tier4_planning_msgs/PredictedObjects` | 他の車両の予測軌跡 | -| `out/optimized_path` | `tier4_planning_msgs/OptimizedPath` | `post resampling` と走行性改善を適用した最適化された予定経路 | -| `out/published_objects` | `tier4_perception_msgs/PublishedObject` | Autowareが一般的なトピックに公開するオブジェクト | -| `in/odom` | `nav_msgs/Odometry` | 自車位置と速度 | -| `in/detected_lane` | `DetectedLaneArray` | 認識された車線 | -| `out/optimized_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「最適化された」もの | -| `out/regular_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「一般」のもの | -| `out/emergency_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「緊急」のもの | -| `out/velocity_diff` | `geometry_msgs/Twist` | `in/odom` と `optimized_pose` の速度の差 | -| `out/acceleration_diff` | `geometry_msgs/Twist` | `in/odom` と `optimized_pose` の加速度の差 | -| `out/velocity_diff_with_filtered_brake` | `geometry_msgs/Twist` | フィルタリングされたブレーキをかけた `velocity_diff` | -| `out/acceleration_diff_with_filtered_brake` | `geometry_msgs/Twist` | フィルタリングされたブレーキをかけた `acceleration_diff` | -| `out/velocity_diff_with_filtered_gear` | `geometry_msgs/Twist` | フィルタリングされたギアをかけた `velocity_diff` | -| `out/acceleration_diff_with_filtered_gear` | `geometry_msgs/Twist` | フィルタリングされたギアをかけた `acceleration_diff` | +| 名称 | 型 | 説明 | +| ------------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------- | +| `in/image` | `sensor_msgs/Image` または `sensor_msgs/CompressedImage` | オブジェクト検出を実行する入力画像 | +| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2D バウンディングボックスを備えた検出オブジェクト | +| `in/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各オブジェクトの一意の識別子 (UUID) | +| `in/planning_status` | PlanningStatus | Planningモジュールによって計算された、自車位置と周囲の車両の状況 | +| `out/path` | `tier4_planning_msgs/Path` | Planningモジュールによって生成された予定経路 | +| `out/predicted_objects` | `tier4_planning_msgs/PredictedObjects` | 他の車両の予測軌跡 | +| `out/optimized_path` | `tier4_planning_msgs/OptimizedPath` | `post resampling` と走行性改善を適用した最適化された予定経路 | +| `out/published_objects` | `tier4_perception_msgs/PublishedObject` | Autowareが一般的なトピックに公開するオブジェクト | +| `in/odom` | `nav_msgs/Odometry` | 自車位置と速度 | +| `in/detected_lane` | `DetectedLaneArray` | 認識された車線 | +| `out/optimized_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「最適化された」もの | +| `out/regular_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「一般」のもの | +| `out/emergency_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「緊急」のもの | +| `out/velocity_diff` | `geometry_msgs/Twist` | `in/odom` と `optimized_pose` の速度の差 | +| `out/acceleration_diff` | `geometry_msgs/Twist` | `in/odom` と `optimized_pose` の加速度の差 | +| `out/velocity_diff_with_filtered_brake` | `geometry_msgs/Twist` | フィルタリングされたブレーキをかけた `velocity_diff` | +| `out/acceleration_diff_with_filtered_brake` | `geometry_msgs/Twist` | フィルタリングされたブレーキをかけた `acceleration_diff` | +| `out/velocity_diff_with_filtered_gear` | `geometry_msgs/Twist` | フィルタリングされたギアをかけた `velocity_diff` | +| `out/acceleration_diff_with_filtered_gear` | `geometry_msgs/Twist` | フィルタリングされたギアをかけた `acceleration_diff` | #### 出力 @@ -166,29 +166,29 @@ Autowareコミュニティフォーラムおよびドキュメントページか 追従制御量は、次の形式です。 -* 横方向速度逸脱量(lateral velocity error) -* 横方向加速度逸脱量(lateral acceleration error) -* 縦方向速度逸脱量(longitudinal velocity error) -* 縦方向加速度逸脱量(longitudinal acceleration error) +- 横方向速度逸脱量(lateral velocity error) +- 横方向加速度逸脱量(lateral acceleration error) +- 縦方向速度逸脱量(longitudinal velocity error) +- 縦方向加速度逸脱量(longitudinal acceleration error) ### パラメータ 追従アルゴリズムのパラメータは、次のとおりです。 -* 再サンプリング間隔(resampling interval) -* 前方検索距離(lookahead distance) +- 再サンプリング間隔(resampling interval) +- 前方検索距離(lookahead distance) ### 注意事項 次の点に注意してください。 -* 追従アルゴリズムは、 planificatorによって生成された経路に依存しています。 -* 追従アルゴリズムは、車両の動的特性とは無関係です。 -* 追従アルゴリズムは、リアルタイムで動作するように設計されています。 +- 追従アルゴリズムは、 planificatorによって生成された経路に依存しています。 +- 追従アルゴリズムは、車両の動的特性とは無関係です。 +- 追従アルゴリズムは、リアルタイムで動作するように設計されています。 -| 名前 | タイプ | 説明 | -| ----------- | ------------------- | ------------------------------------------------------------------- | -| `out/image` | `sensor_msgs/Image` | 検出された境界ボックスとそのUUIDが描画された画像 | +| 名前 | タイプ | 説明 | +| ----------- | ------------------- | ------------------------------------------------ | +| `out/image` | `sensor_msgs/Image` | 検出された境界ボックスとそのUUIDが描画された画像 | ## パラメータ @@ -196,18 +196,17 @@ Autowareコミュニティフォーラムおよびドキュメントページか #### Planningモジュール用のパラメータ -| 名前 | タイプ | デフォルト値 | 説明 | -| --------------------- | ---- | ------------- | ------------------------------------------- | -| `track_buffer_length` | int | 30 | トラッキングが失われたと見なされるフレーム数 | +| 名前 | タイプ | デフォルト値 | 説明 | +| --------------------- | ------ | ------------ | -------------------------------------------- | +| `track_buffer_length` | int | 30 | トラッキングが失われたと見なされるフレーム数 | ### bytetrack_visualizer ※: このドキュメントはAutoware.Autoの開発ドキュメントの一部です。 - -| 名称 | 種類 | デフォルト値 | 説明 | -| --------- | ---- | ------------- | ---------------------------------------------------------------------------------------------- | -| `use_raw` | bool | false | ノードが `sensor_msgs/Image` または `sensor_msgs/CompressedImage` を入力として切り替える場合のフラグ | +| 名称 | 種類 | デフォルト値 | 説明 | +| --------- | ---- | ------------ | ---------------------------------------------------------------------------------------------------- | +| `use_raw` | bool | false | ノードが `sensor_msgs/Image` または `sensor_msgs/CompressedImage` を入力として切り替える場合のフラグ | ## 想定/既知の制限 @@ -229,4 +228,3 @@ Autowareコミュニティフォーラムおよびドキュメントページか > 上記の著作権表示およびこの通知は、ソフトウェアのすべての複製または重要な部分に含まれる必要があります。 > > ソフトウェアは明示的または黙示的に保証されることなく、「現状のまま」提供されます。商品性、特定の目的への適合性、非侵害の保証を含むがこれらに限定されない保証は含まれます。いかなる場合も、著作権者または権利者は、契約、不法行為、またはその他の行為に関連して、またはその結果、ソフトウェアまたはソフトウェアの使用または他の取り扱いから生じる請求、損害、またはその他の責任について責任を負いません。 - diff --git a/perception/autoware_cluster_merger/README.md b/perception/autoware_cluster_merger/README.md index 7ef6415ad6a96..27ececee6de7e 100644 --- a/perception/autoware_cluster_merger/README.md +++ b/perception/autoware_cluster_merger/README.md @@ -12,8 +12,8 @@ autoware_cluster_mergerは、特徴種別ごとにより検出された対象を ### 入力 -| 名称 | タイプ | 説明 | -| ---------------- | -------------------------------------------------------- | ------------------- | +| 名称 | タイプ | 説明 | +| ---------------- | -------------------------------------------------------- | ------------------ | | `input/cluster0` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | pointcloudクラスタ | | `input/cluster1` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | pointcloudクラスタ | @@ -27,55 +27,55 @@ autoware_cluster_mergerは、特徴種別ごとにより検出された対象を **BEV Planner** -* 障害物検出および分類 -* 静的障害物と動的障害物のトラッキング -* **Planning**領域内のフリースペースの推定 +- 障害物検出および分類 +- 静的障害物と動的障害物のトラッキング +- **Planning**領域内のフリースペースの推定 **Maneuver Planner** -* 自車位置を考慮した**Planning**領域内のマニューバの生成 -* 交通規則と安全要件を遵守するマニューバの選定 -* 経路候補の生成 +- 自車位置を考慮した**Planning**領域内のマニューバの生成 +- 交通規則と安全要件を遵守するマニューバの選定 +- 経路候補の生成 **Path Planner** -* マニューバから最適経路を生成 -* 経路の滑らかさと安全性を確保する最適化 -* 車両の動的制限を考慮した経路の生成 +- マニューバから最適経路を生成 +- 経路の滑らかさと安全性を確保する最適化 +- 車両の動的制限を考慮した経路の生成 **追従モード** 追従モードでは、**Planning**モジュールは前走車を監視し、次のタスクを実行します。 -* 前走車の速度と相対位置の追跡 -* 安全な車間距離の維持 -* `post resampling`を使用して経路を更新し、前走車の挙動の変化に対応 +- 前走車の速度と相対位置の追跡 +- 安全な車間距離の維持 +- `post resampling`を使用して経路を更新し、前走車の挙動の変化に対応 **経路計画モード** 経路計画モードでは、**Planning**モジュールは、指定された目的地までの経路を生成します。このモードでは、次のタスクが実行されます。 -* ナビゲーションデータからの経路候補の生成 -* 障害物や交通規制を考慮した経路の選択 -* 衝突の回避と車両の安全を確保する経路の最適化 +- ナビゲーションデータからの経路候補の生成 +- 障害物や交通規制を考慮した経路の選択 +- 衝突の回避と車両の安全を確保する経路の最適化 **エラー処理** **Planning**モジュールは、さまざまなエラーを検出して処理します。これらのエラーには以下が含まれます。 -* 障害物との衝突 -* velocity逸脱量 -* acceleration逸脱量 -* など +- 障害物との衝突 +- velocity逸脱量 +- acceleration逸脱量 +- など -| 名前 | タイプ | 説明 | -| ---------------- | ------------------------------------------------------- | ------------ | +| 名前 | タイプ | 説明 | +| ----------------- | -------------------------------------------------------- | -------------------- | | `output/clusters` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | マージされたクラスタ | ## パラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -| :---------------- | :----- | :----------------------------------- | :------------ | +| 名称 | タイプ | 説明 | デフォルト値 | +| :---------------- | :----- | :------------------------------ | :------------ | | `output_frame_id` | 文字列 | 出力トピックのheader frame_id。 | **base_link** | -------------------- +--- ## 仮定 / 既知の制限 @@ -192,4 +192,3 @@ Example: --> ## (任意) 将来の拡張機能 / 未実装部分 - diff --git a/perception/autoware_compare_map_segmentation/README.md b/perception/autoware_compare_map_segmentation/README.md index 958aa002e5702..338420c768b62 100644 --- a/perception/autoware_compare_map_segmentation/README.md +++ b/perception/autoware_compare_map_segmentation/README.md @@ -38,9 +38,9 @@ #### 入力 -| 名前 | タイプ | 説明 | +| 名前 | タイプ | 説明 | | ----------------------- | ------------------------------- | ---------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点 | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点 | | `~/input/elevation_map` | `grid_map::msg::GridMap` | 標高マップ | #### 出力 @@ -100,27 +100,27 @@ PIDプランニングの性能は、以下を含むパラメータによって これらのパラメータは、車両のダイナミクスとアプリケーションの要件に応じて調整する必要があります。 -| 名前 | 種別 | 説明 | -| ----------------- | ------------------------------- | --------------- | +| 名前 | 種別 | 説明 | +| ----------------- | ------------------------------- | ------------------------- | | `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリングされた点 群 | #### パラメーター -| 名前 | タイプ | 説明 | デフォルト値 | -| :------------------- | :----- | :------------------------------------------------------------------------------ | :------------ | -| `map_layer_name` | 文字列 | 標高マップレイヤー名 | elevation | -| `map_frame` | 浮動小数 | 標高マップサブスクライブ前のマップのframe_id | マップ | -| `height_diff_thresh` | 浮動小数 | この値より標高差が小さい点は削除 [m] | 0.15 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------- | :------- | :------------------------------------------- | :----------- | +| `map_layer_name` | 文字列 | 標高マップレイヤー名 | elevation | +| `map_frame` | 浮動小数 | 標高マップサブスクライブ前のマップのframe_id | マップ | +| `height_diff_thresh` | 浮動小数 | この値より標高差が小さい点は削除 [m] | 0.15 | ### 他のフィルタ #### 入力 -| 名前 | タイプ | 説明 | -| ------------------------------- | ------------------------------- | ------------------------------------------------------ | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | リファレンスポイント | -| `~/input/map` | `sensor_msgs::msg::PointCloud2` | マップ(静的マップをロードする場合) | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 自車位置(動的マップをロードする場合) | +| 名前 | タイプ | 説明 | +| ------------------------------- | ------------------------------- | -------------------------------------- | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | リファレンスポイント | +| `~/input/map` | `sensor_msgs::msg::PointCloud2` | マップ(静的マップをロードする場合) | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 自車位置(動的マップをロードする場合) | #### 出力 @@ -134,105 +134,105 @@ Autowareによる自動運転ソフトウェア文書の日本語訳 Autowareのセーフティコンポーネントは、以下のサブコンポーネントで構成されています。 -* **モーションプランニング** -* **オブジェクト認識** -* **センサフュージョン** +- **モーションプランニング** +- **オブジェクト認識** +- **センサフュージョン** **モーションプランニング** モーションプランニングサブコンポーネントは、車両の移動経路を生成します。 この経路は、以下の情報に基づいて生成されます。 -* **自車位置** -* **目標位置** -* **車両の周囲環境(オブジェクト認識によって検出)** +- **自車位置** +- **目標位置** +- **車両の周囲環境(オブジェクト認識によって検出)** モーションプランニングサブコンポーネントは、以下のアルゴリズムを使用して経路を生成します。 -* **DWA(動的ウィンドウアプローチ)** -* **EB(弾性バンドメソッド)** -* **PRM(確率的ロードマップ法)** +- **DWA(動的ウィンドウアプローチ)** +- **EB(弾性バンドメソッド)** +- **PRM(確率的ロードマップ法)** **オブジェクト認識** オブジェクト認識サブコンポーネントは、車両の周囲環境内のオブジェクトを検出します。 このサブコンポーネントは、以下のセンサからのデータを使用してオブジェクトを検出します。 -* **LiDAR** -* **カメラ** -* **レーダー** +- **LiDAR** +- **カメラ** +- **レーダー** オブジェクト認識サブコンポーネントは、以下のアルゴリズムを使用してオブジェクトを検出します。 -* **PCL(点群ライブラリ)** -* **オープンCV** -* **深度学習** +- **PCL(点群ライブラリ)** +- **オープンCV** +- **深度学習** **センサフュージョン** センサフュージョンサブコンポーネントは、さまざまなセンサからのデータを統合します。統合されたデータは、車両の周囲環境のより正確で完全な表現を提供します。センサフュージョンサブコンポーネントは、以下のアルゴリズムを使用してデータを統合します。 -* **カルマンフィルタ** -* **粒子フィルタ** -* **グラフ最適化** +- **カルマンフィルタ** +- **粒子フィルタ** +- **グラフ最適化** **セーフティチェック** セーフティチェックサブコンポーネントは、車両の動作をリアルタイムで監視します。 このサブコンポーネントは、以下のパラメータを監視します。 -* **速度** -* **加速度** -* **ヨー角速度** -* **制動圧** +- **速度** +- **加速度** +- **ヨー角速度** +- **制動圧** セーフティチェックサブコンポーネントは、以下の基準に基づいて潜在的な危険を特定します。 -* **安全限界の逸脱** -* **異常動作** -* **予想外のイベント** +- **安全限界の逸脱** +- **異常動作** +- **予想外のイベント** **応答アクション** 潜在的な危険が特定されると、セーフティチェックサブコンポーネントは他のコンポーネントに警告を発し、以下の応答アクションを実行します。 -* **速度の低下** -* **方向転換** -* **制動** -* **衝突回避** +- **速度の低下** +- **方向転換** +- **制動** +- **衝突回避** **インターフェース** セーフティコンポーネントは、以下のインターフェースを他のコンポーネントと持っています。 -* **Planningコンポーネント** -* **コントロールコンポーネント** -* **ヒューマンマシンインターフェースコンポーネント** +- **Planningコンポーネント** +- **コントロールコンポーネント** +- **ヒューマンマシンインターフェースコンポーネント** **パフォーマンス** セーフティコンポーネントは、他のコンポーネントを妨げずにリアルタイムで動作するように設計されています。 このコンポーネントは、以下を含むさまざまな条件下でテストされており、確実にその機能を実行することが証明されています。 -* **さまざまな道路状況** -* **さまざまな気象条件** -* **さまざまな交通状況** +- **さまざまな道路状況** +- **さまざまな気象条件** +- **さまざまな交通状況** **結論** Autowareのセーフティコンポーネントは、自動運転システムにおける安全上の要件を満たすために不可欠です。 このコンポーネントは、リアルタイムで車両の動作を監視し、潜在的な危険を特定し、衝突回避などの適切な対策を講じます。 -| 名前 | タイプ | 説明 | -| -------------------------- | --------------------------------------------------- | -------------------------------------- | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタされたポイント | +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------------- | ---------------------- | +| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタされたポイント | #### パラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `use_dynamic_map_loading` | ブーリアン | マップ読み込みモードの選択、`true` は動的マップ読み込み、`false` は静的マップ読み込み、分割なしのマップポイントクラウドの場合に推奨 | true | -| `distance_threshold` | 浮動小数点数 | マップポイントと入力ポイントを比較するしきい値距離 [m] | 0.5 | -| `map_update_distance_threshold` | 浮動小数点数 | マップの更新が必要な場合の車両移動距離のしきい値(動的マップ読み込み時)[m] | 10.0 | -| `map_loader_radius` | 浮動小数点数 | 読み込む必要があるマップの半径(動的マップ読み込み時)[m] | 150.0 | -| `timer_interval_ms` | 整数 | マップの更新が必要かどうかを確認するためのタイマー間隔(動的マップ読み込み時)[ms] | 100 | -| `publish_debug_pcd` | ブーリアン | デバッグ用に`debug/downsampled_map/pointcloud`にボクセル化された更新マップをパブリッシュするかどうか。追加の計算コストが発生する可能性があります。 | false | -| `downsize_ratio_z_axis` | 倍数 | z軸の`voxel_leaf_size`と近傍点の距離しきい値を減らすための正の倍率 | 0.5 | +| 名称 | タイプ | 説明 | デフォルト値 | +| ------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `use_dynamic_map_loading` | ブーリアン | マップ読み込みモードの選択、`true` は動的マップ読み込み、`false` は静的マップ読み込み、分割なしのマップポイントクラウドの場合に推奨 | true | +| `distance_threshold` | 浮動小数点数 | マップポイントと入力ポイントを比較するしきい値距離 [m] | 0.5 | +| `map_update_distance_threshold` | 浮動小数点数 | マップの更新が必要な場合の車両移動距離のしきい値(動的マップ読み込み時)[m] | 10.0 | +| `map_loader_radius` | 浮動小数点数 | 読み込む必要があるマップの半径(動的マップ読み込み時)[m] | 150.0 | +| `timer_interval_ms` | 整数 | マップの更新が必要かどうかを確認するためのタイマー間隔(動的マップ読み込み時)[ms] | 100 | +| `publish_debug_pcd` | ブーリアン | デバッグ用に`debug/downsampled_map/pointcloud`にボクセル化された更新マップをパブリッシュするかどうか。追加の計算コストが発生する可能性があります。 | false | +| `downsize_ratio_z_axis` | 倍数 | z軸の`voxel_leaf_size`と近傍点の距離しきい値を減らすための正の倍率 | 0.5 | ## 前提条件 / 制限事項 @@ -243,4 +243,3 @@ Autowareのセーフティコンポーネントは、自動運転システムに ## (任意)外部リンク/外部リファレンス ## (任意)将来の拡張 / 未実装部分 - diff --git a/perception/autoware_crosswalk_traffic_light_estimator/README.md b/perception/autoware_crosswalk_traffic_light_estimator/README.md index 37ec6109a9761..52b891b051685 100644 --- a/perception/autoware_crosswalk_traffic_light_estimator/README.md +++ b/perception/autoware_crosswalk_traffic_light_estimator/README.md @@ -8,11 +8,11 @@ ### 入力 -| 名前 | 型 | 説明 | -| ------------------------------------ | ------------------------------------------------- | ------------------ | -| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | -| `~/input/route` | `autoware_planning_msgs::msg::LaneletRoute` | route | -| `~/input/classified/traffic_signals` | `tier4_perception_msgs::msg::TrafficSignalArray` | 交通信号 | +| 名前 | 型 | 説明 | +| ------------------------------------ | ------------------------------------------------ | ---------- | +| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | +| `~/input/route` | `autoware_planning_msgs::msg::LaneletRoute` | route | +| `~/input/classified/traffic_signals` | `tier4_perception_msgs::msg::TrafficSignalArray` | 交通信号 | ### 出力 @@ -26,37 +26,37 @@ Planning コンポーネントは、周囲環境からのセンサーデータ **機能** -* **周囲環境認識:** レーダー、カメラ、LiDAR データを使用して、車両、歩行者、障害物を検出します。 -* **自車位置推定:** GPS、IMU、輪速センサーを使用して、自車位置と姿勢を推定します。 -* **経路計画:** 安全で効率的な経路を生成します。 -* **制御指令生成:** 制御システムに速度、加速度、ステアリング角の指令を出力します。 +- **周囲環境認識:** レーダー、カメラ、LiDAR データを使用して、車両、歩行者、障害物を検出します。 +- **自車位置推定:** GPS、IMU、輪速センサーを使用して、自車位置と姿勢を推定します。 +- **経路計画:** 安全で効率的な経路を生成します。 +- **制御指令生成:** 制御システムに速度、加速度、ステアリング角の指令を出力します。 **アルゴリズム** -* **'post resampling'` データ処理を使用して、センサーデータを適合させます。 -* **動的計画法**を使用して、最適な経路を検索します。 -* **モデル予測制御**を使用して、制御指令を生成します。 +- \*\*'post resampling'` データ処理を使用して、センサーデータを適合させます。 +- **動的計画法**を使用して、最適な経路を検索します。 +- **モデル予測制御**を使用して、制御指令を生成します。 **安全機能** -* **衝突検出:** 衝突の可能性を検出して、緊急停止を実行します。 -* **加速度と速度逸脱量監視:** 制御指令が安全な範囲内にあることを確認します。 -* **センサー障害監視:** センサーの障害を検出して、安全に停止または駐車します。 +- **衝突検出:** 衝突の可能性を検出して、緊急停止を実行します。 +- **加速度と速度逸脱量監視:** 制御指令が安全な範囲内にあることを確認します。 +- **センサー障害監視:** センサーの障害を検出して、安全に停止または駐車します。 **Autoware との統合** この Planning コンポーネントは、Autoware プラットフォームと統合されています。Autoware と連携して、周囲環境の認識、自車位置の推定、経路計画を実行します。 -| 名称 | タイプ | 説明 | -| -------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------- | -| `~/output/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 推定歩行者用信号機を含む出力 | +| 名称 | タイプ | 説明 | +| -------------------------- | ------------------------------------------------------- | ---------------------------- | +| `~/output/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 推定歩行者用信号機を含む出力 | ## パラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -| :-------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `use_last_detect_color` | `bool` | このパラメータが `true` の場合、このモジュールは、車両の信号が GREEN/AMBER として検出されるだけでなく、検出結果が GREEN/AMBER から UNKNOWN に変わっても歩行者の信号を RED として推定します。(検出結果が RED または AMBER を UNKNOWN に変えた場合、このモジュールは歩行者の信号を UNKNOWN として推定します)。このパラメータが `false` の場合、このモジュールは推定に最新の検出結果のみを使用します。(検出結果が GREEN/AMBER の場合のみ、このモジュールは歩行者の信号を RED として推定します。) | `true` | -| `last_detect_color_hold_time` | `double` | 検出された最後の色の保持時間のしきい値。 | `2.0` | +| 名前 | タイプ | 説明 | デフォルト値 | +| :---------------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| `use_last_detect_color` | `bool` | このパラメータが `true` の場合、このモジュールは、車両の信号が GREEN/AMBER として検出されるだけでなく、検出結果が GREEN/AMBER から UNKNOWN に変わっても歩行者の信号を RED として推定します。(検出結果が RED または AMBER を UNKNOWN に変えた場合、このモジュールは歩行者の信号を UNKNOWN として推定します)。このパラメータが `false` の場合、このモジュールは推定に最新の検出結果のみを使用します。(検出結果が GREEN/AMBER の場合のみ、このモジュールは歩行者の信号を RED として推定します。) | `true` | +| `last_detect_color_hold_time` | `double` | 検出された最後の色の保持時間のしきい値。 | `2.0` | ## 内部構造 / アルゴリズム @@ -64,53 +64,63 @@ Planning コンポーネントは、周囲環境からのセンサーデータ **Planningコンポーネント** -* **カーパスジェネレータ:** - * 自己位置、障害物、および経路情報の観測値を使用して、経路を生成します。 +- **カーパスジェネレータ:** -* **経路評価器:** - * 複数の経路の安全性、快適性、および実現可能性を評価します。 + - 自己位置、障害物、および経路情報の観測値を使用して、経路を生成します。 -* **経路プランナー:** - * 評価された経路から最適な経路を選択します。 +- **経路評価器:** -* **操舵制御器:** - * 自己位置と目標経路に応じて、操舵角を生成します。 + - 複数の経路の安全性、快適性、および実現可能性を評価します。 -* **速度制御器:** - * 加速度と速度を制御し、快適性と安全性を確保します。 +- **経路プランナー:** -* **安全監視器:** - * 危険な状況を監視し、必要に応じて緊急ブレーキや緊急回避操作をトリガーします。 + - 評価された経路から最適な経路を選択します。 + +- **操舵制御器:** + + - 自己位置と目標経路に応じて、操舵角を生成します。 + +- **速度制御器:** + + - 加速度と速度を制御し、快適性と安全性を確保します。 + +- **安全監視器:** + - 危険な状況を監視し、必要に応じて緊急ブレーキや緊急回避操作をトリガーします。 **センサーモジュール** -* **ライダー:** - * 車両周辺の3D環境をマッピングします。 +- **ライダー:** + + - 車両周辺の3D環境をマッピングします。 -* **カメラ:** - * 障害物検出、道路認識、および標識認識に使用されます。 +- **カメラ:** -* **慣性測定装置 (IMU):** - * 車両の加速度と角速度情報を提供します。 + - 障害物検出、道路認識、および標識認識に使用されます。 -* **GNSS 受信機:** - * 車両の絶対位置と姿勢情報を提供します。 +- **慣性測定装置 (IMU):** + + - 車両の加速度と角速度情報を提供します。 + +- **GNSS 受信機:** + - 車両の絶対位置と姿勢情報を提供します。 **ロカリゼーションモジュール** -* **自己位置推定器:** - * センサーデータを統合して、自己位置を推定します。 +- **自己位置推定器:** + + - センサーデータを統合して、自己位置を推定します。 -* **マッピングモジュール:** - * 環境認識に使用される高精細マップを生成します。 +- **マッピングモジュール:** + - 環境認識に使用される高精細マップを生成します。 **その他のモジュール** -* **ヒューマンマシンインターフェイス (HMI):** - * ユーザーと車両間のインタラクションを可能にします。 +- **ヒューマンマシンインターフェイス (HMI):** -* **通信モジュール:** - * 他車両やインフラストラクチャとの通信を処理します。 + - ユーザーと車両間のインタラクションを可能にします。 + +- **通信モジュール:** + - 他車両やインフラストラクチャとの通信を処理します。 **主パーセプションパイプライン** @@ -126,20 +136,19 @@ Planning コンポーネントは、周囲環境からのセンサーデータ **主要な課題** -* **リアルタイム処理:** センサーデータの処理と制御出力を生成するために、低遅延で高性能な処理が必要です。 -* **センシングとマッピングの不確実性:** センサーの制限や環境のダイナミックにより、センシングとマッピング情報に不確実性が生じます。 -* **経路計画の最適化:** 交通状況、障害物、および車両の動力学を考慮した、効率的で安全な経路を計画する必要があります。 -* **制御の安定性:** 予測不可能な障害物や滑りやすい路面での車両の安定性を確保する必要があります。 -* **安全性の検証:** 自動運転システムの安全性と信頼性を証明するための厳密な検証と検証が必要です。 +- **リアルタイム処理:** センサーデータの処理と制御出力を生成するために、低遅延で高性能な処理が必要です。 +- **センシングとマッピングの不確実性:** センサーの制限や環境のダイナミックにより、センシングとマッピング情報に不確実性が生じます。 +- **経路計画の最適化:** 交通状況、障害物、および車両の動力学を考慮した、効率的で安全な経路を計画する必要があります。 +- **制御の安定性:** 予測不可能な障害物や滑りやすい路面での車両の安定性を確保する必要があります。 +- **安全性の検証:** 自動運転システムの安全性と信頼性を証明するための厳密な検証と検証が必要です。 **Autoware の設計原則** -* **モジュール性:** システムを自律的かつ再利用可能なコンポーネントに分解します。 -* **拡張性:** オープンソースのソフトウェアアーキテクチャにより、新しい機能やアルゴリズムの統合が容易になります。 -* **リアルタイム性:** 低遅延の処理を可能にする、最適化されたソフトウェア実装を使用します。 -* **安全性:** 冗長性、フォールトトレランス、および安全監視メカニズムを備えて、安全な運転を確保します。 -* **効率性:** コンピューティングとエネルギーリソースを効率的に使用します。 - +- **モジュール性:** システムを自律的かつ再利用可能なコンポーネントに分解します。 +- **拡張性:** オープンソースのソフトウェアアーキテクチャにより、新しい機能やアルゴリズムの統合が容易になります。 +- **リアルタイム性:** 低遅延の処理を可能にする、最適化されたソフトウェア実装を使用します。 +- **安全性:** 冗長性、フォールトトレランス、および安全監視メカニズムを備えて、安全な運転を確保します。 +- **効率性:** コンピューティングとエネルギーリソースを効率的に使用します。 ```plantuml @@ -194,4 +203,3 @@ end ## 仮定 / 既知の制限事項 ## 将来の拡張機能 / 未実装部分 - diff --git a/perception/autoware_detected_object_feature_remover/README.md b/perception/autoware_detected_object_feature_remover/README.md index 45906147b7fb7..3ef7c9aba8499 100644 --- a/perception/autoware_detected_object_feature_remover/README.md +++ b/perception/autoware_detected_object_feature_remover/README.md @@ -9,19 +9,21 @@ ## 入出力 ### 入力 + - `/detected_objects_with_features` ### 出力 + - `/detected_objects` ## パラメータ -| 名前 | 説明 | 型 | デフォルト値 | -|---|---|---|---| -| `remove_probability` | 確率が低すぎる対象物を削除する | ブール値 | `false` | -| `remove_points` | 点数の低い対象物を削除する | ブール値 | `false` | -| `threshold_probability` | 確率のしきい値 | 倍精度浮動小数点 | `0.5` | -| `threshold_points` | 点数のしきい値 | 倍精度浮動小数点 | `10` | +| 名前 | 説明 | 型 | デフォルト値 | +| ----------------------- | ------------------------------ | ---------------- | ------------ | +| `remove_probability` | 確率が低すぎる対象物を削除する | ブール値 | `false` | +| `remove_points` | 点数の低い対象物を削除する | ブール値 | `false` | +| `threshold_probability` | 確率のしきい値 | 倍精度浮動小数点 | `0.5` | +| `threshold_points` | 点数のしきい値 | 倍精度浮動小数点 | `10` | ## インターフェース @@ -84,8 +86,8 @@ rosparam set /autoware_detected_object_feature_remover/threshold_probability 0.6 3. 入力トピックが正しく発行されていることを確認します。 4. 出力トピックが正しく受信されていることを確認します。 -| 名前 | タイプ | 説明 | -| --------- | --------- | --------- | +| 名前 | タイプ | 説明 | +| --------- | ------------------------------------------------------------ | -------------------------- | | `~/input` | `tier4_perception_msgs::msg::DetectedObjectWithFeatureArray` | 特徴を持つ検出オブジェクト | ### 出力 @@ -140,8 +142,8 @@ Autowareを使用すると、開発者はカスタマイズして特定の車両 これらの指標は、自動運転システムの安全、効率、正確さを評価するために使用されます。 -| 名称 | タイプ | 説明 | -| ---------- | --------------------------------------------------- | --------- | +| 名称 | タイプ | 説明 | +| ---------- | ------------------------------------------------ | ---------------- | | `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | ## パラメータ @@ -149,4 +151,3 @@ Autowareを使用すると、開発者はカスタマイズして特定の車両 なし ## 想定/既知の制限事項 - diff --git a/perception/autoware_detected_object_validation/README.md b/perception/autoware_detected_object_validation/README.md index 7d6086fed8116..ffe28f89a730f 100644 --- a/perception/autoware_detected_object_validation/README.md +++ b/perception/autoware_detected_object_validation/README.md @@ -28,4 +28,3 @@ #### occupancy_grid_based_validator {{ json_to_markdown("perception/autoware_detected_object_validation/schema/occupancy_grid_based_validator.schema.json", "ja") }} - diff --git a/perception/autoware_detection_by_tracker/README.md b/perception/autoware_detection_by_tracker/README.md index ba36661c8abc4..d1f3ba9488893 100644 --- a/perception/autoware_detection_by_tracker/README.md +++ b/perception/autoware_detection_by_tracker/README.md @@ -33,10 +33,10 @@ _[3]から改変]_ ### 入力 -| 名称 | 型 | 説明 | -|---|---|---| +| 名称 | 型 | 説明 | +| ------------------------- | -------------------------------------------------------- | ------------------ | | `~/input/initial_objects` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | 未知のオブジェクト | -| `~/input/tracked_objects` | `tier4_perception_msgs::msg::TrackedObjects` | トラッカー | +| `~/input/tracked_objects` | `tier4_perception_msgs::msg::TrackedObjects` | トラッカー | ### 出力 @@ -45,61 +45,71 @@ _[3]から改変]_ 以下の方法は自己位置推定およびマッピングを処理します。 **Localization and Mapping (ローカライゼーションとマッピング)**: + - 現在の姿勢を推定および追跡します。 - 環境マップを作成および更新します。 **Planning (プランニング)** + - 安全で効率的な経路を計画します。 - 速度、加速度、ステアリングコマンドを生成します。 **Behavior Planning (動作プランニング)** + - 衝突回避のための障害物認識と回避を行います。 - 交通規則とエチケットに従います。 **Behavior Prediction (動作予測)** + - 歩行者、自転車、他の車両の動きを予測します。 - 交差点、人混み、その他の複雑な状況での安全な行動を可能にします。 **Controller (コントローラ)** + - 運転操作を実行します。 - ブレーキ、アクセル、ステアリングの制御を管理します。 **Perception (パーセプション)** + - カメラ、レーダー、LiDARセンサーからのデータを処理します。 - 物体、車線、信号などの周辺環境を認識および分類します。 **センサー** + - レーダー、LiDAR、カメラなどのセンサーを使用します。 - 検出距離、精度、視野などのセンサー特性を考慮します。 **データアグリゲーション** + - 複数のセンサーからのデータを統合します。 - `post resampling`を使用して時間同期された一貫したビューを作成します。 **データアソシエーション** + - 異なるセンサーからの測定結果を同一の対象物に関連付けます。 - KF(カルマンフィルタ)やHD(ハフ距離)などの手法を使用します。 **ステート推定** + - Kalmanフィルタを使用し、センサー測定値から状態を推定します。 - 速度逸脱量、加速度逸脱量などの状態変数を考慮します。 -| 名前 | 種類 | 説明 | -| ---------- | ---------------------------------------------- | ----------- | -| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | オブジェクト | +| 名前 | 種類 | 説明 | +| ---------- | ------------------------------------------------ | ------------ | +| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | オブジェクト | ## パラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `tracker_ignore_label.UNKNOWN` | `bool` | ラベルが不明の場合は、ノードがトラッカーを無視するかどうか | `true` | -| `tracker_ignore_label.CAR` | `bool` | ラベルが CAR の場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.PEDESTRIAN` | `bool` | ラベルが歩行者の場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.BICYCLE` | `bool` | ラベルが自転車の場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.MOTORCYCLE` | `bool` | ラベルがオートバイの場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.BUS` | `bool` | ラベルがバスの場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.TRUCK` | `bool` | ラベルがトラックの場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.TRAILER` | `bool` | ラベルがトレーラーの場合は、ノードがトラッカーを無視するかどうか | `false` | +| 名称 | タイプ | 説明 | デフォルト値 | +| --------------------------------- | ------ | ---------------------------------------------------------------- | ------------ | +| `tracker_ignore_label.UNKNOWN` | `bool` | ラベルが不明の場合は、ノードがトラッカーを無視するかどうか | `true` | +| `tracker_ignore_label.CAR` | `bool` | ラベルが CAR の場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.PEDESTRIAN` | `bool` | ラベルが歩行者の場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.BICYCLE` | `bool` | ラベルが自転車の場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.MOTORCYCLE` | `bool` | ラベルがオートバイの場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.BUS` | `bool` | ラベルがバスの場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.TRUCK` | `bool` | ラベルがトラックの場合は、ノードがトラッカーを無視するかどうか | `false` | +| `tracker_ignore_label.TRAILER` | `bool` | ラベルがトレーラーの場合は、ノードがトラッカーを無視するかどうか | `false` | ## 前提条件と既知の制限事項 @@ -116,4 +126,3 @@ _[3]から改変]_ [3] デイビッド・ヘルドら. "空間的、時間的、セマンティックな手がかりを用いたリアルタイム 3D セグメンテーションのための確率的フレームワーク." (2016). ## (省略可能) 将来の拡張機能/未実装部分 - diff --git a/perception/autoware_elevation_map_loader/README.md b/perception/autoware_elevation_map_loader/README.md index 976b49bdda581..65adeb18f9bf8 100644 --- a/perception/autoware_elevation_map_loader/README.md +++ b/perception/autoware_elevation_map_loader/README.md @@ -20,11 +20,11 @@ ### 入力 -| 名前 | 型 | 説明 | -|------------------------------------|---------------------------------------------------|--------------------------------------------| -| `input/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | 点群マップ | +| 名前 | 型 | 説明 | +| ------------------------------- | ----------------------------------------------- | ------------------------------------------------ | +| `input/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | 点群マップ | | `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | (オプション) レーンレット2マップのバイナリデータ | -| `input/pointcloud_map_metadata` | `autoware_map_msgs::msg::PointCloudMapMetaData` | (オプション) 点群マップのメタデータ | +| `input/pointcloud_map_metadata` | `autoware_map_msgs::msg::PointCloudMapMetaData` | (オプション) 点群マップのメタデータ | ### 出力 @@ -38,14 +38,14 @@ **仕様** -* **入力:** - * 生センサデータ(IMU、GNSS、V2X) -* **出力:** - * 推定自車位置(x、y、z) - * 推定自車姿勢(roll、pitch、yaw) - * 推定自車速度(vx、vy、vz) -* **アルゴリズム:** - * EKF (拡張カルマンフィルタ)ベースのFusionアルゴリズム +- **入力:** + - 生センサデータ(IMU、GNSS、V2X) +- **出力:** + - 推定自車位置(x、y、z) + - 推定自車姿勢(roll、pitch、yaw) + - 推定自車速度(vx、vy、vz) +- **アルゴリズム:** + - EKF (拡張カルマンフィルタ)ベースのFusionアルゴリズム --- @@ -57,13 +57,13 @@ **仕様** -* **入力:** - * 環境マップ - * 開始点と目標点 -* **出力:** - * 最適経路のシーケンス(ウェイポイント) -* **アルゴリズム:** - * 動的経路計画法(DWA) +- **入力:** + - 環境マップ + - 開始点と目標点 +- **出力:** + - 最適経路のシーケンス(ウェイポイント) +- **アルゴリズム:** + - 動的経路計画法(DWA) --- @@ -75,15 +75,15 @@ **仕様** -* **入力:** - * 最適経路 - * 自車位置と姿勢 - * 環境情報(障害物、交通信号など) -* **出力:** - * 車両の速度とステアリング角のコマンド -* **アルゴリズム:** - * モデル予測制御(MPC) - * 後方サンプリング `post resampling`アルゴリズム +- **入力:** + - 最適経路 + - 自車位置と姿勢 + - 環境情報(障害物、交通信号など) +- **出力:** + - 車両の速度とステアリング角のコマンド +- **アルゴリズム:** + - モデル予測制御(MPC) + - 後方サンプリング `post resampling`アルゴリズム --- @@ -95,44 +95,44 @@ **仕様** -* **入力:** - * 動作計画出力 - * 環境情報 -* **出力:** - * 動作計画が安全かどうかのフラグ -* **アルゴリズム:** - * 障害物との衝突検出 - * 加速度逸脱量検出 - * 速度逸脱量検出 - -| 名称 | タイプ | 説明 | -| ---------------------------- | ------------------------------- | -------------------------------------------------------------------- | -| `output/elevation_map` | `grid_map_msgs::msg::GridMap` | 標高マップ | +- **入力:** + - 動作計画出力 + - 環境情報 +- **出力:** + - 動作計画が安全かどうかのフラグ +- **アルゴリズム:** + - 障害物との衝突検出 + - 加速度逸脱量検出 + - 速度逸脱量検出 + +| 名称 | タイプ | 説明 | +| ---------------------------- | ------------------------------- | --------------------------------------------- | +| `output/elevation_map` | `grid_map_msgs::msg::GridMap` | 標高マップ | | `output/elevation_map_cloud` | `sensor_msgs::msg::PointCloud2` | (オプション) 標高マップの値から生成された点群 | ### サービス -| Name | Type | Description | -| -------------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| Name | Type | Description | +| ------------------------------ | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `service/get_selected_pcd_map` | `autoware_map_msgs::srv::GetSelectedPointCloudMap` | (オプション) ポイントクラウドマップを要求するサービス。ポイントクラウドマップローダーがROS 2サービス経由で選択されたポイントクラウドマップを利用する場合、これを利用します。 | ## パラメータ ### ノードパラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -| :-------------------------------- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| map_layer_name | std::string | 標高マップレイヤー名 | elevation | -| param_file_path | std::string | GridMap パラメーターの設定 | path_default | -| elevation_map_directory | std::string | 標高マップファイル (bag2) | path_default | -| map_frame | std::string | 標高マップファイルを読み込むときの map_frame | map | -| use_inpaint | bool | 空のセルを補完するかどうかによります | true | -| inpaint_radius | float | アルゴリズムによって考慮される、補完された各ポイントの半径 [m] | 0.3 | -| use_elevation_map_cloud_publisher | bool | `output/elevation_map_cloud` を公開するか | false | -| use_lane_filter | bool | ベクトルマップで標高マップをフィルタリングするかどうかによります | false | -| lane_margin | float | インペインティングマスクに含めるエリアの車線ポリゴンからの余裕距離 [m] (use_lane_filter=True の場合のみ使用) | 0.0 | -| use_sequential_load | bool | サービスによって点群マップを取得するかどうかによります | false | -| sequential_map_load_num | int | 一度にロードする点群マップの数 (use_sequential_load が True に設定されている場合のみ使用)。これはすべての点群マップセルの数を超えてはいけません | 1 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------------- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| map_layer_name | std::string | 標高マップレイヤー名 | elevation | +| param_file_path | std::string | GridMap パラメーターの設定 | path_default | +| elevation_map_directory | std::string | 標高マップファイル (bag2) | path_default | +| map_frame | std::string | 標高マップファイルを読み込むときの map_frame | map | +| use_inpaint | bool | 空のセルを補完するかどうかによります | true | +| inpaint_radius | float | アルゴリズムによって考慮される、補完された各ポイントの半径 [m] | 0.3 | +| use_elevation_map_cloud_publisher | bool | `output/elevation_map_cloud` を公開するか | false | +| use_lane_filter | bool | ベクトルマップで標高マップをフィルタリングするかどうかによります | false | +| lane_margin | float | インペインティングマスクに含めるエリアの車線ポリゴンからの余裕距離 [m] (use_lane_filter=True の場合のみ使用) | 0.0 | +| use_sequential_load | bool | サービスによって点群マップを取得するかどうかによります | false | +| sequential_map_load_num | int | 一度にロードする点群マップの数 (use_sequential_load が True に設定されている場合のみ使用)。これはすべての点群マップセルの数を超えてはいけません | 1 | ### GridMap のパラメータ @@ -140,8 +140,8 @@ #### 一般的なパラメータ -| Name | Type | Description | Default value | -| :--------------------------------------------- | :--- | :--------------------------------------------------------------------------------------------------- | :------------ | +| Name | Type | Description | Default value | +| :--------------------------------------------- | :--- | :--------------------------------------------------------------------------------------- | :------------ | | pcl_grid_map_extraction/num_processing_threads | int | グリッドマップセルを処理するスレッド数。生の入力点群のフィルタリングは並列化されません。 | 12 | #### グリッドマップのパラメーター @@ -150,12 +150,12 @@ 生成されるグリッドマップのパラメーター。 -| 名前 | タイプ | 説明 | デフォルト値 | -| ------------------------------------------------------ | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | +| 名前 | タイプ | 説明 | デフォルト値 | +| -------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------- | ------------ | | pcl_grid_map_extraction/grid_map/min_num_points_per_cell | int | グリッドマップセルのいずれにも当てはまる点群内の最低ポイント数。そうでなければ、そのセルの標高はNaNに設定されます。 | 3 | -| pcl_grid_map_extraction/grid_map/resolution | float | グリッドマップの解像度。幅と長さは自動的に計算されます。 | 0.3 | -| pcl_grid_map_extraction/grid_map/height_type | int | セルの標高を決定するパラメータ `0: 各クラスタの平均値の中で最も小さい値`, `1: 最もポイント数の多いクラスタの平均値` | 1 | -| pcl_grid_map_extraction/grid_map/height_thresh | float | 最も小さいクラスタからの標高範囲 (height_type 1 のみ) | 1.0 | +| pcl_grid_map_extraction/grid_map/resolution | float | グリッドマップの解像度。幅と長さは自動的に計算されます。 | 0.3 | +| pcl_grid_map_extraction/grid_map/height_type | int | セルの標高を決定するパラメータ `0: 各クラスタの平均値の中で最も小さい値`, `1: 最もポイント数の多いクラスタの平均値` | 1 | +| pcl_grid_map_extraction/grid_map/height_thresh | float | 最も小さいクラスタからの標高範囲 (height_type 1 のみ) | 1.0 | ### 点群の前処理パラメータ @@ -163,37 +163,36 @@ 標高を計算する前に点群に適用されるリジッド変換。 -| 名前 | タイプ | 説明 | デフォルト値 | -| :---------------------------------------------------------- | :---- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------ | -| pcl_grid_map_extraction/cloud_transform/translation | float | 標高を計算する前に、入力点群に対して適用される並進 (xyz)。 | 0.0 | -| pcl_grid_map_extraction/cloud_transform/rotation | float | 標高を計算する前に、入力点群に対して適用される回転 (固有回転、規則 X-Y'-Z'')。 | 0.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------------------------------- | :----- | :----------------------------------------------------------------------------- | :----------- | +| pcl_grid_map_extraction/cloud_transform/translation | float | 標高を計算する前に、入力点群に対して適用される並進 (xyz)。 | 0.0 | +| pcl_grid_map_extraction/cloud_transform/rotation | float | 標高を計算する前に、入力点群に対して適用される回転 (固有回転、規則 X-Y'-Z'')。 | 0.0 | #### クラスター抽出パラメータ クラスターの抽出は、pclアルゴリズムに基づいています。詳細については、を参照してください。 -| 名称 | 型 | 説明 | デフォルト値 | -| ---- | --- | ---- | ---- | -| `pcl_grid_map_extraction/cluster_extraction/cluster_tolerance` | 実数 | クラスタに属すると見なされるポイント間の距離 | 0.2 | -| `pcl_grid_map_extraction/cluster_extraction/min_num_points` | 整数 | クラスタが持つ必要のある最小ポイント数(以下では破棄) | 3 | -| `pcl_grid_map_extraction/cluster_extraction/max_num_points` | 整数 | クラスタが持つことができる最大ポイント数(以上では破棄) | 1000000 | +| 名称 | 型 | 説明 | デフォルト値 | +| -------------------------------------------------------------- | ---- | -------------------------------------------------------- | ------------ | +| `pcl_grid_map_extraction/cluster_extraction/cluster_tolerance` | 実数 | クラスタに属すると見なされるポイント間の距離 | 0.2 | +| `pcl_grid_map_extraction/cluster_extraction/min_num_points` | 整数 | クラスタが持つ必要のある最小ポイント数(以下では破棄) | 3 | +| `pcl_grid_map_extraction/cluster_extraction/max_num_points` | 整数 | クラスタが持つことができる最大ポイント数(以上では破棄) | 1000000 | #### 外れ値除去パラメーター 外れ値除去の詳細については、 を参照してください。 -| 名前 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `pcl_grid_map_extraction/outlier_removal/is_remove_outliers` | float | 統計的異常値除去を実行するかどうか | false | -| `pcl_grid_map_extraction/outlier_removal/mean_K` | float | 点の統計を推定するために解析する近傍の数 | 10 | -| `pcl_grid_map_extraction/outlier_removal/stddev_threshold` | float | 点が内点と見なされる標準偏差の数 | 1.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +| ------------------------------------------------------------ | ------ | ---------------------------------------- | ------------ | +| `pcl_grid_map_extraction/outlier_removal/is_remove_outliers` | float | 統計的異常値除去を実行するかどうか | false | +| `pcl_grid_map_extraction/outlier_removal/mean_K` | float | 点の統計を推定するために解析する近傍の数 | 10 | +| `pcl_grid_map_extraction/outlier_removal/stddev_threshold` | float | 点が内点と見なされる標準偏差の数 | 1.0 | #### サブサンプリングパラメータ ポイントクラウドのダウンサンプリングの詳細については、 を参照してください。 -| 名前 | タイプ | 説明 | デフォルト値 | -| :-------------------------------------------------------- | :---- | :------------------------------------------------------------ | :------------ | -| pcl_grid_map_extraction/downsampling/is_downsample_cloud | bool | ダウンサンプリングを実施するかどうか。 | false | -| pcl_grid_map_extraction/downsampling/voxel_size | float | ボクセルサイズ(xyz)、メートル単位。 | 0.02 | - +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------------------- | :----- | :------------------------------------- | :----------- | +| pcl_grid_map_extraction/downsampling/is_downsample_cloud | bool | ダウンサンプリングを実施するかどうか。 | false | +| pcl_grid_map_extraction/downsampling/voxel_size | float | ボクセルサイズ(xyz)、メートル単位。 | 0.02 | diff --git a/perception/autoware_euclidean_cluster/README.md b/perception/autoware_euclidean_cluster/README.md index 20330b7fc6ade..c7baa583cd0c9 100644 --- a/perception/autoware_euclidean_cluster/README.md +++ b/perception/autoware_euclidean_cluster/README.md @@ -22,8 +22,8 @@ autoware_euclidean_cluster は、オブジェクトを分類するために点 ### 入力 -| 名前 | タイプ | 説明 | -| ------- | ------------------------------- | ----------- | +| 名前 | タイプ | 説明 | +| ------- | ------------------------------- | -------- | | `input` | `sensor_msgs::msg::PointCloud2` | 入力点群 | ### 出力 @@ -69,10 +69,10 @@ Planningモジュールは、以下の技術的詳細を備えています。 Planningモジュールは、Autowareソフトウェアスタックの一部です。 -| 名 | タイプ | 説明 | -| ---------------- | --------------------------------------------------------- | --------------------------------------------------- | -| `output` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | クラスタ点群 | -| `debug/clusters` | `sensor_msgs::msg::PointCloud2` | 可視化のための着色済みクラスタ点群 | +| 名 | タイプ | 説明 | +| ---------------- | -------------------------------------------------------- | ---------------------------------- | +| `output` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | クラスタ点群 | +| `debug/clusters` | `sensor_msgs::msg::PointCloud2` | 可視化のための着色済みクラスタ点群 | ## パラメータ @@ -80,12 +80,12 @@ Planningモジュールは、Autowareソフトウェアスタックの一部で #### euclidean_cluster -| 名称 | タイプ | 説明 | -| ---- | ---- | ----------------------------------------------------- | -| `use_height` | ブール | クラスタリングに point.z を使用 | -| `min_cluster_size` | 整数 | クラスターが有効と見なされるために必要な最小のポイント数 | -| `max_cluster_size` | 整数 | クラスターが有効と見なされるために必要な最大のポイント数 | -| `tolerance` | 浮動小数点 | L2 ユークリッド空間における尺度としての空間クラスター許容範囲 | +| 名称 | タイプ | 説明 | +| ------------------ | ---------- | ------------------------------------------------------------- | +| `use_height` | ブール | クラスタリングに point.z を使用 | +| `min_cluster_size` | 整数 | クラスターが有効と見なされるために必要な最小のポイント数 | +| `max_cluster_size` | 整数 | クラスターが有効と見なされるために必要な最大のポイント数 | +| `tolerance` | 浮動小数点 | L2 ユークリッド空間における尺度としての空間クラスター許容範囲 | #### voxel_grid_based_euclidean_cluster @@ -93,30 +93,30 @@ Planningモジュールは、Autowareソフトウェアスタックの一部で **サブスクライブするトピック** -* `/points_raw`: 入力点群 +- `/points_raw`: 入力点群 **パブリッシュするトピック** -* `/voxel_grid_based_euclidean_cluster/output`: クラスタリングされた点群 +- `/voxel_grid_based_euclidean_cluster/output`: クラスタリングされた点群 **パラメータ** -* **voxel_leaf_size:** クラスタリングに使用するボクセルサイズ[m] -* **euclidean_cluster_tolerance:** クラスタリングに使用するユークリッド距離公差[m] -* **min_cluster_size:** クラスタとして認識されるためにクラスタに含まれる必要のある最小ポイント数 -* **max_cluster_size:** 1つのクラスタに含まれることができる最大ポイント数 -* **post resampling:** 点群をサンプルするのかどうか (True/False) -* **sample_size:** サンプルするポイントの数。`post resampling` が True の場合にのみ使用されます。 -* **target_frame:** クラスタリングされた点群の目標フレーム。`current pose` または `sensor` のいずれか。 - -| 名称 | 型 | 説明 | -| ------------------------------ | ------- | ------------------------------------------------------------------------------------------------------ | -| `use_height` | bool | クラスタリングに point.z を使用する | -| `min_cluster_size` | int | 有効とみなされるためにクラスタが必要とする最小点の数 | -| `max_cluster_size` | int | 有効とみなされるためにクラスタが必要とする最大点の数 | -| `tolerance` | float | L2 ユークリッド空間の指標としての空間クラスタ許容誤差 | -| `voxel_leaf_size` | float | x と y のボクセルリーフサイズ | -| `min_points_number_per_voxel` | int | ボクセルに必要な最低点の数 | +- **voxel_leaf_size:** クラスタリングに使用するボクセルサイズ[m] +- **euclidean_cluster_tolerance:** クラスタリングに使用するユークリッド距離公差[m] +- **min_cluster_size:** クラスタとして認識されるためにクラスタに含まれる必要のある最小ポイント数 +- **max_cluster_size:** 1つのクラスタに含まれることができる最大ポイント数 +- **post resampling:** 点群をサンプルするのかどうか (True/False) +- **sample_size:** サンプルするポイントの数。`post resampling` が True の場合にのみ使用されます。 +- **target_frame:** クラスタリングされた点群の目標フレーム。`current pose` または `sensor` のいずれか。 + +| 名称 | 型 | 説明 | +| ----------------------------- | ----- | ----------------------------------------------------- | +| `use_height` | bool | クラスタリングに point.z を使用する | +| `min_cluster_size` | int | 有効とみなされるためにクラスタが必要とする最小点の数 | +| `max_cluster_size` | int | 有効とみなされるためにクラスタが必要とする最大点の数 | +| `tolerance` | float | L2 ユークリッド空間の指標としての空間クラスタ許容誤差 | +| `voxel_leaf_size` | float | x と y のボクセルリーフサイズ | +| `min_points_number_per_voxel` | int | ボクセルに必要な最低点の数 | ## 想定/既知の制限 @@ -161,4 +161,3 @@ Planningモジュールは、Autowareソフトウェアスタックの一部で ## (省略可) 今後の拡張機能/未実装部分 `voxel_grid_based_euclidean_cluster`の`use_height`オプションはまだ実装されていません。 - diff --git a/perception/autoware_ground_segmentation/README.md b/perception/autoware_ground_segmentation/README.md index bd0b4449844e5..dc4d13baa1471 100644 --- a/perception/autoware_ground_segmentation/README.md +++ b/perception/autoware_ground_segmentation/README.md @@ -8,19 +8,19 @@ 各地面セグメンテーションアルゴリズムの詳細な説明は、次のリンクを参照してください。 -| フィルタの名称 | 説明 | 詳細 | -| ------------------------ | --------------------------------------------------------------------------------------------------------- | -------------------------------------- | -| `ray_ground_filter` | 放射状に並んだ点の幾何学的関係に基づいて地面を取り除く方法 | [リンク](docs/ray-ground-filter.md) | -| `scan_ground_filter` | `ray_ground_filter`とほぼ同じ方法だが、パフォーマンスがわずかに向上 | [リンク](docs/scan-ground-filter.md) | -| `ransac_ground_filter` | 平面に対して地上の近似を行うことで地面を取り除く方法 | [リンク](docs/ransac-ground-filter.md) | +| フィルタの名称 | 説明 | 詳細 | +| ---------------------- | ------------------------------------------------------------------- | -------------------------------------- | +| `ray_ground_filter` | 放射状に並んだ点の幾何学的関係に基づいて地面を取り除く方法 | [リンク](docs/ray-ground-filter.md) | +| `scan_ground_filter` | `ray_ground_filter`とほぼ同じ方法だが、パフォーマンスがわずかに向上 | [リンク](docs/scan-ground-filter.md) | +| `ransac_ground_filter` | 平面に対して地上の近似を行うことで地面を取り除く方法 | [リンク](docs/ransac-ground-filter.md) | ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ----------------- | ------------------------------- | ----------------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点 | +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------------- | ---------------- | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点 | | `~/input/indices` | `pcl_msgs::msg::Indices` | 基準インデックス | ### 自動運転ソフトウェアドキュメント @@ -64,23 +64,23 @@ - **Path 'post resampling'**: **Path Smoother** によって生成された経路が**Trajectory Planner** によって生成された経路を正確に表していることを確認します。 - **Vehicle Dynamics**: 車両の運動特性を考慮して、安全で快適な走行を確保します。 -| 名称 | 型 | 説明 | -|----------------------|-----------------------------------|---------------------| +| 名称 | 型 | 説明 | +| ----------------- | ------------------------------- | ------------------------ | | `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリングされた点群 | ## パラメータ ### ノードのパラメータ -| 名前 | 型 | デフォルト値 | 説明 | -| -------------------- | ------ | ------------- | ------------------------------------- | -| `input_frame` | 文字列 | " " | 入力フレーム ID | -| `output_frame` | 文字列 | " " | 出力フレーム ID | -| `has_static_tf_only` | ブール | false | TF を一度だけリスンするフラグ | -| `max_queue_size` | 整数 | 5 | 入力/出力トピックの最大キューサイズ | -| `use_indices` | ブール | false | ポイントクラウドのインデックスを使用するフラグ | -| `latched_indices` | ブール | false | ポイントクラウドのインデックスをラッチするフラグ | -| `approximate_sync` | ブール | false | 近似同期オプションを使用するフラグ | +| 名前 | 型 | デフォルト値 | 説明 | +| -------------------- | ------ | ------------ | ------------------------------------------------ | +| `input_frame` | 文字列 | " " | 入力フレーム ID | +| `output_frame` | 文字列 | " " | 出力フレーム ID | +| `has_static_tf_only` | ブール | false | TF を一度だけリスンするフラグ | +| `max_queue_size` | 整数 | 5 | 入力/出力トピックの最大キューサイズ | +| `use_indices` | ブール | false | ポイントクラウドのインデックスを使用するフラグ | +| `latched_indices` | ブール | false | ポイントクラウドのインデックスをラッチするフラグ | +| `approximate_sync` | ブール | false | 近似同期オプションを使用するフラグ | ## 前提 / 制限事項 @@ -89,4 +89,3 @@ ## 参考文献/外部リンク [1] - diff --git a/perception/autoware_image_projection_based_fusion/README.md b/perception/autoware_image_projection_based_fusion/README.md index 48d17e3cd9e49..efc115f6c6da9 100644 --- a/perception/autoware_image_projection_based_fusion/README.md +++ b/perception/autoware_image_projection_based_fusion/README.md @@ -16,6 +16,7 @@ ![roi_sync_image1](./docs/images/roi_sync_1.png) Autoware.universeのTIER IV Robotaxiでの現在のデフォルト値は次のとおりです。 + - input_offset_ms: [61.67、111.67、45.0、28.33、78.33、95.0] - match_threshold_ms: 30.0 @@ -64,39 +65,39 @@ source code directory: `autoware/autoware/core/autoware_image_projection_based_f ### Required stack - ROS -- autoware\_can\_msgs -- autoware\_perception\_msgs -- autoware\_planning\_msgs -- cv\_bridge -- octomap\_ros +- autoware_can_msgs +- autoware_perception_msgs +- autoware_planning_msgs +- cv_bridge +- octomap_ros ### Example -tum\_slayer\_1/base\_linkへ変換されたcamera1のCameraInfoと、fusion\_imageのサブスクライバを起動します。 +tum_slayer_1/base_linkへ変換されたcamera1のCameraInfoと、fusion_imageのサブスクライバを起動します。 -``` bash +```bash roslaunch autoware_image_projection_based_fusion fusion.launch image_topic:=/camera1/front_left/compressed image_info_frame_id:=/base_link output_topic:=/fusion_image fusion_node_name:=fused_image ``` -| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | -| :-----------------: | :--------: | :-------: | :-------: | :-------: | -| サブスクリプションステータス | | 有 | 有 | 有 | +| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | +| :--------------------------: | :--------: | :-------: | :-------: | :-------: | +| サブスクリプションステータス | | 有 | 有 | 有 | roi msgsにマッチング可能な場合はそれらを融合してポイントクラウドメッセージを処理します。 それ以外の場合はマッチングしたroi msgsを融合してポイントクラウドをキャッシュします。 2.次の条件下でポイントクラウドメッセージにサブスクライブした場合: -| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | -| :-----------------: | :--------: | :-------: | :-------: | :-------: | -| 受信状態 | | O | O | | +| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | +| :------: | :--------: | :-------: | :-------: | :-------: | +| 受信状態 | | O | O | | 1. ROI メッセージが照合できる場合、それらを融合し、点群をキャッシュします。 2. 以下条件下で点群メッセージが購読された場合: -| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | -| :----------------: | :--------: | :-------: | :-------: | :-------: | +| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | +| :--------------------: | :--------: | :-------: | :-------: | :-------: | | サブスクリプション状態 | ○ | ○ | ○ | roi msg 3 が次のポイントクラウドメッセージの受信またはタイムアウト前にサブスクライブされている場合は、一致した場合に融合し、そうでなければ次の roi msg 3 を待ちます。 @@ -112,7 +113,6 @@ Autoware.universe での現在のデフォルト値:XX1: - timeout_ms: 50.0 `pointpainting_fusion` ノードには、ONNX ファイルから TensorRT エンジンファイルを構築するための `build_only` オプションがあります。 Autoware Universe の `.param.yaml` ファイルのすべての ROS パラメータを移動させることが好まれますが、`build_only` オプションはプレタスクとしてビルドを実行するためのフラグとして使用される可能性があるため、今のところ `.param.yaml` ファイルには移動されていません。次のコマンドで実行できます。 - ```bash ros2 launch autoware_image_projection_based_fusion pointpainting_fusion.launch.xml model_name:=pointpainting model_path:=/home/autoware/autoware_data/image_projection_based_fusion model_param_path:=$(ros2 pkg prefix autoware_image_projection_based_fusion --share)/config/pointpainting.param.yaml build_only:=true ``` @@ -123,10 +123,9 @@ rclcpp::TimerBase таймерは for ループを break できないため、ro ### 各融合アルゴリズムの詳細な説明は次のリンクにあります -| フュージョン名 | 説明 | 詳細 | -|---|---|---| -| `roi_cluster_fusion` | 2Dオブジェクト検出器のROIから、クラスタの分類ラベルを上書き | [リンク](./docs/roi-cluster-fusion.md) | -| `roi_detected_object_fusion` | 2Dオブジェクト検出器のROIから、検出オブジェクトの分類ラベルを上書き | [リンク](./docs/roi-detected-object-fusion.md) | -| `pointpainting_fusion` | 2Dオブジェクト検出器のROIで点群にペイントし、3Dオブジェクト検出器にフィード | [リンク](./docs/pointpainting-fusion.md) | -| `roi_pointcloud_fusion` | 2Dオブジェクト検出器のROIと点群を照合し、ラベル不明のオブジェクトを検出 | [リンク](./docs/roi-pointcloud-fusion.md) | - +| フュージョン名 | 説明 | 詳細 | +| ---------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------- | +| `roi_cluster_fusion` | 2Dオブジェクト検出器のROIから、クラスタの分類ラベルを上書き | [リンク](./docs/roi-cluster-fusion.md) | +| `roi_detected_object_fusion` | 2Dオブジェクト検出器のROIから、検出オブジェクトの分類ラベルを上書き | [リンク](./docs/roi-detected-object-fusion.md) | +| `pointpainting_fusion` | 2Dオブジェクト検出器のROIで点群にペイントし、3Dオブジェクト検出器にフィード | [リンク](./docs/pointpainting-fusion.md) | +| `roi_pointcloud_fusion` | 2Dオブジェクト検出器のROIと点群を照合し、ラベル不明のオブジェクトを検出 | [リンク](./docs/roi-pointcloud-fusion.md) | diff --git a/perception/autoware_lidar_apollo_instance_segmentation/README.md b/perception/autoware_lidar_apollo_instance_segmentation/README.md index fe263e8c14470..b0d6319caafcd 100644 --- a/perception/autoware_lidar_apollo_instance_segmentation/README.md +++ b/perception/autoware_lidar_apollo_instance_segmentation/README.md @@ -13,17 +13,19 @@ Apolloの[元の設計](https://github.com/ApolloAuto/apollo/blob/r6.0.0/docs/sp ## 入出力 ### 入力 + - `/points_raw` (`PointCloud2`): センサから取得したLiDAR点群のトピック - `/imu/data` (`Imu`): 車両の姿勢と角速度を更新するトピック - `/vehicle/status/control_mode` (`UInt8`): 制御モード(オートドライブ、手動運転)のトピック - `/had_map_available` (`Bool`): HDマップが利用可能な場合(True、False)のトピック ### 出力 + - `/apollo/perception/obstacles` (`ObjectArray`): 検出された障害物のトピック - `/planning/predicted_objects` (`ObjectArray`): Planningコンポーネントで使用するため、予測軌跡を持つ障害物のトピック -| 名称 | 型 | 説明 | -| ------------------ | ------------------------- | ---------------------------------- | +| 名称 | 型 | 説明 | +| ------------------ | ------------------------- | -------------------------------- | | `input/pointcloud` | `sensor_msgs/PointCloud2` | レーザーセンサーからの点群データ | ## 自動運転ソフトウェアのドキュメント @@ -32,57 +34,67 @@ Apolloの[元の設計](https://github.com/ApolloAuto/apollo/blob/r6.0.0/docs/sp 本システムは、以下のようなモジュールで構成されています。 -**Planningモジュール** +**Planningモジュール** + - 経路計画と制御 - 'post resampling' - 自車位置の推定 -**Controlモジュール** +**Controlモジュール** + - 速度と加速度の制御 - 車両運動学の制御 -**Perceptionモジュール** +**Perceptionモジュール** + - 車両と周辺環境の検出とトラッキング -**Localizationモジュール** +**Localizationモジュール** + - 自車位置と姿勢の推定 ### 要件 -**機能要件** +**機能要件** + - 障害物を回避しながらの自律走行 - 速度と加速度の制御 - 路面状況への対応 -**非機能要件** +**非機能要件** + - リアルタイム処理 - 安全性と信頼性 - Autowareとの互換性 ### パフォーマンス基準 -**安全性** +**安全性** + - 障害物逸脱量:0.1m以内 - 速度逸脱量:0.5m/s以内 - 加速度逸脱量:0.2m/s2以内 -**効率性** +**効率性** + - 1秒あたりの演算時間:10ms未満 ### インターフェース -**入力** +**入力** + - センサーデータ - 自車位置 -**出力** +**出力** + - 運転コマンド - システム状態 -| 名称 | タイプ | 説明 | -| --------------------------- | -------------------------------------------------- | ----------------------------------------------------- | +| 名称 | タイプ | 説明 | +| --------------------------- | -------------------------------------------------- | ------------------------------------------------------ | | `output/labeled_clusters` | `tier4_perception_msgs/DetectedObjectsWithFeature` | ラベル付きの点群クラスタを持つ検出されたオブジェクト。 | -| `debug/instance_pointcloud` | `sensor_msgs/PointCloud2` | 視覚化用のセグメント化された点群。 | +| `debug/instance_pointcloud` | `sensor_msgs/PointCloud2` | 視覚化用のセグメント化された点群。 | ## パラメータ @@ -92,20 +104,20 @@ Apolloの[元の設計](https://github.com/ApolloAuto/apollo/blob/r6.0.0/docs/sp ### コアパラメーター -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------------- | ------ | -------------------- | ----------------------------------------------------------------------------------- | +| 名前 | タイプ | デフォルト値 | 説明 | +| ----------------------- | ------ | -------------------- | -------------------------------------------------------------------------- | | `score_threshold` | double | 0.8 | 検出オブジェクトのスコアがこの値より低い場合、オブジェクトは無視されます。 | -| `range` | int | 60 | フィーチャマップの半分の長さ [m] | -| `width` | int | 640 | フィーチャマップのグリッド幅 | -| `height` | int | 640 | フィーチャマップのグリッド高さ | -| `engine_file` | string | "vls-128.engine" | CNNモデルのTensorRTエンジンファイルの名前 | -| `prototxt_file` | string | "vls-128.prototxt" | CNNモデルのprototxtファイルの名前 | -| `caffemodel_file` | string | "vls-128.caffemodel" | CNNモデルのcaffemodelファイルの名前 | -| `use_intensity_feature` | bool | true | ポイントクラウドの強度フィーチャを使用するフラグ | -| `use_constant_feature` | bool | false | ポイントクラウドの角度と距離のフィーチャを使用するフラグ | -| `target_frame` | string | "base_link" | ポイントクラウドデータはこのフレームに変換されます。 | -| `z_offset` | int | 2 | 標的フレームからのzオフセット [m] | -| `build_only` | bool | `false` | TensorRTエンジンファイルが構築された後にノードをシャットダウンします。 | +| `range` | int | 60 | フィーチャマップの半分の長さ [m] | +| `width` | int | 640 | フィーチャマップのグリッド幅 | +| `height` | int | 640 | フィーチャマップのグリッド高さ | +| `engine_file` | string | "vls-128.engine" | CNNモデルのTensorRTエンジンファイルの名前 | +| `prototxt_file` | string | "vls-128.prototxt" | CNNモデルのprototxtファイルの名前 | +| `caffemodel_file` | string | "vls-128.caffemodel" | CNNモデルのcaffemodelファイルの名前 | +| `use_intensity_feature` | bool | true | ポイントクラウドの強度フィーチャを使用するフラグ | +| `use_constant_feature` | bool | false | ポイントクラウドの角度と距離のフィーチャを使用するフラグ | +| `target_frame` | string | "base_link" | ポイントクラウドデータはこのフレームに変換されます。 | +| `z_offset` | int | 2 | 標的フレームからのzオフセット [m] | +| `build_only` | bool | `false` | TensorRTエンジンファイルが構築された後にノードをシャットダウンします。 | ## 前提条件 / 制限事項 @@ -129,7 +141,6 @@ CNNモデル用のトレーニングコードはありません。 1. [アポロ3D障害物検知の説明](https://github.com/ApolloAuto/apollo/blob/r7.0.0/docs/specs/3d_obstacle_perception.md) - ```txt /****************************************************************************** * Copyright 2017 The Apollo Authors. All Rights Reserved. @@ -151,7 +162,6 @@ CNNモデル用のトレーニングコードはありません。 2. [tensorRTWrapper](https://github.com/lewes6369/tensorRTWrapper) : lib ディレクトリ内で使用されます。 - ```txt MIT License @@ -180,24 +190,23 @@ CNNモデル用のトレーニングコードはありません。 [GitHub](https://github.com/k0suke-murakami/autoware_perception/tree/feature/integration_baidu_seg/lidar_apollo_cnn_seg_detect) - - ```txt - /* - * Copyright 2018-2019 Autoware Foundation. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - ``` +```txt +/* +* Copyright 2018-2019 Autoware Foundation. All rights reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +``` ### 特別謝辞 @@ -205,4 +214,3 @@ CNNモデル用のトレーニングコードはありません。 - [lewes6369](https://github.com/lewes6369) - [Autoware財団](https://github.com/autowarefoundation/autoware) - [竹内 康輔](https://github.com/kosuke55) (TIER IV) - diff --git a/perception/autoware_lidar_centerpoint/README.md b/perception/autoware_lidar_centerpoint/README.md index cbd6af73800b4..5d8ec3d7f0744 100644 --- a/perception/autoware_lidar_centerpoint/README.md +++ b/perception/autoware_lidar_centerpoint/README.md @@ -13,17 +13,19 @@ autoware_lidar_centerpointは、動的3Dオブジェクトを検出するため ## 入出力 ### 入力 + - LiDAR点群 ### 出力 + - クラスID - Bounding Box - 速度ベクトル - 加速度ベクトル -| 名称 | タイプ | 説明 | -| ---------------------- | ----------------------------------- | ---------------------------------------- | -| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 入力ポイントクラウド | +| 名称 | タイプ | 説明 | +| -------------------- | ------------------------------- | -------------------- | +| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 入力ポイントクラウド | ### 出力 @@ -47,21 +49,21 @@ autoware_lidar_centerpointは、動的3Dオブジェクトを検出するため **評価指標:** -* 各シナリオにおける目標ポイント(回避距離、停止位置、駐車位置など)からの偏差 -* 'post resampling'前のPlanning出力と'post resampling'後のPlanning出力との間の軌跡の滑らかさ -* 車両の自車位置とPlanningが生成する軌跡との間の誤差 -* 計画された速度と加速度と、実際の速度と加速度との間の偏差 -* 計画された軌跡の曲率半径と、実際の軌跡の曲率半径との間の偏差 -* 車両周囲の障害物や他の車両を回避するために必要な回避時間 -* 車両が障害物や他の車両と衝突する可能性のある衝突時間(TTC) +- 各シナリオにおける目標ポイント(回避距離、停止位置、駐車位置など)からの偏差 +- 'post resampling'前のPlanning出力と'post resampling'後のPlanning出力との間の軌跡の滑らかさ +- 車両の自車位置とPlanningが生成する軌跡との間の誤差 +- 計画された速度と加速度と、実際の速度と加速度との間の偏差 +- 計画された軌跡の曲率半径と、実際の軌跡の曲率半径との間の偏差 +- 車両周囲の障害物や他の車両を回避するために必要な回避時間 +- 車両が障害物や他の車両と衝突する可能性のある衝突時間(TTC) Autoware Planningコンポーネントの性能評価には、これらのシナリオが利用できます。 -| 名前 | タイプ | 説明 | -| ------------------------ | ------------------------------------------------------ | ------ | -| `~/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | -| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクルタイム (msg) | -| `debug/processing_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 処理時間 (ms) | +| 名前 | タイプ | 説明 | +| -------------------------- | ------------------------------------------------ | -------------------- | +| `~/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | +| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクルタイム (msg) | +| `debug/processing_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 処理時間 (ms) | ## パラメータ @@ -69,43 +71,42 @@ Autoware Planningコンポーネントの性能評価には、これらのシナ これらのパラメータはONNXファイルに関連付けられており、トレーニングフェーズ中に定義済みです。このパラメータを変更する際は、ONNXファイルも変更してください。また、ONNXファイルを更新する際は、必ずこれらの値を確認してください。 -| 名称 | タイプ | デフォルト値 | 説明 | -| --------------------------------------- | ------------ | ---------------------------------------------------------- | --------------------------------------------------------------------- | -| `model_params.class_names` | list[string] | ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] | モデル出力のクラス名のリスト | -| `model_params.point_feature_size` | int | `4` | 点群内の各ポイントのフィーチャ数 | -| `model_params.max_voxel_size` | int | `40000` | ボクセルの最大数 | -| `model_params.point_cloud_range` | list[double] | [-76.8, -76.8, -4.0, 76.8, 76.8, 6.0] | 検出範囲 [min_x, min_y, min_z, max_x, max_y, max_z] [m] | -| `model_params.voxel_size` | list[double] | [0.32, 0.32, 10.0] | 各ボクセルのサイズ [x, y, z] [m] | -| `model_params.downsample_factor` | int | `1` | 座標のダウンサンプル係数 | -| `model_params.encoder_in_feature_size` | int | `9` | エンコーダへの入力フィーチャ数 | -| `model_params.has_variance` | bool | `false` | モデルが各バウンディングボックスの姿勢分散と姿勢を出力する場合 `true` | -| `model_params.has_twist` | bool | `false` | モデルが各バウンディングボックスの速度と姿勢を出力する場合 `true` | +| 名称 | タイプ | デフォルト値 | 説明 | +| -------------------------------------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------- | +| `model_params.class_names` | list[string] | ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] | モデル出力のクラス名のリスト | +| `model_params.point_feature_size` | int | `4` | 点群内の各ポイントのフィーチャ数 | +| `model_params.max_voxel_size` | int | `40000` | ボクセルの最大数 | +| `model_params.point_cloud_range` | list[double] | [-76.8, -76.8, -4.0, 76.8, 76.8, 6.0] | 検出範囲 [min_x, min_y, min_z, max_x, max_y, max_z] [m] | +| `model_params.voxel_size` | list[double] | [0.32, 0.32, 10.0] | 各ボクセルのサイズ [x, y, z] [m] | +| `model_params.downsample_factor` | int | `1` | 座標のダウンサンプル係数 | +| `model_params.encoder_in_feature_size` | int | `9` | エンコーダへの入力フィーチャ数 | +| `model_params.has_variance` | bool | `false` | モデルが各バウンディングボックスの姿勢分散と姿勢を出力する場合 `true` | +| `model_params.has_twist` | bool | `false` | モデルが各バウンディングボックスの速度と姿勢を出力する場合 `true` | ### コア・パラメータ -| 名前 | タイプ | デフォルト値 | 説明 | -| ------------------------------------------- | -------- | -------------- | ------------------------------------------------------------------ | -| `encoder_onnx_path` | 文字列 | `""` | VoxelFeatureEncoder ONNX ファイルへのパス | -| `encoder_engine_path` | 文字列 | `""` | VoxelFeatureEncoder TensorRT Engine ファイルへのパス | -| `head_onnx_path` | 文字列 | `""` | DetectionHead ONNX ファイルへのパス | -| `head_engine_path` | 文字列 | `""` | DetectionHead TensorRT Engine ファイルへのパス | -| `build_only` | ブール | `false` | TensorRT エンジンファイルが作成されたらノードをシャットダウンする | -| `trt_precision` | 文字列 | `fp16` | TensorRT 推論の精度: `fp32` または `fp16` | -| `post_process_params.score_threshold` | double | `0.4` | スコアが閾値未満の検出オブジェクトは無視される | -| `post_process_params.yaw_norm_thresholds` | doubleのリスト | [0.3, 0.3, 0.3, 0.3, 0.0] | Yaw ノルムの距離閾値の配列 [rad] | -| `post_process_params.iou_nms_target_class_names` | 文字列のリスト | - | IoU ベースの非最大抑制のターゲットクラス | -| `post_process_params.iou_nms_search_distance_2d` | double | - | 2 つ以上のオブジェクトが値よりも遠い場合、NMS は適用されない | -| `post_process_params.iou_nms_threshold` | double | - | IoU ベースの非最大抑制の IoU 閾値 | -| `post_process_params.has_twist` | ブール | false | モデルが出力値を捻じっているかどうかを示す | -| `densification_params.world_frame_id` | 文字列 | `map` | マルチフレーム点群を統合するワールドフレーム ID | -| `densification_params.num_past_frames` | 整数 | `1` | 現在フレームと統合する過去フレームの数 | +| 名前 | タイプ | デフォルト値 | 説明 | +| ------------------------------------------------ | -------------- | ------------------------- | ----------------------------------------------------------------- | +| `encoder_onnx_path` | 文字列 | `""` | VoxelFeatureEncoder ONNX ファイルへのパス | +| `encoder_engine_path` | 文字列 | `""` | VoxelFeatureEncoder TensorRT Engine ファイルへのパス | +| `head_onnx_path` | 文字列 | `""` | DetectionHead ONNX ファイルへのパス | +| `head_engine_path` | 文字列 | `""` | DetectionHead TensorRT Engine ファイルへのパス | +| `build_only` | ブール | `false` | TensorRT エンジンファイルが作成されたらノードをシャットダウンする | +| `trt_precision` | 文字列 | `fp16` | TensorRT 推論の精度: `fp32` または `fp16` | +| `post_process_params.score_threshold` | double | `0.4` | スコアが閾値未満の検出オブジェクトは無視される | +| `post_process_params.yaw_norm_thresholds` | doubleのリスト | [0.3, 0.3, 0.3, 0.3, 0.0] | Yaw ノルムの距離閾値の配列 [rad] | +| `post_process_params.iou_nms_target_class_names` | 文字列のリスト | - | IoU ベースの非最大抑制のターゲットクラス | +| `post_process_params.iou_nms_search_distance_2d` | double | - | 2 つ以上のオブジェクトが値よりも遠い場合、NMS は適用されない | +| `post_process_params.iou_nms_threshold` | double | - | IoU ベースの非最大抑制の IoU 閾値 | +| `post_process_params.has_twist` | ブール | false | モデルが出力値を捻じっているかどうかを示す | +| `densification_params.world_frame_id` | 文字列 | `map` | マルチフレーム点群を統合するワールドフレーム ID | +| `densification_params.num_past_frames` | 整数 | `1` | 現在フレームと統合する過去フレームの数 | ### `build_only` オプション `autoware_lidar_centerpoint` ノードには、ONNX ファイルから TensorRT エンジンファイルを構築するための `build_only` オプションがあります。 Autoware Universe の `.param.yaml` ファイル内のすべての ROS パラメータを移動することが好ましいですが、`build_only` オプションは現時点では `.param.yaml` ファイルに移動されていません。これは、構築をプリタスクとして実行するためのフラグとして使用されることがあるためです。次のコマンドで実行できます。 - ```bash ros2 launch autoware_lidar_centerpoint lidar_centerpoint.launch.xml model_name:=centerpoint_tiny model_path:=/home/autoware/autoware_data/lidar_centerpoint model_param_path:=$(ros2 pkg prefix autoware_lidar_centerpoint --share)/config/centerpoint_tiny.param.yaml build_only:=true ``` @@ -138,7 +139,6 @@ ros2 launch autoware_lidar_centerpoint lidar_centerpoint.launch.xml model_name:= **ステップ2.** conda仮想環境を作成してアクティブにします - ```bash conda create --name train-centerpoint python=3.8 -y conda activate train-centerpoint @@ -148,7 +148,6 @@ conda activate train-centerpoint PyTorch がインストール済みで、Autoware の要件である CUDA 11.6 に対応していることを確認してください。 - ```bash conda install pytorch==1.13.1 torchvision==0.14.1 pytorch-cuda=11.6 -c pytorch -c nvidia ``` @@ -157,7 +156,6 @@ conda install pytorch==1.13.1 torchvision==0.14.1 pytorch-cuda=11.6 -c pytorch - **ステップ 1.** MIMを使用してMMEngine、MMCV、MMDetectionをインストールします。 - ```bash pip install -U openmim mim install mmengine @@ -171,7 +169,6 @@ mmdetection3d リポジトリをフォークし、いくつかの貴重な機能 特に、PointPillar z ボクセルの特徴量の入力を省略できるようにし、元の論文との互換性を保ちました。 さらに、追加機能として PyTorch から ONNX へのコンバーターと T4 形式のリーダーを統合しました。 - ```bash git clone https://github.com/autowarefoundation/mmdetection3d.git cd mmdetection3d @@ -184,14 +181,12 @@ pip install -v -e . mmdetection3dレポジトリのフォークをクローンする - ```bash git clone https://github.com/autowarefoundation/mmdetection3d.git ``` 以下のコマンドを実行して Docker イメージを構築します。 - ```bash cd mmdetection3d docker build -t mmdetection3d -f docker/Dockerfile . @@ -199,7 +194,6 @@ docker build -t mmdetection3d -f docker/Dockerfile . Dockerコンテナを実行する: - ```bash docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmdetection3d/data mmdetection3d ``` @@ -212,14 +206,12 @@ docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmdetection3d/data mmdete **手順 2.** データセットフォルダにシンボリックリンクを作成する - ```bash ln -s /path/to/nuscenes/dataset/ /path/to/mmdetection3d/data/nuscenes/ ``` **ステップ 3.** NuScenesデータを実行して準備: - ```bash cd mmdetection3d python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes @@ -236,7 +228,6 @@ CenterPoint モデルは、設定ファイル内のさまざまなパラメー #### トレーニングの開始 - ```bash python tools/train.py projects/AutowareCenterPoint/configs/centerpoint_custom.py --work-dir ./work_dirs/centerpoint_custom ``` @@ -248,7 +239,6 @@ python tools/train.py projects/AutowareCenterPoint/configs/centerpoint_custom.py ##### サンプル・データセットのダウンロード - ```bash wget https://autoware-files.s3.us-west-2.amazonaws.com/dataset/lidar_detection_sample_dataset.tar.gz #Extract the dataset to a folder of your choice @@ -263,14 +253,12 @@ ln -s /PATH/TO/DATASET/ /PATH/TO/mmdetection3d/data/tier4_dataset/ データセットは T4Dataset 仕様に従ってフォーマットされており、「sample_dataset」をそのバージョンの 1 つとして指定します。 - ```bash python tools/create_data.py T4Dataset --root-path data/sample_dataset/ --out-dir data/sample_dataset/ --extra-tag T4Dataset --version sample_dataset --annotation-hz 2 ``` 評価を実行する - ```bash python tools/test.py projects/AutowareCenterPoint/configs/centerpoint_custom_test.py /PATH/OF/THE/CHECKPOINT --task lidar_det ``` @@ -283,7 +271,6 @@ python tools/test.py projects/AutowareCenterPoint/configs/centerpoint_custom_tes autoware_lidar_centerpointの実装では、ONNXモデルを2つ入力として必要とします。ボクセルエンコーダーとCenterPointモデルのバックボーン・ネック・ヘッドなど、ネットワークの他の側面は外部的に実装されています。mmdetection3dリポジトリのフォークの下で、CenterPointモデルをAutoware互換のONNX形式に変換するスクリプトを用意しました。これは `mmdetection3d/projects/AutowareCenterPoint` ファイルにあります。 - ```bash python projects/AutowareCenterPoint/centerpoint_onnx_converter.py --cfg projects/AutowareCenterPoint/configs/centerpoint_custom.py --ckpt work_dirs/centerpoint_custom/YOUR_BEST_MODEL.pth --work-dir ./work_dirs/onnx_models ``` @@ -292,7 +279,6 @@ python projects/AutowareCenterPoint/centerpoint_onnx_converter.py --cfg projects autoware_lidar_centerpointノードの設定ファイルディレクトリ内に**centerpoint_custom.param.yaml**という新しい設定ファイルを作成する。トレーニング設定ファイルに従ってpoint_cloud_range、point_feature_size、voxel_sizeなどの設定ファイルのパラメータを設定する。 - ```yaml /**: ros__parameters: @@ -313,7 +299,6 @@ autoware_lidar_centerpointノードの設定ファイルディレクトリ内に #### lidar_centerpoint ノードの起動 - ```bash cd /YOUR/AUTOWARE/PATH/Autoware source install/setup.bash @@ -324,17 +309,17 @@ ros2 launch autoware_lidar_centerpoint lidar_centerpoint.launch.xml model_name: #### v1 (2022/07/06) -| 名称 | URL | 説明 | -| ------------------- | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -| `centerpoint` | [pts_voxel_encoder][v1-encoder-centerpoint]
[pts_backbone_neck_head][v1-head-centerpoint] | このパッケージの実装の制限のため、1 つの変更があります。`PillarFeatureNet` の `num_filters=[32, 32]` | -| `centerpoint_tiny` | [pts_voxel_encoder][v1-encoder-centerpoint-tiny]
[pts_backbone_neck_head][v1-head-centerpoint-tiny] | `v0`の`default`と同じモデル | +| 名称 | URL | 説明 | +| ------------------ | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `centerpoint` | [pts_voxel_encoder][v1-encoder-centerpoint]
[pts_backbone_neck_head][v1-head-centerpoint] | このパッケージの実装の制限のため、1 つの変更があります。`PillarFeatureNet` の `num_filters=[32, 32]` | +| `centerpoint_tiny` | [pts_voxel_encoder][v1-encoder-centerpoint-tiny]
[pts_backbone_neck_head][v1-head-centerpoint-tiny] | `v0`の`default`と同じモデル | 以下の変更はこの[構成](https://github.com/tianweiy/CenterPoint/blob/v0.2/configs/waymo/pp/waymo_centerpoint_pp_two_pfn_stride1_3x.py)と比較されています。 #### v0 (2021/12/03) -| 名前 | URL | 説明 | -| --------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| 名前 | URL | 説明 | +| --------- | -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | | `default` | [pts_voxel_encoder][v0-encoder-default]
[pts_backbone_neck_head][v0-head-default] | オリジナルのCenterPointアーキテクチャから変更が2つある(`PillarFeatureNet`の`num_filters=[32]`と`RPN`の`ds_layer_strides=[2, 2, 2]`) | ## (省略可能) エラー検出と処理 @@ -447,4 +432,3 @@ Autowareのアーキテクチャは、主に以下のようなコンポーネン このインタラクションにより、Autowareは周囲を感知し、安全で効率的な経路を生成し、車両を制御することができ、自動運転の実現に不可欠です。 このドキュメントでは、Autowareのアーキテクチャの詳細について説明します。また、コンポーネントのインタラクションと、それらが自動運転システム全体にどのように寄与するかについても説明します。 - diff --git a/perception/autoware_lidar_transfusion/README.md b/perception/autoware_lidar_transfusion/README.md index 18ce3ba78c3cc..cd424cc642267 100644 --- a/perception/autoware_lidar_transfusion/README.md +++ b/perception/autoware_lidar_transfusion/README.md @@ -14,8 +14,8 @@ ### 入力 -| 名称 | タイプ | 説明 | -| -------------------- | ------------------------------- | ----------------- | +| 名称 | タイプ | 説明 | +| -------------------- | ------------------------------- | ---------- | | `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 入力点群。 | ### 出力 @@ -24,20 +24,20 @@ **目的:** -* センサーからのセンサデータから自己位置を推定する。 -* Planningモジュールに自己位置を提供する。 +- センサーからのセンサデータから自己位置を推定する。 +- Planningモジュールに自己位置を提供する。 **入力:** -* IMUデータ -* GNSSデータ -* オドメトリデータ -* カメラ画像(オプション) +- IMUデータ +- GNSSデータ +- オドメトリデータ +- カメラ画像(オプション) **出力:** -* 自車位置 -* 自己位置の不確かさ +- 自車位置 +- 自己位置の不確かさ **アルゴリズム:** @@ -51,83 +51,83 @@ **目的:** -* センサーからのデータを処理し、エゴカーの周囲の障害物を検出する。 -* Planningモジュールに障害物の情報を提供する。 +- センサーからのデータを処理し、エゴカーの周囲の障害物を検出する。 +- Planningモジュールに障害物の情報を提供する。 **入力:** -* レーダーデータ -* カメラ画像 -* LIDARデータ +- レーダーデータ +- カメラ画像 +- LIDARデータ **出力:** -* 障害物の位置と形状 -* 障害物の速度と加速度 +- 障害物の位置と形状 +- 障害物の速度と加速度 **アルゴリズム:** 障害検出モジュールは、次のアルゴリズムを使用して障害物を検出します。 -* **点群処理:** LIDARデータを使用して点群を作成します。 -* **クラスタリング:** 点群をクラスタ(障害物)にグループ化します。 -* **分類:** カメラ画像とレーダーデータを使用して、クラスタを障害物として分類します。 +- **点群処理:** LIDARデータを使用して点群を作成します。 +- **クラスタリング:** 点群をクラスタ(障害物)にグループ化します。 +- **分類:** カメラ画像とレーダーデータを使用して、クラスタを障害物として分類します。 **Planningモジュール** **目的:** -* 自車位置と障害物の情報に基づき、経路を計画し、次のような制御コマンドを生成する。 -* ステアリング角 -* アクセル/ブレーキコマンド +- 自車位置と障害物の情報に基づき、経路を計画し、次のような制御コマンドを生成する。 +- ステアリング角 +- アクセル/ブレーキコマンド **入力:** -* 自車位置 -* 障害物の情報 -* 地図データ +- 自車位置 +- 障害物の情報 +- 地図データ **出力:** -* 制御コマンド +- 制御コマンド **アルゴリズム:** Planningモジュールは、次のアルゴリズムを使用して経路を計画し、制御コマンドを生成します。 -* **空間探索法:** 次の目的地までの可能な経路を探索します。 -* **コスト関数:** 各経路のコストを計算し、障害物逸脱量、速度逸脱量、加速度逸脱量を考慮します。 -* **最適化アルゴリズム:** コストが最小となる経路を選択します。 -* **'post resampling'` による経路の平滑化。 +- **空間探索法:** 次の目的地までの可能な経路を探索します。 +- **コスト関数:** 各経路のコストを計算し、障害物逸脱量、速度逸脱量、加速度逸脱量を考慮します。 +- **最適化アルゴリズム:** コストが最小となる経路を選択します。 +- \*\*'post resampling'` による経路の平滑化。 **制御モジュール** **目的:** -* Planningモジュールから生成された制御コマンドを実行する。 -* ステアリングシステムと動力伝達システムを制御する。 +- Planningモジュールから生成された制御コマンドを実行する。 +- ステアリングシステムと動力伝達システムを制御する。 **入力:** -* 制御コマンド +- 制御コマンド **出力:** -* 車両の運動(ステアリング角、速度、加速度) +- 車両の運動(ステアリング角、速度、加速度) **アルゴリズム:** 制御モジュールは、PID制御器または状態フィードバックコントローラを使用して制御コマンドを実行します。 -| 名称 | タイプ | 説明 | -|---|---|---| -| `/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出されたオブジェクト | -| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクル時間 (ms) | -| `debug/pipeline_latency_ms` | `tier4_debug_msgs::msg::Float64Stamped` | パイプライン遅延時間 (ms) | -| `debug/processing_time/preprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 前処理時間 (ms) | -| `debug/processing_time/inference_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 推論時間 (ms) | -| `debug/processing_time/postprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 後処理時間 (ms) | -| `debug/processing_time/total_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 総処理時間 (ms) | +| 名称 | タイプ | 説明 | +| -------------------------------------- | ------------------------------------------------ | ------------------------- | +| `/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出されたオブジェクト | +| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクル時間 (ms) | +| `debug/pipeline_latency_ms` | `tier4_debug_msgs::msg::Float64Stamped` | パイプライン遅延時間 (ms) | +| `debug/processing_time/preprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 前処理時間 (ms) | +| `debug/processing_time/inference_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 推論時間 (ms) | +| `debug/processing_time/postprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 後処理時間 (ms) | +| `debug/processing_time/total_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 総処理時間 (ms) | ## パラメーター @@ -148,7 +148,6 @@ Planningモジュールは、次のアルゴリズムを使用して経路を計 `autoware_lidar_transfusion`ノードには、ONNXファイルからTensorRTエンジンファイルを構築するための`build_only`オプションがあります。 Autoware Universeの`.param.yaml`ファイルにすべてのROSパラメータを移動することが望ましいですが、`build_only`オプションは現在`.param.yaml`ファイルに移動されていません。これは、ビルドを事前タスクとして実行するためのフラグとして使用される可能性があるためです。次のコマンドで実行できます。 - ```bash ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml build_only:=true ``` @@ -157,7 +156,6 @@ ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml build_only:= `autoware_lidar_transfusion` のデフォルトのログ重要度レベルは `info` です。デバッグの目的では、開発者は `log_level` パラメータを使用して重要度のレベルを下げることができます: - ```bash ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml log_level:=debug ``` @@ -166,7 +164,6 @@ ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml log_level:=d このライブラリは、生のクラウドデータ (バイト) で動作します。入力ポイントクラウドメッセージのフォーマットは次のとおりであると想定されます。 - ```python [ sensor_msgs.msg.PointField(name='x', offset=0, datatype=7, count=1), @@ -179,7 +176,6 @@ ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml log_level:=d この入力には、他のフィールドが含まれる場合もあります。表示されている形式は必要な最小限です。 デバッグの目的で、次のシンプルなコマンドを使用してポイントクラウド・トピックを検証することができます。 - ```bash ros2 topic echo --field fields ``` @@ -236,4 +232,3 @@ ros2 topic echo --field fields 現在、このパッケージは揺れる障害物を適切に処理できません。この問題を改善するために、知覚レイヤーに確率フィルターを追加する予定です。 また、グローバル化する必要があるパラメータがいくつかあります(例: 車両サイズ、最大ステアリングなど)。これらはリファクタリングされてグローバルパラメータとして定義されるため、異なるノード間で同じパラメータを共有できます。 --> - diff --git a/perception/autoware_map_based_prediction/README.md b/perception/autoware_map_based_prediction/README.md index fea4ce7dd6038..d63cf36846871 100644 --- a/perception/autoware_map_based_prediction/README.md +++ b/perception/autoware_map_based_prediction/README.md @@ -74,11 +74,11 @@ これらのパラメータは、以下の表に示すように ROS パラメータで変更できます。 -| 設定名 | デフォルト値 | -| ---------------------------------------------------- | ------------- | -| `レーン変更検出の距離閾値` | `1.0` [m] | -| `レーン変更検出の時間閾値` | `5.0` [s] | -| `レーン変更検出用速度のカットオフ周波数` | `0.1` [Hz] | +| 設定名 | デフォルト値 | +| ---------------------------------------- | ------------ | +| `レーン変更検出の距離閾値` | `1.0` [m] | +| `レーン変更検出の時間閾値` | `5.0` [s] | +| `レーン変更検出用速度のカットオフ周波数` | `0.1` [Hz] | #### しきい値パラメータの調整 @@ -102,9 +102,9 @@ $$ 参考までに、横方向速度の計算方法を示します。 -| 横速度計算手法 | 式 | 説明 | -| ------------------------------------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [**適用**済み] 横距離のタイムデリバティブ | $\dfrac{\Delta d_{lat}}{\Delta t}$ | 現在、この手法は曲がりくねった道路に対処するために使用されています。この時間微分は容易にノイズを生じるため、低域通過フィルターも使用して速度を滑らかにしています。 | +| 横速度計算手法 | 式 | 説明 | +| --------------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [**適用**済み] 横距離のタイムデリバティブ | $\dfrac{\Delta d_{lat}}{\Delta t}$ | 現在、この手法は曲がりくねった道路に対処するために使用されています。この時間微分は容易にノイズを生じるため、低域通過フィルターも使用して速度を滑らかにしています。 | | [適用なし] オブジェクトの速度の横方向への投影 | $v_{obj} \sin(\theta)$ | 通常、オブジェクトの速度は横距離のタイムデリバティブよりもノイズが少なくなります。ただし、車線とオブジェクトの方向のヨー角差 $\theta$ が時々不連続になるため、この手法を採用しませんでした。 | 現在、ローパスフィルターを使用した高階メソッドで横速度を算出しています。 @@ -136,10 +136,10 @@ $$ Rosparam で以下の表に示すパラメータを変更できます。 -| パラメータ名 | デフォルト値 | -| ---------------------------------------- | ------------ | +| パラメータ名 | デフォルト値 | +| ---------------------------------------- | -------------- | | `check_lateral_acceleration_constraints` | `false` [bool] | -| `max_lateral_accel` | `2.0` [m/s^2] | +| `max_lateral_accel` | `2.0` [m/s^2] | | `min_acceleration_before_curve` | `-2.0` [m/s^2] | ## 自動車加速度を使用した経路予測(障害車両用) @@ -172,7 +172,7 @@ $\ x(t) = x*{t0} + (v*{t0} + a*{t0} \* (1/\lambda)) \cdot t + a*{t0}(1/λ^2)(e^{ 次の表の`rosparam`でこれらのパラメータを変更できます。 -| パラメータ名 | デフォルト値 | +| パラメータ名 | デフォルト値 | | ------------------------------------ | -------------- | | `use_vehicle_acceleration` | `false` [bool] | | `acceleration_exponential_half_life` | `2.5` [s] | @@ -209,11 +209,11 @@ $\ x(t) = x*{t0} + (v*{t0} + a*{t0} \* (1/\lambda)) \cdot t + a*{t0}(1/λ^2)(e^{ ### 入力 -| 名称 | 型 | 説明 | -| ------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------------------------- | -| `~/perception/object_recognition/tracking/objects` | `autoware_perception_msgs::msg::TrackedObjects` | 予測パスを持たない追跡オブジェクト。 | -| `~/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | Lanelet2 Mapのバイナリデータ。 | -| `~/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 対応する信号機の再配列された情報。 | +| 名称 | 型 | 説明 | +| -------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------ | +| `~/perception/object_recognition/tracking/objects` | `autoware_perception_msgs::msg::TrackedObjects` | 予測パスを持たない追跡オブジェクト。 | +| `~/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | Lanelet2 Mapのバイナリデータ。 | +| `~/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 対応する信号機の再配列された情報。 | ### 自動運転ソフトウェアに関するドキュメント @@ -298,32 +298,32 @@ Autowareのアップデートにより、最新の機能、バグ修正、セキ Troubleshootingガイドには、一般的な問題の解決手順が記載されています。診断、ログ分析、デバッグの手順を提供します。 -| 名称 | 型 | 説明 | -| ---------------------------- | ------------------------------------------------- | --------------------------------------------------------------------------------------- | +| 名称 | 型 | 説明 | +| ---------------------------- | ------------------------------------------------- | ----------------------------------------------------------------------------------------- | | `~/input/objects` | `autoware_perception_msgs::msg::TrackedObjects` | 検知物体。デフォルトは `/perception/object_recognition/tracking/objects` に設定されている | -| `~/output/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 予測経路付き検知物体 | -| `~/objects_path_markers` | `visualization_msgs::msg::MarkerArray` | 可視化用のマーカー | -| `~/debug/processing_time_ms` | `std_msgs::msg::Float64` | このモジュールの処理時間 | -| `~/debug/cyclic_time_ms` | `std_msgs::msg::Float64` | このモジュールの周期時間 | +| `~/output/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 予測経路付き検知物体 | +| `~/objects_path_markers` | `visualization_msgs::msg::MarkerArray` | 可視化用のマーカー | +| `~/debug/processing_time_ms` | `std_msgs::msg::Float64` | このモジュールの処理時間 | +| `~/debug/cyclic_time_ms` | `std_msgs::msg::Float64` | このモジュールの周期時間 | ## パラメータ -| パラメータ | 単位 | タイプ | 説明 | -|---|---|---|---| -| `enable_delay_compensation` | [-] | bool | 物体の位置に対する時間遅延補正を有効にするためのフラグ | -| `prediction_time_horizon` | [秒] | double | 予測 경로의 예측 시간 지속 기간 | -| `lateral_control_time_horizon` | [秒] | double | 예측 경로가 기준 경로(대부분 차선 중심)에 도달하는 시간 지속 기간 | -| `prediction_sampling_delta_time` | [秒] | double | 예측 경로에서 포인트의 샘플링 시간 | -| `min_velocity_for_map_based_prediction` | [m/s] | double | 이 값보다 높은 속도의 물체에 지도 기반 예측 적용 | -| `min_crosswalk_user_velocity` | [m/s] | double | 보행자의 속도를 계산할 때 사용되는 최소 속도 | -| `max_crosswalk_user_delta_yaw_threshold_for_lanelet` | [라디안] | double | 보행자와 차로 간의 최대 요우 각도 차이를 보행자 경로 예측에 사용 | -| `dist_threshold_for_searching_lanelet` | [m] | double | 물체가 속하는 차로를 검색하는 데 사용되는 각도 임계값 | -| `delta_yaw_threshold_for_searching_lanelet` | [라디안] | double | 물체가 속하는 차로를 검색하는 데 사용되는 각도 임계값 | -| `sigma_lateral_offset` | [m] | double | 물체의 측면 위치에 대한 표준 편차 | -| `sigma_yaw_angle_deg` | [도] | double | 물체의 요우 각도에 대한 표준 편차 | -| `object_buffer_time_length` | [초] | double | 물체의 정보를 저장하는 객체 이력의 시간 범위 | -| `history_time_length` | [초] | double | 예측에 사용되는 객체 정보의 시간 범위 | -| `prediction_time_horizon_rate_for_validate_shoulder_lane_length` | [-] | double | 예측 경로 길이가 차선 길이를 초과하면 예측 경로 비활성화. 이 매개변수는 예측 경로 길이를 제어 | +| パラメータ | 単位 | タイプ | 説明 | +| ---------------------------------------------------------------- | -------- | ------ | --------------------------------------------------------------------------------------------- | +| `enable_delay_compensation` | [-] | bool | 物体の位置に対する時間遅延補正を有効にするためのフラグ | +| `prediction_time_horizon` | [秒] | double | 予測 경로의 예측 시간 지속 기간 | +| `lateral_control_time_horizon` | [秒] | double | 예측 경로가 기준 경로(대부분 차선 중심)에 도달하는 시간 지속 기간 | +| `prediction_sampling_delta_time` | [秒] | double | 예측 경로에서 포인트의 샘플링 시간 | +| `min_velocity_for_map_based_prediction` | [m/s] | double | 이 값보다 높은 속도의 물체에 지도 기반 예측 적용 | +| `min_crosswalk_user_velocity` | [m/s] | double | 보행자의 속도를 계산할 때 사용되는 최소 속도 | +| `max_crosswalk_user_delta_yaw_threshold_for_lanelet` | [라디안] | double | 보행자와 차로 간의 최대 요우 각도 차이를 보행자 경로 예측에 사용 | +| `dist_threshold_for_searching_lanelet` | [m] | double | 물체가 속하는 차로를 검색하는 데 사용되는 각도 임계값 | +| `delta_yaw_threshold_for_searching_lanelet` | [라디안] | double | 물체가 속하는 차로를 검색하는 데 사용되는 각도 임계값 | +| `sigma_lateral_offset` | [m] | double | 물체의 측면 위치에 대한 표준 편차 | +| `sigma_yaw_angle_deg` | [도] | double | 물체의 요우 각도에 대한 표준 편차 | +| `object_buffer_time_length` | [초] | double | 물체의 정보를 저장하는 객체 이력의 시간 범위 | +| `history_time_length` | [초] | double | 예측에 사용되는 객체 정보의 시간 범위 | +| `prediction_time_horizon_rate_for_validate_shoulder_lane_length` | [-] | double | 예측 경로 길이가 차선 길이를 초과하면 예측 경로 비활성화. 이 매개변수는 예측 경로 길이를 제어 | ## 前提条件/既知の制限 @@ -341,4 +341,3 @@ Troubleshootingガイドには、一般的な問題の解決手順が記載さ 1. M. Werling, J. Ziegler, S. Kammel, and S. Thrun, “Optimal trajectory generation for dynamic street scenario in a frenet frame,” IEEE International Conference on Robotics and Automation, Anchorage, Alaska, USA, May 2010. 2. A. Houenou, P. Bonnifait, V. Cherfaoui, and Wen Yao, “Vehicle trajectory prediction based on motion model and maneuver recognition,” in 2013 IEEE/RSJ International Conference on Intelligent Robots and Systems. IEEE, nov 2013, pp. 4363-4369. - diff --git a/perception/autoware_multi_object_tracker/README.md b/perception/autoware_multi_object_tracker/README.md index 257c6fa9d3816..e0acefc731d79 100644 --- a/perception/autoware_multi_object_tracker/README.md +++ b/perception/autoware_multi_object_tracker/README.md @@ -24,7 +24,7 @@ - diff --git a/perception/autoware_object_merger/README.md b/perception/autoware_object_merger/README.md index 4da144ef24bd9..4c9a2361e2145 100644 --- a/perception/autoware_object_merger/README.md +++ b/perception/autoware_object_merger/README.md @@ -12,8 +12,8 @@ ### 入力 -| 名前 | タイプ | 説明 | -| --------------- | ------------------------------------------------ | ---------- | +| 名前 | タイプ | 説明 | +| --------------- | ------------------------------------------------ | -------- | | `input/object0` | `autoware_perception_msgs::msg::DetectedObjects` | 検出対象 | | `input/object1` | `autoware_perception_msgs::msg::DetectedObjects` | 検出対象 | @@ -25,41 +25,43 @@ **Sensor Fusion** -* **SBF (ステレオベースフロー)** - * ステレオカメラからの深度とオプティカルフローを融合して、3D点群を生成 +- **SBF (ステレオベースフロー)** -* **VLP16 LIDAR** - * 点群データを生成し、`post resampling`を使用して、3D空間内の障害物を検出 + - ステレオカメラからの深度とオプティカルフローを融合して、3D点群を生成 -* **RADAR** - * 車両、歩行者、その他の静止または動いている物体を検出 +- **VLP16 LIDAR** + + - 点群データを生成し、`post resampling`を使用して、3D空間内の障害物を検出 + +- **RADAR** + - 車両、歩行者、その他の静止または動いている物体を検出 **Global Planning** -* **Elastic Band** アルゴリズムを使用して、出発点から目的地までのパスを生成 -* 交通ルールや道路標識を考慮して、パスを最適化 +- **Elastic Band** アルゴリズムを使用して、出発点から目的地までのパスを生成 +- 交通ルールや道路標識を考慮して、パスを最適化 **Local Planning** -* **DWA (動的窓アプローチ)** アルゴリズムを使用して、自車位置を中心とした局所パスを生成 -* Planningモジュールが現在、障害物の回避、速度制御、パス追跡を実施中 +- **DWA (動的窓アプローチ)** アルゴリズムを使用して、自車位置を中心とした局所パスを生成 +- Planningモジュールが現在、障害物の回避、速度制御、パス追跡を実施中 **Control** -* **MPC (モデル予測制御)** アルゴリズムを使用して、ステアリング、加速、ブレーキを制御 -* 制御動作を最適化して、安全かつ効率的な走行を実現 +- **MPC (モデル予測制御)** アルゴリズムを使用して、ステアリング、加速、ブレーキを制御 +- 制御動作を最適化して、安全かつ効率的な走行を実現 **Performance Monitoring** -* **Path Evaluation** - * パスの妥当性と障害物との距離を評価 -* **Velocity and Acceleration Violation Detection** - * 速度逸脱量と加速逸脱量を検出し、異常な挙動を監視 -* **System Monitoring** - * システムのパフォーマンスを監視し、障害や異常を検出 +- **Path Evaluation** + - パスの妥当性と障害物との距離を評価 +- **Velocity and Acceleration Violation Detection** + - 速度逸脱量と加速逸脱量を検出し、異常な挙動を監視 +- **System Monitoring** + - システムのパフォーマンスを監視し、障害や異常を検出 -| 名前 | タイプ | 説明 | -|---|---|---| +| 名前 | タイプ | 説明 | +| --------------- | ------------------------------------------------ | -------------- | | `output/object` | `autoware_perception_msgs::msg::DetectedObjects` | 修正された物体 | ## パラメータ @@ -70,13 +72,13 @@ ## ヒント -* **誤検知:** クラスタリング手法によって検出された未知のオブジェクトは、急停止のリスクが高まり、Planningモジュールを妨げる場合があります。MLベースの検出器がオブジェクトを見逃すことがまれな場合は、object_merger のパラメータを調整して、Perceptionモジュールが未知のオブジェクトを無視するようにできます。 - * 大きな車両に近い未知のオブジェクトを削除したい場合: - * **HIGH** `distance_threshold_list`を利用する - * ただし、計算負荷が高くなります - * **LOW** `precision_threshold_to_judge_overlapped`を利用する - * **LOW** `generalized_iou_threshold`を利用する - * ただし、この2つのパラメータは、既知のオブジェクトに近いオブジェクトを見逃すリスクを高めます。 +- **誤検知:** クラスタリング手法によって検出された未知のオブジェクトは、急停止のリスクが高まり、Planningモジュールを妨げる場合があります。MLベースの検出器がオブジェクトを見逃すことがまれな場合は、object_merger のパラメータを調整して、Perceptionモジュールが未知のオブジェクトを無視するようにできます。 + - 大きな車両に近い未知のオブジェクトを削除したい場合: + - **HIGH** `distance_threshold_list`を利用する + - ただし、計算負荷が高くなります + - **LOW** `precision_threshold_to_judge_overlapped`を利用する + - **LOW** `generalized_iou_threshold`を利用する + - ただし、この2つのパラメータは、既知のオブジェクトに近いオブジェクトを見逃すリスクを高めます。 ## 想定/既知の制限 @@ -121,4 +123,3 @@ ## (省略可能) 今後の拡張/未実装の部分 データアソシエーションアルゴリズムは multi_object_tracker と同じでしたが、multi_object_tracker のアルゴリズムはすでに更新されています。 - diff --git a/perception/autoware_object_range_splitter/README.md b/perception/autoware_object_range_splitter/README.md index dc139a9bdbe76..9f19548bd48f3 100644 --- a/perception/autoware_object_range_splitter/README.md +++ b/perception/autoware_object_range_splitter/README.md @@ -30,8 +30,8 @@ ### 入力 -| 名称 | 種別 | 説明 | -| ---------- | ------------------------------------------- | ---------- | +| 名称 | 種別 | 説明 | +| -------------- | ------------------------------------------------ | ---------------- | | `input/object` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | ### 出力 @@ -48,51 +48,52 @@ Planning コンポーネントは、現在の状況や高レベルの目標に **機能** -* 安全で衝突を回避する経路の生成 -* 交通規則の遵守 -* 車両の制約(速度、加速度など)を考慮した経路生成 -* 動的障害物(歩行者、車両など)への対応 -* 高レベルの目標(目的地、レーンキープなど)への追従 -* 予測可能な経路生成 +- 安全で衝突を回避する経路の生成 +- 交通規則の遵守 +- 車両の制約(速度、加速度など)を考慮した経路生成 +- 動的障害物(歩行者、車両など)への対応 +- 高レベルの目標(目的地、レーンキープなど)への追従 +- 予測可能な経路生成 **実装** -Planning コンポーネントは、Autoware の __Planning モジュール__ によって実装されています。このモジュールは、以下を実行します。 +Planning コンポーネントは、Autoware の **Planning モジュール** によって実装されています。このモジュールは、以下を実行します。 -* センサデータの処理と解析 -* 自車位置の推定 -* 環境のモデリング -* 経路の探索と最適化 -* 経路の可視化 +- センサデータの処理と解析 +- 自車位置の推定 +- 環境のモデリング +- 経路の探索と最適化 +- 経路の可視化 **安全性** Planning コンポーネントは、次の特徴により安全な動作を確保します。 -* 複数のセンサからのデータフュージョン -* 予測可能な経路生成 -* 冗長性の確保 -* 逸脱量の制限(速度逸脱量、加速度逸脱量など) +- 複数のセンサからのデータフュージョン +- 予測可能な経路生成 +- 冗長性の確保 +- 逸脱量の制限(速度逸脱量、加速度逸脱量など) **性能** Planning コンポーネントは、以下のようなパフォーマンス目標を達成するように設計されています。 -* 低遅延の経路生成 -* `post resampling` 後の経路の正確さ -* さまざまな運転シナリオへの適応性 +- 低遅延の経路生成 +- `post resampling` 後の経路の正確さ +- さまざまな運転シナリオへの適応性 **依存関係** Planning コンポーネントは、以下のコンポーネントに依存しています。 -*センシングコンポーネント* -* ローカライゼーションコンポーネント* -* コントロールコンポーネント* +_センシングコンポーネント_ -| 名称 | 型 | 説明 | -|---|---|---| -| `output/long_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | 長距離検出オブジェクト | +- ローカライゼーションコンポーネント\* +- コントロールコンポーネント\* + +| 名称 | 型 | 説明 | +| --------------------------- | ------------------------------------------------ | ---------------------- | +| `output/long_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | 長距離検出オブジェクト | | `output/short_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | 短距離検出オブジェクト | ## パラメータ @@ -147,4 +148,3 @@ Planning コンポーネントは、以下のコンポーネントに依存し 現在、このパッケージは障害物のチャタリングをうまく処理できません。知覚レイヤーに確率的フィルタを追加して、これを改善する予定です。 また、グローバルにする必要があるパラメータ (例: 車両サイズ、最大操舵角度など) がいくつかあります。これらはリファクタリングされ、グローバルパラメータとして定義されるため、異なるノード間で同じパラメータを共有できます。 --> - diff --git a/perception/autoware_object_velocity_splitter/README.md b/perception/autoware_object_velocity_splitter/README.md index 90e7d91fb0de5..2b03aa5f83787 100644 --- a/perception/autoware_object_velocity_splitter/README.md +++ b/perception/autoware_object_velocity_splitter/README.md @@ -23,4 +23,3 @@ - デフォルトパラメータは3.0 このパラメータはオブジェクトを分割するための速度しきい値です - diff --git a/perception/autoware_occupancy_grid_map_outlier_filter/README.md b/perception/autoware_occupancy_grid_map_outlier_filter/README.md index cdb9dafe8f5f5..c05d667699e41 100644 --- a/perception/autoware_occupancy_grid_map_outlier_filter/README.md +++ b/perception/autoware_occupancy_grid_map_outlier_filter/README.md @@ -24,10 +24,10 @@ ### 入力 -| 名前 | タイプ | 説明 | -|---|---|---| -| `~/input/pointcloud` | `sensor_msgs/PointCloud2` | 地面を除去した障害物点群 | -| `~/input/occupancy_grid_map` | `nav_msgs/OccupancyGrid` | 障害物存在確率を占有確率マップに示したマップ | +| 名前 | タイプ | 説明 | +| ---------------------------- | ------------------------- | -------------------------------------------- | +| `~/input/pointcloud` | `sensor_msgs/PointCloud2` | 地面を除去した障害物点群 | +| `~/input/occupancy_grid_map` | `nav_msgs/OccupancyGrid` | 障害物存在確率を占有確率マップに示したマップ | ### 出力 @@ -35,64 +35,64 @@ **目次** -* システムアーキテクチャ -* 知覚コンポーネント -* 計画モジュール -* 制御モジュール -* 評価方法 +- システムアーキテクチャ +- 知覚コンポーネント +- 計画モジュール +- 制御モジュール +- 評価方法 **システムアーキテクチャ** Autowareのシステムアーキテクチャは、次の主要コンポーネントで構成されています。 -* **知覚コンポーネント:** センサーデータを処理して、周囲の環境を認識します。 -* **計画モジュール:** 知覚された環境に基づき、走行経路と制御コマンドを生成します。 -* **制御モジュール:** 計画モジュールから生成されたコマンドに基づいて、車両を制御します。 +- **知覚コンポーネント:** センサーデータを処理して、周囲の環境を認識します。 +- **計画モジュール:** 知覚された環境に基づき、走行経路と制御コマンドを生成します。 +- **制御モジュール:** 計画モジュールから生成されたコマンドに基づいて、車両を制御します。 **知覚コンポーネント** 知覚コンポーネントは、次のタスクを実行します。 -* **物体検出:** 車両、歩行者、障害物を検出します。 -* **車線検出:** 車線を検出します。 -* **自由空間検出:** 車両が移動できる空間を検出します。 +- **物体検出:** 車両、歩行者、障害物を検出します。 +- **車線検出:** 車線を検出します。 +- **自由空間検出:** 車両が移動できる空間を検出します。 **計画モジュール** 計画モジュールは、以下のタスクを実行します。 -* **経路計画:** 安全で効率的な走行経路を生成します。 -* **運動計画:** 車両の速度と加速度を制御します。 -* **軌跡生成:** 車両が経路に従うための詳細な軌跡を生成します。 +- **経路計画:** 安全で効率的な走行経路を生成します。 +- **運動計画:** 車両の速度と加速度を制御します。 +- **軌跡生成:** 車両が経路に従うための詳細な軌跡を生成します。 **制御モジュール** 制御モジュールは、以下のタスクを実行します。 -* **ステアリング制御:** 車両の方向を制御します。 -* **スロットル制御:** 車両の速度を制御します。 -* **ブレーキ制御:** 車両を停止します。 +- **ステアリング制御:** 車両の方向を制御します。 +- **スロットル制御:** 車両の速度を制御します。 +- **ブレーキ制御:** 車両を停止します。 **評価方法** Autowareの性能は、シミュレーションと実車テストの両方を使用して評価されます。評価メトリクスには以下が含まれます。 -* **経路逸脱量:** 計画された経路からの車両の偏差 -* **速度逸脱量:** 計画された速度からの車両の偏差 -* **加速度逸脱量:** 計画された加速度からの車両の偏差 -* **衝突回数:** シミュレーションまたは実車テスト中の車両の衝突数 +- **経路逸脱量:** 計画された経路からの車両の偏差 +- **速度逸脱量:** 計画された速度からの車両の偏差 +- **加速度逸脱量:** 計画された加速度からの車両の偏差 +- **衝突回数:** シミュレーションまたは実車テスト中の車両の衝突数 **追加のドキュメント** -* [Autowareの開発ガイド](https://github.com/autowarefoundation/autoware/blob/master/docs/development_guide.md) -* [Autowareの技術ドキュメント](https://github.com/autowarefoundation/autoware/blob/master/docs/technical_docs.md) +- [Autowareの開発ガイド](https://github.com/autowarefoundation/autoware/blob/master/docs/development_guide.md) +- [Autowareの技術ドキュメント](https://github.com/autowarefoundation/autoware/blob/master/docs/technical_docs.md) -| 名称 | タイプ | 説明 | -| ------------------------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `~/output/pointcloud` | `sensor_msgs/PointCloud2` | 異常値が除去された点群 | -| `~/output/debug/outlier/pointcloud` | `sensor_msgs/PointCloud2` | 異常値として削除された点群 | -| `~/output/debug/low_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 点群マップ内の占有確率が低い点群(ただし、異常値とは見なされない) | -| `~/output/debug/high_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 点群マップ内の占有確率が高い点群 trajectory | +| 名称 | タイプ | 説明 | +| ------------------------------------------- | ------------------------- | ------------------------------------------------------------------ | +| `~/output/pointcloud` | `sensor_msgs/PointCloud2` | 異常値が除去された点群 | +| `~/output/debug/outlier/pointcloud` | `sensor_msgs/PointCloud2` | 異常値として削除された点群 | +| `~/output/debug/low_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 点群マップ内の占有確率が低い点群(ただし、異常値とは見なされない) | +| `~/output/debug/high_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 点群マップ内の占有確率が高い点群 trajectory | ## パラメータ @@ -107,4 +107,3 @@ Autowareの性能は、シミュレーションと実車テストの両方を使 ## (任意)リファレンス/外部リンク ## (任意)将来の拡張/未実装部分 - diff --git a/perception/autoware_probabilistic_occupancy_grid_map/README.md b/perception/autoware_probabilistic_occupancy_grid_map/README.md index 9278d5411f6cb..292c210a131e2 100644 --- a/perception/autoware_probabilistic_occupancy_grid_map/README.md +++ b/perception/autoware_probabilistic_occupancy_grid_map/README.md @@ -34,7 +34,6 @@ - pointcloud_based_occupancy_grid_map method - ```yaml # downsampled raw and obstacle pointcloud /perception/occupancy_grid_map/obstacle/downsample/pointcloud @@ -47,10 +46,10 @@ ### 特徴 -* 複数のLiDARからのポイントクラウドデータを統合 -* LiDARの視差を補正して、より正確なポイントクラウドを生成 -* ノイズや異常値を除去して、高品質なポイントクラウドを生成 -* `post resampling`を使用して、ポイントクラウドの密度のばらつきを削減 +- 複数のLiDARからのポイントクラウドデータを統合 +- LiDARの視差を補正して、より正確なポイントクラウドを生成 +- ノイズや異常値を除去して、高品質なポイントクラウドを生成 +- `post resampling`を使用して、ポイントクラウドの密度のばらつきを削減 ### 使用法 @@ -64,11 +63,10 @@ `multi_lidar_pointcloud_based_point_cloud`モジュールは、次の出力を生成します。 -* 高品質で濃密なポイントクラウド -* 各LiDARの点の距離逸脱量 -* 各LiDARの点の速度逸脱量 -* 各LiDARの点の加速度逸脱量 - +- 高品質で濃密なポイントクラウド +- 各LiDARの点の距離逸脱量 +- 各LiDARの点の速度逸脱量 +- 各LiDARの点の加速度逸脱量 ```yaml # downsampled raw and obstacle pointcloud @@ -81,7 +79,6 @@ このパッケージは `gtest` を使用するユニットテストを提供します。 以下のコマンドでテストを実行できます。 - ```bash colcon test --packages-select autoware_probabilistic_occupancy_grid_map --event-handlers console_direct+ ``` @@ -92,4 +89,3 @@ colcon test --packages-select autoware_probabilistic_occupancy_grid_map --event- - ユーティリティ関数のユニットテスト - オキュパンシグリッドマップ結合関数のユニットテスト - ポイントクラウドベースオキュパンシグリッドマップの入出力テスト - diff --git a/perception/autoware_radar_crossing_objects_noise_filter/README.md b/perception/autoware_radar_crossing_objects_noise_filter/README.md index 1b51f1c947868..76903192184c3 100644 --- a/perception/autoware_radar_crossing_objects_noise_filter/README.md +++ b/perception/autoware_radar_crossing_objects_noise_filter/README.md @@ -30,7 +30,6 @@ ![algorithm](docs/radar_crossing_objects_noise_filter.drawio.svg) - ```cpp // If velocity of an object is rather than the velocity_threshold, // and crossing_yaw is near to vertical @@ -71,4 +70,3 @@ このパラメーターは、フィルタリングする速度のしきい値です。オブジェクトの速度がこのパラメーターより大きい場合、ノイズオブジェクトの候補となります。言い換えると、オブジェクトの速度がこのパラメーターより小さい場合は、フィルタリングされたオブジェクトです。 このパラメーターを小さく設定すると、より多くのオブジェクトがノイズと見なされます。詳細については、アルゴリズムの章を参照してください。 - diff --git a/perception/autoware_radar_fusion_to_detected_object/README.md b/perception/autoware_radar_fusion_to_detected_object/README.md index 93e5fa63bf80c..68ab6fb422e30 100644 --- a/perception/autoware_radar_fusion_to_detected_object/README.md +++ b/perception/autoware_radar_fusion_to_detected_object/README.md @@ -77,7 +77,7 @@ LiDAR ベースの検出オブジェクトとレーダー速度のヨーの差 **速度推定におけるトップターゲット値レーダーデータのツイスト係数** レーダーポイントクラウドを使用している場合、ターゲット値は振幅です。レーダーオブジェクトを使用している場合、ターゲット値は確率です。 -### 固定オブジェクト情報の**パラメータ +### 固定オブジェクト情報の\*\*パラメータ - `convert_doppler_to_twist` (bool) - デフォルトパラメータは false です。 @@ -106,7 +106,6 @@ LiDAR ベースの検出オブジェクトとレーダー速度のヨーの差 ### 実行方法 - ```sh ros2 launch autoware_radar_fusion_to_detected_object radar_object_to_detected_object.launch.xml ``` @@ -138,4 +137,3 @@ ros2 launch autoware_radar_fusion_to_detected_object radar_object_to_detected_ob ## radar_scan_fusion_to_detected_objectインターフェイス(未定) 未実装 - diff --git a/perception/autoware_radar_object_clustering/README.md b/perception/autoware_radar_object_clustering/README.md index 7dc2d29eb4f40..e39ca463c2120 100644 --- a/perception/autoware_radar_object_clustering/README.md +++ b/perception/autoware_radar_object_clustering/README.md @@ -77,7 +77,6 @@ これらは以下のような `isSameObject` 関数で使用されます。 - ```cpp bool RadarObjectClusteringNode::isSameObject( @@ -123,4 +122,3 @@ trueの場合、クラスタされたオブジェクトのラベルは`fixed_lab `is_fixed_size`は固定サイズのパラメータを使用するフラグです。 trueの場合、クラスタされたオブジェクトのサイズは`size_x`, `size_y`, `size_z`パラメータで設定されたラベルで上書きされます。 - diff --git a/perception/autoware_radar_object_tracker/README.md b/perception/autoware_radar_object_tracker/README.md index 1797f91a5fb06..749724b343fc7 100644 --- a/perception/autoware_radar_object_tracker/README.md +++ b/perception/autoware_radar_object_tracker/README.md @@ -25,9 +25,9 @@ ### 入力 -| 名前 | 型 | 説明 | +| 名前 | 型 | 説明 | | ------------- | ------------------------------------------------ | ---------- | -| `~/input` | `autoware_perception_msgs::msg::DetectedObjects` | 検出物体 | +| `~/input` | `autoware_perception_msgs::msg::DetectedObjects` | 検出物体 | | `/vector/map` | `autoware_map_msgs::msg::LaneletMapBin` | 地図データ | ### 出力 @@ -38,19 +38,19 @@ Planning モジュールは、次のような機能を提供します。 -* 感知データからの動的障害物の検出 -* 自車位置に基づく周囲環境のマップ構築 -* 目標速度とステアリングの計算 +- 感知データからの動的障害物の検出 +- 自車位置に基づく周囲環境のマップ構築 +- 目標速度とステアリングの計算 ### Planning アーキテクチャ Planning モジュールは、以下のコンポーネントで構成されています。 -* **Perception:** ダイナミック障害物を検出します。 -* **Map:** 自車位置に基づいて周囲環境のマップを構築します。 -* **Motion Planning:** 目標速度と軌跡を計算します。 -* **Speed Planning:** 目標速度を決定します。 -* **Decision Making:** 感知データとマップ情報を統合し、パスを生成します。 +- **Perception:** ダイナミック障害物を検出します。 +- **Map:** 自車位置に基づいて周囲環境のマップを構築します。 +- **Motion Planning:** 目標速度と軌跡を計算します。 +- **Speed Planning:** 目標速度を決定します。 +- **Decision Making:** 感知データとマップ情報を統合し、パスを生成します。 ### Planning パイプライン @@ -62,7 +62,7 @@ Planning パイプラインは、以下の手順で構成されています。 4. **軌跡生成:** 障害物を回避する軌跡が生成されます。 5. **パス生成:** 軌跡からパスが生成されます。 -| 名前 | タイプ | 説明 | +| 名前 | タイプ | 説明 | | ---------- | ----------------------------------------------- | -------- | | `~/output` | `autoware_perception_msgs::msg::TrackedObjects` | 追跡対象 | @@ -70,27 +70,27 @@ Planning パイプラインは、以下の手順で構成されています。 ### ノードパラメータ -| 名前 | タイプ | デフォルト値 | 説明 | -| ------ | ------ | --------------------------- | --------------------------------------------------------------------------------------------------------------- | -| `publish_rate` | double | 10.0 | 出力メッセージをパブリッシュするレート | -| `world_frame_id` | string | "map" | ワールド座標系のフレームID | -| `enable_delay_compensation` | bool | false | ディレイ補正を有効にするかどうか。`True`に設定すると、出力トピックは`publish_rate`でタイマーによりパブリッシュされます。 | -| `tracking_config_directory` | string | "./config/tracking/" | トラッキング設定ファイルを含むディレクトリ | -| `enable_logging` | bool | false | ロギングを有効にするかどうか | -| `logging_file_path` | string | "/tmp/association_log.json" | ログを書き込むファイルのパス | -| `tracker_lifetime` | double | 1.0 | トラッカーの有効期間(秒) | -| `use_distance_based_noise_filtering` | bool | true | 距離ベースのフィルタリングを使用するかどうか | -| `minimum_range_threshold` | double | 70.0 | フィルタリングの最小距離しきい値(メートル) | -| `use_map_based_noise_filtering` | bool | true | マップベースのフィルタリングを使用するかどうか | -| `max_distance_from_lane` | double | 5.0 | フィルタリングのためのレーンからの最大距離(メートル) | -| `max_angle_diff_from_lane` | double | 0.785398 | フィルタリングのためのレーンからの最大角度差(ラジアン) | -| `max_lateral_velocity` | double | 5.0 | フィルタリングのための最大側方速度(m/s) | -| `can_assign_matrix` | array | | データアソシエーションアルゴリズムで使用される整数配列 | -| `max_dist_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | -| `max_area_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | -| `min_area_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | -| `max_rad_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | -| `min_iou_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +| 名前 | タイプ | デフォルト値 | 説明 | +| ------------------------------------ | ------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| `publish_rate` | double | 10.0 | 出力メッセージをパブリッシュするレート | +| `world_frame_id` | string | "map" | ワールド座標系のフレームID | +| `enable_delay_compensation` | bool | false | ディレイ補正を有効にするかどうか。`True`に設定すると、出力トピックは`publish_rate`でタイマーによりパブリッシュされます。 | +| `tracking_config_directory` | string | "./config/tracking/" | トラッキング設定ファイルを含むディレクトリ | +| `enable_logging` | bool | false | ロギングを有効にするかどうか | +| `logging_file_path` | string | "/tmp/association_log.json" | ログを書き込むファイルのパス | +| `tracker_lifetime` | double | 1.0 | トラッカーの有効期間(秒) | +| `use_distance_based_noise_filtering` | bool | true | 距離ベースのフィルタリングを使用するかどうか | +| `minimum_range_threshold` | double | 70.0 | フィルタリングの最小距離しきい値(メートル) | +| `use_map_based_noise_filtering` | bool | true | マップベースのフィルタリングを使用するかどうか | +| `max_distance_from_lane` | double | 5.0 | フィルタリングのためのレーンからの最大距離(メートル) | +| `max_angle_diff_from_lane` | double | 0.785398 | フィルタリングのためのレーンからの最大角度差(ラジアン) | +| `max_lateral_velocity` | double | 5.0 | フィルタリングのための最大側方速度(m/s) | +| `can_assign_matrix` | array | | データアソシエーションアルゴリズムで使用される整数配列 | +| `max_dist_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +| `max_area_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +| `min_area_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +| `max_rad_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +| `min_iou_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | ## トラッカーのパラメータ @@ -120,4 +120,3 @@ Planning パイプラインは、以下の手順で構成されています。 ## (省略可) 将来の拡張機能/未実装部分 - diff --git a/perception/autoware_radar_tracks_msgs_converter/README.md b/perception/autoware_radar_tracks_msgs_converter/README.md index c93575c6ebdcd..413e0f85910d1 100644 --- a/perception/autoware_radar_tracks_msgs_converter/README.md +++ b/perception/autoware_radar_tracks_msgs_converter/README.md @@ -19,15 +19,15 @@ Autoware はレーダーオブジェクト入力データとして [radar_msgs/m ラベル ID は以下のように定義されています。 | | レーダートラック | Autoware | -| ---------- | ---------- | -------- | -| UNKNOWN | 32000 | 0 | -| CAR | 32001 | 1 | -| TRUCK | 32002 | 2 | -| BUS | 32003 | 3 | -| TRAILER | 32004 | 4 | -| MOTORCYCLE | 32005 | 5 | -| BICYCLE | 32006 | 6 | -| PEDESTRIAN | 32007 | 7 | +| ---------- | ---------------- | -------- | +| UNKNOWN | 32000 | 0 | +| CAR | 32001 | 1 | +| TRUCK | 32002 | 2 | +| BUS | 32003 | 3 | +| TRAILER | 32004 | 4 | +| MOTORCYCLE | 32005 | 5 | +| BICYCLE | 32006 | 6 | +| PEDESTRIAN | 32007 | 7 | 追加のベンダー固有分類は、32000 から [radar_msgs/msg/RadarTrack.msg](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTrack.msg) で許可されています。 Autoware オブジェクト ラベルは [ObjectClassification](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/ObjectClassification.msg) で定義されています。 @@ -86,4 +86,3 @@ Autoware オブジェクト ラベルは [ObjectClassification](https://github.c このパラメーターはフラグ `is_stationary` を決定するしきい値です。 速度がこのパラメーターよりも低い場合、DetectedObject のフラグ `is_stationary` は `true` に設定され、静的オブジェクトとして扱われます。 - diff --git a/perception/autoware_shape_estimation/README.md b/perception/autoware_shape_estimation/README.md index efcb50a3aac5c..922ff29c18b24 100644 --- a/perception/autoware_shape_estimation/README.md +++ b/perception/autoware_shape_estimation/README.md @@ -25,8 +25,8 @@ ### 入力 -| 名称 | タイプ | 説明 | -| --------- | -------------------------------------------------------- | ------------------------------------- | +| 名称 | タイプ | 説明 | +| ------- | -------------------------------------------------------- | ---------------------------------------- | | `input` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | ラベル付きクラスタによる検出オブジェクト | ### 出力 @@ -66,8 +66,8 @@ Autowareの自己位置推定Planningモジュールは、自己位置の追従、軌道計画のpost resampling、計画された軌道の修正、計画された軌道の速度逸脱量と加速度逸脱量の計算を含む、自己位置推定Planningの重要なコンポーネントです。このモジュールは、車両の安全で効率的な動作を確実にします。 -| 名前 | タイプ | 説明 | -| ---------------- | ------------------------------------------------ | ----------------------------------- | +| 名前 | タイプ | 説明 | +| ---------------- | ------------------------------------------------ | ------------------------------------------ | | `output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 洗練された形状を持つ検出されたオブジェクト | ## パラメータ @@ -80,7 +80,7 @@ Autowareの自己位置推定Planningモジュールは、自己位置の追従 MLベースの形状推定アルゴリズムは、バックボーンとしてPointNetモデルを使用して、物体の3Dバウンディングボックスを推定します。このモデルは、車両ラベル(車、トラック、バス、トレーラー)を持つNuScenesデータセットでトレーニングされています。 -実装されたモデルは、入力ポイントクラウドを正規空間に変換するためにSTN(空間変換ネットワーク)と結合され、PointNetを使用して物体の3Dバウンディングボックスを予測します。_RGB-Dデータからの3D物体検出用のFrustum PointNets_論文のバウンディングボックス推定部分が参考として使用されました。 +実装されたモデルは、入力ポイントクラウドを正規空間に変換するためにSTN(空間変換ネットワーク)と結合され、PointNetを使用して物体の3Dバウンディングボックスを予測します。*RGB-Dデータからの3D物体検出用のFrustum PointNets*論文のバウンディングボックス推定部分が参考として使用されました。 このモデルは、各オブジェクトに対して以下の出力を予測します。 @@ -102,7 +102,6 @@ MLベースの形状推定アルゴリズムは、バックボーンとしてPoi **ステップ 2.** conda仮想環境を作成してアクティブにする - ```bash conda create --name train-shape-estimation python=3.8 -y conda activate train-shape-estimation @@ -110,7 +109,6 @@ conda activate train-shape-estimation **手順 3.** PyTorch をインストールする - ```bash conda install pytorch torchvision -c pytorch ``` @@ -119,7 +117,6 @@ conda install pytorch torchvision -c pytorch **手順 1.** MIM を使用して MMEngine、MMCV、および MMDetection をインストールする - ```bash pip install -U openmim mim install mmengine @@ -129,7 +126,6 @@ mim install 'mmdet>=3.0.0rc5, <3.3.0' **ステップ2.** AutowareのMMDetection3Dフォークをインストールする - ```bash git clone https://github.com/autowarefoundation/mmdetection3d.git cd mmdetection3d @@ -144,14 +140,12 @@ pip install -v -e . **ステップ 2**. データセットフォルダーへのシンボリックリンクを作成します - ```bash ln -s /path/to/nuscenes/dataset/ /path/to/mmdetection3d/data/nuscenes/ ``` **ステップ3.** 次のコマンドを実行してNuScenesデータを準備: - ```bash cd mmdetection3d python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --only-gt-database True @@ -159,14 +153,12 @@ python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./dat #### クローニング バウンディング ボックス エスティメータ モデル - ```bash git clone https://github.com/autowarefoundation/bbox_estimator.git ``` #### データセットをトレーニングセットと検証セットに分割する - ```bash cd bbox_estimator @@ -177,7 +169,6 @@ python3 utils/split_dbinfos.py --dataset_path /path/to/mmdetection3d/data/nuscen #### モデルの学習 - ```bash # Detailed training options can be found in the training script # For more details, run `python3 train.py --help` @@ -200,9 +191,9 @@ Autoware.Autoのパイプラインの `planning` モジュールでは、予測 予測モデルの性能は、次のような指標を使用して評価できます。 -* **平均絶対誤差(MAE)**: 障害物軌跡の予測値と実際の値との差の平均 -* **平均二乗誤差(MSE)**: 予測値と実際の値との二乗差の平均 -* **相関関係**: 予測値と実際の値との間の相関関係 +- **平均絶対誤差(MAE)**: 障害物軌跡の予測値と実際の値との差の平均 +- **平均二乗誤差(MSE)**: 予測値と実際の値との二乗差の平均 +- **相関関係**: 予測値と実際の値との間の相関関係 ### モデルの展開 @@ -214,7 +205,6 @@ Autoware.Autoのパイプラインの `planning` モジュールでは、予測 展開後、予測モデルはリアルタイムで障害物の軌跡を予測するために使用されます。この情報は、他のモーションプランニングモジュールによって安全な経路を計画するために使用されます。 - ```bash # Convert the trained model to ONNX format python3 onnx_converter.py --weight_path /path/to/best_checkpoint.pth --output_path /path/to/output.onnx @@ -230,7 +220,6 @@ python3 onnx_converter.py --weight_path /path/to/best_checkpoint.pth --output_pa 論文内のL字型フィッティングの実装: - ```bibtex @conference{Zhang-2017-26536, author = {Xiao Zhang and Wenda Xu and Chiyu Dong and John M. Dolan}, @@ -287,7 +276,6 @@ Frustum PointNetsモジュールは、Planningコンポーネントに次の影 Frustum PointNetsは、RGB-Dデータからの3D物体検出に高い精度を実現する強力な手法です。Autowareフレームワークに統合することにより、Planningコンポーネントの障害物検出と軌道計算の能力を向上させることができます。 - ````bibtex @inproceedings{qi2018frustum, title={Frustum pointnets for 3d object detection from rgb-d data}, @@ -299,4 +287,3 @@ year={2018} ```` - diff --git a/perception/autoware_simple_object_merger/README.md b/perception/autoware_simple_object_merger/README.md index a4ab9b21075fb..980562b0bc082 100644 --- a/perception/autoware_simple_object_merger/README.md +++ b/perception/autoware_simple_object_merger/README.md @@ -57,7 +57,6 @@ このパラメータは、タイムアウト判定のしきい値です。 `input_topics` の最初のトピックと入力トピックの時差がこのパラメータを超えると、トピックのオブジェクトは出力オブジェクトにマージされません。 - ```cpp for (size_t i = 0; i < input_topic_size; i++) { double time_diff = rclcpp::Time(objects_data_.at(i)->header.stamp).seconds() - @@ -74,7 +73,6 @@ このパラメータは、入力トピックの名前です。 たとえば、このパッケージをレーダーオブジェクトに使用する場合、 - ```yaml input_topics: [ @@ -89,4 +87,3 @@ input_topics: config yaml ファイル内で設定できます。 現時点では、時間差は `input_topics` の最初のトピックと入力トピック間のヘッダー時間で計算されるため、検出する最も重要なオブジェクトは `input_topics` リストの最初の部分に設定する必要があります。 - diff --git a/perception/autoware_tensorrt_classifier/README.md b/perception/autoware_tensorrt_classifier/README.md index 3348e9e2543c2..48c3065cb57ae 100644 --- a/perception/autoware_tensorrt_classifier/README.md +++ b/perception/autoware_tensorrt_classifier/README.md @@ -3,4 +3,3 @@ ## 目的 このパッケージは TensorRT を利用して任意のカテゴリの分類を実施し、高効率・高速推論を実現します。具体的には、組み込みプラットフォームの効率的な推論のための前処理を最適化します。さらに、GPU と DLA での動的バッチ推論をサポートします。 - diff --git a/perception/autoware_tensorrt_common/README.md b/perception/autoware_tensorrt_common/README.md index 61c7f590874b2..1608ec4370b49 100644 --- a/perception/autoware_tensorrt_common/README.md +++ b/perception/autoware_tensorrt_common/README.md @@ -4,4 +4,3 @@ このパッケージには、TensorRT に関連する共通関数のライブラリが含まれています。 このパッケージには、TensorRT エンジンの処理や、量子化に使用される較正アルゴリズムの関数が含まれます。 - diff --git a/perception/autoware_tensorrt_yolox/README.md b/perception/autoware_tensorrt_yolox/README.md index 8d2468172dde3..04f6affb0df2b 100644 --- a/perception/autoware_tensorrt_yolox/README.md +++ b/perception/autoware_tensorrt_yolox/README.md @@ -16,8 +16,8 @@ ### 入力 -| 名称 | 型 | 説明 | -| ---------- | ------------------- | --------------- | +| 名称 | 型 | 説明 | +| ---------- | ------------------- | -------- | | `in/image` | `sensor_msgs/Image` | 入力画像 | ### 出力 @@ -28,39 +28,39 @@ Autowareは、オープンソース自動運転ソフトウェアスタックで **Planningコンポーネント** -* **Path Planning:** 目的地までの経路を生成します。 -* **Speed Planning:** 経路上の最適速度プロファイルを作成します。 -* **Trajectory Planning:** 経路と速度プロファイルを組み合わせた、車両の軌跡を生成します。 +- **Path Planning:** 目的地までの経路を生成します。 +- **Speed Planning:** 経路上の最適速度プロファイルを作成します。 +- **Trajectory Planning:** 経路と速度プロファイルを組み合わせた、車両の軌跡を生成します。 **Perceptionコンポーネント** -* **Localization:** 自車位置と周囲環境の地図を特定します。 -* **Object Detection:** 周囲の車両、歩行者、障害物を検出します。 -* **Obstacle Tracking:** 時間とともに動いている物体を追跡します。 +- **Localization:** 自車位置と周囲環境の地図を特定します。 +- **Object Detection:** 周囲の車両、歩行者、障害物を検出します。 +- **Obstacle Tracking:** 時間とともに動いている物体を追跡します。 **Controlコンポーネント** -* **Longitudinal Control:** 車両の速度を制御します。 -* **Lateral Control:** 車両の向きを制御します。 -* **Model Predictive Control (MPC):** 車両の挙動を予測し、最適な制御入力を決定します。 +- **Longitudinal Control:** 車両の速度を制御します。 +- **Lateral Control:** 車両の向きを制御します。 +- **Model Predictive Control (MPC):** 車両の挙動を予測し、最適な制御入力を決定します。 **Drivingポリシー** -* **Lane Keeping Assist:** 車両が車線内を維持するのに役立ちます。 -* **Adaptive Cruise Control:** 前方車両との安全な間隔を維持します。 -* **Collision Avoidance:** 衝突の可能性を検出し、回避策を実行します。 +- **Lane Keeping Assist:** 車両が車線内を維持するのに役立ちます。 +- **Adaptive Cruise Control:** 前方車両との安全な間隔を維持します。 +- **Collision Avoidance:** 衝突の可能性を検出し、回避策を実行します。 **安全機能** -* **Velocity Violation Check:** `post resampling`による速度逸脱量を確認します。 -* **Acceleration Violation Check:** 加速度逸脱量を確認します。 -* **Obstacle Proximity Check:** 障害物との近接性を監視します。 +- **Velocity Violation Check:** `post resampling`による速度逸脱量を確認します。 +- **Acceleration Violation Check:** 加速度逸脱量を確認します。 +- **Obstacle Proximity Check:** 障害物との近接性を監視します。 -| 名称 | タイプ | 説明 | -| ---------------- | ----------------------------------------------------- | -------------------------------------------------------------------- | -| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックス付きの検出オブジェクト | -| `out/image` | `sensor_msgs/Image` | 視覚化のための2Dバウンディングボックス付きのイメージ | -| `out/mask` | `sensor_msgs/Image` | セマンティックセグメンテーションマスク | +| 名称 | タイプ | 説明 | +| ---------------- | -------------------------------------------------- | -------------------------------------------------------------------- | +| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックス付きの検出オブジェクト | +| `out/image` | `sensor_msgs/Image` | 視覚化のための2Dバウンディングボックス付きのイメージ | +| `out/mask` | `sensor_msgs/Image` | セマンティックセグメンテーションマスク | | `out/color_mask` | `sensor_msgs/Image` | 視覚化のためのセマンティックセグメンテーションマスクの色付けイメージ | ## パラメータ @@ -84,23 +84,23 @@ Autowareは、オープンソース自動運転ソフトウェアスタックで セマンティックセグメンテーションマスクは、各ピクセルが次のクラスのいずれかのインデックスであるグレースケール画像です。 | インデックス | シマンティック名 | -|---|---| -| 0 | 道路 | -| 1 | 建物 | -| 2 | 壁 | -| 3 | 障害物 | -| 4 | 交通信号 | -| 5 | 交通標識 | -| 6 | 歩行者 | -| 7 | 車両 | -| 8 | 自転車 | -| 9 | 道路 | -| 10 | 歩道 | -| 11 | 道路ペイント | -| 12 | 側石 | -| 13 | 交差点(その他) | -| 14 | 草木 | -| 15 | 空 | +| ------------ | ---------------- | +| 0 | 道路 | +| 1 | 建物 | +| 2 | 壁 | +| 3 | 障害物 | +| 4 | 交通信号 | +| 5 | 交通標識 | +| 6 | 歩行者 | +| 7 | 車両 | +| 8 | 自転車 | +| 9 | 道路 | +| 10 | 歩道 | +| 11 | 道路ペイント | +| 12 | 側石 | +| 13 | 交差点(その他) | +| 14 | 草木 | +| 15 | 空 | ## Onnxモデル @@ -140,8 +140,6 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ 1. 依存関係をインストール - - ```shell git clone git@github.com:Megvii-BaseDetection/YOLOX.git cd YOLOX @@ -150,7 +148,6 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ 2. pth を ONNX に変換する - ```shell python3 tools/export_onnx.py \ --output-name YOUR_YOLOX.onnx \ @@ -162,7 +159,6 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ 1. 依存関係のインストール - ```shell git clone git@github.com:Megvii-BaseDetection/YOLOX.git cd YOLOX @@ -172,7 +168,6 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ 2. pth を ONNX に変換する - ```shell python3 tools/export_onnx.py \ --output-name YOUR_YOLOX.onnx \ @@ -183,7 +178,6 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ 3. YOLOX の最後に `EfficientNMS_TRT` を埋め込む - ```shell yolox_onnx_modifier YOUR_YOLOX.onnx -o YOUR_YOLOX_WITH_NMS.onnx ``` @@ -200,4 +194,3 @@ env準備プロセスの際に、サンプルラベルファイル(`label.txt` - - - - diff --git a/perception/autoware_tracking_object_merger/README.md b/perception/autoware_tracking_object_merger/README.md index 34f6cd4d07133..478e02cd37b76 100644 --- a/perception/autoware_tracking_object_merger/README.md +++ b/perception/autoware_tracking_object_merger/README.md @@ -46,11 +46,11 @@ トラックレットの入力センサー状態に応じて、異なるルールでトラックレット状態を更新します。 -| ステート/優先度 | 1番目 | 2番目 | 3番目 | -| -------------------------- | ------ | ----- | ------ | -| キネマティクス(速度以外) | LiDAR | レーダー | カメラ | -| 前方速度 | レーダー | LiDAR | カメラ | -| オブジェクト分類 | カメラ | LiDAR | レーダー | +| ステート/優先度 | 1番目 | 2番目 | 3番目 | +| -------------------------- | -------- | -------- | -------- | +| キネマティクス(速度以外) | LiDAR | レーダー | カメラ | +| 前方速度 | レーダー | LiDAR | カメラ | +| オブジェクト分類 | カメラ | LiDAR | レーダー | #### トラックレットマネジメント @@ -66,7 +66,6 @@ これらのパラメーターは`config/decorative_tracker_merger.param.yaml`で設定できます。 - ```yaml tracker_state_parameter: remove_probability_threshold: 0.3 @@ -80,23 +79,23 @@ tracker_state_parameter: #### 入力/パラメータ -| トピック名 | メッセージタイプ | 説明 | -| ------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------- | +| トピック名 | メッセージタイプ | 説明 | +| ------------------------------- | ------------------------------------------ | ---------------------------------------------------------------------- | | `~input/main_object` | `autoware_perception_msgs::TrackedObjects` | 主要な追跡対象。この主要な対象のスタンプで出力がパブリッシュされます。 | -| `~input/sub_object` | `autoware_perception_msgs::TrackedObjects` | サブ追跡対象。 | -| `output/object` | `autoware_perception_msgs::TrackedObjects` | マージされた追跡対象。 | -| `debug/interpolated_sub_object` | `autoware_perception_msgs::TrackedObjects` | 補間されたサブ追跡対象。 | +| `~input/sub_object` | `autoware_perception_msgs::TrackedObjects` | サブ追跡対象。 | +| `output/object` | `autoware_perception_msgs::TrackedObjects` | マージされた追跡対象。 | +| `debug/interpolated_sub_object` | `autoware_perception_msgs::TrackedObjects` | 補間されたサブ追跡対象。 | デフォルトパラメータは [config/decorative_tracker_merger.param.yaml](./config/decorative_tracker_merger.param.yaml) に設定されています。 -| パラメーター名 | 説明 | デフォルト値 | -| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -| `base_link_frame_id` | ベースリンクフレームID。追跡対象の変換に使用されます。 | "base_link" | -| `time_sync_threshold` | 時間同期しきい値。2つの追跡対象の差が小さければ、それらは同一対象とみなされます。 | 0.05 | -| `sub_object_timeout_sec` | サブオブジェクトタイムアウト。サブオブジェクトがこの時間更新されなければ、存在しないとみなされます。 | 0.5 | -| `main_sensor_type` | メインセンサータイプ。主な追跡対象を判別するために使用します。 | "lidar" | -| `sub_sensor_type` | サブセンサータイプ。サブ追跡対象を判別するために使用します。 | "radar" | -| `tracker_state_parameter` | トラッカー状態パラメーター。トラッキングに使用されます。 | | +| パラメーター名 | 説明 | デフォルト値 | +| ------------------------- | ---------------------------------------------------------------------------------------------------- | ------------ | +| `base_link_frame_id` | ベースリンクフレームID。追跡対象の変換に使用されます。 | "base_link" | +| `time_sync_threshold` | 時間同期しきい値。2つの追跡対象の差が小さければ、それらは同一対象とみなされます。 | 0.05 | +| `sub_object_timeout_sec` | サブオブジェクトタイムアウト。サブオブジェクトがこの時間更新されなければ、存在しないとみなされます。 | 0.5 | +| `main_sensor_type` | メインセンサータイプ。主な追跡対象を判別するために使用します。 | "lidar" | +| `sub_sensor_type` | サブセンサータイプ。サブ追跡対象を判別するために使用します。 | "radar" | +| `tracker_state_parameter` | トラッカー状態パラメーター。トラッキングに使用されます。 | | - `tracker_state_parameter` の詳細については、[Tracklet Management](#tracklet-management) で説明しています。 @@ -113,4 +112,3 @@ tracker_state_parameter: ### equivalent_tracker_merger これは今後の予定です。 - diff --git a/perception/autoware_traffic_light_arbiter/README.md b/perception/autoware_traffic_light_arbiter/README.md index 95257ff1727eb..35f05a731047f 100644 --- a/perception/autoware_traffic_light_arbiter/README.md +++ b/perception/autoware_traffic_light_arbiter/README.md @@ -13,27 +13,28 @@ `enable_signal_matching` が true に設定されている場合、このノードは認識信号と外部信号の一致を検証します。 以下の表は、認識信号(列)の特定の色が外部信号(行)の色と交差したときに、どのような色の組み合わせで一致のプロセスがアウトプットを決定するかを概説しています。各セルは、認識信号の特定の色(列)と外部信号の色(行)が交差したときの結果を表しています。 -| 外部知覚 | 赤信号 | 黄信号 | 緑信号 | 未知 | 受信なし | -|---|---|---|---|---|---| -| 赤信号 | 赤信号 | 未知 | 未知 | 未知 | 未知 | -| 黄信号 | 未知 | 黄信号 | 未知 | 未知 | 未知 | -| 緑信号 | 未知 | 未知 | 緑信号 | 未知 | 未知 | -| 未知 | 未知 | 未知 | 未知 | 未知 | 未知 | -| 受信なし | 未知 | 未知 | 未知 | 未知 | 未知 | +| 外部知覚 | 赤信号 | 黄信号 | 緑信号 | 未知 | 受信なし | +| -------- | ------ | ------ | ------ | ---- | -------- | +| 赤信号 | 赤信号 | 未知 | 未知 | 未知 | 未知 | +| 黄信号 | 未知 | 黄信号 | 未知 | 未知 | 未知 | +| 緑信号 | 未知 | 未知 | 緑信号 | 未知 | 未知 | +| 未知 | 未知 | 未知 | 未知 | 未知 | 未知 | +| 受信なし | 未知 | 未知 | 未知 | 未知 | 未知 | ### 入力/出力 #### 入力 -| 名称 | タイプ | 説明 | -| -------------------------------- | ------------------------- | -------------------------------------------------------------- | -| ~/sub/vector_map | autoware_map_msgs::msg::LaneletMapBin | 有効な信号 ID を取得するためのベクターマップ | -| ~/sub/perception_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 画像認識パイプラインからの信号 | -| ~/sub/external_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 外部システムからの信号 | +| 名称 | タイプ | 説明 | +| -------------------------------- | ----------------------------------------------------- | -------------------------------------------- | +| ~/sub/vector_map | autoware_map_msgs::msg::LaneletMapBin | 有効な信号 ID を取得するためのベクターマップ | +| ~/sub/perception_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 画像認識パイプラインからの信号 | +| ~/sub/external_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 外部システムからの信号 | #### 出力 autoware ナビゲーションモジュールは、以下を含む自動運転ソフトウェアの主要コンポーネントです。 + - Planning - Perception - Control @@ -43,6 +44,7 @@ autoware ナビゲーションモジュールは、以下を含む自動運転 #### Planningモジュール Planningモジュールは、車両の経路と速度計画を作成します。センサーデータ、地図データ、自車位置に基づいて、モジュールは以下を行います。 + - 衝突回避パス計画 - 交通規則遵守 - 速度制御 @@ -50,6 +52,7 @@ Planningモジュールは、車両の経路と速度計画を作成します。 #### Perceptionモジュール Perceptionモジュールは、周囲環境を解釈します。センサーデータを使用して、モジュールは以下を行います。 + - 物体検出と分類 - 路面状況認識 - 静止物と動的物体の識別 @@ -57,6 +60,7 @@ Perceptionモジュールは、周囲環境を解釈します。センサーデ #### Controlモジュール Controlモジュールは、Planningモジュールからのコマンドに基づいて、車両を操作します。モジュールは、以下の制御入力を生成します。 + - ステアリング制御 - 加速度/減速度制御 - 変速制御 @@ -64,23 +68,23 @@ Controlモジュールは、Planningモジュールからのコマンドに基 #### その他の重要なコンポーネント Planning、Perception、Controlモジュールの他に、autowareには以下のような重要なコンポーネントも含まれます。 + - **Decision Making**:車両の動作を決定する高レベルコントローラー - **Localization**:車両の位置を特定するシステム - **Sensor Fusion**:さまざまなセンサーからのデータを統合するモジュール - **Communication**:他の車両、インフラストラクチャ、交通機関の管理システムとのデータをやり取りするインターフェイス -| 名前 | タイプ | 説明 | -| --------------------- | ----------------------------------------------------- | --------------------------- | +| 名前 | タイプ | 説明 | +| --------------------- | ----------------------------------------------------- | ------------------------ | | ~/pub/traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 統合された信号機の状態。 | ## パラメータ ### コアパラメータ -| 名称 | 型 | デフォルト値 | 説明 | -| -------------------------- | ---------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------- | -| `external_time_tolerance` | double | 5.0 | 外部メッセージがマージに有効と見なされる秒数 | -| `perception_time_tolerance` | double | 1.0 | Perceptionメッセージがマージに有効と見なされる秒数 | -| `external_priority` | bool | false | 外部のシグナルがPerceptionベースのシグナルより優先されるかどうか。falseの場合、マージは基準として信頼性を使用する | -| `enable_signal_matching` | bool | false | Perceptionシグナルと外部シグナルの一致を検証するかどうか。trueに設定した場合、色が一致していることを確認し、一致する場合のみ公開する | - +| 名称 | 型 | デフォルト値 | 説明 | +| --------------------------- | ------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `external_time_tolerance` | double | 5.0 | 外部メッセージがマージに有効と見なされる秒数 | +| `perception_time_tolerance` | double | 1.0 | Perceptionメッセージがマージに有効と見なされる秒数 | +| `external_priority` | bool | false | 外部のシグナルがPerceptionベースのシグナルより優先されるかどうか。falseの場合、マージは基準として信頼性を使用する | +| `enable_signal_matching` | bool | false | Perceptionシグナルと外部シグナルの一致を検証するかどうか。trueに設定した場合、色が一致していることを確認し、一致する場合のみ公開する | diff --git a/perception/autoware_traffic_light_classifier/README.md b/perception/autoware_traffic_light_classifier/README.md index 1a2767cbb1067..f13bc7517580f 100644 --- a/perception/autoware_traffic_light_classifier/README.md +++ b/perception/autoware_traffic_light_classifier/README.md @@ -18,64 +18,64 @@ traffic_light_classifierは、交通信号機の周囲をトリミングした **モジュール** -* **Local Planning** - * 自車位置の追跡 - * 障害物検出 - * 経路生成 - * 'post resampling' 軌跡生成 -* **Behavior Planning** - * 経路追従制御 - * 速度計画 - * 車線維持 -* **Path Planning** - * ダイナミック経路生成 - * 障害物回避 +- **Local Planning** + - 自車位置の追跡 + - 障害物検出 + - 経路生成 + - 'post resampling' 軌跡生成 +- **Behavior Planning** + - 経路追従制御 + - 速度計画 + - 車線維持 +- **Path Planning** + - ダイナミック経路生成 + - 障害物回避 **センシングコンポーネント** -* **LiDAR** - * 3D نقطه群データの取得 - * 障害物検出 -* **カメラ** - * 視覚データの取得 - * レーンマーカー検出 - * 交通標識認識 -* **IMU (慣性計測装置)** - * 加速度や角速度の測定 - * 自車位置の推定 +- **LiDAR** + - 3D نقطه群データの取得 + - 障害物検出 +- **カメラ** + - 視覚データの取得 + - レーンマーカー検出 + - 交通標識認識 +- **IMU (慣性計測装置)** + - 加速度や角速度の測定 + - 自車位置の推定 **制御コンポーネント** -* **Longitudinal Controller** - * 車両速度の制御 - * 加速度逸脱量を最小化 -* **Lateral Controller** - * 車両ヨーの制御 - * 車線逸脱量を最小化 +- **Longitudinal Controller** + - 車両速度の制御 + - 加速度逸脱量を最小化 +- **Lateral Controller** + - 車両ヨーの制御 + - 車線逸脱量を最小化 **Autoware** Autoware は自動運転ソフトウェアのオープンソースプラットフォームです。主要なモジュールには以下が含まれます。 -* **Perception** - * センサーデータの処理と融合 - * 障害物認識と分類 -* **Fusion** - * ローカライゼーション、マッピング、トラッキング - * 環境の動的モデルの構築 -* **Control** - * 車両の制御とガイダンス - * PATH と BEHAVIOR Planner の実装 +- **Perception** + - センサーデータの処理と融合 + - 障害物認識と分類 +- **Fusion** + - ローカライゼーション、マッピング、トラッキング + - 環境の動的モデルの構築 +- **Control** + - 車両の制御とガイダンス + - PATH と BEHAVIOR Planner の実装 **評価方法** -* **シミュレーションパフォーマンス** - * レーン逸脱量、クラッシュ回避数 -* **実世界パフォーマンス** - * テスト走行における速度逸脱量、加減速逸脱量 -* **主要性能指標 (KPI)** - * 時間あたりの走行距離 - * 介入率 +- **シミュレーションパフォーマンス** + - レーン逸脱量、クラッシュ回避数 +- **実世界パフォーマンス** + - テスト走行における速度逸脱量、加減速逸脱量 +- **主要性能指標 (KPI)** + - 時間あたりの走行距離 + - 介入率 ### hsv_classifier @@ -96,9 +96,9 @@ Autoware は自動運転ソフトウェアのオープンソースプラット ### 入力 -| Name | Type | Description | -| --------------- | ------------------------------------------------------- | ---------------------- | -| `~/input/image` | `sensor_msgs::msg::Image` | 入力画像 | +| Name | Type | Description | +| --------------- | -------------------------------------------------- | ----------- | +| `~/input/image` | `sensor_msgs::msg::Image` | 入力画像 | | `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | 信号機のroi | ### 出力 @@ -108,8 +108,9 @@ Autoware は自動運転ソフトウェアのオープンソースプラット #### Planningのアルゴリズム Planningは、複数のPlanningモジュールで構成されています。 -* **TrajectoryGenerator** プランニング可能な軌道を生成します。 -* **Planner** 軌道の評価および最適化を実施します。 + +- **TrajectoryGenerator** プランニング可能な軌道を生成します。 +- **Planner** 軌道の評価および最適化を実施します。 #### モデル予測制御 (MPC) @@ -127,9 +128,9 @@ MPCのアルゴリズムは次の手順で行われます: Planningでは、MPCを使用して、以下のタスクを実行します: -* **経路追従:** 目標経路に沿った軌道を生成します。 -* **障害物回避:** 障害物を回避するための軌道を生成します。 -* **速度制御:** 目標速度を維持するための制御入力を計算します。 +- **経路追従:** 目標経路に沿った軌道を生成します。 +- **障害物回避:** 障害物を回避するための軌道を生成します。 +- **速度制御:** 目標速度を維持するための制御入力を計算します。 MPCのPlanningにおける主要な利点は、他の車両や障害物などの障害物を考慮して、将来のシステム挙動を予測できることです。これにより、Planningはリアルタイムで安全かつ効率的な軌道を作成できます。 @@ -137,42 +138,42 @@ MPCのPlanningにおける主要な利点は、他の車両や障害物などの MPCのAutowareにおける実装では、以下を使用しています: -* **コスト関数:** 位置逸脱量、速度逸脱量、加速度逸脱量の最小化 -* **最適化器:** 'post resampling`を備えたquadprog -* **制御入力:** ステアリング角、加速度 +- **コスト関数:** 位置逸脱量、速度逸脱量、加速度逸脱量の最小化 +- **最適化器:** 'post resampling`を備えたquadprog +- **制御入力:** ステアリング角、加速度 #### 参考資料 -* [Autoware Foundation Planning](https://github.com/autowarefoundation/autoware.auto/tree/master/ros/autoware/core/planning_with_mpc) -* [Model Predictive Control Theory and Design](https://link.springer.com/book/10.1007/978-0-89838-330-2) +- [Autoware Foundation Planning](https://github.com/autowarefoundation/autoware.auto/tree/master/ros/autoware/core/planning_with_mpc) +- [Model Predictive Control Theory and Design](https://link.springer.com/book/10.1007/978-0-89838-330-2) -| 名前 | 種類 | 説明 | -|---|---|---| -| `~/output/traffic_signals` | `tier4_perception_msgs::msg::TrafficLightArray` | 分類済み信号 | -| `~/output/debug/image` | `sensor_msgs::msg::Image` | デバッグ用画像 | +| 名前 | 種類 | 説明 | +| -------------------------- | ----------------------------------------------- | -------------- | +| `~/output/traffic_signals` | `tier4_perception_msgs::msg::TrafficLightArray` | 分類済み信号 | +| `~/output/debug/image` | `sensor_msgs::msg::Image` | デバッグ用画像 | ## パラメータ ### ノードパラメータ -| 名前 | タイプ | 説明 | -|---|---|---| -| `classifier_type` | int | 値が `1` の場合、cnn_classifier が使用されます。 | -| `data_path` | str | packages データおよびアーティファクトのディレクトリパス | -| `backlight_threshold` | float | 強度がこの値を超えた場合、対応する RoI で UNKNOWN で上書きします。この値がはるかに大きい場合、ノードは過酷な逆光状況でのみ上書きするということに注意してください。したがって、この機能を使用しない場合は、この値を `1.0` に設定してください。この値は `[0.0, 1.0]` にできます。上書きされた信号の信頼性は `0.0` に設定されます。 | +| 名前 | タイプ | 説明 | +| --------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `classifier_type` | int | 値が `1` の場合、cnn_classifier が使用されます。 | +| `data_path` | str | packages データおよびアーティファクトのディレクトリパス | +| `backlight_threshold` | float | 強度がこの値を超えた場合、対応する RoI で UNKNOWN で上書きします。この値がはるかに大きい場合、ノードは過酷な逆光状況でのみ上書きするということに注意してください。したがって、この機能を使用しない場合は、この値を `1.0` に設定してください。この値は `[0.0, 1.0]` にできます。上書きされた信号の信頼性は `0.0` に設定されます。 | ### コアパラメータ #### cnn_classifier -| 名称 | タイプ | 説明 | -| ----------------------- | --------------- | ------------------------------------ | -| `classifier_label_path` | str | モデルファイルのパス | -| `classifier_model_path` | str | ラベルファイルのパス | +| 名称 | タイプ | 説明 | +| ----------------------- | --------------- | -------------------------------- | +| `classifier_label_path` | str | モデルファイルのパス | +| `classifier_model_path` | str | ラベルファイルのパス | | `classifier_precision` | str | TensorRT精度、`fp16`または`int8` | -| `classifier_mean` | vector\ | 3チャネル入力画像の平均 | -| `classifier_std` | vector\ | 3チャネル入力画像の標準偏差 | -| `apply_softmax` | bool | ソフトマックスを適用するかどうか | +| `classifier_mean` | vector\ | 3チャネル入力画像の平均 | +| `classifier_std` | vector\ | 3チャネル入力画像の標準偏差 | +| `apply_softmax` | bool | ソフトマックスを適用するかどうか | #### hsv_classifier @@ -184,20 +185,20 @@ MPCのAutowareにおける実装では、以下を使用しています: **入力:** -* `PointCloud`: 障害物のPointCloudデータ -* `CameraInfo`: カメラの内部および外部パラメータ +- `PointCloud`: 障害物のPointCloudデータ +- `CameraInfo`: カメラの内部および外部パラメータ **出力:** -* `ClassifiedPointCloud`: HSV色相に基づいて分類された障害物のPointCloudデータ +- `ClassifiedPointCloud`: HSV色相に基づいて分類された障害物のPointCloudデータ ### パラメータ -| パラメータ | 説明 | デフォルト値 | -|---|---|---| -| `hue_threshold`: HSV色相の閾値 (度) | 30 | -| `saturation_threshold`: HSV彩度の閾値 | 0.1 | -| `value_threshold`: HSV明度の閾値 | 0.1 | +| パラメータ | 説明 | デフォルト値 | +| ------------------------------------------------------------------- | ---- | ------------ | +| `hue_threshold`: HSV色相の閾値 (度) | 30 | +| `saturation_threshold`: HSV彩度の閾値 | 0.1 | +| `value_threshold`: HSV明度の閾値 | 0.1 | | `post resampling`: ポストリサンプリングフィルターを使用するかどうか | True | ### アルゴリズム @@ -206,30 +207,30 @@ MPCのAutowareにおける実装では、以下を使用しています: ### 注意事項 -* この分類器は単一のカメラからのデータだけを使用することに注意してください。より堅牢な障害物検出を行うには、複数のカメラからのデータを使用する必要があります。 -* パラメータは特定のシーンやライティング条件に応じて調整する必要があります。 -* この分類器は、距離情報を使用しません。そのため、障害物が自車位置に近いか遠いかを区別できません。 - -| 名 | 型 | 説明 | -|---|---|---| -| `green_min_h` | int | 緑色の最小色相 | -| `green_min_s` | int | 緑色の最小彩度 | -| `green_min_v` | int | 緑色の最小明度 | -| `green_max_h` | int | 緑色の最大色相 | -| `green_max_s` | int | 緑色の最大彩度 | -| `green_max_v` | int | 緑色の最大明度 | +- この分類器は単一のカメラからのデータだけを使用することに注意してください。より堅牢な障害物検出を行うには、複数のカメラからのデータを使用する必要があります。 +- パラメータは特定のシーンやライティング条件に応じて調整する必要があります。 +- この分類器は、距離情報を使用しません。そのため、障害物が自車位置に近いか遠いかを区別できません。 + +| 名 | 型 | 説明 | +| -------------- | --- | -------------- | +| `green_min_h` | int | 緑色の最小色相 | +| `green_min_s` | int | 緑色の最小彩度 | +| `green_min_v` | int | 緑色の最小明度 | +| `green_max_h` | int | 緑色の最大色相 | +| `green_max_s` | int | 緑色の最大彩度 | +| `green_max_v` | int | 緑色の最大明度 | | `yellow_min_h` | int | 黄色の最小色相 | | `yellow_min_s` | int | 黄色の最小彩度 | | `yellow_min_v` | int | 黄色の最小明度 | | `yellow_max_h` | int | 黄色の最大色相 | | `yellow_max_s` | int | 黄色の最大彩度 | | `yellow_max_v` | int | 黄色の最大明度 | -| `red_min_h` | int | 赤色の最小色相 | -| `red_min_s` | int | 赤色の最小彩度 | -| `red_min_v` | int | 赤色の最小明度 | -| `red_max_h` | int | 赤色の最大色相 | -| `red_max_s` | int | 赤色の最大彩度 | -| `red_max_v` | int | 赤色の最大明度 | +| `red_min_h` | int | 赤色の最小色相 | +| `red_min_s` | int | 赤色の最小彩度 | +| `red_min_v` | int | 赤色の最小明度 | +| `red_max_h` | int | 赤色の最大色相 | +| `red_max_s` | int | 赤色の最大彩度 | +| `red_max_v` | int | 赤色の最大明度 | ## 交通信号機分類器モデルのトレーニング @@ -247,7 +248,6 @@ Autoware は交通信号機の分類のためのトレーニング手順を示 交通信号機分類器をトレーニングするには、各サブフォルダーが異なるクラスを表す、構造化されたサブフォルダー形式を採用します。以下に示すのは、データセット構造の例です。 - ```python DATASET_ROOT ├── TRAIN @@ -287,7 +287,6 @@ DATASET_ROOT **ステップ 2.** conda仮想環境を作成してアクティベートします - ```bash conda create --name tl-classifier python=3.8 -y conda activate tl-classifier @@ -297,7 +296,6 @@ conda activate tl-classifier CUDA 11.6と互換性のあるPyTorchをインストールしてください。これは、現在のAutowareの要件です。 - ```bash conda install pytorch==1.13.1 torchvision==0.14.1 pytorch-cuda=11.6 -c pytorch -c nvidia ``` @@ -306,7 +304,6 @@ conda install pytorch==1.13.1 torchvision==0.14.1 pytorch-cuda=11.6 -c pytorch - **手順 1.** mmpretrain をソースからインストール - ```bash cd ~/ git clone https://github.com/open-mmlab/mmpretrain.git @@ -325,14 +322,12 @@ MMPretrainは構成ファイルによって制御されるトレーニングス `configs`フォルダ内で使用するモデルの構成ファイルを作成します。 - ```bash touch ~/mmpretrain/configs/mobilenet_v2/mobilenet-v2_8xb32_custom.py ``` 好みのテキストエディターでコンフィグレーションファイルを開き、提供されたコンテンツのコピーを作成してください。データセットのパスに合わせて **data_root** 変数を調整します。モデル、データセット、スケジューラーのコンフィグレーションパラメーターは、好みに合わせてカスタマイズできます。 - ```python # Inherit model, schedule and default_runtime from base model _base_ = [ @@ -422,7 +417,6 @@ test_evaluator = val_evaluator #### トレーニングの開始 - ```bash cd ~/mmpretrain python tools/train.py configs/mobilenet_v2/mobilenet-v2_8xb32_custom.py @@ -437,7 +431,6 @@ python tools/train.py configs/mobilenet_v2/mobilenet-v2_8xb32_custom.py 「mmdeploy」ツールセットは、トレーニングされたモデルをさまざまなターゲットデバイスにデプロイするように設計されています。 その機能により、PyTorchモデルをONNX形式にシームレスに変換できます。 - ```bash # Activate your conda environment conda activate tl-classifier @@ -461,7 +454,6 @@ git clone -b main https://github.com/open-mmlab/mmdeploy.git #### PyTorchモデルをONNXモデルに変換する - ```bash cd ~/mmdeploy @@ -530,4 +522,3 @@ ONNXモデルを入手したら、起動ファイルで定義されているパ 現在、このパッケージはチャタリング障害物を適切に処理できません。知覚レイヤーに確率フィルタを追加して改善する予定です。 また、グローバルにすべきパラメータがいくつかあります(例:車両サイズ、最大ステアリングなど)。これらはリファクタリングされてグローバルパラメータとして定義されるため、異なるノード間で同じパラメータを共有できます。 --> - diff --git a/perception/autoware_traffic_light_fine_detector/README.md b/perception/autoware_traffic_light_fine_detector/README.md index 50c51c9d3c7d6..ea1a20ade4cd1 100644 --- a/perception/autoware_traffic_light_fine_detector/README.md +++ b/perception/autoware_traffic_light_fine_detector/README.md @@ -26,11 +26,11 @@ YoloX-sを利用した交通信号灯検出用パッケージです。 ### 入力 -| 名前 | 型 | 説明 | -| ----------- | ------------------------------------------------- | --------------------------------------------------------------- | -| `~/input/image` | `sensor_msgs/Image` | フルサイズカメラ画像 | -| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | map_based_detectorで検出されたROIの配列 | -| `~/expect/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | オフセットのないmap_based_detectorで検出されたROIの配列 | +| 名前 | 型 | 説明 | +| --------------- | -------------------------------------------------- | ------------------------------------------------------- | +| `~/input/image` | `sensor_msgs/Image` | フルサイズカメラ画像 | +| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | map_based_detectorで検出されたROIの配列 | +| `~/expect/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | オフセットのないmap_based_detectorで検出されたROIの配列 | ### 出力 @@ -55,36 +55,36 @@ Planningコンポーネントは、次のステップに従って動作します Planningコンポーネントには、次の機能があります。 -* 障害物回避のためのリアルタイムパス計画 -* 交通規則の遵守 -* 速度と加速度の最適化 -* 複数のパスオプションの生成 -* 高速道路と都市部の両方での動作 +- 障害物回避のためのリアルタイムパス計画 +- 交通規則の遵守 +- 速度と加速度の最適化 +- 複数のパスオプションの生成 +- 高速道路と都市部の両方での動作 -| 名 | 型 | 説明 | -| --------------------- | --------------------------------------------------- | ---------------------------- | -| `~/output/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | 検出された正確な枠 | -| `~/debug/exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | 推論にかかった時間 | +| 名 | 型 | 説明 | +| --------------------- | -------------------------------------------------- | ------------------ | +| `~/output/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | 検出された正確な枠 | +| `~/debug/exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | 推論にかかった時間 | ## パラメータ ### コアパラメータ -| 名称 | 種類 | デフォルト値 | 説明 | -| --------------------------- | ------ | ------------ | ---------------------------------------------------------------- | -| `fine_detector_score_thresh` | double | 0.3 | オブジェクトスコアがこの値未満の場合、オブジェクトは無視されます | -| `fine_detector_nms_thresh` | double | 0.65 | Non-Maximum Suppressionを実行するためのIoU閾値 | +| 名称 | 種類 | デフォルト値 | 説明 | +| ---------------------------- | ------ | ------------ | ---------------------------------------------------------------- | +| `fine_detector_score_thresh` | double | 0.3 | オブジェクトスコアがこの値未満の場合、オブジェクトは無視されます | +| `fine_detector_nms_thresh` | double | 0.65 | Non-Maximum Suppressionを実行するためのIoU閾値 | ### ノードパラメータ -| 名前 | 型 | 初期値 | 説明 | -| -------------------------- | ------- | ----------------------------- | ---------------------------------------------------------------- | -| `data_path` | 文字列 | "$(env HOME)/autoware_data" | パッケージのデータとアーティファクトのディレクトリパス | -| `fine_detector_model_path` | 文字列 | "" | Yoloモデルのonnxファイル名 | -| `fine_detector_label_path` | 文字列 | "" | 検出されたオブジェクトのラベル名を記載したラベルファイル | -| `fine_detector_precision` | 文字列 | "fp32" | 推論モード: "fp32", "fp16" | -| `approximate_sync` | ブール | false | 近似同期ポリシーを使用するかどうかを指定するフラグ | -| `gpu_id` | 整数 | 0 | CUDA GPUデバイスを選択するためのID | +| 名前 | 型 | 初期値 | 説明 | +| -------------------------- | ------ | --------------------------- | -------------------------------------------------------- | +| `data_path` | 文字列 | "$(env HOME)/autoware_data" | パッケージのデータとアーティファクトのディレクトリパス | +| `fine_detector_model_path` | 文字列 | "" | Yoloモデルのonnxファイル名 | +| `fine_detector_label_path` | 文字列 | "" | 検出されたオブジェクトのラベル名を記載したラベルファイル | +| `fine_detector_precision` | 文字列 | "fp32" | 推論モード: "fp32", "fp16" | +| `approximate_sync` | ブール | false | 近似同期ポリシーを使用するかどうかを指定するフラグ | +| `gpu_id` | 整数 | 0 | CUDA GPUデバイスを選択するためのID | ## 仮定 / 既知の制限 @@ -92,5 +92,4 @@ Planningコンポーネントには、次の機能があります。 YOLOX GitHub リポジトリ -- https://github.com/Megvii-BaseDetection/YOLOX - +- diff --git a/perception/autoware_traffic_light_map_based_detector/README.md b/perception/autoware_traffic_light_map_based_detector/README.md index 6881f5f04e168..af0483d71e961 100644 --- a/perception/autoware_traffic_light_map_based_detector/README.md +++ b/perception/autoware_traffic_light_map_based_detector/README.md @@ -13,31 +13,30 @@ ## 入力トピック -| 名称 | タイプ | 説明 | -| ---------------------| -------------------------------------- | -------------------------- | -| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクタマップ | -| `~input/camera_info` | sensor_msgs::CameraInfo | ターゲットカメラパラメータ | -| `~input/route` | autoware_planning_msgs::LaneletRoute | オプション: ルート | +| 名称 | タイプ | 説明 | +| -------------------- | ------------------------------------- | -------------------------- | +| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクタマップ | +| `~input/camera_info` | sensor_msgs::CameraInfo | ターゲットカメラパラメータ | +| `~input/route` | autoware_planning_msgs::LaneletRoute | オプション: ルート | ## 出力トピック -| 名前 | 型 | 説明 | -| ---------------- | ------------------------------------------- | -------------------------------------------------------------------- | -| `~output/rois` | tier4_perception_msgs::TrafficLightRoiArray | カメラ情報に対応する画像中の信号機の位置 | -| `~expect/rois` | tier4_perception_msgs::TrafficLightRoiArray | オフセットなしで画像内の信号機の位置 | -| `~debug/markers` | visualization_msgs::MarkerArray | デバッグ用の可視化 | +| 名前 | 型 | 説明 | +| ---------------- | ------------------------------------------- | ---------------------------------------- | +| `~output/rois` | tier4_perception_msgs::TrafficLightRoiArray | カメラ情報に対応する画像中の信号機の位置 | +| `~expect/rois` | tier4_perception_msgs::TrafficLightRoiArray | オフセットなしで画像内の信号機の位置 | +| `~debug/markers` | visualization_msgs::MarkerArray | デバッグ用の可視化 | ## ノードパラメータ -| パラメータ | 型 | 説明 | -| ---------------------- | ------ | ------------------------------------------------------------------------------------------------------------- | -| `max_vibration_pitch` | double | ピッチ方向の最大誤差。-5~+5の場合、10になります。 | -| `max_vibration_yaw` | double | ヨー方向の最大誤差。-5~+5の場合、10になります。 | -| `max_vibration_height` | double | 高さ方向の最大誤差。-5~+5の場合、10になります。 | -| `max_vibration_width` | double | 幅方向の最大誤差。-5~+5の場合、10になります。 | -| `max_vibration_depth` | double | 奥行き方向の最大誤差。-5~+5の場合、10になります。 | -| `max_detection_range` | double | メートル単位の最大検出範囲。正数でなければなりません | -| `min_timestamp_offset` | double | 対応するtfを検索するときの最小タイムスタンプオフセット | -| `max_timestamp_offset` | double | 対応するtfを検索するときの最大タイムスタンプオフセット | -| `timestamp_sample_len` | double | `min_timestamp_offset`と`max_timestamp_offset`の間の`'post resampling'`のサンプル長 | - +| パラメータ | 型 | 説明 | +| ---------------------- | ------ | ----------------------------------------------------------------------------------- | +| `max_vibration_pitch` | double | ピッチ方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_yaw` | double | ヨー方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_height` | double | 高さ方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_width` | double | 幅方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_depth` | double | 奥行き方向の最大誤差。-5~+5の場合、10になります。 | +| `max_detection_range` | double | メートル単位の最大検出範囲。正数でなければなりません | +| `min_timestamp_offset` | double | 対応するtfを検索するときの最小タイムスタンプオフセット | +| `max_timestamp_offset` | double | 対応するtfを検索するときの最大タイムスタンプオフセット | +| `timestamp_sample_len` | double | `min_timestamp_offset`と`max_timestamp_offset`の間の`'post resampling'`のサンプル長 | diff --git a/perception/autoware_traffic_light_multi_camera_fusion/README.md b/perception/autoware_traffic_light_multi_camera_fusion/README.md index 9e610e96ff746..e74f933006a96 100644 --- a/perception/autoware_traffic_light_multi_camera_fusion/README.md +++ b/perception/autoware_traffic_light_multi_camera_fusion/README.md @@ -11,220 +11,257 @@ 各カメラについて、以下の 3 つのトピックがサブスクライブされます: -| 名称 | 種類 | 説明 | -| -------------------------------------- | ---------------------------------------------- | ---------------------------------------------------- | +| 名称 | 種類 | 説明 | +| -------------------------------------- | ------------------------------------------------ | -------------------------------------------------- | | `~//camera_info` | `sensor_msgs::CameraInfo` | `traffic_light_map_based_detector`からのカメラ情報 | -| `~//rois` | `tier4_perception_msgs::TrafficLightRoiArray` | `traffic_light_fine_detector`からの検出ROI | -| `~//traffic_signals` | `tier4_perception_msgs::TrafficLightSignalArray` | `traffic_light_classifier`からの分類結果 | +| `~//rois` | `tier4_perception_msgs::TrafficLightRoiArray` | `traffic_light_fine_detector`からの検出ROI | +| `~//traffic_signals` | `tier4_perception_msgs::TrafficLightSignalArray` | `traffic_light_classifier`からの分類結果 | これらのトピックを手動で設定する必要はありません。`camera_namespaces` パラメータを提供するだけで、ノードは `` を自動的に抽出し、サブスクライバーを作成します。 ## 出力トピック -| 名 | タイプ | 説明 | -| --------------------------- | ------------------------------------------------------ | ------------------------------------- | -| `~/output/traffic_signals` | autoware_perception_msgs::TrafficLightSignalArray | 交通信号の融合結果 | +| 名 | タイプ | 説明 | +| -------------------------- | ------------------------------------------------- | ------------------ | +| `~/output/traffic_signals` | autoware_perception_msgs::TrafficLightSignalArray | 交通信号の融合結果 | ## ノードパラメータ --- ### Dynamic obstacles trajectory predictor (Dynamic tracker) - - Name: `~dynamic_tracker/tracking_time_window` - - Type: Float - - Default value: 4.0 - - Description: オブスタクルを追跡するための時間窓 (秒) - - - Name: `~dynamic_tracker/min_time_gap` - - Type: Float - - Default value: 1.0 - - Description: Dynamic Planning によって生成される経路上で、オブジェクトが追跡されるために必要な最小のタイムギャップ (秒) - - - Name: `~dynamic_tracker/max_time_gap` - - Type: Float - - Default value: 2.0 - - Description: Dynamic Planning によって生成される経路上で、オブジェクトが追跡されるために必要な最大タイムギャップ (秒) - - - Name: `~dynamic_tracker/acceleration_v2` - - Type: Float - - Default value: 2.0 - - Description: オブジェクトの加速度の最大値 (m/s^2) - - - Name: `~dynamic_tracker/longitudinal_jerk_v2` - - Type: Float - - Default value: 4.0 - - Description: オブジェクトの縦方向ジャークの最大値 (m/s^3) - - - Name: `~dynamic_tracker/lateral_jerk_v2` - - Type: Float - - Default value: 8.0 - - Description: オブジェクトの横方向ジャークの最大値 (m/s^3) - - - Name: `~dynamic_tracker/use_v_and_a` - - Type: Bool - - Default value: False - - Description: 速度と加速度を予測に使用するかどうか - - - Name: `~dynamic_tracker/consider_turning_radius` - - Type: Bool - - Default value: True - - Description: 予測の際、オブジェクトの旋回半径を考慮するかどうか - - - Name: `~dynamic_tracker/max_obstacle_age` - - Type: Float - - Default value: 1.0 - - Description: オブジェクトが追跡されるために必要な最大年齢 (秒) - - - Name: `~dynamic_tracker/pcd_post_resampling` - - Type: Bool - - Default value: False - - Description: `post resampling`後に点群を使用するかどうか - - - Name: `~dynamic_tracker/estimate_past_pose` - - Type: Bool - - Default value: True - - Description: オブジェクトの過去の位置を推定するかどうか - - - Name: `~dynamic_tracker/acceleration_lin_deceleration_v2` - - Type: Float - - Default value: 2.0 - - Description: オブジェクトの直線減速度の最大値 (m/s^2) + +- Name: `~dynamic_tracker/tracking_time_window` + + - Type: Float + - Default value: 4.0 + - Description: オブスタクルを追跡するための時間窓 (秒) + +- Name: `~dynamic_tracker/min_time_gap` + + - Type: Float + - Default value: 1.0 + - Description: Dynamic Planning によって生成される経路上で、オブジェクトが追跡されるために必要な最小のタイムギャップ (秒) + +- Name: `~dynamic_tracker/max_time_gap` + + - Type: Float + - Default value: 2.0 + - Description: Dynamic Planning によって生成される経路上で、オブジェクトが追跡されるために必要な最大タイムギャップ (秒) + +- Name: `~dynamic_tracker/acceleration_v2` + + - Type: Float + - Default value: 2.0 + - Description: オブジェクトの加速度の最大値 (m/s^2) + +- Name: `~dynamic_tracker/longitudinal_jerk_v2` + + - Type: Float + - Default value: 4.0 + - Description: オブジェクトの縦方向ジャークの最大値 (m/s^3) + +- Name: `~dynamic_tracker/lateral_jerk_v2` + + - Type: Float + - Default value: 8.0 + - Description: オブジェクトの横方向ジャークの最大値 (m/s^3) + +- Name: `~dynamic_tracker/use_v_and_a` + + - Type: Bool + - Default value: False + - Description: 速度と加速度を予測に使用するかどうか + +- Name: `~dynamic_tracker/consider_turning_radius` + + - Type: Bool + - Default value: True + - Description: 予測の際、オブジェクトの旋回半径を考慮するかどうか + +- Name: `~dynamic_tracker/max_obstacle_age` + + - Type: Float + - Default value: 1.0 + - Description: オブジェクトが追跡されるために必要な最大年齢 (秒) + +- Name: `~dynamic_tracker/pcd_post_resampling` + + - Type: Bool + - Default value: False + - Description: `post resampling`後に点群を使用するかどうか + +- Name: `~dynamic_tracker/estimate_past_pose` + + - Type: Bool + - Default value: True + - Description: オブジェクトの過去の位置を推定するかどうか + +- Name: `~dynamic_tracker/acceleration_lin_deceleration_v2` + - Type: Float + - Default value: 2.0 + - Description: オブジェクトの直線減速度の最大値 (m/s^2) ### Obstacle slice planner - - Name: `~obstacle_slice_planner/enable_rollout_detection` - - Type: Bool - - Default value: True - - Description: ロールアウト検出を有効にするかどうか - - - Name: `~obstacle_slice_planner/rollout_detection_min_lane_idx` - - Type: Int - - Default value: 1 - - Description: レーンインデックスの最小値。これ未満のレーンのオブジェクトはロールアウト検出の対象外 - - - Name: `~obstacle_slice_planner/rollout_detection_max_lane_idx` - - Type: Int - - Default value: 2 - - Description: レーンインデックスの最大値。これ以上のレーンのオブジェクトはロールアウト検出の対象外 - - - Name: `~obstacle_slice_planner/rollout_detection_min_ego_v` - - Type: Float - - Default value: 0.1 - - Description: ロールアウト検出に使用する、自車速度の最小値 (m/s) - - - Name: `~obstacle_slice_planner/rollout_detection_min_v_diff` - - Type: Float - - Default value: 0.5 - - Description: ロールアウト検出に使用する、自車と対象オブジェクトの速度差の最小値 (m/s) - - - Name: `~obstacle_slice_planner/rollout_detection_horizontal_distance` - - Type: Float - - Default value: 15.0 - - Description: ロールアウト検出に使用する、自車と対象オブジェクトの水平距離の最大値 (m) - - - Name: `~obstacle_slice_planner/rollout_detection_time_offset` - - Type: Float - - Default value: 3.0 - - Description: ロールアウト検出に使用する、タイムオフセットの最大値 (秒) - - - Name: `~obstacle_slice_planner/rollout_detection_speed_limit` - - Type: Float - - Default value: 20.0 - - Description: ロールアウト検出に使用する、道路の速度制限 (m/s) - - - Name: `~obstacle_slice_planner/rollout_detection_lateral_interval` - - Type: Float - - Default value: 2.0 - - Description: ロールアウト検出に使用する、横方向のインターバル (m) - - - Name: `~obstacle_slice_planner/rollout_detection_grid_resolution` - - Type: Float - - Default value: 1.0 - - Description: ロールアウト検出に使用する、グリッド解像度 (m) - - - Name: `~obstacle_slice_planner/rollout_detection_overlap_threshold` - - Type: Float - - Default value: 0.5 - - Description: ロールアウト検出に使用する、オブジェクトの重なり量のしきい値 - - - Name: `~obstacle_slice_planner/rollout_detection_angle_diff_threshold` - - Type: Float - - Default value: 20.0 - - Description: ロールアウト検出に使用する、オブジェクトの方向角差のしきい値 (deg) - - - Name: `~obstacle_slice_planner/candidate_index_list` - - Type: IntList - - Default value: [] - - Description: 候補となるスライスインデックスのリスト - - - Name: `~obstacle_slice_planner/candidate_pose_list` - - Type: PoseArray - - Default value: [] - - Description: 候補となる自車位置のリスト + +- Name: `~obstacle_slice_planner/enable_rollout_detection` + + - Type: Bool + - Default value: True + - Description: ロールアウト検出を有効にするかどうか + +- Name: `~obstacle_slice_planner/rollout_detection_min_lane_idx` + + - Type: Int + - Default value: 1 + - Description: レーンインデックスの最小値。これ未満のレーンのオブジェクトはロールアウト検出の対象外 + +- Name: `~obstacle_slice_planner/rollout_detection_max_lane_idx` + + - Type: Int + - Default value: 2 + - Description: レーンインデックスの最大値。これ以上のレーンのオブジェクトはロールアウト検出の対象外 + +- Name: `~obstacle_slice_planner/rollout_detection_min_ego_v` + + - Type: Float + - Default value: 0.1 + - Description: ロールアウト検出に使用する、自車速度の最小値 (m/s) + +- Name: `~obstacle_slice_planner/rollout_detection_min_v_diff` + + - Type: Float + - Default value: 0.5 + - Description: ロールアウト検出に使用する、自車と対象オブジェクトの速度差の最小値 (m/s) + +- Name: `~obstacle_slice_planner/rollout_detection_horizontal_distance` + + - Type: Float + - Default value: 15.0 + - Description: ロールアウト検出に使用する、自車と対象オブジェクトの水平距離の最大値 (m) + +- Name: `~obstacle_slice_planner/rollout_detection_time_offset` + + - Type: Float + - Default value: 3.0 + - Description: ロールアウト検出に使用する、タイムオフセットの最大値 (秒) + +- Name: `~obstacle_slice_planner/rollout_detection_speed_limit` + + - Type: Float + - Default value: 20.0 + - Description: ロールアウト検出に使用する、道路の速度制限 (m/s) + +- Name: `~obstacle_slice_planner/rollout_detection_lateral_interval` + + - Type: Float + - Default value: 2.0 + - Description: ロールアウト検出に使用する、横方向のインターバル (m) + +- Name: `~obstacle_slice_planner/rollout_detection_grid_resolution` + + - Type: Float + - Default value: 1.0 + - Description: ロールアウト検出に使用する、グリッド解像度 (m) + +- Name: `~obstacle_slice_planner/rollout_detection_overlap_threshold` + + - Type: Float + - Default value: 0.5 + - Description: ロールアウト検出に使用する、オブジェクトの重なり量のしきい値 + +- Name: `~obstacle_slice_planner/rollout_detection_angle_diff_threshold` + + - Type: Float + - Default value: 20.0 + - Description: ロールアウト検出に使用する、オブジェクトの方向角差のしきい値 (deg) + +- Name: `~obstacle_slice_planner/candidate_index_list` + + - Type: IntList + - Default value: [] + - Description: 候補となるスライスインデックスのリスト + +- Name: `~obstacle_slice_planner/candidate_pose_list` + - Type: PoseArray + - Default value: [] + - Description: 候補となる自車位置のリスト ### Motion planner - - Name: `~motion_planner/sample_interval` - - Type: Float - - Default value: 0.5 - - Description: サンプリングの間隔 (秒) - - - Name: `~motion_planner/max_sample_number` - - Type: Int - - Default value: 1000 - - Description: 最大サンプリング数 - - - Name: `~motion_planner/max_calc_time` - - Type: Float - - Default value: 0.1 - - Description: Motion Planning の最大計算時間 (秒) - - - Name: `~motion_planner/speed_limit` - - Type: Float - - Default value: 20.0 - - Description: 経路生成時の速度制限 (m/s) - - - Name: `~motion_planner/max_acceleration` - - Type: Float - - Default value: 2.0 - - Description: 経路生成時の最大加速度 (m/s^2) - - - Name: `~motion_planner/max_lateral_jerk` - - Type: Float - - Default value: 4.0 - - Description: 経路生成時の最大横方向ジャーク (m/s^3) - - - Name: `~motion_planner/max_lateral_acceleration` - - Type: Float - - Default value: 2.0 - - Description: 経路生成時の最大横方向加速度 (m/s^2) - - - Name: `~motion_planner/target_speed` - - Type: Float - - Default value: 10.0 - - Description: Motion Planning のターゲット速度 (m/s) - - - Name: `~motion_planner/min_speed` - - Type: Float - - Default value: 2.0 - - Description: Motion Planning の最小速度 (m/s) - - - Name: `~motion_planner/enable_smoothed_path` - - Type: Bool - - Default value: True - - Description: Smooth Path Planning を有効にするかどうか - - - Name: `~motion_planner/smoothed_path_epsilon` - - Type: Float - - Default value: 0.1 - - Description: Smooth Path Planning のイプシロン値 - - - Name: `~motion_planner/curvature_threshold` - - Type: Float - - Default value - -| パラメータ | 型 | 説明 | -| --------------------------- | ------------- | -------------------------------------------- | -| `camera_namespaces` | vector | 融合されるカメラのネームスペース | -| `message_lifespan` | double | 融合されるタイムスタンプの最大スパン | -| `approximate_sync` | bool | 近似同期モードで動作するかどうか | -| `perform_group_fusion` | bool | グループ融合を実行するかどうか | +- Name: `~motion_planner/sample_interval` + + - Type: Float + - Default value: 0.5 + - Description: サンプリングの間隔 (秒) + +- Name: `~motion_planner/max_sample_number` + + - Type: Int + - Default value: 1000 + - Description: 最大サンプリング数 + +- Name: `~motion_planner/max_calc_time` + + - Type: Float + - Default value: 0.1 + - Description: Motion Planning の最大計算時間 (秒) + +- Name: `~motion_planner/speed_limit` + + - Type: Float + - Default value: 20.0 + - Description: 経路生成時の速度制限 (m/s) + +- Name: `~motion_planner/max_acceleration` + + - Type: Float + - Default value: 2.0 + - Description: 経路生成時の最大加速度 (m/s^2) + +- Name: `~motion_planner/max_lateral_jerk` + + - Type: Float + - Default value: 4.0 + - Description: 経路生成時の最大横方向ジャーク (m/s^3) + +- Name: `~motion_planner/max_lateral_acceleration` + + - Type: Float + - Default value: 2.0 + - Description: 経路生成時の最大横方向加速度 (m/s^2) + +- Name: `~motion_planner/target_speed` + + - Type: Float + - Default value: 10.0 + - Description: Motion Planning のターゲット速度 (m/s) + +- Name: `~motion_planner/min_speed` + + - Type: Float + - Default value: 2.0 + - Description: Motion Planning の最小速度 (m/s) + +- Name: `~motion_planner/enable_smoothed_path` + + - Type: Bool + - Default value: True + - Description: Smooth Path Planning を有効にするかどうか + +- Name: `~motion_planner/smoothed_path_epsilon` + + - Type: Float + - Default value: 0.1 + - Description: Smooth Path Planning のイプシロン値 + +- Name: `~motion_planner/curvature_threshold` + - Type: Float + - Default value + +| パラメータ | 型 | 説明 | +| ---------------------- | -------------- | ------------------------------------ | +| `camera_namespaces` | vector | 融合されるカメラのネームスペース | +| `message_lifespan` | double | 融合されるタイムスタンプの最大スパン | +| `approximate_sync` | bool | 近似同期モードで動作するかどうか | +| `perform_group_fusion` | bool | グループ融合を実行するかどうか | diff --git a/perception/autoware_traffic_light_occlusion_predictor/README.md b/perception/autoware_traffic_light_occlusion_predictor/README.md index c66650a708c7b..5d30e9e4a17d8 100644 --- a/perception/autoware_traffic_light_occlusion_predictor/README.md +++ b/perception/autoware_traffic_light_occlusion_predictor/README.md @@ -12,26 +12,25 @@ ## 入力トピック -| 名前 | タイプ | 説明 | -| -------------------- | ------------------------------------------------ | ------------------- | -| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | +| 名前 | タイプ | 説明 | +| -------------------- | ------------------------------------------------ | ------------------------ | +| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | | `~/input/rois` | `autoware_perception_msgs::TrafficLightRoiArray` | traffic light detections | -| `~input/camera_info` | `sensor_msgs::CameraInfo` | target camera parameter | -| `~/input/cloud` | `sensor_msgs::PointCloud2` | LiDAR point cloud | +| `~input/camera_info` | `sensor_msgs::CameraInfo` | target camera parameter | +| `~/input/cloud` | `sensor_msgs::PointCloud2` | LiDAR point cloud | ## 出力トピック -| 名称 | タイプ | 説明 | -| -------------------- | ------------------------------------------------------- | ---------------------------- | -| `~/output/occlusion` | autoware_perception_msgs::TrafficLightOcclusionArray | 各ROIの遮蔽率 | +| 名称 | タイプ | 説明 | +| -------------------- | ---------------------------------------------------- | ------------- | +| `~/output/occlusion` | autoware_perception_msgs::TrafficLightOcclusionArray | 各ROIの遮蔽率 | ## ノードパラメーター -| パラメータ | 型 | 説明 | -| ------------------------------------ | ------ | ----------------------------------------------------------------------- | -| `azimuth_occlusion_resolution_deg` | double | LiDARポイントクラ​​ウドの方位分解能 (度) | -| `elevation_occlusion_resolution_deg` | double | LiDARポイントクラ​​ウドの仰角分解能 (度) | -| `max_valid_pt_dist` | double | この距離内のポイントは計算に使用される | -| `max_image_cloud_delay` | double | LiDARポイントクラ​​ウドとカメラ画像の最大遅延 | -| `max_wait_t` | double | LiDARポイントクラ​​ウドを待機する最大時間 | - +| パラメータ | 型 | 説明 | +| ------------------------------------ | ------ | --------------------------------------------- | +| `azimuth_occlusion_resolution_deg` | double | LiDARポイントクラ​​ウドの方位分解能 (度) | +| `elevation_occlusion_resolution_deg` | double | LiDARポイントクラ​​ウドの仰角分解能 (度) | +| `max_valid_pt_dist` | double | この距離内のポイントは計算に使用される | +| `max_image_cloud_delay` | double | LiDARポイントクラ​​ウドとカメラ画像の最大遅延 | +| `max_wait_t` | double | LiDARポイントクラ​​ウドを待機する最大時間 | diff --git a/perception/autoware_traffic_light_visualization/README.md b/perception/autoware_traffic_light_visualization/README.md index 9b5f029fddfb8..9399170adcb89 100644 --- a/perception/autoware_traffic_light_visualization/README.md +++ b/perception/autoware_traffic_light_visualization/README.md @@ -17,10 +17,10 @@ #### 入力 -| 名前 | タイプ | 説明 | -| -------------------- | ---------------------------------------------------- | ----------------- | -| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightGroupArray` | 信号機の状態 | -| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | +| 名前 | タイプ | 説明 | +| -------------------- | ---------------------------------------------------- | -------------- | +| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightGroupArray` | 信号機の状態 | +| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | #### 出力 @@ -36,26 +36,26 @@ Perceptionコンポーネントは、センサーデータ(カメラ、レーダー、LiDARなど)を使用して、車両の周囲環境を検出し、解釈します。このデータから、以下の情報が生成されます。 -* オブジェクト検出(車両、歩行者、障害物) -* 車両の周辺認識(自車位置、車線、交通標識) -* 環境マッピング +- オブジェクト検出(車両、歩行者、障害物) +- 車両の周辺認識(自車位置、車線、交通標識) +- 環境マッピング **2. Planning** Planningコンポーネントは、Perceptionコンポーネントによって生成された情報を基に、車両の経路を計画します。この経路は、以下の制約を考慮して生成されます。 -* 交通規則 -* 速度制限 -* 障害物回避 -* ドライバの意図(例:ウインカーからの入力) +- 交通規則 +- 速度制限 +- 障害物回避 +- ドライバの意図(例:ウインカーからの入力) **3. Control** Controlコンポーネントは、Planningコンポーネントによって生成された経路に基づいて、車両を制御します。これには以下の機能が含まれます。 -* ステアリング角制御 -* スロットル制御 -* ブレーキ制御 +- ステアリング角制御 +- スロットル制御 +- ブレーキ制御 **リアルタイム処理** @@ -65,17 +65,17 @@ Controlコンポーネントは、Planningコンポーネントによって生 このアーキテクチャには、以下のエラー処理メカニズムが含まれています。 -* センサーデータの冗長性(複数のセンサーを使用) -* Planningの冗長性(複数のPlanningアルゴリズムを使用) -* Controlの冗長性(複数のアクチュエータを使用) +- センサーデータの冗長性(複数のセンサーを使用) +- Planningの冗長性(複数のPlanningアルゴリズムを使用) +- Controlの冗長性(複数のアクチュエータを使用) **テストと検証** このアーキテクチャのテストと検証は、以下の方法で行われます。 -* シミュレーション -* 屋外試験(公道上のテスト) -* `post resampling`の解析 +- シミュレーション +- 屋外試験(公道上のテスト) +- `post resampling`の解析 **業界における関連性** @@ -83,26 +83,26 @@ Controlコンポーネントは、Planningコンポーネントによって生 **用語集** -* Perception:車両の周囲環境の認識と解釈 -* Planning:車両の経路計画 -* Control:車両の制御とアクチュエーション -* `post resampling`:シミュレーションデータを使用して、実際に収集されたデータのテストを行う手法 -* velocity逸脱量:速度逸脱の量 -* acceleration逸脱量:加速度逸脱の量 +- Perception:車両の周囲環境の認識と解釈 +- Planning:車両の経路計画 +- Control:車両の制御とアクチュエーション +- `post resampling`:シミュレーションデータを使用して、実際に収集されたデータのテストを行う手法 +- velocity逸脱量:速度逸脱の量 +- acceleration逸脱量:加速度逸脱の量 -| 名称 | タイプ | 説明 | -| ------------------------ | -------------------------------------- | ---------------------------------------------------- | +| 名称 | タイプ | 説明 | +| ------------------------ | -------------------------------------- | ------------------------------------ | | `~/output/traffic_light` | `visualization_msgs::msg::MarkerArray` | 信号機のステータスを示すマーカー配列 | ### traffic_light_roi_visualizer #### 入力 -| 名目 | タイプ | 説明 | -| ----------------------------- | -------------------------------------------------- | -------------------------------------------------------- | -| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightArray` | 信号状態 | -| `~/input/image` | `sensor_msgs::msg::Image` | 知覚カメラでキャプチャした画像 | -| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `traffic_light_fine_detector` によって検出された ROI | +| 名目 | タイプ | 説明 | +| --------------------------------- | -------------------------------------------------- | --------------------------------------------------------- | +| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightArray` | 信号状態 | +| `~/input/image` | `sensor_msgs::msg::Image` | 知覚カメラでキャプチャした画像 | +| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `traffic_light_fine_detector` によって検出された ROI | | `~/input/rough/rois` (オプション) | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `traffic_light_map_based_detector` によって検出された ROI | #### 出力 @@ -158,9 +158,9 @@ Behavior Planningコンポーネントは、継続的に改善されています - 計算効率の向上 - 安全性に関する評価能力の向上 -| Name | Type | Description | -| ------------------ | ---------------------------- | ----------------------- | -| `~/output/image` | `sensor_msgs::msg::Image` | ROI付き出力画像 | +| Name | Type | Description | +| ---------------- | ------------------------- | --------------- | +| `~/output/image` | `sensor_msgs::msg::Image` | ROI付き出力画像 | ## パラメータ @@ -183,4 +183,3 @@ Behavior Planningコンポーネントは、継続的に改善されています ## (任意) 参照/外部リンク ## (任意) 将来の拡張/未実装部分 - diff --git a/perception/perception_utils/README.md b/perception/perception_utils/README.md index 65fe36bf65f62..6b877e2b05683 100644 --- a/perception/perception_utils/README.md +++ b/perception/perception_utils/README.md @@ -3,4 +3,3 @@ ## 目的 このパッケージには、知覚モジュール全体で役立つ一般的な関数のライブラリが含まれています。 - diff --git a/planning/README.md b/planning/README.md index 226c317eac786..367a0608d81cc 100644 --- a/planning/README.md +++ b/planning/README.md @@ -29,7 +29,6 @@ Planning コンポーネントの **モジュール** は、ソフトウェア [起動ファイル](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving) は、`default_preset.yaml` で定義された設定を参照して、動作経路プランナーのノードが実行されているときに構成を適用します。 - ```xml ``` @@ -46,7 +45,6 @@ launch_avoidance_module から `default_preset.yaml` に対応。 - デフォルトパラメータ `default_preset.yaml` ファイルにモジュールを追加します。例: - ```yaml - arg: name: launch_intersection_module @@ -55,7 +53,6 @@ launch_avoidance_module から `default_preset.yaml` に対応。 - モジュールを [launcher](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning) に統合します。例: [behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml) - ```xml @@ -69,14 +66,12 @@ launch_avoidance_module から `default_preset.yaml` に対応。 - 適用可能な場合、パラメータフォルダを適切な既存のパラメータフォルダ内に配置します。たとえば、次のような[交差点モジュールのパラメータ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml)は[behavior_velocity_planner](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner)内にあります。 - [tier4_planning_component.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/components/tier4_planning_component.launch.xml)に、パラメータのパスを挿入します。たとえば、次のような`behavior_velocity_planner_intersection_module_param_path`を使用します。 - ```xml ``` - 対応するランチャー内でパラメータパスの変数を定義します。たとえば、[behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/04aa54bf5fb0c88e70198ca74b9ac343cc3457bf/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml#L191) - ```xml ``` @@ -116,7 +111,6 @@ Planning Component の [Motion Velocity Smoother](./autoware_velocity_smoother/R Y. 清水、T. 堀部、F. 渡辺、加藤正樹、"[自律移動体のジャーク制約速度計画: 線形計画法アプローチ](https://arxiv.org/abs/2202.10029)"、2022 年国際ロボット工学および自動化会議 (ICRA) - ```tex @inproceedings{shimizu2022, author={Shimizu, Yutaka and Horibe, Takamasa and Watanabe, Fumiya and Kato, Shinpei}, @@ -126,4 +120,3 @@ Y. 清水、T. 堀部、F. 渡辺、加藤正樹、"[自律移動体のジャー pages={5814-5820}, doi={10.1109/ICRA46639.2022.9812155}} ``` - diff --git a/planning/autoware_costmap_generator/README.md b/planning/autoware_costmap_generator/README.md index 7fe4cde8107e2..0bbad5dd79649 100644 --- a/planning/autoware_costmap_generator/README.md +++ b/planning/autoware_costmap_generator/README.md @@ -6,18 +6,18 @@ ### 入力トピック -| 名称 | タイプ | 説明 | -| --- | ---- | --- | -| `~input/objects` | `autoware_perception_msgs::PredictedObjects` | 障害物エリアの予測オブジェクト | -| `~input/points_no_ground` | `sensor_msgs::PointCloud2` | オブジェクトとして検出できない障害物エリアの地上除去ポイント | -| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | 走行可能エリアのベクターマップ | -| `~input/scenario` | `tier4_planning_msgs::Scenario` | ノードの有効化に使用するアクティブ化するシナリオ | +| 名称 | タイプ | 説明 | +| ------------------------- | -------------------------------------------- | ------------------------------------------------------------ | +| `~input/objects` | `autoware_perception_msgs::PredictedObjects` | 障害物エリアの予測オブジェクト | +| `~input/points_no_ground` | `sensor_msgs::PointCloud2` | オブジェクトとして検出できない障害物エリアの地上除去ポイント | +| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | 走行可能エリアのベクターマップ | +| `~input/scenario` | `tier4_planning_msgs::Scenario` | ノードの有効化に使用するアクティブ化するシナリオ | ### 出力トピック -| 名前 | タイプ | 説明 | -| ------------------------ | ----------------------- | ------------------------------------------------------- | -| `~output/grid_map` | grid_map_msgs::GridMap | costmapをGridMapとして表したもの、値の範囲は0.0から1.0 | +| 名前 | タイプ | 説明 | +| ------------------------ | ----------------------- | ---------------------------------------------------------- | +| `~output/grid_map` | grid_map_msgs::GridMap | costmapをGridMapとして表したもの、値の範囲は0.0から1.0 | | `~output/occupancy_grid` | nav_msgs::OccupancyGrid | costmapをOccupancyGridとして表したもの、値の範囲は0から100 | ### 出力 TF @@ -32,32 +32,31 @@ ### パラメータ -| 名前 | タイプ | 説明 | -|---|---|---| -| `update_rate` | double | タイマーの更新レート | -| `activate_by_scenario` | bool | true の場合、シナリオ(パーキング)によってアクティブ化します。それ以外の場合は、車両がパーキングロット内にある場合にアクティブ化します。 | -| `use_objects` | bool | `~input/objects` を使用するかどうかのフラグ | -| `use_points` | bool | `~input/points_no_ground` を使用するかどうかのフラグ | -| `use_wayarea` | bool | `~input/vector_map` の `wayarea` を使用するかどうかのフラグ | -| `use_parkinglot` | bool | `~input/vector_map` の `parkinglot` を使用するかどうかのフラグ | -| `costmap_frame` | string | 作成された Costmap の座標系 | -| `vehicle_frame` | string | 車両の座標系 | -| `map_frame` | string | マップの座標系 | -| `grid_min_value` | double | Gridmap の最小コスト | -| `grid_max_value` | double | Gridmap の最大コスト | -| `grid_resolution` | double | Gridmap の解像度 | -| `grid_length_x` | int | Gridmap の x 方向のサイズ | -| `grid_length_y` | int | Gridmap の y 方向のサイズ | -| `grid_position_x` | int | 座標系から x 方向へのオフセット | -| `grid_position_y` | int | 座標系から y 方向へのオフセット | -| `maximum_lidar_height_thres` | double | 点群データの最大高さしきい値 | -| `minimum_lidar_height_thres` | double | 点群データの最小高さしきい値 | -| `expand_rectangle_size` | double | オブジェクトの矩形をこの値で拡大します | -| `size_of_expansion_kernel` | int | オブジェクトの Costmap に対するぼかし効果のカーネルサイズ | +| 名前 | タイプ | 説明 | +| ---------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `update_rate` | double | タイマーの更新レート | +| `activate_by_scenario` | bool | true の場合、シナリオ(パーキング)によってアクティブ化します。それ以外の場合は、車両がパーキングロット内にある場合にアクティブ化します。 | +| `use_objects` | bool | `~input/objects` を使用するかどうかのフラグ | +| `use_points` | bool | `~input/points_no_ground` を使用するかどうかのフラグ | +| `use_wayarea` | bool | `~input/vector_map` の `wayarea` を使用するかどうかのフラグ | +| `use_parkinglot` | bool | `~input/vector_map` の `parkinglot` を使用するかどうかのフラグ | +| `costmap_frame` | string | 作成された Costmap の座標系 | +| `vehicle_frame` | string | 車両の座標系 | +| `map_frame` | string | マップの座標系 | +| `grid_min_value` | double | Gridmap の最小コスト | +| `grid_max_value` | double | Gridmap の最大コスト | +| `grid_resolution` | double | Gridmap の解像度 | +| `grid_length_x` | int | Gridmap の x 方向のサイズ | +| `grid_length_y` | int | Gridmap の y 方向のサイズ | +| `grid_position_x` | int | 座標系から x 方向へのオフセット | +| `grid_position_y` | int | 座標系から y 方向へのオフセット | +| `maximum_lidar_height_thres` | double | 点群データの最大高さしきい値 | +| `minimum_lidar_height_thres` | double | 点群データの最小高さしきい値 | +| `expand_rectangle_size` | double | オブジェクトの矩形をこの値で拡大します | +| `size_of_expansion_kernel` | int | オブジェクトの Costmap に対するぼかし効果のカーネルサイズ | ### フローチャート - ```plantuml @startuml title onTimer @@ -91,4 +90,3 @@ endif stop @enduml ``` - diff --git a/planning/autoware_external_velocity_limit_selector/README.md b/planning/autoware_external_velocity_limit_selector/README.md index 246c5c10386eb..1dd5e318dd806 100644 --- a/planning/autoware_external_velocity_limit_selector/README.md +++ b/planning/autoware_external_velocity_limit_selector/README.md @@ -36,6 +36,7 @@ WIP --> ## 入力 + ``` #!cpp // API から受信した速度制限 @@ -48,178 +49,227 @@ WIP geometry_msgs::PoseStamped current_pose; ``` -| 名称 | タイプ | 説明 | -| ------------------------------------------------------ | ------------------------------------------------ | -------------------------------------------- | -| `~input/velocity_limit_from_api` | tier4_planning_msgs::VelocityLimit | APIからの速度制限 | -| `~input/velocity_limit_from_internal` | tier4_planning_msgs::VelocityLimit | Autoware内部モジュールからの速度制限 | +| 名称 | タイプ | 説明 | +| --------------------------------------------------- | ---------------------------------------------- | -------------------------------------------------- | +| `~input/velocity_limit_from_api` | tier4_planning_msgs::VelocityLimit | APIからの速度制限 | +| `~input/velocity_limit_from_internal` | tier4_planning_msgs::VelocityLimit | Autoware内部モジュールからの速度制限 | | `~input/velocity_limit_clear_command_from_internal` | tier4_planning_msgs::VelocityLimitClearCommand | Autoware内部モジュールからの速度制限クリアコマンド | ## 出力 **Global Path Plan** -* グローバルパス計画 + +- グローバルパス計画 **Local Trajectory Plan** -* ローカルトラジェクトリピュラン + +- ローカルトラジェクトリピュラン **Planning** -* Planning + +- Planning **Map Matching** -* マップマッチング + +- マップマッチング **Autoware API** -* Autoware API + +- Autoware API **Behavior Planning** -* 行動計画 + +- 行動計画 **Motion Planning** -* モーション計画 + +- モーション計画 **Control** -* 制御 + +- 制御 **Perception** -* 知覚 + +- 知覚 **Vehicle Dynamics** -* 車両運動力学 + +- 車両運動力学 **Sensor** -* センサー + +- センサー **Localization** -* ローカライズ + +- ローカライズ **Post Processing** -* ポスト処理 + +- ポスト処理 **Planning** -* Planning + +- Planning **Plotting** -* プロッティング + +- プロッティング **Best Trajectory Search** -* 最適トラジェクトリサーチ + +- 最適トラジェクトリサーチ **Clustering** -* クラスタリング + +- クラスタリング **Clustering Parameters** -* クラスタリングパラメータ + +- クラスタリングパラメータ **Post-resampling** -* `post-resampling` + +- `post-resampling` **Downsampling** -* ダウンサンプリング + +- ダウンサンプリング **Interpolation** -* 補間 + +- 補間 **Velocity Violation Threshold** -* 速度逸脱量閾値 + +- 速度逸脱量閾値 **Acceleration Violation Threshold** -* 加速度逸脱量閾値 + +- 加速度逸脱量閾値 **Jerk Violation Threshold** -* ジャーク逸脱量閾値 + +- ジャーク逸脱量閾値 **Snap Violation Threshold** -* スナップ逸脱量閾値 + +- スナップ逸脱量閾値 **Path Smoothing** -* パススムージング + +- パススムージング **Uniform B-Spline Smoothing** -* Uniform B-Splineスムーージング + +- Uniform B-Splineスムーージング **LSF Smoothing** -* LSFスムージング + +- LSFスムージング **Self-Motion Smoothing** -* 自車運動スムージング + +- 自車運動スムージング **Generate Trajectory** -* トラジェクトリ生成 + +- トラジェクトリ生成 **Generate Path** -* パス生成 + +- パス生成 **Generate Sim Trajectories** -* シミュレーション用トラジェクトリ生成 + +- シミュレーション用トラジェクトリ生成 **Publish Drive Trajectory** -* 駆動用トラジェクトリ発行 + +- 駆動用トラジェクトリ発行 **Publish Planning Visualization** -* Planningビジュアライゼーション発行 + +- Planningビジュアライゼーション発行 **Publish Trajectory** -* トラジェクトリ発行 + +- トラジェクトリ発行 **Publishing** -* 発行 + +- 発行 **Publish Pose** -* 自車位置発行 + +- 自車位置発行 **Publish Stop Trajectory** -* 停止用トラジェクトリ発行 + +- 停止用トラジェクトリ発行 **Publish Turn Signal** -* 方向指示器発行 + +- 方向指示器発行 **Publish Vehicle State** -* 車両状態発行 + +- 車両状態発行 **Subscribe Map** -* マップ購読 + +- マップ購読 **Subscribe Pose** -* 自車位置購読 + +- 自車位置購読 **Subscribe Stop Sign** -* 停止標識購読 + +- 停止標識購読 **Subscription** -* 購読 + +- 購読 **Target Planning** -* ターゲットPlanning + +- ターゲットPlanning **Trajectory Converter** -* トラジェクトリコンバータ + +- トラジェクトリコンバータ **Trajectory Optimization** -* トラジェクトリ最適化 + +- トラジェクトリ最適化 **Twist2D** -* Twist2D + +- Twist2D **Vehicle Model** -* 車両モデル -| 名前 | 型 | 説明 | -| ---------------------- | ---------------------------------- | ------------------------------------------------ | +- 車両モデル + +| 名前 | 型 | 説明 | +| ---------------------- | ---------------------------------- | -------------------------------------------- | | `~output/max_velocity` | tier4_planning_msgs::VelocityLimit | 自車位置における最も厳格な速度制限の最新情報 | ## パラメータ -| パラメーター | タイプ | 説明 | -| ----------------- | ------ | --------------------------------------- | -| `max_velocity` | double | デフォルト最大速度 [m/s] | -| `normal.min_acc` | double | 最小加速度 [m/ss] | -| `normal.max_acc` | double | 最大加速度 [m/ss] | -| `normal.min_jerk` | double | 最小ジャーク [m/sss] | -| `normal.max_jerk` | double | 最大ジャーク [m/sss] | -| `limit.min_acc` | double | 守られるべき最小加速度 [m/ss] | -| `limit.max_acc` | double | 守られるべき最大加速度 [m/ss] | -| `limit.min_jerk` | double | 守られるべき最小ジャーク [m/sss] | -| `limit.max_jerk` | double | 守られるべき最大ジャーク [m/sss] | +| パラメーター | タイプ | 説明 | +| ----------------- | ------ | -------------------------------- | +| `max_velocity` | double | デフォルト最大速度 [m/s] | +| `normal.min_acc` | double | 最小加速度 [m/ss] | +| `normal.max_acc` | double | 最大加速度 [m/ss] | +| `normal.min_jerk` | double | 最小ジャーク [m/sss] | +| `normal.max_jerk` | double | 最大ジャーク [m/sss] | +| `limit.min_acc` | double | 守られるべき最小加速度 [m/ss] | +| `limit.max_acc` | double | 守られるべき最大加速度 [m/ss] | +| `limit.min_jerk` | double | 守られるべき最小ジャーク [m/sss] | +| `limit.max_jerk` | double | 守られるべき最大ジャーク [m/sss] | ## 仮定 / 既知の制限事項 @@ -269,4 +319,3 @@ WIP 現在、このパッケージはチャタリング障害物を適切に処理できません。これを改善するために、認識レイヤーにいくつかの確率的フィルタを追加することを計画しています。 また、グローバルであるべきいくつかのパラメータがあります(例:車両サイズ、最大操舵角など)。これらはリファクタリングされ、グローバルパラメータとして定義されるため、さまざまなノード間で同じパラメータを共有できます。 --> - diff --git a/planning/autoware_freespace_planner/README.md b/planning/autoware_freespace_planner/README.md index 8a85745227350..59c3502a023a6 100644 --- a/planning/autoware_freespace_planner/README.md +++ b/planning/autoware_freespace_planner/README.md @@ -9,18 +9,18 @@ ### 入力トピック -| 名称 | タイプ | 説明 | -| ------------------------ | ----------------------------- | ---------------------------------------------------------- | -| `~input/route` | autoware_planning_msgs::Route | ルートとゴールポーズ | -| `~input/occupancy_grid` | nav_msgs::OccupancyGrid | 走行可能な領域のコストマップ | -| `~input/odometry` | nav_msgs::Odometry | 車両速度(車両の停止状態をチェックするために使用する) | +| 名称 | タイプ | 説明 | +| ----------------------- | ----------------------------- | ---------------------------------------------------------- | +| `~input/route` | autoware_planning_msgs::Route | ルートとゴールポーズ | +| `~input/occupancy_grid` | nav_msgs::OccupancyGrid | 走行可能な領域のコストマップ | +| `~input/odometry` | nav_msgs::Odometry | 車両速度(車両の停止状態をチェックするために使用する) | | `~input/scenario` | tier4_planning_msgs::Scenario | ノードをアクティベートするためのアクティベートするシナリオ | ### 出力トピック -| 名称 | タイプ | 説明 | +| 名称 | タイプ | 説明 | | -------------------- | ---------------------------------- | ------------------------------------------ | -| `~output/trajectory` | autoware_planning_msgs::Trajectory | 追従する軌道 | +| `~output/trajectory` | autoware_planning_msgs::Trajectory | 追従する軌道 | | `is_completed` | bool (rosパラメータとして実装) | すべての分割された軌道が公開されたかどうか | ### 出力TF @@ -38,67 +38,66 @@ #### ノードパラメータ -| パラメータ | 型 | 説明 | -| --------------------------------- | ------ | ------------------------------------------------------------------------------------------------ | -| `planning_algorithms` | 文字列 | ノードで使用されるアルゴリズム | -| `vehicle_shape_margin_m` | 浮動小数 | 計画アルゴリズムのコリジョンマージン | -| `update_rate` | 倍精度浮動小数 | タイマーの更新レート | -| `waypoints_velocity` | 倍精度浮動小数 | 出力軌道の速度(現時点では定速のみをサポート) | -| `th_arrived_distance_m` | 倍精度浮動小数 | 車両が軌道のエンドポイントに到着したかどうかをチェックするしきい値距離 | -| `th_stopped_time_sec` | 倍精度浮動小数 | 車両が停止しているかどうかをチェックするしきい値時間 | -| `th_stopped_velocity_mps` | 倍精度浮動小数 | 車両が停止しているかどうかをチェックするしきい値速度 | -| `th_course_out_distance_m` | 倍精度浮動小数 | 車両がコースから外れたかどうかをチェックするしきい値距離 | -| `th_obstacle_time_sec` | 倍精度浮動小数 | 障害物が軌道上にあるかどうかをチェックするしきい値時間 | -| `vehicle_shape_margin_m` | 倍精度浮動小数 | 車両マージン | -| `replan_when_obstacle_found` | ブール | 障害物が軌道上で見つかったときに再計画するかどうか | -| `replan_when_course_out` | ブール | 車両がコースから外れたときに再計画するかどうか | +| パラメータ | 型 | 説明 | +| ---------------------------- | -------------- | ---------------------------------------------------------------------- | +| `planning_algorithms` | 文字列 | ノードで使用されるアルゴリズム | +| `vehicle_shape_margin_m` | 浮動小数 | 計画アルゴリズムのコリジョンマージン | +| `update_rate` | 倍精度浮動小数 | タイマーの更新レート | +| `waypoints_velocity` | 倍精度浮動小数 | 出力軌道の速度(現時点では定速のみをサポート) | +| `th_arrived_distance_m` | 倍精度浮動小数 | 車両が軌道のエンドポイントに到着したかどうかをチェックするしきい値距離 | +| `th_stopped_time_sec` | 倍精度浮動小数 | 車両が停止しているかどうかをチェックするしきい値時間 | +| `th_stopped_velocity_mps` | 倍精度浮動小数 | 車両が停止しているかどうかをチェックするしきい値速度 | +| `th_course_out_distance_m` | 倍精度浮動小数 | 車両がコースから外れたかどうかをチェックするしきい値距離 | +| `th_obstacle_time_sec` | 倍精度浮動小数 | 障害物が軌道上にあるかどうかをチェックするしきい値時間 | +| `vehicle_shape_margin_m` | 倍精度浮動小数 | 車両マージン | +| `replan_when_obstacle_found` | ブール | 障害物が軌道上で見つかったときに再計画するかどうか | +| `replan_when_course_out` | ブール | 車両がコースから外れたときに再計画するかどうか | #### Planner の共通パラメータ -| パラメータ | 種類 | 説明 | -| ------------------------- | ------ | ---------------------------------------------------- | -| `time_limit` | 数値 | Planning の時間制限 | -| `maximum_turning_ratio` | 数値 | 使用可能な実際の旋回範囲に対する最大比 | -| `turning_steps` | 数値 | 旋回範囲内の旋回ステップ数 | -| `theta_size` | 数値 | 角度の離散化の数 | -| `lateral_goal_range` | 数値 | 横位置の目標範囲 | -| `longitudinal_goal_range` | 数値 | 縦位置の目標範囲 | -| `angle_goal_range` | 数値 | 角度の目標範囲 | -| `curve_weight` | 数値 | 曲線操作に対する追加コスト係数 | -| `reverse_weight` | 数値 | バック動作に対する追加コスト係数 | -| `direction_change_weight` | 数値 | 方向変更に対する追加コスト係数 | -| `obstacle_threshold` | 数値 | 特定のグリッドを障害物と見なすための閾値 | +| パラメータ | 種類 | 説明 | +| ------------------------- | ---- | ---------------------------------------- | +| `time_limit` | 数値 | Planning の時間制限 | +| `maximum_turning_ratio` | 数値 | 使用可能な実際の旋回範囲に対する最大比 | +| `turning_steps` | 数値 | 旋回範囲内の旋回ステップ数 | +| `theta_size` | 数値 | 角度の離散化の数 | +| `lateral_goal_range` | 数値 | 横位置の目標範囲 | +| `longitudinal_goal_range` | 数値 | 縦位置の目標範囲 | +| `angle_goal_range` | 数値 | 角度の目標範囲 | +| `curve_weight` | 数値 | 曲線操作に対する追加コスト係数 | +| `reverse_weight` | 数値 | バック動作に対する追加コスト係数 | +| `direction_change_weight` | 数値 | 方向変更に対する追加コスト係数 | +| `obstacle_threshold` | 数値 | 特定のグリッドを障害物と見なすための閾値 | #### A\* 探索パラメータ -| パラメーター | タイプ | 説明 | -| -------------------------------- | ------ | ------------------------------------------------------------------- | -| `search_method` | 文字列 | 検索方法、スタートからゴールへまたはその逆方向 | -| `only_behind_solutions` | ブール | ソリューションをゴールの後ろに制限するかどうか | -| `use_back` | ブール | 後方軌道を使用するかどうか | -| `adapt_expansion_distance` | ブール | 環境に基づいて展開距離を適応する場合 | -| `expansion_distance` | double | ノード遷移の展開距離 | -| `near_goal_distance` | double | ゴール近傍距離のしきい値 | -| `distance_heuristic_weight` | double | ノードのコストを推定するためのヒューリスティック重み | -| `smoothness_weight` | double | 曲率の変化に対するコストファクター | -| `obstacle_distance_weight` | double | 障害物までの距離に対するコストファクター | -| `goal_lat_distance_weight` | double | ゴールからの横方向距離に対するコストファクター | - -#### RRT*探索パラメータ +| パラメーター | タイプ | 説明 | +| --------------------------- | ------ | ---------------------------------------------------- | +| `search_method` | 文字列 | 検索方法、スタートからゴールへまたはその逆方向 | +| `only_behind_solutions` | ブール | ソリューションをゴールの後ろに制限するかどうか | +| `use_back` | ブール | 後方軌道を使用するかどうか | +| `adapt_expansion_distance` | ブール | 環境に基づいて展開距離を適応する場合 | +| `expansion_distance` | double | ノード遷移の展開距離 | +| `near_goal_distance` | double | ゴール近傍距離のしきい値 | +| `distance_heuristic_weight` | double | ノードのコストを推定するためのヒューリスティック重み | +| `smoothness_weight` | double | 曲率の変化に対するコストファクター | +| `obstacle_distance_weight` | double | 障害物までの距離に対するコストファクター | +| `goal_lat_distance_weight` | double | ゴールからの横方向距離に対するコストファクター | + +#### RRT\*探索パラメータ -| パラメーター | 型 | 説明 | -| ------------------------ | ------ | ---------------------------------------------------------------------------- | -| `max planning time` | double | 最大計画時間 [msec] (`enable_update` が `true` の場合にのみ使用) | -| `enable_update` | bool | `max_planning time` が経過するまで実現可能なソリューションが見つかった後の更新の有無 | -| `use_informed_sampling` | bool | Informed RRT\*(Gammell et al.)の使用 | -| `neighbor_radius` | double | RRT\*アルゴリズムの近傍半径 | -| `margin` | double | RRT\*アルゴリズムにおけるパスの衝突チェックで確保される安全マージン | +| パラメーター | 型 | 説明 | +| ----------------------- | ------ | ------------------------------------------------------------------------------------ | +| `max planning time` | double | 最大計画時間 [msec] (`enable_update` が `true` の場合にのみ使用) | +| `enable_update` | bool | `max_planning time` が経過するまで実現可能なソリューションが見つかった後の更新の有無 | +| `use_informed_sampling` | bool | Informed RRT\*(Gammell et al.)の使用 | +| `neighbor_radius` | double | RRT\*アルゴリズムの近傍半径 | +| `margin` | double | RRT\*アルゴリズムにおけるパスの衝突チェックで確保される安全マージン | ### フローチャート - ```plantuml @startuml title onTimer @@ -137,4 +136,3 @@ endif stop @enduml ``` - diff --git a/planning/autoware_freespace_planning_algorithms/README.md b/planning/autoware_freespace_planning_algorithms/README.md index 7aa1f5e696797..3adca3b2e7459 100644 --- a/planning/autoware_freespace_planning_algorithms/README.md +++ b/planning/autoware_freespace_planning_algorithms/README.md @@ -32,14 +32,13 @@ A\* -> informed RRT\* -> RRT。ほとんどの場合において、informed RRT\ - このパッケージ内のすべてのプランニングアルゴリズムクラスは、`AbstractPlanningAlgorithm`クラスを継承する必要があります。必要に応じて、仮想関数をオーバーライドしてください。 - すべてのアルゴリズムは`nav_msgs::OccupancyGrid`タイプのコストマップを使用する必要があります。 -したがって、`AbstractPlanningAlgorithm`クラスは主に、コストマップを使用した衝突チェック、グリッドベースのインデックス作成、コストマップに関連する座標変換を実装します。 + したがって、`AbstractPlanningAlgorithm`クラスは主に、コストマップを使用した衝突チェック、グリッドベースのインデックス作成、コストマップに関連する座標変換を実装します。 - すべてのアルゴリズムは、`PlannerCommonParam`タイプの構造とアルゴリズム固有タイプの構造の両方をコンストラクタの入力として受け取る必要があります。たとえば、`AstarSearch`クラスのコンストラクタは、`PlannerCommonParam`と`AstarParam`の両方を受け取ります。 ## スタンドアロンテストと可視化の実行 パッケージをros-testでビルドし、テストを実行します。 - ```sh colcon build --packages-select autoware_freespace_planning_algorithms colcon test --packages-select autoware_freespace_planning_algorithms @@ -87,4 +86,3 @@ Python モジュールへの拡張の実装があります。 は [pyReedsShepp](https://github.com/ghliu/pyReedsShepp) から取得されています。 `pyReedsShepp` の実装も [ompl](https://github.com/ompl/ompl) のコードを大いに基にしていることに注意してください。 `pyReedsShepp` と `ompl` はどちらも 3 項 BSD ライセンスで配布されています。 - diff --git a/planning/autoware_mission_planner/README.md b/planning/autoware_mission_planner/README.md index 603cbf70f88ae..3c3f942a17f06 100644 --- a/planning/autoware_mission_planner/README.md +++ b/planning/autoware_mission_planner/README.md @@ -19,18 +19,18 @@ ### パラメーター -| 名称 | 型 | 説明 | -| ---------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `map_frame` | 文字列 | マップのフレーム名 | -| `arrival_check_angle_deg` | double | ゴール点検の角度閾値 | -| `arrival_check_distance` | double | ゴール点検の距離閾値 | -| `arrival_check_duration` | double | ゴール点検の期間閾値 | -| `goal_angle_threshold` | double | ゴールの承認のための目標ポーズの最大角度 | -| `enable_correct_goal_pose` | ブーリアン | 最も近いレーンレットの向きに従ってゴールポーズを修正するかどうか | -| `reroute_time_threshold` | double | 現在速度での経路変更ポイントまでの時間がこの閾値よりも大きい場合、経路変更が可能となる | -| `minimum_reroute_length` | double | 新しい経路を発行するための最小長 | -| `consider_no_drivable_lanes` | ブーリアン | 計画に走行不可のレーンレットを考慮するかどうかのフラグ | -| `allow_reroute_in_autonomous_mode` | ブーリアン | 自律運転モードでの経路変更を許可するフラグ。falseの場合は経路変更は失敗し、trueの場合は安全な経路変更のみが許可される | +| 名称 | 型 | 説明 | +| ---------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------- | +| `map_frame` | 文字列 | マップのフレーム名 | +| `arrival_check_angle_deg` | double | ゴール点検の角度閾値 | +| `arrival_check_distance` | double | ゴール点検の距離閾値 | +| `arrival_check_duration` | double | ゴール点検の期間閾値 | +| `goal_angle_threshold` | double | ゴールの承認のための目標ポーズの最大角度 | +| `enable_correct_goal_pose` | ブーリアン | 最も近いレーンレットの向きに従ってゴールポーズを修正するかどうか | +| `reroute_time_threshold` | double | 現在速度での経路変更ポイントまでの時間がこの閾値よりも大きい場合、経路変更が可能となる | +| `minimum_reroute_length` | double | 新しい経路を発行するための最小長 | +| `consider_no_drivable_lanes` | ブーリアン | 計画に走行不可のレーンレットを考慮するかどうかのフラグ | +| `allow_reroute_in_autonomous_mode` | ブーリアン | 自律運転モードでの経路変更を許可するフラグ。falseの場合は経路変更は失敗し、trueの場合は安全な経路変更のみが許可される | ### サービス @@ -53,16 +53,16 @@ - IMU/GNSS/カメラによる自車位置推定 - SLAMによるマップ構築と局在化 -| Name | Type | Description | -| ------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------------------- | -| `/planning/mission_planning/mission_planner/clear_route` | tier4_planning_msgs/srv/ClearRoute | ルートクリア要求 | +| Name | Type | Description | +| ------------------------------------------------------------------- | ---------------------------------------- | ------------------------------------------------ | +| `/planning/mission_planning/mission_planner/clear_route` | tier4_planning_msgs/srv/ClearRoute | ルートクリア要求 | | `/planning/mission_planning/mission_planner/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うルート要求 | -| `/planning/mission_planning/mission_planner/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うルート要求 | -| `/planning/mission_planning/route_selector/main/clear_route` | tier4_planning_msgs/srv/ClearRoute | メインルートクリア要求 | -| `/planning/mission_planning/route_selector/main/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うメインルート要求 | -| `/planning/mission_planning/route_selector/main/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うメインルート要求 | -| `/planning/mission_planning/route_selector/mrm/clear_route` | tier4_planning_msgs/srv/ClearRoute | MRMルートクリア要求 | -| `/planning/mission_planning/route_selector/mrm/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うMRMルート要求 | +| `/planning/mission_planning/mission_planner/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うルート要求 | +| `/planning/mission_planning/route_selector/main/clear_route` | tier4_planning_msgs/srv/ClearRoute | メインルートクリア要求 | +| `/planning/mission_planning/route_selector/main/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うメインルート要求 | +| `/planning/mission_planning/route_selector/main/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うメインルート要求 | +| `/planning/mission_planning/route_selector/mrm/clear_route` | tier4_planning_msgs/srv/ClearRoute | MRMルートクリア要求 | +| `/planning/mission_planning/route_selector/mrm/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うMRMルート要求 | | `/planning/mission_planning/route_selector/mrm/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うMRMルート要求 | ### サブスクリプション @@ -78,11 +78,11 @@ - `/carla/ego_vehicle/sensor/camera/rgb/front/image` : CARLAエミュレータによって提供されるフロントRGBカメラの画像 - `/carla/ego_vehicle/sensor/lidar/top/front/point_cloud` : CARLAエミュレータによって提供されるフロントLiDARの点群 -| 名前 | 種類 | 説明 | -| ---------------------------- | ----------------------------------------- | ---------------------- | +| 名前 | 種類 | 説明 | +| ---------------------------- | ----------------------------------------- | ------------------------ | | `input/vector_map` | autoware_map_msgs/msg/LaneletMapBin | Lanelet2のベクトルマップ | -| `input/modified_goal` | geometry_msgs/PoseWithUuidStamped | 修正されたゴールの姿勢 | -| `input/operation_mode_state` | autoware_adapi_v1_msgs/OperationModeState | 操作モードの状態 | +| `input/modified_goal` | geometry_msgs/PoseWithUuidStamped | 修正されたゴールの姿勢 | +| `input/operation_mode_state` | autoware_adapi_v1_msgs/OperationModeState | 操作モードの状態 | ### 資料 @@ -90,16 +90,16 @@ - [Open Robotics: Autoware.Auto](https://arxiv.org/abs/2204.09611) - [Experimental validation of the Autoware.Auto planning module in simulated scenarios](https://arxiv.org/abs/2204.10510) -| 名称 | タイプ | 説明 | -| ------------------------------------------------------ | ----------------------------------- | ------------------------------------------------ | -| `/planning/mission_planning/state` | tier4_planning_msgs/msg/RouteState | ルートの状態 | -| `/planning/mission_planning/route` | autoware_planning_msgs/LaneletRoute | ルート | -| `/planning/mission_planning/route_selector/main/state` | tier4_planning_msgs/msg/RouteState | メインルートの状態 | -| `/planning/mission_planning/route_selector/main/route` | autoware_planning_msgs/LaneletRoute | メインルート | -| `/planning/mission_planning/route_selector/mrm/state` | tier4_planning_msgs/msg/RouteState | MRMルートの状態 | -| `/planning/mission_planning/route_selector/mrm/route` | autoware_planning_msgs/LaneletRoute | MRMルート | -| `~/debug/route_marker` | visualization_msgs/msg/MarkerArray | デバッグ用のルートマーカー | -| `~/debug/goal_footprint` | visualization_msgs/msg/MarkerArray | デバッグ用の目標フットプリント | +| 名称 | タイプ | 説明 | +| ------------------------------------------------------ | ----------------------------------- | ------------------------------ | +| `/planning/mission_planning/state` | tier4_planning_msgs/msg/RouteState | ルートの状態 | +| `/planning/mission_planning/route` | autoware_planning_msgs/LaneletRoute | ルート | +| `/planning/mission_planning/route_selector/main/state` | tier4_planning_msgs/msg/RouteState | メインルートの状態 | +| `/planning/mission_planning/route_selector/main/route` | autoware_planning_msgs/LaneletRoute | メインルート | +| `/planning/mission_planning/route_selector/mrm/state` | tier4_planning_msgs/msg/RouteState | MRMルートの状態 | +| `/planning/mission_planning/route_selector/mrm/route` | autoware_planning_msgs/LaneletRoute | MRMルート | +| `~/debug/route_marker` | visualization_msgs/msg/MarkerArray | デバッグ用のルートマーカー | +| `~/debug/goal_footprint` | visualization_msgs/msg/MarkerArray | デバッグ用の目標フットプリント | ## ルートセクション @@ -129,7 +129,6 @@ Mission Planner は、与えられたゴールポーズを検証してルート `plan route` の詳細については、次のセクションで説明します。 - ```plantuml @startuml title goal callback @@ -156,7 +155,6 @@ stop `plan route`は、自車位置と目標位置を含むチェックポイントで実行されます。 - ```plantuml @startuml title plan route @@ -196,7 +194,7 @@ stop 1. 車線変更可能な計画されたパスに対するすべての隣接車線 (右と左) が `route_lanelets` として記憶されます。 2. 車線変更できない計画されたパスに対するすべての隣接車線 (右と左) が `candidate_lanelets` として記憶されます。 3. 各 `candidate_lanelets` の前後車線が `route_lanelets` である場合、`candidate_lanelet` は `route_lanelets` として登録されます。 - - これは、`candidate_lanelet` (隣接車線) が車線変更できない場合でも、`candidate_lanelet` の前後車線が `route_lanelets` であれば車線変更せずに `candidate_lanelet` を通過できるためです。 + - これは、`candidate_lanelet` (隣接車線) が車線変更できない場合でも、`candidate_lanelet` の前後車線が `route_lanelets` であれば車線変更せずに `candidate_lanelet` を通過できるためです。 `優先車線を取得` はルートハンドラーを使用して `route_lanelets` から `preferred_primitive` を抽出します。 @@ -237,4 +235,3 @@ MRM が路肩に停車するためのインターフェイスです。できる - 動的オブジェクト (例: 歩行者や他の車両) や動的マップ情報 (例: 一部の車線を塞ぐ道路工事) はルート計画中に考慮されません。 - ループルートはサポートされていません。 - diff --git a/planning/autoware_objects_of_interest_marker_interface/README.md b/planning/autoware_objects_of_interest_marker_interface/README.md index cdef375f76126..1bc828b4cfdba 100644 --- a/planning/autoware_objects_of_interest_marker_interface/README.md +++ b/planning/autoware_objects_of_interest_marker_interface/README.md @@ -13,4 +13,3 @@ ## 仮定 / わかっている制限事項 ## 将来の拡張 / 未実装の部分 - diff --git a/planning/autoware_obstacle_cruise_planner/README.md b/planning/autoware_obstacle_cruise_planner/README.md index e54a7383750b8..69f1696240431 100644 --- a/planning/autoware_obstacle_cruise_planner/README.md +++ b/planning/autoware_obstacle_cruise_planner/README.md @@ -15,20 +15,20 @@ ### 入力トピック -| 名称 | 種類 | 説明 | -| -------------------- | ------------------------------------------ | -------------------------------------- | -| `~/input/trajectory` | `autoware_planning_msgs::Trajectory` | 入力軌道 | -| `~/input/objects` | `autoware_perception_msgs::PredictedObjects` | 動的オブジェクト | -| `~/input/odometry` | `nav_msgs::msg::Odometry` | 自車オドメトリ | +| 名称 | 種類 | 説明 | +| -------------------- | -------------------------------------------- | ---------------- | +| `~/input/trajectory` | `autoware_planning_msgs::Trajectory` | 入力軌道 | +| `~/input/objects` | `autoware_perception_msgs::PredictedObjects` | 動的オブジェクト | +| `~/input/odometry` | `nav_msgs::msg::Odometry` | 自車オドメトリ | ### 出力トピック -| 名前 | 型 | 説明 | -| ------------------------------- | ---------------------------------------------- | -------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs::Trajectory | 出力軌跡 | -| `~/output/velocity_limit` | tier4_planning_msgs::VelocityLimit | 巡行時の速度制限 | -| `~/output/clear_velocity_limit` | tier4_planning_msgs::VelocityLimitClearCommand | 速度制限のクリアコマンド | -| `~/output/stop_reasons` | tier4_planning_msgs::StopReasonArray | 車両を停止させる理由 | +| 名前 | 型 | 説明 | +| ------------------------------- | ---------------------------------------------- | ------------------------ | +| `~/output/trajectory` | autoware_planning_msgs::Trajectory | 出力軌跡 | +| `~/output/velocity_limit` | tier4_planning_msgs::VelocityLimit | 巡行時の速度制限 | +| `~/output/clear_velocity_limit` | tier4_planning_msgs::VelocityLimitClearCommand | 速度制限のクリアコマンド | +| `~/output/stop_reasons` | tier4_planning_msgs::StopReasonArray | 車両を停止させる理由 | ## 設計 @@ -42,7 +42,6 @@ クルーズ計画と停止計画のデータ構造は次のとおりです。 このプランナーデータは最初に作成され、その後、計画アルゴリズムに送信されます。 - ```cpp struct PlannerData { @@ -55,7 +54,6 @@ struct PlannerData }; ``` - ```cpp struct Obstacle { @@ -95,20 +93,20 @@ struct Obstacle - 最も信頼性の高い予測経路が自車の軌道と衝突すること。 - その衝突期間が`behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold`を超えていること。 -| パラメータ | 型 | 説明 | -|---|---|---| -| `common.cruise_obstacle_type.inside.unknown` | bool | クルーズに対して、不明なオブジェクトを考慮するフラグ | -| `common.cruise_obstacle_type.inside.car` | bool | クルーズに対して、乗用車オブジェクトを考慮するフラグ | -| `common.cruise_obstacle_type.inside.truck` | bool | クルーズに対して、トラックオブジェクトを考慮するフラグ | -| ... | bool | ... | -| `common.cruise_obstacle_type.outside.unknown` | bool | クルーズに対して、不明なオブジェクトを考慮するフラグ | -| `common.cruise_obstacle_type.outside.car` | bool | クルーズに対して、乗用車オブジェクトを考慮するフラグ | -| `common.cruise_obstacle_type.outside.truck` | bool | クルーズに対して、トラックオブジェクトを考慮するフラグ | -| ... | bool | ... | -| `behavior_determination.cruise.max_lat_margin` | double | クルーズ障害物の最大横方向マージン | -| `behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop` | double | 軌道内のクルーズ障害物の最大障害物速度 | -| `behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold` | double | 軌道外のクルーズ障害物の最大障害物速度 | -| `behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold` | double | 自車と障害物が衝突する最大重複時間 | +| パラメータ | 型 | 説明 | +| ------------------------------------------------------------------------------------ | ------ | ------------------------------------------------------ | +| `common.cruise_obstacle_type.inside.unknown` | bool | クルーズに対して、不明なオブジェクトを考慮するフラグ | +| `common.cruise_obstacle_type.inside.car` | bool | クルーズに対して、乗用車オブジェクトを考慮するフラグ | +| `common.cruise_obstacle_type.inside.truck` | bool | クルーズに対して、トラックオブジェクトを考慮するフラグ | +| ... | bool | ... | +| `common.cruise_obstacle_type.outside.unknown` | bool | クルーズに対して、不明なオブジェクトを考慮するフラグ | +| `common.cruise_obstacle_type.outside.car` | bool | クルーズに対して、乗用車オブジェクトを考慮するフラグ | +| `common.cruise_obstacle_type.outside.truck` | bool | クルーズに対して、トラックオブジェクトを考慮するフラグ | +| ... | bool | ... | +| `behavior_determination.cruise.max_lat_margin` | double | クルーズ障害物の最大横方向マージン | +| `behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop` | double | 軌道内のクルーズ障害物の最大障害物速度 | +| `behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold` | double | 軌道外のクルーズ障害物の最大障害物速度 | +| `behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold` | double | 自車と障害物が衝突する最大重複時間 | ##### エゴ車の車線へ割り込んでくる可能性のある車両への譲歩 @@ -117,7 +115,7 @@ struct Obstacle 以下の条件を満たす障害物は、譲歩(巡航)の障害物として判断されます。 - 物体タイプが `common.cruise_obstacle_type.*` に従って巡航用であり、速度が `behavior_determination.cruise.yield.stopped_obstacle_velocity_threshold` より大きい。 -- 物体がエゴ車の軌跡を横断していない(*1)。 +- 物体がエゴ車の軌跡を横断していない(\*1)。 - 移動中の障害物の前に `common.cruise_obstacle_type.*` タイプの別の停止障害物がある。 - 両方の障害物間の横方向距離(エゴ車の軌跡を基準とする)が `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` 未満である。 - 移動中および停止中の障害物は両方、エゴ車の軌跡からそれぞれ横方向距離で `behavior_determination.cruise.yield.lat_distance_threshold` と `behavior_determination.cruise.yield.lat_distance_threshold` + `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` 内にある。 @@ -132,19 +130,19 @@ struct Obstacle - 物体からエゴ車の軌跡への横方向距離が `behavior_determination.stop.max_lat_margin` 未満である。 - エゴ車の軌跡に沿った物体速度が `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` より小さい。 - 物体は - - エゴ車の軌跡を横断していない(*1) + - エゴ車の軌跡を横断していない(\*1) - 速度が `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` 未満 - - 衝突時刻マージンが十分に大きい(*2)。 - -| パラメーター | 型 | 説明 | -| -------------------------------------------------------------------- | ------ | -------------------------------------------- | -| `common.stop_obstacle_type.unknown` | ブール | 停止時の未知の障害物として考慮するフラグ | -| `common.stop_obstacle_type.car` | ブール | 停止時の不明な障害物として考慮するフラグ | -| `common.stop_obstacle_type.truck` | ブール | 停止時の不明な障害物として考慮するフラグ | -| ... | ブール | ... | -| `behavior_determination.stop.max_lat_margin` | double | 停止障害物の最大横方向マージン | -| `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` | double | 無視する最大横断障害物速度 | -| `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` | double | 停止時の最大障害物速度 | + - 衝突時刻マージンが十分に大きい(\*2)。 + +| パラメーター | 型 | 説明 | +| ------------------------------------------------------------------------ | ------ | ---------------------------------------- | +| `common.stop_obstacle_type.unknown` | ブール | 停止時の未知の障害物として考慮するフラグ | +| `common.stop_obstacle_type.car` | ブール | 停止時の不明な障害物として考慮するフラグ | +| `common.stop_obstacle_type.truck` | ブール | 停止時の不明な障害物として考慮するフラグ | +| ... | ブール | ... | +| `behavior_determination.stop.max_lat_margin` | double | 停止障害物の最大横方向マージン | +| `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` | double | 無視する最大横断障害物速度 | +| `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` | double | 停止時の最大障害物速度 | #### 減速対象車両の特定 @@ -153,13 +151,13 @@ struct Obstacle - オブジェクトタイプが `common.slow_down_obstacle_type.*` に従って減速対象である。 - オブジェクトから自車軌跡までの横方向距離が `behavior_determination.slow_down.max_lat_margin` 未満である。 -| パラメータ | 型 | 説明 | -| ---------------------------------------------- | ------ | ------------------------------------------------------ | -| `common.slow_down_obstacle_type.unknown` | bool | 不明なオブジェクトを減速で考慮するフラグ | -| `common.slow_down_obstacle_type.car` | bool | 不明なオブジェクトを減速で考慮するフラグ | -| `common.slow_down_obstacle_type.truck` | bool | 不明なオブジェクトを減速で考慮するフラグ | -| ... | bool | ... | -| `behavior_determination.slow_down.max_lat_margin` | double | 減速障害物の最大横マージン | +| パラメータ | 型 | 説明 | +| ------------------------------------------------- | ------ | ---------------------------------------- | +| `common.slow_down_obstacle_type.unknown` | bool | 不明なオブジェクトを減速で考慮するフラグ | +| `common.slow_down_obstacle_type.car` | bool | 不明なオブジェクトを減速で考慮するフラグ | +| `common.slow_down_obstacle_type.truck` | bool | 不明なオブジェクトを減速で考慮するフラグ | +| ... | bool | ... | +| `behavior_determination.slow_down.max_lat_margin` | double | 減速障害物の最大横マージン | #### メモ @@ -167,8 +165,8 @@ struct Obstacle 交差障害物は、自己車両の軌道に対するヨー角が `behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold` より小さい物体である。 -| Parameter | Type | Description | -|---|---|---| +| Parameter | Type | Description | +| ------------------------------------------------------------------------ | ------ | ---------------------------------------------------------------------------------------------- | | `behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold` | double | 自車軌跡に対する障害物の最大角度。この角度を超えると障害物が軌跡を横切っていると判断する [rad] | ##### \*2: 충돌 시간 여유 부족 @@ -177,17 +175,17 @@ struct Obstacle 그런 다음 충돌 영역 내에 자차가 진입할 시간과 장애물이 충돌 영역 내에 진입하는 시간의 차이인 충돌 시간 여유를 계산합니다. 이 여유 시간이 `behavior_determination.stop.crossing_obstacle.collision_time_margin`보다 작으면 여유가 부족합니다. -| パラメータ | タイプ | 説明 | -| ------------------------------------------------- | ------ | ------------------------------------------------------- | -| `behavior_determination.stop.crossing_obstacle.collision_time_margin` | double | 自車と障害物との最大衝突時間マージン | +| パラメータ | タイプ | 説明 | +| --------------------------------------------------------------------- | ------ | ------------------------------------ | +| `behavior_determination.stop.crossing_obstacle.collision_time_margin` | double | 自車と障害物との最大衝突時間マージン | ### Stop Planning -| パラメータ | 型 | 説明 | -| -------------------------------------- | ------ | ------------------------------------------------------------------------------------------ | -| `common.min_strong_accel` | double | 自車の停止に必要な最小加速度 [m/ss] | -| `common.safe_distance_margin` | double | 障害物との安全距離 [m] | -| `common.terminal_safe_distance_margin` | double | 安全距離の範囲を超えない、障害物との最終安全距離 [m] | +| パラメータ | 型 | 説明 | +| -------------------------------------- | ------ | ---------------------------------------------------- | +| `common.min_strong_accel` | double | 自車の停止に必要な最小加速度 [m/ss] | +| `common.safe_distance_margin` | double | 障害物との安全距離 [m] | +| `common.terminal_safe_distance_margin` | double | 安全距離の範囲を超えない、障害物との最終安全距離 [m] | 停止計画の役割は、静止車両物体または動的/静止非車両物体と安全な距離を保つことです。 @@ -197,9 +195,9 @@ struct Obstacle ### クルーズプランニング -| パラメータ | 型 | 説明 | -| ------------------------------ | ------ | --------------------------------------------- | -| `common.safe_distance_margin` | double | 定速走行時の障害物との最小距離 [m] | +| パラメータ | 型 | 説明 | +| ----------------------------- | ------ | ---------------------------------- | +| `common.safe_distance_margin` | double | 定速走行時の障害物との最小距離 [m] | **クルーズプランニング** @@ -214,11 +212,11 @@ $$ ここで、$d_{rss}$ は計算された安全車間距離、$t_{idling}$ は先行車両の減速を自己車両が検出するまでのアイドリング時間、$v_{ego}$ は自己車両の現在の速度、$v_{obstacle}$ は先行障害物の現在の速度、$a_{ego}$ は自己車両の加速度、$a_{obstacle}$ は障害物の加速度と仮定します。 これらの値は以下のとおりにパラメータ化されます。自己車両の最小加速度などの他の一般的な値は `common.param.yaml` で定義されています。 -| パラメータ | タイプ | 説明 | -|---|---|---| -| `common.idling_time` | double | 前走車の減速開始を自己車両が検出するまでのアイドル時間 [s] | -| `common.min_ego_accel_for_rss` | double | RSS時の自己車両の加速度 [m/ss] | -| `common.min_object_accel_for_rss` | double | RSS時の前方の障害物の加速度 [m/ss] | +| パラメータ | タイプ | 説明 | +| --------------------------------- | ------ | ---------------------------------------------------------- | +| `common.idling_time` | double | 前走車の減速開始を自己車両が検出するまでのアイドル時間 [s] | +| `common.min_ego_accel_for_rss` | double | RSS時の自己車両の加速度 [m/ss] | +| `common.min_object_accel_for_rss` | double | RSS時の前方の障害物の加速度 [m/ss] | 詳細な定式は以下のとおりです。 @@ -233,14 +231,14 @@ v_{target} & = max(v_{ego} + v_{add}, v_{min, cruise}) \end{align} $$ -| 変数 | 説明 | -| ----------------- | --------------------------------------- | -| `d` |障害物までの実際の距離 | -| `d_{rss}` |RSSに基づく障害物までの理想的な距離 | -| `v_{min, cruise}` | `min_cruise_target_vel` | -| `w_{acc}` | `output_ratio_during_accel` | -| `lpf(val)` | `val`にローパスフィルタを適用 | -| `pid(val)` | `val`にPIDを適用 | +| 変数 | 説明 | +| ----------------- | ----------------------------------- | +| `d` | 障害物までの実際の距離 | +| `d_{rss}` | RSSに基づく障害物までの理想的な距離 | +| `v_{min, cruise}` | `min_cruise_target_vel` | +| `w_{acc}` | `output_ratio_during_accel` | +| `lpf(val)` | `val`にローパスフィルタを適用 | +| `pid(val)` | `val`にPIDを適用 | ### 減速計画 @@ -248,8 +246,8 @@ Autowareの減速計画では、障害物やその他の危険な状況を回避 **コンポーネント** -* **Planningコンポーネント:** 障害物を検出し、減速計画を計算します。 -* **Executionコンポーネント:** 減速計画を実行し、車両を所定の速度まで減速します。 +- **Planningコンポーネント:** 障害物を検出し、減速計画を計算します。 +- **Executionコンポーネント:** 減速計画を実行し、車両を所定の速度まで減速します。 **アルゴリズム** @@ -264,41 +262,41 @@ Autowareの減速計画では、障害物やその他の危険な状況を回避 減速計画アルゴリズムは、次のパラメータで構成できます。 -* **最小減速距離:** 障害物との衝突を回避するために必要とされる最小減速距離 -* **最大減速率:** 車両が減速できる最大減速率 -* **目標速度:** 障害物との衝突を回避するために減速する目標速度 +- **最小減速距離:** 障害物との衝突を回避するために必要とされる最小減速距離 +- **最大減速率:** 車両が減速できる最大減速率 +- **目標速度:** 障害物との衝突を回避するために減速する目標速度 **制限事項** 減速計画アルゴリズムには次のような制限があります。 -* **センサーの制限:** 障害物の検出は、ライダーセンサーやカメラの能力に依存します。 -* **計算コスト:** 減速計画の計算は、大量の計算リソースを必要とする場合があります。 -* **環境の動的性:** 減速計画は、周囲環境の変化を考慮しません。 +- **センサーの制限:** 障害物の検出は、ライダーセンサーやカメラの能力に依存します。 +- **計算コスト:** 減速計画の計算は、大量の計算リソースを必要とする場合があります。 +- **環境の動的性:** 減速計画は、周囲環境の変化を考慮しません。 **アプリケーション** 減速計画は、次のような自動運転アプリケーションに使用できます。 -* **衝突回避:** 障害物との衝突を回避します。 -* **渋滞への対応:** 渋滞で安全な速度を維持します。 -* **停止交差点での停止:** 交差点で安全に停止します。 - -| パラメーター | タイプ | 説明 | -| ----------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `slow_down.labels` | vector(文字列) | 障害物のラベルに基づいた減速動作をカスタマイズするためのラベルのベクトル。各ラベルは、減速の適用時に異なる扱いを受ける障害物のタイプを表します。使用可能なラベルは次のとおりです(「default」(必須)、「unknown」、「car」、「truck」、「bus」、「trailer」、「motorcycle」、「bicycle」または「pedestrian」) | -| `slow_down.default.static.min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.static.max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.static.min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.static.max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.moving.min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.moving.max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.moving.min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.moving.max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | -| `(オプション) slow_down."ラベル".(static & moving).min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | -| `(オプション) slow_down."ラベル".(static & moving).max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | -| `(オプション) slow_down."ラベル".(static & moving).min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | -| `(オプション) slow_down."ラベル".(static & moving).max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | +- **衝突回避:** 障害物との衝突を回避します。 +- **渋滞への対応:** 渋滞で安全な速度を維持します。 +- **停止交差点での停止:** 交差点で安全に停止します。 + +| パラメーター | タイプ | 説明 | +| -------------------------------------------------------------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `slow_down.labels` | vector(文字列) | 障害物のラベルに基づいた減速動作をカスタマイズするためのラベルのベクトル。各ラベルは、減速の適用時に異なる扱いを受ける障害物のタイプを表します。使用可能なラベルは次のとおりです(「default」(必須)、「unknown」、「car」、「truck」、「bus」、「trailer」、「motorcycle」、「bicycle」または「pedestrian」) | +| `slow_down.default.static.min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.static.max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.static.min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.static.max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.moving.min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.moving.max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.moving.min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | +| `slow_down.default.moving.max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | +| `(オプション) slow_down."ラベル".(static & moving).min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | +| `(オプション) slow_down."ラベル".(static & moving).max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | +| `(オプション) slow_down."ラベル".(static & moving).min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | +| `(オプション) slow_down."ラベル".(static & moving).max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | 減速プランニングの役割は、障害物に近い軌跡のポイントに減速速度を挿入することです。障害物の種類(「slow_down.labels」を参照)に応じてパラメーターをカスタマイズすることができ、障害物が歩行者、自転車、車などであるかによって減速の動作を調整できます。各障害物タイプには「static」と「moving」のパラメーターセットがあり、障害物タイプとその動きに合わせて自己車両の減速レスポンスをカスタマイズできます。障害物が移動していると判断された場合、対応する「moving」パラメーターセットを使用して車両の減速を計算しますが、そうでない場合は「static」パラメーターを使用します。静的な「static」と移動中の「moving」の分離は、たとえば、視界を遮る可能性のある停止車両や、突然ドアを開ける可能性のある停止車両を追い越すときに大幅に減速するなど、自己車両の減速動作をカスタマイズするのに役立ちます。 @@ -308,13 +306,13 @@ Autowareの減速計画では、障害物やその他の危険な状況を回避 ![slow_down_velocity_calculation](./media/slow_down_velocity_calculation.svg) -| 変数 | 説明 | -| ---------- | ------------------------------------------------------ | -| `v_{out}` | 減速の計算速度 | -| `v_{min}` | `slow_down.min_lat_velocity` | -| `v_{max}` | `slow_down.max_lat_velocity` | -| `l_{min}` | `slow_down.min_lat_margin` | -| `l_{max}` | `slow_down.max_lat_margin` | +| 変数 | 説明 | +| ---------- | ------------------------------------------------- | +| `v_{out}` | 減速の計算速度 | +| `v_{min}` | `slow_down.min_lat_velocity` | +| `v_{max}` | `slow_down.max_lat_velocity` | +| `l_{min}` | `slow_down.min_lat_margin` | +| `l_{max}` | `slow_down.max_lat_margin` | | `l'_{max}` | `behavior_determination.slow_down.max_lat_margin` | 計算された速度は、障害物が「behavior_determination.slow_down.max_lat_margin」のある領域内にある軌跡に挿入されます。 @@ -330,7 +328,6 @@ Autowareの減速計画では、障害物やその他の危険な状況を回避 停止およびクルーズプランニング用のさまざまなアルゴリズムが実装され、ユースケースに応じてそのうちの1つが指定されます。 コアアルゴリズム実装「generateTrajectory」は、指定されたアルゴリズムに依存します。 - ```plantuml @startuml title onTrajectory @@ -376,8 +373,8 @@ stop 現在は、PIDベースのプランナのみがサポートされています。 各プランナについては以下で説明します。 -| パラメータ | タイプ | 説明 | -| ------------------------ | ------ | ------------------------------------------------- | +| パラメータ | タイプ | 説明 | +| ------------------------ | ------ | -------------------------------------------------- | | `common.planning_method` | string | CruiseとStop計画アルゴリズム。「pid_base」から選択 | ### PIDベースプランナ @@ -386,8 +383,8 @@ stop `pid_based_planner`名前空間で、 -| パラメーター | タイプ | 説明 | -|---|---|---| +| パラメーター | タイプ | 説明 | +| ------------------------------------------------- | ------ | ---------------------------------------------------- | | `obstacle_velocity_threshold_from_cruise_to_stop` | double | 定速走行から停止へと移行する際の障害物速度閾値 [m/s] | 停止プランニングでは、障害物を1つだけ対象にします。 @@ -400,14 +397,14 @@ stop `pid_based_planner` 名前空間では、 -| パラメータ | 型 | 説明 | -| --------------------------- | ------ | -------------------------------------------------------------------------------------------------------- | -| `kp` | double | PID制御のPゲイン [-] | -| `ki` | double | PID制御のIゲイン [-] | -| `kd` | double | PID制御のDゲイン [-] | -| `output_ratio_during_accel` | double | 加速時に、先行車両を追従するために、出力速度にこの係数を乗算します。 [-] | -| `vel_to_acc_weight` | double | 目標加速度は目標速度 \* `vel_to_acc_weight` です。 [-] | -| `min_cruise_target_vel` | double | 定速走行中の最低目標速度 [m/s] | +| パラメータ | 型 | 説明 | +| --------------------------- | ------ | ------------------------------------------------------------------------ | +| `kp` | double | PID制御のPゲイン [-] | +| `ki` | double | PID制御のIゲイン [-] | +| `kd` | double | PID制御のDゲイン [-] | +| `output_ratio_during_accel` | double | 加速時に、先行車両を追従するために、出力速度にこの係数を乗算します。 [-] | +| `vel_to_acc_weight` | double | 目標加速度は目標速度 \* `vel_to_acc_weight` です。 [-] | +| `min_cruise_target_vel` | double | 定速走行中の最低目標速度 [m/s] | 安全距離を確保するために、目標速度と加速度が計算され、外部速度制限として速度平滑化パッケージ (`motion_velocity_smoother` が初期値) に送信されます。 目標速度と加速度はそれぞれ、基準安全距離と実際の距離の誤差に従って PID コントローラで計算されます。 @@ -425,8 +422,8 @@ stop 挙動モジュールと `autoware_obstacle_cruise_planner` 間の停止ポイントの非整合を解決するために、`common.min_behavior_stop_margin` が定義されています。 先に説明した横断歩道の場合は、`autoware_obstacle_cruise_planner` は、エゴと障害物の間に少なくとも `common.min_behavior_stop_margin` の距離で停止ポイントを挿入します。 -| パラメータ | 型 | 説明 | -| --------------------------------- | ------ | ---------------------------------------------------------------------- | +| パラメータ | 型 | 説明 | +| --------------------------------- | ---- | -------------------------------------------------------------------- | | `common.min_behavior_stop_margin` | 数値 | ビヘイビアモジュールが有効な状態で停止した場合の最小停止マージン [m] | ### ターゲット障害物内の最も近い停止障害物を保持する機能 @@ -437,8 +434,8 @@ stop 新しい停止障害物が現れて以前の最も近い障害物がリストから削除された場合、その障害物をターゲット障害物に再び追加しないことに注意してください。 -| パラメータ | タイプ | 説明 | -| ------------------------------------------------------------ | ------ | ------------------------------------------------ | +| パラメータ | タイプ | 説明 | +| ---------------------------------------------------------- | ------ | -------------------------------------- | | `behavior_determination.stop_obstacle_hold_time_threshold` | double | 最近接停止障害物を保持する最大時間 [s] | ## デバッグ方法 @@ -453,4 +450,3 @@ stop - 現在、障害物の車線変更の予測パスでは障害物クルーズプランナーの精度を確保できません。したがって、`rough_detection_area`は小さい値に設定します。 - PIDベースプランナー - アルゴリズムは、自車が指定された目標速度を実現するかどうかが、速度スムージングパッケージ(既定では`motion_velocity_smoother`)に大きく依存します。速度スムージングパッケージを更新した場合は、車両の挙動を可能な限り注意してください。 - diff --git a/planning/autoware_obstacle_stop_planner/README.md b/planning/autoware_obstacle_stop_planner/README.md index 166a12fd05953..905143a7becc0 100644 --- a/planning/autoware_obstacle_stop_planner/README.md +++ b/planning/autoware_obstacle_stop_planner/README.md @@ -13,36 +13,36 @@ ### 入力トピック -| 名称 | タイプ | 説明 | -| --------------------------- | ------------------------------------------ | ------------ | -| `~/input/pointcloud` | `sensor_msgs::PointCloud2` | 障害物点群 | -| `~/input/trajectory` | `autoware_planning_msgs::Trajectory` | 経路 | +| 名称 | タイプ | 説明 | +| --------------------------- | -------------------------------------------- | -------------- | +| `~/input/pointcloud` | `sensor_msgs::PointCloud2` | 障害物点群 | +| `~/input/trajectory` | `autoware_planning_msgs::Trajectory` | 経路 | | `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | -| `~/input/odometry` | `nav_msgs::Odometry` | 車両速度 | -| `~/input/dynamic_objects` | `autoware_perception_msgs::PredictedObjects` | 動的物体 | +| `~/input/odometry` | `nav_msgs::Odometry` | 車両速度 | +| `~/input/dynamic_objects` | `autoware_perception_msgs::PredictedObjects` | 動的物体 | | `~/input/expand_stop_range` | `tier4_planning_msgs::msg::ExpandStopRange` | 停止範囲の拡張 | ### 出力トピック -| 名称 | タイプ | 説明 | -|---|---|---| -| `~output/trajectory` | autoware_planning_msgs::Trajectory | 走行軌跡 | +| 名称 | タイプ | 説明 | +| ---------------------- | ------------------------------------ | -------------------- | +| `~output/trajectory` | autoware_planning_msgs::Trajectory | 走行軌跡 | | `~output/stop_reasons` | tier4_planning_msgs::StopReasonArray | 停止を引き起こす理由 | ### 共通パラメータ {{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/common.schema.json") | ja-markdown }} -| パラメータ | 型 | 説明 | -|---|---|---| -| `enable_slow_down` | bool | 低速化プランナを有効にする [-] | -| `max_velocity` | double | 最大速度 [m/s] | -| `chattering_threshold` | double | 障害物が消滅しても、停止判定を一定時間続ける [s](チャタリング防止) | -| `enable_z_axis_obstacle_filtering` | bool | z軸(高さ)方向の障害物をフィルタする [-] | -| `z_axis_filtering_buffer` | double | z軸フィルタのための追加バッファ [m] | -| `use_predicted_objects` | bool | 衝突検出と減速検出に予測オブジェクトを使用する [-] | +| パラメータ | 型 | 説明 | +| -------------------------------------- | ------ | ------------------------------------------------------------------------------------------------ | +| `enable_slow_down` | bool | 低速化プランナを有効にする [-] | +| `max_velocity` | double | 最大速度 [m/s] | +| `chattering_threshold` | double | 障害物が消滅しても、停止判定を一定時間続ける [s](チャタリング防止) | +| `enable_z_axis_obstacle_filtering` | bool | z軸(高さ)方向の障害物をフィルタする [-] | +| `z_axis_filtering_buffer` | double | z軸フィルタのための追加バッファ [m] | +| `use_predicted_objects` | bool | 衝突検出と減速検出に予測オブジェクトを使用する [-] | | `predicted_object_filtering_threshold` | double | 予測オブジェクトをフィルタするための閾値 [有効なのはpublish_obstacle_polygon trueの場合のみ] [m] | -| `publish_obstacle_polygon` | bool | use_predicted_objectsがtrueの場合、ノードが衝突ポリゴンを公開する [-] | +| `publish_obstacle_polygon` | bool | use_predicted_objectsがtrueの場合、ノードが衝突ポリゴンを公開する [-] | ## 障害物停止プランナー @@ -94,24 +94,23 @@ #### 停止位置 -| パラメータ | データ型 | 説明 | -|---|---|---| -| `max_longitudinal_margin` | double | 障害物と本車両前面とのマージン [m] | -| `max_longitudinal_margin_behind_goal` | double | 停止点がゴールの後ろにある場合の障害物と本車両前面とのマージン [m] | -| `min_longitudinal_margin` | double | `max_longitudinal_margin` 内に障害物がある場合、モジュールは停止マージンの値を `min_longitudinal_margin` [m] に設定します | -| `hold_stop_margin_distance` | double | 再起動防止のパラメータ(上のセクションを参照) [m] | +| パラメータ | データ型 | 説明 | +| ------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------- | +| `max_longitudinal_margin` | double | 障害物と本車両前面とのマージン [m] | +| `max_longitudinal_margin_behind_goal` | double | 停止点がゴールの後ろにある場合の障害物と本車両前面とのマージン [m] | +| `min_longitudinal_margin` | double | `max_longitudinal_margin` 内に障害物がある場合、モジュールは停止マージンの値を `min_longitudinal_margin` [m] に設定します | +| `hold_stop_margin_distance` | double | 再起動防止のパラメータ(上のセクションを参照) [m] | #### 障害物検出領域 -| パラメータ | 型 | 説明 | -| -------------------------------------- | -------- | -------------------------------------------------------------------------------------------- | -| `lateral_margin` | double | 障害物検知領域の車輪軌跡からの横マージン [m] | -| `step_length` | double | 点群検索範囲のステップ長 [m] | -| `enable_stop_behind_goal_for_obstacle` | bool | 障害物検出のためにゴールレーンを超えてトラジェクトリを延長 | +| パラメータ | 型 | 説明 | +| -------------------------------------- | ------ | ---------------------------------------------------------- | +| `lateral_margin` | double | 障害物検知領域の車輪軌跡からの横マージン [m] | +| `step_length` | double | 点群検索範囲のステップ長 [m] | +| `enable_stop_behind_goal_for_obstacle` | bool | 障害物検出のためにゴールレーンを超えてトラジェクトリを延長 | ### フローチャート - ```plantuml @startuml title insertStopPoint @@ -176,27 +175,26 @@ $v_{target} = v_{min} + \frac{l_{ld} - l_{vw}/2}{l_{margin}} (v_{max} - v_{min} #### 減速区間 -| パラメーター | 型 | 説明 | -| ------------------------------ | ------ | ----------------------------------------------- | +| パラメーター | 型 | 説明 | +| ------------------------------ | ------ | -------------------------------- | | `longitudinal_forward_margin` | double | 自車前面と障害物間のマージン [m] | -| `longitudinal_backward_margin` | double | 自車後面と障害物間のマージン [m] | +| `longitudinal_backward_margin` | double | 自車後面と障害物間のマージン [m] | #### 障害物検知領域 -| パラメータ | タイプ | 説明 | -| ---------------- | ------ | ----------------------------------------------------------------------------------- | -| `lateral_margin` | double | 減速障害検出エリアの車両フットプリントからの横方向マージン [m] | +| パラメータ | タイプ | 説明 | +| ---------------- | ------ | -------------------------------------------------------------- | +| `lateral_margin` | double | 減速障害検出エリアの車両フットプリントからの横方向マージン [m] | #### 減速目標速度 -| パラメータ名 | 型 | 説明 | -| ------------------------- | ------ | ----------------------------------- | -| `max_slow_down_velocity` | double | 最大減速速度 [m/s] | -| `min_slow_down_velocity` | double | 最小減速速度 [m/s] | +| パラメータ名 | 型 | 説明 | +| ------------------------ | ------ | ------------------ | +| `max_slow_down_velocity` | double | 最大減速速度 [m/s] | +| `min_slow_down_velocity` | double | 最小減速速度 [m/s] | ### フローチャート - ```plantuml @startuml title insertDecelerationPoint @@ -229,42 +227,41 @@ stop `Adaptive Cruise Controller`モジュールは、軌道上に動的点群がある場合、軌道内の最大速度を組み込みます。最大速度の値は、自車速度、点群速度(=前走車速度)、および点群までの距離(=前走車までの距離)によって異なります。 -| パラメータ | 型 | 説明 | -| -------------------------------------------------------------- | --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `adaptive_cruise_control.use_object_to_estimate_vel` | bool | 物体の速度を推定するために動的な物体を使用するかどうか(osp.use_predicted_objectsがfalseの場合にのみ有効) | -| `adaptive_cruise_control.use_pcl_to_estimate_vel` | bool | 物体の速度を推定するために生の点群を使用するかどうか(osp.use_predicted_objectsがfalseの場合にのみ有効) | -| `adaptive_cruise_control.consider_obj_velocity` | bool | 追従走行時に目標速度を計算するために車両の速度を考慮するかどうか | -| `adaptive_cruise_control.obstacle_velocity_thresh_to_start_acc` | double | 前方障害物の速度がこの値を超えると追従走行を開始する [m/s] | -| `adaptive_cruise_control.obstacle_velocity_thresh_to_stop_acc` | double | 前方障害物の速度がこの値を下回るとACCを停止する [m/s] | -| `adaptive_cruise_control.emergency_stop_acceleration` | double | 緊急停止時の想定最小加速度(減速度)[m/ss] | -| `adaptive_cruise_control.emergency_stop_idling_time` | double | 緊急停止を開始するための想定停止時間 [s] | -| `adaptive_cruise_control.min_dist_stop` | double | 緊急停止の最小距離 [m] | -| `adaptive_cruise_control.obstacle_emergency_stop_acceleration` | double | 緊急停止時の想定最小加速度(減速度)[m/ss] | -| `adaptive_cruise_control.max_standard_acceleration` | double | 追従走行時の想定最大加速度 [m/ss] | -| `adaptive_cruise_control.min_standard_acceleration` | double | 追従走行時の想定最小加速度(減速度)[m/ss] | -| `adaptive_cruise_control.standard_idling_time` | double | 追従走行時に物体に対して反応する想定停止時間 [s] | -| `adaptive_cruise_control.min_dist_standard` | double | 追従走行時の最小距離 [m] | -| `adaptive_cruise_control.obstacle_min_standard_acceleration` | double | 前方障害物の想定最小加速度 [m/ss] | -| `adaptive_cruise_control.margin_rate_to_change_vel` | double | 目標速度を挿入するための余裕距離率 [-] | -| `adaptive_cruise_control.use_time_compensation_to_calc_distance` | bool | 前方車両との距離を計算するために時間補正を使用する | -| `adaptive_cruise_control.p_coefficient_positive` | double | PID制御における係数P(target_dist - current_dist >=0の場合に使用)[-] | -| `adaptive_cruise_control.p_coefficient_negative` | double | PID制御における係数P(target_dist - current_dist <0の場合に使用)[-] | -| `adaptive_cruise_control.d_coefficient_positive` | double | PID制御における係数D(delta_dist >=0の場合に使用)[-] | -| `adaptive_cruise_control.d_coefficient_negative` | double | PID制御における係数D(delta_dist <0の場合に使用)[-] | -| `adaptive_cruise_control.object_polygon_length_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の長さを延長する距離 [m] | -| `adaptive_cruise_control.object_polygon_width_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の幅を延長する距離 [m] | -| `adaptive_cruise_control.valid_estimated_vel_diff_time` | double | 点群を使用した速度推定で連続したポイントとして扱われる最大時間差 [s] | -| `adaptive_cruise_control.valid_vel_que_time` | double | 点群を使用した速度推定で使用される情報の時間幅 [s] | -| `adaptive_cruise_control.valid_estimated_vel_max` | double | 点群を使用した速度推定で有効な速度推定結果の最大値 [m/s] | -| `adaptive_cruise_control.valid_estimated_vel_min` | double | 点群を使用した速度推定で有効な速度推定結果の最小値 [m/s] | -| `adaptive_cruise_control.thresh_vel_to_stop` | double | ACCにより計算された最大速度がこの速度よりも低い場合、停止線を埋め込む [m/s] | -| `adaptive_cruise_control.lowpass_gain_of_upper_velocity` | double | 目標速度のローパスゲイン | -| `adaptive_cruise_control.use_rough_velocity_estimation:` | bool | 速度推定に失敗した場合にラフに速度を推定する(osp.use_predicted_objectsがfalseの場合にのみ有効) | -| `adaptive_cruise_control.rough_velocity_rate` | double | ラフな速度推定では、前方の車両の速度は自車位置の現在の速度 * この値として推定される | +| パラメータ | 型 | 説明 | +| ---------------------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------- | +| `adaptive_cruise_control.use_object_to_estimate_vel` | bool | 物体の速度を推定するために動的な物体を使用するかどうか(osp.use_predicted_objectsがfalseの場合にのみ有効) | +| `adaptive_cruise_control.use_pcl_to_estimate_vel` | bool | 物体の速度を推定するために生の点群を使用するかどうか(osp.use_predicted_objectsがfalseの場合にのみ有効) | +| `adaptive_cruise_control.consider_obj_velocity` | bool | 追従走行時に目標速度を計算するために車両の速度を考慮するかどうか | +| `adaptive_cruise_control.obstacle_velocity_thresh_to_start_acc` | double | 前方障害物の速度がこの値を超えると追従走行を開始する [m/s] | +| `adaptive_cruise_control.obstacle_velocity_thresh_to_stop_acc` | double | 前方障害物の速度がこの値を下回るとACCを停止する [m/s] | +| `adaptive_cruise_control.emergency_stop_acceleration` | double | 緊急停止時の想定最小加速度(減速度)[m/ss] | +| `adaptive_cruise_control.emergency_stop_idling_time` | double | 緊急停止を開始するための想定停止時間 [s] | +| `adaptive_cruise_control.min_dist_stop` | double | 緊急停止の最小距離 [m] | +| `adaptive_cruise_control.obstacle_emergency_stop_acceleration` | double | 緊急停止時の想定最小加速度(減速度)[m/ss] | +| `adaptive_cruise_control.max_standard_acceleration` | double | 追従走行時の想定最大加速度 [m/ss] | +| `adaptive_cruise_control.min_standard_acceleration` | double | 追従走行時の想定最小加速度(減速度)[m/ss] | +| `adaptive_cruise_control.standard_idling_time` | double | 追従走行時に物体に対して反応する想定停止時間 [s] | +| `adaptive_cruise_control.min_dist_standard` | double | 追従走行時の最小距離 [m] | +| `adaptive_cruise_control.obstacle_min_standard_acceleration` | double | 前方障害物の想定最小加速度 [m/ss] | +| `adaptive_cruise_control.margin_rate_to_change_vel` | double | 目標速度を挿入するための余裕距離率 [-] | +| `adaptive_cruise_control.use_time_compensation_to_calc_distance` | bool | 前方車両との距離を計算するために時間補正を使用する | +| `adaptive_cruise_control.p_coefficient_positive` | double | PID制御における係数P(target_dist - current_dist >=0の場合に使用)[-] | +| `adaptive_cruise_control.p_coefficient_negative` | double | PID制御における係数P(target_dist - current_dist <0の場合に使用)[-] | +| `adaptive_cruise_control.d_coefficient_positive` | double | PID制御における係数D(delta_dist >=0の場合に使用)[-] | +| `adaptive_cruise_control.d_coefficient_negative` | double | PID制御における係数D(delta_dist <0の場合に使用)[-] | +| `adaptive_cruise_control.object_polygon_length_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の長さを延長する距離 [m] | +| `adaptive_cruise_control.object_polygon_width_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の幅を延長する距離 [m] | +| `adaptive_cruise_control.valid_estimated_vel_diff_time` | double | 点群を使用した速度推定で連続したポイントとして扱われる最大時間差 [s] | +| `adaptive_cruise_control.valid_vel_que_time` | double | 点群を使用した速度推定で使用される情報の時間幅 [s] | +| `adaptive_cruise_control.valid_estimated_vel_max` | double | 点群を使用した速度推定で有効な速度推定結果の最大値 [m/s] | +| `adaptive_cruise_control.valid_estimated_vel_min` | double | 点群を使用した速度推定で有効な速度推定結果の最小値 [m/s] | +| `adaptive_cruise_control.thresh_vel_to_stop` | double | ACCにより計算された最大速度がこの速度よりも低い場合、停止線を埋め込む [m/s] | +| `adaptive_cruise_control.lowpass_gain_of_upper_velocity` | double | 目標速度のローパスゲイン | +| `adaptive_cruise_control.use_rough_velocity_estimation:` | bool | 速度推定に失敗した場合にラフに速度を推定する(osp.use_predicted_objectsがfalseの場合にのみ有効) | +| `adaptive_cruise_control.rough_velocity_rate` | double | ラフな速度推定では、前方の車両の速度は自車位置の現在の速度 * この値として推定される | ### フローチャート - ```plantuml @startuml title insertTargetVelocity() @@ -390,4 +387,3 @@ $d_{standard} = d_{margin_{standard}} + t_{idling_{standard}} \cdot v_{ego} + (- - `自適巡航制御` の速度推定アルゴリズムは、オブジェクト追跡モジュールに依存しています。オブジェクト追跡が失敗したり、追跡結果が誤っている場合、車両が危険な挙動をする可能性があることに注意してください。 - 後退走行では動作しませんが、入力されたパスをそのまま公開します。後退走行時に障害物に対して停止したい場合は、[obstacle_cruise_planner](../autoware_obstacle_cruise_planner/README.md) を使用してください。 - diff --git a/planning/autoware_path_optimizer/README.md b/planning/autoware_path_optimizer/README.md index 1fe72eedbd6c0..cfc7447f8a4e0 100644 --- a/planning/autoware_path_optimizer/README.md +++ b/planning/autoware_path_optimizer/README.md @@ -19,10 +19,10 @@ ### 入力 -| 名前 | タイプ | 説明 | -| ----------------- | ------------------------------- | ------------------------------------------------------ | -| `~/input/path` | autoware_planning_msgs/msg/Path | 参照パスと対応する走行可能領域 | -| `~/input/odometry` | nav_msgs/msg/Odometry | 自車の現在の速度 | +| 名前 | タイプ | 説明 | +| ------------------ | ------------------------------- | ------------------------------ | +| `~/input/path` | autoware_planning_msgs/msg/Path | 参照パスと対応する走行可能領域 | +| `~/input/odometry` | nav_msgs/msg/Odometry | 自車の現在の速度 | ### 出力 @@ -50,7 +50,7 @@ 計画コンポーネントは、次の経路検索アルゴリズムを使用します。 -- *Dijkstra法* +- _Dijkstra法_ - *A*法 ## 経路最適化 @@ -90,15 +90,14 @@ Autowareの計画コンポーネントは、ROSベースのアーキテクチャ - [Autoware 計画コンポーネントドキュメント](https://autoware.gitbooks.io/autoware.ai/content/wiki/planning.html) -| 名称 | 種類 | 説明 | -| --------------------- | --------------------------------- | ---------------------------------------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | 走行可能で衝突のない最適化された経路 | +| 名称 | 種類 | 説明 | +| --------------------- | ------------------------------------- | ------------------------------------ | +| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | 走行可能で衝突のない最適化された経路 | ## フローチャート 機能のフローチャートについては、以下で説明します。 - ```plantuml @startuml title pathCallback @@ -143,7 +142,6 @@ stop 以下のデータがプランニング用に作成されます。 - ```cpp struct PlannerData { @@ -281,4 +279,3 @@ _理由_ ## デバッグ方法 デバッグ方法は [こちら](docs/debug.md) に記載されています。 - diff --git a/planning/autoware_path_smoother/README.md b/planning/autoware_path_smoother/README.md index 8c41c46f338a3..a0df122dd1f0a 100644 --- a/planning/autoware_path_smoother/README.md +++ b/planning/autoware_path_smoother/README.md @@ -9,4 +9,3 @@ ### エラスティックバンド エラスティックバンドの詳細については、[こちら](docs/eb.md)を参照してください。 - diff --git a/planning/autoware_planning_test_manager/README.md b/planning/autoware_planning_test_manager/README.md index 62a12699780c7..0b28d47c3a6c3 100644 --- a/planning/autoware_planning_test_manager/README.md +++ b/planning/autoware_planning_test_manager/README.md @@ -12,17 +12,16 @@ ### 通常動作の確認 -テスト対象ノードについて、ノードが正しく動作し、後続のノードに必要なメッセージをパブリッシュすることを確認します。これを行うには、test\_nodeに必要なメッセージをパブリッシュし、ノードの出力が出力されていることを確認します。 +テスト対象ノードについて、ノードが正しく動作し、後続のノードに必要なメッセージをパブリッシュすることを確認します。これを行うには、test_nodeに必要なメッセージをパブリッシュし、ノードの出力が出力されていることを確認します。 ### 特殊な入力のロバスト性確認 -通常動作を確認した後、例外的な入力が与えられたときにテスト対象ノードがクラッシュしないことを確認します。これを行うには、test\_nodeから例外的な入力を提供し、ノードがクラッシュしないことを確認します。 +通常動作を確認した後、例外的な入力が与えられたときにテスト対象ノードがクラッシュしないことを確認します。これを行うには、test_nodeから例外的な入力を提供し、ノードがクラッシュしないことを確認します。 (WIP) ## 使用方法 - ```cpp TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) @@ -71,18 +70,18 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) ## 実装されたテスト -| ノード | テスト名 | 例外的入力 | 出力 | 例外的な入力パターン | -| --------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | -------------- | ------------------------------------------------------------------------------------- | -| autoware_planning_validator | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| velocity_smoother | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| obstacle_cruise_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| obstacle_stop_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| obstacle_velocity_limiter | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| path_optimizer | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| ノード | テスト名 | 例外的入力 | 出力 | 例外的な入力パターン | +| --------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | -------------- | ----------------------------------------------------------------------------- | +| autoware_planning_validator | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| velocity_smoother | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| obstacle_cruise_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| obstacle_stop_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| obstacle_velocity_limiter | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | +| path_optimizer | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | | scenario_selector | NodeTestWithExceptionTrajectoryLaneDrivingMode NodeTestWithExceptionTrajectoryParkingMode | trajectory | scenario | LANEDRIVING および PARKING シナリオの空、単一ポイント、重複ポイントを含むパス | -| freespace_planner | NodeTestWithExceptionRoute | route | trajectory | 空のルート | -| behavior_path_planner | NodeTestWithExceptionRoute NodeTestWithOffTrackEgoPose | route | route odometry | 空のルート オフレーン自己位置 | -| behavior_velocity_planner | NodeTestWithExceptionPathWithLaneID | path_with_lane_id | path | 空のパス | +| freespace_planner | NodeTestWithExceptionRoute | route | trajectory | 空のルート | +| behavior_path_planner | NodeTestWithExceptionRoute NodeTestWithOffTrackEgoPose | route | route odometry | 空のルート オフレーン自己位置 | +| behavior_velocity_planner | NodeTestWithExceptionPathWithLaneID | path_with_lane_id | path | 空のパス | ## 重要な注意事項 @@ -91,4 +90,3 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) ## 今後の拡張 / 未実装部分 (WIP) - diff --git a/planning/autoware_planning_topic_converter/README.md b/planning/autoware_planning_topic_converter/README.md index 74e4d1851efa8..8b1e6497d7bec 100644 --- a/planning/autoware_planning_topic_converter/README.md +++ b/planning/autoware_planning_topic_converter/README.md @@ -10,7 +10,6 @@ このパッケージ内のツールは、合成可能なROS 2コンポーネントノードとして提供されるので、既存のプロセスにスポーンしたり、起動ファイルから起動したり、コマンドラインから呼び出すことができます。 - ```xml @@ -25,12 +24,11 @@ ## パラメータ -| 名前 | 種別 | 説明 | -| :------------- | :----- | :--------------------------------------- | -| `input_topic` | 文字列 | 入力トピック名 | -| `output_topic` | 文字列 | 出力トピック名 | +| 名前 | 種別 | 説明 | +| :------------- | :----- | :------------- | +| `input_topic` | 文字列 | 入力トピック名 | +| `output_topic` | 文字列 | 出力トピック名 | ## 想定条件/既知の限界 ## 将来的に拡張予定の部分/未実装の部分 - diff --git a/planning/autoware_planning_validator/README.md b/planning/autoware_planning_validator/README.md index 8f68780e94144..8d9b3697d784a 100644 --- a/planning/autoware_planning_validator/README.md +++ b/planning/autoware_planning_validator/README.md @@ -30,6 +30,7 @@ ### 出力 `autoware_planning_validator` は次の出力を出力します: + - **/diagnostics** : このモジュールの診断ステータスに関する情報 - **/validation_status** : 軌道の検証ステータス @@ -37,20 +38,20 @@ `autoware_planning_validator` は次の入力を取ります: -| 名称 | タイプ | 説明 | -| -------------------- | --------------------------------- | ---------------------------------------------- | -| `~/input/kinematics` | nav_msgs/Odometry | 自車位置と速度 | +| 名称 | タイプ | 説明 | +| -------------------- | --------------------------------- | -------------------------------- | +| `~/input/kinematics` | nav_msgs/Odometry | 自車位置と速度 | | `~/input/trajectory` | autoware_planning_msgs/Trajectory | 本ノードで検証するターゲット軌跡 | ### 出力 次のものを出力します。 -| 名称 | タイプ | 説明 | -| ---------------------------- | ------------------------------------------ | ------------------------------------------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs/Trajectory | 検証済みの走行軌跡 | +| 名称 | タイプ | 説明 | +| ---------------------------- | ------------------------------------------ | --------------------------------------------------------------- | +| `~/output/trajectory` | autoware_planning_msgs/Trajectory | 検証済みの走行軌跡 | | `~/output/validation_status` | planning_validator/PlanningValidatorStatus | バリデータのステータスで、走行軌跡が有効/無効の理由を通知します | -| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告する診断 | +| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告する診断 | ## パラメータ @@ -58,12 +59,12 @@ ### システムパラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `invalid_trajectory_handling_type` | int | 無効な経路が見つかった場合の処理を設定します。
0: 無効でも経路を公開する
1: 経路の公開を停止する
2: 最後に検証済の経路を公開する。 | 0 | -| `publish_diag` | bool | 連続した無効な経路の数がこの閾値を超えると、DiagがERRORに設定されます。(例: threshold = 1の場合、たとえ経路が無効でも、次の経路が有効であればDiagはERRORになりません。) | true | -| `diag_error_count_threshold` | int | trueの場合、診断メッセージが公開されます。 | true | -| `display_on_terminal` | bool | エラーメッセージをターミナルに表示する | true | +| 名前 | タイプ | 説明 | デフォルト値 | +| ---------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `invalid_trajectory_handling_type` | int | 無効な経路が見つかった場合の処理を設定します。
0: 無効でも経路を公開する
1: 経路の公開を停止する
2: 最後に検証済の経路を公開する。 | 0 | +| `publish_diag` | bool | 連続した無効な経路の数がこの閾値を超えると、DiagがERRORに設定されます。(例: threshold = 1の場合、たとえ経路が無効でも、次の経路が有効であればDiagはERRORになりません。) | true | +| `diag_error_count_threshold` | int | trueの場合、診断メッセージが公開されます。 | true | +| `display_on_terminal` | bool | エラーメッセージをターミナルに表示する | true | ### アルゴリズムパラメータ @@ -71,19 +72,19 @@ インデックスが以下の閾値を超えた場合、入力軌跡は無効として検出されます。 -| 名前 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `thresholds.interval` | 数値 | 2つの近隣の経路ポイント間の距離の無効しきい値 [`m`] | 100.0 | -| `thresholds.relative_angle` | 数値 | 2つの近隣の経路ポイント間の相対角度の無効しきい値 [`rad`] | 2.0 | -| `thresholds.curvature` | 数値 | 各経路ポイントの曲率の無効しきい値 [`1/m`] | 1.0 | -| `thresholds.lateral_acc` | 数値 | 各経路ポイントの横加速度の無効しきい値 [`m/ss`] | 9.8 | -| `thresholds.longitudinal_max_acc` | 数値 | 各経路ポイントの最大縦加速度の無効しきい値 [`m/ss`] | 9.8 | -| `thresholds.longitudinal_min_acc` | 数値 | 各経路ポイントの最小縦減速度の無効しきい値 [`m/ss`] | -9.8 | -| `thresholds.steering` | 数値 | 各経路ポイントの操舵角の無効しきい値 [`rad`] | 1.414 | -| `thresholds.steering_rate` | 数値 | 各経路ポイントの操舵角速度の無効しきい値 [`rad/s`] | 10.0 | -| `thresholds.velocity_deviation` | 数値 | エゴの速度とエゴに最も近い経路ポイント間の速度偏差の無効しきい値 [`m/s`] | 100.0 | -| `thresholds.distance_deviation` | 数値 | エゴの位置とエゴに最も近い経路ポイント間の距離偏差の無効しきい値 [`m`] | 100.0 | -| `parameters.longitudinal_distance_deviation` | 数値 | エゴの位置と経路間の縦方向距離偏差の無効しきい値 [`m`] | 2.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +| -------------------------------------------- | ------ | ------------------------------------------------------------------------ | ------------ | +| `thresholds.interval` | 数値 | 2つの近隣の経路ポイント間の距離の無効しきい値 [`m`] | 100.0 | +| `thresholds.relative_angle` | 数値 | 2つの近隣の経路ポイント間の相対角度の無効しきい値 [`rad`] | 2.0 | +| `thresholds.curvature` | 数値 | 各経路ポイントの曲率の無効しきい値 [`1/m`] | 1.0 | +| `thresholds.lateral_acc` | 数値 | 各経路ポイントの横加速度の無効しきい値 [`m/ss`] | 9.8 | +| `thresholds.longitudinal_max_acc` | 数値 | 各経路ポイントの最大縦加速度の無効しきい値 [`m/ss`] | 9.8 | +| `thresholds.longitudinal_min_acc` | 数値 | 各経路ポイントの最小縦減速度の無効しきい値 [`m/ss`] | -9.8 | +| `thresholds.steering` | 数値 | 各経路ポイントの操舵角の無効しきい値 [`rad`] | 1.414 | +| `thresholds.steering_rate` | 数値 | 各経路ポイントの操舵角速度の無効しきい値 [`rad/s`] | 10.0 | +| `thresholds.velocity_deviation` | 数値 | エゴの速度とエゴに最も近い経路ポイント間の速度偏差の無効しきい値 [`m/s`] | 100.0 | +| `thresholds.distance_deviation` | 数値 | エゴの位置とエゴに最も近い経路ポイント間の距離偏差の無効しきい値 [`m`] | 100.0 | +| `parameters.longitudinal_distance_deviation` | 数値 | エゴの位置と経路間の縦方向距離偏差の無効しきい値 [`m`] | 2.0 | #### パラメータ @@ -91,4 +92,3 @@ | `parameters.forward_trajectory_length_acceleration` | double | この値は、必要な軌道長の算出に使用されます。 | -5.0 | | `parameters.forward_trajectory_length_margin` | double | 自車が軌道の終点をわずかに過ぎてもエラーが発生しないようにするための、必要な軌道長の余白。 | 2.0 | - diff --git a/planning/autoware_remaining_distance_time_calculator/README.md b/planning/autoware_remaining_distance_time_calculator/README.md index 796ba78ced9dc..75ec356b1c942 100644 --- a/planning/autoware_remaining_distance_time_calculator/README.md +++ b/planning/autoware_remaining_distance_time_calculator/README.md @@ -11,9 +11,9 @@ ### モジュールパラメータ -| 名称 | 型 | デフォルト値 | 説明 | -| ------------- | ------ | ------------- | --------------------------- | -| `update_rate` | double | 10.0 | タイマーコールバック周期 [Hz] | +| 名称 | 型 | デフォルト値 | 説明 | +| ------------- | ------ | ------------ | ----------------------------- | +| `update_rate` | double | 10.0 | タイマーコールバック周期 [Hz] | ### 内部動作 @@ -37,4 +37,3 @@ - 残最短経路を検索するために定期的にグラフを探索するのではなく、より効率的な方法で距離残を計算します。 - より正確な時間残計算のために、より高度なモーションモデルに取り組みます。 - diff --git a/planning/autoware_route_handler/README.md b/planning/autoware_route_handler/README.md index bc34558c6b7cb..95d4dd90ae5d2 100644 --- a/planning/autoware_route_handler/README.md +++ b/planning/autoware_route_handler/README.md @@ -16,4 +16,3 @@ ![lane_change_test_route](./images/lane_change_test_route.svg) - この経路は `autoware_test_utils\test_map` から取得できるマップに基づいています。 - diff --git a/planning/autoware_rtc_interface/README.md b/planning/autoware_rtc_interface/README.md index 7f562b3a73606..86e4e3fd50fa3 100644 --- a/planning/autoware_rtc_interface/README.md +++ b/planning/autoware_rtc_interface/README.md @@ -8,7 +8,6 @@ RTCインタフェースは、ビヘイビアプランニングモジュール ### 使用例 - ```c++ // Generate instance (in this example, "intersection" is selected) autoware::rtc_interface::RTCInterface rtc_interface(node, "intersection"); @@ -51,7 +50,6 @@ rtc_interface.removeCooperateStatus(uuid); ### RTCInterface (コンストラクター) - ```c++ autoware::rtc_interface::RTCInterface(rclcpp::Node & node, const std::string & name); ``` @@ -73,8 +71,6 @@ autoware::rtc_interface::RTCInterface(rclcpp::Node & node, const std::string & n ### publishCooperateStatus - - ```c++ autoware::rtc_interface::publishCooperateStatus(const rclcpp::Time & stamp) ``` @@ -93,7 +89,6 @@ autoware::rtc_interface::publishCooperateStatus(const rclcpp::Time & stamp) ### updateCooperateStatus - ```c++ autoware::rtc_interface::updateCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid, const bool safe, const double start_distance, const double finish_distance, const rclcpp::Time & stamp) ``` @@ -117,7 +112,6 @@ autoware::rtc_interface::updateCooperateStatus(const unique_identifier_msgs::msg ### removeCooperateStatus - ```c++ autoware::rtc_interface::removeCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid) ``` @@ -136,7 +130,6 @@ autoware::rtc_interface::removeCooperateStatus(const unique_identifier_msgs::msg ### clearCooperateStatus - ```c++ autoware::rtc_interface::clearCooperateStatus() ``` @@ -155,7 +148,6 @@ autoware::rtc_interface::clearCooperateStatus() ### isActivated - ```c++ autoware::rtc_interface::isActivated(const unique_identifier_msgs::msg::UUID & uuid) ``` @@ -176,7 +168,6 @@ autoware::rtc_interface::isActivated(const unique_identifier_msgs::msg::UUID & u ### isRegistered - ```c++ autoware::rtc_interface::isRegistered(const unique_identifier_msgs::msg::UUID & uuid) ``` @@ -200,4 +191,3 @@ RTCインターフェース用の[RTC Replayer](https://autowarefoundation.githu ## 想定/既知の制限 ## 将来の拡張/未実装の部分 - diff --git a/planning/autoware_scenario_selector/README.md b/planning/autoware_scenario_selector/README.md index 65e4181869000..493fe2d488a01 100644 --- a/planning/autoware_scenario_selector/README.md +++ b/planning/autoware_scenario_selector/README.md @@ -6,21 +6,21 @@ ### 入力トピック -| 名称 | タイプ | 説明 | -|---|---|---| -| `~input/lane_driving/trajectory` | `autoware_planning_msgs::Trajectory` | LaneDriving シナリオの軌道 | -| `~input/parking/trajectory` | `autoware_planning_msgs::Trajectory` | Parking シナリオの軌道 | -| `~input/lanelet_map` | `autoware_map_msgs::msg::LaneletMapBin` | | -| `~input/route` | `autoware_planning_msgs::LaneletRoute` | ルートと目標位置 | -| `~input/odometry` | `nav_msgs::Odometry` | 車両が停止しているかどうかを確認するため | -| `is_parking_completed` | ブール型(ROS のパラメータとして実装) | Parking の分割された軌跡がすべて公開されているかどうか | +| 名称 | タイプ | 説明 | +| -------------------------------- | --------------------------------------- | ------------------------------------------------------ | +| `~input/lane_driving/trajectory` | `autoware_planning_msgs::Trajectory` | LaneDriving シナリオの軌道 | +| `~input/parking/trajectory` | `autoware_planning_msgs::Trajectory` | Parking シナリオの軌道 | +| `~input/lanelet_map` | `autoware_map_msgs::msg::LaneletMapBin` | | +| `~input/route` | `autoware_planning_msgs::LaneletRoute` | ルートと目標位置 | +| `~input/odometry` | `nav_msgs::Odometry` | 車両が停止しているかどうかを確認するため | +| `is_parking_completed` | ブール型(ROS のパラメータとして実装) | Parking の分割された軌跡がすべて公開されているかどうか | ### 出力トピック -| 名前 | タイプ | 説明 | -| -------------------- | ---------------------------------- | ---------------------------------------------- | -| `~output/scenario` | tier4_planning_msgs::Scenario | 自車位置とアクティブ化されるシナリオ | -| `~output/trajectory` | autoware_planning_msgs::Trajectory | 通過する軌跡 | +| 名前 | タイプ | 説明 | +| -------------------- | ---------------------------------- | ------------------------------------ | +| `~output/scenario` | tier4_planning_msgs::Scenario | 自車位置とアクティブ化されるシナリオ | +| `~output/trajectory` | autoware_planning_msgs::Trajectory | 通過する軌跡 | ### 出力TFs @@ -38,7 +38,6 @@ ### フローチャート - ```plantuml @startuml title onTimer @@ -71,7 +70,6 @@ stop @enduml ``` - ```plantuml @startuml title Scenario Transition @@ -115,4 +113,3 @@ endif stop @enduml ``` - diff --git a/planning/autoware_static_centerline_generator/README.md b/planning/autoware_static_centerline_generator/README.md index 5f99e17ec0e44..1adc568a22658 100644 --- a/planning/autoware_static_centerline_generator/README.md +++ b/planning/autoware_static_centerline_generator/README.md @@ -25,6 +25,7 @@ 最適化されたセンターラインは、ベクターマップビルダーの操作から生成できます。 次のコマンドで``を指定して実行できます。 + ```bash # path planning server rosrun autoware_path_optimizer path_optimizer_node --api_path /autoware_path_optimizer/path_optimizer @@ -32,7 +33,6 @@ rosrun autoware_path_optimizer path_optimizer_node --api_path /a rosrun autoware_path_optimizer center_line_generator_node ``` - ```sh ros2 launch autoware_static_centerline_generator run_planning_server.launch.xml vehicle_model:= ``` @@ -49,7 +49,6 @@ FYI、HTTPサーバのポートIDはデフォルトで4010です。 - `` - `` - ```sh ros2 launch autoware_static_centerline_generator static_centerline_generator.launch.xml run_backgrond:=false lanelet2_input_file_path:= lanelet2_output_file_path:= start_lanelet_id:= end_lanelet_id:= vehicle_model:= ``` @@ -80,4 +79,3 @@ ros2 launch autoware_static_centerline_generator static_centerline_generator.lau - 距離が 0.1 [m] 未満の場合: 赤 - 距離が 0.2 [m] 未満の場合: 緑 - 距離が 0.3 [m] 未満の場合: 青 - diff --git a/planning/autoware_surround_obstacle_checker/README.md b/planning/autoware_surround_obstacle_checker/README.md index a36b233549697..8e6ac4aac1cea 100644 --- a/planning/autoware_surround_obstacle_checker/README.md +++ b/planning/autoware_surround_obstacle_checker/README.md @@ -8,7 +8,6 @@ ### フローチャート - ```plantuml @startuml @@ -81,13 +80,13 @@ stop ### 入力 ``` -| 名前 | 種類 | 説明 | -| ------------------------------------------ | ------------------------------------------------- | --------------------------------------------------------------- | -| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避すべき障害物の点群 | -| `/perception/object_recognition/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 動的オブジェクト | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 現在のひねり | -| `/tf` | `tf2_msgs::msg::TFMessage` | TF | -| `/tf_static` | `tf2_msgs::msg::TFMessage` | 静的TF | +| 名前 | 種類 | 説明 | +| ---------------------------------------------- | ------------------------------------------------- | -------------------------------------- | +| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避すべき障害物の点群 | +| `/perception/object_recognition/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 動的オブジェクト | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 現在のひねり | +| `/tf` | `tf2_msgs::msg::TFMessage` | TF | +| `/tf_static` | `tf2_msgs::msg::TFMessage` | 静的TF | ### 出力 @@ -143,35 +142,34 @@ Controlモジュールは、以下の機能を担当します。 Autoware Stacは、オープンソース自動運転ソフトウェアスタックであり、ここで説明したアーキテクチャに基づいています。Autoware Stacは、Perception、Planning、Controlモジュールを提供し、自動運転車の開発を簡素化します。 -| 名前 | 型 | 説明 | -| --------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------- | -| `~/output/velocity_limit_clear_command` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | -| `~/output/max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | -| `~/output/no_start_reason` | `diagnostic_msgs::msg::DiagnosticStatus` | スタート不可理由 | -| `~/output/stop_reasons` | `tier4_planning_msgs::msg::StopReasonArray` | 停止理由 | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | -| `~/debug/footprint` | `geometry_msgs::msg::PolygonStamped` | 自車ベースフットプリント(可視化用) | -| `~/debug/footprint_offset` | `geometry_msgs::msg::PolygonStamped` | `surround_check_distance`オフセット付き自車フットプリント(可視化用) | +| 名前 | 型 | 説明 | +| --------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------- | +| `~/output/velocity_limit_clear_command` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | +| `~/output/max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | +| `~/output/no_start_reason` | `diagnostic_msgs::msg::DiagnosticStatus` | スタート不可理由 | +| `~/output/stop_reasons` | `tier4_planning_msgs::msg::StopReasonArray` | 停止理由 | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | +| `~/debug/footprint` | `geometry_msgs::msg::PolygonStamped` | 自車ベースフットプリント(可視化用) | +| `~/debug/footprint_offset` | `geometry_msgs::msg::PolygonStamped` | `surround_check_distance`オフセット付き自車フットプリント(可視化用) | | `~/debug/footprint_recover_offset` | `geometry_msgs::msg::PolygonStamped` | `surround_check_recover_distance`オフセット付き自車フットプリント(可視化用) | ## パラメータ {{ json_to_markdown("planning/autoware_surround_obstacle_checker/schema/surround_obstacle_checker.schema.json") }} -| 名前 | タイプ | 説明 | デフォルト値 | -| :----------------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------- | -| `enable_check` | `bool` | 対象オブジェクトを障害物チェックのターゲットに含めてよいかどうかを示します。 | オブジェクト: `true`、点群: `false` | -| `surround_check_front_distance` | `bool` | この前方距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | -| `surround_check_side_distance` | `double` | この側面距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | -| `surround_check_back_distance` | `double` | この後方距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | -| `surround_check_hysteresis_distance` | `double` | `surround_check_xxx_distance`プラスこの追加距離内にオブジェクトが存在しない場合、"non-surrounding-obstacle"ステータスに遷移します。[m] | 0.3 | -| `state_clear_time` | `double` | 停止状態を解除するためのしきい値[s] | 2.0 | -| `stop_state_ego_speed` | `double` | 自己車両が停止したかどうかをチェックするためのしきい値[m/s] | 0.1 | -| `stop_state_entry_duration_time` | `double` | 自己車両が停止したかどうかをチェックするためのしきい値[s] | 0.1 | -| `publish_debug_footprints` | `bool` | オフセットあり/なしで車両のフットプリントを公開します。 | `true` | +| 名前 | タイプ | 説明 | デフォルト値 | +| :----------------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------- | +| `enable_check` | `bool` | 対象オブジェクトを障害物チェックのターゲットに含めてよいかどうかを示します。 | オブジェクト: `true`、点群: `false` | +| `surround_check_front_distance` | `bool` | この前方距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | +| `surround_check_side_distance` | `double` | この側面距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | +| `surround_check_back_distance` | `double` | この後方距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | +| `surround_check_hysteresis_distance` | `double` | `surround_check_xxx_distance`プラスこの追加距離内にオブジェクトが存在しない場合、"non-surrounding-obstacle"ステータスに遷移します。[m] | 0.3 | +| `state_clear_time` | `double` | 停止状態を解除するためのしきい値[s] | 2.0 | +| `stop_state_ego_speed` | `double` | 自己車両が停止したかどうかをチェックするためのしきい値[m/s] | 0.1 | +| `stop_state_entry_duration_time` | `double` | 自己車両が停止したかどうかをチェックするためのしきい値[s] | 0.1 | +| `publish_debug_footprints` | `bool` | オフセットあり/なしで車両のフットプリントを公開します。 | `true` | ## 想定事項/既知の制限事項 停止計画を実行するには、障害物の点群データを取得する必要があります。 したがって、障害物が死角にある場合は停止計画を実行しません。 - diff --git a/planning/autoware_velocity_smoother/README.md b/planning/autoware_velocity_smoother/README.md index 0bdfec51b1b6e..ce175ba51f08c 100644 --- a/planning/autoware_velocity_smoother/README.md +++ b/planning/autoware_velocity_smoother/README.md @@ -51,12 +51,12 @@ 速度計画の初期値を計算します。 状況に応じた初期値が次の表のように計算されます。 -| シチュエーション | 初期速度 | 初期加速度 | -| ------------------------------------------------------------- | ---------------------- | ---------------------- | -| 第1計算 | 自車速度 | 0.0 | -| エンゲージ | `エンゲージ速度` | `エンゲージ加速度` | -| 計画速度と自車速度の逸脱 | 自車速度 | 前回の計画値 | -| ノーマル | 前回の計画値 | 前回の計画値 | +| シチュエーション | 初期速度 | 初期加速度 | +| ------------------------ | ---------------- | ------------------ | +| 第1計算 | 自車速度 | 0.0 | +| エンゲージ | `エンゲージ速度` | `エンゲージ加速度` | +| 計画速度と自車速度の逸脱 | 自車速度 | 前回の計画値 | +| ノーマル | 前回の計画値 | 前回の計画値 | #### 滑らかな速度 @@ -92,13 +92,13 @@ ### 入力 -| 名称 | 種別 | 説明 | -| --------------------------------------- | ------------------------------------ | -------------------------- | -| `~/input/trajectory` (*) | `autoware_planning_msgs/Trajectory` | 基準走行軌跡 | -| `/planning/scenario_planning/max_velocity` | `std_msgs/Float32` | 外部速度制限 [m/s] | -| `/localization/kinematic_state` | `nav_msgs/Odometry` | 自車位置 | -| `/tf` (*) | `tf2_msgs/TFMessage` | TF | -| `/tf_static` (*) | `tf2_msgs/TFMessage` | TF static | +| 名称 | 種別 | 説明 | +| ------------------------------------------ | ----------------------------------- | ------------------ | +| `~/input/trajectory` (\*) | `autoware_planning_msgs/Trajectory` | 基準走行軌跡 | +| `/planning/scenario_planning/max_velocity` | `std_msgs/Float32` | 外部速度制限 [m/s] | +| `/localization/kinematic_state` | `nav_msgs/Odometry` | 自車位置 | +| `/tf` (\*) | `tf2_msgs/TFMessage` | TF | +| `/tf_static` (\*) | `tf2_msgs/TFMessage` | TF static | ## 自動運転ソフトウェアに関するドキュメント @@ -108,33 +108,33 @@ Planningモジュールは、自動運転車両の経路計画を行います。以下のような機能があります。 -* マップデータに基づく経路の生成 -* 障害物回避 -* 交通ルール遵守 +- マップデータに基づく経路の生成 +- 障害物回避 +- 交通ルール遵守 ### Controlモジュール Controlモジュールは、車両の制御を行います。以下のような機能があります。 -* ステアリング制御 -* 加速制御 -* ブレーキ制御 +- ステアリング制御 +- 加速制御 +- ブレーキ制御 ### Perceptionモジュール Perceptionモジュールは、車両周囲の環境を認識します。以下のような機能があります。 -* LiDARデータの処理 -* カメラ画像の処理 -* レーダーデータの処理 +- LiDARデータの処理 +- カメラ画像の処理 +- レーダーデータの処理 ### システムアーキテクチャ Autowareのシステムアーキテクチャは以下のような階層構造になっています。 -* **Perception層:** Perceptionモジュールが含まれます。 -* **Planning層:** Planningモジュールが含まれます。 -* **Control層:** Controlモジュールが含まれます。 +- **Perception層:** Perceptionモジュールが含まれます。 +- **Planning層:** Planningモジュールが含まれます。 +- **Control層:** Controlモジュールが含まれます。 ### データフロー @@ -148,192 +148,201 @@ Autowareのシステムアーキテクチャは以下のような階層構造に Autowareには、以下のような安全性機能を備えています。 -* **障害物回避:** 障害物を検出し、自動的に回避します。 -* **衝突回避:** 車両との衝突を検出し、回避します。 -* **速度制限遵守:** 道路の速度制限を遵守します。 +- **障害物回避:** 障害物を検出し、自動的に回避します。 +- **衝突回避:** 車両との衝突を検出し、回避します。 +- **速度制限遵守:** 道路の速度制限を遵守します。 ### パフォーマンス評価 Autowareのパフォーマンスは、以下のような指標に基づいて評価されます。 -* **平均到達時間:** 目的地に到着するまでの平均時間 -* **走行距離:** 走行距離 -* **post resampling**障害物逸脱量 -* **post resampling**速度逸脱量 -* **post resampling**加速度逸脱量 +- **平均到達時間:** 目的地に到着するまでの平均時間 +- **走行距離:** 走行距離 +- **post resampling**障害物逸脱量 +- **post resampling**速度逸脱量 +- **post resampling**加速度逸脱量 ### 自車位置の推定 Autowareでは、以下のような方法で自車位置を推定しています。 -* GPS -* IMU -* オドメーター - -| 名前 | 型 | 説明 | -| ------------------------------------------------ | ------------------------------------ | -------------------------------------------------------------------------------------------------------------- | -| `~/output/trajectory` | `autoware_planning_msgs/Trajectory` | 変更された経路 | -| `/planning/scenario_planning/current_max_velocity` | `std_msgs/Float32` | 現在の外部速度制限 [m/s] | -| `~/closest_velocity` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画速度 (デバッグ用) | -| `~/closest_acceleration` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画加速度 (デバッグ用) | -| `~/closest_jerk` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画ジャーク (デバッグ用) | -| `~/debug/trajectory_raw` | `autoware_planning_msgs/Trajectory` | 抽出された経路 (デバッグ用) | -| `~/debug/trajectory_external_velocity_limited` | `autoware_planning_msgs/Trajectory` | 外部速度制限経路 (デバッグ用) | -| `~/debug/trajectory_lateral_acc_filtered` | `autoware_planning_msgs/Trajectory` | 横加速度制限経路 (デバッグ用) | -| `~/debug/trajectory_steering_rate_limited` | `autoware_planning_msgs/Trajectory` | ステアリング角速度制限経路 (デバッグ用) | -| `~/debug/trajectory_time_resampled` | `autoware_planning_msgs/Trajectory` | `post resampling`された経路 (デバッグ用) | -| `~/distance_to_stopline` | `std_msgs/Float32` | 自車位置から停止線までの距離 (最大 50 m) (デバッグ用) | -| `~/stop_speed_exceeded` | `std_msgs/Bool` | 最大速度が 0 の地点における計画速度がしきい値を超えている場合に `true` を公開する | +- GPS +- IMU +- オドメーター + +| 名前 | 型 | 説明 | +| -------------------------------------------------- | ----------------------------------- | --------------------------------------------------------------------------------- | +| `~/output/trajectory` | `autoware_planning_msgs/Trajectory` | 変更された経路 | +| `/planning/scenario_planning/current_max_velocity` | `std_msgs/Float32` | 現在の外部速度制限 [m/s] | +| `~/closest_velocity` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画速度 (デバッグ用) | +| `~/closest_acceleration` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画加速度 (デバッグ用) | +| `~/closest_jerk` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画ジャーク (デバッグ用) | +| `~/debug/trajectory_raw` | `autoware_planning_msgs/Trajectory` | 抽出された経路 (デバッグ用) | +| `~/debug/trajectory_external_velocity_limited` | `autoware_planning_msgs/Trajectory` | 外部速度制限経路 (デバッグ用) | +| `~/debug/trajectory_lateral_acc_filtered` | `autoware_planning_msgs/Trajectory` | 横加速度制限経路 (デバッグ用) | +| `~/debug/trajectory_steering_rate_limited` | `autoware_planning_msgs/Trajectory` | ステアリング角速度制限経路 (デバッグ用) | +| `~/debug/trajectory_time_resampled` | `autoware_planning_msgs/Trajectory` | `post resampling`された経路 (デバッグ用) | +| `~/distance_to_stopline` | `std_msgs/Float32` | 自車位置から停止線までの距離 (最大 50 m) (デバッグ用) | +| `~/stop_speed_exceeded` | `std_msgs/Bool` | 最大速度が 0 の地点における計画速度がしきい値を超えている場合に `true` を公開する | ## パラメータ ### 制約パラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `max_velocity` | `double` | 最大速度制限 [m/s] | 20.0 | -| `max_accel` | `double` | 最大加速度制限 [m/ss] | 1.0 | -| `min_decel` | `double` | 最小減速度制限 [m/ss] | -0.5 | -| `stop_decel` | `double` | 停止点での停止減速度値 [m/ss] | 0.0 | -| `max_jerk` | `double` | 最大ジャーク制限 [m/sss] | 1.0 | -| `min_jerk` | `double` | 最小ジャーク制限 [m/sss] | -0.5 | +| 名称 | タイプ | 説明 | デフォルト値 | +| -------------- | -------- | ----------------------------- | ------------ | +| `max_velocity` | `double` | 最大速度制限 [m/s] | 20.0 | +| `max_accel` | `double` | 最大加速度制限 [m/ss] | 1.0 | +| `min_decel` | `double` | 最小減速度制限 [m/ss] | -0.5 | +| `stop_decel` | `double` | 停止点での停止減速度値 [m/ss] | 0.0 | +| `max_jerk` | `double` | 最大ジャーク制限 [m/sss] | 1.0 | +| `min_jerk` | `double` | 最小ジャーク制限 [m/sss] | -0.5 | ### 外部速度制限パラメータ -| 名称 | 型 | 説明 | デフォルト値 | -| :----------------------------------------- | :------- | :-------------------------------------------------- | :------------ | -| `margin_to_insert_external_velocity_limit` | `double` | 外部速度制限を挿入するマージン距離 [m] | 0.3 | +| 名称 | 型 | 説明 | デフォルト値 | +| :----------------------------------------- | :------- | :------------------------------------- | :----------- | +| `margin_to_insert_external_velocity_limit` | `double` | 外部速度制限を挿入するマージン距離 [m] | 0.3 | ### カーブパラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -|:-------------------------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------- | -| `enable_lateral_acc_limit` | `bool` | 横方向加速度フィルタのオンとオフを切り替える。実行時に動的に切り替えることができる。 | true | -| `max_lateral_accel` | `double` | 最大横方向加速度限界 [m/ss] | 0.5 | -| `min_curve_velocity` | `double` | 横方向加速度限界での最小速度 [m/ss] | 2.74 | -| `decel_distance_before_curve` | `double` | 横方向加速度限界のためにカーブの前で減速する距離 [m] | 3.5 | -| `decel_distance_after_curve` | `double` | 横方向加速度限界のためにカーブの後で減速する距離 [m] | 2.0 | -| `min_decel_for_lateral_acc_lim_filter` | `double` | 横方向加速度フィルタによる急ブレーキを避ける減速限界 [m/ss]。強い制限は、障害物回避などによる急カーブ出現に対する減速応答を低下させる。 | -2.5 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| `enable_lateral_acc_limit` | `bool` | 横方向加速度フィルタのオンとオフを切り替える。実行時に動的に切り替えることができる。 | true | +| `max_lateral_accel` | `double` | 最大横方向加速度限界 [m/ss] | 0.5 | +| `min_curve_velocity` | `double` | 横方向加速度限界での最小速度 [m/ss] | 2.74 | +| `decel_distance_before_curve` | `double` | 横方向加速度限界のためにカーブの前で減速する距離 [m] | 3.5 | +| `decel_distance_after_curve` | `double` | 横方向加速度限界のためにカーブの後で減速する距離 [m] | 2.0 | +| `min_decel_for_lateral_acc_lim_filter` | `double` | 横方向加速度フィルタによる急ブレーキを避ける減速限界 [m/ss]。強い制限は、障害物回避などによる急カーブ出現に対する減速応答を低下させる。 | -2.5 | ### 結合と再計画パラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -| :----------------------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| `replan_vel_deviation` | `double` | 初期速度を再計画する速度逸脱量 [m/s] | 5.53 | -| `engage_velocity` | `double` | エンゲージ速度閾値 [m/s](軌跡速度がこの値より大きい場合、エンゲージ車両速度にこの速度を使用) | 0.25 | -| `engage_acceleration` | `double` | エンゲージ時使用する加速度 [m/ss] | 0.1 | -| `engage_exit_ratio` | `double` | 速度が engage_exit_ratio x engage_velocity を超えた場合、エンゲージシーケンスを通常の速度計画に戻す | 0.5 | -| `stop_dist_to_prohibit_engage` | `double` | 停止点がこの距離にある場合、車両が移動しないように速度を 0 に設定する [m] | 0.5 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :----------------------------- | :------- | :-------------------------------------------------------------------------------------------------- | :----------- | +| `replan_vel_deviation` | `double` | 初期速度を再計画する速度逸脱量 [m/s] | 5.53 | +| `engage_velocity` | `double` | エンゲージ速度閾値 [m/s](軌跡速度がこの値より大きい場合、エンゲージ車両速度にこの速度を使用) | 0.25 | +| `engage_acceleration` | `double` | エンゲージ時使用する加速度 [m/ss] | 0.1 | +| `engage_exit_ratio` | `double` | 速度が engage_exit_ratio x engage_velocity を超えた場合、エンゲージシーケンスを通常の速度計画に戻す | 0.5 | +| `stop_dist_to_prohibit_engage` | `double` | 停止点がこの距離にある場合、車両が移動しないように速度を 0 に設定する [m] | 0.5 | ### 停止速度パラメータ -| 名 | タイプ | 説明 | デフォルト値 | -| :-------------- | :------- | :------------------------------------------------------------------------------------- | :------------ | -| `stopping_velocity` | `double` | v=0 点に達する前にターゲット速度をこの値に変更します [m/s] | 2.778 | -| `stopping_distance` | `double` | `stopping_velocity` の距離 [m]。0 は `stopping_velocity` が適用されないことを表します。 | 0.0 | +| 名 | タイプ | 説明 | デフォルト値 | +| :------------------ | :------- | :-------------------------------------------------------------------------------------- | :----------- | +| `stopping_velocity` | `double` | v=0 点に達する前にターゲット速度をこの値に変更します [m/s] | 2.778 | +| `stopping_distance` | `double` | `stopping_velocity` の距離 [m]。0 は `stopping_velocity` が適用されないことを表します。 | 0.0 | ### 抽出パラメータ -| 名前 | 型 | 説明 | デフォルト値 | -| :-------------------- | :------- | :--------------------------------------------------------------- | :------------ | -| `extract_ahead_dist` | `double` | Planningに使用される前方軌跡距離 [m] | 200.0 | -| `extract_behind_dist` | `double` | Planningに使用される後方軌跡距離 [m] | 5.0 | -| `delta_yaw_threshold` | `double` | 自車位置と軌跡位置間の許容差変位角 [ラジアン] | 1.0472 | +| 名前 | 型 | 説明 | デフォルト値 | +| :-------------------- | :------- | :-------------------------------------------- | :----------- | +| `extract_ahead_dist` | `double` | Planningに使用される前方軌跡距離 [m] | 200.0 | +| `extract_behind_dist` | `double` | Planningに使用される後方軌跡距離 [m] | 5.0 | +| `delta_yaw_threshold` | `double` | 自車位置と軌跡位置間の許容差変位角 [ラジアン] | 1.0472 | ### 再サンプルパラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -| :----------------------------- | :------- | :---------------------------------------------------- | :------------ | -| `max_trajectory_length` | `double` | 軌道の再サンプリングのための最大長 [m] | 200.0 | -| `min_trajectory_length` | `double` | 軌道の再サンプリングのための最小長 [m] | 30.0 | -| `resample_time` | `double` | 再サンプリングの全体の時間 [s] | 10.0 | -| `dense_dt` | `double` | 緻密なサンプリングのための再サンプリングの時間間隔 [s] | 0.1 | -| `dense_min_interval_distance` | `double` | 緻密なサンプリングのための最小ポイント間距離 [m] | 0.1 | -| `sparse_dt` | `double` | まばらなサンプリングのための再サンプリングの時間間隔 [s] | 0.5 | -| `sparse_min_interval_distance` | `double` | まばらなサンプリングのための最小ポイント間距離 [m] | 4.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :----------------------------- | :------- | :------------------------------------------------------- | :----------- | +| `max_trajectory_length` | `double` | 軌道の再サンプリングのための最大長 [m] | 200.0 | +| `min_trajectory_length` | `double` | 軌道の再サンプリングのための最小長 [m] | 30.0 | +| `resample_time` | `double` | 再サンプリングの全体の時間 [s] | 10.0 | +| `dense_dt` | `double` | 緻密なサンプリングのための再サンプリングの時間間隔 [s] | 0.1 | +| `dense_min_interval_distance` | `double` | 緻密なサンプリングのための最小ポイント間距離 [m] | 0.1 | +| `sparse_dt` | `double` | まばらなサンプリングのための再サンプリングの時間間隔 [s] | 0.5 | +| `sparse_min_interval_distance` | `double` | まばらなサンプリングのための最小ポイント間距離 [m] | 4.0 | ### 'post resampling'用の再サンプリングパラメーター -| 名称 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `post_max_trajectory_length` | `double` | 再サンプリングの最大軌道長 [m] | 300.0 | -| `post_min_trajectory_length` | `double` | 再サンプリングの最小軌道長 [m] | 30.0 | -| `post_resample_time` | `double` | 密サンプリングの合計再サンプリング時間 [s] | 10.0 | -| `post_dense_dt` | `double` | 密サンプリングの再サンプリング時間間隔 [s] | 0.1 | -| `post_dense_min_interval_distance` | `double` | 密サンプリングの最小ポイント間隔 [m] | 0.1 | -| `post_sparse_dt` | `double` | 疎サンプリングの再サンプリング時間間隔 [s] | 0.1 | -| `post_sparse_min_interval_distance` | `double` | 疎サンプリングの最小ポイント間隔 [m] | 1.0 | +| 名称 | タイプ | 説明 | デフォルト値 | +| ----------------------------------- | -------- | ------------------------------------------ | ------------ | +| `post_max_trajectory_length` | `double` | 再サンプリングの最大軌道長 [m] | 300.0 | +| `post_min_trajectory_length` | `double` | 再サンプリングの最小軌道長 [m] | 30.0 | +| `post_resample_time` | `double` | 密サンプリングの合計再サンプリング時間 [s] | 10.0 | +| `post_dense_dt` | `double` | 密サンプリングの再サンプリング時間間隔 [s] | 0.1 | +| `post_dense_min_interval_distance` | `double` | 密サンプリングの最小ポイント間隔 [m] | 0.1 | +| `post_sparse_dt` | `double` | 疎サンプリングの再サンプリング時間間隔 [s] | 0.1 | +| `post_sparse_min_interval_distance` | `double` | 疎サンプリングの最小ポイント間隔 [m] | 1.0 | ### ステアリング角変化率パラメータの制限 ``` + ``` -| 名称 | タイプ | 説明 | デフォルト値 | -| :------------------------------- | :------- | :--------------------------------------------------------------------------------------- | :------------ | -| `enable_steering_rate_limit` | `bool` | ステアリング速度フィルタのオン/オフを切り替えます。ランタイム時に動的に切り替えられます。 | true | -| `max_steering_angle_rate` | `double` | 最大ステアリング角度速度 [degree/s] | 40.0 | -| `resample_ds` | `double` | Trajectory `post resampling` ポイント間の距離 [m] | 0.1 | -| `curvature_threshold` | `double` | 曲率 > `curvature_threshold` の場合、`steeringRateLimit` がトリガされます [1/m] | 0.02 | -| `curvature_calculation_distance` | `double` | 曲率計算中のポイントの距離 [m] | 1.0 | +| 名称 | タイプ | 説明 | デフォルト値 | +| :------------------------------- | :------- | :---------------------------------------------------------------------------------------- | :----------- | +| `enable_steering_rate_limit` | `bool` | ステアリング速度フィルタのオン/オフを切り替えます。ランタイム時に動的に切り替えられます。 | true | +| `max_steering_angle_rate` | `double` | 最大ステアリング角度速度 [degree/s] | 40.0 | +| `resample_ds` | `double` | Trajectory `post resampling` ポイント間の距離 [m] | 0.1 | +| `curvature_threshold` | `double` | 曲率 > `curvature_threshold` の場合、`steeringRateLimit` がトリガされます [1/m] | 0.02 | +| `curvature_calculation_distance` | `double` | 曲率計算中のポイントの距離 [m] | 1.0 | ### 最適化用の重み #### JerkFiltered -| 名称 | 型 | 説明 | デフォルト値 | -| :--------------- | :------ | :------------------------------------------- | :---------- | -| `jerk_weight` | `double` | ジャークの「滑らかさ」コストの重み | 10.0 | -| `over_v_weight` | `double` | 「速度制限逸脱」コストの重み | 100000.0 | -| `over_a_weight` | `double` | 「加速度逸脱量」コストの重み | 5000.0 | -| `over_j_weight` | `double` | 「ジャーク逸脱量」コストの重み | 1000.0 | +| 名称 | 型 | 説明 | デフォルト値 | +| :-------------- | :------- | :--------------------------------- | :----------- | +| `jerk_weight` | `double` | ジャークの「滑らかさ」コストの重み | 10.0 | +| `over_v_weight` | `double` | 「速度制限逸脱」コストの重み | 100000.0 | +| `over_a_weight` | `double` | 「加速度逸脱量」コストの重み | 5000.0 | +| `over_j_weight` | `double` | 「ジャーク逸脱量」コストの重み | 1000.0 | #### L2 -** Planning** +**Planning** + - トラジェクトリプランナーの最適化 - 制約の追加によってトラジェクトリプランニングの安定化 - クロスロードでの渋滞時の挙動の改善 - Scalingレイヤーでの速度、加速度の逸脱量に関するチェックの追加 -** Localization** +**Localization** + - ランタイムのパフォーマンスと精度を向上させるための改善 - ランタイムの更新によってIMUのバイアス推定の精度を高める - 障害物検知の性能を向上させるため、点群データを活用した道路のセグメンテーションの改善 -** perception** +**perception** + - 深層学習モデルを更新する - 物体検出の精度を向上させるために、データセットの拡張 - 『post resampling』におけるデータの品質向上 -** Control** +**Control** + - 車両の挙動をよりスムーズにする、ステアリング制御の改善 - 加速度、ヨー変化率に関する制御の改善 - Autowareのコントローラーのドメイン固有言語であるCLARAtyで、コントローラーの再実装 -** reality sensors** +**reality sensors** + - LiDARのノイズ低減のために、データ処理パイプラインの最適化 - カメラの露出制御の改善による、夜間や低照度条件における画像の品質向上 - センサーキャリブレーションに関するパイプラインの改善 -** visualization** +**visualization** + - 可視化ツールのアップグレードによる、より正確で情報が豊富な可視化 - データの取得と処理の効率を高めるキャッシュメカニズムの追加 -** core utils** +**core utils** + - シミュレーションとテスト用に、独自のデータ駆動型テストフレームワークの導入 - より効率的な『post resampling』のための、ポイントクラウドライブラリの最適化 -** self-driving** +**self-driving** + - 自車位置推定の向上による、全体的なパフォーマンスの向上 - パラメータの最適化による、様々な運転シナリオにおけるRobust性を向上 - Autowareのアーキテクチャのモジュール化と拡張性向上 -| 名前 | 型 | 説明 | デフォルト値 | -| :------------------- | :------- | :--------------------------------- | :------------ | -| `pseudo_jerk_weight` | `double` | 「スムーズさ」コストの重み | 100.0 | -| `over_v_weight` | `double` | 「速度制限超過」コストの重み | 100000.0 | -| `over_a_weight` | `double` | 「加速度制限超過」コストの重み | 1000.0 | +| 名前 | 型 | 説明 | デフォルト値 | +| :------------------- | :------- | :----------------------------- | :----------- | +| `pseudo_jerk_weight` | `double` | 「スムーズさ」コストの重み | 100.0 | +| `over_v_weight` | `double` | 「速度制限超過」コストの重み | 100000.0 | +| `over_a_weight` | `double` | 「加速度制限超過」コストの重み | 1000.0 | #### Linf @@ -343,9 +352,9 @@ Linfは、経路計画における障害物回避に用いられる Planning モ **入力** -* 自車位置 -* 目標位置 -* 周囲の障害物情報 +- 自車位置 +- 目標位置 +- 周囲の障害物情報 **処理** @@ -355,34 +364,34 @@ Linfは、経路計画における障害物回避に用いられる Planning モ **出力** -* 障害物回避経路 +- 障害物回避経路 **制約事項** -* **速度逸脱量:** 本モジュールは、速度逸脱量を考慮しません。 -* **加速度逸脱量:** 本モジュールは、加速度逸脱量を考慮しません。 -* **予測:** 本モジュールは、障害物の予測移動を考慮しません。 +- **速度逸脱量:** 本モジュールは、速度逸脱量を考慮しません。 +- **加速度逸脱量:** 本モジュールは、加速度逸脱量を考慮しません。 +- **予測:** 本モジュールは、障害物の予測移動を考慮しません。 **依存関係** -* **障害物検出モジュール:** 障害物マップの作成に使用されます。 -* **経路生成モジュール:** 障害物回避経路の生成に使用されます。 +- **障害物検出モジュール:** 障害物マップの作成に使用されます。 +- **経路生成モジュール:** 障害物回避経路の生成に使用されます。 **Autowareにおける用途** Autowareでは、Linfモジュールは、障害物回避Planningにおける重要なコンポーネントです。本モジュールは、障害物マップから安全で効率的な経路を計算し、自動運転車両に安全なナビゲーションを提供します。 -| 名前 | タイプ | 説明 | デフォルト値 | -|---|---|---|---| -| `pseudo_jerk_weight` | `double` | 「スムーズ性」コストの重み | 100.0 | -| `over_v_weight` | `double` | 「速度制限逸脱量」コストの重み | 100000.0 | -| `over_a_weight` | `double` | 「加速度制限逸脱量」コストの重み | 1000.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +| -------------------- | -------- | -------------------------------- | ------------ | +| `pseudo_jerk_weight` | `double` | 「スムーズ性」コストの重み | 100.0 | +| `over_v_weight` | `double` | 「速度制限逸脱量」コストの重み | 100000.0 | +| `over_a_weight` | `double` | 「加速度制限逸脱量」コストの重み | 1000.0 | ### その他 -| 名称 | 型 | 説明 | デフォルト値 | -| :---------------------------- | :------- | :------------------------------------------------------------------------------------------------------- | :------------ | -| `over_stop_velocity_warn_thr` | `double` | 停止点における最適化速度が入力速度を超えていると判断するための閾値 [m/s] | 1.389 | +| 名称 | 型 | 説明 | デフォルト値 | +| :---------------------------- | :------- | :----------------------------------------------------------------------- | :----------- | +| `over_stop_velocity_warn_thr` | `double` | 停止点における最適化速度が入力速度を超えていると判断するための閾値 [m/s] | 1.389 | ## 仮定 / 既知の限界 @@ -400,4 +409,4 @@ Autowareでは、Linfモジュールは、障害物回避Planningにおける重 [2] Y. Zhang, et al., "Toward a More Complete, Flexible, and Safer Speed Planning for Autonomous Driving via Convex Optimization", Sensors, vol. 18, no. 7, p. 2185, 2018, [10.3390/s18072185](https://doi.org/10.3390/s18072185) -## (オプション) 将来の拡張 / 未実装の部分 \ No newline at end of file +## (オプション) 将来の拡張 / 未実装の部分 diff --git a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md index 67d9d755b4e4a..b345fc8c1f6a8 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md @@ -33,9 +33,8 @@ ## パラメータ -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------------- | ---- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------- | -| execute_object_num | [-] | int | 自車進行車線上の回避対象の数がこの値より多い場合、本モジュールが起動します。 | 1 | -| execute_object_longitudinal_margin | [m] | double | [おそらく未使用] 自車と回避対象の距離がこの値よりも長い場合のみ、本モジュールが起動します。 | 0.0 | -| execute_only_when_lane_change_finish_before_object | [-] | bool | このフラグが`true`に設定されている場合、本モジュールは車線変更の終了点が回避対象の **後ろではない** 場合にのみ起動します。 | true | - +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------------- | ---- | ------ | -------------------------------------------------------------------------------------------------------------------------- | ------------ | +| execute_object_num | [-] | int | 自車進行車線上の回避対象の数がこの値より多い場合、本モジュールが起動します。 | 1 | +| execute_object_longitudinal_margin | [m] | double | [おそらく未使用] 自車と回避対象の距離がこの値よりも長い場合のみ、本モジュールが起動します。 | 0.0 | +| execute_only_when_lane_change_finish_before_object | [-] | bool | このフラグが`true`に設定されている場合、本モジュールは車線変更の終了点が回避対象の **後ろではない** 場合にのみ起動します。 | true | diff --git a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md index f471437f6ca75..33a74b6390e4c 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md @@ -15,10 +15,10 @@ そのため、本モジュールの名称には「動的」という言葉が使用されています。 以下の表に、各状況に対応する回避モジュールを記載します。 -| | 車線内での回避 | 車線外の外側からの回避 | -| :----------------------- | :------------------------------------------------------------------------: | :------------------------------------: | -| 未稼働オブジェクトの回避 | Avoidance Module
Dynamic Avoidance Module + Obstacle Avoidance Module | Avoidance Module | -| 稼働オブジェクトの回避 | Dynamic Avoidance Module + Obstacle Avoidance Module | モジュールなし (開発中) | +| | 車線内での回避 | 車線外の外側からの回避 | +| :----------------------- | :------------------------------------------------------------------------: | :---------------------: | +| 未稼働オブジェクトの回避 | Avoidance Module
Dynamic Avoidance Module + Obstacle Avoidance Module | Avoidance Module | +| 稼働オブジェクトの回避 | Dynamic Avoidance Module + Obstacle Avoidance Module | モジュールなし (開発中) | ## アルゴリズムのポリシー @@ -118,19 +118,18 @@ 開発中 -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :--------------------------------------------------------------- | :---- | :----- | :------------------------------------------------------------------ | :------------ | -| `target_object.car` | [-] | bool | 車の回避フラグ | true | -| `target_object.truck` | [-] | bool | トラックの回避フラグ | true | -| ... | [-] | bool | ... | ... | -| `target_object.min_obstacle_vel` | [m/s] | double | 回避する際の最小障害物速度 | 1.0 | -| `drivable_area_generation.lat_offset_from_obstacle` | [m] | double | 障害物からの回避用横方向オフセット | 0.8 | -| `drivable_area_generation.max_lat_offset_to_avoid` | [m] | double | 回避する際の最大横方向オフセット | 0.5 | -| `drivable_area_generation.overtaking_object.max_time_to_collision` | [s] | double | タイムトゥーコリジョンを計算する際の最大値 | 3.0 | -| `drivable_area_generation.overtaking_object.start_duration_to_avoid` | [s] | double | 障害物を通過する前に回避を考慮する期間 | 4.0 | -| `drivable_area_generation.overtaking_object.end_duration_to_avoid` | [s] | double | 障害物を通過した後に回避を考慮する期間 | 5.0 | -| `drivable_area_generation.overtaking_object.duration_to_hold_avoidance` | [s] | double | 障害物を通過した後に回避を保持する期間 | 3.0 | -| `drivable_area_generation.oncoming_object.max_time_to_collision` | [s] | double | タイムトゥーコリジョンを計算する際の最大値 | 3.0 | -| `drivable_area_generation.oncoming_object.start_duration_to_avoid` | [s] | double | 障害物を通過する前に回避を考慮する期間 | 9.0 | -| `drivable_area_generation.oncoming_object.end_duration_to_avoid` | [s] | double | 障害物を通過した後に回避を考慮する期間 | 0.0 | - +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :---------------------------------------------------------------------- | :---- | :----- | :----------------------------------------- | :----------- | +| `target_object.car` | [-] | bool | 車の回避フラグ | true | +| `target_object.truck` | [-] | bool | トラックの回避フラグ | true | +| ... | [-] | bool | ... | ... | +| `target_object.min_obstacle_vel` | [m/s] | double | 回避する際の最小障害物速度 | 1.0 | +| `drivable_area_generation.lat_offset_from_obstacle` | [m] | double | 障害物からの回避用横方向オフセット | 0.8 | +| `drivable_area_generation.max_lat_offset_to_avoid` | [m] | double | 回避する際の最大横方向オフセット | 0.5 | +| `drivable_area_generation.overtaking_object.max_time_to_collision` | [s] | double | タイムトゥーコリジョンを計算する際の最大値 | 3.0 | +| `drivable_area_generation.overtaking_object.start_duration_to_avoid` | [s] | double | 障害物を通過する前に回避を考慮する期間 | 4.0 | +| `drivable_area_generation.overtaking_object.end_duration_to_avoid` | [s] | double | 障害物を通過した後に回避を考慮する期間 | 5.0 | +| `drivable_area_generation.overtaking_object.duration_to_hold_avoidance` | [s] | double | 障害物を通過した後に回避を保持する期間 | 3.0 | +| `drivable_area_generation.oncoming_object.max_time_to_collision` | [s] | double | タイムトゥーコリジョンを計算する際の最大値 | 3.0 | +| `drivable_area_generation.oncoming_object.start_duration_to_avoid` | [s] | double | 障害物を通過する前に回避を考慮する期間 | 9.0 | +| `drivable_area_generation.oncoming_object.end_duration_to_avoid` | [s] | double | 障害物を通過した後に回避を考慮する期間 | 0.0 | diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md index 1ca2c53bcbd66..f2ca30e874e2b 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md @@ -12,7 +12,6 @@ ゴール変更が許可されていない場合は、指定された固定ゴールに駐車する(下の図の `fixed_goal_planner`)。 許可されている場合は、指定されたポリシー(例:車線の左右に駐車)に従って駐車する(下の図の `rough_goal_planner`)。現在、ラフゴールプランナーはプルオーバー機能のみをサポートしているが、将来的にはさまざまな駐車ポリシーに対応できることが望ましい。 - ```plantuml @startuml package goal_planner{ @@ -127,12 +126,12 @@ _注意: このプランナーは、「目標探索」、「衝突チェック ## goal_planner の一般的なパラメータ -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------ | :---- | :----- | :---------------------------------------------------------------------- | :------------ | -| th_arrived_distance | [m] | 数値 | パス終了に到着するための距離閾値 | 1.0 | -| th_stopped_velocity | [m/s] | 数値 | パス終了に到着するための速度閾値 | 0.01 | -| th_stopped_time | [s] | 数値 | パス終了に到着するための時間閾値 | 2.0 | -| center_line_path_interval | [m] | 数値 | 参照センターラインパスのポイント間隔 | 1.0 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------ | :---- | :----- | :----------------------------------- | :----------- | +| th_arrived_distance | [m] | 数値 | パス終了に到着するための距離閾値 | 1.0 | +| th_stopped_velocity | [m/s] | 数値 | パス終了に到着するための速度閾値 | 0.01 | +| th_stopped_time | [s] | 数値 | パス終了に到着するための時間閾値 | 2.0 | +| center_line_path_interval | [m] | 数値 | 参照センターラインパスのポイント間隔 | 1.0 | ## **Goal Search** @@ -174,19 +173,19 @@ _注意: このプランナーは、「目標探索」、「衝突チェック ### Goal Search のパラメータ -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------ | :--- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------- | -| goal_priority | [-] | string | longitudinal distancesを優先し小さい距離を優先する `minimum_longitudinal_distance`、weighted lateral distanceとlongitudinal distanceの総和を優先する `minimum_weighted_distance` | `minimum_weighted_distance` | -| lateral_weight | [-] | double | `minimum_weighted_distance`時に使用されるlateral distanceの重み | 40.0 | -| prioritize_goals_before_objects | [-] | bool | 回避すべきオブジェクトがある場合、それらの前面にある目標を優先 | true | -| forward_goal_search_length | [m] | double | 元の目標から探索する前方範囲の長さ | 20.0 | -| backward_goal_search_length | [m] | double | 元の目標から探索する後方範囲の長さ | 20.0 | -| goal_search_interval | [m] | double | 目標検索の距離間隔 | 2.0 | -| longitudinal_margin | [m] | double | 目標位置の自車と障害物間の距離マージン | 3.0 | -| max_lateral_offset | [m] | double | lateral方向の目標検索の最大オフセット | 0.5 | -| lateral_offset_interval | [m] | double | lateral方向の目標検索の距離間隔 | 0.25 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------ | :--- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------- | +| goal_priority | [-] | string | longitudinal distancesを優先し小さい距離を優先する `minimum_longitudinal_distance`、weighted lateral distanceとlongitudinal distanceの総和を優先する `minimum_weighted_distance` | `minimum_weighted_distance` | +| lateral_weight | [-] | double | `minimum_weighted_distance`時に使用されるlateral distanceの重み | 40.0 | +| prioritize_goals_before_objects | [-] | bool | 回避すべきオブジェクトがある場合、それらの前面にある目標を優先 | true | +| forward_goal_search_length | [m] | double | 元の目標から探索する前方範囲の長さ | 20.0 | +| backward_goal_search_length | [m] | double | 元の目標から探索する後方範囲の長さ | 20.0 | +| goal_search_interval | [m] | double | 目標検索の距離間隔 | 2.0 | +| longitudinal_margin | [m] | double | 目標位置の自車と障害物間の距離マージン | 3.0 | +| max_lateral_offset | [m] | double | lateral方向の目標検索の最大オフセット | 0.5 | +| lateral_offset_interval | [m] | double | lateral方向の目標検索の距離間隔 | 0.25 | | ignore_distance_from_lane_start | [m] | double | このパラメータによって、車線路の開始位置と目標間の距離が指定した値以上になることが保証されます。これは、目標を車線路の開始位置にかなり近い位置に設定することを防ぐために使用され、安全でない、または実用的な路肩への車両移動につながる可能性があります。この値を増やすと、システムは車線路の開始位置近くの潜在的な目標位置を無視せざるを得なくなり、安全で快適な路肩への車両移動につながる可能性があります。 | 0.0 | -| margin_from_boundary | [m] | double | 車線路の端からの距離マージン | 0.5 | +| margin_from_boundary | [m] | double | 車線路の端からの距離マージン | 0.5 | ## **路肩駐車** @@ -205,16 +204,16 @@ _注意: このプランナーは、「目標探索」、「衝突チェック - そこで生成された経路候補はメインスレッドで参照され、現在のプランナーのデータ(例: 自車と障害物の情報)に対して有効と判断された候補がその中から選択されます。有効とは、急減速なし、障害物との衝突なしなどを意味します。選択された経路がこのモジュールの出力になります。 - 選択された経路がない場合、または選択された経路が衝突で自車が停止した場合、別のスレッド(フリースペース経路生成スレッド)がフリースペース Plannar アルゴリズムを使用して経路を生成します。有効なフリースペース経路が見つかった場合、それはモジュールの出力になります。障害物が移動して車線に沿って生成された路肩駐車の経路が衝突フリーの場合、経路は再び出力として使用されます。フリースペース経路の生成フローの詳細については、フリースペース駐車に関するセクションも参照してください。 -| 名称 | 単位 | 種類 | 説明 | デフォルト値 | -| ------------------------------------------ | ------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | -| pull_over_minimum_request_length | [m] | double | 自動車が目標地点にこの距離まで接近するか、停止する安全距離に達すると、プルオーバーが有効になる。 | 100.0 | -| pull_over_velocity | [m/s] | double | 目標検索エリアまでにこの速度に減速する | 3.0 | -| pull_over_minimum_velocity | [m/s] | double | 一度停止した後のプルオーバーの速度。過度の加速度を防止する。 | 1.38 | -| decide_path_distance | [m] | double | 駐車位置にこの距離まで接近した場合に経路を決定する。その後、経路計画と目標検索は実行されません | 10.0 | -| maximum_deceleration | [m/s2] | double | 最大減速度。駐車経路が急に検出できない場合に急減速を防ぐ。 | 1.0 | -| path_priority | [-] | string | `efficient_path`を使用する場合、`efficient_path_order`に設定された効率的な経路を生成できる目標を使用します。`close_goal`を使用する場合、元の目標に最も近い目標を使用します。 | efficient_path | -| efficient_path_order | [-] | string | フリースペースでのプルオーバーを除くレーンに沿ったプルオーバープランナーの効率的な順序 | ["SHIFT", "ARC_FORWARD", "ARC_BACKWARD"] | -| lane_departure_check_expansion_margin | [m] | double | 車線逸脱チェックを実行するときの自動車両のフットプリントを拡大するためのマージン | 0.0 | +| 名称 | 単位 | 種類 | 説明 | デフォルト値 | +| ------------------------------------- | ------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| pull_over_minimum_request_length | [m] | double | 自動車が目標地点にこの距離まで接近するか、停止する安全距離に達すると、プルオーバーが有効になる。 | 100.0 | +| pull_over_velocity | [m/s] | double | 目標検索エリアまでにこの速度に減速する | 3.0 | +| pull_over_minimum_velocity | [m/s] | double | 一度停止した後のプルオーバーの速度。過度の加速度を防止する。 | 1.38 | +| decide_path_distance | [m] | double | 駐車位置にこの距離まで接近した場合に経路を決定する。その後、経路計画と目標検索は実行されません | 10.0 | +| maximum_deceleration | [m/s2] | double | 最大減速度。駐車経路が急に検出できない場合に急減速を防ぐ。 | 1.0 | +| path_priority | [-] | string | `efficient_path`を使用する場合、`efficient_path_order`に設定された効率的な経路を生成できる目標を使用します。`close_goal`を使用する場合、元の目標に最も近い目標を使用します。 | efficient_path | +| efficient_path_order | [-] | string | フリースペースでのプルオーバーを除くレーンに沿ったプルオーバープランナーの効率的な順序 | ["SHIFT", "ARC_FORWARD", "ARC_BACKWARD"] | +| lane_departure_check_expansion_margin | [m] | double | 車線逸脱チェックを実行するときの自動車両のフットプリントを拡大するためのマージン | 0.0 | ### **路肩駐車** @@ -231,14 +230,14 @@ _注意: このプランナーは、「目標探索」、「衝突チェック #### 路肩駐車のパラメータ -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :----------------------------- | :----- | :--------- | :-------------------------------------------------------------------- | :------------- | -| enable_shift_parking | [-] | ブール型 | シフトパーキングを有効にするフラグ | true | -| shift_sampling_num | [-] | 整数型 | lateral_jerkの最小および最大範囲内のサンプリング数 | 4 | -| maximum_lateral_jerk | [m/s3] | 倍精度浮動小数点数型 | 最大横方向ジャーク | 2.0 | -| minimum_lateral_jerk | [m/s3] | 倍精度浮動小数点数型 | 最小横方向ジャーク | 0.5 | -| deceleration_interval | [m] | 倍精度浮動小数点数型 | 減速区間の距離 | 15.0 | -| after_shift_straight_distance | [m] | 倍精度浮動小数点数型 | 引き寄せ終了後の直線距離 | 1.0 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :---------------------------- | :----- | :------------------- | :------------------------------------------------- | :----------- | +| enable_shift_parking | [-] | ブール型 | シフトパーキングを有効にするフラグ | true | +| shift_sampling_num | [-] | 整数型 | lateral_jerkの最小および最大範囲内のサンプリング数 | 4 | +| maximum_lateral_jerk | [m/s3] | 倍精度浮動小数点数型 | 最大横方向ジャーク | 2.0 | +| minimum_lateral_jerk | [m/s3] | 倍精度浮動小数点数型 | 最小横方向ジャーク | 0.5 | +| deceleration_interval | [m] | 倍精度浮動小数点数型 | 減速区間の距離 | 15.0 | +| after_shift_straight_distance | [m] | 倍精度浮動小数点数型 | 引き寄せ終了後の直線距離 | 1.0 | ### **geometric parallel parking** @@ -247,10 +246,10 @@ _注意: このプランナーは、「目標探索」、「衝突チェック #### geometric parallel parkingのパラメータ -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :---------------------- | :---- | :----- | :------------------------------------------------------------------------------------------------------------------- | :------------ | -| arc_path_interval | [m] | double | アークパスポイント間の距離 | 1.0 | -| pull_over_max_steer_rad | [rad] | double | Path生成時の最大ステアリング角度。停止中はvehicle_infoでmax_steer_angleまでステアリングを制御できない場合がある | 0.35 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :---------------------- | :---- | :----- | :-------------------------------------------------------------------------------------------------------------- | :----------- | +| arc_path_interval | [m] | double | アークパスポイント間の距離 | 1.0 | +| pull_over_max_steer_rad | [rad] | double | Path生成時の最大ステアリング角度。停止中はvehicle_infoでmax_steer_angleまでステアリングを制御できない場合がある | 0.35 | #### アークフォワードパーキング @@ -262,12 +261,12 @@ _注意: このプランナーは、「目標探索」、「衝突チェック #### アークフォワードパーキングのパラメータ -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :-------------------------------------- | :---- | :----- | :-------------------------------------------------------------------------------------------------- | :------------ | -| `enable_arc_forward_parking` | [-] | ブール | 円弧前進駐車を有効にするかどうか | true | -| `after_forward_parking_straight_distance` | [m] | double | 引き上げ終了地点から直線距離 | 2.0 | -| `forward_parking_velocity` | [m/s] | double | 前進駐車時の速度 | 1.38 | -| `forward_parking_lane_departure_margin` | [m/s] | double | 前進駐車時の車両左前角の車線逸脱マージン | 0.0 | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :---------------------------------------- | :---- | :----- | :--------------------------------------- | :----------- | +| `enable_arc_forward_parking` | [-] | ブール | 円弧前進駐車を有効にするかどうか | true | +| `after_forward_parking_straight_distance` | [m] | double | 引き上げ終了地点から直線距離 | 2.0 | +| `forward_parking_velocity` | [m/s] | double | 前進駐車時の速度 | 1.38 | +| `forward_parking_lane_departure_margin` | [m/s] | double | 前進駐車時の車両左前角の車線逸脱マージン | 0.0 | #### アーク後退駐車 @@ -279,12 +278,12 @@ _注意: このプランナーは、「目標探索」、「衝突チェック #### 後退アーク駐車のパラメータ -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :--------------------------------------- | :---- | :----- | :----------------------------------------------------------------------- | :----------- | -| enable_arc_backward_parking | [-] | bool | アーク後退駐車を有効にするフラグ | true | -| after_backward_parking_straight_distance | [m] | double | 駐車終了地点後の直線距離 | 2.0 | -| backward_parking_velocity | [m/s] | double | 後退駐車時の速度 | -1.38 | -| backward_parking_lane_departure_margin | [m/s] | double | 自車の前右隅が後退駐車時に車線から逸脱するマージン | 0.0 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :--------------------------------------- | :---- | :----- | :------------------------------------------------- | :----------- | +| enable_arc_backward_parking | [-] | bool | アーク後退駐車を有効にするフラグ | true | +| after_backward_parking_straight_distance | [m] | double | 駐車終了地点後の直線距離 | 2.0 | +| backward_parking_velocity | [m/s] | double | 後退駐車時の速度 | -1.38 | +| backward_parking_lane_departure_margin | [m/s] | double | 自車の前右隅が後退駐車時に車線から逸脱するマージン | 0.0 | ### 無人駐車(Freespace Parking) @@ -299,9 +298,9 @@ _注意: このプランナーは、「目標探索」、「衝突チェック #### 無人駐車パラメーター -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :----------------------- | :--- | :--- | :---------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_freespace_parking | [-] | ブール値 | 障害物などにより駐車スペースで車両がスタックした場合にfreespace駐車が有効になるフラグです。 | true | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :----------------------- | :--- | :------- | :------------------------------------------------------------------------------------------ | :----------- | +| enable_freespace_parking | [-] | ブール値 | 障害物などにより駐車スペースで車両がスタックした場合にfreespace駐車が有効になるフラグです。 | true | [freespace_planner](../autoware_freespace_planner/README.md)の他のパラメータについては、参照してください。 @@ -315,14 +314,14 @@ _注意: このプランナーは、「目標探索」、「衝突チェック #### オキュパンシーグリッドベースの衝突チェックに関するパラメータ -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------------------------ | :--- | :----- | :-------------------------------------------------------------------------------------------------------------- | :------------ | -| use_occupancy_grid_for_goal_search | - | bool | 目標探索衝突確認のためオキューパンシーグリッドを使用するかどうか | true | -| use_occupancy_grid_for_goal_longitudinal_margin | - | bool | 縦方向マージンを保持するためオキューパンシーグリッドを使用するかどうか | false | -| use_occupancy_grid_for_path_collision_check | - | bool | 衝突確認のためオキューパンシーグリッドを使用するかどうか | false | -| occupancy_grid_collision_check_margin | m | double | フットプリントから自車セルを計算するためのマージン | 0.0 | -| theta_size | - | int | 考慮するシータ角のサイズ。衝突確認の角度分解能は 2$\pi$ / theta_size [rad] となります。 | 360 | -| obstacle_threshold | - | int | 障害物と見なされるセルの値のしきい値 | 60 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------------- | :--- | :----- | :-------------------------------------------------------------------------------------- | :----------- | +| use_occupancy_grid_for_goal_search | - | bool | 目標探索衝突確認のためオキューパンシーグリッドを使用するかどうか | true | +| use_occupancy_grid_for_goal_longitudinal_margin | - | bool | 縦方向マージンを保持するためオキューパンシーグリッドを使用するかどうか | false | +| use_occupancy_grid_for_path_collision_check | - | bool | 衝突確認のためオキューパンシーグリッドを使用するかどうか | false | +| occupancy_grid_collision_check_margin | m | double | フットプリントから自車セルを計算するためのマージン | 0.0 | +| theta_size | - | int | 考慮するシータ角のサイズ。衝突確認の角度分解能は 2$\pi$ / theta_size [rad] となります。 | 360 | +| obstacle_threshold | - | int | 障害物と見なされるセルの値のしきい値 | 60 | ### **オブジェクト認識ベースの衝突確認** @@ -339,13 +338,13 @@ _注意: このプランナーは、「目標探索」、「衝突チェック #### オブジェクト認識ベースの衝突確認のパラメータ -| 名称 | 単位 | 入力種別 | 説明 | デフォルト値 | -| :----------------------------------------------------------- | :--- | :-------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------ | -| use_object_recognition | [-] | bool | 障害物チェックに物体認識を使用するかどうか | true | -| object_recognition_collision_check_soft_margins | [m] | vector[double] | パス生成時の衝突チェックのソフトマージン。厳密にはフットプリント間の距離ではなく、自己位置と物体が向き合っているときの最大距離。 | [5.0, 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0] | -| object_recognition_collision_check_hard_margins | [m] | vector[double] | パス生成時の衝突チェックのハードマージン | [0.6] | -| object_recognition_collision_check_max_extra_stopping_margin | [m] | double | 停止距離を考慮した衝突チェックのための縦方向距離マージンの追加時の最大値 | 1.0 | -| detection_bound_offset | [m] | double | パス生成の衝突チェック検出エリアを作るため、待避レーンをこのオフセットで拡張 | 15.0 | +| 名称 | 単位 | 入力種別 | 説明 | デフォルト値 | +| :----------------------------------------------------------- | :--- | :------------- | :------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- | +| use_object_recognition | [-] | bool | 障害物チェックに物体認識を使用するかどうか | true | +| object_recognition_collision_check_soft_margins | [m] | vector[double] | パス生成時の衝突チェックのソフトマージン。厳密にはフットプリント間の距離ではなく、自己位置と物体が向き合っているときの最大距離。 | [5.0, 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0] | +| object_recognition_collision_check_hard_margins | [m] | vector[double] | パス生成時の衝突チェックのハードマージン | [0.6] | +| object_recognition_collision_check_max_extra_stopping_margin | [m] | double | 停止距離を考慮した衝突チェックのための縦方向距離マージンの追加時の最大値 | 1.0 | +| detection_bound_offset | [m] | double | パス生成の衝突チェック検出エリアを作るため、待避レーンをこのオフセットで拡張 | 15.0 | ## **safety check** @@ -365,7 +364,6 @@ _注意: このプランナーは、「目標探索」、「衝突チェック また、安全チェックには時間のヒステリシスがあり、一定期間(`keep_unsafe_time`)経路が「安全」と判断されると、最終的に「安全」として扱われます。 - ```txt ==== is_safe ---- current_is_safe @@ -383,33 +381,33 @@ _注意: このプランナーは、「目標探索」、「衝突チェック ### 安全チェックのパラメータ -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :----------------------------------- | :---- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------- | -| enable_safety_check | [-] | bool | セーフティチェックを使用するかどうか | true | -| method | [-] | 文字列 | セーフティチェックの方法. RSSまたはintegral_predicted_polygon | integral_predicted_polygon | -| keep_unsafe_time | [s] | double | セーフティチェックヒステリシス時間. その時間だけ経路が"安全"と判定されれば、最終的に"安全"とみなされる | 3.0 | -| check_all_predicted_path | - | bool | 予測経路のすべてを確認するためのフラグ | true | -| publish_debug_marker | - | bool | デバッグマーカーを公開するためのフラグ | false | -| collision_check_yaw_diff_threshold | [rad] | double | RSSベースの衝突チェックを実行するときの、自己位置と物体との最大ヨーの違い | 3.1416 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :--------------------------------- | :---- | :----- | :----------------------------------------------------------------------------------------------------- | :------------------------- | +| enable_safety_check | [-] | bool | セーフティチェックを使用するかどうか | true | +| method | [-] | 文字列 | セーフティチェックの方法. RSSまたはintegral_predicted_polygon | integral_predicted_polygon | +| keep_unsafe_time | [s] | double | セーフティチェックヒステリシス時間. その時間だけ経路が"安全"と判定されれば、最終的に"安全"とみなされる | 3.0 | +| check_all_predicted_path | - | bool | 予測経路のすべてを確認するためのフラグ | true | +| publish_debug_marker | - | bool | デバッグマーカーを公開するためのフラグ | false | +| collision_check_yaw_diff_threshold | [rad] | double | RSSベースの衝突チェックを実行するときの、自己位置と物体との最大ヨーの違い | 3.1416 | #### RSS 安全性検査パラメータ -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :------------------------------------------- | :--- | :----- | :------------------------------------------------- | :------------ | -| `rear_vehicle_reaction_time` | [s] | double | 後方車両の反応時間 | 2.0 | -| `rear_vehicle_safety_time_margin` | [s] | double | 後方車両の安全時間マージン | 1.0 | -| `lateral_distance_max_threshold` | [m] | double | 最大横方向距離閾値 | 2.0 | -| `longitudinal_distance_min_threshold` | [m] | double | 最小縦方向距離閾値 | 3.0 | -| `longitudinal_velocity_delta_time` | [s] | double | 縦方向速度のデルタ時間 | 0.8 | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :------------------------------------ | :--- | :----- | :------------------------- | :----------- | +| `rear_vehicle_reaction_time` | [s] | double | 後方車両の反応時間 | 2.0 | +| `rear_vehicle_safety_time_margin` | [s] | double | 後方車両の安全時間マージン | 1.0 | +| `lateral_distance_max_threshold` | [m] | double | 最大横方向距離閾値 | 2.0 | +| `longitudinal_distance_min_threshold` | [m] | double | 最小縦方向距離閾値 | 3.0 | +| `longitudinal_velocity_delta_time` | [s] | double | 縦方向速度のデルタ時間 | 0.8 | #### インテグラル予測ポリゴン安全性チェック用パラメーター -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :-------------- | :--- | :----- | :------------------------------------- | :------------ | -| forward_margin | [m] | double | 自己位置の前面の余裕 | 1.0 | -| backward_margin | [m] | double | 自己位置の後面の余裕 | 1.0 | -| lat_margin | [m] | double | 自己位置の側面の余裕 | 1.0 | -| time_horizon | [s] | double | 各フットプリントを統合する時間幅 | 10.0 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :-------------- | :--- | :----- | :------------------------------- | :----------- | +| forward_margin | [m] | double | 自己位置の前面の余裕 | 1.0 | +| backward_margin | [m] | double | 自己位置の後面の余裕 | 1.0 | +| lat_margin | [m] | double | 自己位置の側面の余裕 | 1.0 | +| time_horizon | [s] | double | 各フットプリントを統合する時間幅 | 10.0 | ## **パス決定** @@ -429,4 +427,3 @@ _注意: このプランナーは、「目標探索」、「衝突チェック - 短いパスが生成された場合、エゴカーは走行できません。 - 複雑なケースでは、生成に時間がかかったり、失敗したりします。 - 走行可能なエリアは `parking_lot` に収まることが保証されていません。 - diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md index 61cf9c4b4b0c9..3833fbfcbcd46 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md @@ -26,7 +26,6 @@ 以下のグラフは、車線変更の候補経路をサンプリングするプロセスを示しています。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -92,7 +91,6 @@ stop 以下の図では、有効な候補経路の生成プロセスを示しています。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -132,7 +130,6 @@ endif 準備軌道とは候補パスの中で最初で、自車位置に沿って生成される直線部分です。準備軌道の長さは、以下のように計算します。 - ```C++ lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2 ``` @@ -143,7 +140,6 @@ lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0. レーン変更の段階は、自車の現在の車線から目標の車線に移動するシフトパスで構成されています。レーン変更の段階の総距離を以下に示します。レーン変更の段階では、自車は一定速度で走行します。 - ```C++ lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity) lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration @@ -157,7 +153,6 @@ lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration 事前決定された縦方向加速度値は、`longitudinal_acceleration = maximum_longitudinal_acceleration` から開始されるセットと、`longitudinal_acceleration = -maximum_longitudinal_deceleration` に達するまで `longitudinal_acceleration_resolution` ずつ減少するセットです。`maximum_longitudinal_acceleration` と `maximum_longitudinal_deceleration` の両方が、`common.param` ファイルで `normal.min_acc` として定義されているように計算されます。 - ```C++ maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc) maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc) @@ -167,7 +162,6 @@ maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param. `longitudinal_acceleration_resolution` は次によって決定されます。 - ```C++ longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num ``` @@ -176,7 +170,6 @@ longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - mini グラフは縦加速度の値がサンプリングされる条件を示しています。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -230,7 +223,6 @@ stop このドキュメントでは、縦断加速度をサンプリングするプロセスについて説明します。 - ```plantuml @startuml start @@ -360,7 +352,6 @@ Planningコンポーネントは、将来の機能拡張や改善のために設 この範囲内で、自車位置の横加速度をサンプリングします。縦加速度のサンプリングに使用された方法と同様、横加速度の分解能 (lateral_acceleration_resolution) は以下の方法で決定されます。 - ```C++ lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num ``` @@ -378,7 +369,6 @@ lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_latera 以下のフローチャートは、有効性チェックを示しています。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -473,7 +463,6 @@ stop ##### オブジェクトフィルタリング - ```plantuml @startuml skinparam defaultTextAlignment center @@ -619,7 +608,6 @@ stop 他の車両と一緒に公道を走行する場合は、車線変更が実行できないシナリオがあります。例えば、近隣の車線に進入車両があるため、候補パスが安全でない場合が考えられます。その場合、自車位置は車線変更することができず、ゴールに到達することはできません。そのため、自車位置は特定の距離で早めに停止し、近隣の車線が安全と評価されるまで待つ必要があります。最小停止距離は、シフトの長さと車線変更の最小速度から計算できます。 - ```C++ lane_changing_time = f(shift_length, lat_acceleration, lat_jerk) minimum_lane_change_distance = minimum_prepare_length + minimum_lane_changing_velocity * lane_changing_time + lane_change_finish_judge_buffer @@ -635,7 +623,6 @@ minimum_lane_change_distance = minimum_prepare_length + minimum_lane_changing_ve 次のフローチャートとサブセクションでは、障害物が前方にある場合に停止地点を挿入する場所の決定条件について説明します。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -755,7 +742,6 @@ stop 以下は、車線変更の中断チェックの流れを示しています。 - ```plantuml @startuml skinparam monochrome true @@ -804,7 +790,6 @@ detach 安全と危険な状態の交互によって発生する車線変更経路の振動に対する予防策として、中止またはキャンセル操作を実行する前に、ヒステリシスカウントチェックが追加で実装されています。安全でない場合は、`unsafe_hysteresis_count_` がインクリメントされ、`unsafe_hysteresis_threshold` と比較されます。これを超えると中止条件のチェックが促され、最近の安全評価を考慮に入れて決定が下されるようにします(上のフローチャートで示されています)。このメカニズムは意思決定を安定させ、一時的な安全でない状態による急激な変化を防ぎます。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -858,7 +843,6 @@ endif 車線変更完了の判定プロセスは、次の図に示します。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -910,46 +894,46 @@ endif 以下のパラメータは [lane_change.param.yaml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml) で構成できます。 -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -|---|---|---|---|---| -| `backward_lane_length` | [m] | double | 車線変更のターゲット車線を後方からチェックする長さ | 200.0 | -| `prepare_duration` | [m] | double | 自動運転車が車線変更の準備をするための時間 | 4.0 | -| `backward_length_buffer_for_end_of_lane` | [m] | double | 車線変更を開始するために自動運転車が十分な距離を確保するための、車線末端のバッファ | 3.0 | -| `backward_length_buffer_for_blocking_object` | [m] | double | 車両の正面に障害物がある場合に車線変更を開始するために自動運転車が十分な距離を確保するための、車線末端のバッファ | 3.0 | -| `backward_length_from_intersection` | [m] | double | 最後の交差点からの距離のしきい値。この距離以内では車線変更経路が無効またはキャンセルされる | 5.0 | -| `lane_change_finish_judge_buffer` | [m] | double | 車線変更プロセスの完了を確認するために使用される追加のバッファ | 2.0 | -| `lane_changing_lateral_jerk` | [m/s3] | double | 車線変更経路を生成するための横方向加速度値 | 0.5 | -| `minimum_lane_changing_velocity` | [m/s] | double | 車線変更プロセス中の最小速度 | 2.78 | -| `prediction_time_resolution` | [s] | double | 障害物の経路補間と衝突チェックのための時間分解能 | 0.5 | -| `longitudinal_acceleration_sampling_num` | [-] | int | 縦方向加速度の影響を受ける車線変更可能な経路の数 | 3 | -| `lateral_acceleration_sampling_num` | [-] | int | 横方向加速度の影響を受ける車線変更可能な経路の数 | 3 | -| `object_check_min_road_shoulder_width` | [m] | double | 車線に路側帯がない場合、路側帯と見なされる幅 | 0.5 | -| `object_shiftable_ratio_threshold` | [-] | double | 中心線からこの距離比内にある車両は、駐車車両から除外される | 0.6 | -| `min_length_for_turn_signal_activation` | [m] | double | 自動運転車が車線変更の最小距離にこの長さまで近づいたら、ターンシグナルが有効になる | 10.0 | -| `length_ratio_for_turn_signal_deactivation` | [-] | double | 自動運転車が車線変更の終了点にこの距離比まで近づいたら、ターンシグナルが無効になる | 0.8 | -| `max_longitudinal_acc` | [-] | double | 車線変更の最大縦方向加速度 | 1.0 | -| `min_longitudinal_acc` | [-] | double | 車線変更の最大縦方向減速度 | -1.0 | -| `lateral_acceleration.velocity` | [m/s] | double | 横方向加速度計算のための基準速度(参照テーブル) | [0.0, 4.0, 10.0] | -| `lateral_acceleration.min_values` | [m/ss] | double | 速度に対応する最小横方向加速度値(参照テーブル) | [0.4, 0.4, 0.4] | -| `lateral_acceleration.max_values` | [m/ss] | double | 速度に対応する最大横方向加速度値(参照テーブル) | [0.65, 0.65, 0.65] | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| -------------------------------------------- | ------ | ------ | ---------------------------------------------------------------------------------------------------------------- | ------------------ | +| `backward_lane_length` | [m] | double | 車線変更のターゲット車線を後方からチェックする長さ | 200.0 | +| `prepare_duration` | [m] | double | 自動運転車が車線変更の準備をするための時間 | 4.0 | +| `backward_length_buffer_for_end_of_lane` | [m] | double | 車線変更を開始するために自動運転車が十分な距離を確保するための、車線末端のバッファ | 3.0 | +| `backward_length_buffer_for_blocking_object` | [m] | double | 車両の正面に障害物がある場合に車線変更を開始するために自動運転車が十分な距離を確保するための、車線末端のバッファ | 3.0 | +| `backward_length_from_intersection` | [m] | double | 最後の交差点からの距離のしきい値。この距離以内では車線変更経路が無効またはキャンセルされる | 5.0 | +| `lane_change_finish_judge_buffer` | [m] | double | 車線変更プロセスの完了を確認するために使用される追加のバッファ | 2.0 | +| `lane_changing_lateral_jerk` | [m/s3] | double | 車線変更経路を生成するための横方向加速度値 | 0.5 | +| `minimum_lane_changing_velocity` | [m/s] | double | 車線変更プロセス中の最小速度 | 2.78 | +| `prediction_time_resolution` | [s] | double | 障害物の経路補間と衝突チェックのための時間分解能 | 0.5 | +| `longitudinal_acceleration_sampling_num` | [-] | int | 縦方向加速度の影響を受ける車線変更可能な経路の数 | 3 | +| `lateral_acceleration_sampling_num` | [-] | int | 横方向加速度の影響を受ける車線変更可能な経路の数 | 3 | +| `object_check_min_road_shoulder_width` | [m] | double | 車線に路側帯がない場合、路側帯と見なされる幅 | 0.5 | +| `object_shiftable_ratio_threshold` | [-] | double | 中心線からこの距離比内にある車両は、駐車車両から除外される | 0.6 | +| `min_length_for_turn_signal_activation` | [m] | double | 自動運転車が車線変更の最小距離にこの長さまで近づいたら、ターンシグナルが有効になる | 10.0 | +| `length_ratio_for_turn_signal_deactivation` | [-] | double | 自動運転車が車線変更の終了点にこの距離比まで近づいたら、ターンシグナルが無効になる | 0.8 | +| `max_longitudinal_acc` | [-] | double | 車線変更の最大縦方向加速度 | 1.0 | +| `min_longitudinal_acc` | [-] | double | 車線変更の最大縦方向減速度 | -1.0 | +| `lateral_acceleration.velocity` | [m/s] | double | 横方向加速度計算のための基準速度(参照テーブル) | [0.0, 4.0, 10.0] | +| `lateral_acceleration.min_values` | [m/ss] | double | 速度に対応する最小横方向加速度値(参照テーブル) | [0.4, 0.4, 0.4] | +| `lateral_acceleration.max_values` | [m/ss] | double | 速度に対応する最大横方向加速度値(参照テーブル) | [0.65, 0.65, 0.65] | ### 車線変更完了判定パラメータ 車線変更完了を判定するために、以下のパラメータを使用します。 -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------- | ----- | ------ | ---------------------------------------------------------------------------------------------------------------------- | ------------- | -| `lane_change_finish_judge_buffer` | [m] | double | レーン変更終了姿勢からの縦方向距離 | 2.0 | -| `finish_judge_lateral_threshold` | [m] | double | ターゲットレーンの中心線からの横方向距離。`finish_judge_lateral_angle_deviation`と併用する | 0.1 | -| `finish_judge_lateral_angle_deviation` | [度] | double | ターゲットレーンの中心線に対する自車角度偏差。`finish_judge_lateral_threshold`と併用する | 2.0 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------- | ---- | ------ | ------------------------------------------------------------------------------------------ | ------------ | +| `lane_change_finish_judge_buffer` | [m] | double | レーン変更終了姿勢からの縦方向距離 | 2.0 | +| `finish_judge_lateral_threshold` | [m] | double | ターゲットレーンの中心線からの横方向距離。`finish_judge_lateral_angle_deviation`と併用する | 0.1 | +| `finish_judge_lateral_angle_deviation` | [度] | double | ターゲットレーンの中心線に対する自車角度偏差。`finish_judge_lateral_threshold`と併用する | 2.0 | ### 車線変更規制 -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------- | ---- | ------- | ----------------------------------------------------------------------------------- | ------------- | -| `regulation.crosswalk` | [-] | ブール値 | 横断歩道間での車線変更を許可する | true | -| `regulation.intersection` | [-] | ブール値 | 交差点間での車線変更を許可する | true | -| `regulation.traffic_light` | [-] | ブール値 | 信号間での車線変更の実行を許可する | true | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------- | ---- | -------- | ---------------------------------- | ------------ | +| `regulation.crosswalk` | [-] | ブール値 | 横断歩道間での車線変更を許可する | true | +| `regulation.intersection` | [-] | ブール値 | 交差点間での車線変更を許可する | true | +| `regulation.traffic_light` | [-] | ブール値 | 信号間での車線変更の実行を許可する | true | ### 自車位置検出 @@ -957,96 +941,97 @@ endif 障害物が自車を完全に包囲して動作不可能にした状態を検出します。 -| 名称 | 単位 | 型 | 説明 | 初期値 | -| :-------------------------- | ----- | ------ | --------------------------------------------------- | ------------- | -| `stuck_detection.velocity` | [m/s] | double | 自車位置の静止検出における速度しきい値 | 0.1 | -| `stuck_detection.stop_time` | [秒] | double | 自車位置の静止検出における停止時間しきい値 | 3.0 | +| 名称 | 単位 | 型 | 説明 | 初期値 | +| :-------------------------- | ----- | ------ | ------------------------------------------ | ------ | +| `stuck_detection.velocity` | [m/s] | double | 自車位置の静止検出における速度しきい値 | 0.1 | +| `stuck_detection.stop_time` | [秒] | double | 自車位置の静止検出における停止時間しきい値 | 3.0 | ### 衝突チェック #### 目標オブジェクト -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :------------------------- | ---- | ------- | -------------------------------------------------- | ------------- | -| `target_object.car` | [-] | boolean | 安全チェックに自動車オブジェクトを含める | true | -| `target_object.truck` | [-] | boolean | 安全チェックにトラックオブジェクトを含める | true | -| `target_object.bus` | [-] | boolean | 安全チェックにバスオブジェクトを含める | true | -| `target_object.trailer` | [-] | boolean | 安全チェックにトレーラーオブジェクトを含める | true | -| `target_object.unknown` | [-] | boolean | 安全チェックに不明オブジェクトを含める | true | -| `target_object.bicycle` | [-] | boolean | 安全チェックに自転車オブジェクトを含める | true | -| `target_object.motorcycle` | [-] | boolean | 安全チェックにオートバイオブジェクトを含める | true | -| `target_object.pedestrian` | [-] | boolean | 安全チェックに歩行者オブジェクトを含める | true | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :------------------------- | ---- | ------- | -------------------------------------------- | ------------ | +| `target_object.car` | [-] | boolean | 安全チェックに自動車オブジェクトを含める | true | +| `target_object.truck` | [-] | boolean | 安全チェックにトラックオブジェクトを含める | true | +| `target_object.bus` | [-] | boolean | 安全チェックにバスオブジェクトを含める | true | +| `target_object.trailer` | [-] | boolean | 安全チェックにトレーラーオブジェクトを含める | true | +| `target_object.unknown` | [-] | boolean | 安全チェックに不明オブジェクトを含める | true | +| `target_object.bicycle` | [-] | boolean | 安全チェックに自転車オブジェクトを含める | true | +| `target_object.motorcycle` | [-] | boolean | 安全チェックにオートバイオブジェクトを含める | true | +| `target_object.pedestrian` | [-] | boolean | 安全チェックに歩行者オブジェクトを含める | true | #### common -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :---------------------------------------- | ---- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `safety_check.lane_expansion.left_offset` | [m] | 倍精度浮動小数点 | 検出領域の左側の境界を拡大し、以前は左側にあったオブジェクトの検出とターゲットへの登録を可能にする。 | 0.0 | -| `safety_check.lane_expansion.right_offset` | [m] | 倍精度浮動小数点 | 検出領域の右側の境界を拡大し、以前は右側にあったオブジェクトの検出とターゲットへの登録を可能にする。 | 0.0 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :----------------------------------------- | ---- | ---------------- | ---------------------------------------------------------------------------------------------------- | ------------ | +| `safety_check.lane_expansion.left_offset` | [m] | 倍精度浮動小数点 | 検出領域の左側の境界を拡大し、以前は左側にあったオブジェクトの検出とターゲットへの登録を可能にする。 | 0.0 | +| `safety_check.lane_expansion.right_offset` | [m] | 倍精度浮動小数点 | 検出領域の右側の境界を拡大し、以前は右側にあったオブジェクトの検出とターゲットへの登録を可能にする。 | 0.0 | #### 追加パラメータ -| Name | Unit | Type | Description | Default value | -| :------------------------------------------------------- | ----- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| Name | Unit | Type | Description | Default value | +| :------------------------------------------------------- | ----- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | | `enable_collision_check_for_prepare_phase.general_lanes` | [-] | boolean | Planningコンポーネントの準備フェーズから衝突チェックを実行します(交差点など、他の設定で明示的にカバーされていない状況の場合)。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | false | -| `enable_collision_check_for_prepare_phase.intersection` | [-] | boolean | 自車が交差点にいる場合、準備フェーズから衝突チェックを実行します。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | true | -| `enable_collision_check_for_prepare_phase.turns` | [-] | boolean | 自車が旋回方向タグのあるLaneletにいる場合、準備フェーズから衝突チェックを実行します。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | true | -| `prepare_phase_ignore_target_speed_thresh` | [m/s] | double | 設定された値より小さいオブジェクトの速度について、準備フェーズでの衝突チェックを無視します。`enable_collision_check_at_prepare_phase`が`true`である必要があります。 | 0.1 | -| `check_objects_on_current_lanes` | [-] | boolean | trueの場合、車線変更モジュールは衝突評価を実行する際、現在の車線上のオブジェクトをチェックします。 | false | -| `check_objects_on_other_lanes` | [-] | boolean | trueの場合、車線変更モジュールは衝突評価を実行する際、他の車線上のオブジェクトを含めます。 | false | -| `use_all_predicted_path` | [-] | boolean | falseの場合、信頼度が最も高い予測パスのみを使用します。 | true | -| `safety_check.collision_check_yaw_diff_threshold` | [rad] | double | RSSベースの衝突チェックを実行する際の自車とオブジェクト間の最大ヨー角差 | 3.1416 | +| `enable_collision_check_for_prepare_phase.intersection` | [-] | boolean | 自車が交差点にいる場合、準備フェーズから衝突チェックを実行します。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | true | +| `enable_collision_check_for_prepare_phase.turns` | [-] | boolean | 自車が旋回方向タグのあるLaneletにいる場合、準備フェーズから衝突チェックを実行します。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | true | +| `prepare_phase_ignore_target_speed_thresh` | [m/s] | double | 設定された値より小さいオブジェクトの速度について、準備フェーズでの衝突チェックを無視します。`enable_collision_check_at_prepare_phase`が`true`である必要があります。 | 0.1 | +| `check_objects_on_current_lanes` | [-] | boolean | trueの場合、車線変更モジュールは衝突評価を実行する際、現在の車線上のオブジェクトをチェックします。 | false | +| `check_objects_on_other_lanes` | [-] | boolean | trueの場合、車線変更モジュールは衝突評価を実行する際、他の車線上のオブジェクトを含めます。 | false | +| `use_all_predicted_path` | [-] | boolean | falseの場合、信頼度が最も高い予測パスのみを使用します。 | true | +| `safety_check.collision_check_yaw_diff_threshold` | [rad] | double | RSSベースの衝突チェックを実行する際の自車とオブジェクト間の最大ヨー角差 | 3.1416 | #### 車線変更経路が計算中の安全性制約 ``` + ``` -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :--------------------------------------------------------- | ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `safety_check.execution.expected_front_deceleration` | [m/s²] | double | 前方の車両が急ブレーキを行った場合の前方対象物の最大減速度。(\*1) | -1.0 | -| `safety_check.execution.expected_rear_deceleration` | [m/s²] | double | 後方の車両が急ブレーキを行った場合の後方対象物の最大減速度。(\*1) | -1.0 | -| `safety_check.execution.rear_vehicle_reaction_time` | [s] | double | 前方車両の急ブレーキに気付いた時点からブレーキを踏むまでの後方車両の運転者の反応時間。 | 2.0 | -| `safety_check.execution.rear_vehicle_safety_time_margin` | [s] | double | 後方車両の運転者が急ブレーキを行ったときに完全停止状態になるまでの時間バッファ。 | 1.0 | -| `safety_check.execution.lateral_distance_max_threshold` | [m] | double | 2 つの対象物間の横方向距離が十分で、車線変更が安全かどうかを判断するために使用される横方向距離のしきい値。 | 2.0 | -| `safety_check.execution.longitudinal_distance_min_threshold` | [m] | double | 2 つの対象物間の縦方向距離が十分で、車線変更が安全かどうかを判断するために使用される縦方向距離のしきい値。 | 3.0 | -| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | 予測された各時点での車両間の実際のギャップを計算するために使用される時間乗数(RSS 距離ではない)。 | 0.8 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :----------------------------------------------------------- | ------ | ------ | ---------------------------------------------------------------------------------------------------------- | ------------ | +| `safety_check.execution.expected_front_deceleration` | [m/s²] | double | 前方の車両が急ブレーキを行った場合の前方対象物の最大減速度。(\*1) | -1.0 | +| `safety_check.execution.expected_rear_deceleration` | [m/s²] | double | 後方の車両が急ブレーキを行った場合の後方対象物の最大減速度。(\*1) | -1.0 | +| `safety_check.execution.rear_vehicle_reaction_time` | [s] | double | 前方車両の急ブレーキに気付いた時点からブレーキを踏むまでの後方車両の運転者の反応時間。 | 2.0 | +| `safety_check.execution.rear_vehicle_safety_time_margin` | [s] | double | 後方車両の運転者が急ブレーキを行ったときに完全停止状態になるまでの時間バッファ。 | 1.0 | +| `safety_check.execution.lateral_distance_max_threshold` | [m] | double | 2 つの対象物間の横方向距離が十分で、車線変更が安全かどうかを判断するために使用される横方向距離のしきい値。 | 2.0 | +| `safety_check.execution.longitudinal_distance_min_threshold` | [m] | double | 2 つの対象物間の縦方向距離が十分で、車線変更が安全かどうかを判断するために使用される縦方向距離のしきい値。 | 3.0 | +| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | 予測された各時点での車両間の実際のギャップを計算するために使用される時間乗数(RSS 距離ではない)。 | 0.8 | #### 停止または駐車車両に対する安全制約 -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :-------------------------------------------------------- | ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `safety_check.parked.expected_front_deceleration` | [m/s^2] | double | 前走車が急ブレーキをかけたときの前方の物体の最大の減速度。(\*1) | -1.0 | -| `safety_check.parked.expected_rear_deceleration` | [m/s^2] | double | 後続車が急ブレーキをかけたときの後方の物体の最大の減速度。(\*1) | -2.0 | -| `safety_check.parked.rear_vehicle_reaction_time` | [s] | double | 後続車のドライバーが、前走車の急ブレーキに気づいてからブレーキを踏むまでの反応時間。 | 1.0 | -| `safety_check.parked.rear_vehicle_safety_time_margin` | [s] | double | 後続車のドライバーが急ブレーキをかけたときに完全に停止するための時間バッファ。 | 0.8 | -| `safety_check.parked.lateral_distance_max_threshold` | [m] | double | 2つの物体間の横方向距離が十分かどうか、また車線変更が安全かどうかを判断するために使用される横方向距離のしきい値。 | 1.0 | -| `safety_check.parked.longitudinal_distance_min_threshold` | [m] | double | 2つの物体間の縦方向距離が十分かどうか、また車線変更が安全かどうかを判断するために使用される縦方向距離のしきい値。 | 3.0 | -| `safety_check.parked.longitudinal_velocity_delta_time` | [m] | double | 予測された各ポイントにおける車両間の実際のギャップを計算するために使用される時間乗数(RSS距離ではなく)。 | 0.8 | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :-------------------------------------------------------- | ------- | ------ | ----------------------------------------------------------------------------------------------------------------- | ------------ | +| `safety_check.parked.expected_front_deceleration` | [m/s^2] | double | 前走車が急ブレーキをかけたときの前方の物体の最大の減速度。(\*1) | -1.0 | +| `safety_check.parked.expected_rear_deceleration` | [m/s^2] | double | 後続車が急ブレーキをかけたときの後方の物体の最大の減速度。(\*1) | -2.0 | +| `safety_check.parked.rear_vehicle_reaction_time` | [s] | double | 後続車のドライバーが、前走車の急ブレーキに気づいてからブレーキを踏むまでの反応時間。 | 1.0 | +| `safety_check.parked.rear_vehicle_safety_time_margin` | [s] | double | 後続車のドライバーが急ブレーキをかけたときに完全に停止するための時間バッファ。 | 0.8 | +| `safety_check.parked.lateral_distance_max_threshold` | [m] | double | 2つの物体間の横方向距離が十分かどうか、また車線変更が安全かどうかを判断するために使用される横方向距離のしきい値。 | 1.0 | +| `safety_check.parked.longitudinal_distance_min_threshold` | [m] | double | 2つの物体間の縦方向距離が十分かどうか、また車線変更が安全かどうかを判断するために使用される縦方向距離のしきい値。 | 3.0 | +| `safety_check.parked.longitudinal_velocity_delta_time` | [m] | double | 予測された各ポイントにおける車両間の実際のギャップを計算するために使用される時間乗数(RSS距離ではなく)。 | 0.8 | ##### 車線変更パスのキャンセルに対するセーフティ制約 -| 名前 | ユニット | タイプ | 説明 | デフォルト値 | -|---|---|---|---|---| -| `safety_check.cancel.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキをかけたときの前方車両の最大減速度。(*1) | -1.0 | -| `safety_check.cancel.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキをかけたときの後方車両の最大減速度。(*1) | -2.0 | -| `safety_check.cancel.rear_vehicle_reaction_time` | [s] | double | 前方車両の急ブレーキに気づいてブレーキを踏むまでの後方車両のドライバーの反応時間 | 1.5 | -| `safety_check.cancel.rear_vehicle_safety_time_margin` | [s] | double | 後方車両のドライバーが急ブレーキをかけたときに完全に停止するまでの時間バッファ | 0.8 | -| `safety_check.cancel.lateral_distance_max_threshold` | [m] | double | 2つの車両間の横距離が十分であり、車線変更が安全かどうかを判断するために使用される横距離のしきい値 | 1.0 | -| `safety_check.cancel.longitudinal_distance_min_threshold` | [m] | double | 2つの車両間の縦距離が十分であり、車線変更が安全かどうかを判断するために使用される縦距離のしきい値 | 2.5 | -| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | 各予測点での車両間の実際のギャップを計算するために使用される時間倍率(RSS距離ではない) | 0.6 | +| 名前 | ユニット | タイプ | 説明 | デフォルト値 | +| --------------------------------------------------------- | -------- | ------ | ------------------------------------------------------------------------------------------------- | ------------ | +| `safety_check.cancel.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキをかけたときの前方車両の最大減速度。(*1) | -1.0 | +| `safety_check.cancel.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキをかけたときの後方車両の最大減速度。(*1) | -2.0 | +| `safety_check.cancel.rear_vehicle_reaction_time` | [s] | double | 前方車両の急ブレーキに気づいてブレーキを踏むまでの後方車両のドライバーの反応時間 | 1.5 | +| `safety_check.cancel.rear_vehicle_safety_time_margin` | [s] | double | 後方車両のドライバーが急ブレーキをかけたときに完全に停止するまでの時間バッファ | 0.8 | +| `safety_check.cancel.lateral_distance_max_threshold` | [m] | double | 2つの車両間の横距離が十分であり、車線変更が安全かどうかを判断するために使用される横距離のしきい値 | 1.0 | +| `safety_check.cancel.longitudinal_distance_min_threshold` | [m] | double | 2つの車両間の縦距離が十分であり、車線変更が安全かどうかを判断するために使用される縦距離のしきい値 | 2.5 | +| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | 各予測点での車両間の実際のギャップを計算するために使用される時間倍率(RSS距離ではない) | 0.6 | ##### 車両が動けなくなった場合にレーンチェンジパスの計算に使用​​される安全制約 -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :---------------------------------------------------- | ----- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -| `safety_check.stuck.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキを実行した場合の前方オブジェクトの最大減速度。(\*1) | -1.0 | -| `safety_check.stuck.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキを実行した場合の後方オブジェクトの最大減速度。(\*1) | -1.0 | -| `safety_check.stuck.rear_vehicle_reaction_time` | [s] | double | 後方車両の運転手が前方の車両の急ブレーキに気付く瞬間からブレーキを踏む瞬間までの反応時間。 | 2.0 | -| `safety_check.stuck.rear_vehicle_safety_time_margin` | [s] | double | 後方車両の運転手が急ブレーキを実行したときに完全に停止するためのタイムバッファ。 | 1.0 | -| `safety_check.stuck.lateral_distance_max_threshold` | [m] | double | 2つのオブジェクト間の横方向の距離が十分かどうか、および車線変更が安全かどうかを判断するために使用される横方向距離の閾値。 | 2.0 | -| `safety_check.stuck.longitudinal_distance_min_threshold` | [m] | double | 2つのオブジェクト間の縦方向の距離が十分かどうか、および車線変更が安全かどうかを判断するために使用される縦方向距離の閾値。 | 3.0 | -| `safety_check.stuck.longitudinal_velocity_delta_time` | [m] | double | 各予測ポイントでの車両間の実際のギャップを計算するために使用される時間乗数(RSS距離ではない)。 | 0.8 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------------------- | ------- | ------ | ------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `safety_check.stuck.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキを実行した場合の前方オブジェクトの最大減速度。(\*1) | -1.0 | +| `safety_check.stuck.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキを実行した場合の後方オブジェクトの最大減速度。(\*1) | -1.0 | +| `safety_check.stuck.rear_vehicle_reaction_time` | [s] | double | 後方車両の運転手が前方の車両の急ブレーキに気付く瞬間からブレーキを踏む瞬間までの反応時間。 | 2.0 | +| `safety_check.stuck.rear_vehicle_safety_time_margin` | [s] | double | 後方車両の運転手が急ブレーキを実行したときに完全に停止するためのタイムバッファ。 | 1.0 | +| `safety_check.stuck.lateral_distance_max_threshold` | [m] | double | 2つのオブジェクト間の横方向の距離が十分かどうか、および車線変更が安全かどうかを判断するために使用される横方向距離の閾値。 | 2.0 | +| `safety_check.stuck.longitudinal_distance_min_threshold` | [m] | double | 2つのオブジェクト間の縦方向の距離が十分かどうか、および車線変更が安全かどうかを判断するために使用される縦方向距離の閾値。 | 3.0 | +| `safety_check.stuck.longitudinal_velocity_delta_time` | [m] | double | 各予測ポイントでの車両間の実際のギャップを計算するために使用される時間乗数(RSS距離ではない)。 | 0.8 | (\*1) この値は負の値でなければなりません。 @@ -1054,30 +1039,29 @@ endif 次のパラメータは `lane_change.param.yaml` で構成できます。 -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------- | ------- | ------- | ------------------------------------------------------------------------------------------------------------------- | ------------- | -| `cancel.enable_on_prepare_phase` | [-] | boolean | レーン変更のキャンセルを許可 | true | -| `cancel.enable_on_lane_changing_phase` | [-] | boolean | レーン変更の中断を許可 | false | -| `cancel.delta_time` | [s] | double | センタラインに戻るステアリングを開始するのにかかる時間 | 3.0 | -| `cancel.duration` | [s] | double | センタラインに戻るために要する時間 | 3.0 | -| `cancel.max_lateral_jerk` | [m/sss] | double | 中断パスの最大横方向ジャーク | 1000.0 | -| `cancel.overhang_tolerance` | [m] | double | 車両ヘッドがこの許容距離を超えて車線境界を超えた場合、レーン変更のキャンセルは禁止される | 0.0 | -| `cancel.unsafe_hysteresis_threshold` | [-] | int | 安全と不安全の決定の間の頻繁な切り替えを防ぐのに役立つしきい値 | 10 | -| `cancel.deceleration_sampling_num` | [-] | int | レーン変更のキャンセルを安全にするためにチェックする 減速度パターンの数 | 5 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------- | ------- | ------- | ---------------------------------------------------------------------------------------- | ------------ | +| `cancel.enable_on_prepare_phase` | [-] | boolean | レーン変更のキャンセルを許可 | true | +| `cancel.enable_on_lane_changing_phase` | [-] | boolean | レーン変更の中断を許可 | false | +| `cancel.delta_time` | [s] | double | センタラインに戻るステアリングを開始するのにかかる時間 | 3.0 | +| `cancel.duration` | [s] | double | センタラインに戻るために要する時間 | 3.0 | +| `cancel.max_lateral_jerk` | [m/sss] | double | 中断パスの最大横方向ジャーク | 1000.0 | +| `cancel.overhang_tolerance` | [m] | double | 車両ヘッドがこの許容距離を超えて車線境界を超えた場合、レーン変更のキャンセルは禁止される | 0.0 | +| `cancel.unsafe_hysteresis_threshold` | [-] | int | 安全と不安全の決定の間の頻繁な切り替えを防ぐのに役立つしきい値 | 10 | +| `cancel.deceleration_sampling_num` | [-] | int | レーン変更のキャンセルを安全にするためにチェックする 減速度パターンの数 | 5 | ### デバッグ 以下のパラメータは `lane_change.param.yaml` で設定できます。 -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| --- | --- | --- | --- | --- | -| `publish_debug_marker` | [-] | ブール型 | デバッグマーカーの公開を設定 | `false` | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| ---------------------- | ---- | -------- | ---------------------------- | ------------ | +| `publish_debug_marker` | [-] | ブール型 | デバッグマーカーの公開を設定 | `false` | ## デバッグマーカーと可視化 デバッグマーカーを有効にするには、(再起動は不要です)を実行します。 - ```shell ros2 param set /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner lane_change.publish_debug_marker true @@ -1087,7 +1071,6 @@ LaneChangeモジュール内の`publish_debug_marker`を`lane_change.param.yaml` 次に、マーカーを追加します。 - ```shell /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lane_change_left ``` @@ -1097,9 +1080,11 @@ LaneChangeモジュール内の`publish_debug_marker`を`lane_change.param.yaml` ### 車線変更戦略 #### 概要 + この戦略では、車両の車線変更に関する予測、決定、実行のためのコンポーネントが提供されます。戦略は、環境内のオブジェクトに関する情報を考慮して、車線変更を実施するかどうかを決定します。 #### コンポーネント + - **Planning Planner** - 車両の軌道と車線変更の実行時間に関する情報を生成します。 - **Safety Checker** @@ -1108,12 +1093,15 @@ LaneChangeモジュール内の`publish_debug_marker`を`lane_change.param.yaml` - PlannerとSafety Checkerからの情報を統合し、車線変更を実施するかどうかを決定します。 ### 起動要件 + この戦略を起動するには、次の情報を提供する必要があります。 + - **自車位置** - **周囲の物体の情報** - **目標車線** ### 利用可能な情報 + **rviz2**で利用できる情報。 ![デバッグ](./images/lane_change-debug-1.png) @@ -1123,9 +1111,9 @@ LaneChangeモジュール内の`publish_debug_marker`を`lane_change.param.yaml` ![デバッグ3](./images/lane_change-debug-3.png) **提供される情報:** + 1. 自車と物体の関係、および安全チェック情報 2. 最新の安全チェック位置までの自車位置(補間) 3. オブジェクトの安全性(ポリゴンの色で表示:緑 = 安全、赤 = 安全でない) 4. 有効な候補パス 5. 車線変更の開始および終了位置 - diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/README.md b/planning/behavior_path_planner/autoware_behavior_path_planner/README.md index d05eadf70e440..4014ed0e256f9 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/README.md @@ -24,17 +24,17 @@ 行動経路プランナーには、次のシーンモジュールがあります。 -| 名称 | 説明 | 詳細 | -| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------- | -| 車線追従 | このモジュールは、レーンレットの中心線から基準パスを生成します。 | [LINK](https://drive.google.com/file/d/1upH4p_9JUod40iEIdAQq4A2H6-52zz-l/view?usp=sharing) | -| 静的障害物回避 | このモジュールは、回避すべきオブジェクトがある場合に回避パスを生成します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_static_obstacle_avoidance_module/README.md) | -| 動的障害物回避 | WIP | [LINK](https://github.com/ros-planning/autoware/tree/master/ros2/autoware_behavior_path_dynamic_obstacle_avoidance_module) | -| 車線変更による回避 | このモジュールは、回避すべきオブジェクトがある場合に車線変更パスを生成します。 | [LINK](https://drive.google.com/file/d/1k7x-4T2Yj_bJhp0-IzY12wY4gII_42Vu/view?usp=sharing) | -| 車線変更 | このモジュールは、必要に応じて実行され、他の車両との衝突チェックが完了します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_lane_change_module/README.md) | -| 外部車線変更 | WIP | [LINK](https://drive.google.com/file/d/13jDgm9Q7ELR00Gka51B_2XquH6e_61cp/view?usp=sharing) | -| ゴールプランナー | このモジュールは、自車が道路車線にいるときでゴールが路側車線にいるときに実行されます。自車はゴールで停止します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_goal_planner_module/README.md) | -| スタートプランナー | このモジュールは、自車が停止していて、自車のフットプリントが路側車線に含まれているときに実行されます。このモジュールは、自車が道路に合流すると終了します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_start_planner_module/README.md) | -| サイドシフト | (リモート制御用)外部の命令に従ってパスを左または右にシフトします。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_side_shift_module/README.md) | +| 名称 | 説明 | 詳細 | +| :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- | +| 車線追従 | このモジュールは、レーンレットの中心線から基準パスを生成します。 | [LINK](https://drive.google.com/file/d/1upH4p_9JUod40iEIdAQq4A2H6-52zz-l/view?usp=sharing) | +| 静的障害物回避 | このモジュールは、回避すべきオブジェクトがある場合に回避パスを生成します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_static_obstacle_avoidance_module/README.md) | +| 動的障害物回避 | WIP | [LINK](https://github.com/ros-planning/autoware/tree/master/ros2/autoware_behavior_path_dynamic_obstacle_avoidance_module) | +| 車線変更による回避 | このモジュールは、回避すべきオブジェクトがある場合に車線変更パスを生成します。 | [LINK](https://drive.google.com/file/d/1k7x-4T2Yj_bJhp0-IzY12wY4gII_42Vu/view?usp=sharing) | +| 車線変更 | このモジュールは、必要に応じて実行され、他の車両との衝突チェックが完了します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_lane_change_module/README.md) | +| 外部車線変更 | WIP | [LINK](https://drive.google.com/file/d/13jDgm9Q7ELR00Gka51B_2XquH6e_61cp/view?usp=sharing) | +| ゴールプランナー | このモジュールは、自車が道路車線にいるときでゴールが路側車線にいるときに実行されます。自車はゴールで停止します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_goal_planner_module/README.md) | +| スタートプランナー | このモジュールは、自車が停止していて、自車のフットプリントが路側車線に含まれているときに実行されます。このモジュールは、自車が道路に合流すると終了します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_start_planner_module/README.md) | +| サイドシフト | (リモート制御用)外部の命令に従ってパスを左または右にシフトします。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_side_shift_module/README.md) | !!! Note @@ -89,32 +89,32 @@ ### 入力 -| 名前 | 必須? | タイプ | 説明 | -| :----------------------------- | :-------: | :----------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ~/input/odometry | ○ | `nav_msgs::msg::Odometry` | 自車速度 | -| ~/input/accel | ○ | `geometry_msgs::msg::AccelWithCovarianceStamped` | 自車加速度 | -| ~/input/objects | ○ | `autoware_perception_msgs::msg::PredictedObjects` | 知覚モジュールからのダイナミックオブジェクト | -| ~/input/occupancy_grid_map | ○ | `nav_msgs::msg::OccupancyGrid` | 知覚モジュールのオキュパンシグリッドマップ。Goal Plannerモジュールでのみ使用されます。 | -| ~/input/traffic_signals | ○ | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 知覚モジュールからの交通信号情報 | -| ~/input/vector_map | ○ | `autoware_map_msgs::msg::LaneletMapBin` | ベクタマップ情報 | -| ~/input/route | ○ | `autoware_planning_msgs::msg::LaneletRoute` | スタートからゴールまでの現在のルート | -| ~/input/scenario | ○ | `tier4_planning_msgs::msg::Scenario` | 現在シナリオが`Scenario:LaneDriving`の場合、ビヘイビアパスプランナーを起動 | -| ~/input/lateral_offset | △ | `tier4_planning_msgs::msg::LateralOffset` | サイドシフトをトリガするための横方向オフセット | -| ~/system/operation_mode/state | ○ | `autoware_adapi_v1_msgs::msg::OperationModeState` | 車両が自律モードにあるか、制御可能であるかどうかをPlanningモジュールに伝える[参照](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/operation-mode.md) | +| 名前 | 必須? | タイプ | 説明 | +| :---------------------------- | :---: | :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| ~/input/odometry | ○ | `nav_msgs::msg::Odometry` | 自車速度 | +| ~/input/accel | ○ | `geometry_msgs::msg::AccelWithCovarianceStamped` | 自車加速度 | +| ~/input/objects | ○ | `autoware_perception_msgs::msg::PredictedObjects` | 知覚モジュールからのダイナミックオブジェクト | +| ~/input/occupancy_grid_map | ○ | `nav_msgs::msg::OccupancyGrid` | 知覚モジュールのオキュパンシグリッドマップ。Goal Plannerモジュールでのみ使用されます。 | +| ~/input/traffic_signals | ○ | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 知覚モジュールからの交通信号情報 | +| ~/input/vector_map | ○ | `autoware_map_msgs::msg::LaneletMapBin` | ベクタマップ情報 | +| ~/input/route | ○ | `autoware_planning_msgs::msg::LaneletRoute` | スタートからゴールまでの現在のルート | +| ~/input/scenario | ○ | `tier4_planning_msgs::msg::Scenario` | 現在シナリオが`Scenario:LaneDriving`の場合、ビヘイビアパスプランナーを起動 | +| ~/input/lateral_offset | △ | `tier4_planning_msgs::msg::LateralOffset` | サイドシフトをトリガするための横方向オフセット | +| ~/system/operation_mode/state | ○ | `autoware_adapi_v1_msgs::msg::OperationModeState` | 車両が自律モードにあるか、制御可能であるかどうかをPlanningモジュールに伝える[参照](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/operation-mode.md) | - ○ 必須: このどれか1つでも存在しない場合、Planning Moduleは動作しません。 - △ オプション: 一部のモジュールは動作しませんが、Planning Moduleは引き続き動作できます。 ### 出力 -| 名前 | タイプ | 説明 | QoSの耐久性 | -|---|---|---|---| -| ~/output/path | `tier4_planning_msgs::msg::PathWithLaneId` | 各モジュールによって生成された経路 | `volatile` | -| ~/output/turn_indicators_cmd | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | ターンシグナルのコマンド | `volatile` | -| ~/output/hazard_lights_cmd | `autoware_vehicle_msgs::msg::HazardLightsCommand` | ハザードランプのコマンド | `volatile` | -| ~/output/modified_goal | `autoware_planning_msgs::msg::PoseWithUuidStamped` | 変更された目標コマンドの出力を示す | `transient_local` | -| ~/output/stop_reasons | `tier4_planning_msgs::msg::StopReasonArray` | 自車停止の理由を説明 | `volatile` | -| ~/output/reroute_availability | `tier4_planning_msgs::msg::RerouteAvailability` | モジュールが採用しようとしている経路。外部からの承認が得られ次第実行される | `volatile` | +| 名前 | タイプ | 説明 | QoSの耐久性 | +| ----------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------- | ----------------- | +| ~/output/path | `tier4_planning_msgs::msg::PathWithLaneId` | 各モジュールによって生成された経路 | `volatile` | +| ~/output/turn_indicators_cmd | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | ターンシグナルのコマンド | `volatile` | +| ~/output/hazard_lights_cmd | `autoware_vehicle_msgs::msg::HazardLightsCommand` | ハザードランプのコマンド | `volatile` | +| ~/output/modified_goal | `autoware_planning_msgs::msg::PoseWithUuidStamped` | 変更された目標コマンドの出力を示す | `transient_local` | +| ~/output/stop_reasons | `tier4_planning_msgs::msg::StopReasonArray` | 自車停止の理由を説明 | `volatile` | +| ~/output/reroute_availability | `tier4_planning_msgs::msg::RerouteAvailability` | モジュールが採用しようとしている経路。外部からの承認が得られ次第実行される | `volatile` | ### デバッグ @@ -179,15 +179,15 @@ - `/localization/debug_info` トピックを subscribe し、ローカリゼーションの結果を確認します。 - `/localization/pose` トピックを subscribe し、自車位置を取得します。 -| 名前 | タイプ | 説明 | QoS の永続性 | -|---|---|---|---| -| ~/debug/avoidance_debug_message_array | `tier4_planning_msgs::msg::AvoidanceDebugMsgArray` | Avoidance のデバッグメッセージ。Avoidance パスを生成できない理由をユーザーに通知します | `volatile` | -| ~/debug/lane_change_debug_message_array | `tier4_planning_msgs::msg::LaneChangeDebugMsgArray` | レーン変更のデバッグメッセージ。レーン変更処理中の危険な理由をユーザーに通知します | `volatile` | -| ~/debug/maximum_drivable_area | `visualization_msgs::msg::MarkerArray` | 最大の静的走行可能領域を表示します | `volatile` | -| ~/debug/turn_signal_info | `visualization_msgs::msg::MarkerArray` | TBA | `volatile` | -| ~/debug/bound | `visualization_msgs::msg::MarkerArray` | 静的走行可能領域のデバッグ | `volatile` | -| ~/planning/path_candidate/* | `autoware_planning_msgs::msg::Path` | 承認前のパス | `volatile` | -| ~/planning/path_reference/* | `autoware_planning_msgs::msg::Path` | 各モジュールによって生成されたリファレンスパス | `volatile` | +| 名前 | タイプ | 説明 | QoS の永続性 | +| --------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------------------- | ------------ | +| ~/debug/avoidance_debug_message_array | `tier4_planning_msgs::msg::AvoidanceDebugMsgArray` | Avoidance のデバッグメッセージ。Avoidance パスを生成できない理由をユーザーに通知します | `volatile` | +| ~/debug/lane_change_debug_message_array | `tier4_planning_msgs::msg::LaneChangeDebugMsgArray` | レーン変更のデバッグメッセージ。レーン変更処理中の危険な理由をユーザーに通知します | `volatile` | +| ~/debug/maximum_drivable_area | `visualization_msgs::msg::MarkerArray` | 最大の静的走行可能領域を表示します | `volatile` | +| ~/debug/turn_signal_info | `visualization_msgs::msg::MarkerArray` | TBA | `volatile` | +| ~/debug/bound | `visualization_msgs::msg::MarkerArray` | 静的走行可能領域のデバッグ | `volatile` | +| ~/planning/path_candidate/\* | `autoware_planning_msgs::msg::Path` | 承認前のパス | `volatile` | +| ~/planning/path_reference/\* | `autoware_planning_msgs::msg::Path` | 各モジュールによって生成されたリファレンスパス | `volatile` | !!! note @@ -207,12 +207,11 @@ Behavior Path Planning内のモジュールの有効化と無効化は、主に2 `behavior_path_planner.launch.xml`ファイルは、`default_preset.yaml`に定義された設定を参照して、Behavior Path Planningのノード実行時に設定を適用するために使用します。たとえば、`behavior_path_planner.launch.xml`の`static_obstacle_avoidance.enable_module`パラメータでは、 - ```xml ``` -### `default_preset.yaml`の`launch_static_obstacle_avoidance_module`に対応する。 +### `default_preset.yaml`の`launch_static_obstacle_avoidance_module`に対応する したがって、モジュールを有効または無効にするには、`default_preset.yaml`内の対応するモジュールを`true`または`false`に設定します。これらの変更は、Autowareの次回の起動時に適用されます。 @@ -302,7 +301,6 @@ Behavior Path Plannerモジュールは、ターンシグナルのコマンド [設定ファイル](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner) は、操作と管理の容易さのために階層的なディレクトリ構造で整理されています。各サブディレクトリには、そのモジュールに関連する具体的な構成ファイルが含まれています。ルートディレクトリには、プランナー全体の動作に適用される一般的な構成ファイルがあります。以下は、ディレクトリ構造とその構成ファイルの概要です。 - ```text behavior_path_planner ├── behavior_path_planner.param.yaml @@ -326,7 +324,6 @@ behavior_path_planner 同様に、[common](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/common) ディレクトリには、さまざまなモジュールで使用される設定ファイルが含まれています。これらの設定ファイルは、Behavior Path Planner の機能に不可欠な共通パラメータと設定を提供します。 - ```text common ├── common.param.yaml @@ -336,7 +333,6 @@ common [Preset](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/preset) ディレクトリには、さまざまなモジュールの動作状態を管理するための構成が含まれています。これには、システム内のモジュールの有効化や無効化を具体的に処理する `default_preset.yaml` ファイルが含まれます。 - ```text preset └── default_preset.yaml @@ -346,4 +342,3 @@ preset 1. ゴールプランナーモジュールは、他のモジュールと同時に実行できません。 2. このモジュールはプラグインとして設計されていません。カスタムモジュールの統合は容易ではなく、ユーザーは動作パス計画メインコードの一部を変更する必要があります。 - diff --git a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md index 21400d9626b45..d67e8872cd0fa 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md @@ -61,17 +61,16 @@ このモジュールには次のような潜在的な改善事項が含まれます。 -*動的重み調整アルゴリズムの実装: 全ての障害物が回避された後、シチュエーションに応じて重みを動的に変更する (つまり、曲率が低く、平均横方向逸脱量が低いパスを優先する)。 +\*動的重み調整アルゴリズムの実装: 全ての障害物が回避された後、シチュエーションに応じて重みを動的に変更する (つまり、曲率が低く、平均横方向逸脱量が低いパスを優先する)。 -*コンピューティング時間を改善し、より動的なソフト制約の重み調整を行うことができる、多目的最適化の実装 [関連出版物](https://ieeexplore.ieee.org/abstract/document/10180226)。 +\*コンピューティング時間を改善し、より動的なソフト制約の重み調整を行うことができる、多目的最適化の実装 [関連出版物](https://ieeexplore.ieee.org/abstract/document/10180226)。 -*別のサンプル取得手法としてベジエ曲線を実装する [sampling_based_plannerモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner)を参照。 +\*別のサンプル取得手法としてベジエ曲線を実装する [sampling_based_plannerモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner)を参照。 -*サンプリングベースの行動経路モジュールで他のいくつかの行動経路モジュールを置き換えることができる可能性を検討する。 +\*サンプリングベースの行動経路モジュールで他のいくつかの行動経路モジュールを置き換えることができる可能性を検討する。 -*このモジュールが成熟し、いくつかの制限が解決されたら、このモジュールのリアルライフテストを実施する。 +\*このモジュールが成熟し、いくつかの制限が解決されたら、このモジュールのリアルライフテストを実施する。 ## その他の可能性 現在、このモジュールは静的障害物回避用パスの作成を目的としています。ただし、サンプリングプランナーの性質により、このモジュールを車線変更、動的回避、目標への一般的な到達などの他のタスクに拡張または転用できます。適切な候補の剪定とソフト制約の適切な重み調整を前提に、サンプリングプランニングの手法を他の行動経路モジュールの代替として使用することが可能です。 - diff --git a/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md index 45190b7257d2c..088c6a678fb85 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md @@ -6,8 +6,8 @@ 1. 必要な横方向オフセット入力を受信します。 2. 次の条件下で`requested_lateral_offset_`を更新します。 - a. 最後の更新時刻が経過したか確認します。 - b. 必要な横方向オフセット値が前の値と異なることを確認します。 + a. 最後の更新時刻が経過したか確認します。 + b. 必要な横方向オフセット値が前の値と異なることを確認します。 3. 側方シフトモジュールのステータスがSHIFTINGステータスの場合は、シフトポイントをパスに挿入します。 `requested_lateral_offset_`は最新の値で常に更新され、キューに入れられないことに注意してください。 @@ -27,7 +27,6 @@ ## フローチャート - ```plantuml @startuml skinparam monochrome true @@ -51,7 +50,6 @@ stop @enduml ``` - ```plantuml @startuml skinparam monochrome true @@ -78,7 +76,6 @@ stop @enduml ``` - ```plantuml @startuml skinparam monochrome true @@ -116,4 +113,3 @@ partition updateState { @enduml ``` - diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md index bc6645ec40d09..526756630d514 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md @@ -104,7 +104,6 @@ 以下のフローチャートは、`canTransitSuccessState` 関数における意思決定プロセスを示しています。 - ```plantuml @startuml @startuml @@ -210,24 +209,24 @@ endif ![priority_order](./images/priority_order.drawio.svg) -** 優先順位 ** +**優先順位** `PriorityOrder` は、各要素が開始姿勢候補のインデックスを表す `size_t` インデックスとプランナータイプで構成されるペアのベクトルとして定義されます。 PriorityOrder ベクトルは先頭から順次処理され、ベクトルの先頭にリストされたペアがプルアウトパスの生成で優先されます。 -##### ** `efficient_path` ** +##### **`efficient_path`** `search_priority` が `efficient_path` に設定され、`shift_pull_out` を優先する場合、`PriorityOrder` 配列は `shift_pull_out` がすべての開始姿勢候補にグループ化された後、次のプランナータイプに移行するように設定されます。この優先順位は配列の順序に反映され、`shift_pull_out` が `geometric_pull_out` の前にリストされています。 -| インデックス | Plan手法 | -|---|---| -| 0 | shift_pull_out | -| 1 | shift_pull_out | -| ... | ... | -| N | shift_pull_out | -| 0 | geometric_pull_out | -| 1 | geometric_pull_out | -| ... | ... | -| N | geometric_pull_out | +| インデックス | Plan手法 | +| ------------ | ------------------ | +| 0 | shift_pull_out | +| 1 | shift_pull_out | +| ... | ... | +| N | shift_pull_out | +| 0 | geometric_pull_out | +| 1 | geometric_pull_out | +| ... | ... | +| N | geometric_pull_out | この手法では、`geometric_pull_out` に進む前に、`shift_pull_out` が適切である可能性が高い状況で効率的である可能性のある `shift_pull_out` ですべて候補を試すことを優先します。 @@ -236,14 +235,14 @@ endif `search_priority` が `short_back_distance` に設定されている場合、アレイは各スタートポーズ候補のプランナタイプを交互に使用して、前の候補が成功した場合に車両が後方移動する距離を最小化できます。 | Index | Planningコンポーネント | -| ----- | -------------------- | -| 0 | shift_pull_out | -| 0 | geometric_pull_out | -| 1 | shift_pull_out | -| 1 | geometric_pull_out | -| ... | ... | -| N | shift_pull_out | -| N | geometric_pull_out | +| ----- | ---------------------- | +| 0 | shift_pull_out | +| 0 | geometric_pull_out | +| 1 | shift_pull_out | +| 1 | geometric_pull_out | +| ... | ... | +| N | shift_pull_out | +| N | geometric_pull_out | この順番付けは、後退距離を最小化することが優先される場合に有益であり、各プランナーに最も近い可能な開始位置で成功する平等な機会を与えます。 @@ -255,7 +254,6 @@ endif - **衝突対応ポリシー**: 生成されたパス上の動的物体との衝突が検出されると、出発前に衝突検出が発生した場合、モジュール非アクティブ決定が登録されます。車両がすでに動き始めた場合、制動制約内で実行可能であり、後続車両が自車と車線境界の隙間を通過できる場合に限り、停止を試みます。 - ```plantuml @startuml start @@ -306,7 +304,6 @@ stop ## 設計 - ```plantuml @startuml package start_planner{ @@ -350,28 +347,26 @@ PullOutPath --o PullOutPlannerBase ## Planningコンポーネントの一般パラメータ - - -| パラメータ名 | 単位 | 型 | 説明 | デフォルト値 | -| :------------------------------------------------------- | :---- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | -| th_arrived_distance | [m] | double | 到達後経路終了距離のしきい値 | 1.0 | -| th_stopped_velocity | [m/s] | double | 到達後経路終了速度のしきい値 | 0.01 | -| th_stopped_time | [s] | double | 到達後経路終了時間のしきい値 | 1.0 | -| th_distance_to_middle_of_the_road | [m] | double | 車両が道路の中間点にいるかどうかを判断するための距離のしきい値 | 0.1 | -| collision_check_margins | [m] | double | 障害物衝突チェックマージンのリスト | [2.0, 1.0, 0.5, 0.1] | -| shift_collision_check_distance_from_end | [m] | double | 衝突チェック距離の終端からのシフト終端姿勢 | -10.0 | -| geometric_collision_check_distance_from_end | [m] | double | 衝突チェック距離の終端幾何学的終端姿勢 | 0.0 | -| collision_check_margin_from_front_object | [m] | double | 前方の対象からの衝突チェックマージン | 5.0 | -| skip_rear_vehicle_check | - | bool | 後続車両チェックをスキップするフラグ(後続車両チェックは、自動運転車が後続車両の進行を妨げているときに安全チェックをスキップして出発を続行するために実行される) | false | -| extra_width_margin_for_rear_obstacle | [m] | double | 自動運転車が路肩車線から車線に合流する間に、後方の障害物が自動運転車を追い抜くことができるかどうかを判断するときに、認知される後方の障害物の幅に追加される追加幅 | 0.5 | -| object_types_to_check_for_path_generation.check_car | - | bool | getPathGen用車検フラグ | true | -| object_types_to_check_for_path_generation.check_truck | - | bool | getPathGen用トラック検査フラグ | true | -| object_types_to_check_for_path_generation.check_bus | - | bool | getPathGen用バス検査フラグ | true | -| object_types_to_check_for_path_generation.check_bicycle | - | bool | getPathGen用自転車検査フラグ | true | -| object_types_to_check_for_path_generation.check_motorcycle | - | bool | getPathGen用オートバイ検査フラグ | true | -| object_types_to_check_for_path_generation.check_pedestrian | - | bool | getPathGen用歩行者検査フラグ | true | -| object_types_to_check_for_path_generation.check_unknown | - | bool | getPathGen用障害物検査フラグ | true | -| center_line_path_interval | [m] | double | 参照中心線経路ポイント間隔 | 1.0 | +| パラメータ名 | 単位 | 型 | 説明 | デフォルト値 | +| :--------------------------------------------------------- | :---- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | +| th_arrived_distance | [m] | double | 到達後経路終了距離のしきい値 | 1.0 | +| th_stopped_velocity | [m/s] | double | 到達後経路終了速度のしきい値 | 0.01 | +| th_stopped_time | [s] | double | 到達後経路終了時間のしきい値 | 1.0 | +| th_distance_to_middle_of_the_road | [m] | double | 車両が道路の中間点にいるかどうかを判断するための距離のしきい値 | 0.1 | +| collision_check_margins | [m] | double | 障害物衝突チェックマージンのリスト | [2.0, 1.0, 0.5, 0.1] | +| shift_collision_check_distance_from_end | [m] | double | 衝突チェック距離の終端からのシフト終端姿勢 | -10.0 | +| geometric_collision_check_distance_from_end | [m] | double | 衝突チェック距離の終端幾何学的終端姿勢 | 0.0 | +| collision_check_margin_from_front_object | [m] | double | 前方の対象からの衝突チェックマージン | 5.0 | +| skip_rear_vehicle_check | - | bool | 後続車両チェックをスキップするフラグ(後続車両チェックは、自動運転車が後続車両の進行を妨げているときに安全チェックをスキップして出発を続行するために実行される) | false | +| extra_width_margin_for_rear_obstacle | [m] | double | 自動運転車が路肩車線から車線に合流する間に、後方の障害物が自動運転車を追い抜くことができるかどうかを判断するときに、認知される後方の障害物の幅に追加される追加幅 | 0.5 | +| object_types_to_check_for_path_generation.check_car | - | bool | getPathGen用車検フラグ | true | +| object_types_to_check_for_path_generation.check_truck | - | bool | getPathGen用トラック検査フラグ | true | +| object_types_to_check_for_path_generation.check_bus | - | bool | getPathGen用バス検査フラグ | true | +| object_types_to_check_for_path_generation.check_bicycle | - | bool | getPathGen用自転車検査フラグ | true | +| object_types_to_check_for_path_generation.check_motorcycle | - | bool | getPathGen用オートバイ検査フラグ | true | +| object_types_to_check_for_path_generation.check_pedestrian | - | bool | getPathGen用歩行者検査フラグ | true | +| object_types_to_check_for_path_generation.check_unknown | - | bool | getPathGen用障害物検査フラグ | true | +| center_line_path_interval | [m] | double | 参照中心線経路ポイント間隔 | 1.0 | ### **自車速度計画** @@ -387,71 +382,71 @@ PullOutPath --o PullOutPlannerBase `stop_condition` のパラメータは停止条件の基準を定義します。 -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :------------------------------- | :----- | :------ | :--------------------------------------- | :---------- | -| `maximum_deceleration_for_stop` | [m/s^2] | double | 停止時の最大減速度 | 1.0 | -| `maximum_jerk_for_stop` | [m/s^3] | double | 停止時の最大ジャーク | 1.0 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :------------------------------ | :------ | :----- | :------------------- | :----------- | +| `maximum_deceleration_for_stop` | [m/s^2] | double | 停止時の最大減速度 | 1.0 | +| `maximum_jerk_for_stop` | [m/s^3] | double | 停止時の最大ジャーク | 1.0 | ### 自車予測経路パラメータ `path_safety_check.ego_predicted_path` のパラメータは、自車予測経路特性を指定します。 -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :---------------------------- | :------ | :----- | :------------------------------------------------- | :------------ | -| min_velocity | [m/s] | double | 自車位置の予測経路の最小速度 | 0.0 | -| acceleration | [m/s^2] | double | 自車位置の予測経路の加速度 | 1.0 | -| max_velocity | [m/s] | double | 自車位置の予測経路の最大速度 | 1.0 | -| time_horizon_for_front_object | [s] | double | 先方物体の予測時間幅 | 10.0 | -| time_horizon_for_rear_object | [s] | double | 後方物体の予測時間幅 | 10.0 | -| time_resolution | [s] | double | 自車位置の予測経路の時間分解能 | 0.5 | -| delay_until_departure | [s] | double | 自車が発進するまでの遅延時間 | 1.0 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :---------------------------- | :------ | :----- | :----------------------------- | :----------- | +| min_velocity | [m/s] | double | 自車位置の予測経路の最小速度 | 0.0 | +| acceleration | [m/s^2] | double | 自車位置の予測経路の加速度 | 1.0 | +| max_velocity | [m/s] | double | 自車位置の予測経路の最大速度 | 1.0 | +| time_horizon_for_front_object | [s] | double | 先方物体の予測時間幅 | 10.0 | +| time_horizon_for_rear_object | [s] | double | 後方物体の予測時間幅 | 10.0 | +| time_resolution | [s] | double | 自車位置の予測経路の時間分解能 | 0.5 | +| delay_until_departure | [s] | double | 自車が発進するまでの遅延時間 | 1.0 | ### ターゲットオブジェクトフィルタリングのパラメーター `target_filtering` のパラメーターは、セーフティチェックのためのターゲットオブジェクトのフィルタリングに関連しています。 -| Name | 単位 | タイプ | 説明 | デフォルト値 | -| :---------------------------------------------- | :---- | :----- | :-------------------------------------------------------------------------- | :------------ | -| safety_check_time_horizon | [秒] | 倍精度 | 自車と動的オブジェクトの予測パスの時間範囲 | 5.0 | -| safety_check_time_resolution | [秒] | 倍精度 | 自車と動的オブジェクトの予測パスの時間解像度 | 1.0 | -| object_check_forward_distance | [m] | 倍精度 | 物体検出の前方距離 | 10.0 | -| object_check_backward_distance | [m] | 倍精度 | 物体検出の後方距離 | 100.0 | -| ignore_object_velocity_threshold | [m/秒] | 倍精度 | 物体が無視される速度しきい値 | 1.0 | -| object_types_to_check.check_car | - | ブール | 車を検査するためのフラグ | true | -| object_types_to_check.check_truck | - | ブール | トラックを検査するためのフラグ | true | -| object_types_to_check.check_bus | - | ブール | バスを検査するためのフラグ | true | -| object_types_to_check.check_trailer | - | ブール | トレーラーを検査するためのフラグ | true | -| object_types_to_check.check_bicycle | - | ブール | 自転車を検査するためのフラグ | true | -| object_types_to_check.check_motorcycle | - | ブール | オートバイを検査するためのフラグ | true | -| object_types_to_check.check_pedestrian | - | ブール | 歩行者を検査するためのフラグ | true | -| object_types_to_check.check_unknown | - | ブール | 不明なタイプのオブジェクトを検査するためのフラグ | false | -| object_lane_configuration.check_current_lane | - | ブール | 現在の車線を検査するためのフラグ | true | -| object_lane_configuration.check_right_side_lane | - | ブール | 右側の車線を検査するためのフラグ | true | -| object_lane_configuration.check_left_side_lane | - | ブール | 左側の車線を検査するためのフラグ | true | -| object_lane_configuration.check_shoulder_lane | - | ブール | 路肩を検査するためのフラグ | true | -| object_lane_configuration.check_other_lane | - | ブール | 他の車線を検査するためのフラグ | false | -| include_opposite_lane | - | ブール | 反対車線を検査に含めるフラグ | false | -| invert_opposite_lane | - | ブール | 反対車線の検査を反転するフラグ | false | -| check_all_predicted_path | - | ブール | すべての予測パスを検査するためのフラグ | true | -| use_all_predicted_path | - | ブール | すべての予測パスを使用するためのフラグ | true | -| use_predicted_path_outside_lanelet | - | ブール | 車線外側の予測パスを使用するためのフラグ | false | +| Name | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------------- | :----- | :----- | :----------------------------------------------- | :----------- | +| safety_check_time_horizon | [秒] | 倍精度 | 自車と動的オブジェクトの予測パスの時間範囲 | 5.0 | +| safety_check_time_resolution | [秒] | 倍精度 | 自車と動的オブジェクトの予測パスの時間解像度 | 1.0 | +| object_check_forward_distance | [m] | 倍精度 | 物体検出の前方距離 | 10.0 | +| object_check_backward_distance | [m] | 倍精度 | 物体検出の後方距離 | 100.0 | +| ignore_object_velocity_threshold | [m/秒] | 倍精度 | 物体が無視される速度しきい値 | 1.0 | +| object_types_to_check.check_car | - | ブール | 車を検査するためのフラグ | true | +| object_types_to_check.check_truck | - | ブール | トラックを検査するためのフラグ | true | +| object_types_to_check.check_bus | - | ブール | バスを検査するためのフラグ | true | +| object_types_to_check.check_trailer | - | ブール | トレーラーを検査するためのフラグ | true | +| object_types_to_check.check_bicycle | - | ブール | 自転車を検査するためのフラグ | true | +| object_types_to_check.check_motorcycle | - | ブール | オートバイを検査するためのフラグ | true | +| object_types_to_check.check_pedestrian | - | ブール | 歩行者を検査するためのフラグ | true | +| object_types_to_check.check_unknown | - | ブール | 不明なタイプのオブジェクトを検査するためのフラグ | false | +| object_lane_configuration.check_current_lane | - | ブール | 現在の車線を検査するためのフラグ | true | +| object_lane_configuration.check_right_side_lane | - | ブール | 右側の車線を検査するためのフラグ | true | +| object_lane_configuration.check_left_side_lane | - | ブール | 左側の車線を検査するためのフラグ | true | +| object_lane_configuration.check_shoulder_lane | - | ブール | 路肩を検査するためのフラグ | true | +| object_lane_configuration.check_other_lane | - | ブール | 他の車線を検査するためのフラグ | false | +| include_opposite_lane | - | ブール | 反対車線を検査に含めるフラグ | false | +| invert_opposite_lane | - | ブール | 反対車線の検査を反転するフラグ | false | +| check_all_predicted_path | - | ブール | すべての予測パスを検査するためのフラグ | true | +| use_all_predicted_path | - | ブール | すべての予測パスを使用するためのフラグ | true | +| use_predicted_path_outside_lanelet | - | ブール | 車線外側の予測パスを使用するためのフラグ | false | ### 安全確認パラメータ `safety_check_params` のパラメータは、安全確認の設定を定義しています。 -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------------- | :--- | :----- | :----------------------------------------------------------------------------------------------- | :------------ | -| enable_safety_check | - | bool | セーフティチェックを有効にするフラグ | true | -| check_all_predicted_path | - | bool | 予測パスをすべてチェックするフラグ | true | -| publish_debug_marker | - | bool | デバッグマーカーを発行するフラグ | false | -| rss_params.rear_vehicle_reaction_time | [s] | double | 後続車の反応時間 | 2.0 | -| rss_params.rear_vehicle_safety_time_margin | [s] | double | 後続車のセーフティタイムマージン | 1.0 | -| rss_params.lateral_distance_max_threshold | [m] | double | 最大横方向距離のしきい値 | 2.0 | -| rss_params.longitudinal_distance_min_threshold | [m] | double | 最小縦方向距離のしきい値 | 3.0 | -| rss_params.longitudinal_velocity_delta_time | [s] | double | 縦速度のデルタ時間 | 0.8 | -| hysteresis_factor_expand_rate | - | double | ヒステリシスの拡張/縮小率 | 1.0 | -| collision_check_yaw_diff_threshold | - | double | RSSベースのコリジョンチェックの実行時にEgoとオブジェクト間の最大ヨー差 | 1.578 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :--------------------------------------------- | :--- | :----- | :--------------------------------------------------------------------- | :----------- | +| enable_safety_check | - | bool | セーフティチェックを有効にするフラグ | true | +| check_all_predicted_path | - | bool | 予測パスをすべてチェックするフラグ | true | +| publish_debug_marker | - | bool | デバッグマーカーを発行するフラグ | false | +| rss_params.rear_vehicle_reaction_time | [s] | double | 後続車の反応時間 | 2.0 | +| rss_params.rear_vehicle_safety_time_margin | [s] | double | 後続車のセーフティタイムマージン | 1.0 | +| rss_params.lateral_distance_max_threshold | [m] | double | 最大横方向距離のしきい値 | 2.0 | +| rss_params.longitudinal_distance_min_threshold | [m] | double | 最小縦方向距離のしきい値 | 3.0 | +| rss_params.longitudinal_velocity_delta_time | [s] | double | 縦速度のデルタ時間 | 0.8 | +| hysteresis_factor_expand_rate | - | double | ヒステリシスの拡張/縮小率 | 1.0 | +| collision_check_yaw_diff_threshold | - | double | RSSベースのコリジョンチェックの実行時にEgoとオブジェクト間の最大ヨー差 | 1.578 | ## **経路生成** @@ -473,18 +468,18 @@ PullOutPath --o PullOutPlannerBase #### Shift Pull Outのパラメーター -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :----------------------------------------------- | :----- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_shift_pull_out | [-] | bool | Shift pull out を有効にするかどうか | true | -| check_shift_path_lane_departure | [-] | bool | Shift path の車両逸脱量をチェックするかどうか | true | -| allow_check_shift_path_lane_departure_override | [-] | bool | エゴビークルの現在の位置がすでに車両逸脱中である場合に、車両逸脱のチェックを上書き/キャンセルするフラグ | false | -| shift_pull_out_velocity | [m/s] | double | Shift pull out の速度 | 2.0 | -| pull_out_sampling_num | [-] | int | 横方向加速度の最小値から最大値の範囲内でサンプリングする回数 | 4 | -| maximum_lateral_jerk | [m/s3] | double | 最大横方向加速度 | 2.0 | -| minimum_lateral_jerk | [m/s3] | double | 最小横方向加速度 | 0.1 | -| minimum_shift_pull_out_distance | [m] | double | 最小 Shift pull out 距離。計算された pull out 距離がこれよりも短かった場合、Path 生成にこれを用いる。 | 0.0 | -| maximum_curvature | [1/m] | double | 最大曲率。Shift pull out 距離を、参照パスが直線で、2 つの近似弧でシフトされたものと仮定して、この最大曲率から計算する。シフトパスまたは曲線内の曲率は考慮されない。 | 0.07 | -| end_pose_curvature_threshold | [1/m] | double | Shift pull out 距離を計算するために使用される曲率の閾値。シフトのエンドポーズは、シフトのエンドポーズの曲率がこの値未満になるように前方にシフトされる。これは、エンドポーズが曲線上にある場合に生成されたパスに大きな曲率が発生するのを防ぐためである。閾値以下の曲率を持つシフトのエンドポーズが見つからない場合、Shift pull out 距離は特定の距離を越えた地点のうち、最も曲率が低い地点までの距離として使用される。 | 0.01 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :--------------------------------------------- | :----- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| enable_shift_pull_out | [-] | bool | Shift pull out を有効にするかどうか | true | +| check_shift_path_lane_departure | [-] | bool | Shift path の車両逸脱量をチェックするかどうか | true | +| allow_check_shift_path_lane_departure_override | [-] | bool | エゴビークルの現在の位置がすでに車両逸脱中である場合に、車両逸脱のチェックを上書き/キャンセルするフラグ | false | +| shift_pull_out_velocity | [m/s] | double | Shift pull out の速度 | 2.0 | +| pull_out_sampling_num | [-] | int | 横方向加速度の最小値から最大値の範囲内でサンプリングする回数 | 4 | +| maximum_lateral_jerk | [m/s3] | double | 最大横方向加速度 | 2.0 | +| minimum_lateral_jerk | [m/s3] | double | 最小横方向加速度 | 0.1 | +| minimum_shift_pull_out_distance | [m] | double | 最小 Shift pull out 距離。計算された pull out 距離がこれよりも短かった場合、Path 生成にこれを用いる。 | 0.0 | +| maximum_curvature | [1/m] | double | 最大曲率。Shift pull out 距離を、参照パスが直線で、2 つの近似弧でシフトされたものと仮定して、この最大曲率から計算する。シフトパスまたは曲線内の曲率は考慮されない。 | 0.07 | +| end_pose_curvature_threshold | [1/m] | double | Shift pull out 距離を計算するために使用される曲率の閾値。シフトのエンドポーズは、シフトのエンドポーズの曲率がこの値未満になるように前方にシフトされる。これは、エンドポーズが曲線上にある場合に生成されたパスに大きな曲率が発生するのを防ぐためである。閾値以下の曲率を持つシフトのエンドポーズが見つからない場合、Shift pull out 距離は特定の距離を越えた地点のうち、最も曲率が低い地点までの距離として使用される。 | 0.01 | ### **geometric pull out** @@ -497,14 +492,14 @@ PullOutPath --o PullOutPlannerBase #### geometric pull out のパラメータ -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :-------------------------------------- | :---- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_geometric_pull_out | [-] | bool | ジオメトリプルアウトを有効にするフラグ | true | -| divide_pull_out_path | [-] | bool | 円弧パスを分割するフラグ。曲率が連続ではないため、パスは分割されていると想定されます。ただし、出発中に停止が必要です。 | false | -| geometric_pull_out_velocity | [m/s] | double | ジオメトリプルアウトの速度 | 1.0 | -| lane_departure_margin | [m] | double | 右側車線を逸脱する際の許容範囲 | 0.2 | -| lane_departure_check_expansion_margin | [m] | double | 車線逸脱チェック時の自車Footprintの拡大マージン | 0.0 | -| pull_out_max_steer_angle | [rad] | double | パス生成における最大操舵角 | 0.26 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------ | :---- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :----------- | +| enable_geometric_pull_out | [-] | bool | ジオメトリプルアウトを有効にするフラグ | true | +| divide_pull_out_path | [-] | bool | 円弧パスを分割するフラグ。曲率が連続ではないため、パスは分割されていると想定されます。ただし、出発中に停止が必要です。 | false | +| geometric_pull_out_velocity | [m/s] | double | ジオメトリプルアウトの速度 | 1.0 | +| lane_departure_margin | [m] | double | 右側車線を逸脱する際の許容範囲 | 0.2 | +| lane_departure_check_expansion_margin | [m] | double | 車線逸脱チェック時の自車Footprintの拡大マージン | 0.0 | +| pull_out_max_steer_angle | [rad] | double | パス生成における最大操舵角 | 0.26 | ## **後退引き出し始点の検索** @@ -516,14 +511,14 @@ PullOutPath --o PullOutPlannerBase ### **後退引き出し開始点検索のパラメータ** -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :-------------------------- | :--- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| enable_back | [-] | bool | 開始点として後方検索するかどうか | true | -| search_priority | [-] | string | `efficient_path`の場合、後方距離が長くても効率的な経路を使用する。 `short_back_distance`の場合、後方距離が短い経路を使用 | efficient_path | -| max_back_distance | [m] | double | 後方距離の最大値 | 30.0 | -| backward_search_resolution | [m] | double | 後方引き出し開始点の検索間隔 | 2.0 | -| backward_path_update_duration | [s] | double | 後方引き出し開始点の検索時間間隔。これにより、後方走行と引き出しのチャッタリングを防ぐことができる | 3.0 | -| ignore_distance_from_lane_end | [m] | double | シフト開始位置から側道レーンの終了までの距離がこの値より小さい場合、この開始位置の候補は無視される | 15.0 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------- | :--- | :----- | :----------------------------------------------------------------------------------------------------------------------- | :------------- | +| enable_back | [-] | bool | 開始点として後方検索するかどうか | true | +| search_priority | [-] | string | `efficient_path`の場合、後方距離が長くても効率的な経路を使用する。 `short_back_distance`の場合、後方距離が短い経路を使用 | efficient_path | +| max_back_distance | [m] | double | 後方距離の最大値 | 30.0 | +| backward_search_resolution | [m] | double | 後方引き出し開始点の検索間隔 | 2.0 | +| backward_path_update_duration | [s] | double | 後方引き出し開始点の検索時間間隔。これにより、後方走行と引き出しのチャッタリングを防ぐことができる | 3.0 | +| ignore_distance_from_lane_end | [m] | double | シフト開始位置から側道レーンの終了までの距離がこの値より小さい場合、この開始位置の候補は無視される | 15.0 | ### **フリースペースでの引き出し** @@ -540,12 +535,11 @@ PullOutPath --o PullOutPlannerBase #### フリースペース駐車のパラメータ -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :----------------------------- | :--- | :------- | :------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| enable_freespace_planner | [-] | ブール | 車両が走行する車線に障害物があり、車両が立ち往生した際に実行するフリースペースプルのフラグを有効にします | true | -| end_pose_search_start_distance | [m] | 倍精度 | 自車からfreespace_pull_outのドライビングレーンで終端点の検索を開始する地点までの距離 | 20.0 | -| end_pose_search_end_distance | [m] | 倍精度 | 自車からfreespace_pull_outのドライビングレーンで終端点の検索を終了する地点までの距離 | 30.0 | -| end_pose_search_interval | [m] | 倍精度 | freespace_pull_outのドライビングレーンで終端点を検索する間隔 | 2.0 | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :----------------------------- | :--- | :----- | :------------------------------------------------------------------------------------------------------- | :----------- | +| enable_freespace_planner | [-] | ブール | 車両が走行する車線に障害物があり、車両が立ち往生した際に実行するフリースペースプルのフラグを有効にします | true | +| end_pose_search_start_distance | [m] | 倍精度 | 自車からfreespace_pull_outのドライビングレーンで終端点の検索を開始する地点までの距離 | 20.0 | +| end_pose_search_end_distance | [m] | 倍精度 | 自車からfreespace_pull_outのドライビングレーンで終端点の検索を終了する地点までの距離 | 30.0 | +| end_pose_search_interval | [m] | 倍精度 | freespace_pull_outのドライビングレーンで終端点を検索する間隔 | 2.0 | その他の詳細は [freespace_planner](../autoware_freespace_planner/README.md) を参照してください。 - diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md index 0f37a7089cd80..85000127a03f2 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md @@ -28,7 +28,6 @@ このモジュールには、主にターゲットフィルタリングとパスジェネレーションの2つの部分があります。最初に、すべてのオブジェクトがいくつかの条件でフィルタリングされます。このステップで、モジュールは回避の実現可能性と必要性をチェックします。その後、このモジュールは、フィルタリングされたオブジェクトを基に、**シフトライン**と呼ばれる回避パスの輪郭を生成します。シフトラインは[パスシフター](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)に設定されます。パスシフターは、スムーズなシフトパスの生成に使用されるパスジェネレーション用のライブラリです。さらに、このモジュールには、エゴがターゲットオブジェクトを安全に回避できるように、ターゲット以外のオブジェクトをチェックする機能があります。この機能は、生成された回避パスと周囲のオブジェクトを受け取り、現在の状況を判断します。最後に、このモジュールは現在のエゴ挙動を更新します。 - ```plantuml @startuml skinparam monochrome true @@ -213,22 +212,22 @@ stop このモジュールは、回避するターゲットオブジェクトをフィルタリングするために、以下の条件を使用します。 -| 条件の確認 | ターゲットクラス | 詳細 | 条件が満たされない場合 | -| --------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | -| 回避対象クラスオブジェクトですか? | 全て | 設定ファイルから回避対象クラスを選択できます。 | 回避しません。 | -| 停止中のオブジェクトですか? | 全て | `th_moving_speed`よりも速い速度を`th_moving_time`よりも長い時間維持するオブジェクトは移動中と判断されます。 | 回避しません。 | -| 検知エリア内ですか? | 全て | モジュールは設定ファイルの横方向マージンに基づいて対象オブジェクトを大まかにフィルターするために検知エリアを作成します。([こちら](#width-of-detection-area)を参照) | 回避しません。 | -| オブジェクトとパスの間に十分な横方向距離がないですか? | 全て | - | 回避しません。 | -| 自車線のセンターラインの近くですか? | 全て | - | その他の条件によって異なります。 | -| オブジェクトの近くに横断歩道がありますか? | 歩行者、自転車 | モジュールは横断歩道の近くに歩行者と自転車を回避しません。横断歩道で道路を渡っている場合、自車は停止する必要があるからです。([こちら](#for-crosswalk-users)を参照) | 回避しません。 | -| パス上のオブジェクトと信号との距離がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | この条件は、車両が駐車されているかどうかが不明な場合に使用されます。 | その他の条件によって異なります。 | -| パス上のオブジェクトと横断歩道信号との距離がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | -| 停止時間がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | -| 交差点内ですか? | 乗用車、トラック、バス、トレーラー | モジュールは交差点内に駐車車両がないことを前提としています。 | その他の条件によって異なります。 | -| 自車線上にありますか? | 乗用車、トラック、バス、トレーラー | - | その他の条件によって異なります。 | -| 駐車車両ですか? | 乗用車、トラック、バス、トレーラー | モジュールは横方向オフセットに基づいて車両が駐車車両かどうかを判断します。([こちら](#judge-if-its-a-parked-vehicle)を参照) | その他の条件によって異なります。 | -| 他車線から自車線に合流していますか? | 乗用車、トラック、バス、トレーラー | モジュールはヨー角とオフセットの方向に基づいて車両の挙動を判断します。([こちら](#judge-vehicle-behavior)を参照) | その他の条件によって異なります。 | -| 自車線から他車線に合流していますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | +| 条件の確認 | ターゲットクラス | 詳細 | 条件が満たされない場合 | +| ------------------------------------------------------------------------------ | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | +| 回避対象クラスオブジェクトですか? | 全て | 設定ファイルから回避対象クラスを選択できます。 | 回避しません。 | +| 停止中のオブジェクトですか? | 全て | `th_moving_speed`よりも速い速度を`th_moving_time`よりも長い時間維持するオブジェクトは移動中と判断されます。 | 回避しません。 | +| 検知エリア内ですか? | 全て | モジュールは設定ファイルの横方向マージンに基づいて対象オブジェクトを大まかにフィルターするために検知エリアを作成します。([こちら](#width-of-detection-area)を参照) | 回避しません。 | +| オブジェクトとパスの間に十分な横方向距離がないですか? | 全て | - | 回避しません。 | +| 自車線のセンターラインの近くですか? | 全て | - | その他の条件によって異なります。 | +| オブジェクトの近くに横断歩道がありますか? | 歩行者、自転車 | モジュールは横断歩道の近くに歩行者と自転車を回避しません。横断歩道で道路を渡っている場合、自車は停止する必要があるからです。([こちら](#for-crosswalk-users)を参照) | 回避しません。 | +| パス上のオブジェクトと信号との距離がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | この条件は、車両が駐車されているかどうかが不明な場合に使用されます。 | その他の条件によって異なります。 | +| パス上のオブジェクトと横断歩道信号との距離がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | +| 停止時間がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | +| 交差点内ですか? | 乗用車、トラック、バス、トレーラー | モジュールは交差点内に駐車車両がないことを前提としています。 | その他の条件によって異なります。 | +| 自車線上にありますか? | 乗用車、トラック、バス、トレーラー | - | その他の条件によって異なります。 | +| 駐車車両ですか? | 乗用車、トラック、バス、トレーラー | モジュールは横方向オフセットに基づいて車両が駐車車両かどうかを判断します。([こちら](#judge-if-its-a-parked-vehicle)を参照) | その他の条件によって異なります。 | +| 他車線から自車線に合流していますか? | 乗用車、トラック、バス、トレーラー | モジュールはヨー角とオフセットの方向に基づいて車両の挙動を判断します。([こちら](#judge-vehicle-behavior)を参照) | その他の条件によって異なります。 | +| 自車線から他車線に合流していますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | ### 一般的な条件 @@ -236,7 +235,6 @@ stop モジュールは、以下のパラメータに基づいて、ターゲットのフィルタリング用の検出エリアを生成します。 - ```yaml # avoidance is performed for the object type with true target_object: @@ -268,7 +266,6 @@ stop パラメータ`detection_area.static`が`false`に設定されている場合、モジュールは自車が最小の側方ジャーク値でオブジェクトを回避できるように検出領域を作成します。したがって、縦方向距離は最大側方シフト長、側方ジャーク制約、および現在の自車速度によって異なります。さらに、準備段階で使用される距離も考慮する必要があります。 - ```c++ ... const auto max_shift_length = std::max( @@ -296,19 +293,17 @@ stop このモジュールは、ヨー角とオフセット方向に基づいて車両を以下の3つの挙動に分類します。 - ```yaml # params for filtering objects that are in intersection intersection: yaw_deviation: 0.349 # [rad] (default 20.0deg) ``` -| 動作 | 詳細 | 図形 | -| ------ | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -| NONE | オブジェクトの車線に対する相対的な偏角が閾値 `yaw_deviation` 未満の場合、`NONE` に分類されます。 | ![fig](./images/target_filter/none.png) | -| MERGING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/merging.png) | -| DEVIATING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/deviating.png) | - +| 動作 | 詳細 | 図形 | +| --------- | ------------------------------------------------------------------------------------------------ | -------------------------------------------- | +| NONE | オブジェクトの車線に対する相対的な偏角が閾値 `yaw_deviation` 未満の場合、`NONE` に分類されます。 | ![fig](./images/target_filter/none.png) | +| MERGING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/merging.png) | +| DEVIATING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/deviating.png) | ```plantuml @startuml @@ -371,24 +366,23 @@ $$ ### ターゲットオブジェクトのフィルタリング -| 状況 | 詳細 | 自車動作 | -| ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| 自車がHDMapで定義された交差点エリア内にある場合。このモジュールは、車線を走行中または自車線に合流中の車両を無視する | ![fig](./images/target_filter/never_avoid_intersection.png) | 回避しない。 | -| 自車が自車線上にいる場合、両側に隣接した車線がある | ![fig](./images/target_filter/never_avoid_not_edge.png) | 回避しない。 | -| 自車線から他の車線に合流中の車両。その車両のフットプリントの大部分が自車線にある | ![fig](./images/target_filter/never_avoid_deviating.png) | 回避しない。 | -| 他の車線から自車線に合流中の車両。その車両のフットプリントの大部分が自車線にある | ![fig](./images/target_filter/never_avoid_merging.png) | 回避しない。 | -| 駐車しているようには見えないが、横断歩道または信号の前に停止している車両 | ![fig](./images/target_filter/never_avoid_stop_factor.png) | 回避しない。 | -| 道路脇に停車しようとして自車線上で停止した車両 | ![fig](./images/target_filter/avoid_on_ego_lane.png) | すぐに回避する。 | -| 隣接した車線で停止した車両 | ![fig](./images/target_filter/avoid_not_on_ego_lane.png) | すぐに回避する。 | -| 道路脇に停車せずに自車線上で停止した車両 | ![fig](./images/target_filter/ambiguous_parallel.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | -| 他の車線から自車線に合流中の車両 | ![fig](./images/target_filter/ambiguous_merging.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | -| 自車線から他の車線に合流中の車両 | ![fig](./images/target_filter/ambiguous_deviating.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | +| 状況 | 詳細 | 自車動作 | +| ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| 自車がHDMapで定義された交差点エリア内にある場合。このモジュールは、車線を走行中または自車線に合流中の車両を無視する | ![fig](./images/target_filter/never_avoid_intersection.png) | 回避しない。 | +| 自車が自車線上にいる場合、両側に隣接した車線がある | ![fig](./images/target_filter/never_avoid_not_edge.png) | 回避しない。 | +| 自車線から他の車線に合流中の車両。その車両のフットプリントの大部分が自車線にある | ![fig](./images/target_filter/never_avoid_deviating.png) | 回避しない。 | +| 他の車線から自車線に合流中の車両。その車両のフットプリントの大部分が自車線にある | ![fig](./images/target_filter/never_avoid_merging.png) | 回避しない。 | +| 駐車しているようには見えないが、横断歩道または信号の前に停止している車両 | ![fig](./images/target_filter/never_avoid_stop_factor.png) | 回避しない。 | +| 道路脇に停車しようとして自車線上で停止した車両 | ![fig](./images/target_filter/avoid_on_ego_lane.png) | すぐに回避する。 | +| 隣接した車線で停止した車両 | ![fig](./images/target_filter/avoid_not_on_ego_lane.png) | すぐに回避する。 | +| 道路脇に停車せずに自車線上で停止した車両 | ![fig](./images/target_filter/ambiguous_parallel.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | +| 他の車線から自車線に合流中の車両 | ![fig](./images/target_filter/ambiguous_merging.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | +| 自車線から他の車線に合流中の車両 | ![fig](./images/target_filter/ambiguous_deviating.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | ### フローチャート `isSatisfiedWithCommonCondition()`, `isSatisfiedWithVehicleCondition()`, `isSatisfiedWithNonVehicleCondition()`の3つのメインフィルタリング関数があります。フィルタリングプロセスは次のフローチャートに従って実行されます。さらに、このモジュールはコンフィグファイル内のオブジェクトの姿勢、エゴパス、横マージンに基づいて`isNoNeedAvoidanceBehavior()`で回避の必要性を確認します。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -438,7 +432,6 @@ stop まず、`isSatisfiedWithCommonCondition()` 関数には、すべてのオブジェクトクラスに使用される条件が含まれます。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -492,7 +485,6 @@ stop 次のステップとして、オブジェクトはそのクラスに特化した条件でフィルタリングされます。 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -557,7 +549,6 @@ stop ``` - ```plantuml @startuml skinparam defaultTextAlignment center @@ -627,7 +618,6 @@ stop @enduml ``` - ```plantuml @startuml skinparam defaultTextAlignment center @@ -676,7 +666,6 @@ stop - 歩行者 - 自転車 - ```plantuml @startuml skinparam defaultTextAlignment center @@ -723,7 +712,6 @@ stop ターゲット オブジェクトが消えた際のエゴの動作は、ユーザーが選択できます。 - ```yaml cancel: enable: true # [-] @@ -748,7 +736,6 @@ cancel: エンベロープ多角形は長方形のボックスで、サイズはオブジェクトの多角形とバッファパラメータ「envelope_buffer_margin」によって異なります。さらに、常に基準パスと平行です。モジュールがターゲットオブジェクトを初めて検出したとき、多角形を初期化します。 - ```yaml car: ... @@ -773,7 +760,6 @@ cancel: 2 つの点の横方向の位置は、自車本体と封筒ポリゴン境界点の最もオーバーハングした点の間に十分なスペース (= 横方向余裕) ができるようになっています。ユーザーは、次のパラメーターを使用して横方向余裕を調整できます。 - ```yaml car: ... @@ -785,7 +771,6 @@ cancel: 縦方向の位置は、エンベロープ多角形、自車仕様、次のパラメーターに依存します。回避シフトセクションの終点とエンベロープ多角形 (つまり前面縦方向バッファ) との縦方向距離は、`consider_front_overhang` パラメーターが `true` の場合、`vehicle_info.param.yaml` で定義された `front_overhang` と `longitudinal_margin` の合計です。`consider_front_overhang` が `false` の場合、`longitudinal_margin` のみが考慮されます。同様に、復帰シフトセクションの始点とエンベロープ多角形 (つまり後方縦方向バッファ) との距離は、`rear_overhang` と `longitudinal_margin` の合計です。 - ```yaml target_object: @@ -806,7 +791,6 @@ cancel: 上記のとおり、横断マージンは次の2種類のタイプのパラメータを変更することで調整できます。`soft_margin`は横断マージンのソフト制約パラメータです。`hard_margin`と`hard_margin_for_parked_vehicle`はハード制約パラメータです。 - ```yaml car: ... @@ -866,7 +850,6 @@ cancel: 回避モジュールの使用可能なレーンは、config ファイルを使用して選択できます。 - ```yaml ... # drivable lane setting. This module is able to use not only current lane but also right/left lane @@ -878,6 +861,7 @@ cancel: ``` ### 使用レーンのタイプの設定 + ユーザーがパラメータ `use_lane_type` を `opposite_direction_lane` に設定した場合、逆走車線を走行できます。 ![fig](./images/path_generation/opposite_direction.png) @@ -892,7 +876,6 @@ cancel: 2つのポイントは常に自車線の中心線上に存在するため、モジュールは次の関数に基づいてシフトのスタートポイントとエンドポイント間の縦方向距離のみを計算します。この関数はパスシフタライブラリで定義されています。[こちら](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)のページも参照してください。 - ```c++ double PathShifter::calcLongitudinalDistFromJerk( const double lateral, const double jerk, const double velocity) @@ -911,7 +894,6 @@ double PathShifter::calcLongitudinalDistFromJerk( 回避開始地点には、もう 1 つの縦方向拘束があります。回避操作を開始する前にウインカーを数秒間点灯し続けるために、回避開始地点は自分の位置から自己速度に応じた値(距離を `prepare_length` と呼びます)よりも遠くなければなりません。 - ```yaml longitudinal: min_prepare_time: 1.0 # [s] @@ -955,7 +937,6 @@ longitudinal: この機能は次のパラメータを`true`に設定することで有効にできます。 - ```yaml safety_check: ... @@ -972,7 +953,6 @@ longitudinal: この機能は、次のパラメーターを `true` に設定することで有効にできます。 - ```yaml yield: enable: true # [-] @@ -988,7 +968,6 @@ yield: ユーザーは、以下のパラメーターを使用して安全チェックエリアを選択できます。基本的に、シフト側の車線のみを確認するための以下の設定を推奨します。安全を厳格に確認したい場合は、`check_current_lane` および/または `check_other_side_lane` を `true` に設定してください。 - ```yaml safety_check: ... @@ -999,7 +978,6 @@ yield: 回避モジュールでは、`path_safety_checker::isCentroidWithinLanelet` 関数はレーンのオブジェクトをフィルタリングするために使用されます。 - ```c++ bool isCentroidWithinLanelet(const PredictedObject & object, const lanelet::ConstLanelet & lanelet) { @@ -1047,7 +1025,6 @@ bool isCentroidWithinLanelet(const PredictedObject & object, const lanelet::Cons これらのエリアを回避操作で使用できるようにする場合は、これらのフラグを `true` に設定してください。 - ```yaml # drivable lane setting. This module is able to use not only current lane but also right/left lane # if the current lane(=lanelet::Lanelet) and the right/left lane share the boundary(=lanelet::Linestring) in HDMap. @@ -1061,12 +1038,12 @@ use_hatched_road_markings: true use_freespace_areas: true ``` -| | | | -| -------------------------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `use_lane_type: same_direction_lane` | ![図](./images/advanced/avoidance_same_direction.png) | | -| `use_lane_type: opposite_direction_lane` | ![図](./images/advanced/avoidance_opposite_direction.png) | | -| 交差点エリア | ![図](./images/advanced/avoidance_intersection.png) | 交差点エリアはLanelet mapで定義されます。 [こちら](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) を参照してください | -| ハッチング道路標示 | ![図](./images/advanced/avoidance_zebra.png) | ハッチング道路標示はLanelet mapで定義されています +| | | | +| ---------------------------------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `use_lane_type: same_direction_lane` | ![図](./images/advanced/avoidance_same_direction.png) | | +| `use_lane_type: opposite_direction_lane` | ![図](./images/advanced/avoidance_opposite_direction.png) | | +| 交差点エリア | ![図](./images/advanced/avoidance_intersection.png) | 交差点エリアはLanelet mapで定義されます。 [こちら](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) を参照してください | +| ハッチング道路標示 | ![図](./images/advanced/avoidance_zebra.png) | ハッチング道路標示はLanelet mapで定義されています | ## 未実装/将来の拡張 @@ -1098,7 +1075,6 @@ use_freespace_areas: true ユーザーは、次のコマンドでデバッグ情報を参照できます。 - ```bash ros2 service call /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/config_logger logging_demo/srv/ConfigLogger "{logger_name: 'planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance', level: DEBUG}" ``` @@ -1107,7 +1083,6 @@ ros2 service call /planning/scenario_planning/lane_driving/behavior_planning/beh ユーザーは、次のパラメーターを使用して、デバッグマーカーの公開を有効にできます。 - ```yaml debug: enable_other_objects_marker: false @@ -1130,7 +1105,6 @@ debug: デバッグメッセージを出力するには、次のコマンドを実行するだけです。 - ```bash ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance_debug_message_array ``` @@ -1143,7 +1117,7 @@ ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behav このモジュールは静止オブジェクト(停止しているオブジェクト)を回避しますが、動的オブジェクト(動いているオブジェクト)の回避はサポートしていません。動的オブジェクトは、[動的障害物回避モジュール](../autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md)内で処理されます。 -#### 回避するオブジェクトのタイプ(クラス)を教えてください。 +#### 回避するオブジェクトのタイプ(クラス)を教えてください デフォルトでは、車、トラック、バス、トレーラー、自転車、オートバイ、歩行者、未知のオブジェクトを回避します。詳細は、[ターゲットオブジェクトのフィルタリングセクション](#target-object-filtering)を参照してください。 これらのオブジェクトは、車両タイプオブジェクトと車両タイプ以外のオブジェクトに分類され、ターゲットオブジェクトのフィルタリングは車両タイプと車両タイプ以外で異なります。 @@ -1245,7 +1219,6 @@ MANUALモードを使用すると、オペレーターは回避パスの承認 - ```plantuml @startuml skinparam monochrome true @@ -1400,4 +1373,3 @@ stop 回避固有のパラメータ設定ファイルの場所: `src/autoware/launcher/planning_launch/config/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/static_obstacle_avoidance.param.yaml`。 {{ json_to_markdown("planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json") }} - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md index 1d22eea921c61..d606820cfaf81 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md @@ -33,17 +33,16 @@ ### モジュールパラメータ -| パラメータ | タイプ | 説明 | -| ------------------------------- | ------ | ---------------------------------------------------------------------------------------------- | -| `stop_line_margin` | double | [m] 車両が停止線手前で停止しようとするマージン | -| `backward_length` | double | [m] 最も近いパスポイントから始点のエッジまでの距離 | -| `ignore_width_from_center_line` | double | [m] 自車の後方の車両が自車と衝突するかどうかを無視するしきい値 | -| `max_future_movement_time` | double | [s] オブジェクトの将来の移動を考慮するための最大時間 | +| パラメータ | タイプ | 説明 | +| ------------------------------- | ------ | -------------------------------------------------------------------------------------- | +| `stop_line_margin` | double | [m] 車両が停止線手前で停止しようとするマージン | +| `backward_length` | double | [m] 最も近いパスポイントから始点のエッジまでの距離 | +| `ignore_width_from_center_line` | double | [m] 自車の後方の車両が自車と衝突するかどうかを無視するしきい値 | +| `max_future_movement_time` | double | [s] オブジェクトの将来の移動を考慮するための最大時間 | | `adjacent_extend_width` | double | [m] 隣接する車線(例:自転車専用車線)が存在する場合、死角領域はこの長さだけ拡張される | ### フローチャート - ```plantuml @startuml title modifyPathVelocity @@ -98,4 +97,3 @@ endif stop @enduml ``` - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md index 52214668f4794..1511095409a03 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md @@ -10,7 +10,6 @@ ## フローチャート - ```plantuml @startuml @@ -42,7 +41,6 @@ stop @enduml ``` - ```plantuml @startuml @@ -80,8 +78,8 @@ stop crosswalkモジュールは、`object_filtering.target_object` 名前空間で定義された次のパラメータのタイプを持つオブジェクトを処理します。 -| パラメータ | 単位 | 型 | 説明 | -| ------------ | ---- | ---- | ---------------------------------------------- | +| パラメータ | 単位 | 型 | 説明 | +| ------------ | ---- | ---- | ----------------------------------------- | | `unknown` | [-] | bool | `UNKNOWN` 物体を探して停止するかどうか | | `pedestrian` | [-] | bool | `PEDESTRIAN` 物体を探して停止するかどうか | | `bicycle` | [-] | bool | `BICYCLE` 物体を探して停止するかどうか | @@ -95,9 +93,9 @@ crosswalkモジュールは、`object_filtering.target_object` 名前空間で 周囲は `object_filtering.target_object` ネームスペース内の次のパラメータによって定義されます。 -| パラメータ | 単位 | 型 | 説明 | -|---|---|---|---| -| `crosswalk_attention_range` | [m] | double | 検出エリアは -X メートルから +X メートルの間の横断歩道として定義されます | +| パラメータ | 単位 | 型 | 説明 | +| --------------------------- | ---- | ------ | ------------------------------------------------------------------------ | +| `crosswalk_attention_range` | [m] | double | 検出エリアは -X メートルから +X メートルの間の横断歩道として定義されます | #### 停止位置 @@ -122,12 +120,12 @@ crosswalkモジュールは、`object_filtering.target_object` 名前空間で `stop_position` 名前空間では、以下のパラメータが定義されています。 -| パラメータ | | 型 | 説明 | -| ------------------------------ | --- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `stop_position_threshold` | [m] | double | 自車位置が停止線からこの値よりも近い場合は、このモジュールは自車が譲歩を完了したとみなします。 | -| `stop_distance_from_crosswalk` | [m] | double | 明示的な停止線が設定されていないLanelet2マップの場合、停止線を横断歩道から離す | +| パラメータ | | 型 | 説明 | +| ------------------------------ | --- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `stop_position_threshold` | [m] | double | 自車位置が停止線からこの値よりも近い場合は、このモジュールは自車が譲歩を完了したとみなします。 | +| `stop_distance_from_crosswalk` | [m] | double | 明示的な停止線が設定されていないLanelet2マップの場合、停止線を横断歩道から離す | | `far_object_threshold` | [m] | double | 物体が停止線のXメートル後ろを通過した場合、停止位置は、横断歩道の幅が非常に広い場合のケースに対して、オブジェクト位置に基づいて決定されます(オブジェクトの`stop_distance_from_object`メートル前) | -| `stop_distance_from_object` | [m] | double | Vehicle decelerates to be able to stop in front of object with margin | +| `stop_distance_from_object` | [m] | double | Vehicle decelerates to be able to stop in front of object with margin | #### Yield判断 @@ -173,14 +171,14 @@ AとBの境界は、`ego_pass_later_margin_x`と`ego_pass_later_margin_y`から `pass_judge`ネームスペースで、以下のパラメータが定義されています。 -| パラメーター | | 型 | 説明 | -| ---------------------------------- | ----- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `ego_pass_first_margin_x` | [[s]] | double | ego_pass_first状況のタイム・トゥ・コリジョン・マージンベクトル(モジュールは、TTC + マージン < TTV条件ではegoが停止する必要がないと判断します) | -| `ego_pass_first_margin_y` | [[s]] | double | ego_pass_first状況のタイム・トゥ・ビークル・マージンベクトル(モジュールは、TTC + マージン < TTV条件ではegoが停止する必要がないと判断します) | -| `ego_pass_first_additional_margin` | [s] | double | チャッタリングを抑止するための、ego_pass_first状況の追加タイムマージン | -| `ego_pass_later_margin_x` | [[s]] | double | オブジェクトパスファースト状況のタイム・トゥ・ビークル・マージンベクトル(モジュールは、TTV + マージン < TTC条件ではegoが停止する必要がないと判断します) | +| パラメーター | | 型 | 説明 | +| ---------------------------------- | ----- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ego_pass_first_margin_x` | [[s]] | double | ego_pass_first状況のタイム・トゥ・コリジョン・マージンベクトル(モジュールは、TTC + マージン < TTV条件ではegoが停止する必要がないと判断します) | +| `ego_pass_first_margin_y` | [[s]] | double | ego_pass_first状況のタイム・トゥ・ビークル・マージンベクトル(モジュールは、TTC + マージン < TTV条件ではegoが停止する必要がないと判断します) | +| `ego_pass_first_additional_margin` | [s] | double | チャッタリングを抑止するための、ego_pass_first状況の追加タイムマージン | +| `ego_pass_later_margin_x` | [[s]] | double | オブジェクトパスファースト状況のタイム・トゥ・ビークル・マージンベクトル(モジュールは、TTV + マージン < TTC条件ではegoが停止する必要がないと判断します) | | `ego_pass_later_margin_y` | [[s]] | double | オブジェクトパスファースト状況のタイム・トゥ・コリジョン・マージンベクトル(モジュールは、TTV + マージン < TTC条件ではegoが停止する必要がないと判断します) | -| `ego_pass_later_additional_margin` | [s] | double | チャッタリングを抑止するための、オブジェクトパスファースト状況の追加タイムマージン | +| `ego_pass_later_additional_margin` | [s] | double | チャッタリングを抑止するための、オブジェクトパスファースト状況の追加タイムマージン | #### スムーズ歩行者譲り判定 @@ -194,17 +192,17 @@ AとBの境界は、`ego_pass_later_margin_x`と`ego_pass_later_margin_y`から `pass_judge` 名前空間では、以下のパラメータが定義されています。 -| パラメータ | | タイプ | 説明 | -| -------------------------------------------- | ----- | ------ | -------------------------------------------------------------------------------------------------- | -| `distance_set_for_no_intention_to_walk` | [[m]] | double | 歩行の意思なしのタイムアウトを補間で計算するためのキーを設定します | -| `timeout_set_for_no_intention_to_walk` | [[s]] | double | 歩行の意思なしのタイムアウトを補間で計算するための値を設定します | +| パラメータ | | タイプ | 説明 | +| --------------------------------------- | ----- | ------ | ------------------------------------------------------------------ | +| `distance_set_for_no_intention_to_walk` | [[m]] | double | 歩行の意思なしのタイムアウトを補間で計算するためのキーを設定します | +| `timeout_set_for_no_intention_to_walk` | [[s]] | double | 歩行の意思なしのタイムアウトを補間で計算するための値を設定します | **パス判定** `pass_judge`名前空間に、以下のパラメータが定義されています。 -| パラメータ | | タイプ | 説明 | -|---|---|---|---| +| パラメータ | | タイプ | 説明 | +| ---------------------------- | --- | ------ | ---------------------------------------------------------------------------------------------------------------- | | `timeout_ego_stop_for_yield` | [s] | double | 自動運転車が停止を保持する時間がこの期間に達した場合、自動運転車は十分な時間停止したとみなし、走行を再開します。 | #### 新規オブジェクトの取り扱い @@ -217,9 +215,9 @@ trueを設定すると、信号機のある横断歩道の周辺における減 `pass_judge`ネームスペースでは、以下のパラメータが定義されています。 -| パラメータ | | タイプ | 説明 | -|------------------------------------------|--------|---------|------------------------------------------------------------------------------------------| -| `disable_yield_for_new_stopped_object` | [X] | bool | trueの場合、信号機の付いた横断歩道付近にある停止中の新しい障害物は無視されます | +| パラメータ | | タイプ | 説明 | +| -------------------------------------- | --- | ------ | ------------------------------------------------------------------------------ | +| `disable_yield_for_new_stopped_object` | [X] | bool | trueの場合、信号機の付いた横断歩道付近にある停止中の新しい障害物は無視されます | ### 歩行者横断歩道での停止防止 @@ -234,14 +232,14 @@ trueを設定すると、信号機のある横断歩道の周辺における減 `stuck_vehicle`名前空間で、次のパラメータが定義されます。 -| パラメータ | 単位 | 型 | 説明 | -| ---------------------------------------- | ---- | -------- | --------------------------------------------------------------------- | -| `stuck_vehicle_velocity` | [m/s] | double | 車両停止状態の最大速度しきい値 | -| `max_stuck_vehicle_lateral_offset` | [m] | double | 目標車両の最大横方向オフセット | -| `required_clearance` | [m] | double | 自車と前方の車両との確保するクリアランス | -| `min_acc` | [m/ss] | double | 停止するための最小加速度 | -| `min_jerk` | [m/sss] | double | 停止するための最小ジャーク | -| `max_jerk` | [m/sss] | double | 停止するための最大ジャーク | +| パラメータ | 単位 | 型 | 説明 | +| ---------------------------------- | ------- | ------ | ---------------------------------------- | +| `stuck_vehicle_velocity` | [m/s] | double | 車両停止状態の最大速度しきい値 | +| `max_stuck_vehicle_lateral_offset` | [m] | double | 目標車両の最大横方向オフセット | +| `required_clearance` | [m] | double | 自車と前方の車両との確保するクリアランス | +| `min_acc` | [m/ss] | double | 停止するための最小加速度 | +| `min_jerk` | [m/sss] | double | 停止するための最小ジャーク | +| `max_jerk` | [m/sss] | double | 停止するための最大ジャーク | ### 安全減速挙動 @@ -250,12 +248,12 @@ trueを設定すると、信号機のある横断歩道の周辺における減 この状況は、[lanelet2_format_extension.md](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) ドキュメントの指示に従って、関連する横断歩道にタグを設定することによって処理できます。 -| パラメーター | 単位 | タイプ | 説明 | -| --------------------- | ---- | ------ | ------------------------------------------------------------------------------------------------------------------- | -| `slow_velocity` | m/s | double | モジュールが FOA から減速コマンドを受信したときのターゲット車両速度 | -| `max_slow_down_jerk` | m/sss | double | 安全なブレーキのための最小ジャーク減速度 | -| `max_slow_down_accel` | m/ss | double | 安全なブレーキのための最小アクセル減速度 | -| `no_relax_velocity` | m/s | double | 現在速度が X m/s 未満の場合、エゴは常に停止位置で停止する(減速制約を緩和しない) | +| パラメーター | 単位 | タイプ | 説明 | +| --------------------- | ----- | ------ | --------------------------------------------------------------------------------- | +| `slow_velocity` | m/s | double | モジュールが FOA から減速コマンドを受信したときのターゲット車両速度 | +| `max_slow_down_jerk` | m/sss | double | 安全なブレーキのための最小ジャーク減速度 | +| `max_slow_down_accel` | m/ss | double | 安全なブレーキのための最小アクセル減速度 | +| `no_relax_velocity` | m/s | double | 現在速度が X m/s 未満の場合、エゴは常に停止位置で停止する(減速制約を緩和しない) | ### オクルージョン @@ -281,39 +279,39 @@ trueを設定すると、信号機のある横断歩道の周辺における減 ![stuck_vehicle_attention_range](docs/with_occlusion.svg){width=600} -| パラメータ | 単位 | タイプ | 説明 | -| ---------------------------------------------- | ------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| `enable` | [-] | ブール型 | trueの場合、エゴは、遮蔽されている横断歩道の周囲で減速します。 | -| `occluded_object_velocity` | [m/s] | ダブル型 | 遮蔽された空間から現れる可能性のあるオブジェクトの想定速度 | -| `slow_down_velocity` | [m/s] | ダブル型 | 減速速度 | -| `time_buffer` | [s] | ダブル型 | 減速を追加/削除するための、遮蔽あり/なしの連続時間 | -| `min_size` | [m] | ダブル型 | 遮蔽の最小サイズ(正方形の1辺の長さ) | -| `free_space_max` | [-] | ダブル型 | オキュパンシーグリッド内の空きセルの最大値 | -| `occupied_min` | [-] | ダブル型 | オキュパンシーグリッド内の占有セルの最小値 | -| `ignore_with_traffic_light` | [-] | ブール型 | trueの場合、信号機のある横断歩道の遮蔽は無視されます。 | -| `ignore_behind_predicted_objects` | [-] | ブール型 | trueの場合、予測されたオブジェクトの背後にある遮蔽は無視されます。 | -| `ignore_velocity_thresholds.default` | [m/s] | ダブル型 | 遮蔽は、速度が同じかそれよりも高いオブジェクトの背後でのみ無視されます。 | +| パラメータ | 単位 | タイプ | 説明 | +| ---------------------------------------------- | ----- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `enable` | [-] | ブール型 | trueの場合、エゴは、遮蔽されている横断歩道の周囲で減速します。 | +| `occluded_object_velocity` | [m/s] | ダブル型 | 遮蔽された空間から現れる可能性のあるオブジェクトの想定速度 | +| `slow_down_velocity` | [m/s] | ダブル型 | 減速速度 | +| `time_buffer` | [s] | ダブル型 | 減速を追加/削除するための、遮蔽あり/なしの連続時間 | +| `min_size` | [m] | ダブル型 | 遮蔽の最小サイズ(正方形の1辺の長さ) | +| `free_space_max` | [-] | ダブル型 | オキュパンシーグリッド内の空きセルの最大値 | +| `occupied_min` | [-] | ダブル型 | オキュパンシーグリッド内の占有セルの最小値 | +| `ignore_with_traffic_light` | [-] | ブール型 | trueの場合、信号機のある横断歩道の遮蔽は無視されます。 | +| `ignore_behind_predicted_objects` | [-] | ブール型 | trueの場合、予測されたオブジェクトの背後にある遮蔽は無視されます。 | +| `ignore_velocity_thresholds.default` | [m/s] | ダブル型 | 遮蔽は、速度が同じかそれよりも高いオブジェクトの背後でのみ無視されます。 | | `ignore_velocity_thresholds.custom_labels` | [-] | 文字列リスト | 既定以外の速度しきい値を定義するラベル(すべてのラベルについては、`autoware_perception_msgs::msg::ObjectClassification`を参照してください) | -| `ignore_velocity_thresholds.custom_thresholds` | [-] | ダブルリスト | カスタムラベルの速度 | -| `extra_predicted_objects_size` | [m] | ダブル型 | 遮蔽をマスクするためにオブジェクトに追加される余分なサイズ | +| `ignore_velocity_thresholds.custom_thresholds` | [-] | ダブルリスト | カスタムラベルの速度 | +| `extra_predicted_objects_size` | [m] | ダブル型 | 遮蔽をマスクするためにオブジェクトに追加される余分なサイズ | ### その他 `common` 名前空間では、以下のパラメータが定義されています。 -| パラメータ | ユニット | 種類 | 説明 | -| ------------------------------- | ------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| `show_processing_time` | [-] | ブール値 | 処理時間を表示するかどうか | -| `traffic_light_state_timeout` | [s] | double | 信号のタイムアウトしきい値 | -| `enable_rtc` | [-] | ブール値 | true の場合、シーンモジュールは (rtc 関数の協力を要求して) rtc によって承認される必要があります。false の場合、モジュールは rtc から承認なしに実行できます。 | +| パラメータ | ユニット | 種類 | 説明 | +| ----------------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `show_processing_time` | [-] | ブール値 | 処理時間を表示するかどうか | +| `traffic_light_state_timeout` | [s] | double | 信号のタイムアウトしきい値 | +| `enable_rtc` | [-] | ブール値 | true の場合、シーンモジュールは (rtc 関数の協力を要求して) rtc によって承認される必要があります。false の場合、モジュールは rtc から承認なしに実行できます。 | -##既知の問題 +## 既知の問題 - ケースによっては譲歩の決定が積極的または消極的になることがあります。 - 主な理由は、横断歩道モジュールが車両の将来の位置を知らないことです。車両の正確な位置は、すべての計画の後で決定されます。 - 現在、このモジュールは車両が一定の速度で移動すると想定しています。 -##デバッグ +## デバッグ ### デバッグマーカーの可視化 @@ -334,7 +332,6 @@ trueを設定すると、信号機のある横断歩道の周辺における減 ### 衝突時間(TTC)の可視化 - ```sh ros2 run autoware_behavior_velocity_crosswalk_module time_to_collision_plotter.py ``` @@ -362,4 +359,3 @@ ros2 run autoware_behavior_velocity_crosswalk_module time_to_collision_plotter.p ## **参考文献/外部リンク** [1] 佐藤 みなみ, 早坂 祥一, 清水 政行, 村野 隆彦, 横断歩行者に対するドライバのリスク回避行動のモデル化, 自動車技術会論文集, 2013, 44 巻, 3 号, p. 931-936. - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md index 35242c1742125..8f0c9ebda5f90 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md @@ -12,16 +12,16 @@ ### モジュールパラメータ -| パラメータ | 型 | 説明 | -| ----------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------- | -| `use_dead_line` | 論理型 | [-] デッドラインを使用するかどうか | -| `use_pass_judge_line` | 論理型 | [-] 通過判定ラインを使用するかどうか | -| `state_clear_time` | double | [s] オブジェクトが一定時間検出されず、車両が停止している場合、STOPPED 状態に遷移する | -| `stop_margin` | double | [m] 車両が停止線前に停止しようとするマージン | -| `dead_line_margin` | double | [m] 後続車が自車と衝突するかどうかを無視するしきい値 | -| `hold_stop_margin_distance` | double | [m] 再始動防止のための設定 (アルゴリズム セクションを参照) | -| `distance_to_judge_over_stop_line` | double | [m] 停止線を越えたことを判定するためのパラメータ | -| `suppress_pass_judge_when_stopping` | 論理型 | [m] 停止時に通過判定を抑制するためのパラメータ | +| パラメータ | 型 | 説明 | +| ----------------------------------- | ------ | ------------------------------------------------------------------------------------ | +| `use_dead_line` | 論理型 | [-] デッドラインを使用するかどうか | +| `use_pass_judge_line` | 論理型 | [-] 通過判定ラインを使用するかどうか | +| `state_clear_time` | double | [s] オブジェクトが一定時間検出されず、車両が停止している場合、STOPPED 状態に遷移する | +| `stop_margin` | double | [m] 車両が停止線前に停止しようとするマージン | +| `dead_line_margin` | double | [m] 後続車が自車と衝突するかどうかを無視するしきい値 | +| `hold_stop_margin_distance` | double | [m] 再始動防止のための設定 (アルゴリズム セクションを参照) | +| `distance_to_judge_over_stop_line` | double | [m] 停止線を越えたことを判定するためのパラメータ | +| `suppress_pass_judge_when_stopping` | 論理型 | [m] 停止時に通過判定を抑制するためのパラメータ | ### 内部動作/アルゴリズム @@ -33,7 +33,6 @@ #### フローチャート - ```plantuml @startuml title modifyPathVelocity @@ -98,7 +97,7 @@ stop 車両制御性能が低いため、動き始めたら0.5メートルなどの距離(Xメートル)が必要な場合、車両は停止地点を超えて進み、停止寸前の地点(例:0.3メートル先)に近づくため、厳守する必要があります。 -このモジュールには、このような重複する再始動を防ぐためのパラメーター「hold_stop_margin_distance」があります。車両がモジュール停止位置(_front_to_stop_line < hold_stop_margin_distance)から「hold_stop_margin_distance」メートル以内で停止した場合、車両はモジュールの停止位置で停止していると判断し、車両が他の要因で停止した場合でも現在の位置で停止を続けることを計画します。 +このモジュールには、このような重複する再始動を防ぐためのパラメーター「hold_stop_margin_distance」があります。車両がモジュール停止位置(\_front_to_stop_line < hold_stop_margin_distance)から「hold_stop_margin_distance」メートル以内で停止した場合、車両はモジュールの停止位置で停止していると判断し、車両が他の要因で停止した場合でも現在の位置で停止を続けることを計画します。
![例](restart_prevention.svg){width=1000} @@ -114,4 +113,3 @@ stop ![例](keep_stopping.svg){width=1000}
hold_stop_margin_distanceの内側
- diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md index f4abd4362db9e..3ff34dc6d8c21 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md @@ -55,13 +55,13 @@ HDマップ上に定義されている `intersection_area` は、交差点全体 次の表は、**例**として、信号のない交差点の各レーンに `yield_lane` を設定する方法を示しています。幾何学的/トポロジ的な方法で交差点レーンのセットの一意の信号位相グループを決定する方法は明らかでないため、`yield_lane` を手動で設定する必要があります。信号機のある直進レーンは、通常他のすべてのレーンよりも優先順位が高いため、レーンの検出がされないように特別に処理されます。したがって、RightOfWay の設定は必要ありません。 -| 進路と優先道路の関係 | 交差点での減速車線(信号有り) | 交差点での減速車線(信号無し) | -| ---------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------- | -| 直進 | 減速車線を設定する必要はない(このケースは特殊) | 同相車の対向車線 | -| 左折(左ハンドル車) | 反相車の対抗車線と対向車線の同相車の右側から対抗する車線 | 同相車の対向車線の右側の車線 | -| 右折(左ハンドル車) | 反相車の対抗車線 | 減速車線を設定しない | -| 左折(右ハンドル車) | 反相車の対抗車線 | 減速車線を設定しない | -| 右折(右ハンドル車) | 反相車の対抗車線と対向車線の同相車の右側から対抗する車線 | 同相車の対向車線の左側の車線 | +| 進路と優先道路の関係 | 交差点での減速車線(信号有り) | 交差点での減速車線(信号無し) | +| -------------------- | -------------------------------------------------------- | ------------------------------ | +| 直進 | 減速車線を設定する必要はない(このケースは特殊) | 同相車の対向車線 | +| 左折(左ハンドル車) | 反相車の対抗車線と対向車線の同相車の右側から対抗する車線 | 同相車の対向車線の右側の車線 | +| 右折(左ハンドル車) | 反相車の対抗車線 | 減速車線を設定しない | +| 左折(右ハンドル車) | 反相車の対抗車線 | 減速車線を設定しない | +| 右折(右ハンドル車) | 反相車の対抗車線と対向車線の同相車の右側から対抗する車線 | 同相車の対向車線の左側の車線 | この設定は、次の `attention_area` 設定を提供します。 @@ -108,18 +108,17 @@ HDマップ上に定義されている `intersection_area` は、交差点全体 シーンに応じて、いくつかの動作があります。 -| 挙動 | シーン | アクション | -| ---------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| 安全 | 自車が遮蔽と衝突を検出しない | 自車が交差点を通過する | -| 停止維持 | 交差点の出口が渋滞によって塞がれている | 自車が交差点または注意領域の境界手前で停止する | -| 譲歩による停止 | 他の車両が自車に道を譲るために停車する | 自車が交差点または注意領域の境界手前で停止する | -| 遮蔽なし衝突停止 | 自車が遮蔽を検出しないが衝突を検出する | 自車がデフォルトの停止線で停止する | -| 遮蔽範囲前に待機する | 交差点への進入時に自車が遮蔽を検出する | 自車が最初にデフォルトの停止線で停止する | -| 遮蔽のほうを伺う | 自車が遮蔽を検出し、視野内では衝突を検出しない(遮蔽範囲前に待機した後) | 自車が注意領域の境界にゆっくりと接近する | -| 遮蔽により衝突停止 | 自車が遮蔽と衝突の両方を検出する(遮蔽範囲前に待機した後) | 自車が直ちに停止する | -| 完全優先 | 自車が赤/矢印信号によって完全に優先されている | 自車は交差点内でまだ走行中の車両のみを考慮する。遮蔽は無視される | -| 通過判断線通過 | 自車がすでに注意領域内にある、または注意領域の境界手前で停止できないことを検出している | 自車は衝突/遮蔽を検出せず、交差点を通過する | - +| 挙動 | シーン | アクション | +| -------------------- | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | +| 安全 | 自車が遮蔽と衝突を検出しない | 自車が交差点を通過する | +| 停止維持 | 交差点の出口が渋滞によって塞がれている | 自車が交差点または注意領域の境界手前で停止する | +| 譲歩による停止 | 他の車両が自車に道を譲るために停車する | 自車が交差点または注意領域の境界手前で停止する | +| 遮蔽なし衝突停止 | 自車が遮蔽を検出しないが衝突を検出する | 自車がデフォルトの停止線で停止する | +| 遮蔽範囲前に待機する | 交差点への進入時に自車が遮蔽を検出する | 自車が最初にデフォルトの停止線で停止する | +| 遮蔽のほうを伺う | 自車が遮蔽を検出し、視野内では衝突を検出しない(遮蔽範囲前に待機した後) | 自車が注意領域の境界にゆっくりと接近する | +| 遮蔽により衝突停止 | 自車が遮蔽と衝突の両方を検出する(遮蔽範囲前に待機した後) | 自車が直ちに停止する | +| 完全優先 | 自車が赤/矢印信号によって完全に優先されている | 自車は交差点内でまだ走行中の車両のみを考慮する。遮蔽は無視される | +| 通過判断線通過 | 自車がすでに注意領域内にある、または注意領域の境界手前で停止できないことを検出している | 自車は衝突/遮蔽を検出せず、交差点を通過する | ```plantuml @startuml @@ -212,7 +211,6 @@ OccludedCollisionStop --> PeekingTowardOcclusion: IF not collision detected 現在、交差点モジュールは`motion_velocity_smoother`機能を使用して、縦方向/横方向の制約の下で交差点レーンに沿ったエゴの速度プロファイルを正確に計算しています。フラグ`collision_detection.velocity_profile.use_upstream`がtrueの場合、元々のパスのターゲット速度プロファイルが使用されます。そうでない場合、ターゲット速度は`collision.velocity_profile.default_velocity`に設定されます。軌跡平滑化処理では、エゴの軌跡ポイントで/その前のターゲット速度は、エゴの現在の速度に設定されます。滑らかにされた軌跡はその後、現在のエゴの位置から経路上の各軌跡ポイントへの到着時間を示す(時間、距離)の配列に変換されます。レーンIDを`debug.ttc`に追加して実行することでこの配列を視覚化できます。 - ```bash ros2 run behavior_velocity_intersection_module ttc.py --lane_id ``` @@ -228,9 +226,9 @@ ros2 run behavior_velocity_intersection_module ttc.py --lane_id ## オクルージョン検出 -フラグ `occlusion.enable` が true の場合、このモジュールは `occlusion.occlusion_attention_area_length` までの注目範囲の視野 (FOV) が十分にあるかどうかを確認します。FOV が十分にクリアでない場合、ego は最初に `occlusion.temporal_stop_time_before_peeking` の間 default_stopline で短時間停止し、その後オクルージョン_ピーキング_ストップラインにゆっくりと進みます。`occlusion.creep_during_peeking.enable` が true の場合、`occlusion.creep_during_peeking.creep_velocity` がオクルージョン_ピーキング_ストップラインまで挿入されます。そうでない場合、停止線のみが挿入されます。 +フラグ `occlusion.enable` が true の場合、このモジュールは `occlusion.occlusion_attention_area_length` までの注目範囲の視野 (FOV) が十分にあるかどうかを確認します。FOV が十分にクリアでない場合、ego は最初に `occlusion.temporal_stop_time_before_peeking` の間 default*stopline で短時間停止し、その後オクルージョン*ピーキング*ストップラインにゆっくりと進みます。`occlusion.creep_during_peeking.enable` が true の場合、`occlusion.creep_during_peeking.creep_velocity` がオクルージョン*ピーキング\_ストップラインまで挿入されます。そうでない場合、停止線のみが挿入されます。 -忍び寄っている間に衝突が検出された場合、このモジュールはすぐに ego の前に停止線を追加し、FOV が十分にクリアになると交差点_オクルージョン壁は消えます。オクルージョンがクリアされ、衝突が検出されなかった場合、ego は交差点を通過します。 +忍び寄っている間に衝突が検出された場合、このモジュールはすぐに ego の前に停止線を追加し、FOV が十分にクリアになると交差点\_オクルージョン壁は消えます。オクルージョンがクリアされ、衝突が検出されなかった場合、ego は交差点を通過します。 オクルージョンは、オクルージョン注目範囲(通常注目範囲と部分的に同じ)と占有グリッドマップの不明セルとの共通領域として検出されます。占有グリッドマップは `occlusion.denoise_kernel` のウィンドウサイズを使用して形態学を用いてノイズを除去されます。オクルージョン注目範囲のレーンは直線ストリングに離散化され、それらを使用して、下の図のように各セルがレーンに沿った ego パスの距離を表すグリッドを生成します。 @@ -240,9 +238,9 @@ ros2 run behavior_velocity_intersection_module ttc.py --lane_id ### 信号機のある交差点でのオクルージョンソースの推定 -信号機のある交差点では、ego と最も近いオクルージョンセルとの間に物体があるかどうかをチェックすることで、オクルージョンの所在推定が行われます。オクルージョンが何らかの物体によって引き起こされていると推定される間 (動的にオクルージョンされる)、交差点_ウォールは常に表示されます。ego と最も近いオクルージョンセルとの間に物体が見つからない場合(静的にオクルージョンされる)、ego は `occlusion.static_occlusion_with_traffic_light_timeout` の期間と `occlusion.occlusion_detection_hold_time` の期間停止した後、意図的にオクルージョンを無視してスタックを回避します。 +信号機のある交差点では、ego と最も近いオクルージョンセルとの間に物体があるかどうかをチェックすることで、オクルージョンの所在推定が行われます。オクルージョンが何らかの物体によって引き起こされていると推定される間 (動的にオクルージョンされる)、交差点\_ウォールは常に表示されます。ego と最も近いオクルージョンセルとの間に物体が見つからない場合(静的にオクルージョンされる)、ego は `occlusion.static_occlusion_with_traffic_light_timeout` の期間と `occlusion.occlusion_detection_hold_time` の期間停止した後、意図的にオクルージョンを無視してスタックを回避します。 -残り時間は交差点_オクルージョン仮想ウォールに視覚化されます。 +残り時間は交差点\_オクルージョン仮想ウォールに視覚化されます。 ![static-occlusion-timeout](./docs/static-occlusion-timeout.png) @@ -252,7 +250,7 @@ ros2 run behavior_velocity_intersection_module ttc.py --lane_id ![occlusion_detection](./docs/occlusion-without-tl.drawio.svg) -ego が進んでいる間、黄色の交差点_ウォールが ego の前に表示されます。 +ego が進んでいる間、黄色の交差点\_ウォールが ego の前に表示されます。 ![occlusion-wo-tl-creeping](./docs/occlusion-wo-tl-creeping.png) @@ -262,11 +260,11 @@ ego が進んでいる間、黄色の交差点_ウォールが ego の前に表 TTC パラメータは信号機の色や形状によって次のように変化します。 -| 交通信号色 | ttc(開始) | ttc(終了) | -| ------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| GREEN | `collision_detection.not_prioritized.collision_start_margin` | `collision_detection.not_prioritized.collision_end_margin` | -| AMBER | `collision_detection.partially_prioritized.collision_start_end_margin` | `collision_detection.partially_prioritized.collision_start_end_margin` | -| RED / Arrow | `collision_detection.fully_prioritized.collision_start_end_margin` | `collision_detection.fully_prioritized.collision_start_end_margin` | +| 交通信号色 | ttc(開始) | ttc(終了) | +| ----------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| GREEN | `collision_detection.not_prioritized.collision_start_margin` | `collision_detection.not_prioritized.collision_end_margin` | +| AMBER | `collision_detection.partially_prioritized.collision_start_end_margin` | `collision_detection.partially_prioritized.collision_start_end_margin` | +| RED / Arrow | `collision_detection.fully_prioritized.collision_start_end_margin` | `collision_detection.fully_prioritized.collision_start_end_margin` | ### グリーンスロー中での譲り @@ -292,10 +290,10 @@ TTC パラメータは信号機の色や形状によって次のように変化 1. 車両は、停止する場合、少なくとも制動距離分、無保護領域の境界線より手前でブレーキを開始する必要がある 2. 車両は、走行する場合、十分な制動距離マージンで先行車両を認識し、安全性を事前に確認する必要がある - 1. そして、安全の判断は絶対に確実であり、将来の予測期間にわたって有効である必要がある。そのため、安全条件は、自分車が無保護領域内を走行している間、常に満たされる必要があります。 -3. (TODO): 制限された検出範囲/速度追跡性能を考慮すると、完璧に安全な判断を事前に下すことはほとんど不可能であるため、交差点モジュールは、安全上の判断が次の理由により後に "裏切られた" 場合に、リスク回避的加速速度プロファイルの計画と/または横方向加速度制限の緩和を行う必要があります。 - 1. 状況がその後に危険になった場合、主に速度追跡が過小評価されたか、またはオブジェクトが TTC マージンを超えて加速したため - 2. 状況がその後に危険になった場合、主にオブジェクトが突然どこからともなく検出されたため +3. そして、安全の判断は絶対に確実であり、将来の予測期間にわたって有効である必要がある。そのため、安全条件は、自分車が無保護領域内を走行している間、常に満たされる必要があります。 +4. (TODO): 制限された検出範囲/速度追跡性能を考慮すると、完璧に安全な判断を事前に下すことはほとんど不可能であるため、交差点モジュールは、安全上の判断が次の理由により後に "裏切られた" 場合に、リスク回避的加速速度プロファイルの計画と/または横方向加速度制限の緩和を行う必要があります。 +5. 状況がその後に危険になった場合、主に速度追跡が過小評価されたか、またはオブジェクトが TTC マージンを超えて加速したため +6. 状況がその後に危険になった場合、主にオブジェクトが突然どこからともなく検出されたため $$ \dfrac{v_{\mathrm{ego}}^{2}}{2a_{\mathrm{max}}} + v_{\mathrm{ego}} * t_{\mathrm{delay}} @@ -303,28 +301,28 @@ $$ によって得られる制動距離分、無保護領域の境界線より手前の位置をパス判定線と呼び、自分車がこの位置を通過する前に安全上の判断が行われなければなりません。自分車はこれ以上停車しなくなるからです。 -1st_pass_判定線は最初の先行レーンより手前にあり、複数の先行レーンがある交差点では、2nd_pass_判定線は制動距離分、最初の注意レーンのセンターラインより手前の位置として定義されます。1st/2nd_pass_判定線は次の図で示されています。 +1st*pass*判定線は最初の先行レーンより手前にあり、複数の先行レーンがある交差点では、2nd*pass*判定線は制動距離分、最初の注意レーンのセンターラインより手前の位置として定義されます。1st/2nd*pass*判定線は次の図で示されています。 ![pass-judge-line](./docs/pass-judge-line.drawio.svg) 交差点モジュールは次の場合に走行を指示します。 - 自分車がデフォルト・ストップラインを越えている場合 (または `common.enable_pass_judge_before_default_stopline` が true の場合) -- 自分車が 1st_pass_判定線を越えている場合 +- 自分車が 1st*pass*判定線を越えている場合 - 自分車が以前に SAFE と判断されている場合 -- (自分車が 2nd_pass_判定線を越えている場合、または自分車が 1st と 2nd のパス判定線の間にあるが、最も可能性の高い衝突が 1st の注意レーンで発生すると予想される場合) +- (自分車が 2nd*pass*判定線を越えている場合、または自分車が 1st と 2nd のパス判定線の間にあるが、最も可能性の高い衝突が 1st の注意レーンで発生すると予想される場合) 以下の場合は、停止するか停止判断を継続すると予想されるためです。 1. 自分車がデフォルト・ストップラインより前で `common.enable_pass_judge_before_default_stopline` が false の場合 - 1. 理由: デフォルト・ストップラインはマップ上に定義されており、尊重する必要があります -2. 自分車が 1st_pass_判定線より前 - 1. 理由: 制動距離マージンが十分にある -3. 自分車は以前に UNSAFE と判断されました - 1. 理由: 自分車は現在停止しようとしており、減速中に 1st_pass_判定線を越えたとしても、衝突が検出されたら停止判断を続ける必要があります -4. (自分車は 1st と 2nd のパス判定線の間で、最も可能性の高い衝突が 2nd の注意レーンで発生すると予想される) +1. 理由: デフォルト・ストップラインはマップ上に定義されており、尊重する必要があります +1. 自分車が 1st*pass*判定線より前 +1. 理由: 制動距離マージンが十分にある +1. 自分車は以前に UNSAFE と判断されました +1. 理由: 自分車は現在停止しようとしており、減速中に 1st*pass*判定線を越えたとしても、衝突が検出されたら停止判断を続ける必要があります +1. (自分車は 1st と 2nd のパス判定線の間で、最も可能性の高い衝突が 2nd の注意レーンで発生すると予想される) -3 番目の条件では、自分車が衝突検出のために停止しようとしている場合、無保護領域にオーバーシュートして停止する可能性があります。これは、自分車が減速中に 1st_pass_判定線を越えた場合でも UNSAFE 判断が行われたままで、停止判断を続ける必要があるためです。 +3 番目の条件では、自分車が衝突検出のために停止しようとしている場合、無保護領域にオーバーシュートして停止する可能性があります。これは、自分車が減速中に 1st*pass*判定線を越えた場合でも UNSAFE 判断が行われたままで、停止判断を続ける必要があるためです。 交差点の4番目の条件では、2番目の注意車線が交わる交差点で、自車が1番目のpass_judge_lineを超えたとしても、2番目の注意車線で最も衝突が起こりそうな場合は、交差点モジュールは停止するように指示します。 @@ -338,7 +336,6 @@ $$ ### `IntersectionLanelets` - ```plantuml @startuml entity IntersectionLanelets { @@ -365,7 +362,6 @@ entity IntersectionLanelets { 各停止線は、補間されたパス点から生成され、正確な位置を取得します。 - ```plantuml @startuml entity IntersectionStopLines { @@ -394,7 +390,6 @@ entity IntersectionStopLines { `TargetObject` は、対象物、その所属車線、および対応する停止線情報を保持します。 - ```plantuml @startuml entity TargetObject { @@ -414,29 +409,29 @@ entity TargetObject { ### 共通 -| パラメータ | タイプ | 説明 | -| ------------------------------------------- | ------ | ---------------------------------------- | -| `.attention_area_length` | double | [m] 物体検出範囲 | -| `.attention_area_margin` | double | [m] アテンションエリアの幅の拡張マージン | -| `.attention_area_angle_threshold` | double | [rad] 検出オブジェクトと車線の角度差の閾値 | -| `.use_intersection_area` | bool | [-] 衝突検出に交差領域を使用するフラグ | -| `.default_stopline_margin` | double | [m] 停止線手前マージン | -| `.stopline_overshoot_margin` | double | [m] 停止線への進入マージン | -| `.max_accel` | double | [m/ss] 停止時の最大加速度 | -| `.max_jerk` | double | [m/sss] 停止時の最大ジャーク | -| `.delay_response_time` | double | [s] 停止前のアクション遅延時間 | +| パラメータ | タイプ | 説明 | +| -------------------------------------------- | ------ | ----------------------------------------------------------------------------- | +| `.attention_area_length` | double | [m] 物体検出範囲 | +| `.attention_area_margin` | double | [m] アテンションエリアの幅の拡張マージン | +| `.attention_area_angle_threshold` | double | [rad] 検出オブジェクトと車線の角度差の閾値 | +| `.use_intersection_area` | bool | [-] 衝突検出に交差領域を使用するフラグ | +| `.default_stopline_margin` | double | [m] 停止線手前マージン | +| `.stopline_overshoot_margin` | double | [m] 停止線への進入マージン | +| `.max_accel` | double | [m/ss] 停止時の最大加速度 | +| `.max_jerk` | double | [m/sss] 停止時の最大ジャーク | +| `.delay_response_time` | double | [s] 停止前のアクション遅延時間 | | `.enable_pass_judge_before_default_stopline` | bool | [-] ego が pass_judge_line を超えていても default_stopline で停止しないフラグ | ### stuck_vehicle/yield_stuck 自動車が駐車されたり、故障したりして動けなくなっている車両に遭遇した場合の対処法を定義する。 -| パラメータ | 型 | 説明 | -|---|---|---| -| `stuck_vehicle.turn_direction` | - | [-] 自動停止車両検出のための turn_direction 指定 | -| `stuck_vehicle.stuck_vehicle_detect_dist` | double | [m] 自動停止車両検出のための交差点出口からの方向 | -| `stuck_vehicle.stuck_vehicle_velocity_threshold` | double | [m/s] 自動停止車両検出のための速度しきい値 | -| `yield_stuck.distance_threshold` | double | [m/s] 自車経路に沿って停止車両から ego まで距離しきい値 | +| パラメータ | 型 | 説明 | +| ------------------------------------------------ | ------ | ------------------------------------------------------- | +| `stuck_vehicle.turn_direction` | - | [-] 自動停止車両検出のための turn_direction 指定 | +| `stuck_vehicle.stuck_vehicle_detect_dist` | double | [m] 自動停止車両検出のための交差点出口からの方向 | +| `stuck_vehicle.stuck_vehicle_velocity_threshold` | double | [m/s] 自動停止車両検出のための速度しきい値 | +| `yield_stuck.distance_threshold` | double | [m/s] 自車経路に沿って停止車両から ego まで距離しきい値 | ### 衝突検出 @@ -445,42 +440,42 @@ entity TargetObject { 衝突は、自車および周囲のオブジェクトの間の距離が一定のしきい値を下回った場合に検出されます。 検出された衝突は、`post resampling`によって調整されます。 -| パラメータ | 種類 | 説明 | -|---|---|---| -| `.consider_wrong_direction_vehicle` | bool | [-] 逆走車両を検出するためのフラグ | -| `.collision_detection_hold_time` | double | [s] 衝突検出のホールド時間 | -| `.min_predicted_path_confidence` | double | [-] 衝突検出に使用される予測パスの最小信頼値 | -| `.keep_detection_velocity_threshold` | double | [s] パスジャッジラインを通過するまでの衝突検出を継続するための自車速度閾値 | -| `.velocity_profile.use_upstream` | bool | [-] 上流モジュールで計画された速度プロファイルを使用するためのフラグ | -| `.velocity_profile.minimum_upstream_velocity` | double | [m/s] ゼロ除算を回避するための上流速度プロファイルの最小速度 | -| `.velocity_profile.default_velocity` | double | [m/s] use_upstreamがfalseの場合の一定速度プロファイル | -| `.velocity_profile.minimum_default_velocity` | double | [m/s] ゼロ除算を回避するためのデフォルト速度プロファイルの最小速度 | -| `.yield_on_green_traffic_light` | - | [-] [説明](#yield-on-green) | -| `.ignore_amber_traffic_light` | - | [-] [説明](#skip-on-amber) | -| `.ignore_on_red_traffic_light` | - | [-] [説明](#skip-on-red) | +| パラメータ | 種類 | 説明 | +| --------------------------------------------- | ------ | -------------------------------------------------------------------------- | +| `.consider_wrong_direction_vehicle` | bool | [-] 逆走車両を検出するためのフラグ | +| `.collision_detection_hold_time` | double | [s] 衝突検出のホールド時間 | +| `.min_predicted_path_confidence` | double | [-] 衝突検出に使用される予測パスの最小信頼値 | +| `.keep_detection_velocity_threshold` | double | [s] パスジャッジラインを通過するまでの衝突検出を継続するための自車速度閾値 | +| `.velocity_profile.use_upstream` | bool | [-] 上流モジュールで計画された速度プロファイルを使用するためのフラグ | +| `.velocity_profile.minimum_upstream_velocity` | double | [m/s] ゼロ除算を回避するための上流速度プロファイルの最小速度 | +| `.velocity_profile.default_velocity` | double | [m/s] use_upstreamがfalseの場合の一定速度プロファイル | +| `.velocity_profile.minimum_default_velocity` | double | [m/s] ゼロ除算を回避するためのデフォルト速度プロファイルの最小速度 | +| `.yield_on_green_traffic_light` | - | [-] [説明](#yield-on-green) | +| `.ignore_amber_traffic_light` | - | [-] [説明](#skip-on-amber) | +| `.ignore_on_red_traffic_light` | - | [-] [説明](#skip-on-red) | ### 閉塞 -| パラメータ | 型 | 説明 | -| --------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------- | -| `.enable` | bool | [-] オクルージョン検出を計算するフラグ | -| `.occlusion_attention_area_length` | double | [m] オクルージョン検出のための注目領域の長さ | -| `.free_space_max` | int | [-] オクルージョンとして扱うために、占有グリッドセルの最大値 | -| `.occupied_min` | int | [-] オクルージョンとして扱うために、占有グリッドセルの最小値 | -| `.denoise_kernel` | double | [m] 生の占有グリッドを前処理するための形態学的ウィンドウサイズ | -| `.attention_lane_crop_curvature_threshold` | double | [m] レーンの曲線部を切り取るための曲率のしきい値 | -| `.attention_lane_crop_curvature_ds` | double | [m] レーンの曲率を計算するためのセンターラインの離散化間隔 | -| `.creep_during_peeking.enable` | bool | [-] 交差点のオクルージョン停止線にピーキング中に `creep_velocity` を挿入するためのフラグ | -| `.creep_during_peeking.creep_velocity` | double | [m/s] 交差点のオクルージョン停止線にピーキング中に使用するコマンド速度 | -| `.peeking_offset` | double | [m] ピーキング中のオクルージョンのために、車両前面を注意領域にオフセットする距離 | -| `.occlusion_required_clearance_distance` | double | [m] エゴパスからの最寄りのオクルージョンセルまでの距離のしきい値 | -| `.possible_object_bbox` | [double] | [m] オクルージョンポリゴンが十分に小さいかどうかを確認するための最小バウンディングボックスサイズ | -| `.ignore_parked_vehicle_speed_threshold` | double | [m/s] 駐車車両の確認のための速度しきい値 | -| `.occlusion_detection_hold_time` | double | [s] オクルージョン検出のホールド時間 | -| `.temporal_stop_time_before_peeking` | double | [s] ピーキングを開始する前に、`default_stopline` でのタイムスタンプの停止時間 | -| `.temporal_stop_before_attention_area` | bool | [-] `attention_area` にピーキングする前に、`first_attention_stopline` で一時停止するフラグ | -| `.creep_velocity_without_traffic_light` | double | [m/s] `occlusion_wo_tl_pass_judge_line` へのクリープ速度 | -| `.static_occlusion_with_traffic_light_timeout` | double | [s] 交通信号のある交差点での静的オクルージョンを無視するためのタイムアウトの期間 | +| パラメータ | 型 | 説明 | +| ---------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ | +| `.enable` | bool | [-] オクルージョン検出を計算するフラグ | +| `.occlusion_attention_area_length` | double | [m] オクルージョン検出のための注目領域の長さ | +| `.free_space_max` | int | [-] オクルージョンとして扱うために、占有グリッドセルの最大値 | +| `.occupied_min` | int | [-] オクルージョンとして扱うために、占有グリッドセルの最小値 | +| `.denoise_kernel` | double | [m] 生の占有グリッドを前処理するための形態学的ウィンドウサイズ | +| `.attention_lane_crop_curvature_threshold` | double | [m] レーンの曲線部を切り取るための曲率のしきい値 | +| `.attention_lane_crop_curvature_ds` | double | [m] レーンの曲率を計算するためのセンターラインの離散化間隔 | +| `.creep_during_peeking.enable` | bool | [-] 交差点のオクルージョン停止線にピーキング中に `creep_velocity` を挿入するためのフラグ | +| `.creep_during_peeking.creep_velocity` | double | [m/s] 交差点のオクルージョン停止線にピーキング中に使用するコマンド速度 | +| `.peeking_offset` | double | [m] ピーキング中のオクルージョンのために、車両前面を注意領域にオフセットする距離 | +| `.occlusion_required_clearance_distance` | double | [m] エゴパスからの最寄りのオクルージョンセルまでの距離のしきい値 | +| `.possible_object_bbox` | [double] | [m] オクルージョンポリゴンが十分に小さいかどうかを確認するための最小バウンディングボックスサイズ | +| `.ignore_parked_vehicle_speed_threshold` | double | [m/s] 駐車車両の確認のための速度しきい値 | +| `.occlusion_detection_hold_time` | double | [s] オクルージョン検出のホールド時間 | +| `.temporal_stop_time_before_peeking` | double | [s] ピーキングを開始する前に、`default_stopline` でのタイムスタンプの停止時間 | +| `.temporal_stop_before_attention_area` | bool | [-] `attention_area` にピーキングする前に、`first_attention_stopline` で一時停止するフラグ | +| `.creep_velocity_without_traffic_light` | double | [m/s] `occlusion_wo_tl_pass_judge_line` へのクリープ速度 | +| `.static_occlusion_with_traffic_light_timeout` | double | [s] 交通信号のある交差点での静的オクルージョンを無視するためのタイムアウトの期間 | ## トラブルシューティング @@ -533,7 +528,6 @@ laserscan_based_occupancy_grid_map は 2D 方式で不自然な UNKNOWN セル 実車または [AWSIM](https://tier4.github.io/AWSIM/) などのエンドツーエンドシミュレータでは、次の pointcloud_based_occupancy_grid_map 設定を強くお勧めします。 - ```yaml scan_origin_frame: "velodyne_top" @@ -549,7 +543,6 @@ OccupancyGridMapProjectiveBlindSpot: 作業中 - ```plantuml @startuml title modifyPathVelocity @@ -648,8 +641,8 @@ stop - 自車線に「private」タグが付けられている - 自車線は、他の非私有レーンレットと衝突している -| パラメータ | 型 | 説明 | -| ------------------------------------------ | ------ | ------------------------ | +| パラメータ | 型 | 説明 | +| ------------------------------------------- | ------ | ------------------------ | | `merge_from_private_road/stop_duration_sec` | double | 状態変更のマージンタイム | ### 既知の問題 @@ -667,4 +660,3 @@ stop - 複雑な交差点 ![intersection_test](./docs/intersection_test_map.png) - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md index 2170ce63d1107..b835b47707e26 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md @@ -27,10 +27,10 @@ ### モジュールパラメータ -| Parameter | 型 | 説明 | -| ------------------ | ---- | ------------------------------------------------- | +| Parameter | 型 | 説明 | +| ------------------ | ------ | -------------------------------------------------- | | `stop_margin` | double | 自車位置が速度抑制帯前で停止するためのマージン [m] | -| `print_debug_info` | bool | デバッグ情報を印刷するかどうか | +| `print_debug_info` | bool | デバッグ情報を印刷するかどうか | ### 仕組み / アルゴリズム @@ -50,4 +50,3 @@ - [Request to Intervene API](https://github.com/autowarefoundation/autoware/issues/3487) はまだ実装されていないため、この機能は `no_drivable_lane` により車両が停止した後、運転作業の引き継ぎをドライバーに通知するために処理されます - 車両が no_drivable_lane の前で停止するが、その一部が no_drivable_lane ポリゴンと交差するケースを処理 - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md index 6c14d5dc5e68a..7a411af383a37 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md @@ -19,19 +19,18 @@ #### ModelParameter -| パラメーター | タイプ | 説明 | -| ---------------------------- | ------ | ------------------------------------------------------------ | -| `state_clear_time` | 数値 | [s] 停止状態を解除する時間 | -| `stuck_vehicle_vel_thr` | 数値 | [m/s] この速度以下の車両は停止車両とみなす。 | -| `stop_margin` | 数値 | [m] 停止禁止区域での停止線へのマージン | -| `dead_line_margin` | 数値 | [m] 自車がこの位置を通過すると進路を許可 | -| `stop_line_margin` | 数値 | [m] 停止禁止区域での自動生成停止線へのマージン | -| `detection_area_length` | 数値 | [m] 検索ポリゴンの長 | -| `stuck_vehicle_front_margin` | 数値 | [m] 障害物停止最大距離 | +| パラメーター | タイプ | 説明 | +| ---------------------------- | ------ | ---------------------------------------------- | +| `state_clear_time` | 数値 | [s] 停止状態を解除する時間 | +| `stuck_vehicle_vel_thr` | 数値 | [m/s] この速度以下の車両は停止車両とみなす。 | +| `stop_margin` | 数値 | [m] 停止禁止区域での停止線へのマージン | +| `dead_line_margin` | 数値 | [m] 自車がこの位置を通過すると進路を許可 | +| `stop_line_margin` | 数値 | [m] 停止禁止区域での自動生成停止線へのマージン | +| `detection_area_length` | 数値 | [m] 検索ポリゴンの長 | +| `stuck_vehicle_front_margin` | 数値 | [m] 障害物停止最大距離 | #### フローチャート - ```plantuml @startuml title modifyPathVelocity @@ -124,4 +123,3 @@ stop @enduml ``` - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md index 592b96525886a..b9ce64ec67f4d 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md @@ -104,54 +104,53 @@ TODO: 最善の選択肢の 1 つを検討する #### モジュールパラメータ -| パラメータ | 型 | 説明 | -| ------------------- | ------ | ----------------------------------------------------------------------------------- | -| `pedestrian_vel` | double | [m/s] 障害物出現点から出てくる歩行者の仮定最大速度。 | -| `pedestrian_radius` | double | 障害物スポットにフィットする仮定歩行者半径。 | - -| パラメータ | 型 | 説明 | -| ----------- | --- | ---------------------------------------------------------------- | -| `use_object_info` | bool | [-] オブジェクト情報を占有グリッドマップに反映するかどうか | -| `use_partition_lanelet` | bool | [-] パーティションLaneletマップデータを使用するかどうか | - -| パラメータ /デバッグ | 型 | 説明 | -|---|---|---| -| `is_show_occlusion` | bool | 遮蔽点のマーカーを表示するかどうか | -| `is_show_cv_window` | bool | OpenCVデバッグウィンドウを表示するかどうか | -| `is_show_processing_time` | bool | 処理時間を表示するかどうか | - -| パラメータ/しきい値 | 型 | 説明 | -| ------------------------ | ------- | --------------------------------------------------- | -| `detection_area_length` | double | [m] オクルージョン地点を考えるパス長 | -| `stuck_vehicle_vel` | double | [m/s] この値より速度が低い場合は停止していると判断 | -| `lateral_distance` | double | [m] 隠れた衝突を考える最大横方向距離 | - -| パラメーター/モーション | タイプ | 説明 | -| ---------------------------- | ------ | ---------------------------------------------- | -| `safety_ratio` | double | [-] じゃーと加速度の安全性係数 | -| `max_slow_down_jerk` | double | [m/s^3] 安全なブレーキのじゃー | -| `max_slow_down_accel` | double | [m/s^2] 安全なブレーキの減速度 | -| `non_effective_jerk` | double | [m/s^3] 速度Plannningの弱いじゃー | -| `non_effective_acceleration` | double | [m/s^2] 速度Plannningの弱い減速度 | -| `min_allowed_velocity` | double | [m/s] 許容最小速度 | +| パラメータ | 型 | 説明 | +| ------------------- | ------ | ---------------------------------------------------- | +| `pedestrian_vel` | double | [m/s] 障害物出現点から出てくる歩行者の仮定最大速度。 | +| `pedestrian_radius` | double | 障害物スポットにフィットする仮定歩行者半径。 | + +| パラメータ | 型 | 説明 | +| ----------------------- | ---- | ---------------------------------------------------------- | +| `use_object_info` | bool | [-] オブジェクト情報を占有グリッドマップに反映するかどうか | +| `use_partition_lanelet` | bool | [-] パーティションLaneletマップデータを使用するかどうか | + +| パラメータ /デバッグ | 型 | 説明 | +| ------------------------- | ---- | ------------------------------------------ | +| `is_show_occlusion` | bool | 遮蔽点のマーカーを表示するかどうか | +| `is_show_cv_window` | bool | OpenCVデバッグウィンドウを表示するかどうか | +| `is_show_processing_time` | bool | 処理時間を表示するかどうか | + +| パラメータ/しきい値 | 型 | 説明 | +| ----------------------- | ------ | -------------------------------------------------- | +| `detection_area_length` | double | [m] オクルージョン地点を考えるパス長 | +| `stuck_vehicle_vel` | double | [m/s] この値より速度が低い場合は停止していると判断 | +| `lateral_distance` | double | [m] 隠れた衝突を考える最大横方向距離 | + +| パラメーター/モーション | タイプ | 説明 | +| ---------------------------- | ------ | ---------------------------------------------------- | +| `safety_ratio` | double | [-] じゃーと加速度の安全性係数 | +| `max_slow_down_jerk` | double | [m/s^3] 安全なブレーキのじゃー | +| `max_slow_down_accel` | double | [m/s^2] 安全なブレーキの減速度 | +| `non_effective_jerk` | double | [m/s^3] 速度Plannningの弱いじゃー | +| `non_effective_acceleration` | double | [m/s^2] 速度Plannningの弱い減速度 | +| `min_allowed_velocity` | double | [m/s] 許容最小速度 | | `safe_margin` | double | [m] 緊急ブレーキシステムで停止するための最大許容誤差 | -| パラメーター / detection_area | 型 | 説明 | -| ---------------------------- | ------ | -------------------------------------------------------------------------------------- | -| `min_occlusion_spot_size` | double | [m] オクルージョンを考慮するパスの長さ | -| `slice_length` | double | [m] 検出エリアを分割する距離 | -| `max_lateral_distance` | double | [m] 検出_エリア領域を構築するために使用される自己パスの周りのバッファ. | +| パラメーター / detection_area | 型 | 説明 | +| ----------------------------- | ------ | ----------------------------------------------------------------------- | +| `min_occlusion_spot_size` | double | [m] オクルージョンを考慮するパスの長さ | +| `slice_length` | double | [m] 検出エリアを分割する距離 | +| `max_lateral_distance` | double | [m] 検出\_エリア領域を構築するために使用される自己パスの周りのバッファ. | -| パラメータ/グリッド | 型 | 説明 | -| ---------------- | ------ | ----------------------------------------------------------------------- | -| `free_space_max` | double | [-] 占有グリッド内の空きスペースセルの最大値 | -| `occupied_min` | double | [-] detection_area 領域の構築に使用される自車パス周辺のバッファー | +| パラメータ/グリッド | 型 | 説明 | +| ------------------- | ------ | ----------------------------------------------------------------- | +| `free_space_max` | double | [-] 占有グリッド内の空きスペースセルの最大値 | +| `occupied_min` | double | [-] detection_area 領域の構築に使用される自車パス周辺のバッファー | #### フローチャート ##### 全体過程のフローアウトライン - ```plantuml @startuml title modifyPathVelocity (Occupancy/PredictedObject) @@ -224,7 +223,6 @@ stop ##### 予測オブジェクトの詳細プロセス(未更新) - ```plantuml @startuml title modifyPathVelocity @@ -278,29 +276,33 @@ stop ##### 点群ベースの空間グリッドの細部プロセス 1. 1パス目 - - 点群データを `post resampling` 処理して、空間グリッド上に等間隔で配置します。 - - 自車位置の周りの空間グリッドセルに、点群データを割り当てます。 - - 各空間グリッドセルに、占有確率を割り当てます。 + + - 点群データを `post resampling` 処理して、空間グリッド上に等間隔で配置します。 + - 自車位置の周りの空間グリッドセルに、点群データを割り当てます。 + - 各空間グリッドセルに、占有確率を割り当てます。 2. 2パス目 - - 占有確率に基づいて、空間グリッドセルを「占有」、「非占有」、「不明」に分類します。 - - 隣接する空間グリッドセルの分類を考慮して、分類結果を洗練します。 + + - 占有確率に基づいて、空間グリッドセルを「占有」、「非占有」、「不明」に分類します。 + - 隣接する空間グリッドセルの分類を考慮して、分類結果を洗練します。 3. 障害物検出 - - 占有確率が高い空間グリッドセルを、障害物として検出します。 - - 障害物の形状や位置を推定します。 + + - 占有確率が高い空間グリッドセルを、障害物として検出します。 + - 障害物の形状や位置を推定します。 4. **Planning** - - 障害物の予測と回避を考慮した経路を生成します。 - - 速度、加速度、逸脱量に基づく制約を考慮します。 + + - 障害物の予測と回避を考慮した経路を生成します。 + - 速度、加速度、逸脱量に基づく制約を考慮します。 5. **Control** - - **Planning** モジュールからの経路に従って、車両を制御します。 - - ステアリング、アクセル、ブレーキなどのアクチュエーターを制御します。 -6. 反復 - - システムは、点群データの更新を受け取り、プロセスを繰り返します。 + - **Planning** モジュールからの経路に従って、車両を制御します。 + - ステアリング、アクセル、ブレーキなどのアクチュエーターを制御します。 +6. 反復 + - システムは、点群データの更新を受け取り、プロセスを繰り返します。 ```plantuml @startuml @@ -361,4 +363,3 @@ partition handle_possible_collision { stop @enduml ``` - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md index 93f6d252ae20e..3189f48d1fdf9 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md @@ -28,43 +28,42 @@ ## 入力トピック -| 名前 | タイプ | 説明 | -| --------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `~input/path_with_lane_id` | tier4_planning_msgs::msg::PathWithLaneId | レーンID付きパス | -| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクターマップ | -| `~input/vehicle_odometry` | nav_msgs::msg::Odometry | 車両の速度 | -| `~input/dynamic_objects` | autoware_perception_msgs::msg::PredictedObjects | 動的オブジェクト | -| `~input/no_ground_pointcloud` | sensor_msgs::msg::PointCloud2 | 障害物点群 | +| 名前 | タイプ | 説明 | +| ----------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | +| `~input/path_with_lane_id` | tier4_planning_msgs::msg::PathWithLaneId | レーンID付きパス | +| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクターマップ | +| `~input/vehicle_odometry` | nav_msgs::msg::Odometry | 車両の速度 | +| `~input/dynamic_objects` | autoware_perception_msgs::msg::PredictedObjects | 動的オブジェクト | +| `~input/no_ground_pointcloud` | sensor_msgs::msg::PointCloud2 | 障害物点群 | | `~/input/compare_map_filtered_pointcloud` | sensor_msgs::msg::PointCloud2 | 比較マップでフィルタリングされた障害物点群(この実行モジュールの検出方法がPointsの場合に使用されます) | -| `~input/traffic_signals` | autoware_perception_msgs::msg::TrafficLightGroupArray | 信号状態 | +| `~input/traffic_signals` | autoware_perception_msgs::msg::TrafficLightGroupArray | 信号状態 | ## 出力トピック -| 名前 | 型 | 説明 | -| ---------------------- | ----------------------------------------- | ----------------------------------- | -| `~output/path` | `autoware_planning_msgs::msg::Path` | 走行すべきパス | -| `~output/stop_reasons` | `tier4_planning_msgs::msg::StopReasonArray` | 車両を停止させる理由 | +| 名前 | 型 | 説明 | +| ---------------------- | ------------------------------------------- | -------------------- | +| `~output/path` | `autoware_planning_msgs::msg::Path` | 走行すべきパス | +| `~output/stop_reasons` | `tier4_planning_msgs::msg::StopReasonArray` | 車両を停止させる理由 | ## ノードパラメータ -| パラメーター | タイプ | 説明 | -| ------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------- | -| `launch_modules` | 文字列のベクトル | 起動するモジュール名 | -| `forward_path_length` | double | フォワードパス長 | -| `backward_path_length` | double | バックワードパス長 | -| `max_accel` | double | (グローバルパラメータ) 車両の最大加速度 | -| `system_delay` | double | (グローバルパラメータ) 制御コマンドの出力を始めるまでの遅延時間 | -| `delay_response_time` | double | (グローバルパラメータ) 車両が制御コマンドに応答するまでの遅延時間 | +| パラメーター | タイプ | 説明 | +| ---------------------- | ---------------- | ----------------------------------------------------------------- | +| `launch_modules` | 文字列のベクトル | 起動するモジュール名 | +| `forward_path_length` | double | フォワードパス長 | +| `backward_path_length` | double | バックワードパス長 | +| `max_accel` | double | (グローバルパラメータ) 車両の最大加速度 | +| `system_delay` | double | (グローバルパラメータ) 制御コマンドの出力を始めるまでの遅延時間 | +| `delay_response_time` | double | (グローバルパラメータ) 車両が制御コマンドに応答するまでの遅延時間 | ## シミュレーション/実環境における信号機処理 信号機情報の処理は用途によって異なります。以下の表では、対応する車線の信号機トピック要素を `info` とし、`info` が使用できない場合は `null` とします。 -| モジュール/ケース | `info` が `null` | `info` が `null` 以外 | -| :------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| intersection_occlusion(`is_simulation = *`)
  • `info` は最新の非 `null` 情報
| GO (遮蔽は無視されます) | intersection_occlusion は現在までのキューの中で最新の UNKNOWN 以外の情報を利用します。
  • `info` が `GREEN` または `UNKNOWN` の場合、遮蔽が考慮されます
  • `info` が `RED` または `YELLOW` の場合、遮蔽は無視されます (GO)
  • 注: 現在、タイムアウトは考慮されていません
| -| traffic_light(sim, `is_simulation = true`)
  • `info` は現在の情報
| GO | traffic_light は現在知覚している交通信号情報を直接使用します。
  • `info` がタイムアウトの場合は、色に関係なく停止します
  • `info` がタイムアウトでない場合は、色に応じて動作します。`info` が `UNKNOWN` の場合は、停止します
{: rowspan=2} | -| traffic_light(real, `is_simulation = false`)
  • `info` は現在の情報
| 停止 | {: style="padding:0"} | -| 歩行者横断歩道と交通信号 (`is_simulation = *`)
  • `info` は現在の情報
| デフォルト |
  • `disable_yield_for_new_stopped_object` が true の場合、各サブ scene_module はモジュールインスタンス化後に検出された新しい歩行者を無視します。
  • `ignore_with_traffic_light` が true の場合、遮蔽検出はスキップされます。
| -| map_based_prediction(`is_simulation = *`)
  • `info` は現在の情報
| デフォルト | 歩行者信号が
  • RED の場合、周囲の歩行者は予測されません。
  • GREEN の場合、停止中の歩行者は予測されません。
| - +| モジュール/ケース | `info` が `null` | `info` が `null` 以外 | +| :------------------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| intersection_occlusion(`is_simulation = *`)
  • `info` は最新の非 `null` 情報
| GO (遮蔽は無視されます) | intersection_occlusion は現在までのキューの中で最新の UNKNOWN 以外の情報を利用します。
  • `info` が `GREEN` または `UNKNOWN` の場合、遮蔽が考慮されます
  • `info` が `RED` または `YELLOW` の場合、遮蔽は無視されます (GO)
  • 注: 現在、タイムアウトは考慮されていません
| +| traffic_light(sim, `is_simulation = true`)
  • `info` は現在の情報
| GO | traffic_light は現在知覚している交通信号情報を直接使用します。
  • `info` がタイムアウトの場合は、色に関係なく停止します
  • `info` がタイムアウトでない場合は、色に応じて動作します。`info` が `UNKNOWN` の場合は、停止します
{: rowspan=2} | +| traffic_light(real, `is_simulation = false`)
  • `info` は現在の情報
| 停止 | {: style="padding:0"} | +| 歩行者横断歩道と交通信号 (`is_simulation = *`)
  • `info` は現在の情報
| デフォルト |
  • `disable_yield_for_new_stopped_object` が true の場合、各サブ scene_module はモジュールインスタンス化後に検出された新しい歩行者を無視します。
  • `ignore_with_traffic_light` が true の場合、遮蔽検出はスキップされます。
| +| map_based_prediction(`is_simulation = *`)
  • `info` は現在の情報
| デフォルト | 歩行者信号が
  • RED の場合、周囲の歩行者は予測されません。
  • GREEN の場合、停止中の歩行者は予測されません。
| diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md index 00d5064e66b84..6532b1fe6b621 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md @@ -1,4 +1,3 @@ # Behavior Velocity Planner (共通) このパッケージはライブラリとして共通関数を提供し、`behavior_velocity_planner` ノードとモジュールで使用されます。 - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md index fda9deb720991..9cf7441e7c34e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md @@ -14,7 +14,6 @@ #### フローチャート - ```plantuml @startuml title modifyPathVelocity @@ -72,14 +71,14 @@ stop 障害物の抽象化されたデータには、次の情報が含まれています。 -| 名称 | 型 | 説明 | -| ---------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| 位置 | `geometry_msgs::msg::Pose` | 障害物の位置 | -| 分類 | `std::vector` | 確率のある分類 | -| 形状 | `autoware_perception_msgs::msg::Shape` | 障害物の形状 | -| 予測経路 | `std::vector` | 信頼度のある予測経路。このデータには、最小速度と最大速度を使用するため、タイムステップがありません。 | -| 最小速度 (m/s) | `float` | 障害物の最小速度。パラメータ `dynamic_obstacle.min_vel_kmph` で指定されています。 | -| 最大速度 (m/s) | `float` | 障害物の最大速度。パラメータ `dynamic_obstacle.max_vel_kmph` で指定されています。 | +| 名称 | 型 | 説明 | +| -------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | +| 位置 | `geometry_msgs::msg::Pose` | 障害物の位置 | +| 分類 | `std::vector` | 確率のある分類 | +| 形状 | `autoware_perception_msgs::msg::Shape` | 障害物の形状 | +| 予測経路 | `std::vector` | 信頼度のある予測経路。このデータには、最小速度と最大速度を使用するため、タイムステップがありません。 | +| 最小速度 (m/s) | `float` | 障害物の最小速度。パラメータ `dynamic_obstacle.min_vel_kmph` で指定されています。 | +| 最大速度 (m/s) | `float` | 障害物の最大速度。パラメータ `dynamic_obstacle.max_vel_kmph` で指定されています。 | オブジェクトの最大/最小速度をパラメータとして入力し、予想速度に十分なマージンを追加します。このパラメータは、[衝突検出](.#衝突検出)の多角形を作成するために使用されます。 @@ -92,11 +91,11 @@ stop 一方、`Points`の方法は、入力として点群を使用するため、高い安全性(誤認が少ない)があります。点は予測経路を持たないため、自車経路に垂直な方向に移動する経路が抽象化された動的障害物データの予測経路と見なされます。しかし、ポイントフィルタを適切に調整しなければ、多くのポイントを検出する可能性があり、可用性が非常に低くなります。 `ObjectWithoutPath`は、`Object`と`Points`の中間に位置する特性を持っています。 -| 手法 | 説明 | -|---|---|---| -| オブジェクト | 衝突検出に予測パス付きのオブジェクトを使用する。 | -| ObjectWithoutPath | オブジェクトを使用するが、衝突検出に予測パスを使用しない。オブジェクトが指定された速度で車線に飛び出すことを前提にパスを置き換える。 | -| ポイント | 衝突検出にフィルタされたポイントを使用する。ポイントは車線に飛び出すことを前提にパスが作成される。ポイントは小さな円形の障害物とみなされる。 | +| 手法 | 説明 | +| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| オブジェクト | 衝突検出に予測パス付きのオブジェクトを使用する。 | +| ObjectWithoutPath | オブジェクトを使用するが、衝突検出に予測パスを使用しない。オブジェクトが指定された速度で車線に飛び出すことを前提にパスを置き換える。 | +| ポイント | 衝突検出にフィルタされたポイントを使用する。ポイントは車線に飛び出すことを前提にパスが作成される。ポイントは小さな円形の障害物とみなされる。 | ## 自動運転ソフトウェアドキュメント @@ -146,7 +145,6 @@ stop ![brief](./docs/insert_velocity_to_approach.svg) - ```plantuml @startuml hide empty description @@ -170,59 +168,59 @@ APPROACH --> APPROACH : Approach duration is less than threshold ### モジュールパラメータ -| パラメータ名 | タイプ | 説明 | -|---|---|---| -| `detection_method` | 文字列 | [-] 候補: Object, ObjectWithoutPath, Points | +| パラメータ名 | タイプ | 説明 | +| ----------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `detection_method` | 文字列 | [-] 候補: Object, ObjectWithoutPath, Points | | `target_obstacle_types` | 文字ベクトル | [-] モジュールが考慮する障害物タイプを指定します。障害物の分類タイプがここに記載されていない場合、無視されます。候補: ["PEDESTRIAN", "BICYCLE","MOTORCYCLE"] | -| `use_partition_lanelet` | ブール | [-] 分割laneletマップデータを使用するかどうか | -| `specify_decel_jerk` | ブール | [-] 自車が減速するときのジャークを指定するかどうか | -| `stop_margin` | double | [m] 車両はこのマージンを保持して停止できるよう減速します | -| `passing_margin` | double | [m] 障害物より先に予測位置にある車両の前方が障害物 + このマージンに達したときに車両の加速を開始します | -| `deceleration_jerk` | double | [m/s^3] 障害物のために停止するときに自車がこのジャークで減速します | -| `detection_distance` | double | [m] 自車の前方距離から障害物を検出します | -| `detection_span` | double | [m] 計算時間を短縮するために、この間隔で衝突を計算します | -| `min_vel_ego_kmph` | double | [km/h] 衝突までの時間を計算するための最小速度 | - -| パラメータ /detection_area | 型 | 説明 | -| ------------------------- | ------ | ----------------------------------------- | -| `margin_ahead` | double | 検出エリア多角形の前方マージン [m] | -| `margin_behind` | double | 検出エリア多角形の後方マージン [m] | - -| パラメータ | タイプ | 説明 | -|---|---|---| -| `use_mandatory_area` | double | [-] 強制検出領域を使用するかどうか | -| `assume_fixed_velocity.enable` | double | [-] 有効な場合、障害物の速度は以下に指定した最小速度と最大速度の範囲内と見なされます | -| `assume_fixed_velocity.min_vel_kmph` | double | [km/h] 動的障害物の最小速度 | -| `assume_fixed_velocity.max_vel_kmph` | double | [km/h] 動的障害物の最大速度 | -| `diameter` | double | [m] 障害物の直径。ポイントから動的障害物を作成するために使用されます | -| `height` | double | [m] 障害物の高さ。ポイントから動的障害物を作成するために使用されます | -| `max_prediction_time` | double | [秒] この時間まで予測経路を作成します | -| `time_step` | double | [秒] 各パスステップのタイムステップ。パスを含まないポイントまたはオブジェクトから動的障害物を作成するために使用されます | -| `points_interval` | double | [m] この間隔で障害物ポイントをグループに分割し、最も近くにある横方向のポイントのみを検出します。ポイントメソッドでのみ使用されます | - -| パラメータ /approaching | タイプ | 説明 | -| ------------------------ | ------ | ----------------------------------------------------- | -| `enable` | bool | [-] 停止後に接近を有効にするかどうか | -| `margin` | double | [m] 自車が障害物に接近する方法の距離 | -| `limit_vel_kmph` | double | [km/h] 停止後に接近するための速度制限 | - -| パラメータ/状態 | 型 | 説明 | -| ------------------------ | ------ | ---------------------------------------------------------------------------------- | -| `stop_thresh` | double | [m/s] エゴが停止状態であると判定するための閾値 | -| `stop_time_thresh` | double | [sec] 停止状態から接近状態に移行するための停止時間閾値 | -| `disable_approach_dist` | double | [m] 障害物との距離がこの値より長い場合に接近状態を終了する | -| `keep_approach_duration` | double | [sec] 状態遷移のチャタリングを避けるため、接近状態をこの期間保持する | - -| パラメータ /slow\_down\_limit | 型 | 説明 | -| ----------------------------- | ------ | -------------------------------------------------------- | -| `enable` | bool | [-] 最大ジャークと加速度で速度を制限するかどうか | -| `max\_jerk` | double | [m/s^3] 安全なブレーキのための最小ジャーク減速度。 | -| `max\_acc` | double | [m/s^2] 安全なブレーキのための最小加速度減速度。 | - -| パラメーター /ignore_momentary_detection | タイプ | 説明 | -|------------------------------------------|-----------|-----------------------------------------------------------------| -| `enable` | bool |[-] 一時的な検出を無視するかどうか | -| `time_threshold` | double | [秒] この期間より短い検出を無視する | +| `use_partition_lanelet` | ブール | [-] 分割laneletマップデータを使用するかどうか | +| `specify_decel_jerk` | ブール | [-] 自車が減速するときのジャークを指定するかどうか | +| `stop_margin` | double | [m] 車両はこのマージンを保持して停止できるよう減速します | +| `passing_margin` | double | [m] 障害物より先に予測位置にある車両の前方が障害物 + このマージンに達したときに車両の加速を開始します | +| `deceleration_jerk` | double | [m/s^3] 障害物のために停止するときに自車がこのジャークで減速します | +| `detection_distance` | double | [m] 自車の前方距離から障害物を検出します | +| `detection_span` | double | [m] 計算時間を短縮するために、この間隔で衝突を計算します | +| `min_vel_ego_kmph` | double | [km/h] 衝突までの時間を計算するための最小速度 | + +| パラメータ /detection_area | 型 | 説明 | +| -------------------------- | ------ | ---------------------------------- | +| `margin_ahead` | double | 検出エリア多角形の前方マージン [m] | +| `margin_behind` | double | 検出エリア多角形の後方マージン [m] | + +| パラメータ | タイプ | 説明 | +| ------------------------------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| `use_mandatory_area` | double | [-] 強制検出領域を使用するかどうか | +| `assume_fixed_velocity.enable` | double | [-] 有効な場合、障害物の速度は以下に指定した最小速度と最大速度の範囲内と見なされます | +| `assume_fixed_velocity.min_vel_kmph` | double | [km/h] 動的障害物の最小速度 | +| `assume_fixed_velocity.max_vel_kmph` | double | [km/h] 動的障害物の最大速度 | +| `diameter` | double | [m] 障害物の直径。ポイントから動的障害物を作成するために使用されます | +| `height` | double | [m] 障害物の高さ。ポイントから動的障害物を作成するために使用されます | +| `max_prediction_time` | double | [秒] この時間まで予測経路を作成します | +| `time_step` | double | [秒] 各パスステップのタイムステップ。パスを含まないポイントまたはオブジェクトから動的障害物を作成するために使用されます | +| `points_interval` | double | [m] この間隔で障害物ポイントをグループに分割し、最も近くにある横方向のポイントのみを検出します。ポイントメソッドでのみ使用されます | + +| パラメータ /approaching | タイプ | 説明 | +| ----------------------- | ------ | ------------------------------------- | +| `enable` | bool | [-] 停止後に接近を有効にするかどうか | +| `margin` | double | [m] 自車が障害物に接近する方法の距離 | +| `limit_vel_kmph` | double | [km/h] 停止後に接近するための速度制限 | + +| パラメータ/状態 | 型 | 説明 | +| ------------------------ | ------ | -------------------------------------------------------------------- | +| `stop_thresh` | double | [m/s] エゴが停止状態であると判定するための閾値 | +| `stop_time_thresh` | double | [sec] 停止状態から接近状態に移行するための停止時間閾値 | +| `disable_approach_dist` | double | [m] 障害物との距離がこの値より長い場合に接近状態を終了する | +| `keep_approach_duration` | double | [sec] 状態遷移のチャタリングを避けるため、接近状態をこの期間保持する | + +| パラメータ /slow_down_limit | 型 | 説明 | +| --------------------------- | ------ | -------------------------------------------------- | +| `enable` | bool | [-] 最大ジャークと加速度で速度を制限するかどうか | +| `max\_jerk` | double | [m/s^3] 安全なブレーキのための最小ジャーク減速度。 | +| `max\_acc` | double | [m/s^2] 安全なブレーキのための最小加速度減速度。 | + +| パラメーター /ignore_momentary_detection | タイプ | 説明 | +| ---------------------------------------- | ------ | ----------------------------------- | +| `enable` | bool | [-] 一時的な検出を無視するかどうか | +| `time_threshold` | double | [秒] この期間より短い検出を無視する | ### 今後の拡張 / 未実装の部分 @@ -230,4 +228,3 @@ APPROACH --> APPROACH : Approach duration is less than threshold - ポリゴンオブジェクトとの衝突を検出する - 障害物の予測経路が直線でない場合の処理 - 現在、衝突チェックは障害物の予測経路が直線であるという仮定に基づいて計算されています - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md index ad175ccd44a20..8433a0579bb04 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md @@ -12,22 +12,22 @@ ### モジュールパラメーター -| パラメーター | 型 | 説明 | -| ------------------- | ------ | ------------------------------------------------------- | -| `slow_start_margin` | double | 車両が減速帯手前で減速するための [m] マージン | +| パラメーター | 型 | 説明 | +| ------------------- | ------ | ----------------------------------------------- | +| `slow_start_margin` | double | 車両が減速帯手前で減速するための [m] マージン | | `slow_end_margin` | double | 車両が減速帯通過後に加速するための [m] マージン | -| `print_debug_info` | bool | デバッグ情報を印刷するか否か | +| `print_debug_info` | bool | デバッグ情報を印刷するか否か | #### 速度計算 - 段差の高さおよび減速速度の限界を使用して一次方程式を作成する -| パラメータ | 型 | 説明 | -| ------------ | ------ | ------------------------------------------------- | -| `min_height` | double | [m] スピードバンプの低さの最低想定値 | -| `max_height` | double | [m] スピードバンプの高さの最高想定値 | -| `min_speed` | double | [m/s] 減速速度の最低想定値 | -| `max_speed` | double | [m/s] 減速速度の最高想定値 | +| パラメータ | 型 | 説明 | +| ------------ | ------ | ------------------------------------ | +| `min_height` | double | [m] スピードバンプの低さの最低想定値 | +| `max_height` | double | [m] スピードバンプの高さの最高想定値 | +| `min_speed` | double | [m/s] 減速速度の最低想定値 | +| `max_speed` | double | [m/s] 減速速度の最高想定値 | ### 内部動作 / アルゴリズム @@ -49,4 +49,3 @@ ### 今後の作業 - [こちら](https://journals.sagepub.com/doi/10.1155/2014/736576) の記事では、バンプのモデリング手法が提案されています。これは、バンプを円に当てはめて、半径を計算するという簡単なものです。最近のインプリメンテーションでは、速度の計算はバンプの高さだけに基づいていますが、将来はより現実的な結果を得るために、この手法を適用する予定です。 - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md index 49643da8f71e1..a4475ef990e7d 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md @@ -12,13 +12,13 @@ ### モジュールパラメータ -| パラメータ | タイプ | 説明 | -| -------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `stop_margin` | 倍精度 | 車両が停止線前に停止しようとするマージン | -| `stop_duration_sec` | 倍精度 | [秒] 自己車両が停止線の前で停止する時間パラメータ | +| パラメータ | タイプ | 説明 | +| -------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `stop_margin` | 倍精度 | 車両が停止線前に停止しようとするマージン | +| `stop_duration_sec` | 倍精度 | [秒] 自己車両が停止線の前で停止する時間パラメータ | | `hold_stop_margin_distance` | 倍精度 | [メートル] 再始動防止パラメータ(アルゴリズムセクションを参照)。また、自己車両がこの距離より停止線に近い場合、自己状態は接近から停止に変わります | -| `use_initialization_stop_state` | ブール | 車両が停止線から離れる場合に接近状態に戻すかどうかを決定するフラグ | -| `show_stop_line_collision_check` | ブール | 停止線との衝突チェックのデバッグ情報を表示するかどうかを決定するフラグ | +| `use_initialization_stop_state` | ブール | 車両が停止線から離れる場合に接近状態に戻すかどうかを決定するフラグ | +| `show_stop_line_collision_check` | ブール | 停止線との衝突チェックのデバッグ情報を表示するかどうかを決定するフラグ | ### 内部動作 / アルゴリズム @@ -29,7 +29,6 @@ #### フローチャート - ```plantuml @startuml title modifyPathVelocity @@ -110,4 +109,3 @@ stop ![example](docs/keep_stopping.svg){width=1000}
hold_stop_margin_distance の内部
- diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md index 2866803044183..2329d1bb38679 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md @@ -72,7 +72,6 @@ 次の例では、パスの各点を取得して 2 倍にします。つまり、速度を複製します。すべてのビヘイビア速度モジュールが実行された後、Velocity Smoother がパス速度をさらに変更することに注意してください。 - ```cpp bool TemplateModule::modifyPathVelocity( [[maybe_unused]] PathWithLaneId * path, [[maybe_unused]] StopReason * stop_reason) @@ -84,4 +83,3 @@ bool TemplateModule::modifyPathVelocity( return false; } ``` - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md index fb989a5a941e9..e16da19adaa96 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md @@ -63,17 +63,16 @@ #### モジュールパラメータ -| パラメータ | 型 | 説明 | -|---|---|---| -| `stop_margin` | double | [m] 停止点手前の余裕 | -| `tl_state_timeout` | double | [s] 検出された信号機の結果のタイムアウト | +| パラメータ | 型 | 説明 | +| ---------------------- | ------ | ---------------------------------------------------------- | +| `stop_margin` | double | [m] 停止点手前の余裕 | +| `tl_state_timeout` | double | [s] 検出された信号機の結果のタイムアウト | | `stop_time_hysteresis` | double | [s] チャタリング防止のための停止計画の決定に関する時間閾値 | -| `yellow_lamp_period` | double | [s] 黄色のランプ時間 | -| `enable_pass_judge` | bool | [-] 通過判定を使用するかどうか | +| `yellow_lamp_period` | double | [s] 黄色のランプ時間 | +| `enable_pass_judge` | bool | [-] 通過判定を使用するかどうか | #### フローチャート - ```plantuml @startuml title modifyPathVelocity @@ -117,4 +116,3 @@ endif ##### 既知の限界 - 現在確認中 - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md index 07e7e9ff796b1..55d778375155a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md @@ -27,7 +27,6 @@ ### システム構成図 - ```plantuml @startuml !theme cerulean-outline @@ -110,7 +109,6 @@ FMS: 複数の車両が運用中で関連レーンの占有がある場合の交 FMS: フリートマネジメントシステム - ```plantuml @startuml !theme cerulean-outline @@ -210,19 +208,19 @@ remote_controllable_traffic_light -[hidden]down-> warning_light ## 自動運転ソフトウェア パラメータ -| パラメータ | 型 | 説明 | -|---|---|---| -| `max_delay_sec` | double | [秒] コマンドの最大許容遅延 | -| `near_line_distance` | double | [m] 停車線を停止するために停止線までの距離のしきい値 | -| `dead_line_margin` | double | [m] このモジュールが停止線を挿入し続けるしきい値 | -| `hold_stop_margin_distance` | double | [m] 再起動防止のパラメータ(以降のセクションを参照) | -| `check_timeout_after_stop_line` | bool | [-] リンクが切断されたときに停止するタイムアウトの確認 | +| パラメータ | 型 | 説明 | +| ------------------------------- | ------ | ------------------------------------------------------ | +| `max_delay_sec` | double | [秒] コマンドの最大許容遅延 | +| `near_line_distance` | double | [m] 停車線を停止するために停止線までの距離のしきい値 | +| `dead_line_margin` | double | [m] このモジュールが停止線を挿入し続けるしきい値 | +| `hold_stop_margin_distance` | double | [m] 再起動防止のパラメータ(以降のセクションを参照) | +| `check_timeout_after_stop_line` | bool | [-] リンクが切断されたときに停止するタイムアウトの確認 | #### 再始動防止 車両の制御性能が低下するために、車両の動き始め時に停止するのに X メートル(例: 0.5 メートル)を要する場合、車両は停止点に近づこうとして動き始めるときは厳守すべき停止位置を超過します(例: 0.3 メートル距離)。 -このモジュールには、これらの余分な再始動を防止するためのパラメータ `hold_stop_margin_distance` があります。車両がモジュールの停止位置(_front_to_stop_line < hold_stop_margin_distance)から `hold_stop_margin_distance` メーター以内に停止した場合、モジュールは車両がモジュールの停止位置で既に停止していると判断し、他の要素により車両が停止した場合にも、現在の位置で停止し続けることを計画します。 +このモジュールには、これらの余分な再始動を防止するためのパラメータ `hold_stop_margin_distance` があります。車両がモジュールの停止位置(\_front_to_stop_line < hold_stop_margin_distance)から `hold_stop_margin_distance` メーター以内に停止した場合、モジュールは車両がモジュールの停止位置で既に停止していると判断し、他の要素により車両が停止した場合にも、現在の位置で停止し続けることを計画します。
![例](docs/restart_prevention.svg){width=1000} @@ -241,7 +239,6 @@ remote_controllable_traffic_light -[hidden]down-> warning_light #### フローチャート - ```plantuml @startuml !theme cerulean-outline @@ -302,4 +299,3 @@ $$ #### 制限事項 - 未定 - diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md index 954314cc0c4cd..c4007a704ccfd 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md @@ -3,4 +3,3 @@ ### 役割 このモジュールは、自車が私有地に進入または離脱するために横断歩道を含む横断施設を横断する前に停止することを決定します。 - diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md index 2ce0267a35fad..f50618902bf54 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md @@ -79,15 +79,14 @@ ### モジュールパラメータ -| パラメーター | タイプ | 説明 | -| ---------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------- | -| `extra_object_width` | double | [m] 検出したオブジェクト周辺の余分な幅 | -| `minimum_object_velocity` | double | [m/s] この値以下の速度のオブジェクトは無視されます | -| `stop_distance_buffer` | double | [m] 停止点と衝突点の間に追加する余分な距離 | -| `time_horizon` | double | [s] 衝突チェックに使用される時間的視野 | -| `hysteresis` | double | [m] 衝突が検出されると、このヒステリシスが衝突検出に使用されます | -| `add_stop_duration_buffer` | double | [s] 停止の判断が追加される前に、衝突が継続的に検出されなければならない時間 | -| `remove_stop_duration_buffer` | double | [s] 衝突が検出されなくなってから停止の判断が削除されるまでの時間 | -| `minimum_object_distance_from_ego_trajectory` | double | [m] 衝突を考慮する場合の、自己軌跡とオブジェクトの足跡間の最小距離 | -| `ignore_unavoidable_collisions` | bool | [-] trueの場合、停止では回避できない衝突を無視します(障害物が直進し続けると仮定した場合) | - +| パラメーター | タイプ | 説明 | +| --------------------------------------------- | ------ | ------------------------------------------------------------------------------------------ | +| `extra_object_width` | double | [m] 検出したオブジェクト周辺の余分な幅 | +| `minimum_object_velocity` | double | [m/s] この値以下の速度のオブジェクトは無視されます | +| `stop_distance_buffer` | double | [m] 停止点と衝突点の間に追加する余分な距離 | +| `time_horizon` | double | [s] 衝突チェックに使用される時間的視野 | +| `hysteresis` | double | [m] 衝突が検出されると、このヒステリシスが衝突検出に使用されます | +| `add_stop_duration_buffer` | double | [s] 停止の判断が追加される前に、衝突が継続的に検出されなければならない時間 | +| `remove_stop_duration_buffer` | double | [s] 衝突が検出されなくなってから停止の判断が削除されるまでの時間 | +| `minimum_object_distance_from_ego_trajectory` | double | [m] 衝突を考慮する場合の、自己軌跡とオブジェクトの足跡間の最小距離 | +| `ignore_unavoidable_collisions` | bool | [-] trueの場合、停止では回避できない衝突を無視します(障害物が直進し続けると仮定した場合) | diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md index 8dab87014fa32..c09acc7445c6f 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md @@ -128,7 +128,7 @@ レーンレットマップは常に障害物をチェックしていますが、他のソースはパラメーター `obstacles.dynamic_source` を使用して切り替えられます。 -フットプリントと交差する障害物を効率的に探すために、それらは R-ツリー ([https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html](https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html)) に格納されます。 +フットプリントと交差する障害物を効率的に探すために、それらは R-ツリー ([https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost**geometry**index\_\_rtree.html](https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html)) に格納されます。 2 つのツリーが使用されます。1 つは障害物点用で、1 つは障害物ラインストリング用です (R-ツリーを簡素化するために、ラインストリングはセグメントに分解されます)。 #### オブスタクルマスク @@ -200,27 +200,27 @@ $velocity = \frac{dist\_to\_collision}{min\_ttc}$ ## パラメータ -| 名前 | 型 | 説明 | -|---|---|---| -| `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 | 安全エンベロープを使用して動的障害物ソースをフィルタリングするかどうか。 | +| 名前 | 型 | 説明 | +| --------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| `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 | 安全エンベロープを使用して動的障害物ソースをフィルタリングするかどうか。 | ## 仮定 / 制約 @@ -240,4 +240,3 @@ $velocity = \frac{dist\_to\_collision}{min\_ttc}$ ## (オプション) 参照 / 外部リンク ## (オプション) 今後の拡張 / 実装されていない部分 - diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md index fb1cc55fa69d4..87e91512e6896 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md @@ -52,8 +52,8 @@ - パラメータ`cut_predicted_paths_beyond_red_lights`が`true`に設定されている場合は、赤信号の停止線を超える予測パスのポイントをカットします。 | `cut_predicted_paths_beyond_red_lights = false` | `cut_predicted_paths_beyond_red_lights = true` | -| :----------------------------------------------------: | :---------------------------------------------------: | -| ![](./docs/path_green_light.png) | ![](./docs/path_red_light.png) | +| :---------------------------------------------: | :--------------------------------------------: | +| ![](./docs/path_green_light.png) | ![](./docs/path_red_light.png) | デバッグ可視化では、予測パスは緑、赤信号の停止線は赤で表示されます。 @@ -99,41 +99,40 @@ ## モジュールパラメータ -| パラメータ | 型 | 説明 | -| ---------------- | ---- | ---------------------------------------- | -| `mode` | 文字列 | 動的対象の考慮に使用するモード。候補: threshold, intervals, ttc | +| パラメータ | 型 | 説明 | +| ----------------------------- | -------- | -------------------------------------------------------------------------- | +| `mode` | 文字列 | 動的対象の考慮に使用するモード。候補: threshold, intervals, ttc | | `skip_if_already_overlapping` | ブール値 | 真の場合、自車が既に他の車線と重複している場合、このモジュールを実行しない | -| `max_arc_length` | double | 車線逸脱衝突の確認に使用される最大軌跡弧長 | +| `max_arc_length` | double | 車線逸脱衝突の確認に使用される最大軌跡弧長 | -| パラメータ/しきい値 | 型 | 説明 | -| -------------------- | ------ | ---------------------------------------------------------------- | -| `time_threshold` | double | [s] この時間内に重なりが生じる可能性のあるオブジェクトを考慮する | +| パラメータ/しきい値 | 型 | 説明 | +| ------------------- | ------ | ---------------------------------------------------------------- | +| `time_threshold` | double | [s] この時間内に重なりが生じる可能性のあるオブジェクトを考慮する | -| Parameter /ttc | Type | Description | -| -------------- | ------ | ----------------------------------------------------------------------------------------------------- | +| Parameter /ttc | Type | Description | +| -------------- | ------ | -------------------------------------------------------------------------------------- | | `threshold` | double | egoが重なっている間に、この値よりも推定衝突時間(TTC)が短いオブジェクトを考慮します。 | -| パラメータ / オブジェクト | データ型 | 説明 | -|---|---|---| -| `minimum_velocity` | double | [m/s] この値以下の速度のオブジェクトを無視 | -| `predicted_path_min_confidence` | double | [-] 予測パスが有効と見なされるための最小信頼度 | -| `cut_predicted_paths_beyond_red_lights` | bool | [-] trueの場合、赤信号の停止線の向こう側の予測パスは切断 | -| `ignore_behind_ego` | bool | [-] trueの場合、自車後方のオブジェクトは無視 | - -| パラメータ/アクション | タイプ | 説明 | -| -------------------------------- | ------ | ------------------------------------------------------------------------ | -| `precision` | double | 停止点を軌跡に挿入するときの[m]精度 | -| `longitudinal_distance_buffer` | double | 自車の前方に保持する[m]の安全距離バッファ | -| `lateral_distance_buffer` | double | 自車の側面に保持する[m]の安全距離バッファ | -| `min_duration` | double | 決定をキャンセルできるようになるまでに必要な[s]の最小継続時間 | -| `slowdown.distance_threshold` | double | オーバーラップからこの距離よりも近づいたときに減速を挿入する | -| `slowdown.velocity` | double | 減速速度 | -| `stop.distance_threshold` | double | オーバーラップからこの距離よりも近づいたときに停止を挿入する | - -| パラメータ/自車 | タイプ | 説明 | -| ---------------- | ----- | ---------------------------------------------------- | +| パラメータ / オブジェクト | データ型 | 説明 | +| --------------------------------------- | -------- | -------------------------------------------------------- | +| `minimum_velocity` | double | [m/s] この値以下の速度のオブジェクトを無視 | +| `predicted_path_min_confidence` | double | [-] 予測パスが有効と見なされるための最小信頼度 | +| `cut_predicted_paths_beyond_red_lights` | bool | [-] trueの場合、赤信号の停止線の向こう側の予測パスは切断 | +| `ignore_behind_ego` | bool | [-] trueの場合、自車後方のオブジェクトは無視 | + +| パラメータ/アクション | タイプ | 説明 | +| ------------------------------ | ------ | ------------------------------------------------------------- | +| `precision` | double | 停止点を軌跡に挿入するときの[m]精度 | +| `longitudinal_distance_buffer` | double | 自車の前方に保持する[m]の安全距離バッファ | +| `lateral_distance_buffer` | double | 自車の側面に保持する[m]の安全距離バッファ | +| `min_duration` | double | 決定をキャンセルできるようになるまでに必要な[s]の最小継続時間 | +| `slowdown.distance_threshold` | double | オーバーラップからこの距離よりも近づいたときに減速を挿入する | +| `slowdown.velocity` | double | 減速速度 | +| `stop.distance_threshold` | double | オーバーラップからこの距離よりも近づいたときに停止を挿入する | + +| パラメータ/自車 | タイプ | 説明 | +| -------------------- | ------ | --------------------------------------- | | `extra_front_offset` | double | 自車フットプリントに追加する前方距離[m] | -| `extra_rear_offset` | double | 自車フットプリントに追加する後方距離[m] | -| `extra_left_offset` | double | 自車フットプリントに追加する左側距離[m] | +| `extra_rear_offset` | double | 自車フットプリントに追加する後方距離[m] | +| `extra_left_offset` | double | 自車フットプリントに追加する左側距離[m] | | `extra_right_offset` | double | 自車フットプリントに追加する右側距離[m] | - diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md index ea4471907a62c..57643122af40b 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md @@ -17,56 +17,61 @@ ## 入力トピック -| 名称 | 型 | 説明 | -| ------------------------------- | ----------------------------------------------- | ---------------------------- | -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 入力軌道 | -| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | -| `~/input/vehicle_odometry` | `nav_msgs::msg::Odometry` | 自車位置と速度 | -| `~/input/accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 自車加速度 | -| `~/input/dynamic_objects` | `autoware_perception_msgs::msg::PredictedObjects` | 動的オブジェクト | -| `~/input/no_ground_pointcloud` | `sensor_msgs::msg::PointCloud2` | 障害物点群 | -| `~/input/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 交通信号状態 | -| `~/input/virtual_traffic_light_states` | `tier4_v2x_msgs::msg::VirtualTrafficLightStateArray` | 仮想交通信号状態 | -| `~/input/occupancy_grid` | `nav_msgs::msg::OccupancyGrid` | オキュパンシグリッド | +| 名称 | 型 | 説明 | +| -------------------------------------- | ------------------------------------------------------- | -------------------- | +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 入力軌道 | +| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | +| `~/input/vehicle_odometry` | `nav_msgs::msg::Odometry` | 自車位置と速度 | +| `~/input/accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 自車加速度 | +| `~/input/dynamic_objects` | `autoware_perception_msgs::msg::PredictedObjects` | 動的オブジェクト | +| `~/input/no_ground_pointcloud` | `sensor_msgs::msg::PointCloud2` | 障害物点群 | +| `~/input/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 交通信号状態 | +| `~/input/virtual_traffic_light_states` | `tier4_v2x_msgs::msg::VirtualTrafficLightStateArray` | 仮想交通信号状態 | +| `~/input/occupancy_grid` | `nav_msgs::msg::OccupancyGrid` | オキュパンシグリッド | ## 出力トピック -| 名称 | タイプ | 説明 | -|---|---|---| -| `~/output/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 速度プロファイルを更新したエゴトラジェクトリ | -| `~/output/velocity_factors` | `autoware_adapi_v1_msgs::msg::VelocityFactorsArray` | エゴの速度プロファイルを変化させる要因 | +| 名称 | タイプ | 説明 | +| --------------------------- | --------------------------------------------------- | -------------------------------------------- | +| `~/output/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 速度プロファイルを更新したエゴトラジェクトリ | +| `~/output/velocity_factors` | `autoware_adapi_v1_msgs::msg::VelocityFactorsArray` | エゴの速度プロファイルを変化させる要因 | ## サービス ### Planning + - self-localization: `current pose` の更新 - behavior-planning: `trajectory` の生成 - trajectory-planning: `trajectory` の追従制御 - perception: 感知データの提供 ### Control + - steering-control: ステアリング制御 - braking-control: ブレーキ制御 - throttle-control: アクセル制御 ### Mapping + - map: 地図データの提供 ### Monitoring + - system-monitoring: システム状態の監視 ### Visualization + - visualization: 各種情報の可視化 -| 名前 | 種類 | 説明 | -|---|---|---| -| `~/service/load_plugin` | autoware_motion_velocity_planner_node::srv::LoadPlugin | プラグインのロードをリクエスト | +| 名前 | 種類 | 説明 | +| ------------------------- | -------------------------------------------------------- | ---------------------------------- | +| `~/service/load_plugin` | autoware_motion_velocity_planner_node::srv::LoadPlugin | プラグインのロードをリクエスト | | `~/service/unload_plugin` | autoware_motion_velocity_planner_node::srv::UnloadPlugin | プラグインのアンロードをリクエスト | ## ノードパラメータ -| パラメータ | 型 | 説明 | -| ---------------- | ---------------- | ---------------------- | +| パラメータ | 型 | 説明 | +| ---------------- | ---------------- | ------------------------ | | `launch_modules` | vector\ | 起動するモジュールの名前 | 加えて、以下のパラメータをノードに提供する必要があります。 @@ -76,4 +81,3 @@ - [一般的なPlanningパラメータ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/common/common.param.yaml) - [Smootherパラメータ](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_velocity_smoother/#parameters) - ロードされる各プラグインのパラメータ - diff --git a/planning/sampling_based_planner/autoware_bezier_sampler/README.md b/planning/sampling_based_planner/autoware_bezier_sampler/README.md index e038eaa0a745b..9caa170f5934f 100644 --- a/planning/sampling_based_planner/autoware_bezier_sampler/README.md +++ b/planning/sampling_based_planner/autoware_bezier_sampler/README.md @@ -1,4 +1,3 @@ ## ベジエサンプラー このドキュメントでは、ベジエ曲線とその生成に関する実装について説明します。サンプリング戦略は [IEEE](https://ieeexplore.ieee.org/document/8932495) に掲載された論文に従っています。 - diff --git a/planning/sampling_based_planner/autoware_frenet_planner/README.md b/planning/sampling_based_planner/autoware_frenet_planner/README.md index d0d0a83689320..88862895c9850 100644 --- a/planning/sampling_based_planner/autoware_frenet_planner/README.md +++ b/planning/sampling_based_planner/autoware_frenet_planner/README.md @@ -5,4 +5,3 @@ ## 説明 [オリジナル論文](https://www.researchgate.net/publication/224156269_Optimal_Trajectory_Generation_for_Dynamic_Street_Scenarios_in_a_Frenet_Frame) - diff --git a/planning/sampling_based_planner/autoware_path_sampler/README.md b/planning/sampling_based_planner/autoware_path_sampler/README.md index 3c77c6d81e203..b7f695ffc66a7 100644 --- a/planning/sampling_based_planner/autoware_path_sampler/README.md +++ b/planning/sampling_based_planner/autoware_path_sampler/README.md @@ -19,11 +19,11 @@ ### 入力 -| 名前 | タイプ | 説明 | -| ------------------ | --------------------------------------------- | -------------------------------------------------- | +| 名前 | タイプ | 説明 | +| ------------------ | --------------------------------------------- | ------------------------------ | | `~/input/path` | autoware_planning_msgs/msg/Path | 基準経路と対応する走行可能領域 | -| `~/input/odometry` | nav_msgs/msg/Odometry | 自車位置の現在の状態 | -| `~/input/objects` | autoware_perception_msgs/msg/PredictedObjects | 回避すべきオブジェクト | +| `~/input/odometry` | nav_msgs/msg/Odometry | 自車位置の現在の状態 | +| `~/input/objects` | autoware_perception_msgs/msg/PredictedObjects | 回避すべきオブジェクト | ### 自動運転ソフトウェアのドキュメント @@ -31,11 +31,11 @@ Planning コンポーネントは、センシングと知覚から得られた環境情報を使用して、車両の経路を計画しています。 Planning モジュールは、以下のタスクを実行します。 -* 自車位置の確立 -* 障害物の検出と分類 -* 目的地の決定 -* 経路の計画 -* 経路の追跡 +- 自車位置の確立 +- 障害物の検出と分類 +- 目的地の決定 +- 経路の計画 +- 経路の追跡 Planning コンポーネントは、センサーからのリアルタイムデータを処理して、車両の周囲を正確に把握しています。この情報は、衝突回避や効率的なルートプランニングのために使用されています。 @@ -43,10 +43,10 @@ Planning コンポーネントは、センサーからのリアルタイムデ Motion Planning モジュールは、Planning コンポーネントが生成した経路に基づいて、車両の動きを制御しています。 Motion Planning モジュールは、以下のタスクを実行します。 -* 車両の運動学モデルの確立 -* 経路追従の生成 -* 経路追従エラーの最小化 -* 障害物回避の計画 +- 車両の運動学モデルの確立 +- 経路追従の生成 +- 経路追従エラーの最小化 +- 障害物回避の計画 Motion Planning モジュールは、車両の運動学を考慮して、安全かつ効率的な車両の動きを計画しています。このモジュールは、衝突を回避し、快適な乗り心地を提供する最適な軌跡を生成しています。 @@ -54,10 +54,10 @@ Motion Planning モジュールは、車両の運動学を考慮して、安全 Control モジュールは、Motion Planning モジュールが生成した軌跡に基づいて、車両を制御しています。 Control モジュールは、以下のタスクを実行します。 -* ステアリングの制御 -* アクセルの制御 -* ブレーキの制御 -* 横滑り防止制御 +- ステアリングの制御 +- アクセルの制御 +- ブレーキの制御 +- 横滑り防止制御 Control モジュールは、車両のactuatorにシグナルを送信して、車両の実際の動きを計画された軌跡に一致させています。このモジュールは、車両の安定性と安全性を確保しながら、正確な制御を実現しています。 @@ -65,9 +65,9 @@ Control モジュールは、車両のactuatorにシグナルを送信して、 Perception モジュールは、車両の周囲を検知し、障害物を識別しています。 Perception モジュールは、以下のタスクを実行します。 -* センサーデータの収集 -* データの処理とフィルタリング -* 障害物の検出と分類 +- センサーデータの収集 +- データの処理とフィルタリング +- 障害物の検出と分類 Perception モジュールは、レーダー、カメラ、LIDAR などのセンサーからのデータを処理して、車両の周囲の正確な地図を作成しています。この情報は、衝突回避や障害物回避のために使用されています。 @@ -75,9 +75,9 @@ Perception モジュールは、レーダー、カメラ、LIDAR などのセン Localization モジュールは、車両の自車位置と姿勢を決定しています。 Localization モジュールは、以下のタスクを実行します。 -* センサーデータの収集 -* データの処理とフィルタリング -* 自車位置と姿勢の推定 +- センサーデータの収集 +- データの処理とフィルタリング +- 自車位置と姿勢の推定 Localization モジュールは、GPS、IMU、車輪速度センサーなどのセンサーからのデータを処理して、車両の自車位置を正確に特定しています。この情報は、経路プランニングや障害物回避のために使用されています。 @@ -85,10 +85,10 @@ Localization モジュールは、GPS、IMU、車輪速度センサーなどの Health Monitoring モジュールは、システムのヘルス状態を監視しています。 Health Monitoring モジュールは、以下のタスクを実行します。 -* センサーの健康状態の監視 -* データの健全性のチェック -* 障害の検出 -* 復旧メカニズムの起動 +- センサーの健康状態の監視 +- データの健全性のチェック +- 障害の検出 +- 復旧メカニズムの起動 Health Monitoring モジュールは、システムの健全性を確保し、障害が発生した場合に適切な措置を講じています。このモジュールは、システムの信頼性と安全性を向上させています。 @@ -96,10 +96,10 @@ Health Monitoring モジュールは、システムの健全性を確保し、 Safety モジュールは、システムの安全性を確保しています。 Safety モジュールは、以下のタスクを実行します。 -* 障害物逸脱量の監視 -* 加速度逸脱量の監視 -* 速度逸脱量の監視 -* システムのシャットダウン +- 障害物逸脱量の監視 +- 加速度逸脱量の監視 +- 速度逸脱量の監視 +- システムのシャットダウン Safety モジュールは、システムの安全パラメータを監視し、逸脱量が許容範囲を超えた場合にシステムをシャットダウンしています。このモジュールは、乗客と周囲の安全を確保しています。 @@ -107,19 +107,19 @@ Safety モジュールは、システムの安全パラメータを監視し、 Autoware は、オープンソースの自動運転ソフトウェアプラットフォームです。 Autoware は、以下のモジュールを含むコンポーネントベースのアーキテクチャを採用しています。 -* Planning -* Motion Planning -* Control -* Perception -* Localization -* Health Monitoring -* Safety +- Planning +- Motion Planning +- Control +- Perception +- Localization +- Health Monitoring +- Safety Autoware は、自動運転車両の開発を加速化するために設計されており、用途の広い柔軟なプラットフォームを提供しています。 -| 名称 | タイプ | 説明 | -| --------------------- | ------------------------------------- | ----------------------------------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | Drivingを実行可能かつ衝突のない生成された軌跡 | +| 名称 | タイプ | 説明 | +| --------------------- | ------------------------------------- | --------------------------------------------- | +| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | Drivingを実行可能かつ衝突のない生成された軌跡 | ## アルゴリズム @@ -184,4 +184,3 @@ TODO ## デバッグ方法 TODO - diff --git a/planning/sampling_based_planner/autoware_sampler_common/README.md b/planning/sampling_based_planner/autoware_sampler_common/README.md index 7a77d84b105e2..78912bb888e98 100644 --- a/planning/sampling_based_planner/autoware_sampler_common/README.md +++ b/planning/sampling_based_planner/autoware_sampler_common/README.md @@ -2,4 +2,3 @@ Samplerベースのプランナーの共通関数です。 パスや軌跡、強く柔らかい制約、カルテシアンフレームとフロネフレームの変換を表現するためのクラスが含まれます。 - diff --git a/sensing/autoware_gnss_poser/README.md b/sensing/autoware_gnss_poser/README.md index 7f1a682a5add1..9c15495429bad 100644 --- a/sensing/autoware_gnss_poser/README.md +++ b/sensing/autoware_gnss_poser/README.md @@ -15,10 +15,10 @@ ### 入力 -| 名称 | タイプ | 説明 | -|---|---|---| -| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectorInfo` | 地図投影情報 | -| `~/input/fix` | `sensor_msgs::msg::NavSatFix` | GNSS状態メッセージ | +| 名称 | タイプ | 説明 | +| ------------------------------ | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectorInfo` | 地図投影情報 | +| `~/input/fix` | `sensor_msgs::msg::NavSatFix` | GNSS状態メッセージ | | `~/input/autoware_orientation` | `autoware_sensing_msgs::msg::GnssInsOrientationStamped` | 姿勢 [詳細はこちら](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_sensing_msgs) | ### アウトプット @@ -56,11 +56,11 @@ Path Planning モジュールの制御フローは次のとおりです。 5. 加減速軌道を計算します。 6. 車輌を制御します。 -| 名前 | タイプ | 説明 | -| ------------------------ | ----------------------------------------------- | ------------------------------------------------------------ | -| `~/output/pose` | `geometry_msgs::msg::PoseStamped` | GNSS センシングデータから計算された自車位置 | +| 名前 | タイプ | 説明 | +| ------------------------ | ----------------------------------------------- | ------------------------------------------------------------- | +| `~/output/pose` | `geometry_msgs::msg::PoseStamped` | GNSS センシングデータから計算された自車位置 | | `~/output/gnss_pose_cov` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSS センシングデータから計算された、共分散行列を含む自車位置 | -| `~/output/gnss_fixed` | `tier4_debug_msgs::msg::BoolStamped` | GNSS 固定ステータス | +| `~/output/gnss_fixed` | `tier4_debug_msgs::msg::BoolStamped` | GNSS 固定ステータス | ## パラメータ @@ -77,4 +77,3 @@ Path Planning モジュールの制御フローは次のとおりです。 ## (オプション) 参照/外部リンク ## (オプション) 将来の拡張/未実装部分 - diff --git a/sensing/autoware_image_diagnostics/README.md b/sensing/autoware_image_diagnostics/README.md index 5f707d448a66e..9234fd0efacec 100644 --- a/sensing/autoware_image_diagnostics/README.md +++ b/sensing/autoware_image_diagnostics/README.md @@ -22,9 +22,9 @@ ### 入力 -| 名称 | 型 | 説明 | -| ----------------- | ------------------------- | ----------- | -| `input/raw_image` | `sensor_msgs::msg::Image` | 生画像 | +| 名称 | 型 | 説明 | +| ----------------- | ------------------------- | ------ | +| `input/raw_image` | `sensor_msgs::msg::Image` | 生画像 | ### 出力 @@ -131,13 +131,13 @@ Autowareは継続的に開発されており、以下を含む機能の向上が - より堅牢な障害物検出 - より効率的な経路計画 -| 名前 | タイプ | 説明 | -| ----------------------------------- | --------------------------------------- | ------------------------------------- | -| `image_diag/debug/gray_image` | `sensor_msgs::msg::Image` | グレー画像 | -| `image_diag/debug/dft_image` | `sensor_msgs::msg::Image` | 離散フーリエ変換画像 | -| `image_diag/debug/diag_block_image` | `sensor_msgs::msg::Image` | 各ブロック状態のカラー化 | -| `image_diag/image_state_diag` | `tier4_debug_msgs::msg::Int32Stamped` | 画像診断のステータス値 | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断 | +| 名前 | タイプ | 説明 | +| ----------------------------------- | --------------------------------------- | ------------------------ | +| `image_diag/debug/gray_image` | `sensor_msgs::msg::Image` | グレー画像 | +| `image_diag/debug/dft_image` | `sensor_msgs::msg::Image` | 離散フーリエ変換画像 | +| `image_diag/debug/diag_block_image` | `sensor_msgs::msg::Image` | 各ブロック状態のカラー化 | +| `image_diag/image_state_diag` | `tier4_debug_msgs::msg::Int32Stamped` | 画像診断のステータス値 | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断 | ## パラメータ @@ -156,4 +156,3 @@ Autowareは継続的に開発されており、以下を含む機能の向上が - 降雨や埃などの、より具体的な画像の歪み / 遮蔽タイプを検討する。 - 光学的な観点からの霧や雨による視界の悪化を検討する - diff --git a/sensing/autoware_image_transport_decompressor/README.md b/sensing/autoware_image_transport_decompressor/README.md index 6f7894bd0d756..83fa60eaddeb5 100644 --- a/sensing/autoware_image_transport_decompressor/README.md +++ b/sensing/autoware_image_transport_decompressor/README.md @@ -10,8 +10,8 @@ ### 入力 -| 名前 | 型 | 説明 | -| -------------------------- | ----------------------------------- | ---------------- | +| 名前 | 型 | 説明 | +| -------------------------- | ----------------------------------- | -------- | | `~/input/compressed_image` | `sensor_msgs::msg::CompressedImage` | 圧縮画像 | **自動運転ソフトウェアドキュメント** @@ -37,7 +37,7 @@ Planningコンポーネントは、以下を含むさまざまなアルゴリズムを使用します。 - Dijkstraアルゴリズム -- A*アルゴリズム +- A\*アルゴリズム - Velocity-Obstacle法 - モデル予測制御 @@ -74,9 +74,9 @@ Planningコンポーネントのテストと検証は、以下の方法を使用 - 実車両テスト - 速度逸脱量、加速度逸脱量の監視 -| Name | Type | Description | -| ------------------------ | ---------------------------- | ------------------------------------ | -| `~/output/raw_image` | `sensor_msgs::msg::Image` | 非圧縮画像 | +| Name | Type | Description | +| -------------------- | ------------------------- | ----------- | +| `~/output/raw_image` | `sensor_msgs::msg::Image` | 非圧縮画像 | ## パラメータ @@ -91,4 +91,3 @@ Planningコンポーネントのテストと検証は、以下の方法を使用 ## (任意) 参照 / 外部リンク ## (任意) 将来の拡張 / 未実装部分 - diff --git a/sensing/autoware_imu_corrector/README.md b/sensing/autoware_imu_corrector/README.md index b7a2b57c15505..d07bcd56fd47b 100644 --- a/sensing/autoware_imu_corrector/README.md +++ b/sensing/autoware_imu_corrector/README.md @@ -21,8 +21,8 @@ $$ ### 入力 -| 名称 | 型 | 説明 | -| -------- | ----------------------- | ------------ | +| 名称 | 型 | 説明 | +| -------- | ----------------------- | ----------------- | | `~input` | `sensor_msgs::msg::Imu` | 未処理のIMUデータ | ### 自動運転ソフトウェアのドキュメント @@ -63,21 +63,21 @@ Planning コンポーネントは、Autoware の自動運転システムの重 アクターコンポーネントは、制御コンポーネントが生成した制御信号に基づいて車両の作動器を制御する制御コンポーネントのサブコンポーネントです。ステアリングコントローラー、アクセルコントローラー、ブレーキコントローラーなどがあります。 -| 名称 | タイプ | 説明 | -|---|---|---| +| 名称 | タイプ | 説明 | +| --------- | ----------------------- | ----------------- | | `~output` | `sensor_msgs::msg::Imu` | 補正済みIMUデータ | ### パラメータ -| 名称 | タイプ | 説明 | -| --------------------- | ------ | -------------------------------------------- | -| `angular_velocity_offset_x` | double | imu_linkにおけるロール角速度オフセット [rad/s] | -| `angular_velocity_offset_y` | double | imu_linkにおけるピッチ角速度オフセット [rad/s] | -| `angular_velocity_offset_z` | double | imu_linkにおけるヨー角速度オフセット [rad/s] | +| 名称 | タイプ | 説明 | +| ---------------------------- | ------ | ---------------------------------------------- | +| `angular_velocity_offset_x` | double | imu_linkにおけるロール角速度オフセット [rad/s] | +| `angular_velocity_offset_y` | double | imu_linkにおけるピッチ角速度オフセット [rad/s] | +| `angular_velocity_offset_z` | double | imu_linkにおけるヨー角速度オフセット [rad/s] | | `angular_velocity_stddev_xx` | double | imu_linkにおけるロール角速度の標準偏差 [rad/s] | | `angular_velocity_stddev_yy` | double | imu_linkにおけるピッチ角速度の標準偏差 [rad/s] | -| `angular_velocity_stddev_zz` | double | imu_linkにおけるヨー角速度の標準偏差 [rad/s] | -| `acceleration_stddev` | double | imu_linkにおける加速度の標準偏差 [m/s^2] | +| `angular_velocity_stddev_zz` | double | imu_linkにおけるヨー角速度の標準偏差 [rad/s] | +| `acceleration_stddev` | double | imu_linkにおける加速度の標準偏差 [m/s^2] | ## gyro_bias_estimator @@ -87,10 +87,10 @@ Planning コンポーネントは、Autoware の自動運転システムの重 ### 入力 -| 名称 | 種類 | 説明 | -| ----------------- | ----------------------------------------------- | --------- | +| 名称 | 種類 | 説明 | +| ----------------- | ----------------------------------------------- | --------------------- | | `~/input/imu_raw` | `sensor_msgs::msg::Imu` | **未加工** IMU データ | -| `~/input/pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | NDT の自車位置 | +| `~/input/pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | NDT の自車位置 | 入力ポーズは十分に正確であると仮定されています。例えば、NDTを使用する場合、NDTは適切に収束していると仮定します。 @@ -100,18 +100,17 @@ Planning コンポーネントは、Autoware の自動運転システムの重 ### 出力 -| 名称 | タイプ | 説明 | -| -------------------- | ------------------------------------ | ----------------------------- | +| 名称 | タイプ | 説明 | +| -------------------- | ------------------------------------ | ---------------------------------- | | `~/output/gyro_bias` | `geometry_msgs::msg::Vector3Stamped` | ジャイロスコープのバイアス [rad/s] | ### パラメータ このノードは、`imu_corrector.param.yaml`の`angular_velocity_offset_x`、`angular_velocity_offset_y`、`angular_velocity_offset_z`パラメータも使用します。 -| 名前 | 型 | 説明 | -| -------------------------------------| ------ | -------------------------------------------------------------------------------------------------------- | -| `gyro_bias_threshold` | double | ジャイロスコープのバイアスの閾値 [rad/s] | -| `timer_callback_interval_sec` | double | タイマコールバック関数の秒数 [秒] | -| `diagnostics_updater_interval_sec` | double | Diagnostics updater の周期 [秒] | -| `straight_motion_ang_vel_upper_limit` | double | 直線運動と見なさない、ヨー角速度の上限 [rad/s] | - +| 名前 | 型 | 説明 | +| ------------------------------------- | ------ | ---------------------------------------------- | +| `gyro_bias_threshold` | double | ジャイロスコープのバイアスの閾値 [rad/s] | +| `timer_callback_interval_sec` | double | タイマコールバック関数の秒数 [秒] | +| `diagnostics_updater_interval_sec` | double | Diagnostics updater の周期 [秒] | +| `straight_motion_ang_vel_upper_limit` | double | 直線運動と見なさない、ヨー角速度の上限 [rad/s] | diff --git a/sensing/autoware_pcl_extensions/README.md b/sensing/autoware_pcl_extensions/README.md index 66dac20d43eac..49083fa16686c 100644 --- a/sensing/autoware_pcl_extensions/README.md +++ b/sensing/autoware_pcl_extensions/README.md @@ -33,4 +33,3 @@ [1] ## (省略可)将来の拡張 / 実装されていない部分 - diff --git a/sensing/autoware_pointcloud_preprocessor/README.md b/sensing/autoware_pointcloud_preprocessor/README.md index d945e59f88e85..abd76f9640e8b 100644 --- a/sensing/autoware_pointcloud_preprocessor/README.md +++ b/sensing/autoware_pointcloud_preprocessor/README.md @@ -14,25 +14,25 @@ 各フィルタのアルゴリズムの詳細については、以下のリンクを参照してください。 -| フィルター名 | 説明 | 詳細 | -| ----------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------- | +| フィルター名 | 説明 | 詳細 | +| ----------------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------- | | concatenate_data | 複数の点群を購読し、それらを 1 つの点群に連結します。 | [link](docs/concatenate-data.md) | -| crop_box_filter | 1 回の走査中に自車位置の移動によって生じた点群の歪みを補正します。 | [link](docs/crop-box-filter.md) | -| distortion_corrector | 1 回の走査中に自車位置の移動によって生じた点群の歪みを補正します。 | [link](docs/distortion-corrector.md) | -| downsample_filter | 入力点群をダウンサンプリングします。 | [link](docs/downsample-filter.md) | +| crop_box_filter | 1 回の走査中に自車位置の移動によって生じた点群の歪みを補正します。 | [link](docs/crop-box-filter.md) | +| distortion_corrector | 1 回の走査中に自車位置の移動によって生じた点群の歪みを補正します。 | [link](docs/distortion-corrector.md) | +| downsample_filter | 入力点群をダウンサンプリングします。 | [link](docs/downsample-filter.md) | | outlier_filter | ハードウェアの問題、雨滴、小さな昆虫によって引き起こされるノイズとして点を削除します。 | [link](docs/outlier-filter.md) | -| passthrough_filter | 与えられたフィールド (例: x、y、z、強度) の範囲外にある点を削除します。 | [link](docs/passthrough-filter.md) | -| pointcloud_accumulator | 一定時間点群を累積します。 | [link](docs/pointcloud-accumulator.md) | +| passthrough_filter | 与えられたフィールド (例: x、y、z、強度) の範囲外にある点を削除します。 | [link](docs/passthrough-filter.md) | +| pointcloud_accumulator | 一定時間点群を累積します。 | [link](docs/pointcloud-accumulator.md) | | vector_map_filter | ベクトルマップを使用して、車線の外側の点を削除します。 | [link](docs/vector-map-filter.md) | -| vector_map_inside_area_filter | 指定されたタイプのパラメーターによって、ベクトルマップ領域内の点を削除します。 | [link](docs/vector-map-inside-area-filter.md) | +| vector_map_inside_area_filter | 指定されたタイプのパラメーターによって、ベクトルマップ領域内の点を削除します。 | [link](docs/vector-map-inside-area-filter.md) | ## 入力 / 出力 ### 入力 -| 名前 | タイプ | 説明 | -| ---------------- | -------------------------------- | ----------------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点群 | +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------------- | -------------------- | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点群 | | `~/input/indices` | `pcl_msgs::msg::Indices` | 基準点のインデックス | ### 出力 @@ -63,7 +63,7 @@ Planningコンポーネントは、次の機能を提供します。 Planningコンポーネントでは、次のアルゴリズムを使用しています。 -- **A*探索**: 最適経路の探索に使用されます。 +- **A\*探索**: 最適経路の探索に使用されます。 - **Dijkstraのアルゴリズム**: 最短経路の探索に使用されます。 - **動的計画法**: 最適化された経路の生成に使用されます。 @@ -101,22 +101,22 @@ Planningコンポーネントを使用する際は、以下の注意事項を考 - Planningコンポーネントは、周囲環境が正確にマップされている場合に最も効果的です。 - Planningコンポーネントは、悪天候や複雑な交通状況では十分に機能しない場合があります。 -| 名称 | タイプ | 説明 | -|---|---|---| +| 名称 | タイプ | 説明 | +| ----------------- | ------------------------------- | ------------------------ | | `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリング済みの点群 | ## パラメータ ### ノードパラメータ -| 名称 | タイプ | デフォルト値 | 説明 | -|---|---|---|---| -| `input_frame` | 文字列 | "" | 入力フレームID | -| `output_frame` | 文字列 | "" | 出力フレームID | -| `max_queue_size` | 整数 | 5 | 入力/出力トピックの最大キューサイズ | -| `use_indices` | ブール | false | ポイントクラウドインデックスを使用するフラグ | -| `latched_indices` | ブール | false | ポイントクラウドインデックスをラッチするフラグ | -| `approximate_sync` | ブール | false | 近似同期オプションを使用するフラグ | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------------ | ------ | ------------ | ---------------------------------------------- | +| `input_frame` | 文字列 | "" | 入力フレームID | +| `output_frame` | 文字列 | "" | 出力フレームID | +| `max_queue_size` | 整数 | 5 | 入力/出力トピックの最大キューサイズ | +| `use_indices` | ブール | false | ポイントクラウドインデックスを使用するフラグ | +| `latched_indices` | ブール | false | ポイントクラウドインデックスをラッチするフラグ | +| `approximate_sync` | ブール | false | 近似同期オプションを使用するフラグ | ## 想定事項と既知の制限事項 @@ -156,4 +156,4 @@ Autoware を実行すると、以下の ROS 2 トピックを購読すること [1] -## (任意)今後の拡張/未実装部分 \ No newline at end of file +## (任意)今後の拡張/未実装部分 diff --git a/sensing/autoware_radar_scan_to_pointcloud2/README.md b/sensing/autoware_radar_scan_to_pointcloud2/README.md index 22fb2c39a4a7f..cae787deb4e78 100644 --- a/sensing/autoware_radar_scan_to_pointcloud2/README.md +++ b/sensing/autoware_radar_scan_to_pointcloud2/README.md @@ -8,28 +8,26 @@ ### 入力トピック -| 名 | タイプ | 説明 | -| ----------- | -------------------------- | ----------- | -| input/radar | radar_msgs::msg::RadarScan | RadarScan | +| 名 | タイプ | 説明 | +| ----------- | -------------------------- | --------- | +| input/radar | radar_msgs::msg::RadarScan | RadarScan | ### 出力トピック -| 名前 | 型 | 説明 | -|---|---|---| -| output/amplitude_pointcloud | sensor_msgs::msg::PointCloud2 | 強度が振幅のPointCloud2レーダー点群 | -| output/doppler_pointcloud | sensor_msgs::msg::PointCloud2 | 強度がドップラー速度のPointCloud2レーダー点群 | +| 名前 | 型 | 説明 | +| --------------------------- | ----------------------------- | --------------------------------------------- | +| output/amplitude_pointcloud | sensor_msgs::msg::PointCloud2 | 強度が振幅のPointCloud2レーダー点群 | +| output/doppler_pointcloud | sensor_msgs::msg::PointCloud2 | 強度がドップラー速度のPointCloud2レーダー点群 | ### パラメータ -| 名称 | タイプ | 説明 | -|---|---|---| -| publish_amplitude_pointcloud | bool | レーダーの点群の強度を振幅で公開するかどうか。初期値は `true` です。 | -| publish_doppler_pointcloud | bool | レーダーの点群の強度をドップラー速度で公開するかどうか。初期値は `false` です。 | +| 名称 | タイプ | 説明 | +| ---------------------------- | ------ | ------------------------------------------------------------------------------- | +| publish_amplitude_pointcloud | bool | レーダーの点群の強度を振幅で公開するかどうか。初期値は `true` です。 | +| publish_doppler_pointcloud | bool | レーダーの点群の強度をドップラー速度で公開するかどうか。初期値は `false` です。 | ### 起動方法 - ```sh ros2 launch autoware_radar_scan_to_pointcloud2 radar_scan_to_pointcloud2.launch.xml ``` - diff --git a/sensing/autoware_radar_static_pointcloud_filter/README.md b/sensing/autoware_radar_static_pointcloud_filter/README.md index db5dd880c7d4b..458e0952bbd14 100644 --- a/sensing/autoware_radar_static_pointcloud_filter/README.md +++ b/sensing/autoware_radar_static_pointcloud_filter/README.md @@ -7,27 +7,26 @@ Doppler速度と自車運動を使用して、静的および動的なレーダ ### 入力トピック -| 名称 | 型 | 説明 | -| -------------- | -------------------------- | -------------------------- | -| input/radar | radar_msgs::msg::RadarScan | RadarScan | +| 名称 | 型 | 説明 | +| -------------- | -------------------------- | ---------------------- | +| input/radar | radar_msgs::msg::RadarScan | RadarScan | | input/odometry | nav_msgs::msg::Odometry | 自車オドメトリトピック | ### 出力トピック -| 名称 | タイプ | 説明 | -| ------------------------- | -------------------------- | -------------------------------- | -| output/static_radar_scan | radar_msgs::msg::RadarScan | 静的レーダーポイントクラウド | -| output/dynamic_radar_scan | radar_msgs::msg::RadarScan | 動的レーダーポイントクラウド | +| 名称 | タイプ | 説明 | +| ------------------------- | -------------------------- | ---------------------------- | +| output/static_radar_scan | radar_msgs::msg::RadarScan | 静的レーダーポイントクラウド | +| output/dynamic_radar_scan | radar_msgs::msg::RadarScan | 動的レーダーポイントクラウド | ### パラメータ -| 名前 | タイプ | 説明 | -| ------------------- | ------ | ---------------------------------------------------- | +| 名前 | タイプ | 説明 | +| ------------------- | ------ | ------------------------------------------ | | doppler_velocity_sd | double | レーダー・ドップラー速度の標準偏差。 [m/s] | ### 起動方法 - ```sh ros2 launch autoware_radar_static_pointcloud_filter radar_static_pointcloud_filter.launch.xml ``` @@ -35,4 +34,3 @@ ros2 launch autoware_radar_static_pointcloud_filter radar_static_pointcloud_filt ### アルゴリズム ![algorithm](docs/radar_static_pointcloud_filter.drawio.svg) - diff --git a/sensing/autoware_radar_threshold_filter/README.md b/sensing/autoware_radar_threshold_filter/README.md index 5472671097939..100494b025c1a 100644 --- a/sensing/autoware_radar_threshold_filter/README.md +++ b/sensing/autoware_radar_threshold_filter/README.md @@ -12,39 +12,37 @@ ### 入力トピック -| 名称 | 型 | 説明 | -| ----------- | ---------------------------- | --------------------- | +| 名称 | 型 | 説明 | +| ----------- | ---------------------------- | ---------------------------------- | | input/radar | radar_msgs/msg/RadarScan.msg | レーダー・ポイントクラウド・データ | ### 出力トピック -| Name | Type | 説明 | -| ------------ | ---------------------------- | ------------------------- | +| Name | Type | 説明 | +| ------------ | ---------------------------- | -------------------------------------- | | output/radar | radar_msgs/msg/RadarScan.msg | フィルタされたレーダーポイントクラウド | ### パラメータ - ノードパラメータ -| 名前 | タイプ | 説明 | -| ------------------- | ------ | ----------------------------------------------------------------------------------------------------- | +| 名前 | タイプ | 説明 | +| ------------------- | ------ | ------------------------------------------------------------------------------------------------------- | | is_amplitude_filter | bool | このパラメータが true の場合、振幅フィルタを適用する(`amplitude_min` < 振幅 < `amplitude_max` を公開) | -| amplitude_min | double | [dBm2] | -| amplitude_max | double | [dBm2] | -| is_range_filter | bool | このパラメータが true の場合、レンジフィルタを適用する(`range_min` < 距離 < `range_max` を公開) | -| range_min | double | [m] | -| range_max | double | [m] | -| is_azimuth_filter | bool | このパラメータが true の場合、角度フィルタを適用する(`azimuth_min` < 距離 < `azimuth_max` を公開) | -| azimuth_min | double | [rad] | -| azimuth_max | double | [rad] | -| is_z_filter | bool | このパラメータが true の場合、z 位置フィルタを適用する(`z_min` < z < `z_max` を公開) | -| z_min | double | [m] | -| z_max | double | [m] | +| amplitude_min | double | [dBm2] | +| amplitude_max | double | [dBm2] | +| is_range_filter | bool | このパラメータが true の場合、レンジフィルタを適用する(`range_min` < 距離 < `range_max` を公開) | +| range_min | double | [m] | +| range_max | double | [m] | +| is_azimuth_filter | bool | このパラメータが true の場合、角度フィルタを適用する(`azimuth_min` < 距離 < `azimuth_max` を公開) | +| azimuth_min | double | [rad] | +| azimuth_max | double | [rad] | +| is_z_filter | bool | このパラメータが true の場合、z 位置フィルタを適用する(`z_min` < z < `z_max` を公開) | +| z_min | double | [m] | +| z_max | double | [m] | ### 起動方法 - ```sh ros2 launch autoware_radar_threshold_filter radar_threshold_filter.launch.xml ``` - diff --git a/sensing/autoware_radar_tracks_noise_filter/README.md b/sensing/autoware_radar_tracks_noise_filter/README.md index bc402ce6d35e3..2242ed8b3db2b 100644 --- a/sensing/autoware_radar_tracks_noise_filter/README.md +++ b/sensing/autoware_radar_tracks_noise_filter/README.md @@ -16,8 +16,8 @@ y軸しきい値フィルタでは、レーダートラックのy軸速度が`ve ## 入力 -| Name | Type | Description | -|---|---|---| +| Name | Type | Description | +| ---------------- | -------------------------------- | --------------------------------------- | | `~/input/tracks` | `radar_msgs/msg/RadarTracks.msg` | 3D 検出されたトラック(レーダートラック) | ## 出力 @@ -69,14 +69,13 @@ Autoware Planningコンポーネントに貢献するには、以下のリポジ [https://github.com/AutowareFoundation/autoware/tree/master/ros/planning](https://github.com/AutowareFoundation/autoware/tree/master/ros/planning) -| 名称 | 種類 | 説明 | -| -------------------------- | --------------------------------- | ---------------- | -| `~/output/noise_tracks` | radar_msgs/msg/RadarTracks.msg | ノイズオブジェクト | -| `~/output/filtered_tracks` | radar_msgs/msg/RadarTracks.msg | フィルタ処理されたオブジェクト | +| 名称 | 種類 | 説明 | +| -------------------------- | ------------------------------ | ------------------------------ | +| `~/output/noise_tracks` | radar_msgs/msg/RadarTracks.msg | ノイズオブジェクト | +| `~/output/filtered_tracks` | radar_msgs/msg/RadarTracks.msg | フィルタ処理されたオブジェクト | ## パラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -| :--------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------ | :------------ | -| `velocity_y_threshold` | double | Y軸速度の閾値 [m/s]。レーダーのトラックのY軸速度が`velocity_y_threshold`を超える場合、ノイズオブジェクトとして扱われます。 | 7.0 | - +| 名前 | タイプ | 説明 | デフォルト値 | +| :--------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------- | :----------- | +| `velocity_y_threshold` | double | Y軸速度の閾値 [m/s]。レーダーのトラックのY軸速度が`velocity_y_threshold`を超える場合、ノイズオブジェクトとして扱われます。 | 7.0 | diff --git a/sensing/livox/autoware_livox_tag_filter/README.md b/sensing/livox/autoware_livox_tag_filter/README.md index 84f83a93f0e83..ef7df4280a225 100644 --- a/sensing/livox/autoware_livox_tag_filter/README.md +++ b/sensing/livox/autoware_livox_tag_filter/README.md @@ -14,11 +14,12 @@ ### 入力 -| Name | Type | Description | -|----------------|---------------------------------------------------------|------------------------| -| `~/input` | `sensor_msgs::msg::PointCloud2` | リファレンスポイント | +| Name | Type | Description | +| --------- | ------------------------------- | -------------------- | +| `~/input` | `sensor_msgs::msg::PointCloud2` | リファレンスポイント | ### 出力 + ### Localizerについて このドキュメントでは、AutowareのLocalizerの機能と実装について説明します。Localizerモジュールは、SLAMの結果を出力として受け取り、自車位置と自身の周囲地図を推定します。 @@ -71,35 +72,35 @@ Localizerモジュールの動作を制御するには、次のパラメータ - `vel_range_violation`:速度逸脱量のしきい値です。 - `acc_range_violation`:加速度逸脱量のしきい値です。 -| 名前 | 型 | 説明 | -| ---------- | ------------------------------- | ----------- | +| 名前 | 型 | 説明 | +| ---------- | ------------------------------- | ---------------- | | `~/output` | `sensor_msgs::msg::PointCloud2` | フィルタされた点 | ## パラメータ ### ノードパラメータ -| 名前 | タイプ | 説明 | -| ------------- | --------------- | -------------------------------------- | +| 名前 | タイプ | 説明 | +| ------------- | --------------- | ------------------------------- | | `ignore_tags` | vector | 除外されたタグ (以下の表を参照) | ### タグパラメータ | ビット | 空間的位置に基づく点の特性 | オプション | -| --- | ---------------------------- | ---------- | -| 0~1 | ノーマル | | -| | ノイズの信頼度が高い | | -| | ノイズの信頼度が中程度 | | -| | ノイズの信頼度が低い | | -| 2~3 | 強度の点の特性 | ノーマル | -| | ノイズの信頼度が高い | | -| | ノイズの信頼度が中程度 | | -| | 予約 | | -| 4~5 | 戻り値 | 0を返す | -| | 1を返す | | -| | 2を返す | | -| | 3を返す | | -| 6~7 | 予約 | | +| ------ | -------------------------- | ---------- | +| 0~1 | ノーマル | | +| | ノイズの信頼度が高い | | +| | ノイズの信頼度が中程度 | | +| | ノイズの信頼度が低い | | +| 2~3 | 強度の点の特性 | ノーマル | +| | ノイズの信頼度が高い | | +| | ノイズの信頼度が中程度 | | +| | 予約 | | +| 4~5 | 戻り値 | 0を返す | +| | 1を返す | | +| | 2を返す | | +| | 3を返す | | +| 6~7 | 予約 | | ## 想定 / 既知の制限事項 @@ -112,4 +113,3 @@ Localizerモジュールの動作を制御するには、次のパラメータ [1] ## (任意) 将来の拡張 / 未実装部分 - diff --git a/sensing/vehicle_velocity_converter/README.md b/sensing/vehicle_velocity_converter/README.md index 935510b3a34ed..b4074e9a43c5c 100644 --- a/sensing/vehicle_velocity_converter/README.md +++ b/sensing/vehicle_velocity_converter/README.md @@ -10,8 +10,8 @@ ### 入力 -| 名称 | タイプ | 説明 | -|-----------------|-------------------------------------------|--------------| +| 名称 | タイプ | 説明 | +| ----------------- | ------------------------------------------- | -------- | | `velocity_status` | `autoware_vehicle_msgs::msg::VehicleReport` | 車両速度 | ### 出力 @@ -78,16 +78,15 @@ 詳細については、GitHubリポジトリを参照してください。 -| 名称 | 型 | 説明 | -| ----------------------- | ------------------------------------------------ | -------------------------------------------------- | +| 名称 | 型 | 説明 | +| ----------------------- | ------------------------------------------------ | --------------------------------------------- | | `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | `VehicleReport`から変換した共分散付きツイスト | ## パラメータ -| 名前 | タイプ | 説明 | -| ---------------------------- | ------ | --------------------------------------- | +| 名前 | タイプ | 説明 | +| ---------------------------- | ------ | ------------------------------- | | `speed_scale_factor` | double | 速度スケール係数(理想値: 1.0) | -| `frame_id` | string | 出力メッセージのフレーム ID | -| `velocity_stddev_xx` | double | vx の標準偏差 | -| `angular_velocity_stddev_zz` | double | ヨーレートの標準偏差 | - +| `frame_id` | string | 出力メッセージのフレーム ID | +| `velocity_stddev_xx` | double | vx の標準偏差 | +| `angular_velocity_stddev_zz` | double | ヨーレートの標準偏差 | diff --git a/simulator/autoware_carla_interface/README.md b/simulator/autoware_carla_interface/README.md index b7dcf8e28c9bc..12e17c7fe32cc 100644 --- a/simulator/autoware_carla_interface/README.md +++ b/simulator/autoware_carla_interface/README.md @@ -86,7 +86,6 @@ ### ビルド - ```bash colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release ``` @@ -95,7 +94,6 @@ colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release 1. carlaを実行し、マップを変更し、必要に応じてオブジェクトを生成する - ```bash cd CARLA ./CarlaUE4.sh -prefernvidia -quality-level=Low -RenderOffScreen @@ -104,10 +102,11 @@ colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release ## 2. rosノードの実行 ```bash -$ roslaunch autoware ai_node.launch +roslaunch autoware ai_node.launch ``` `Autoware`を起動すると、以下のノードが実行されます。 + - `Planning` コンポーネント - `localization` コンポーネント - `visualization` コンポーネント @@ -152,10 +151,9 @@ $ roslaunch autoware ai_node.launch /path_offset ``` - - ```bash - ros2 launch autoware_launch e2e_simulator.launch.xml map_path:=$HOME/autoware_map/Town01 vehicle_model:=sample_vehicle sensor_model:=awsim_sensor_kit simulator_type:=carla carla_map:=Town01 - ``` +```bash +ros2 launch autoware_launch e2e_simulator.launch.xml map_path:=$HOME/autoware_map/Town01 vehicle_model:=sample_vehicle sensor_model:=awsim_sensor_kit simulator_type:=carla carla_map:=Town01 +``` ### 内部メカニズム / アルゴリズム @@ -169,29 +167,29 @@ Autowareからの自動運転車の指令は、`autoware_raw_vehicle_cmd_convert すべての主要パラメータは、`autoware_carla_interface.launch.xml`で設定できます。 -| 名称 | タイプ | デフォルト値 | 説明 | -| -------------------------- | ------ | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `host` | 文字列 | "localhost" | CARLA サーバーのホスト名 | -| `port` | 整数 | "2000" | CARLA サーバーのポート番号 | -| `timeout` | 整数 | 20 | CARLA クライアントのタイムアウト | -| `ego_vehicle_role_name` | 文字列 | "ego_vehicle" | 自車ロールの名称 | -| `vehicle_type` | 文字列 | "vehicle.toyota.prius" | スポーンさせる車両のブループリント ID。車両のブループリント ID は [CARLA ブループリント ID](https://carla.readthedocs.io/en/latest/catalogue_vehicles/) で見つけることができる | -| `spawn_point` | 文字列 | なし | 自車をスポーンさせる座標(なしの場合はランダム)。形式 = [x, y, z, roll, pitch, yaw] | -| `carla_map` | 文字列 | "Town01" | CARLA にロードするマップの名称 | -| `sync_mode` | ブール | True | CARLA に同期モードを設定するためのブールフラグ | -| `fixed_delta_seconds` | double | 0.05 | シミュレーションのタイムステップ(クライアント FPS に関連付けられている) | -| `objects_definition_file` | 文字列 | "$(find-pkg-share autoware_carla_interface)/objects.json" | CARLA でセンサーをスポーンするために使用されるセンサーパラメーターファイル | -| `use_traffic_manager` | ブール | True | CARLA にトラフィックマネージャーを設定するためのブールフラグ | -| `max_real_delta_seconds` | double | 0.05 | `fixed_delta_seconds` よりもシミュレーション速度を制限するためのパラメーター | -| `config_file` | 文字列 | "$(find-pkg-share autoware_carla_interface)/raw_vehicle_cmd_converter.param.yaml" | `autoware_raw_vehicle_cmd_converter` で使用される制御マッピングファイル。現在の制御は CARLA の `vehicle.toyota.prius` ブループリント ID に基づいてキャリブレーションされている。車両タイプを変更する場合は再キャリブレーションが必要になる可能性がある | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------------------- | ------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `host` | 文字列 | "localhost" | CARLA サーバーのホスト名 | +| `port` | 整数 | "2000" | CARLA サーバーのポート番号 | +| `timeout` | 整数 | 20 | CARLA クライアントのタイムアウト | +| `ego_vehicle_role_name` | 文字列 | "ego_vehicle" | 自車ロールの名称 | +| `vehicle_type` | 文字列 | "vehicle.toyota.prius" | スポーンさせる車両のブループリント ID。車両のブループリント ID は [CARLA ブループリント ID](https://carla.readthedocs.io/en/latest/catalogue_vehicles/) で見つけることができる | +| `spawn_point` | 文字列 | なし | 自車をスポーンさせる座標(なしの場合はランダム)。形式 = [x, y, z, roll, pitch, yaw] | +| `carla_map` | 文字列 | "Town01" | CARLA にロードするマップの名称 | +| `sync_mode` | ブール | True | CARLA に同期モードを設定するためのブールフラグ | +| `fixed_delta_seconds` | double | 0.05 | シミュレーションのタイムステップ(クライアント FPS に関連付けられている) | +| `objects_definition_file` | 文字列 | "$(find-pkg-share autoware_carla_interface)/objects.json" | CARLA でセンサーをスポーンするために使用されるセンサーパラメーターファイル | +| `use_traffic_manager` | ブール | True | CARLA にトラフィックマネージャーを設定するためのブールフラグ | +| `max_real_delta_seconds` | double | 0.05 | `fixed_delta_seconds` よりもシミュレーション速度を制限するためのパラメーター | +| `config_file` | 文字列 | "$(find-pkg-share autoware_carla_interface)/raw_vehicle_cmd_converter.param.yaml" | `autoware_raw_vehicle_cmd_converter` で使用される制御マッピングファイル。現在の制御は CARLA の `vehicle.toyota.prius` ブループリント ID に基づいてキャリブレーションされている。車両タイプを変更する場合は再キャリブレーションが必要になる可能性がある | ### センサーの構成可能なパラメータ 以下のパラメータは `carla_ros.py` で構成できます。 -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------------------- | ---- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `self.sensor_frequencies` | dict | {"top": 11, "left": 11, "right": 11, "camera": 11, "imu": 50, "status": 50, "pose": 2} | (line 67) 前回の公開以降の時間間隔を計算し、この間隔が、所定の頻度を超過しないために必要な最小限度を満たしているかどうかを確認します。これは ROS の公開頻度のみ影響し、CARLA のセンサーの更新には影響しません。 | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------------------- | ------ | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `self.sensor_frequencies` | dict | {"top": 11, "left": 11, "right": 11, "camera": 11, "imu": 50, "status": 50, "pose": 2} | (line 67) 前回の公開以降の時間間隔を計算し、この間隔が、所定の頻度を超過しないために必要な最小限度を満たしているかどうかを確認します。これは ROS の公開頻度のみ影響し、CARLA のセンサーの更新には影響しません。 | - CARLAセンサーパラメータは`config/objects.json`で設定できます。 - CARLAで設定可能なパラメータの詳細については、[Carla Ref Sensor](https://carla.readthedocs.io/en/latest/ref_sensors/)で説明されています。 @@ -202,7 +200,6 @@ Autowareからの自動運転車の指令は、`autoware_raw_vehicle_cmd_convert 1. **クライアント接続**: - ```python client = carla.Client(self.local_host, self.port) client.set_timeout(self.timeout) @@ -212,7 +209,6 @@ Autowareからの自動運転車の指令は、`autoware_raw_vehicle_cmd_convert `carla_map`パラメータに従って、マップをCARLAワールドにロード。 - ```python client.load_world(self.map_name) self.world = client.get_world() @@ -222,7 +218,6 @@ Autowareからの自動運転車の指令は、`autoware_raw_vehicle_cmd_convert 車両は `vehicle_type`, `spawn_point`, `agent_role_name` のパラメーターに従って生成されます。 - ```python spawn_point = carla.Transform() point_items = self.spawn_point.split(",") @@ -266,4 +261,3 @@ Carla シミュレータ ([Carla Lanelet2 Maps](https://bitbucket.org/carla-simu - センサーは現在、Autoware センサーキットと同じ場所に配置されるように自動的に設定されていません。現在の回避策は、各センサーの新しいフレームを (0, 0, 0, 0, 0, 0) 座標 (base_link に相対的) で作成し、各センサーを新しいフレームにアタッチすることです (`autoware_carla_interface.launch.xml` 行 28)。この回避策は非常に限定的で制約があります。センサーキットが変更されると、センサーの場所は正しくアタッチされません。 - 信号認識。 - 現在、CARLA の HDmap には、Autoware が信号認識を行うために必要な信号に関する情報がありません。 - diff --git a/simulator/dummy_perception_publisher/README.md b/simulator/dummy_perception_publisher/README.md index db8e3bedbc40c..fdfcd2d444308 100644 --- a/simulator/dummy_perception_publisher/README.md +++ b/simulator/dummy_perception_publisher/README.md @@ -10,10 +10,10 @@ ### 入力 -| 名称 | タイプ | 説明 | -| -------------- | ---------------------------------------- | ----------------------------------------- | -| `/tf` | `tf2_msgs/TFMessage` | TF (自車位置) | -| `input/object` | `tier4_simulation_msgs::msg::DummyObject` | ダミー検出オブジェクト | +| 名称 | タイプ | 説明 | +| -------------- | ----------------------------------------- | ---------------------- | +| `/tf` | `tf2_msgs/TFMessage` | TF (自車位置) | +| `input/object` | `tier4_simulation_msgs::msg::DummyObject` | ダミー検出オブジェクト | ### 出力 @@ -37,24 +37,24 @@ - 加速度逸脱量 - ヨー逸脱量 -| 名前 | タイプ | 説明 | -| ------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------- | -| `output/dynamic_object` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | ダミー検出オブジェクト | -| `output/points_raw` | `sensor_msgs::msg::PointCloud2` | オブジェクトの点群 | -| `output/debug/ground_truth_objects` | `autoware_perception_msgs::msg::TrackedObjects` | グランドトゥルースオブジェクト | +| 名前 | タイプ | 説明 | +| ----------------------------------- | -------------------------------------------------------- | ------------------------------ | +| `output/dynamic_object` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | ダミー検出オブジェクト | +| `output/points_raw` | `sensor_msgs::msg::PointCloud2` | オブジェクトの点群 | +| `output/debug/ground_truth_objects` | `autoware_perception_msgs::msg::TrackedObjects` | グランドトゥルースオブジェクト | ## パラメータ -| 名前 | タイプ | デフォルト値 | 説明 | -| --------------------------- | ------ | ------------- | ------------------------------------------- | -| `visible_range` | double | 100.0 | センサー視界範囲 [m] | -| `detection_successful_rate` | double | 0.8 | センサー検出率。(最小値) 0.0 - 1.0(最大値) | -| `enable_ray_tracing` | bool | true | True の場合、レイ追跡を使用する | -| `use_object_recognition` | bool | true | True の場合、物体トピックを公開する | -| `use_base_link_z` | bool | true | True の場合、ノードはエゴ base_link の Z 座標を使用する | -| `publish_ground_truth` | bool | false | True の場合、グランドトゥルースオブジェクトを公開する | -| `use_fixed_random_seed` | bool | false | True の場合、固定ランダムシードを使用する | -| `random_seed` | int | 0 | ランダムシード | +| 名前 | タイプ | デフォルト値 | 説明 | +| --------------------------- | ------ | ------------ | ------------------------------------------------------- | +| `visible_range` | double | 100.0 | センサー視界範囲 [m] | +| `detection_successful_rate` | double | 0.8 | センサー検出率。(最小値) 0.0 - 1.0(最大値) | +| `enable_ray_tracing` | bool | true | True の場合、レイ追跡を使用する | +| `use_object_recognition` | bool | true | True の場合、物体トピックを公開する | +| `use_base_link_z` | bool | true | True の場合、ノードはエゴ base_link の Z 座標を使用する | +| `publish_ground_truth` | bool | false | True の場合、グランドトゥルースオブジェクトを公開する | +| `use_fixed_random_seed` | bool | false | True の場合、固定ランダムシードを使用する | +| `random_seed` | int | 0 | ランダムシード | ### Node パラメータ @@ -67,4 +67,3 @@ ## 想定/既知の制限事項 TBD - diff --git a/simulator/fault_injection/README.md b/simulator/fault_injection/README.md index 5d43436131f58..5795b9aa6a5cf 100644 --- a/simulator/fault_injection/README.md +++ b/simulator/fault_injection/README.md @@ -9,7 +9,6 @@ ## テスト - ```bash source install/setup.bash cd fault_injection @@ -22,8 +21,8 @@ launch_test test/test_fault_injection_node.test.py ### 入力 -| 名称 | タイプ | 説明 | -| --------------------------- | ---------------------------------------------- | ----------------- | +| 名称 | タイプ | 説明 | +| --------------------------- | ---------------------------------------------- | ------------------------ | | `~/input/simulation_events` | `tier4_simulation_msgs::msg::SimulationEvents` | シミュレーションイベント | ### 出力 @@ -32,21 +31,21 @@ launch_test test/test_fault_injection_node.test.py **目次** -* [はじめに](#はじめに) -* [アーキテクチャ](#アーキテクチャ) - * [Planningコンポーネント](#planningコンポーネント) - * [Controlモジュール](#controlモジュール) -* [インターフェース](#インターフェース) - * [API](#api) - * [パラメータ](#パラメータ) -* [使用方法](#使用方法) - * [インストール](#インストール) - * [設定](#設定) - * [実行](#実行) -* [トラブルシューティング](#トラブルシューティング) - * [一般的な問題](#一般的な問題) - * [高度な問題](#高度な問題) -* [寄稿](#寄稿) +- [はじめに](#はじめに) +- [アーキテクチャ](#アーキテクチャ) + - [Planningコンポーネント](#planningコンポーネント) + - [Controlモジュール](#controlモジュール) +- [インターフェース](#インターフェース) + - [API](#api) + - [パラメータ](#パラメータ) +- [使用方法](#使用方法) + - [インストール](#インストール) + - [設定](#設定) + - [実行](#実行) +- [トラブルシューティング](#トラブルシューティング) + - [一般的な問題](#一般的な問題) + - [高度な問題](#高度な問題) +- [寄稿](#寄稿) **はじめに** @@ -58,16 +57,16 @@ launch_test test/test_fault_injection_node.test.py Planningコンポーネントは、車両の経路を生成します。次のような複数の要素で構成されています。 -* **PathPlanningモジュール:** 車両の経路を生成します。 -* **TrajectoryPlanningモジュール:** PathPlanningモジュールで生成された経路を滑らかな軌跡に変換します。 -* **BehaviorPlanningモジュール:** 障害物回避やレーン維持などの高レベルの挙動を決定します。 +- **PathPlanningモジュール:** 車両の経路を生成します。 +- **TrajectoryPlanningモジュール:** PathPlanningモジュールで生成された経路を滑らかな軌跡に変換します。 +- **BehaviorPlanningモジュール:** 障害物回避やレーン維持などの高レベルの挙動を決定します。 **Controlモジュール** Controlモジュールは、車両の挙動を制御します。次のような複数の要素で構成されています。 -* **LongitudinalControlモジュール:** 車両の速度を制御します。 -* **LateralControlモジュール:** 車両の方向を制御します。 +- **LongitudinalControlモジュール:** 車両の速度を制御します。 +- **LateralControlモジュール:** 車両の方向を制御します。 **インターフェース** @@ -75,20 +74,20 @@ Controlモジュールは、車両の挙動を制御します。次のような Autowareソフトウェアは、次のようなAPIを提供します。 -* **`planning/planning_interface`:** Planningコンポーネントとのインターフェースを提供します。 -* **`control/control_interface`:** Controlモジュールとのインターフェースを提供します。 +- **`planning/planning_interface`:** Planningコンポーネントとのインターフェースを提供します。 +- **`control/control_interface`:** Controlモジュールとのインターフェースを提供します。 **パラメータ** PlanningとControlコンポーネントは、次のような構成可能なパラメータを備えています。 -* **Planningコンポーネント:** - * パス生成パラメータ - * 軌跡生成パラメータ - * 挙動計画パラメータ -* **Controlモジュール:** - * 速度制御パラメータ - * ステアリング制御パラメータ +- **Planningコンポーネント:** + - パス生成パラメータ + - 軌跡生成パラメータ + - 挙動計画パラメータ +- **Controlモジュール:** + - 速度制御パラメータ + - ステアリング制御パラメータ **使用方法** @@ -118,23 +117,23 @@ cd autoware **一般的な問題** -* **`post resampling`の障害:** Planningコンポーネントが経路を生成できない可能性があります。PathPlanningモジュールのパラメータを確認してください。 -* **速度逸脱量の増加:** Controlモジュールが車両の速度を適切に制御できない可能性があります。LongitudinalControlモジュールの速度制御パラメータを確認してください。 -* **加速度逸脱量の増加:** Controlモジュールが車両の方向を適切に制御できない可能性があります。LateralControlモジュールのステアリング制御パラメータを確認してください。 +- **`post resampling`の障害:** Planningコンポーネントが経路を生成できない可能性があります。PathPlanningモジュールのパラメータを確認してください。 +- **速度逸脱量の増加:** Controlモジュールが車両の速度を適切に制御できない可能性があります。LongitudinalControlモジュールの速度制御パラメータを確認してください。 +- **加速度逸脱量の増加:** Controlモジュールが車両の方向を適切に制御できない可能性があります。LateralControlモジュールのステアリング制御パラメータを確認してください。 **高度な問題** -* **自車位置の精度が悪い:** GPSまたはIMUセンサーからのデータが適切でない可能性があります。センサーの校正と設定を確認してください。 -* **障害物の認識が不十分:** センサーからのデータが不完全またはノイズが多い可能性があります。センサーの配置と感度を確認してください。 -* **経路生成の遅延:** Planningコンポーネントが過負荷になっている可能性があります。Planningコンポーネントのリソース消費を確認してください。 +- **自車位置の精度が悪い:** GPSまたはIMUセンサーからのデータが適切でない可能性があります。センサーの校正と設定を確認してください。 +- **障害物の認識が不十分:** センサーからのデータが不完全またはノイズが多い可能性があります。センサーの配置と感度を確認してください。 +- **経路生成の遅延:** Planningコンポーネントが過負荷になっている可能性があります。Planningコンポーネントのリソース消費を確認してください。 **寄稿** Autowareプロジェクトはオープンソースであり、寄稿を歓迎します。詳細については、[寄稿ガイドライン](https://github.com/autowarefoundation/autoware/blob/master/CONTRIBUTING.md)を参照してください。 -| 名称 | タイプ | 説明 | -|--------------|----------------------------------------|------------------| -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | ダミー診断 | +| 名称 | タイプ | 説明 | +| -------------- | --------------------------------------- | ---------- | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | ダミー診断 | ## パラメータ @@ -151,4 +150,3 @@ Autowareプロジェクトはオープンソースであり、寄稿を歓迎し ## 前提条件 / 制限事項 TBD。 - diff --git a/simulator/learning_based_vehicle_model/README.md b/simulator/learning_based_vehicle_model/README.md index 3e35836840bb8..ba9910043f179 100644 --- a/simulator/learning_based_vehicle_model/README.md +++ b/simulator/learning_based_vehicle_model/README.md @@ -26,7 +26,6 @@ このパッケージを使用するには、`python3`と`pybind11`をインストールする必要があります。Pythonサブモデルの唯一の仮定は、それらのインタフェースです。 - ```python class PythonSubmodelInterface: @@ -151,7 +150,6 @@ class PythonSubmodelInterface: 最初にモデルを設定する必要があります。 - ```C++ InterconnectedModel vehicle; @@ -185,7 +183,6 @@ vehicle.dtSet(dt); モデルが正しく設定された後、以下のように使用できます。 - ```C++ // Example of an model input std::vector vehicle_input = {0.0, 1.0}; // INPUT_NAME_1, INPUT_NAME_2 @@ -207,4 +204,3 @@ std::vector next_state = vehicle.updatePyModel(vehicle_input); ## 関連する問題 - diff --git a/simulator/simple_planning_simulator/README.md b/simulator/simple_planning_simulator/README.md index 065a5e95dc6c6..843d8860a2e31 100644 --- a/simulator/simple_planning_simulator/README.md +++ b/simulator/simple_planning_simulator/README.md @@ -40,17 +40,17 @@ ### コモンパラメーター -| 名称 | タイプ | 説明 | デフォルト値 | -| :-------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | -| simulated_frame_id | 文字列 | 出力tf内のchild_frame_idに設定 | "base_link" | -| origin_frame_id | 文字列 | 出力tf内のframe_idに設定 | "odom" | +| 名称 | タイプ | 説明 | デフォルト値 | +| :-------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | +| simulated_frame_id | 文字列 | 出力tf内のchild_frame_idに設定 | "base_link" | +| origin_frame_id | 文字列 | 出力tf内のframe_idに設定 | "odom" | | initialize_source | 文字列 | "ORIGIN"の場合は、初期姿勢が(0, 0, 0)に設定され、"INITIAL_POSE_TOPIC"の場合は、ノードが`input/initialpose`トピックが発行されるまで待機 | "INITIAL_POSE_TOPIC" | -| add_measurement_noise | ブール | trueの場合、シミュレーション結果にガウスノイズが加えられる | true | -| pos_noise_stddev | double | 位置ノイズの標準偏差 | 0.01 | -| rpy_noise_stddev | double | オイラー角ノイズの標準偏差 | 0.0001 | -| vel_noise_stddev | double | 速度ノイズの標準偏差 | 0.0 | -| angvel_noise_stddev | double | 角速度ノイズの標準偏差 | 0.0 | -| steer_noise_stddev | double | ステアリング角ノイズの標準偏差 | 0.0001 | +| add_measurement_noise | ブール | trueの場合、シミュレーション結果にガウスノイズが加えられる | true | +| pos_noise_stddev | double | 位置ノイズの標準偏差 | 0.01 | +| rpy_noise_stddev | double | オイラー角ノイズの標準偏差 | 0.0001 | +| vel_noise_stddev | double | 速度ノイズの標準偏差 | 0.0 | +| angvel_noise_stddev | double | 角速度ノイズの標準偏差 | 0.0 | +| steer_noise_stddev | double | ステアリング角ノイズの標準偏差 | 0.0001 | ### 車両モデルのパラメータ @@ -71,26 +71,26 @@ 次の表は、どのモデルがどのパラメータに対応するかを示しています。モデル名は省略形で書かれています(例: IDEAL_STEER_VEL = I_ST_V)。 -| 名称 | 型 | 説明 | I_ST_V | I_ST_A | I_ST_A_G | D_ST_V | D_ST_A | D_ST_A_G | D_ST_A_G_WO_FG | D_ST_M_ACC_G | L_S_V | デフォルト値 | 単位 | -| :------------------------- | :----- | :------------------------------------------------------------------------------------------------------ | :----- | :----- | :------- | :----- | :----- | :------- | :------------- | :----------- | :---- | :------------ | :------ | -| acc_time_delay | double | 加速度入力のデッドタイム | x | x | x | x | o | o | o | o | x | 0.1 | [s] | -| steer_time_delay | double | ステアリング入力のデッドタイム | x | x | x | o | o | o | o | o | x | 0.24 | [s] | -| vel_time_delay | double | 速度入力のデッドタイム | x | x | x | o | x | x | x | x | x | 0.25 | [s] | -| acc_time_constant | double | 1次の加速度動特性の時間定数 | x | x | x | x | o | o | o | o | x | 0.1 | [s] | -| steer_time_constant | double | 1次のステアリング動特性の時間定数 | x | x | x | o | o | o | o | o | x | 0.27 | [s] | -| steer_dead_band | double | ステアリング角のデッドバンド | x | x | x | o | o | o | o | x | x | 0.0 | [rad] | -| vel_time_constant | double | 1次の速度動特性の時間定数 | x | x | x | o | x | x | x | x | x | 0.5 | [s] | -| vel_lim | double | 速度の上限 | x | x | x | o | o | o | o | o | x | 50.0 | [m/s] | -| vel_rate_lim | double | 加速度の上限 | x | x | x | o | o | o | o | o | x | 7.0 | [m/ss] | -| steer_lim | double | ステアリング角の上限 | x | x | x | o | o | o | o | o | x | 1.0 | [rad] | -| steer_rate_lim | double | ステアリング角変化率の上限 | x | x | x | o | o | o | o | o | x | 5.0 | [rad/s] | -| steer_bias | double | ステアリング角のバイアス | x | x | x | o | o | o | o | o | x | 0.0 | [rad] | -| debug_acc_scaling_factor | double | 加速度コマンドのスケーリング係数 | x | x | x | x | o | o | o | x | x | 1.0 | [-] | -| debug_steer_scaling_factor | double | ステアリングコマンドのスケーリング係数 | x | x | x | x | o | o | o | x | x | 1.0 | [-] | -| acceleration_map_path | string | 速度と理想的な加速度を実際の加速度に変換するためのCSVファイルのパス | x | x | x | x | x | x | x | o | x | - | [-] | -| model_module_paths | string | モデルを実装するPythonモジュールのパス | x | x | x | x | x | x | x | x | o | - | [-] | -| model_param_paths | string | モデルパラメータが格納されているファイルのパス(パラメータファイルが必要ない場合は空文字列可) | x | x | x | x | x | x | x | x | o | - | [-] | -| model_class_names | string | モデルを実装するクラスの名前 | x | x | x | x | x | x | x | x | o | - | [-] | +| 名称 | 型 | 説明 | I_ST_V | I_ST_A | I_ST_A_G | D_ST_V | D_ST_A | D_ST_A_G | D_ST_A_G_WO_FG | D_ST_M_ACC_G | L_S_V | デフォルト値 | 単位 | +| :------------------------- | :----- | :--------------------------------------------------------------------------------------------- | :----- | :----- | :------- | :----- | :----- | :------- | :------------- | :----------- | :---- | :----------- | :------ | +| acc_time_delay | double | 加速度入力のデッドタイム | x | x | x | x | o | o | o | o | x | 0.1 | [s] | +| steer_time_delay | double | ステアリング入力のデッドタイム | x | x | x | o | o | o | o | o | x | 0.24 | [s] | +| vel_time_delay | double | 速度入力のデッドタイム | x | x | x | o | x | x | x | x | x | 0.25 | [s] | +| acc_time_constant | double | 1次の加速度動特性の時間定数 | x | x | x | x | o | o | o | o | x | 0.1 | [s] | +| steer_time_constant | double | 1次のステアリング動特性の時間定数 | x | x | x | o | o | o | o | o | x | 0.27 | [s] | +| steer_dead_band | double | ステアリング角のデッドバンド | x | x | x | o | o | o | o | x | x | 0.0 | [rad] | +| vel_time_constant | double | 1次の速度動特性の時間定数 | x | x | x | o | x | x | x | x | x | 0.5 | [s] | +| vel_lim | double | 速度の上限 | x | x | x | o | o | o | o | o | x | 50.0 | [m/s] | +| vel_rate_lim | double | 加速度の上限 | x | x | x | o | o | o | o | o | x | 7.0 | [m/ss] | +| steer_lim | double | ステアリング角の上限 | x | x | x | o | o | o | o | o | x | 1.0 | [rad] | +| steer_rate_lim | double | ステアリング角変化率の上限 | x | x | x | o | o | o | o | o | x | 5.0 | [rad/s] | +| steer_bias | double | ステアリング角のバイアス | x | x | x | o | o | o | o | o | x | 0.0 | [rad] | +| debug_acc_scaling_factor | double | 加速度コマンドのスケーリング係数 | x | x | x | x | o | o | o | x | x | 1.0 | [-] | +| debug_steer_scaling_factor | double | ステアリングコマンドのスケーリング係数 | x | x | x | x | o | o | o | x | x | 1.0 | [-] | +| acceleration_map_path | string | 速度と理想的な加速度を実際の加速度に変換するためのCSVファイルのパス | x | x | x | x | x | x | x | o | x | - | [-] | +| model_module_paths | string | モデルを実装するPythonモジュールのパス | x | x | x | x | x | x | x | x | o | - | [-] | +| model_param_paths | string | モデルパラメータが格納されているファイルのパス(パラメータファイルが必要ない場合は空文字列可) | x | x | x | x | x | x | x | x | o | - | [-] | +| model_class_names | string | モデルを実装するクラスの名前 | x | x | x | x | x | x | x | x | o | - | [-] | _注意:_ パラメータ`model_module_paths`、`model_param_paths`、および`model_class_names`は同じ長にする必要があります。 @@ -98,7 +98,6 @@ _注意:_ パラメータ`model_module_paths`、`model_param_paths`、および` `acceleration_map.csv`の例 - ```csv default, 0.00, 1.39, 2.78, 4.17, 5.56, 6.94, 8.33, 9.72, 11.11, 12.50, 13.89, 15.28, 16.67 -4.0, -4.40, -4.36, -4.38, -4.12, -4.20, -3.94, -3.98, -3.80, -3.77, -3.76, -3.59, -3.50, -3.40 @@ -130,31 +129,30 @@ convert_steer_cmd_method には、「vgr」と「steer_map」の 2 つのオプ ![vgr_sim](./media/vgr_sim.drawio.svg) - ```yaml ``` ACTUATION_CMDで使用するパラメータは次のとおりです。 -| 名前 | 型 | 説明 | 単位 | -| :----------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--- | -| accel_time_delay | double | 加速度入力のデッドタイム | [秒] | -| accel_time_constant | double | 1 次加速度動特性のタイムコンスタント | [秒] | -| brake_time_delay | double | ブレーキ入力のデッドタイム | [秒] | -| brake_time_constant | double | 1 次ブレーキ動特性のタイムコンスタント | [秒] | -| convert_accel_cmd | bool | true の場合、コマンドは加速度作動値に変換されて送信されると想定され、シミュレータ内で加速度値に戻されます。 | [-] | -| convert_brake_cmd | bool | true の場合、コマンドはブレーキ作動値に変換されて送信されると想定され、シミュレータ内で加速度値に戻されます。 | [-] | -| convert_steer_cmd | bool | true の場合、コマンドは操舵作動値に変換されて送信されると想定され、シミュレータ内で操舵速度値に戻されます。 | [-] | -| convert_steer_cmd_method | bool | 操舵コマンドを変換する方法。「vgr」と「steer_map」から選択できます。 | [-] | -| vgr_coef_a | double | 可変ギア比の係数 a の値 | [-] | -| vgr_coef_b | double | 可変ギア比の係数 b の値 | [-] | -| vgr_coef_c | double | 可変ギア比の係数 c の値 | [-] | -| enable_pub_steer | bool | ステアリングタイヤ角を公開するかどうか。false の場合、actuation_status から他のノード(例: raw_vehicle_cmd_converter)で変換され、公開される必要があります。 | [-] +| 名前 | 型 | 説明 | 単位 | +| :----------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | :--- | +| accel_time_delay | double | 加速度入力のデッドタイム | [秒] | +| accel_time_constant | double | 1 次加速度動特性のタイムコンスタント | [秒] | +| brake_time_delay | double | ブレーキ入力のデッドタイム | [秒] | +| brake_time_constant | double | 1 次ブレーキ動特性のタイムコンスタント | [秒] | +| convert_accel_cmd | bool | true の場合、コマンドは加速度作動値に変換されて送信されると想定され、シミュレータ内で加速度値に戻されます。 | [-] | +| convert_brake_cmd | bool | true の場合、コマンドはブレーキ作動値に変換されて送信されると想定され、シミュレータ内で加速度値に戻されます。 | [-] | +| convert_steer_cmd | bool | true の場合、コマンドは操舵作動値に変換されて送信されると想定され、シミュレータ内で操舵速度値に戻されます。 | [-] | +| convert_steer_cmd_method | bool | 操舵コマンドを変換する方法。「vgr」と「steer_map」から選択できます。 | [-] | +| vgr_coef_a | double | 可変ギア比の係数 a の値 | [-] | +| vgr_coef_b | double | 可変ギア比の係数 b の値 | [-] | +| vgr_coef_c | double | 可変ギア比の係数 c の値 | [-] | +| enable_pub_steer | bool | ステアリングタイヤ角を公開するかどうか。false の場合、actuation_status から他のノード(例: raw_vehicle_cmd_converter)で変換され、公開される必要があります。 | [-] | -_注意_: ステアリング・ダイナミクス/速度・加速度ダイナミクスは、_遅延_モデルにおけるデッドタイムを持った1次システムでモデリングされています。_時定数_の定義は、ステップ応答が最終値の63%に上昇するまでの時間です。_デッドタイム_は、制御入力に対する応答の遅延です。 +_注意_: ステアリング・ダイナミクス/速度・加速度ダイナミクスは、*遅延*モデルにおけるデッドタイムを持った1次システムでモデリングされています。*時定数*の定義は、ステップ応答が最終値の63%に上昇するまでの時間です。*デッドタイム*は、制御入力に対する応答の遅延です。 ### LEARNED_STEER_VELモデルの例 @@ -164,7 +162,6 @@ _注意_: ステアリング・ダイナミクス/速度・加速度ダイナミ 2. `src/vehicle/sample_vehicle_launch/sample_vehicle_description/config/simulator_model.param.yaml`ファイルの`vehicle_model_type`を`LEARNED_STEER_VEL`に設定します。同じファイルで、次のパラメータを設定します。これらのモデルはテスト用であり、パラメータファイルは必要ありません。 - ```yaml model_module_paths: [ @@ -212,6 +209,5 @@ Autoware.AI で最初に開発されました。以下のリンクを参照し ## 今後の拡張/未実装の部分 - - 車両モデルの精度の向上 (例: ステアリングデッドゾーンとスリップ挙動の追加) - - 擬似点群または擬似認識結果を出力するモジュールとの連携 - +- 車両モデルの精度の向上 (例: ステアリングデッドゾーンとスリップ挙動の追加) +- 擬似点群または擬似認識結果を出力するモジュールとの連携 diff --git a/simulator/tier4_dummy_object_rviz_plugin/README.md b/simulator/tier4_dummy_object_rviz_plugin/README.md index 630857475bee7..7f6fc23f67e41 100644 --- a/simulator/tier4_dummy_object_rviz_plugin/README.md +++ b/simulator/tier4_dummy_object_rviz_plugin/README.md @@ -15,8 +15,8 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 ### 出力 -| 名前 | タイプ | 説明 | -| ---------------------------------------------------- | ------------------------------------------ | ------------------------------------------------ | +| 名前 | タイプ | 説明 | +| ---------------------------------------------------- | ----------------------------------------- | ------------------------------------------------ | | `/simulation/dummy_perception_publisher/object_info` | `tier4_simulation_msgs::msg::DummyObject` | ダミーオブジェクト情報をパブリッシュするトピック | ## パラメータ @@ -24,9 +24,11 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 ### コアパラメータ #### CarPose + - 定義: 自車位置に関するパラメータ - 説明: 自車位置の初期値に関するパラメータです。 例: + ``` - car_pose: x: 10.0 @@ -42,6 +44,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: プランナーの目標に関するパラメータ - 説明: プランナーのゴールに関するパラメータです。 例: + ``` - planner_goal: x: 40.0 @@ -59,6 +62,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: 軌道に関するパラメータ - 説明: 車両が走行する予定の軌道の初期値に関するパラメータです。 例: + ``` - trajectory: x: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] @@ -73,6 +77,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: 行動プランナーに関するパラメータ - 説明: 行動プランナーに関するパラメータです。 例: + ``` - behavior_planner: target_vel: 10.0 @@ -88,6 +93,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: レーダーに関するパラメータ - 説明: レーダーセンサーに関するパラメータです。 例: + ``` - radar: fov: 90.0 @@ -100,6 +106,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: LiDARに関するパラメータ - 説明: LiDARセンサーに関するパラメータです。 例: + ``` - lidar: fov: 180.0 @@ -112,6 +119,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: カメラに関するパラメータ - 説明: カメラセンサーに関するパラメータです。 例: + ``` - camera: fov: 120.0 @@ -126,6 +134,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: MPCに関するパラメータ - 説明: MPCに関するパラメータです。 例: + ``` - mpc: dt: 0.01 @@ -139,6 +148,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: PurePursuitに関するパラメータ - 説明: PurePursuitに関するパラメータです。 例: + ``` - pure_pursuit: lookahead_distance: 10.0 @@ -152,6 +162,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: シミュレーターに関するパラメータ - 説明: シミュレーターに関するパラメータです。 例: + ``` - simulator: dt: 0.01 @@ -165,6 +176,7 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 定義: Autowareに関するパラメータ - 説明: Autowareに関するパラメータです。 例: + ``` - autoware: debug: false @@ -172,35 +184,35 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 'post resampling': false ``` -| 名前 | 型 | 初期値 | 説明 | -| ----------------- | ------ | --------------------------------------------- | -------------------------------------- | +| 名前 | 型 | 初期値 | 説明 | +| ----------------- | ------ | ---------------------------------------------------- | ------------------------------------------------ | | `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | -| `std_dev_x_` | float | 0.03 | 初期ポーズの X 標準偏差 [m] | -| `std_dev_y_` | float | 0.03 | 初期ポーズの Y 標準偏差 [m] | -| `std_dev_z_` | float | 0.03 | 初期ポーズの Z 標準偏差 [m] | -| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | 初期ポーズの Theta 標準偏差 [rad] | -| `length_` | float | 4.0 | 初期ポーズの X 標準偏差 [m] | -| `width_` | float | 1.8 | 初期ポーズの Y 標準偏差 [m] | -| `height_` | float | 2.0 | 初期ポーズの Z 標準偏差 [m] | -| `position_z_` | float | 0.0 | 初期ポーズの Z 位置 [m] | -| `velocity_` | float | 0.0 | 速度 [m/s] | +| `std_dev_x_` | float | 0.03 | 初期ポーズの X 標準偏差 [m] | +| `std_dev_y_` | float | 0.03 | 初期ポーズの Y 標準偏差 [m] | +| `std_dev_z_` | float | 0.03 | 初期ポーズの Z 標準偏差 [m] | +| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | 初期ポーズの Theta 標準偏差 [rad] | +| `length_` | float | 4.0 | 初期ポーズの X 標準偏差 [m] | +| `width_` | float | 1.8 | 初期ポーズの Y 標準偏差 [m] | +| `height_` | float | 2.0 | 初期ポーズの Z 標準偏差 [m] | +| `position_z_` | float | 0.0 | 初期ポーズの Z 位置 [m] | +| `velocity_` | float | 0.0 | 速度 [m/s] | #### BusPose 走行中の車両の姿勢を表現し、車両座標系における現在の姿勢を提供する。 -| 名称 | タイプ | デフォルト値 | 説明 | -| --------------------- | ------ | ------------------------------------------------------- | ------------------------------------------------------- | -| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | -| `std_dev_x_` | 浮動小数 | 0.03 | 初期姿勢に対する X 軸の標準偏差 [m] | -| `std_dev_y_` | 浮動小数 | 0.03 | 初期姿勢に対する Y 軸の標準偏差 [m] | -| `std_dev_z_` | 浮動小数 | 0.03 | 初期姿勢に対する Z 軸の標準偏差 [m] | -| `std_dev_theta_` | 浮動小数 | 5.0 \* M_PI / 180.0 | 初期姿勢に対する θ 軸の標準偏差 [rad] | -| `length_` | 浮動小数 | 10.5 | 初期姿勢に対する X 軸の標準偏差 [m] | -| `width_` | 浮動小数 | 2.5 | 初期姿勢に対する Y 軸の標準偏差 [m] | -| `height_` | 浮動小数 | 3.5 | 初期姿勢に対する Z 軸の標準偏差 [m] | -| `position_z_` | 浮動小数 | 0.0 | 初期姿勢に対する Z 軸の位置 [m] | -| `velocity_` | 浮動小数 | 0.0 | 速度 [m/s] | +| 名称 | タイプ | デフォルト値 | 説明 | +| ----------------- | -------- | ---------------------------------------------------- | ------------------------------------------------ | +| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | +| `std_dev_x_` | 浮動小数 | 0.03 | 初期姿勢に対する X 軸の標準偏差 [m] | +| `std_dev_y_` | 浮動小数 | 0.03 | 初期姿勢に対する Y 軸の標準偏差 [m] | +| `std_dev_z_` | 浮動小数 | 0.03 | 初期姿勢に対する Z 軸の標準偏差 [m] | +| `std_dev_theta_` | 浮動小数 | 5.0 \* M_PI / 180.0 | 初期姿勢に対する θ 軸の標準偏差 [rad] | +| `length_` | 浮動小数 | 10.5 | 初期姿勢に対する X 軸の標準偏差 [m] | +| `width_` | 浮動小数 | 2.5 | 初期姿勢に対する Y 軸の標準偏差 [m] | +| `height_` | 浮動小数 | 3.5 | 初期姿勢に対する Z 軸の標準偏差 [m] | +| `position_z_` | 浮動小数 | 0.0 | 初期姿勢に対する Z 軸の位置 [m] | +| `velocity_` | 浮動小数 | 0.0 | 速度 [m/s] | #### 歩行者姿勢 @@ -210,37 +222,37 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 **入力** -* 車両の点群(organized point cloud) -* 車両の画像(RGB画像) -* 自車位置と姿勢(6DoF) -* 制限速度 +- 車両の点群(organized point cloud) +- 車両の画像(RGB画像) +- 自車位置と姿勢(6DoF) +- 制限速度 **出力** -* 検出された歩行者リスト -* 歩行者のバウンディングボックス(3D bounding box) -* 歩行者の速度(東東、南北) -* 歩行者の加速度(東東、南北) -* 歩行者の[後方距離]'post resampling' +- 検出された歩行者リスト +- 歩行者のバウンディングボックス(3D bounding box) +- 歩行者の速度(東東、南北) +- 歩行者の加速度(東東、南北) +- 歩行者の[後方距離]'post resampling' **パラメータ** -* 点群の処理時間 -* 画像の処理時間 -* 検出距離 -* 以下の歩行者逸脱量のしきい値: - * 速度 - * 加速度 +- 点群の処理時間 +- 画像の処理時間 +- 検出距離 +- 以下の歩行者逸脱量のしきい値: + - 速度 + - 加速度 -| Name | Type | Default Value | Description | -| ----------------- | ------ | ---------------------------------------------------- | ----------------------------------------------- | +| Name | Type | Default Value | Description | +| ----------------- | ------ | ---------------------------------------------------- | ------------------------------------------------ | | `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | -| `std_dev_x_` | float | 0.03 | 初期位置のX軸標準偏差 [m] | -| `std_dev_y_` | float | 0.03 | 初期位置のY軸標準偏差 [m] | -| `std_dev_z_` | float | 0.03 | 初期位置のZ軸標準偏差 [m] | -| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | 初期位置のθ軸標準偏差 [rad] | -| `position_z_` | float | 0.0 | 初期位置のZ軸位置 [m] | -| `velocity_` | float | 0.0 | 速度 [m/s] | +| `std_dev_x_` | float | 0.03 | 初期位置のX軸標準偏差 [m] | +| `std_dev_y_` | float | 0.03 | 初期位置のY軸標準偏差 [m] | +| `std_dev_z_` | float | 0.03 | 初期位置のZ軸標準偏差 [m] | +| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | 初期位置のθ軸標準偏差 [rad] | +| `position_z_` | float | 0.0 | 初期位置のZ軸位置 [m] | +| `velocity_` | float | 0.0 | 速度 [m/s] | #### UnknownPose @@ -267,20 +279,20 @@ DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、 - 信号のない交差点 - 一時停止標識のある交差点 -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------- | ------ | ---------------------------------------------------- | ---------------------------------------------- | -| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーの物体情報を発行するトピック | -| `std_dev_x_` | 浮動小数 | 0.03 | 初期姿勢の X 標準偏差 [m] | -| `std_dev_y_` | 浮動小数 | 0.03 | 初期姿勢の Y 標準偏差 [m] | -| `std_dev_z_` | 浮動小数 | 0.03 | 初期姿勢の Z 標準偏差 [m] | -| `std_dev_theta_` | 浮動小数 | 5.0 \* M_PI / 180.0 | 初期姿勢のシータ標準偏差 [rad] | -| `position_z_` | 浮動小数 | 0.0 | 初期姿勢の Z 位置 [m] | -| `velocity_` | 浮動小数 | 0.0 | 速度 [m/s] | +| 名前 | タイプ | デフォルト値 | 説明 | +| ----------------- | -------- | ---------------------------------------------------- | ---------------------------------- | +| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーの物体情報を発行するトピック | +| `std_dev_x_` | 浮動小数 | 0.03 | 初期姿勢の X 標準偏差 [m] | +| `std_dev_y_` | 浮動小数 | 0.03 | 初期姿勢の Y 標準偏差 [m] | +| `std_dev_z_` | 浮動小数 | 0.03 | 初期姿勢の Z 標準偏差 [m] | +| `std_dev_theta_` | 浮動小数 | 5.0 \* M_PI / 180.0 | 初期姿勢のシータ標準偏差 [rad] | +| `position_z_` | 浮動小数 | 0.0 | 初期姿勢の Z 位置 [m] | +| `velocity_` | 浮動小数 | 0.0 | 速度 [m/s] | #### DeleteAllObjects -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------- | ------ | ---------------------------------------------------- | ----------------------------------------------- | +| 名前 | タイプ | デフォルト値 | 説明 | +| ----------------- | ------ | ---------------------------------------------------- | ------------------------------------------ | | `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーのオブジェクト情報を公開するトピック | ## 制限と前提 @@ -307,11 +319,11 @@ Planningシミュレータを使用しています。 4. ツールタブでまだ選択していない項目を選択します。 5. キーコマンドは次のとおりです。 -| 操作 | キーコマンド | -|---|---| -| 追加 | Shift + 右クリック | +| 操作 | キーコマンド | +| ---- | ----------------------------------------- | +| 追加 | Shift + 右クリック | | 移動 | 右クリック長押し + ドラッグアンドドロップ | -| 削除 | Alt + 右クリック | +| 削除 | Alt + 右クリック | ## Material Designアイコン @@ -330,4 +342,3 @@ Material DesignアイコンはApache License、バージョン2.0のライセン ### Acknowledgment これらのアイコンをコミュニティに提供し、開発者とデザイナーがプロジェクトのビジュアルアピールとユーザーエクスペリエンスを向上させるのに役立てさせてくれたGoogleに感謝の意を表します。 - diff --git a/simulator/vehicle_door_simulator/README.md b/simulator/vehicle_door_simulator/README.md index cd70b0d6fef16..b785822389839 100644 --- a/simulator/vehicle_door_simulator/README.md +++ b/simulator/vehicle_door_simulator/README.md @@ -1,4 +1,3 @@ # vehicle_door_simulator このパッケージは、ドアなどの車両機器の動作をテストするためのものです。 - diff --git a/system/autoware_component_monitor/README.md b/system/autoware_component_monitor/README.md index 48e9a6445724d..d8c9e5b39e889 100644 --- a/system/autoware_component_monitor/README.md +++ b/system/autoware_component_monitor/README.md @@ -11,8 +11,8 @@ ### 出力 -| 名称 | タイプ | 説明 | -| -------------------------- | ------------------------------------------------- | ----------------- | +| 名称 | タイプ | 説明 | +| -------------------------- | -------------------------------------------------- | --------------------- | | `~/component_system_usage` | `autoware_internal_msgs::msg::ResourceUsageReport` | CPU、メモリ使用量など | ## パラメーター @@ -25,7 +25,6 @@ 起動ファイルにコンポーザブルノードとして追加します。 - ```xml @@ -50,7 +49,6 @@ 次のコマンドを実行することでパッケージをテストできます。 - ```bash ros2 component load autoware_component_monitor autoware::component_monitor::ComponentMonitor -p publish_rate:=10.0 --node-namespace @@ -70,7 +68,6 @@ ros2 component load /pointcloud_container autoware_component_monitor autoware::c サンプル出力は次のとおりです。 - ```text top - 13:57:26 up 3:14, 1 user, load average: 1,09, 1,10, 1,04 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie @@ -83,4 +80,3 @@ KiB Swap: 39062524 total, 39062524 free, 0 used. 45520816 avail Mem ``` 5行目の最後にある5番目、8番目のフィールド(それぞれRES、%CPU)を取得します。 - diff --git a/system/autoware_default_adapi/README.md b/system/autoware_default_adapi/README.md index 26aaf81cb3e99..337ed1f58db84 100644 --- a/system/autoware_default_adapi/README.md +++ b/system/autoware_default_adapi/README.md @@ -24,7 +24,6 @@ これは、自律モードへの遷移条件を確認するためのデバッグスクリプトです。 - ```bash $ ros2 run autoware_default_adapi guide.py @@ -35,4 +34,3 @@ The vehicle is ready. Please change the operation mode to autonomous. The vehicle is driving autonomously. The vehicle has reached the goal of the route. Please reset a route. ``` - diff --git a/system/autoware_processing_time_checker/README.md b/system/autoware_processing_time_checker/README.md index 0f26495bc4641..179569c6c9dbe 100644 --- a/system/autoware_processing_time_checker/README.md +++ b/system/autoware_processing_time_checker/README.md @@ -7,7 +7,6 @@ ### スタンドアロン起動 - ```bash ros2 launch autoware_processing_time_checker processing_time_checker.launch.xml ``` @@ -18,9 +17,9 @@ ros2 launch autoware_processing_time_checker processing_time_checker.launch.xml ### 入力 -| 名称 | タイプ | 説明 | -| -------------------------- | --------------------------------------- | ------------------------------------------ | -| `/.../processing_time_ms` | `tier4_debug_msgs/Float64Stamped` | 各モジュールの処理時間 | +| 名称 | タイプ | 説明 | +| ------------------------- | --------------------------------- | ---------------------- | +| `/.../processing_time_ms` | `tier4_debug_msgs/Float64Stamped` | 各モジュールの処理時間 | ### 出力 @@ -50,7 +49,7 @@ Planningモジュールは、以下のサブモジュールで構成されてい Planningモジュールは、以下のようなアルゴリズムを使用しています。 -- **A*アルゴリズム:** グラフ探索を使用して経路を生成します。 +- **A\*アルゴリズム:** グラフ探索を使用して経路を生成します。 - **動的プログラミング:** 時系列データの最適化問題を解きます。 - **確率的ロードマップ法 (PRM):** ランダムなノードとエッジを使用して経路を生成します。 @@ -114,8 +113,8 @@ Autowareは、以下のようなテストシナリオを使用して評価され Autowareは、包括的な自律走行ソフトウェアスタックです。モジュール式のアーキテクチャ、高度なアルゴリズム、包括的な開発ツールにより、研究者や開発者が自律走行システムを開発するための強力なプラットフォームを提供します。 -| 名称 | 種類 | 説明 | -|---|---|---| +| 名称 | 種類 | 説明 | +| ----------------------------------------- | --------------------------------- | ---------------------- | | `/system/processing_time_checker/metrics` | `diagnostic_msgs/DiagnosticArray` | 全モジュールの処理時間 | ## パラメータ @@ -125,4 +124,3 @@ Autowareは、包括的な自律走行ソフトウェアスタックです。モ ## 仮定/既知の制限 TBD. - diff --git a/system/bluetooth_monitor/README.md b/system/bluetooth_monitor/README.md index 3d9cac9ecbb4b..f534c28349181 100644 --- a/system/bluetooth_monitor/README.md +++ b/system/bluetooth_monitor/README.md @@ -21,27 +21,27 @@ L2pingはデフォルトではrootユーザーのみ許可されているため [概要] | レベル | メッセージ | -| ----- | -------- | -| OK | OK | -| WARN | RTT警告 | -| ERROR | ロスト | -| | 関数エラー | +| ------ | ---------- | +| OK | OK | +| WARN | RTT警告 | +| ERROR | ロスト | +| | 関数エラー | **[値]** -| キー | 値 (例) | -| ---------------------------- | ------------------------------------------------------------------------- | +| キー | 値 (例) | +| -------------------------- | ------------------------------------------------------------ | | デバイス [0-9]: ステータス | OK / RTT 警告 / 検証エラー / ロスト / Ping 拒否 / 機能エラー | -| デバイス [0-9]: 名称 | ワイヤレスコントローラー | -| デバイス [0-9]: 製造元 | MediaTek, Inc. | -| デバイス [0-9]: アドレス | AA:BB:CC:DD:EE:FF | -| デバイス [0-9]: RTT | 0.00ms | +| デバイス [0-9]: 名称 | ワイヤレスコントローラー | +| デバイス [0-9]: 製造元 | MediaTek, Inc. | +| デバイス [0-9]: アドレス | AA:BB:CC:DD:EE:FF | +| デバイス [0-9]: RTT | 0.00ms | - 「bluetooth_monitor」が「機能エラー」をレポートすると、次のキーが追加されます。
例) 「connect」システムコールが失敗する。 -| キー(例) | 値(例) | -| -------------------- | ---------------------- | +| キー(例) | 値(例) | +| -------------------- | ------------------------------------------------ | | デバイス [0-9]: 接続 | そのようなファイルまたはディレクトリはありません | ## パラメータ @@ -63,14 +63,12 @@ L2pingはデフォルトではrootユーザーのみ許可されているため 1. L2pingは`cap_net_raw+eip`機能を必要とするため、`cap_net_raw+eip`機能を`l2ping_service`に割り当てます。 - ```sh sudo setcap 'cap_net_raw+eip' ./build/bluetooth_monitor/l2ping_service ``` 2. `l2ping_service` と `bluetooth_monitor` を実行します。 - ```sh ./build/bluetooth_monitor/l2ping_service ros2 launch bluetooth_monitor bluetooth_monitor.launch.xml @@ -79,4 +77,3 @@ L2pingはデフォルトではrootユーザーのみ許可されているため ## 周知の制限と問題 なし。 - diff --git a/system/component_state_monitor/README.md b/system/component_state_monitor/README.md index d0bcef5e096ce..4e9ea0bc87cb6 100644 --- a/system/component_state_monitor/README.md +++ b/system/component_state_monitor/README.md @@ -1,4 +1,3 @@ # component_state_monitor コンポーネントステートモニターは、トピックステートモニターを使用して各コンポーネントのステートを確認します。これは、ADサービスステートモニターとの後方互換性のための実装です。将来的には診断ツリーを使用して置き換えられます。 - diff --git a/system/default_ad_api_helpers/ad_api_adaptors/README.md b/system/default_ad_api_helpers/ad_api_adaptors/README.md index f353464cf2b7b..e0e7d812b9317 100644 --- a/system/default_ad_api_helpers/ad_api_adaptors/README.md +++ b/system/default_ad_api_helpers/ad_api_adaptors/README.md @@ -7,10 +7,10 @@ このノードはマップ高度適合ライブラリに依存します。 [詳細はここを参照してください。](../../../map/autoware_map_height_fitter/README.md) -| インターフェイス | ローカル名 | グローバル名 | 説明 | -| ------------ | ----------- | ---------------------------- | ----------------------------------------- | -| サブスクリプション | initialpose | /initialpose | ローカリゼーション初期化の姿勢 | -| クライアント | - | /api/localization/initialize | ローカリゼーション初期化 API | +| インターフェイス | ローカル名 | グローバル名 | 説明 | +| ------------------ | ----------- | ---------------------------- | ------------------------------ | +| サブスクリプション | initialpose | /initialpose | ローカリゼーション初期化の姿勢 | +| クライアント | - | /api/localization/initialize | ローカリゼーション初期化 API | ## routing_adaptor @@ -19,18 +19,17 @@ ウェイポイントの姿勢トピックを受信すると、APIを呼び出すためのウェイポイントの末尾に追加されます。 ルートを設定する前に、clear APIが自動的に呼び出されます。 -| Interface | Local Name | Global Name | Description | -| ---------------- | ------------------ | ------------------------------------------- | ----------------------------------------------------------- | -| 購読 | - | /api/routing/state | ルーティング API の状態 | -| 購読 | ~/input/fixed_goal | /planning/mission_planning/goal | 経路のゴール目標値(目標の変更は無効) | -| 購読 | ~/input/rough_goal | /rviz/routing/rough_goal | 経路のゴール目標値(目標の変更を有効) | -| 購読 | ~/input/reroute | /rviz/routing/reroute | 再経路の目標位置 | -| 購読 | ~/input/waypoint | /planning/mission_planning/checkpoint | 経路のウェイポイント位置 | -| クライアント | - | /api/routing/clear_route | ルートクリア API | -| クライアント | - | /api/routing/set_route_points | ルートポイント設定 API | -| クライアント | - | /api/routing/change_route_points | ルートポイント変更 API | +| Interface | Local Name | Global Name | Description | +| ------------ | ------------------ | ------------------------------------- | -------------------------------------- | +| 購読 | - | /api/routing/state | ルーティング API の状態 | +| 購読 | ~/input/fixed_goal | /planning/mission_planning/goal | 経路のゴール目標値(目標の変更は無効) | +| 購読 | ~/input/rough_goal | /rviz/routing/rough_goal | 経路のゴール目標値(目標の変更を有効) | +| 購読 | ~/input/reroute | /rviz/routing/reroute | 再経路の目標位置 | +| 購読 | ~/input/waypoint | /planning/mission_planning/checkpoint | 経路のウェイポイント位置 | +| クライアント | - | /api/routing/clear_route | ルートクリア API | +| クライアント | - | /api/routing/set_route_points | ルートポイント設定 API | +| クライアント | - | /api/routing/change_route_points | ルートポイント変更 API | ## パラメーター {{ json_to_markdown("/system/default_ad_api_helpers/ad_api_adaptors/schema/ad_api_adaptors.schema.json") }} - diff --git a/system/default_ad_api_helpers/automatic_pose_initializer/README.md b/system/default_ad_api_helpers/automatic_pose_initializer/README.md index 24934e5d01963..0f90bcb7574bf 100644 --- a/system/default_ad_api_helpers/automatic_pose_initializer/README.md +++ b/system/default_ad_api_helpers/automatic_pose_initializer/README.md @@ -5,8 +5,7 @@ このノードは、ローカリゼーション初期化状態が初期化されていない場合にローカリゼーション初期化APIを呼び出します。 APIは、ポーズが指定されていない場合にGNSSポーズを使用するため、GNSSを使用した初期化を自動的に実行できます。 -| インターフェース | ローカル名 | グローバル名 | 説明 | -| ---------------- | ---------- | ----------------------------------- | --------------------------------------- | -| サブスクリプション | - | /api/localization/initialization_state | ローカリゼーションの初期状態API | -| クライアント | - | /api/localization/initialize | ローカリゼーションの初期化API | - +| インターフェース | ローカル名 | グローバル名 | 説明 | +| ------------------ | ---------- | -------------------------------------- | ------------------------------- | +| サブスクリプション | - | /api/localization/initialization_state | ローカリゼーションの初期状態API | +| クライアント | - | /api/localization/initialize | ローカリゼーションの初期化API | diff --git a/system/diagnostic_graph_aggregator/README.md b/system/diagnostic_graph_aggregator/README.md index 74fa8538d944d..37f310dcfff98 100644 --- a/system/diagnostic_graph_aggregator/README.md +++ b/system/diagnostic_graph_aggregator/README.md @@ -39,23 +39,23 @@ MRMでは、このノードは専用のメッセージに最上位の機能単 ## インターフェイス -| インターフェイス種別 | インターフェイス名 | データ型 | 説明 | -|---|---|---|---| -| サブスクリプション | `/diagnostics` | `diagnostic_msgs/msg/DiagnosticArray` | 診断入力 | -| パブリッシャー | `/diagnostics_graph/unknowns` | `diagnostic_msgs/msg/DiagnosticArray` | グラフに含まれない診断 | -| パブリッシャー | `/diagnostics_graph/struct` | `tier4_system_msgs/msg/DiagGraphStruct` | 診断グラフ(静的部分) | -| パブリッシャー | `/diagnostics_graph/status` | `tier4_system_msgs/msg/DiagGraphStatus` | 診断グラフ(動的部分) | -| パブリッシャー | `/system/operation_mode/availability` | `tier4_system_msgs/msg/OperationModeAvailability` | オペレーションモードの可用性 | +| インターフェイス種別 | インターフェイス名 | データ型 | 説明 | +| -------------------- | ------------------------------------- | ------------------------------------------------- | ---------------------------- | +| サブスクリプション | `/diagnostics` | `diagnostic_msgs/msg/DiagnosticArray` | 診断入力 | +| パブリッシャー | `/diagnostics_graph/unknowns` | `diagnostic_msgs/msg/DiagnosticArray` | グラフに含まれない診断 | +| パブリッシャー | `/diagnostics_graph/struct` | `tier4_system_msgs/msg/DiagGraphStruct` | 診断グラフ(静的部分) | +| パブリッシャー | `/diagnostics_graph/status` | `tier4_system_msgs/msg/DiagGraphStatus` | 診断グラフ(動的部分) | +| パブリッシャー | `/system/operation_mode/availability` | `tier4_system_msgs/msg/OperationModeAvailability` | オペレーションモードの可用性 | ## パラメータ -| パラメータ名 | データ型 | 説明 | -|---|---|---| -| `graph_file` | `string` | コンフィグファイルのパス | -| `rate` | `double` | 集計とトピック公開のレート | -| `input_qos_depth` | `uint` | 入力配列トピックのQoS深度 | -| `graph_qos_depth` | `uint` | 出力グラフトピックのQoS深度 | -| `use_operation_mode_availability` | `bool` | 運転モード利用可能パブリッシャーを使用する | +| パラメータ名 | データ型 | 説明 | +| --------------------------------- | -------- | ------------------------------------------ | +| `graph_file` | `string` | コンフィグファイルのパス | +| `rate` | `double` | 集計とトピック公開のレート | +| `input_qos_depth` | `uint` | 入力配列トピックのQoS深度 | +| `graph_qos_depth` | `uint` | 出力グラフトピックのQoS深度 | +| `use_operation_mode_availability` | `bool` | 運転モード利用可能パブリッシャーを使用する | ## 例 @@ -65,7 +65,6 @@ MRMでは、このノードは専用のメッセージに最上位の機能単 - [module1.yaml](./example/graph/module1.yaml) - [module2.yaml](./example/graph/module2.yaml) - ```bash ros2 launch diagnostic_graph_aggregator example-main.launch.xml ``` @@ -74,7 +73,6 @@ ros2 launch diagnostic_graph_aggregator example-main.launch.xml - [edit.yaml](./example/graph/edit.yaml) - ```bash ros2 launch diagnostic_graph_aggregator example-edit.launch.xml ``` @@ -90,4 +88,3 @@ ros2 launch diagnostic_graph_aggregator example-edit.launch.xml - [path](./doc/format/path.md) - [unit](./doc/format/unit.md) - [edit](./doc/format/edit.md) - diff --git a/system/diagnostic_graph_utils/README.md b/system/diagnostic_graph_utils/README.md index 023a4739fcf19..0f546d2640a78 100644 --- a/system/diagnostic_graph_utils/README.md +++ b/system/diagnostic_graph_utils/README.md @@ -11,4 +11,3 @@ - [DiagGraph](./include/diagnostic_graph_utils/graph.hpp) - [DiagGraphSubscription](./include/diagnostic_graph_utils/subscription.hpp) - diff --git a/system/dummy_diag_publisher/README.md b/system/dummy_diag_publisher/README.md index bb0a3a188a025..8e3c10c930468 100644 --- a/system/dummy_diag_publisher/README.md +++ b/system/dummy_diag_publisher/README.md @@ -8,8 +8,8 @@ ### 出力 -| 名前 | タイプ | 説明 | -| -------------- | ---------------------------------------- | ------------------- | +| 名前 | タイプ | 説明 | +| -------------- | ---------------------------------------- | -------- | | `/diagnostics` | `diagnostic_msgs::msgs::DiagnosticArray` | 診断出力 | ## パラメータ @@ -18,20 +18,20 @@ パラメータ`DIAGNOSTIC_NAME`は、パラメータYAMLファイルに存在する名前でなければなりません。`status`パラメータがコマンドラインから指定された場合、`is_active`パラメータは自動的に`true`に設定されます。 -| 名称 | タイプ | 既定値 | 説明 | 再構成可能 | -| ----------------------------- | ------ | ---------- | -------------------------------------------- | ----------- | -| `update_rate` | int | `10` | タイマーコールバックの周期 [Hz] | false | -| `DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制的に更新するかどうか | true | -| `DIAGNOSTIC_NAME.status` | string | `"OK"` | ダミー診断パブリッシャーによる診断ステータス | true | +| 名称 | タイプ | 既定値 | 説明 | 再構成可能 | +| --------------------------- | ------ | ------ | -------------------------------------------- | ---------- | +| `update_rate` | int | `10` | タイマーコールバックの周期 [Hz] | false | +| `DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制的に更新するかどうか | true | +| `DIAGNOSTIC_NAME.status` | string | `"OK"` | ダミー診断パブリッシャーによる診断ステータス | true | ### dummy_diag_publisher の YAML フォーマット 値が `default` の場合、既定値が設定されます。 -| キー | タイプ | デフォルト値 | 説明 | -| --------------------------------------- | ------ | ----------- | ---------------------------------------------------------------------| -| `required_diags.DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制アップデートするか否か | -| `required_diags.DIAGNOSTIC_NAME.status` | string | `"OK"` | ダミー診断パブリッシャーによって設定された診断ステータス | +| キー | タイプ | デフォルト値 | 説明 | +| ------------------------------------------ | ------ | ------------ | -------------------------------------------------------- | +| `required_diags.DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制アップデートするか否か | +| `required_diags.DIAGNOSTIC_NAME.status` | string | `"OK"` | ダミー診断パブリッシャーによって設定された診断ステータス | ## 想定事項/既知の制約事項 @@ -41,16 +41,13 @@ ### 起動 - ```sh ros2 launch dummy_diag_publisher dummy_diag_publisher.launch.xml ``` ### 再構成 - ```sh ros2 param set /dummy_diag_publisher velodyne_connection.status "Warn" ros2 param set /dummy_diag_publisher velodyne_connection.is_active true ``` - diff --git a/system/dummy_infrastructure/README.md b/system/dummy_infrastructure/README.md index d9f0f285808fc..4ee4765f17b13 100644 --- a/system/dummy_infrastructure/README.md +++ b/system/dummy_infrastructure/README.md @@ -4,7 +4,6 @@ ## 使用方法 - ```sh ros2 launch dummy_infrastructure dummy_infrastructure.launch.xml ros2 run rqt_reconfigure rqt_reconfigure @@ -14,30 +13,29 @@ ros2 run rqt_reconfigure rqt_reconfigure ### 入力 -| 名称 | 種別 | 説明 | -| ----------------------- | ---------------------------------------------------- | ---------------------- | +| 名称 | 種別 | 説明 | +| ----------------------- | ------------------------------------------------- | ------------------- | | `~/input/command_array` | `tier4_v2x_msgs::msg::InfrastructureCommandArray` | V2Xインフラコマンド | ### 出力 -| 名前 | タイプ | 説明 | -| -------------------------- | ---------------------------------------------------------------------- | ------------------------------ | +| 名前 | タイプ | 説明 | +| ---------------------- | ---------------------------------------------------- | ---------------------------------- | | `~/output/state_array` | `tier4_v2x_msgs::msg::VirtualTrafficLightStateArray` | バーチャルトラフィックライトアレイ | ## パラメーター ### ノードパラメーター -| 名称 | 種別 | デフォルト値 | 説明 | -| ------------------- | ------ | ------------- | ------------------------------------------------------ | -| `update_rate` | double | `10.0` | タイマーコールバック周期 [Hz] | -| `use_first_command` | bool | `true` | インスト読み取り ID を考慮するかどうするか | -| `use_command_state` | bool | `false` | コマンドの状態を考慮するかどうするか | -| `instrument_id` | string | `` | コマンド ID として使用 | -| `approval` | bool | `false` | `approval` フィールドを ROS パラメータに設定する | -| `is_finalized` | bool | `false` | `finalization` が完了していない場合、一時停止線で停止する | +| 名称 | 種別 | デフォルト値 | 説明 | +| ------------------- | ------ | ------------ | --------------------------------------------------------- | +| `update_rate` | double | `10.0` | タイマーコールバック周期 [Hz] | +| `use_first_command` | bool | `true` | インスト読み取り ID を考慮するかどうするか | +| `use_command_state` | bool | `false` | コマンドの状態を考慮するかどうするか | +| `instrument_id` | string | `` | コマンド ID として使用 | +| `approval` | bool | `false` | `approval` フィールドを ROS パラメータに設定する | +| `is_finalized` | bool | `false` | `finalization` が完了していない場合、一時停止線で停止する | ## 仮定 / 既知の限界 未定です。 - diff --git a/system/duplicated_node_checker/README.md b/system/duplicated_node_checker/README.md index 8111b7224542e..e7c2adfedfc42 100644 --- a/system/duplicated_node_checker/README.md +++ b/system/duplicated_node_checker/README.md @@ -7,7 +7,6 @@ ### スタンドアロン起動 - ```bash ros2 launch duplicated_node_checker duplicated_node_checker.launch.xml ``` @@ -16,17 +15,17 @@ ros2 launch duplicated_node_checker duplicated_node_checker.launch.xml トピックステータスとその診断ステータスの対応は次のとおりです。 -| **重複ステータス** | **診断ステータス** | **説明** | -|---|---|---| -| `OK` | OK | 重複は検出されません | -| `重複検出` | エラー | 重複が検出されました | +| **重複ステータス** | **診断ステータス** | **説明** | +| ------------------ | ------------------ | -------------------- | +| `OK` | OK | 重複は検出されません | +| `重複検出` | エラー | 重複が検出されました | ## 入出力 ### 出力 -| 名称 | 型 | 説明 | -| -------------- | --------------------------------- | ------------------- | +| 名称 | 型 | 説明 | +| -------------- | --------------------------------- | -------- | | `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断出力 | ## パラメーター @@ -36,4 +35,3 @@ ros2 launch duplicated_node_checker duplicated_node_checker.launch.xml ## 想定事項 / 制限事項 未定 - diff --git a/system/mrm_comfortable_stop_operator/README.md b/system/mrm_comfortable_stop_operator/README.md index abbfbab76464b..911b0888a6672 100644 --- a/system/mrm_comfortable_stop_operator/README.md +++ b/system/mrm_comfortable_stop_operator/README.md @@ -10,8 +10,8 @@ MRM comfortable stop operatorは、MRM comfortable stopコマンドに従って ### 入力 -| 名称 | 型 | 説明 | -| ------------------------------------ | ----------------------------------- | ----------------- | +| 名称 | 型 | 説明 | +| -------------------------------------- | ------------------------------------ | --------------- | | `~/input/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM実行オーダー | ### 出力 @@ -84,29 +84,28 @@ Autowareは、以下を含むさまざまな機能を提供します。 - アダプティブクルーズコントロール - 自動運転 -| 名前 | 型 | 説明 | -| ------------------------------------ | -------------------------------------------------------- | ---------------------------------------- | -| `~/output/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM実行状態 | -| `~/output/velocity_limit` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | -| `~/output/velocity_limit/clear` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | +| 名前 | 型 | 説明 | +| -------------------------------------- | ----------------------------------------------------- | ---------------------- | +| `~/output/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM実行状態 | +| `~/output/velocity_limit` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | +| `~/output/velocity_limit/clear` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | ## パラメーター ### ノードパラメーター -| 名称 | 型 | デフォルト値 | 説明 | -| ----------- | ---- | ------------- | ----------------------------- | -| update_rate | int | `10` | タイマーコールバック頻度 [Hz] | +| 名称 | 型 | デフォルト値 | 説明 | +| ----------- | --- | ------------ | ----------------------------- | +| update_rate | int | `10` | タイマーコールバック頻度 [Hz] | ### コアパラメータ -| 名前 | 型 | デフォルト値 | 説明 | -| ---------------- | ------ | ------------- | --------------------------------------------------- | -| min_acceleration | double | `-1.0` | 快適な停止のための最低加速度 [m/s^2] | -| max_jerk | double | `0.3` | 快適な停止のための最大ジャーク [m/s^3] | -| min_jerk | double | `-0.3` | 快適な停止のための最小ジャーク [m/s^3] | +| 名前 | 型 | デフォルト値 | 説明 | +| ---------------- | ------ | ------------ | -------------------------------------- | +| min_acceleration | double | `-1.0` | 快適な停止のための最低加速度 [m/s^2] | +| max_jerk | double | `0.3` | 快適な停止のための最大ジャーク [m/s^3] | +| min_jerk | double | `-0.3` | 快適な停止のための最小ジャーク [m/s^3] | ## 想定事項/既知の制限 TBD. - diff --git a/system/mrm_emergency_stop_operator/README.md b/system/mrm_emergency_stop_operator/README.md index 3db2df7f2491c..12eec956ca18e 100644 --- a/system/mrm_emergency_stop_operator/README.md +++ b/system/mrm_emergency_stop_operator/README.md @@ -10,10 +10,10 @@ MRM emergency stop operatorは、緊急停止MRM順序に基づいて緊急停 ### 入力 -| 名前 | タイプ | 説明 | -| ---------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| `~/input/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM 実行命令 | -| `~/input/control/control_cmd` | `autoware_control_msgs::msg::Control` | 制御コンポーネントの最後のノードから出力される制御コマンド。緊急停止コマンドの初期値に使用されます。 | +| 名前 | タイプ | 説明 | +| ------------------------------------ | ------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `~/input/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM 実行命令 | +| `~/input/control/control_cmd` | `autoware_control_msgs::msg::Control` | 制御コンポーネントの最後のノードから出力される制御コマンド。緊急停止コマンドの初期値に使用されます。 | ### 出力 @@ -50,27 +50,26 @@ Planningコンポーネントには、以下を含むその他の機能もあり - **Velocity Planning:** 安全で快適な速度プロファイルを決定します。 - **Safety Checks:** 軌跡が安全で、車両の制限内であることを確認します。 -| 名称 | タイプ | 説明 | -| ----------------------------------------- | ------------------------------------------ | ------------------------------------------- | -| `~/output/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM 実行ステータス | -| `~/output/mrm/emergency_stop/control_cmd` | `autoware_control_msgs::msg::Control` | 緊急停止コマンド | +| 名称 | タイプ | 説明 | +| ----------------------------------------- | ------------------------------------------- | ------------------ | +| `~/output/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM 実行ステータス | +| `~/output/mrm/emergency_stop/control_cmd` | `autoware_control_msgs::msg::Control` | 緊急停止コマンド | ## パラメータ ### ノードパラメータ -| 名称 | 種別 | デフォルト値 | 説明 | -| ---------- | ---- | ------------ | ------------------------------------------ | -| update_rate | int | `30` | タイマーコールバック周波数 [Hz] | +| 名称 | 種別 | デフォルト値 | 説明 | +| ----------- | ---- | ------------ | ------------------------------- | +| update_rate | int | `30` | タイマーコールバック周波数 [Hz] | ### コアパラメーター -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------------- | ------ | ------------- | ---------------------------------------------- | -| target_acceleration | double | `-2.5` | 緊急停止時の目標加速度 [m/s^2] | -| target_jerk | double | `-1.5` | 緊急停止時の目標ジャーク [m/s^3] | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------------- | ------ | ------------ | -------------------------------- | +| target_acceleration | double | `-2.5` | 緊急停止時の目標加速度 [m/s^2] | +| target_jerk | double | `-1.5` | 緊急停止時の目標ジャーク [m/s^3] | ## 前提条件/既知の制限 未定。 - diff --git a/system/mrm_handler/README.md b/system/mrm_handler/README.md index fe6f5b172961c..e45554e0beb62 100644 --- a/system/mrm_handler/README.md +++ b/system/mrm_handler/README.md @@ -14,15 +14,15 @@ MRM Handlerは、OperationModeAvailabilityに含まれるシステム障害状 ### 入力 -| 名称 | 種別 | 説明 | +| 名称 | 種別 | 説明 | | -------------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------- | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 車両が停止しているかどうか判断するために使用 | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 車両が停止しているかどうか判断するために使用 | | `/system/operation_mode/availability` | `tier4_system_msgs::msg::OperationModeAvailability` | operationModeAvailabilityに示されている適切なMRMをシステム利用可能なMRM動作から選択するために使用 | -| `/vehicle/status/control_mode` | `autoware_vehicle_msgs::msg::ControlModeReport` | 車両モード(自律運転または手動運転)をチェックするために使用 | -| `/system/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM緊急停止動作が利用可能かどうかをチェックするために使用 | -| `/system/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM快適停止動作が利用可能かどうかをチェックするために使用 | -| `/system/mrm/pull_over_manager/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRMプルオーバー動作が利用可能かどうかをチェックするために使用 | -| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | 現在の動作モードがAUTOまたはSTOPであるかどうかを確認するために使用 | +| `/vehicle/status/control_mode` | `autoware_vehicle_msgs::msg::ControlModeReport` | 車両モード(自律運転または手動運転)をチェックするために使用 | +| `/system/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM緊急停止動作が利用可能かどうかをチェックするために使用 | +| `/system/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM快適停止動作が利用可能かどうかをチェックするために使用 | +| `/system/mrm/pull_over_manager/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRMプルオーバー動作が利用可能かどうかをチェックするために使用 | +| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | 現在の動作モードがAUTOまたはSTOPであるかどうかを確認するために使用 | ### 出力 @@ -70,14 +70,14 @@ Autowareは、オープンソースの自律走行ソフトウェアプラット 信頼性は、自律走行システムがさまざまな状況下で予測可能かつ一貫して動作するために重要です。システムは、センサーの故障、天候の変化、交通状況の変化に耐えられるように設計されています。 -| 名前 | 種類 | 説明 | -| --------------------------------------- | ------------------------------------------------- | ----------------------------------------------------- | -| `/system/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | MRMの適切な実行に必要な(ギアコマンドを送信) | +| 名前 | 種類 | 説明 | +| --------------------------------------- | ------------------------------------------------- | ------------------------------------------------------- | +| `/system/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | MRMの適切な実行に必要な(ギアコマンドを送信) | | `/system/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | MRMの適切な実行に必要な(ターンシグナルコマンドを送信) | -| `/system/fail_safe/mrm_state` | `autoware_adapi_v1_msgs::msg::MrmState` | MRM実行状態と選択されたMRM挙動を通知 | -| `/system/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM緊急停止用実行命令 | -| `/system/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM快適停止用実行命令 | -| `/system/mrm/pull_over_manager/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM停車用実行命令 | +| `/system/fail_safe/mrm_state` | `autoware_adapi_v1_msgs::msg::MrmState` | MRM実行状態と選択されたMRM挙動を通知 | +| `/system/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM緊急停止用実行命令 | +| `/system/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM快適停止用実行命令 | +| `/system/mrm/pull_over_manager/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM停車用実行命令 | ## パラメータ @@ -86,4 +86,3 @@ Autowareは、オープンソースの自律走行ソフトウェアプラット ## 前提条件 / 制限事項 未定 - diff --git a/system/system_diagnostic_monitor/README.md b/system/system_diagnostic_monitor/README.md index ee8d14acca6b1..b83ad1f0991b8 100644 --- a/system/system_diagnostic_monitor/README.md +++ b/system/system_diagnostic_monitor/README.md @@ -4,14 +4,13 @@ ## 設定 -| 名称 | 説明 | -| ------------------------------------------------- | ----------------------------------------------------- | -| [autoware-main.yaml](./config/autoware-main.yaml) | Autowareの基本モニタリングのための診断グラフ。 | +| 名称 | 説明 | +| ------------------------------------------------- | ------------------------------------------------------ | +| [autoware-main.yaml](./config/autoware-main.yaml) | Autowareの基本モニタリングのための診断グラフ。 | | [autoware-psim.yaml](./config/autoware-psim.yaml) | シミュレーター用に一部ユニットを無効にした診断グラフ。 | ## スクリプト -| 名称 | 説明 | -| -------------------------------------------------------------------- | ------------------------------------------------ | +| 名称 | 説明 | +| ---------------------------------------------------------------------- | ------------------------------------ | | [component_state_diagnostics](./script/component_state_diagnostics.py) | コンポーネント状態を変換するノード。 | - diff --git a/system/system_monitor/README.md b/system/system_monitor/README.md index 860cfbe166d71..82322f197c99c 100644 --- a/system/system_monitor/README.md +++ b/system/system_monitor/README.md @@ -30,7 +30,6 @@ 他のパッケージと同様に、colcon buildとlaunchを使用します。 - ```sh colcon build source install/setup.bash @@ -56,38 +55,38 @@ CMakeは自動的にビルド環境に応じたビルド対象のソースを選 [使用状況] ✓:サポート、-:サポートなし -| ノード | メッセージ | Intel | arm64(tegra) | arm64(raspi) | メモ | -| --------------- | ---------------------------- | :---: | :----------: | :----------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| CPUモニター | CPU温度 | ✓ | ✓ | ✓ | | -| | CPU使用率 | ✓ | ✓ | ✓ | | -| | CPU負荷平均 | ✓ | ✓ | ✓ | | -| | CPUサーマルスロットリング | ✓ | - | ✓ | | -| | CPU周波数 | ✓ | ✓ | ✓ | 周波数の通知のみで、通常エラーは生成されません。 | -| HDDモニター | HDD温度 | ✓ | ✓ | ✓ | | -| | HDD通電時間 | ✓ | ✓ | ✓ | | -| | HDD総書き込みデータ量 | ✓ | ✓ | ✓ | | -| | HDD復旧エラー | ✓ | ✓ | ✓ | | -| | HDD使用率 | ✓ | ✓ | ✓ | | -| | HDDリードデータレート | ✓ | ✓ | ✓ | | -| | HDDライトデータレート | ✓ | ✓ | ✓ | | -| | HDDリードIOPS | ✓ | ✓ | ✓ | | -| | HDDライトIOPS | ✓ | ✓ | ✓ | | -| | HDD接続 | ✓ | ✓ | ✓ | | -| メモリモニター | メモリ使用率 | ✓ | ✓ | ✓ | | -| ネットワークモニタ | ネットワーク接続 | ✓ | ✓ | ✓ | | -| | ネットワーク使用率 | ✓ | ✓ | ✓ | 使用率の通知のみで、通常エラーは生成されません。 | -| | ネットワークCRCエラー | ✓ | ✓ | ✓ | 周期内のCRCエラー数が閾値に達すると警告が発生します。発生するCRCエラー数は、`ip`コマンドで確認できる値と同じです。 | -| | IPパケット再構成失敗 | ✓ | ✓ | ✓ | | -| NTPモニター | NTPオフセット | ✓ | ✓ | ✓ | | -| プロセスモニター | タスクの概要 | ✓ | ✓ | ✓ | | -| | 高負荷プロセス[0-9] | ✓ | ✓ | ✓ | | -| | 高メモリプロセス[0-9] | ✓ | ✓ | ✓ | | -| GPUモニター | GPU温度 | ✓ | ✓ | - | | -| | GPU使用率 | ✓ | ✓ | - | | -| | GPUメモリ使用率 | ✓ | - | - | | -| | GPUサーマルスロットリング | ✓ | - | - | | -| | GPU周波数 | ✓ | ✓ | - | インテルプラットフォームでは、現在のGPUクロックがGPUでサポートされているかどうかを監視します。 | -| 電圧モニター | CMOSバッテリーステータス | ✓ | - | - | RTCとBIOSのバッテリーの健全性 | +| ノード | メッセージ | Intel | arm64(tegra) | arm64(raspi) | メモ | +| ------------------ | ------------------------- | :---: | :----------: | :----------: | ------------------------------------------------------------------------------------------------------------------ | +| CPUモニター | CPU温度 | ✓ | ✓ | ✓ | | +| | CPU使用率 | ✓ | ✓ | ✓ | | +| | CPU負荷平均 | ✓ | ✓ | ✓ | | +| | CPUサーマルスロットリング | ✓ | - | ✓ | | +| | CPU周波数 | ✓ | ✓ | ✓ | 周波数の通知のみで、通常エラーは生成されません。 | +| HDDモニター | HDD温度 | ✓ | ✓ | ✓ | | +| | HDD通電時間 | ✓ | ✓ | ✓ | | +| | HDD総書き込みデータ量 | ✓ | ✓ | ✓ | | +| | HDD復旧エラー | ✓ | ✓ | ✓ | | +| | HDD使用率 | ✓ | ✓ | ✓ | | +| | HDDリードデータレート | ✓ | ✓ | ✓ | | +| | HDDライトデータレート | ✓ | ✓ | ✓ | | +| | HDDリードIOPS | ✓ | ✓ | ✓ | | +| | HDDライトIOPS | ✓ | ✓ | ✓ | | +| | HDD接続 | ✓ | ✓ | ✓ | | +| メモリモニター | メモリ使用率 | ✓ | ✓ | ✓ | | +| ネットワークモニタ | ネットワーク接続 | ✓ | ✓ | ✓ | | +| | ネットワーク使用率 | ✓ | ✓ | ✓ | 使用率の通知のみで、通常エラーは生成されません。 | +| | ネットワークCRCエラー | ✓ | ✓ | ✓ | 周期内のCRCエラー数が閾値に達すると警告が発生します。発生するCRCエラー数は、`ip`コマンドで確認できる値と同じです。 | +| | IPパケット再構成失敗 | ✓ | ✓ | ✓ | | +| NTPモニター | NTPオフセット | ✓ | ✓ | ✓ | | +| プロセスモニター | タスクの概要 | ✓ | ✓ | ✓ | | +| | 高負荷プロセス[0-9] | ✓ | ✓ | ✓ | | +| | 高メモリプロセス[0-9] | ✓ | ✓ | ✓ | | +| GPUモニター | GPU温度 | ✓ | ✓ | - | | +| | GPU使用率 | ✓ | ✓ | - | | +| | GPUメモリ使用率 | ✓ | - | - | | +| | GPUサーマルスロットリング | ✓ | - | - | | +| | GPU周波数 | ✓ | ✓ | - | インテルプラットフォームでは、現在のGPUクロックがGPUでサポートされているかどうかを監視します。 | +| 電圧モニター | CMOSバッテリーステータス | ✓ | - | - | RTCとBIOSのバッテリーの健全性 | ## ROSパラメータ @@ -107,7 +106,6 @@ CMakeは自動的にビルド環境に応じたビルド対象のソースを選 1. 「msr_reader」を実行するユーザーを作成します。 - ```sh sudo adduser ``` @@ -115,28 +113,24 @@ CMakeは自動的にビルド環境に応じたビルド対象のソースを選 2. 対象システムに `msr` カーネルモジュールをロードする。
`/dev/cpu/CPUNUM/msr` パスが出現する。 - ```sh sudo modprobe msr ``` 3. アクセス制御リスト(ACL)を使用して、読み取り専用アクセス権でMSRにユーザーアクセスを許可します。 - ```sh sudo setfacl -m u::r /dev/cpu/*/msr ``` 4. 'msr_reader'にcapabilityを割り当てます。msrカーネルモジュールにはrawioのcapabilityが必要です。 - ```sh sudo setcap cap_sys_rawio=ep install/system_monitor/lib/system_monitor/msr_reader ``` 5. 作成したユーザとして「msr_reader」を実行し、汎用ユーザとしてsystem_monitorを実行します。 - ```sh su install/system_monitor/lib/system_monitor/msr_reader @@ -159,28 +153,24 @@ CPUモニターと同様に、このパッケージはセキュリティリス 1. 'hdd_reader'を実行するユーザーを作成します。 - ```sh sudo adduser ``` 2. ディスクグループにユーザーを追加します。 - ```sh sudo usermod -a -G disk ``` 3. SCSIカーネルモジュールがATA PASS-THROUGH (12)コマンドを送信するには `rawio` 機能が必要で、NVMeカーネルモジュールは管理コマンドを送信するには `admin` 機能が必要なので、`hdd_reader`に機能を割り当てます。 - ```sh sudo setcap 'cap_sys_rawio=ep cap_sys_admin=ep' install/system_monitor/lib/system_monitor/hdd_reader ``` 4. 作成したユーザーとして `hdd_reader` を実行し、一般的ユーザーとして `system_monitor` を実行します。 - ```sh su install/system_monitor/lib/system_monitor/hdd_reader @@ -206,7 +196,6 @@ CUDA 10.0のインストール手順については、[NVIDIA CUDAインスト たとえば、電圧が2.9V未満になると警告し、2.7V未満になるとエラーを出す場合。 チップセットnct6106でのsensorsの実行結果は次のとおりで、「in7:」はCMOSバッテリの電圧です。 - ```txt $ sensors pch_cannonlake-virtual-0 @@ -230,7 +219,6 @@ fan2: 0 RPM (min = 0 RPM) 次の通り、voltage_monitor.param.yaml の設定値です。 - ```yaml /**: ros__parameters: @@ -243,7 +231,6 @@ fan2: 0 RPM (min = 0 RPM) 上記の例では、トピック/診断に出力されるメッセージは次のとおりです。 電圧<2.9Vの場合: - ```txt name: /autoware/system/resource_monitoring/voltage/cmos_battery message: Warning @@ -255,7 +242,6 @@ fan2: 0 RPM (min = 0 RPM) 電圧 < 2.7V の場合: - ```txt name: /autoware/system/resource_monitoring/voltage/cmos_battery message: Warning @@ -267,7 +253,6 @@ fan2: 0 RPM (min = 0 RPM) そうでない場合は、 - ```txt name: /autoware/system/resource_monitoring/voltage/cmos_battery message: OK @@ -285,4 +270,3 @@ CMOS バッテリー電圧が `voltage_error` または `voltage_warn` より低 [クラス図](docs/class_diagrams.md) を参照してください。 [シーケンス図](docs/seq_diagrams.md) を参照してください。 - diff --git a/system/topic_state_monitor/README.md b/system/topic_state_monitor/README.md index 1e9f4b62709bb..3bc1ee6976dd7 100644 --- a/system/topic_state_monitor/README.md +++ b/system/topic_state_monitor/README.md @@ -9,20 +9,20 @@ トピックステータスの種類と対応する診断ステータスは次のとおりです。 -| トピック状態 | 診断状態 | 説明 | -|---|---|---| -| `OK` | OK | トピックに異常なし | -| `NotReceived` | ERROR | トピックが未受信 | -| `WarnRate` | WARN | トピックの受信頻度が低下 | -| `ErrorRate` | ERROR | トピックの受信頻度が大幅に低下 | -| `Timeout` | ERROR | トピックサブスクリプションが一定時間停止 | +| トピック状態 | 診断状態 | 説明 | +| ------------- | -------- | ---------------------------------------- | +| `OK` | OK | トピックに異常なし | +| `NotReceived` | ERROR | トピックが未受信 | +| `WarnRate` | WARN | トピックの受信頻度が低下 | +| `ErrorRate` | ERROR | トピックの受信頻度が大幅に低下 | +| `Timeout` | ERROR | トピックサブスクリプションが一定時間停止 | ## 入力 / 出力 ### 入力 -| 名前 | タイプ | 説明 | -|---|---|---| +| 名前 | タイプ | 説明 | +| ---------- | ------------ | ------------------------ | | 任意の名前 | 任意のタイプ | 監視対象のトピックを購読 | ### 出力 @@ -31,61 +31,60 @@ Autowareの自動運転ソフトウェアは、Perception、Planning、Control **Perception** -* センサーからの生のデータを処理し、車載環境の3Dモデルを作成します。 -* 物体検出、物体分類、セグメンテーションなどのタスクを実行します。 +- センサーからの生のデータを処理し、車載環境の3Dモデルを作成します。 +- 物体検出、物体分類、セグメンテーションなどのタスクを実行します。 **Planning** -* 環境マップを使用し、自車位置を決定します。 -* 障害物を回避し、安全な経路を生成する、経路計画と軌跡生成を行います。 +- 環境マップを使用し、自車位置を決定します。 +- 障害物を回避し、安全な経路を生成する、経路計画と軌跡生成を行います。 **Control** -* 経路に従って車両を制御し、加速、ブレーキング、ステアリングを行います。 -* 速度、加速度、ヨー角などの逸脱量を最小限に抑えます。 +- 経路に従って車両を制御し、加速、ブレーキング、ステアリングを行います。 +- 速度、加速度、ヨー角などの逸脱量を最小限に抑えます。 **Autoware**では、Planningコンポーネントが以下を行います。 -* Planningモジュールの主な機能は'post resampling'後のパス生成です。 -* パス生成は、'post resampling'後の以下の情報に基づいて行われます。 -* 'post resampling'後の自車位置と周囲環境のマップ -* 経路制約(速度制限、道路標識など) -* 障害物の検出結果と予測された経路 +- Planningモジュールの主な機能は'post resampling'後のパス生成です。 +- パス生成は、'post resampling'後の以下の情報に基づいて行われます。 +- 'post resampling'後の自車位置と周囲環境のマップ +- 経路制約(速度制限、道路標識など) +- 障害物の検出結果と予測された経路 **Autoware**では、以下のPlanningアルゴリズムが実装されています。 -* **ダイナミックウィンドウアプローチ(DWA):** リアルタイムで経路を生成し、障害物を回避するためのアルゴリズムです。 -* **モデル予測制御(MPC):** 制御入力のシーケンスを最適化して、 заданную経路を追従するためのアルゴリズムです。 +- **ダイナミックウィンドウアプローチ(DWA):** リアルタイムで経路を生成し、障害物を回避するためのアルゴリズムです。 +- **モデル予測制御(MPC):** 制御入力のシーケンスを最適化して、 заданную経路を追従するためのアルゴリズムです。 -| 名前 | 型 | 説明 | -| -------------- | --------------------------------- | ------------------- | +| 名前 | 型 | 説明 | +| -------------- | --------------------------------- | ------------ | | `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断結果出力 | ## パラメータ ### ノードパラメータ -| 名称 | 型 | デフォルト値 | 説明 | -| ----------------- | ------ | ------------- | ------------------------------------------------------------------- | -| `topic` | 文字列 | - | ターゲット・トピック名 | -| `topic_type` | 文字列 | - | ターゲット・トピックの型 (トピックが変換でない場合に使用する) | -| `frame_id` | 文字列 | - | 変換親のフレーム ID (トピックが変換の場合に使用する) | -| `child_frame_id` | 文字列 | - | 変換子のフレーム ID (トピックが変換の場合に使用する) | -| `transient_local` | ブール | false | トピック・サブスクリプションの QoS ポリシー (Transient Local/Volatile) | -| `best_effort` | ブール | false | トピック・サブスクリプションの QoS ポリシー (Best Effort/Reliable) | -| `diag_name` | 文字列 | - | 診断の発行に使用される名前 | -| `update_rate` | double | 10.0 | タイマー・コールバック期間 [Hz] | +| 名称 | 型 | デフォルト値 | 説明 | +| ----------------- | ------ | ------------ | ---------------------------------------------------------------------- | +| `topic` | 文字列 | - | ターゲット・トピック名 | +| `topic_type` | 文字列 | - | ターゲット・トピックの型 (トピックが変換でない場合に使用する) | +| `frame_id` | 文字列 | - | 変換親のフレーム ID (トピックが変換の場合に使用する) | +| `child_frame_id` | 文字列 | - | 変換子のフレーム ID (トピックが変換の場合に使用する) | +| `transient_local` | ブール | false | トピック・サブスクリプションの QoS ポリシー (Transient Local/Volatile) | +| `best_effort` | ブール | false | トピック・サブスクリプションの QoS ポリシー (Best Effort/Reliable) | +| `diag_name` | 文字列 | - | 診断の発行に使用される名前 | +| `update_rate` | double | 10.0 | タイマー・コールバック期間 [Hz] | ### コアパラメータ -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------- | ------ | ------------- | ---------------------------------------------------------------------------------------------------------- | -| `warn_rate` | double | 0.5 | トピックレートがこの値を下回ると、トピックステータスは`WarnRate`になる | -| `error_rate` | double | 0.1 | トピックレートがこの値を下回ると、トピックステータスは`ErrorRate`になる | -| `timeout` | double | 1.0 | トピックサブスクリプションがこの時間を超えて停止すると、トピックステータスは`Timeout`になる | -| `window_size` | int | 10 | 周波数の計算用のターゲットトピックのウィンドウサイズ | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------- | ------ | ------------ | ------------------------------------------------------------------------------------------- | +| `warn_rate` | double | 0.5 | トピックレートがこの値を下回ると、トピックステータスは`WarnRate`になる | +| `error_rate` | double | 0.1 | トピックレートがこの値を下回ると、トピックステータスは`ErrorRate`になる | +| `timeout` | double | 1.0 | トピックサブスクリプションがこの時間を超えて停止すると、トピックステータスは`Timeout`になる | +| `window_size` | int | 10 | 周波数の計算用のターゲットトピックのウィンドウサイズ | ## 想定条件 / 制約 TBD. - diff --git a/system/velodyne_monitor/README.md b/system/velodyne_monitor/README.md index d4ccaf17ec2fa..5521e54916d4a 100644 --- a/system/velodyne_monitor/README.md +++ b/system/velodyne_monitor/README.md @@ -12,20 +12,20 @@ Velodyne LiDAR のステータスは `http://[ip_address]/cgi/{info, settings, s 異常ステータスと対応する診断ステータスのタイプは次のとおりです。 -| 異常状態 | 診断ステータス | -| -------------------------------------------------- | ---------------- | -| 異常なし | OK | -| 基板の上面の温度が低すぎる | ERROR | -| 基板の上面の温度が低い | WARN | -| 基板の上面の温度が高すぎる | ERROR | -| 基板の上面の温度が高い | WARN | -| 基板の下面の温度が低すぎる | ERROR | -| 基板の下面の温度が低い | WARN | -| 基板の下面の温度が高すぎる | ERROR | -| 基板の下面の温度が高い | WARN | -| モーターの回転数(rpm)が低すぎる | ERROR | -| モーターの回転数(rpm)が低い | WARN | -| 接続エラー(Velodyne LiDARステータスを取得できない) | ERROR | +| 異常状態 | 診断ステータス | +| ---------------------------------------------------- | -------------- | +| 異常なし | OK | +| 基板の上面の温度が低すぎる | ERROR | +| 基板の上面の温度が低い | WARN | +| 基板の上面の温度が高すぎる | ERROR | +| 基板の上面の温度が高い | WARN | +| 基板の下面の温度が低すぎる | ERROR | +| 基板の下面の温度が低い | WARN | +| 基板の下面の温度が高すぎる | ERROR | +| 基板の下面の温度が高い | WARN | +| モーターの回転数(rpm)が低すぎる | ERROR | +| モーターの回転数(rpm)が低い | WARN | +| 接続エラー(Velodyne LiDARステータスを取得できない) | ERROR | ## 入力 / 出力 @@ -35,27 +35,27 @@ Velodyne LiDAR のステータスは `http://[ip_address]/cgi/{info, settings, s ### 出力 -| Name | Type | 説明 | -| -------------- | --------------------------------- | ------------------- | +| Name | Type | 説明 | +| -------------- | --------------------------------- | -------- | | `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断出力 | ## パラメータ ### ノードパラメータ -| 名前 | 型 | デフォルト値 | 説明 | -| --------- | ------ | ------------- | -------------------------------------------------------- | -| `timeout` | double | 0.5 | Velodyne LiDAR のステータスを取得するための HTTP リクエストのタイムアウト [s] | +| 名前 | 型 | デフォルト値 | 説明 | +| --------- | ------ | ------------ | ----------------------------------------------------------------------------- | +| `timeout` | double | 0.5 | Velodyne LiDAR のステータスを取得するための HTTP リクエストのタイムアウト [s] | ### 主要パラメータ -| 名前 | 型 | デフォルト値 | 説明 | -| ----------------- | ------ | --------------- | ------------------------------------------------------------------------------------------------------------------------- | -| `ip_address` | 文字列 | "192.168.1.201" | ターゲット Velodyne LiDAR の IP アドレス | -| `temp_cold_warn` | double | -5.0 | Velodyne LiDAR の温度がこの値を下回ると、診断ステータスが WARN になります [°C] | -| `temp_cold_error` | double | -10.0 | Velodyne LiDAR の温度がこの値を下回ると、診断ステータスが ERROR になります [°C] | -| `temp_hot_warn` | double | 75.0 | Velodyne LiDAR の温度がこの値を超えると、診断ステータスが WARN になります [°C] | -| `temp_hot_error` | double | 80.0 | Velodyne LiDAR の温度がこの値を超えると、診断ステータスが ERROR になります [°C] | +| 名前 | 型 | デフォルト値 | 説明 | +| ----------------- | ------ | --------------- | ------------------------------------------------------------------------------------------------------------ | +| `ip_address` | 文字列 | "192.168.1.201" | ターゲット Velodyne LiDAR の IP アドレス | +| `temp_cold_warn` | double | -5.0 | Velodyne LiDAR の温度がこの値を下回ると、診断ステータスが WARN になります [°C] | +| `temp_cold_error` | double | -10.0 | Velodyne LiDAR の温度がこの値を下回ると、診断ステータスが ERROR になります [°C] | +| `temp_hot_warn` | double | 75.0 | Velodyne LiDAR の温度がこの値を超えると、診断ステータスが WARN になります [°C] | +| `temp_hot_error` | double | 80.0 | Velodyne LiDAR の温度がこの値を超えると、診断ステータスが ERROR になります [°C] | | `rpm_ratio_warn` | double | 0.80 | モーターの回転数率(= 現在の回転数 / デフォルト回転数)がこの値を下回ると、診断ステータスが WARN になります | | `rpm_ratio_error` | double | 0.70 | モーターの回転数率(= 現在の回転数 / デフォルト回転数)がこの値を下回ると、診断ステータスが ERROR になります | @@ -66,15 +66,14 @@ Velodyne LiDAR のステータスは `http://[ip_address]/cgi/{info, settings, s さらに、各モデルの `temp_hot_***` は動作温度より 20 高く設定されています。 現在、`VLP-16.param.yaml` が最も低い仕様であるためデフォルト引数として使用されています。 -| モデル名 | 設定名 | 実稼働温度 [℃] | -| --------------------- | -------------------------------------- | ------------------------- | -| VLP-16 | VLP-16.param.yaml | -10 ~ 60 | -| VLP-32C | VLP-32C.param.yaml | -20 ~ 60 | -| VLS-128 | VLS-128.param.yaml | -20 ~ 60 | -| Velarray M1600 | Velarray_M1600.param.yaml | -40 ~ 85 | -| HDL-32E | HDL-32E.param.yaml | -10 ~ 60 | +| モデル名 | 設定名 | 実稼働温度 [℃] | +| -------------- | ------------------------- | -------------- | +| VLP-16 | VLP-16.param.yaml | -10 ~ 60 | +| VLP-32C | VLP-32C.param.yaml | -20 ~ 60 | +| VLS-128 | VLS-128.param.yaml | -20 ~ 60 | +| Velarray M1600 | Velarray_M1600.param.yaml | -40 ~ 85 | +| HDL-32E | HDL-32E.param.yaml | -10 ~ 60 | ## 前提 / 制限事項 このノードは[http_client](https://github.com/microsoft/cpprestsdk)を使用し、結果をGETメソッドで要求します。このノードは結果を取得するのに数秒かかります。GETリクエストが成功しない場合はタイムアウト例外を生成します。これは頻繁に発生し、診断アグリゲータが出力を古くしたと判断します。そのため、この結果をレーザスキャナのエラーを判断するために使用しなくなり、レーザスキャナのステータスを確認するためにのみ監視することをお勧めします。 - diff --git a/tools/reaction_analyzer/README.md b/tools/reaction_analyzer/README.md index fac0822755ed6..f5cdb9d061365 100644 --- a/tools/reaction_analyzer/README.md +++ b/tools/reaction_analyzer/README.md @@ -40,7 +40,6 @@ reaction analyzerパッケージの主な目的は、ROSベースの自動運転 - 次の`reaction_chain`リストで、計画ノードと制御ノードのみを定義する必要があります。デフォルトのパラメータで、次のコマンドでテストを開始できます。 - ```bash ros2 launch reaction_analyzer reaction_analyzer.launch.xml running_mode:=planning_control vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit map_path:=[MAP_PATH] ``` @@ -54,7 +53,6 @@ ros2 launch reaction_analyzer reaction_analyzer.launch.xml running_mode:=plannin - zip ファイルを展開し、`.db3` ファイルのパスをパラメーター `path_bag_without_object` と `path_bag_with_object` に設定します。 - 以下のコマンドでテストを開始できます。 - ```bash ros2 launch reaction_analyzer reaction_analyzer.launch.xml running_mode:=perception_planning vehicle_model:=sample_vehicle sensor_model:=awsim_labs_sensor_kit map_path:=[MAP_PATH] ``` @@ -82,7 +80,6 @@ ros2 launch reaction_analyzer reaction_analyzer.launch.xml running_mode:=percept - AWSIM 環境を実行します。AWSIM のチュートリアルは [こちら](https://autowarefoundation.github.io/AWSIM/main/GettingStarted/QuickStartDemo/) からご覧いただけます。 - 次のコマンドで e2e_simulator を実行します。 - ```bash ros2 launch autoware_launch e2e_simulator.launch.xml vehicle_model:=sample_vehicle sensor_model:=awsim_labs_sensor_kit map_path:=[MAP_PATH] ``` @@ -100,7 +97,6 @@ ros2 launch autoware_launch e2e_simulator.launch.xml vehicle_model:=sample_vehic - パラメータが記録された後、テスト用の ROS バッグを記録する必要があります。ROS バッグを記録するには、次のコマンドを使用できます。 - ```bash ros2 bag record --all ``` @@ -121,30 +117,30 @@ ros2 bag record --all ## パラメータ -| 名称 | タイプ | 説明 | -| ----------------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `timer_period` | double | [s] メイン処理タイマーのピリオド。 | -| `test_iteration` | int | テストの繰り返し回数。 | -| `output_file_path` | string | テスト結果と統計情報を格納するディレクトリパス。 | -| `spawn_time_after_init` | double | [s] オブジェクトをスポーンする前の初期化後のタイムディレイ。 `perception_planning` モードでのみ有効。 | -| `spawn_distance_threshold` | double | [m] オブジェクトスポーンの距離しきい値。 `planning_control` モードでのみ有効。 | -| `poses.initialization_pose` | struct | 車両の初期姿勢で `x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。 `planning_control` モードでのみ有効。 | +| 名称 | タイプ | 説明 | +| ---------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `timer_period` | double | [s] メイン処理タイマーのピリオド。 | +| `test_iteration` | int | テストの繰り返し回数。 | +| `output_file_path` | string | テスト結果と統計情報を格納するディレクトリパス。 | +| `spawn_time_after_init` | double | [s] オブジェクトをスポーンする前の初期化後のタイムディレイ。 `perception_planning` モードでのみ有効。 | +| `spawn_distance_threshold` | double | [m] オブジェクトスポーンの距離しきい値。 `planning_control` モードでのみ有効。 | +| `poses.initialization_pose` | struct | 車両の初期姿勢で `x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。 `planning_control` モードでのみ有効。 | | `poses.entity_params` | struct | エンティティ(障害物など)のパラメータで `x`, `y`, `z`, `roll`, `pitch`, `yaw`, `x_dimension`, `y_dimension`, `z_dimension` を含む。 | -| `poses.goal_pose` | struct | 車両のゴール姿勢で `x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。 | -| `topic_publisher.path_bag_without_object` | string | オブジェクトなしの ROS バッグファイルへのパス。 `perception_planning` モードでのみ有効。 | -| `topic_publisher.path_bag_with_object` | string | オブジェクトありの ROS バッグファイルへのパス。 `perception_planning` モードでのみ有効。 | -| `topic_publisher.spawned_pointcloud_sampling_distance` | double | [m] スポーンされたオブジェクトの点群のサンプリング距離。 `planning_control` モードでのみ有効。 | -| `topic_publisher.dummy_perception_publisher_period` | double | [s] ダミー知覚データの公開周期。 `planning_control` モードのみ有効。 | -| `topic_publisher.pointcloud_publisher.pointcloud_publisher_type` | string | PointCloud2 メッセージの公開方法を定義します。上記で説明したモード。 | -| `topic_publisher.pointcloud_publisher.pointcloud_publisher_period` | double | [s] PointCloud2 メッセージの公開周期。 | -| `topic_publisher.pointcloud_publisher.publish_only_pointcloud_with_object` | bool | デフォルトは false。オブジェクトのある点群メッセージのみを公開します。 | -| `reaction_params.first_brake_params.debug_control_commands` | bool | デバッグ公開フラグ。 | -| `reaction_params.first_brake_params.control_cmd_buffer_time_interval` | double | [s] 制御コマンドのバッファー処理のタイムインターバル。 | -| `reaction_params.first_brake_params.min_number_descending_order_control_cmd` | int | ブレーキトリガーの降順制御コマンドの最小数。 | -| `reaction_params.first_brake_params.min_jerk_for_brake_cmd` | double | [m/s³] ブレーキコマンドを発行するための最小ジャーク値。 | -| `reaction_params.search_zero_vel_params.max_looking_distance` | double | [m] 軌道上でゼロ速度を探すための最大探索距離。 | -| `reaction_params.search_entity_params.search_radius` | double | [m] スポーンされたエンティティの検索半径。自己位置とエンティティ位置間の距離。 | -| `reaction_chain` | struct | トピックとそのトピックのメッセージタイプを持つノードのリスト。 | +| `poses.goal_pose` | struct | 車両のゴール姿勢で `x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。 | +| `topic_publisher.path_bag_without_object` | string | オブジェクトなしの ROS バッグファイルへのパス。 `perception_planning` モードでのみ有効。 | +| `topic_publisher.path_bag_with_object` | string | オブジェクトありの ROS バッグファイルへのパス。 `perception_planning` モードでのみ有効。 | +| `topic_publisher.spawned_pointcloud_sampling_distance` | double | [m] スポーンされたオブジェクトの点群のサンプリング距離。 `planning_control` モードでのみ有効。 | +| `topic_publisher.dummy_perception_publisher_period` | double | [s] ダミー知覚データの公開周期。 `planning_control` モードのみ有効。 | +| `topic_publisher.pointcloud_publisher.pointcloud_publisher_type` | string | PointCloud2 メッセージの公開方法を定義します。上記で説明したモード。 | +| `topic_publisher.pointcloud_publisher.pointcloud_publisher_period` | double | [s] PointCloud2 メッセージの公開周期。 | +| `topic_publisher.pointcloud_publisher.publish_only_pointcloud_with_object` | bool | デフォルトは false。オブジェクトのある点群メッセージのみを公開します。 | +| `reaction_params.first_brake_params.debug_control_commands` | bool | デバッグ公開フラグ。 | +| `reaction_params.first_brake_params.control_cmd_buffer_time_interval` | double | [s] 制御コマンドのバッファー処理のタイムインターバル。 | +| `reaction_params.first_brake_params.min_number_descending_order_control_cmd` | int | ブレーキトリガーの降順制御コマンドの最小数。 | +| `reaction_params.first_brake_params.min_jerk_for_brake_cmd` | double | [m/s³] ブレーキコマンドを発行するための最小ジャーク値。 | +| `reaction_params.search_zero_vel_params.max_looking_distance` | double | [m] 軌道上でゼロ速度を探すための最大探索距離。 | +| `reaction_params.search_entity_params.search_radius` | double | [m] スポーンされたエンティティの検索半径。自己位置とエンティティ位置間の距離。 | +| `reaction_chain` | struct | トピックとそのトピックのメッセージタイプを持つノードのリスト。 | ## 制限 @@ -181,4 +177,3 @@ ros2 bag record --all ## 将来の改善点 - 反応分析は、より多くの反応タイプを追加することで改善できます。現在サポートしているのは `FIRST_BRAKE`、`SEARCH_ZERO_VEL`、`SEARCH_ENTITY` だけです。メッセージ タイプごとに反応タイプを追加することで拡張できます。 - diff --git a/vehicle/autoware_accel_brake_map_calibrator/README.md b/vehicle/autoware_accel_brake_map_calibrator/README.md index 69a28ec7a4a36..5b3227d64aaff 100644 --- a/vehicle/autoware_accel_brake_map_calibrator/README.md +++ b/vehicle/autoware_accel_brake_map_calibrator/README.md @@ -10,14 +10,12 @@ Autoware の起動後、次のコマンドで `autoware_accel_brake_map_calibrator` を実行し、自律走行を行います。注:自律走行中に同じ車両インターフェイスを使用できる場合は、手動走行でもデータを収集できます(例:ジョイスティックの使用)。 - ```sh ros2 launch autoware_accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true ``` もしrosbagファイルを使用したい場合は、以下のコマンドを実行してください。 - ```sh ros2 launch autoware_accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true use_sim_time:=true ros2 bag play --clock @@ -51,14 +49,13 @@ ros2 bag play --clock `accel brake map_calibrator` はキャリブレーションのステータスに応じて診断メッセージを発行します。診断タイプ `WARN` は、現在のアクセル/ブレーキマップが不正確であると推定されることを示します。この状況では、アクセル/ブレーキマップの再キャリブレーションを実行することを強くお勧めします。 -| 状態 | 診断タイプ | 診断メッセージ | 説明 | -| ----------------------- | ---------------- | ------------------------------------------------- | -------------------------------------------- | -| キャリブレーション不要 | `OK` | "OK" | | -| キャリブレーション必要 | `WARN` | "アクセル/ブレーキマップのキャリブレーションが必要です。" | 現在のアクセル/ブレーキマップの精度は低いかもしれません。 | +| 状態 | 診断タイプ | 診断メッセージ | 説明 | +| ---------------------- | ---------- | --------------------------------------------------------- | --------------------------------------------------------- | +| キャリブレーション不要 | `OK` | "OK" | | +| キャリブレーション必要 | `WARN` | "アクセル/ブレーキマップのキャリブレーションが必要です。" | 現在のアクセル/ブレーキマップの精度は低いかもしれません。 | この診断ステータスは、以下のROSトピックでも確認できます。 - ```sh ros2 topic echo /accel_brake_map_calibrator/output/update_suggest ``` @@ -89,7 +86,6 @@ ros2 topic echo /accel_brake_map_calibrator/output/update_suggest 以下のコマンドで、較正で使用されたデータのプロットを表示します。各速度範囲のプロットでは、ペダルと加速度の関係が分布表示されており、ピッチ角に応じて色付けされた生のデータポイントが含まれています。 - ```sh ros2 run autoware_accel_brake_map_calibrator view_plot.py ``` @@ -104,7 +100,6 @@ ros2 run autoware_accel_brake_map_calibrator view_plot.py 各地図セル内のすべてのデータについて。 - ```sh ros2 run autoware_accel_brake_map_calibrator view_statistics.py ``` @@ -113,7 +108,6 @@ ros2 run autoware_accel_brake_map_calibrator view_statistics.py 次のコマンドでいつでも加速およびブレーキマップを保存できます。 - ```sh ros2 service call /accel_brake_map_calibrator/update_map_dir tier4_vehicle_msgs/srv/UpdateAccelBrakeMap "path: ''" ``` @@ -122,48 +116,48 @@ AutowareでAccel_map.csv/brake_map.csvを読み込むデフォルトのディレ 1.「パネル」タブをクリックして、AccelBrakeMapCalibratorButtonPanelを選択します。 - ![add_panel](./media/add_panel.png) +![add_panel](./media/add_panel.png) 2.パネルを選択すると、ボタンがRVizの下部に表示されます。 - ![calibrator_button_panel](./media/calibrator_button_panel.png) +![calibrator_button_panel](./media/calibrator_button_panel.png) 3.ボタンを押すと、accel /ブレーキマップが保存されます。(キャリブレーターノードが実行されていない場合など、特定の状況ではボタンを押せません。) - ![push_calibration_button](./media/push_calibration_button.png) +![push_calibration_button](./media/push_calibration_button.png) ## パラメータ ## システムパラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -| :-----------------------------------| :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- | -| update_method | string | マップのキャリブレーション手法を選択できます。"update_offset_each_cell" は、マップ上の各グリッドセルのオフセットを計算します。 "update_offset_total" は、マップの合計オフセットを計算します。 | "update_offset_each_cell" | -| get_pitch_method | string | "tf": tf からピッチを取得する、"none": ピッチ検証とピッチ補正を実行できません。 | "tf" | -| pedal_accel_graph_output | bool | true の場合、ペダルアクセルのログを出力します。 | true | -| progress_file_output | bool | true の場合、更新プロセスのログと CSV ファイルを出力します。 | false | -| default_map_dir | str | デフォルトのマップディレクトリ | [autoware_raw_vehicle_cmd_converter のディレクトリ]/data/default/ | -| calibrated_map_dir | str | キャリブレーションされたマップディレクトリ | [autoware_accel_brake_map_calibrator のディレクトリ]/config/ | -| update_hz | double | 更新の Hz | 10.0 | +| 名称 | タイプ | 説明 | デフォルト値 | +| :----------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- | +| update_method | string | マップのキャリブレーション手法を選択できます。"update_offset_each_cell" は、マップ上の各グリッドセルのオフセットを計算します。 "update_offset_total" は、マップの合計オフセットを計算します。 | "update_offset_each_cell" | +| get_pitch_method | string | "tf": tf からピッチを取得する、"none": ピッチ検証とピッチ補正を実行できません。 | "tf" | +| pedal_accel_graph_output | bool | true の場合、ペダルアクセルのログを出力します。 | true | +| progress_file_output | bool | true の場合、更新プロセスのログと CSV ファイルを出力します。 | false | +| default_map_dir | str | デフォルトのマップディレクトリ | [autoware_raw_vehicle_cmd_converter のディレクトリ]/data/default/ | +| calibrated_map_dir | str | キャリブレーションされたマップディレクトリ | [autoware_accel_brake_map_calibrator のディレクトリ]/config/ | +| update_hz | double | 更新の Hz | 10.0 | ## アルゴリズムパラメータ -| 名称 | 種別 | 説明 | デフォルト値 | -| :----------------------- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | -| initial_covariance | double | 初期加速度マップの共分散 (共分散が大きいほど更新速度が向上) | 0.05 | -| velocity_min_threshold | double | これより小さい速度は更新に使用されない。 | 0.1 | -| velocity_diff_threshold | double | 速度データがこのしきい値よりグリッド参照速度 (中央値) から離れている場合、関連データは更新に使用されない。 | 0.556 | -| max_steer_threshold | double | ステアリング角度がこの値より大きい場合、関連データは更新に使用されない。 | 0.2 | -| max_pitch_threshold | double | ピッチ角度がこの値より大きい場合、関連データは更新に使用されない。 | 0.02 | -| max_jerk_threshold | double | 自車加速度から計算された自車ジャークがこの値より大きい場合、関連データは更新に使用されない。 | 0.7 | -| pedal_velocity_thresh | double | ペダル移動速度がこの値より大きい場合、関連データは更新に使用されない。 | 0.15 | -| pedal_diff_threshold | double | 現在ペダル値がこのしきい値より前の値から離れている場合、関連データは更新に使用されない。 | 0.03 | -| max_accel | double | 速度ソースから計算される加速度の最大値。 | 5.0 | -| min_accel | double | 速度ソースから計算される加速度の最小値。 | -5.0 | -| pedal_to_accel_delay | double | 加速度への actuation_cmd との間の遅延時間 (更新ロジックで考慮)。 | 0.3 | -| update_suggest_thresh | double | RMSE 比率がこの値になる更新の提案フラグ (RMSE 比率: [新しいマップの RMSE] / [元のマップの RMSE])。 | 0.7 | -| max_data_count | int | 視覚化用。各グリッドのデータ数がこの値になると、グリッドの色が赤になる。 | 100 | -| accel_brake_value_source | string | 加速度/ブレーキソースとして actuation_status または actuation_command を使用するかどうか。 | status | +| 名称 | 種別 | 説明 | デフォルト値 | +| :----------------------- | :----- | :--------------------------------------------------------------------------------------------------------- | :----------- | +| initial_covariance | double | 初期加速度マップの共分散 (共分散が大きいほど更新速度が向上) | 0.05 | +| velocity_min_threshold | double | これより小さい速度は更新に使用されない。 | 0.1 | +| velocity_diff_threshold | double | 速度データがこのしきい値よりグリッド参照速度 (中央値) から離れている場合、関連データは更新に使用されない。 | 0.556 | +| max_steer_threshold | double | ステアリング角度がこの値より大きい場合、関連データは更新に使用されない。 | 0.2 | +| max_pitch_threshold | double | ピッチ角度がこの値より大きい場合、関連データは更新に使用されない。 | 0.02 | +| max_jerk_threshold | double | 自車加速度から計算された自車ジャークがこの値より大きい場合、関連データは更新に使用されない。 | 0.7 | +| pedal_velocity_thresh | double | ペダル移動速度がこの値より大きい場合、関連データは更新に使用されない。 | 0.15 | +| pedal_diff_threshold | double | 現在ペダル値がこのしきい値より前の値から離れている場合、関連データは更新に使用されない。 | 0.03 | +| max_accel | double | 速度ソースから計算される加速度の最大値。 | 5.0 | +| min_accel | double | 速度ソースから計算される加速度の最小値。 | -5.0 | +| pedal_to_accel_delay | double | 加速度への actuation_cmd との間の遅延時間 (更新ロジックで考慮)。 | 0.3 | +| update_suggest_thresh | double | RMSE 比率がこの値になる更新の提案フラグ (RMSE 比率: [新しいマップの RMSE] / [元のマップの RMSE])。 | 0.7 | +| max_data_count | int | 視覚化用。各グリッドのデータ数がこの値になると、グリッドの色が赤になる。 | 100 | +| accel_brake_value_source | string | 加速度/ブレーキソースとして actuation_status または actuation_command を使用するかどうか。 | status | ## テストユーティリティースクリプト @@ -177,7 +171,6 @@ AutowareでAccel_map.csv/brake_map.csvを読み込むデフォルトのディレ `accel/brake_tester.py`は、CLIからターゲットの加速/制動コマンドを受け取ります。ターゲット値を`actuation_cmd_publisher.py`に送信し、これが`ActuationCmd`を生成します。次のコマンドを別のターミナルで実行して、これらのスクリプトを実行でき、以下のスクリーンショットのようになります。 - ```bash ros2 run autoware_accel_brake_map_calibrator accel_tester.py ros2 run autoware_accel_brake_map_calibrator brake_tester.py @@ -196,13 +189,13 @@ ros2 run autoware_accel_brake_map_calibrator actuation_cmd_publisher.py #### パラメーター -| 名 | 説明 | デフォルト値 | -| ---------------------- | ---------------------------- | ------------- | -| velocity_min_threshold | 最小速度を除外 | 0.1 | -| max_steer_threshold | 大きなステアリング角を除外 | 0.2 | -| max_pitch_threshold | 大きなピッチ角を除外 | 0.02 | -| max_jerk_threshold | 大きなジャークを除外 | 0.7 | -| pedal_velocity_thresh | 大きなペダリング速度を除外 | 0.15 | +| 名 | 説明 | デフォルト値 | +| ---------------------- | -------------------------- | ------------ | +| velocity_min_threshold | 最小速度を除外 | 0.1 | +| max_steer_threshold | 大きなステアリング角を除外 | 0.2 | +| max_pitch_threshold | 大きなピッチ角を除外 | 0.02 | +| max_jerk_threshold | 大きなジャークを除外 | 0.7 | +| pedal_velocity_thresh | 大きなペダリング速度を除外 | 0.15 | ### update_offset_each_cell @@ -216,10 +209,10 @@ ros2 run autoware_accel_brake_map_calibrator actuation_cmd_publisher.py データの選択は、次のしきい値によって決定されます。 -| 名前 | 既定値 | -| ------------------- | -------- | -| velocity_diff_threshold | 0.556 | -| pedal_diff_threshold | 0.03 | +| 名前 | 既定値 | +| ----------------------- | ------ | +| velocity_diff_threshold | 0.556 | +| pedal_diff_threshold | 0.03 | #### フォーミュラの更新 @@ -233,13 +226,13 @@ $$ #### 変数 -| 変数名 | 記号 | -|---|---| -| 共分散 | $p[n-1]$ | -| マップオフセット | $\theta[n]$ | +| 変数名 | 記号 | +| ----------------- | ----------- | +| 共分散 | $p[n-1]$ | +| マップオフセット | $\theta[n]$ | | forgetting factor | $\lambda$ | -| フィー | $x(=1)$ | -| 測定加速度 | $y$ | +| フィー | $x(=1)$ | +| 測定加速度 | $y$ | ### update_offset_four_cell_around [1] @@ -262,4 +255,3 @@ RLS(再帰的最小二乗法)により、新規取得データ周囲の 4 [1] [Gabrielle Lochrie, Michael Doljevic, Mario Nona, Yongsoon Yoon, Anti-Windup Recursive Least Squares Method for Adaptive Lookup Tables with Application to Automotive Powertrain Control Systems, IFAC-PapersOnLine, Volume 54, Issue 20, 2021, Pages 840-845](https://www.sciencedirect.com/science/article/pii/S240589632102320X) - diff --git a/vehicle/autoware_external_cmd_converter/README.md b/vehicle/autoware_external_cmd_converter/README.md index 32ed476375510..b45581cd767e1 100644 --- a/vehicle/autoware_external_cmd_converter/README.md +++ b/vehicle/autoware_external_cmd_converter/README.md @@ -20,12 +20,12 @@ $$ acc_{ref} = Acc(ペダル_d, v_{x,現在}). $$ -| パラメーター | 説明 | -| --------------- | ----------------------------------------------------------------------------------------- | +| パラメーター | 説明 | +| --------------- | --------------------------------------------------------------------------- | | $throttle_d$ | 外部制御コマンドのアクセル値 (`~/in/external_control_cmd.control.throttle`) | -| $brake_d$ | 外部制御コマンドのブレーキ値 (`~/in/external_control_cmd.control.brake`) | -| $v_{x,current}$ | 現在縦速度 (`~/in/odometry.twist.twist.linear.x`) | -| Acc | accel_brake_map | +| $brake_d$ | 外部制御コマンドのブレーキ値 (`~/in/external_control_cmd.control.brake`) | +| $v_{x,current}$ | 現在縦速度 (`~/in/odometry.twist.twist.linear.x`) | +| Acc | accel_brake_map | #### リファレンス速度 @@ -36,39 +36,38 @@ v_{ref} = v_{x,current} + k_{v_{ref}} \cdot \text{sign}_{gear} \cdot acc_{ref}. $$ -| パラメータ | 説明 | -| -------------------- | --------------------------------------------------------------------------- | -| $acc_{ref}$ | 基準加速度 | -| $k_{v_{ref}}$ | 基準速度ゲイン | +| パラメータ | 説明 | +| -------------------- | ---------------------------------------------------------------------- | +| $acc_{ref}$ | 基準加速度 | +| $k_{v_{ref}}$ | 基準速度ゲイン | | $\text{sign}_{gear}$ | ギアコマンド (`~/in/shift_cmd`) (Drive/Low: 1, Reverse: -1, その他: 0) | ## 入力トピック -| 名称 | タイプ | 説明 | -| --------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `~/in/external_control_cmd` | tier4_external_api_msgs::msg::ControlCommand | 目標`スロットル/ブレーキ/操舵角/操舵角速度`は、目的制御コマンドを計算するために必要。 | -| `~/input/shift_cmd"` | autoware_vehicle_msgs::GearCommand | 現在のギア状態。 | -| `~/input/emergency_stop` | tier4_external_api_msgs::msg::Heartbeat | 外部コマンドに対する緊急ハートビート。 | -| `~/input/current_gate_mode` | tier4_control_msgs::msg::GateMode | ゲートモード用のトピック。 | -| `~/input/odometry` | navigation_msgs::Odometry | オドメトリ内のツイストトピックが使用される。 | +| 名称 | タイプ | 説明 | +| --------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------- | +| `~/in/external_control_cmd` | tier4_external_api_msgs::msg::ControlCommand | 目標`スロットル/ブレーキ/操舵角/操舵角速度`は、目的制御コマンドを計算するために必要。 | +| `~/input/shift_cmd"` | autoware_vehicle_msgs::GearCommand | 現在のギア状態。 | +| `~/input/emergency_stop` | tier4_external_api_msgs::msg::Heartbeat | 外部コマンドに対する緊急ハートビート。 | +| `~/input/current_gate_mode` | tier4_control_msgs::msg::GateMode | ゲートモード用のトピック。 | +| `~/input/odometry` | navigation_msgs::Odometry | オドメトリ内のツイストトピックが使用される。 | ## 出力トピック -| 名称 | タイプ | 説明 | -| ------------------- | ----------------------------------- | ------------------------------------------------------------------ | +| 名称 | タイプ | 説明 | +| ------------------- | ----------------------------------- | -------------------------------------------------- | | `~/out/control_cmd` | autoware_control_msgs::msg::Control | 外部コマンドから変換したアッカーマン型制御コマンド | ## パラメータ -| パラメータ | タイプ | 説明 | -| ------------------------- | ------ | ----------------------------------------------------- | -| `ref_vel_gain_` | double | 基準速度ゲイン | -| `timer_rate` | double | タイマーの更新レート | -| `wait_for_first_topic` | double | 最初のトピック受信後にタイムアウトチェックを行う場合 | +| パラメータ | タイプ | 説明 | +| ------------------------- | ------ | ------------------------------------------------------ | +| `ref_vel_gain_` | double | 基準速度ゲイン | +| `timer_rate` | double | タイマーの更新レート | +| `wait_for_first_topic` | double | 最初のトピック受信後にタイムアウトチェックを行う場合 | | `control_command_timeout` | double | 制御コマンドのタイムアウトチェック | | `emergency_stop_timeout` | double | エマージェンシーストップコマンドのタイムアウトチェック | ## 制限事項 未定 - diff --git a/vehicle/autoware_raw_vehicle_cmd_converter/README.md b/vehicle/autoware_raw_vehicle_cmd_converter/README.md index 8939a0c7f9071..fe07738f28d59 100644 --- a/vehicle/autoware_raw_vehicle_cmd_converter/README.md +++ b/vehicle/autoware_raw_vehicle_cmd_converter/README.md @@ -34,7 +34,6 @@ $$ その車両の場合、係数は次のとおりでした。 - ```yaml vgr_coef_a: 15.713 vgr_coef_b: 0.053 @@ -47,18 +46,18 @@ vgr_coef_c: 0.042 ## 入力トピック -| 名称 | タイプ | 説明 | -| -------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `~/input/control_cmd` | `autoware_control_msgs::msg::Control` | ターゲットの速度/加速度/ステアリング角度/ステアリング角度速度は、アクチュエータコマンドを計算するために必要です。 | -| `~/input/steering"` | `autoware_vehicle_msgs::msg::SteeringReport` | `convert_actuation_to_steering_status: false` の場合のみサブスクライブします。ステアリングフィードバック制御に使用されるステアリングの現在の状態 | -| `~/input/odometry` | `navigation_msgs::Odometry` | オドメトリの `twist` トピックが使用されます。 | +| 名称 | タイプ | 説明 | +| -------------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `~/input/control_cmd` | `autoware_control_msgs::msg::Control` | ターゲットの速度/加速度/ステアリング角度/ステアリング角度速度は、アクチュエータコマンドを計算するために必要です。 | +| `~/input/steering"` | `autoware_vehicle_msgs::msg::SteeringReport` | `convert_actuation_to_steering_status: false` の場合のみサブスクライブします。ステアリングフィードバック制御に使用されるステアリングの現在の状態 | +| `~/input/odometry` | `navigation_msgs::Odometry` | オドメトリの `twist` トピックが使用されます。 | | `~/input/actuation_status` | `tier4_vehicle_msgs::msg::ActuationStatus` | アクチュエータステータスは、車両側に送信されるのと同じタイプのステータスを受信すると想定されています。たとえば、スロットル/ブレーキペダル/ステアリングホイール角度が送信された場合、同じタイプのステータスが受信されます。ステアリングホイール角度の場合は、このノードでステアリングタイヤ角度と VGR の計算に使用されます。 | ## 出力トピック -| 名称 | タイプ | 説明 | -| -------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | -| `~/output/actuation_cmd` | `tier4_vehicle_msgs::msg::ActuationCommandStamped` | 車両が機械的入力を適用するためのアクチュエーションコマンド | +| 名称 | タイプ | 説明 | +| -------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `~/output/actuation_cmd` | `tier4_vehicle_msgs::msg::ActuationCommandStamped` | 車両が機械的入力を適用するためのアクチュエーションコマンド | | `~/output/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | `convert_actuation_to_steering_status: true` の場合のみ公開されます。ステアリングタイヤ角度はステアリングホイール角度から計算されて公開されます。 | ## パラメータ @@ -68,4 +67,3 @@ vgr_coef_c: 0.042 ## 制限事項 現在のフィードバック実装は、操舵制御のみに適用されます。 - From b57f8e80819e19584e74cf4c003f40f586174d96 Mon Sep 17 00:00:00 2001 From: morimoto Date: Mon, 2 Dec 2024 14:04:49 +0900 Subject: [PATCH 4/4] update --- README.md | 168 ++-- common/README.md | 9 +- common/autoware_ad_api_specs/README.md | 3 +- .../README.md | 7 +- common/autoware_geography_utils/README.md | 3 +- common/autoware_grid_map_utils/README.md | 47 +- common/autoware_interpolation/README.md | 50 +- common/autoware_kalman_filter/README.md | 5 +- common/autoware_motion_utils/README.md | 83 +- .../README.md | 4 +- .../README.md | 29 +- .../autoware_overlay_rviz_plugin/README.md | 53 +- .../autoware_perception_rviz_plugin/README.md | 238 +----- common/autoware_point_types/README.md | 122 +-- common/autoware_signal_processing/README.md | 11 +- common/autoware_test_utils/README.md | 62 +- common/autoware_universe_utils/README.md | 58 +- common/bag_time_manager_rviz_plugin/README.md | 13 +- common/component_interface_utils/README.md | 101 +-- common/glog_component/README.md | 10 +- common/tier4_adapi_rviz_plugin/README.md | 25 +- common/tier4_api_utils/README.md | 5 +- .../tier4_camera_view_rviz_plugin/README.md | 19 +- common/tier4_datetime_rviz_plugin/README.md | 15 +- .../tier4_localization_rviz_plugin/README.md | 94 +-- common/tier4_planning_rviz_plugin/README.md | 384 +++------ common/tier4_state_rviz_plugin/README.md | 111 +-- common/tier4_system_rviz_plugin/README.md | 11 +- .../tier4_traffic_light_rviz_plugin/README.md | 17 +- common/tier4_vehicle_rviz_plugin/README.md | 111 ++- common/traffic_light_utils/README.md | 6 +- common/tvm_utility/README.md | 124 +-- common/tvm_utility/artifacts/README.md | 6 +- .../README.md | 322 +++++--- control/autoware_control_validator/README.md | 88 +- .../autoware_external_cmd_selector/README.md | 45 +- control/autoware_joy_controller/README.md | 202 +++-- .../autoware_lane_departure_checker/README.md | 252 ++++-- .../autoware_mpc_lateral_controller/README.md | 536 +++++------- .../README.md | 122 +-- .../README.md | 194 +++-- .../README.md | 366 +++++---- control/autoware_pure_pursuit/README.md | 19 +- control/autoware_shift_decider/README.md | 79 +- .../README.md | 413 +++++----- .../README.md | 55 +- .../README.md | 47 +- control/autoware_vehicle_cmd_gate/README.md | 226 +++--- .../control_performance_analysis/README.md | 140 ++-- control/predicted_path_checker/README.md | 127 ++- .../autoware_control_evaluator/README.md | 15 +- evaluator/autoware_evaluator_utils/README.md | 5 +- .../autoware_planning_evaluator/README.md | 80 +- evaluator/diagnostic_converter/README.md | 50 +- evaluator/kinematic_evaluator/README.md | 3 +- evaluator/localization_evaluator/README.md | 7 +- .../perception_online_evaluator/README.md | 203 +++-- launch/tier4_autoware_api_launch/README.md | 14 +- launch/tier4_control_launch/README.md | 16 +- launch/tier4_localization_launch/README.md | 12 +- launch/tier4_map_launch/README.md | 12 +- launch/tier4_perception_launch/README.md | 6 +- launch/tier4_planning_launch/README.md | 12 +- launch/tier4_sensing_launch/README.md | 16 +- launch/tier4_simulator_launch/README.md | 12 +- launch/tier4_system_launch/README.md | 10 +- launch/tier4_vehicle_launch/README.md | 29 +- localization/autoware_ekf_localizer/README.md | 191 +++-- .../autoware_geo_pose_projector/README.md | 31 +- localization/autoware_gyro_odometer/README.md | 104 +-- .../README.md | 45 +- .../autoware_ar_tag_based_localizer/README.md | 137 ++-- .../autoware_lidar_marker_localizer/README.md | 131 ++- .../README.md | 119 +-- .../autoware_localization_util/README.md | 5 +- .../autoware_ndt_scan_matcher/README.md | 388 ++++----- localization/autoware_pose2twist/README.md | 147 +--- .../README.md | 188 ++--- .../autoware_pose_estimator_arbiter/README.md | 317 +++----- .../example_rule/README.md | 74 +- .../autoware_pose_initializer/README.md | 113 +-- .../README.md | 241 +++--- localization/autoware_stop_filter/README.md | 92 +-- localization/autoware_twist2accel/README.md | 70 +- localization/yabloc/README.md | 79 +- localization/yabloc/yabloc_common/README.md | 242 +++--- .../yabloc/yabloc_image_processing/README.md | 594 +++++--------- localization/yabloc/yabloc_monitor/README.md | 92 +-- .../yabloc/yabloc_particle_filter/README.md | 408 ++++------ .../yabloc/yabloc_pose_initializer/README.md | 138 ++-- map/autoware_map_height_fitter/README.md | 33 +- map/autoware_map_projection_loader/README.md | 148 +++- map/autoware_map_tf_generator/README.md | 78 +- map/map_loader/README.md | 177 +--- map/util/lanelet2_map_preprocessor/README.md | 1 + perception/autoware_bytetrack/README.md | 237 ++---- perception/autoware_cluster_merger/README.md | 196 ++--- .../README.md | 386 +++++---- .../README.md | 182 ++--- .../README.md | 157 +--- .../README.md | 21 +- .../autoware_detection_by_tracker/README.md | 138 ++-- .../autoware_elevation_map_loader/README.md | 232 +++--- .../autoware_euclidean_cluster/README.md | 165 ++-- .../autoware_ground_segmentation/README.md | 127 ++- .../README.md | 127 +-- .../README.md | 271 +++--- .../autoware_lidar_centerpoint/README.md | 347 ++++---- .../autoware_lidar_transfusion/README.md | 191 ++--- .../autoware_map_based_prediction/README.md | 373 ++++----- .../autoware_multi_object_tracker/README.md | 73 +- perception/autoware_object_merger/README.md | 117 ++- .../autoware_object_range_splitter/README.md | 123 ++- .../README.md | 8 +- .../README.md | 122 ++- .../README.md | 52 +- .../README.md | 46 +- .../README.md | 111 ++- .../README.md | 85 +- .../autoware_radar_object_tracker/README.md | 161 ++-- .../README.md | 96 ++- .../autoware_shape_estimation/README.md | 215 ++--- .../autoware_simple_object_merger/README.md | 54 +- .../autoware_tensorrt_classifier/README.md | 5 +- perception/autoware_tensorrt_common/README.md | 5 +- perception/autoware_tensorrt_yolox/README.md | 216 ++--- .../autoware_tracking_object_merger/README.md | 119 +-- .../autoware_traffic_light_arbiter/README.md | 104 +-- .../README.md | 413 +++++----- .../README.md | 102 +-- .../README.md | 52 +- .../README.md | 275 +------ .../README.md | 41 +- .../README.md | 221 ++--- perception/perception_utils/README.md | 3 +- planning/README.md | 96 ++- planning/autoware_costmap_generator/README.md | 86 +- .../README.md | 319 +------- planning/autoware_freespace_planner/README.md | 148 ++-- .../README.md | 80 +- planning/autoware_mission_planner/README.md | 215 +++-- .../README.md | 13 +- .../README.md | 485 +++++------ .../autoware_obstacle_stop_planner/README.md | 306 ++++--- planning/autoware_path_optimizer/README.md | 249 +++--- planning/autoware_path_smoother/README.md | 7 +- .../autoware_planning_test_manager/README.md | 48 +- .../README.md | 22 +- .../autoware_planning_validator/README.md | 120 ++- .../README.md | 43 +- planning/autoware_route_handler/README.md | 17 +- planning/autoware_rtc_interface/README.md | 72 +- planning/autoware_scenario_selector/README.md | 39 +- .../README.md | 81 +- .../README.md | 159 ++-- planning/autoware_velocity_smoother/README.md | 503 +++++------- .../README.md | 35 +- .../README.md | 150 ++-- .../README.md | 402 +++++---- .../README.md | 768 +++++++++--------- .../autoware_behavior_path_planner/README.md | 322 +++----- .../README.md | 75 +- .../README.md | 30 +- .../README.md | 525 ++++++------ .../README.md | 538 ++++++------ .../README.md | 46 +- .../README.md | 332 ++++---- .../README.md | 56 +- .../README.md | 522 ++++++------ .../README.md | 60 +- .../README.md | 42 +- .../README.md | 249 +++--- .../README.md | 101 +-- .../README.md | 5 +- .../README.md | 250 +++--- .../README.md | 47 +- .../README.md | 58 +- .../README.md | 48 +- .../README.md | 69 +- .../README.md | 96 +-- .../README.md | 7 +- .../README.md | 103 ++- .../README.md | 265 +++--- .../README.md | 174 ++-- .../README.md | 98 +-- .../autoware_bezier_sampler/README.md | 5 +- .../autoware_frenet_planner/README.md | 5 +- .../autoware_path_sampler/README.md | 186 ++--- .../autoware_sampler_common/README.md | 9 +- sensing/autoware_gnss_poser/README.md | 141 ++-- sensing/autoware_image_diagnostics/README.md | 181 ++--- .../README.md | 100 +-- sensing/autoware_imu_corrector/README.md | 131 ++- sensing/autoware_pcl_extensions/README.md | 27 +- .../README.md | 168 ++-- .../README.md | 30 +- .../README.md | 28 +- .../autoware_radar_threshold_filter/README.md | 56 +- .../README.md | 108 +-- .../livox/autoware_livox_tag_filter/README.md | 133 ++- sensing/vehicle_velocity_converter/README.md | 103 ++- simulator/autoware_carla_interface/README.md | 253 ++---- .../dummy_perception_publisher/README.md | 113 ++- simulator/fault_injection/README.md | 143 +--- .../learning_based_vehicle_model/README.md | 72 +- simulator/simple_planning_simulator/README.md | 233 +++--- .../tier4_dummy_object_rviz_plugin/README.md | 392 +++------ simulator/vehicle_door_simulator/README.md | 3 +- system/autoware_component_monitor/README.md | 44 +- system/autoware_default_adapi/README.md | 24 +- .../README.md | 131 ++- system/bluetooth_monitor/README.md | 73 +- system/component_state_monitor/README.md | 5 +- .../ad_api_adaptors/README.md | 43 +- .../automatic_pose_initializer/README.md | 13 +- system/diagnostic_graph_aggregator/README.md | 71 +- system/diagnostic_graph_utils/README.md | 13 +- system/dummy_diag_publisher/README.md | 43 +- system/dummy_infrastructure/README.md | 40 +- system/duplicated_node_checker/README.md | 32 +- .../mrm_comfortable_stop_operator/README.md | 129 ++- system/mrm_emergency_stop_operator/README.md | 88 +- system/mrm_handler/README.md | 102 ++- system/system_diagnostic_monitor/README.md | 21 +- system/system_monitor/README.md | 233 +++--- system/topic_state_monitor/README.md | 136 ++-- system/velodyne_monitor/README.md | 116 +-- tools/reaction_analyzer/README.md | 169 ++-- .../README.md | 227 +++--- .../autoware_external_cmd_converter/README.md | 75 +- .../README.md | 52 +- 231 files changed, 13032 insertions(+), 16140 deletions(-) diff --git a/README.md b/README.md index a77c2e5d53c97..0112cdacaaa4b 100644 --- a/README.md +++ b/README.md @@ -1,144 +1,94 @@ # Autoware Universe -## Autoware Universeへようこそ +## Autoware Universe へようこそ -Autoware UniverseはAutowareエコシステムの基礎的な柱として、自動運転技術における中核的な機能を強化する重要な役割を果たします。 -このリポジトリはAutoware Core/Universeコンセプトの中核的な要素であり、自動運転車の機能を大幅に拡張する広範なパッケージを管理しています。 +Autoware Universe は自動運転技術の中核機能を強化において重要な役割を果たし、Autoware エコシステムの基盤を担っています。 +このリポジトリは Autoware Core/Universe のコンセプトの中心的な要素であり、自動運転車両の機能を大幅に拡張する幅広いパッケージを管理しています。 ![autoware_universe_front](docs/assets/images/autoware_universe_front.png) -## 入門 +## はじめに -Autowareの広大な世界に飛び込み、Autoware Universeが全体像の中でどのように適合するかを理解するには、[Autowareドキュメント](https://autowarefoundation.github.io/autoware-documentation/)から始めることをお勧めします。このリソースはAutowareエコシステムの包括的な概要を提供し、そのコンポーネント、機能、開発の始め方を説明しています。 +Autoware の広大な世界に飛び込み、Autoware Universe がどのように全体像に当てはまるかを理解するには、[Autoware ドキュメント](https://autowarefoundation.github.io/autoware-documentation/) から始めることをお勧めします。このリソースは、Autoware エコシステムの包括的な概要を提供し、そのコンポーネント、機能、開発の開始方法について案内します。 -### Autoware Universeのドキュメントを探る +### Autoware Universe ドキュメントの探査 -Autoware Universeコンポーネントの詳細を探りたい場合は、MKDocsで展開された[Autoware Universeのドキュメント](https://autowarefoundation.github.io/autoware.universe/)で詳細な情報を見つけることができます。 +Autoware Universe コンポーネントの詳細を探求したい場合は、MKDocs で展開された [Autoware Universe ドキュメント](https://autowarefoundation.github.io/autoware.universe/) で詳細な洞察が得られます。 -## コードカバレッジメトリクス +## コードカバレッジの測定値 -以下の表は、Autoware Universe全体およびサブコンポーネントのそれぞれのカバレッジ率を示しています。 +以下の表は、Autoware Universe 全体とサブコンポーネントのそれぞれのカバレッジ率を示しています。 -### プロジェクト全体のカバレッジ +### プロジェクト全体のカバー率 [![codecov](https://codecov.io/github/autowarefoundation/autoware.universe/graph/badge.svg?token=KQP68YQ65D)](https://codecov.io/github/autowarefoundation/autoware.universe) -### コンポーネントごとのカバレッジ +### コンポーネントごとのカバー率 -バッジをクリックしてcodecovのウェブサイトに移動すると、詳細を確認できます。 +バッジをクリックして codecov Web サイトにアクセスすることで、詳細を確認できます。 -| コンポーネント | 対応範囲 | -| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Common | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Common%20Packages&query=$.[0].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Common%20Packages) | -| Control | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Control%20Packages&query=$.[1].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Control%20Packages) | -| Evaluator | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Evaluator%20Packages&query=$.[2].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Evaluator%20Packages) | -| Launch | TBD | -| Localization | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Localization%20Packages&query=$.[4].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Localization%20Packages) | -| Map | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Map%20Packages&query=$.[5].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Map%20Packages) | -| Perception | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Perception%20Packages&query=$.[6].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Perception%20Packages) | -| Planning | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Planning%20Packages&query=$.[7].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Planning%20Packages) | -| Sensing | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Sensing%20Packages&query=$.[8].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Sensing%20Packages) | -| Simulator | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Simulator%20Packages&query=$.[9].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Simulator%20Packages) | -| System | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=System%20Packages&query=$.[10].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=System%20Packages) | -| Vehicle | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Vehicle%20Packages&query=$.[11].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Vehicle%20Packages) | +| コンポーネント | カバレッジ | +|---|---| +| Common | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Common%20Packages&query=$.[0].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Common%20Packages) | +| Control | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Control%20Packages&query=$.[1].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Control%20Packages) | +| Evaluator | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Evaluator%20Packages&query=$.[2].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Evaluator%20Packages) | +| Launch | 未定 | +| Localization | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Localization%20Packages&query=$.[4].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Localization%20Packages) | +| Map | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Map%20Packages&query=$.[5].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Map%20Packages) | +| Perception | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Perception%20Packages&query=$.[6].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Perception%20Packages) | +| Planning | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Planning%20Packages&query=$.[7].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Planning%20Packages) | +| Sensing | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Sensing%20Packages&query=$.[8].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Sensing%20Packages) | +| Simulator | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Simulator%20Packages&query=$.[9].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Simulator%20Packages) | +| System | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=System%20Packages&query=$.[10].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=System%20Packages) | +| Vehicle | [![codecov](https://img.shields.io/badge/dynamic/json?url=https://codecov.io/api/v2/github/autowarefoundation/repos/autoware.universe/components&label=Vehicle%20Packages&query=$.[11].coverage)](https://app.codecov.io/gh/autowarefoundation/autoware.universe?components%5B0%5D=Vehicle%20Packages) | -**自動運転ソフトウェアに関するドキュメント** +## 自動運転ソフトウェア -## Self-Driving Software Architecture +### 目次 -### Planningモジュール +- [概要](#概要) +- [コンポーネント](#コンポーネント) + - [Perception](#Perception) + - [Planning](#Planning) + - [Control](#Control) +- [Autowareについて](#Autowareについて) + - [使用方法](#使用方法) + - [利用上の注意](#利用上の注意) -#### ユースケースと要件 +### 概要 -- 自車位置と目的地の認識 -- 安全かつ効率的な経路の作成 -- 障害物回避と衝突予測 -- 高速道路と市街地でのナビゲーション対応 +自動運転ソフトウェアは、車両が人間介入なしで安全かつ効率的に道路を走行できるようにするソフトウェアシステムです。 -#### 実装の詳細 +### コンポーネント -- 動的パスプランニングアルゴリズム(例:A*、D*ライト)を使用したリアルタイム経路生成 -- 車載センサー(LiDAR、カメラ、レーダー)からのデータ統合 -- 障害物検出と逸脱量リスク評価のための物体検出アルゴリズム -- 高精度地図データの活用 +自動運転ソフトウェアは、次の主要コンポーネントで構成されています。 -#### パフォーマンスの測定基準 +- **Perception:** センサーからのデータを使用して、周囲の環境を認識します。 +- **Planning:** 障害物を回避し、目的地に到達するための経路を計画します。 +- **Control:** ステアリング、アクセル、ブレーキを制御し、計画された経路に従って車両を走行させます。 -- 目的地への到着時間 -- 走行距離と燃料消費量 -- 障害物との衝突回避率 -- 加速度逸脱量、速度逸脱量 +### Autowareについて -### Perceptionモジュール +Autowareは、オープンソースの自動運転ソフトウェアプラットフォームです。次のような機能を提供します。 -#### ユースケースと要件 +- Perception、Planning、Control用のモジュール +- シミュレーションとテスト用のツール +- リアルタイムオペレーティングシステム(ROS)との統合 -- 車両周囲の環境認識 -- 動的および静的障害物の検出と追跡 -- 物体の形状、サイズ、速度の推定 -- 交通状況のモニタリングと予測 +### 使用方法 -#### 実装の詳細 +Autowareを使用するには、次の手順に従います。 -- LiDARとカメラからのデータを融合した物体検出と追跡アルゴリズム -- 領域ベースの物体検出器(例:YOLO、Faster R-CNN) -- ニューラルネットワークを使用した特徴抽出と分類 -- 地図データの活用とセンシングデータへの投影 +1. Autowareをインストールします。 +2. 必要に応じてモジュールをカスタマイズします。 +3. システムをテストします。 +4. 車両に展開します。 -#### パフォーマンスの測定基準 +### 利用上の注意 -- 物体検出の精度(mAP) -- 物体追跡の精度(IDF1) -- 処理スループット(FPS) -- エラー検出率(例:偽検出率、偽陰性率) +Autowareを使用する際には、次の点に注意してください。 -### Controlモジュール +- システムは安全ではありません。実験的な目的でのみ使用してください。 +- システムは常に人間の監視下で使用してください。 +- システムは、悪天候やその他の困難な条件下では正しく動作しない可能性があります。 -#### ユースケースと要件 - -- アクセル、ブレーキ、ステアリングの制御 -- 経路計画からの命令の追従 -- 障害物回避のための緊急回避動作 -- 車両の安定性とハンドリングの維持 - -#### 実装の詳細 - -- PID制御器を使用したフィードバック制御 -- モデル予測制御(MPC)を使用した最適制御 -- 先行車両追従のための適応制御アルゴリズム -- 緊急回避のための最適化されたパスクレプランニング - -#### パフォーマンスの測定基準 - -- 経路からの逸脱量 -- アクセル、ブレーキ、ステアリング操作の応答性 -- エネルギー効率(例:燃料消費量) - -### Sensingモジュール - -#### ユースケースと要件 - -- 車両周囲の環境データの収集 -- LiDAR、カメラ、レーダーなど、複数のセンサーのデータ統合 -- データの収集と'post resampling'のリアルタイム処理 -- センサーキャリブレーションとエラー補正 - -#### 実装の詳細 - -- ROS(Robot Operating System)ベースのセンサーデータ統合システム -- センサーデータの同期と'post resampling'のリアルタイム処理 -- レーザー、RGB、深度データの融合技術 -- 固有のセンサーデバイスドライバの開発 - -#### パフォーマンスの測定基準 - -- データの収集範囲と精度 -- データの'post resampling'と同期化の精度 -- センサーキャリブレーションの品質 -- 処理スループット(FPS) - -### Autowareとの統合 - -- ROSベースのアーキテクチャによるAutowareへのシームレスな統合 -- モジュールの再利用性と拡張性 -- オープンソースコミュニティによる継続的な開発とサポート diff --git a/common/README.md b/common/README.md index 6d79c7f504f0f..eedce62db30ab 100644 --- a/common/README.md +++ b/common/README.md @@ -1,16 +1,17 @@ # 共通 -## はじめに +## 概要 -Autoware.Universe Commonフォルダは他のAutowareコンポーネントで使用される一般的でテスト用のライブラリのほか、RVIZ2における視覚化に便利なプラグインで構成されています。 +Autoware.Universeの共通フォルダは、その他のAutowareコンポーネントで使用される共通ライブラリとテストライブラリ、およびRVIZ2での視覚化のための有益なプラグインで構成されています。 !!! note - このフォルダに記載されているもののほかに、ユーザーは `autoware_tools/common` のドキュメント [ページ](https://autowarefoundation.github.io/autoware_tools/main/common/mission_planner_rviz_plugin/) のアドオンも閲覧できます。 +このフォルダに記載されているライブラリに加えて、ユーザーは `autoware_tools/common` ドキュメントでアドオンの一部を確認することもできます [ページ](https://autowarefoundation.github.io/autoware_tools/main/common/mission_planner_rviz_plugin/)。 ## ハイライト -一般的に使われているライブラリを以下に示します。 +一般的に使用されるライブラリの一部を示します。 1. `autoware_universe_utils` 2. `autoware_motion_utils` + diff --git a/common/autoware_ad_api_specs/README.md b/common/autoware_ad_api_specs/README.md index f096969b769b2..ec7a71a010fb4 100644 --- a/common/autoware_ad_api_specs/README.md +++ b/common/autoware_ad_api_specs/README.md @@ -1,3 +1,2 @@ -# autoware_adapi_specs +404: 見つかりません -このパッケージは、Autoware AD APIの仕様です。 diff --git a/common/autoware_component_interface_tools/README.md b/common/autoware_component_interface_tools/README.md index 3fdba57f0fbb1..d7c3186f6060a 100644 --- a/common/autoware_component_interface_tools/README.md +++ b/common/autoware_component_interface_tools/README.md @@ -1,7 +1,8 @@ -## autoware_component_interface_tools +# autoware_component_interface_tools -このパッケージでは、コンポーネント・インターフェイスに関する次のツールを提供します。 +このパッケージは、コンポーネントインターフェースの次のツールを提供します。 ## service_log_checker -`component_interface_utils`のサービスログを監視し、レスポンスステータスがエラーかどうかを表示します。 +component_interface_utilsのサービスログを監視し、応答ステータスがエラーの場合に表示します。 + diff --git a/common/autoware_geography_utils/README.md b/common/autoware_geography_utils/README.md index 506e05b538dda..b9cc23a8b8850 100644 --- a/common/autoware_geography_utils/README.md +++ b/common/autoware_geography_utils/README.md @@ -2,4 +2,5 @@ ## 目的 -このパッケージには、その他の package で使用される地理関連関数があります。必要に応じて参照してください。 +このパッケージには、他のパッケージで使用される地理関連の関数が含まれていますので、必要に応じて参照してください。 + diff --git a/common/autoware_grid_map_utils/README.md b/common/autoware_grid_map_utils/README.md index 5a496effe12f7..4e65856adb7c6 100644 --- a/common/autoware_grid_map_utils/README.md +++ b/common/autoware_grid_map_utils/README.md @@ -2,47 +2,48 @@ ## 概要 -このパッケージには、ポリゴン内にあるグリッドマップのすべてのセルを反復処理するために使用される `grid_map::PolygonIterator` の再実装が含まれます。 +このパッケージには、いくつかのポリゴン内に含まれるグリッドマップ内のすべてのセルを反復処理するために使用される`grid_map::PolygonIterator`の実装が含まれます。 ## アルゴリズム -この実装では、ラスタライズされた画像にポリゴンを描画するために使用される一般的なアルゴリズムである [走査線アルゴリズム](https://ja.wikipedia.org/wiki/%E8%B5%B0%E6%9F%A5%E7%B7%9A%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%B6%E3%83%B3) を使用します。 -このアルゴリズムをグリッドマップに適用した主な考え方は次のとおりです。 +この実装では、ラスター化された画像にポリゴンを描画するために一般的に使用される[走査線アルゴリズム](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%82%AD%E3%83%9F%E3%81%AE%E3%83%90%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%B0%E3%83%A0)を使用します。 +グリッドマップに適応されたアルゴリズムの主な考え方は次のとおりです。 -- グリッドマップの行とポリゴン端の交点を計算します。 -- 各行について、各交点のペア間の列を計算します。 -- 結果の `(行、列)` インデックスはポリゴン内にあります。 +- グリッドマップの行とポリゴンエッジのエッジとの交点を計算する。 +- 各行について、交点の各ペア間の列を計算する。 +- 結果の`(row, column)`インデックスはポリゴンの内側です。 -走査線アルゴリズムの詳細については、リファレンスを参照してください。 +走査線アルゴリズムの詳細については、参照をご覧ください。 ## API -`autoware::grid_map_utils::PolygonIterator` は、元の [`grid_map::PolygonIterator`](https://docs.ros.org/en/kinetic/api/grid_map_core/html/classgrid__map_1_1PolygonIterator.html) と同じ API に従います。 +`autoware::grid_map_utils::PolygonIterator`は、元の[`grid_map::PolygonIterator`](https://docs.ros.org/en/kinetic/api/grid_map_core/html/classgrid__map_1_1PolygonIterator.html)と同じAPIに従います。 -## 前提 +## 前提条件 -`autoware::grid_map_utils::PolygonIterator` の動作が `grid_map::PolygonIterator` と一致するのは、ポリゴンの端がどのセルの中心とも _完全に_ 交差しない場合のみです。 -このような場合、交差したセルがポリゴンの内側と外側のどちらと見なされるかは、浮動小数点の精度誤差によって異なる場合があります。 +`autoware::grid_map_utils::PolygonIterator`の動作は、ポリゴンのエッジがセルの中心を正確には横切らない場合にのみ、`grid_map::PolygonIterator`と一致することが保証されます。 +そのような場合、交差したセルがポリゴンの内側または外側と見なされるかどうかは、浮動小数点の誤差により異なる場合があります。 ## パフォーマンス -`test/benchmarking.cpp` にベンチマークコードを実装しており、`autoware::grid_map_utils::PolygonIterator` が `grid_map::PolygonIterator` とまったく同じように動作することを検証するためにも使用しています。 +ベンチマークコードは`test/benchmarking.cpp`に実装されており、`autoware::grid_map_utils::PolygonIterator`が`grid_map::PolygonIterator`とまったく同じように動作することを検証するためにも使用されます。 -次の図は、このパッケージ (`autoware_grid_map_utils`) の実装と元の (`grid_map`) 実装のランタイムを比較したものです。 -測定した時間は、イテレータの構築とすべてのインデックスの反復処理を含み、対数スケールで示しています。 -結果は、側辺長が `100 <= n <= 1000` の正方形グリッドマップ (サイズ=`n` は、`n x n` セルのグリッドを表します) で、頂点数が `3 <= m <= 100` のランダムなポリゴンでばらつきがあり、各パラメーター `(n,m)` は 10 回繰り返して取得されました。 +次の図は、このパッケージ(`autoware_grid_map_utils`)の実装とオリジナル実装(`grid_map`)のランタイムを比較したものです。 +測定された時間は、イテレータの構築とすべてのインデックスのイテレーションを含み、対数スケールを使用して表示されます。 +結果は、辺のサイズが`100 <= n <= 1000`の正方形グリッドマップ (`n`のサイズは`n x n`セルグリッドを意味します)、頂点数が`3 <= m <= 100`のランダムポリゴン、および各パラメータ`(n,m)`を10回繰り返す結果によって得られました。 -![ランタイムの比較](media/runtime_comparison.png) +![ランタイム比較](media/runtime_comparison.png) -## 今後改善予定 +## 今後の改善 -複数のポリゴンに対する走査線アルゴリズムのバリエーションがあります。 -これらは、複数のポリゴンのいずれかに含まれるセルを反復処理する場合に実装できます。 +複数のポリゴンに対して走査線アルゴリズムのさまざまなバリエーションが存在します。 +これらは、複数のポリゴンの少なくとも1つに含まれるセルを反復処理する場合に実装できます。 -現在の実装は、中心点がポリゴン内にある場合にセルが選択される、元の `grid_map::PolygonIterator` の動作を模倣しています。 -例えば、この動作は、ポリゴンに重なるセルのみを返すように変更できます。 +現在の実装は、セルの中心位置がポリゴンの内側にある場合にセルを選択する、元の`grid_map::PolygonIterator`の動作を模倣します。 +この動作は、たとえばポリゴンと重なるすべてのセルのみを返すように変更できます。 -## 参考資料 +## 参照 -- +- - + diff --git a/common/autoware_interpolation/README.md b/common/autoware_interpolation/README.md index 9c5ebf02e9ca8..a4bd2e7b073d0 100644 --- a/common/autoware_interpolation/README.md +++ b/common/autoware_interpolation/README.md @@ -1,40 +1,41 @@ # 補間パッケージ -このパッケージでは、線形およびスプライン補間関数が提供されます。 +このパッケージは、線形補間とスプライン補完関数を提供します。 ## 線形補間 -`lerp(src_val, dst_val, ratio)`(スカラー補間用)は、`ratio`を使用して`src_val`と`dst_val`を補間します。 -これは`C++20`で`std::lerp(src_val, dst_val, ratio)`に置き換えられます。 +`lerp(src_val, dst_val, ratio)` (スカラー補間用) は`ratio`を介して`src_val`と`dst_val`を補完します。 +これは`C++20`では`std::lerp(src_val, dst_val, ratio)`に置き換えられます。 -`lerp(base_keys, base_values, query_keys)`(ベクトル補間用)は、x値が`base_keys`で、y値が`base_values`である2つの連続点それぞれに線形回帰を適用します。 -その後、x軸の`query_keys`に対してy軸の補間値を計算します。 +`lerp(base_keys, base_values, query_keys)` (ベクトル補間用) は、x値が`base_keys`で、y値が`base_values`である連続する2点に単回帰を適用します。 +その後、x軸の`query_keys`に対してy軸上の補完値を計算します。 ## スプライン補間 -`spline(base_keys, base_values, query_keys)`(ベクトル補間用)は、x値が`base_keys`で、y値が`base_values`である2つの連続点それぞれにスプライン回帰を適用します。 -その後、x軸の`query_keys`に対してy軸の補間値を計算します。 +`spline(base_keys, base_values, query_keys)` (ベクトル補間用) は、x値が`base_keys`で、y値が`base_values`である連続する2点にスプライン回帰を適用します。 +その後、x軸の`query_keys`に対してy軸上の補完値を計算します。 ### 計算コストの評価 -100点に対するスプライン補間の計算コストを評価し、3対角行列アルゴリズムという最良のものを採用しました。 -3対角行列アルゴリズム以外の方法は`spline_interpolation`パッケージに存在しますが、Autowareからは削除されています。 +100ポイントのスプライン補間の計算コストを評価し、三対角行列アルゴリズムである最良のものを採用しました。 +三対角行列アルゴリズム以外の方法は、Autowareから削除された`spline_interpolation`パッケージに存在します。 -| 手法 | 計算時間 | -| ---------------------- | ---------- | -| 三対角行列アルゴリズム | 0.007 [ms] | -| 前処理共役勾配法 | 0.024 [ms] | -| 逐次過剰緩和法 | 0.074 [ms] | +| 手法 | 計算時間 | +| --------------------------------- | ---------------- | +| 三重対角行列法 | 0.007 [ms] | +| 前処理された共役勾配法 | 0.024 [ms] | +| 逐次オーバーリラクゼーション | 0.074 [ms] | -### スプライン補間アルゴリズム +### スプライン補完アルゴリズム -`base_keys` ($x_i$) と `base_values` ($y_i$) のサイズが $N + 1$ であると仮定すると、以下の式でスプライン補間を計算し、$y_i$ と $y_{i+1}$ の間に補間します。 +`base_keys` ($x_i$) と `base_values` ($y_i$) のサイズが $N + 1$ であると仮定すると、次の式を使用してスプライン補完を計算し、$y_i$ と $y_{i+1}$ の間を補完します。 $$ Y_i(x) = a_i (x - x_i)^3 + b_i (x - x_i)^2 + c_i (x - x_i) + d_i \ \ \ (i = 0, \dots, N-1) $$ -スプライン補間の制約条件は以下のとおりです。制約条件の数は $4N$ であり、これはスプライン補間の変数の数と等しいです。 +スプライン補完の制約は次のとおりです。 +制約の数は $4N$ で、スプライン補完の変数の数と同じです。 $$ \begin{align} @@ -47,7 +48,7 @@ Y''_{N-1} (x_N) & = 0 \end{align} $$ -[この記事](https://www.mk-mode.com/rails/docs/INTERPOLATION_SPLINE.pdf) によると、スプライン補間は次の線形方程式として定式化されます。 +[この記事](https://www.mk-mode.com/rails/docs/INTERPOLATION_SPLINE.pdf)によると、スプライン補完は次の線形方程式として定式化されます。 $$ \begin{align} @@ -66,7 +67,7 @@ $$ \end{align} $$ -ここで、 +ここで $$ \begin{align} @@ -75,23 +76,20 @@ w_i & = 6 \left(\frac{y_{i+1} - y_{i+1}}{h_i} - \frac{y_i - y_{i-1}}{h_{i-1}}\ri \end{align} $$ -この線形方程式の係数行列は三対角行列です。そのため、降下勾配法を使用せずに線形方程式を解くことができる三対角行列アルゴリズムで解くことができます。 +この線形方程式の係数行列は三重対角行列です。したがって、勾配降下法を利用せずに線形方程式を解くことができる三重対角行列アルゴリズムで解くことができます。 -三対角行列アルゴリズムを使用してこの線形方程式を解くと、スプライン補間の係数を次のように計算できます。 +三重対角行列アルゴリズムを使用してこの線形方程式を解くと、次のスプライン補完の係数を求めることができます。 $$ \begin{align} a_i & = \frac{v_{i+1} - v_i}{6 (x_{i+1} - x_i)} \ \ \ (i = 0, \dots, N-1) \\ b_i & = \frac{v_i}{2} \ \ \ (i = 0, \dots, N-1) \\ c_i & = \frac{y_{i+1} - y_i}{x_{i+1} - x_i} - \frac{1}{6}(x_{i+1} - x_i)(2 v_i + v_{i+1}) \ \ \ (i = 0, \dots, N-1) \\ -\end{align} -$$ ### 三対角行列アルゴリズム -線形方程式は[こちら](https://www.iist.ac.in/sites/default/files/people/tdma.pdf)の記事に従い、三対角行列アルゴリズムで解いていきます。実装上は、線形方程式の変数は以下のようになります。 +変数が実装で次のように表される線形方程式の三対角行列を、[こちらの記事](https://www.iist.ac.in/sites/default/files/people/tdma.pdf) に従って解きます。 -$$ \begin{align} \begin{pmatrix} b_0 & c_0 & & \\ @@ -104,4 +102,4 @@ x = d_0 \\ d_2 \\ d_3 \\ \vdots \\ d_{N-1} \end{pmatrix} \end{align} -$$ + diff --git a/common/autoware_kalman_filter/README.md b/common/autoware_kalman_filter/README.md index b44312db25683..ce554a7817f55 100644 --- a/common/autoware_kalman_filter/README.md +++ b/common/autoware_kalman_filter/README.md @@ -2,8 +2,9 @@ ## 目的 -この共通パッケージには、時差付きカルマンフィルタとカルマンフィルの計算が含まれます。 +こちらの一般的なパッケージには、遅延時間のカルマンフィルタとカルマンフィルタの計算が含まれています。 -## 想定 / 既知の制限 +## 決められた条件/既知の制限 TBD. + diff --git a/common/autoware_motion_utils/README.md b/common/autoware_motion_utils/README.md index b8924d66bdf6d..4633be36c46e3 100644 --- a/common/autoware_motion_utils/README.md +++ b/common/autoware_motion_utils/README.md @@ -1,24 +1,25 @@ -# モーションユーティリティパッケージ +# Motion Utilsパッケージ ## 用語の定義 ### セグメント -Autowareにおける`セグメント`は、次のような2つの連続したポイント間の線分です。 +Autowareにおける`セグメント`は、次のように2つの連続する点の間の線分です。 ![segment](./media/segment.svg){: style="width:600px"} -特定の位置に対する最近接セグメントインデックスと最近接ポイントインデックスは、常に同じではありません。 -そのため、ポイントとセグメントの最近接インデックスを計算するための2つの異なるユーティリティ関数を用意しています。 +ある位置に対する最も近いセグメントインデックスと最も近いポイントインデックスは、常に同じではありません。そのため、ポイントとセグメントに対して最も近いインデックスを計算するための2つの異なるユーティリティ関数を準備します。 -## 最近接インデックス検索 +## 最近傍インデックスの検索 -このセクションでは、最近接インデックス検索と最近接セグメントインデックス検索について説明します。 +このセクションでは、最も近いインデックスと最も近いセグメントインデックスの検索について説明します。 -最近接インデックス検索と最近接セグメントインデックス検索には同じ関数を使用します。 -最も近いインデックス検索の例を挙げると、2種類の関数があります。 +最も近いインデックスの検索と最も近いセグメントインデックスの検索には同じ関数があります。 + +最も近いインデックス検索を例にとると、2種類の関数があります。 + +最初の関数は、距離とヨーの閾値を使用して最も近いインデックスを見つけます。 -最初の関数は、距離とヨーのしきい値を使用して最近接インデックスを見つけるものです。 ```cpp template @@ -28,21 +29,23 @@ size_t findFirstNearestIndexWithSoftConstraints( const double yaw_threshold = std::numeric_limits::max()); ``` -この関数はしきい値内の最初のローカルソリューションを求めます。最初のローカルソリューションを求める理由は、次の小節で説明するエッジケースを処理するためです。 +この関数は、しきい値内にある最初の局所解を求めます。 +最初の局所解を求める理由は、次のサブセクションで説明するエッジケースに対応するためです。 -しきい値引数にはデフォルトのパラメータがあるので、関数の呼び出し時にどのしきい値を渡すかを決定できます。 +関数に渡すしきい値を決定できるように、しきい値引数の既定パラメータがあります。 -1. 距離とヨーの両方のしきい値が指定されている場合 - - まず、距離とヨーの両方のしきい値を持つ最も近いインデックスを見つけようとします。 - - 見つからない場合、距離のしきい値のみで再度見つけようとします。 - - 見つからない場合、しきい値なしで見つけます。 +1. 距離とヨー角の両方のしきい値が与えられている場合 + - まず、距離とヨー角の両方のしきい値を持つ最も近いインデックスを探します。 + - 見つからない場合は、距離しきい値のみで再度検索を試みます。 + - 見つからない場合は、しきい値なしで検索します。 2. 距離のみが指定されている場合 - - まず、距離のしきい値を持つ最も近いインデックスを見つけようとします。 - - 見つからない場合、しきい値なしで見つけます。 + - まず、距離しきい値を持つ最も近いインデックスを探します。 + - 見つからない場合は、しきい値なしで検索します。 3. しきい値が指定されていない場合 - - 最も近いインデックスを見つけます。 + - 最も近いインデックスを求めます。 + +2 番目の関数は、`lane_id` が `lane_id` であるレーン内にある最も近いインデックスを見つけるものです。 -2 番目の関数は、`lane_id`であるレーンの最も近いインデックスを見付けます。 ```cpp size_t findNearestIndexFromLaneId( @@ -50,45 +53,48 @@ size_t findNearestIndexFromLaneId( const geometry_msgs::msg::Point & pos, const int64_t lane_id); ``` -### さまざまなオブジェクトへの適用 +### 様々なオブジェクトへの適用 -多くのノードパッケージは、オブジェクトの最近接インデックスを計算することがよくあります。 -推奨される計算方法について説明します。 +多くのノードパッケージでは、オブジェクトの最近傍のインデックスが計算されます。 +推奨される計算方法を説明します。 -#### 自車に対する最近接インデックス +#### 自車に対する最近傍のインデックス -自車の前方のパス長が十分に短い場合、距離とヨー角の両方の閾値を使用して`findFirstNearestIndexWithSoftConstraints`を使用して、次のエッジケースで正しい最近接インデックスが得られることが期待されます。 -青い円は、ベースリンク位置からの距離閾値を表し、2つの青い線はベースリンクの向きに対してヨー角の閾値を表します。 -これらのケース内の点の中で、赤い正しい最近接点が検出できます。 +自車前のパス長が十分に短い場合、距離しきい値とヨーしきい値の両方を使用した `findFirstNearestIndexWithSoftConstraints` で次のエッジケースで正しい最近傍インデックスが見つかることが期待されます。 +青い円は、ベースリンク位置からの距離しきい値を表し、2 本の青い線は、ベースリンクの方位に対するヨーしきい値を表します。 +これらのケースの点の中で、赤色の正しい最近傍点が検出できます。 ![ego_nearest_search](./media/ego_nearest_search.svg) -したがって、実装は以下のようになります。 +したがって、実装方法は次のとおりです。 + ```cpp const size_t ego_nearest_idx = findFirstNearestIndexWithSoftConstraints(points, ego_pose, ego_nearest_dist_threshold, ego_nearest_yaw_threshold); const size_t ego_nearest_seg_idx = findFirstNearestIndexWithSoftConstraints(points, ego_pose, ego_nearest_dist_threshold, ego_nearest_yaw_threshold); ``` -#### 動的オブジェクトの nearest index +#### ダイナミックオブジェクトの最近傍インデックス -エゴの nearest index では、エゴが点に従うことが想定されるため、位置に加えて向きも考慮されます。 -ただし、動的オブジェクト (たとえば、予測オブジェクト) の場合、動的オブジェクトが後退していても、エゴが前進していても、オブジェクトの向きが点の順序と異なる場合があります。 +エゴの最近傍インデックスでは、エゴはポイントに従う必要があるため、位置に加えて向きも考慮されます。 +ただし、ダイナミックオブジェクト(例:予測オブジェクト)の場合、その向きがポイントの順序と異なる場合があり、例えばエゴが前進しているにもかかわらずダイナミックオブジェクトが後退する場合があります。 + +したがって、ダイナミックオブジェクトにはヨーしきい値を考慮しないでください。 +実装方法は次のとおりです。 -したがって、動的オブジェクトではヨー閾値は考慮されるべきではありません。 -実装は次のようになります。 ```cpp const size_t dynamic_obj_nearest_idx = findFirstNearestIndexWithSoftConstraints(points, dynamic_obj_pose, dynamic_obj_nearest_dist_threshold); const size_t dynamic_obj_nearest_seg_idx = findFirstNearestIndexWithSoftConstraints(points, dynamic_obj_pose, dynamic_obj_nearest_dist_threshold); ``` -#### 交通対象の最近インデックス +#### 交通オブジェクト用の最近インデックス -Laneletマップでは、交通対象は特定のレーンに属しています。 -この特定のレーンのIDにより、正しい最近インデックスを検索できます。 +レーンの小マップでは、交通オブジェクトは特定の車線に属します。 +この特定の車線の ID を使用して、正しい最近インデックスを見つけることができます。 + +実装は次のとおりです。 -実装方法は次のとおりです。 ```cpp // first extract `lane_id` which the traffic object belong to. @@ -98,6 +104,7 @@ const size_t traffic_obj_nearest_seg_idx = findNearestSegmentIndexFromLaneId(pat ## 開発者向け -`trajectory.hpp` の一部テンプレート関数は、主に特定の型 (`autoware_planning_msgs::msg::PathPoint`, `autoware_planning_msgs::msg::PathPoint`, `autoware_planning_msgs::msg::TrajectoryPoint`) で使用されるため、コンパイル時間を短縮するために `extern template` 関数としてエクスポートされています。 +`trajectory.hpp` のテンプレート関数の一部は、特定の型(`autoware_planning_msgs::msg::PathPoint`、`autoware_planning_msgs::msg::PathPoint`、`autoware_planning_msgs::msg::TrajectoryPoint`)に主に使用されるため、`extern template` 関数としてエクスポートされ、コンパイル時間を短縮します。 + +`autoware_motion_utils.hpp` ヘッダーファイルは、このファイルに直接的・間接的にインクルードされるソースファイルのプレ処理に時間がかかったため、削除されました。 -`autoware_motion_utils.hpp` ヘッダーファイルは、このファイルを直接/間接的に含むソースファイルがプリプロセスに時間がかかったため削除されました。 diff --git a/common/autoware_object_recognition_utils/README.md b/common/autoware_object_recognition_utils/README.md index a6779dfe39f5b..ea5fe83d9afdf 100644 --- a/common/autoware_object_recognition_utils/README.md +++ b/common/autoware_object_recognition_utils/README.md @@ -2,6 +2,6 @@ ## 目的 -このパッケージには、オブジェクト認識モジュール全体に有用な共通関数のライブラリが含まれています。 +このパッケージには、オブジェクト認識モジュール間で有用な共通関数のライブラリが含まれています。 +このパッケージには、異なるデータタイプ、メッセージタイプ間の変換、それらに対する一般的な操作を実行するための関数が含まれます。 -このパッケージには、さまざまなデータ型、メッセージ型間の相互変換や、それらに対する一般的な操作の実行を行う関数が含まれる場合があります。 diff --git a/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md b/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md index 7cac808dd5c50..c1ee79f62f250 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md +++ b/common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/README.md @@ -1,35 +1,36 @@ # autoware_mission_details_overlay_rviz_plugin -このRVizプラグインは、現在のミッションの残り距離と時間を表示します。 +このRVizプラグインは、現在のミッションにおける残り距離と時間を表示します。 -## 入出力 +## 入力/出力 ### 入力 -| 名称 | 種類 | 説明 | -| ------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------- | -| `/planning/mission_remaining_distance_time` | `autoware_planning_msgs::msg::MissionRemainingDistanceTime` | ミッションの残り距離と時間を表すトピック | +| Name | Type | Description | +| ------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------- | +| `/planning/mission_remaining_distance_time` | `autoware_planning_msgs::msg::MissionRemainingDistanceTime` | ミッションの残り距離と時間に関するトピックです。 | ## オーバーレイパラメータ -| 名前 | タイプ | デフォルト値 | 説明 | -| -------- | ------ | ------------ | ------------------------- | -| `Width` | int | 170 | オーバーレイの幅 [`px`] | -| `Height` | int | 100 | オーバーレイの高さ [`px`] | -| `Right` | int | 10 | 右端からの余白 [`px`] | -| `Top` | int | 10 | 上端からの余白 [`px`] | +| 名前 | タイプ | デフォルト値 | 説明 | +| -------- | ---- | ------------- | --------------------------------- | +| `Width` | int | 170 | オーバーレイの幅 [px] | +| `Height` | int | 100 | オーバーレイの高さ [px] | +| `Right` | int | 10 | 右側の境界からの余白 [px] | +| `Top` | int | 10 | 上部の境界からの余白 [px] | -ミッションの詳細表示は、画面の右上に配置されています。 +画面右上にミッションの詳細を表示します。 ## 使用方法 -[autoware_overlay_rviz_plugin](../autoware_overlay_rviz_plugin/README.md)に似ています。 +[autoware_overlay_rviz_plugin](../autoware_overlay_rviz_plugin/README.md) と同様です。 ## クレジット -[jsk_visualization](https://github.com/jsk-ros-pkg/jsk_visualization)パッケージをベースにしています。 +[jsk_visualization](https://github.com/jsk-ros-pkg/jsk_visualization) パッケージを基にしています。 ### アイコン - - + diff --git a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md index 3fa6ad7fd3a27..7a5b3972e8fa6 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md +++ b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/README.md @@ -1,54 +1,55 @@ -# autoware_overlay_rviz_plugin +## Autoware Overlay RVizプラグイン -RViz2の3Dシーン上に2Dオーバーレイを表示するためのプラグイン。 +RViz2の3Dシーンに2Dオーバーレイを表示するためのプラグインです。 [jsk_visualization](https://github.com/jsk-ros-pkg/jsk_visualization) -パッケージをベースとしており、3条項BSDライセンスに従っています。 +パッケージをベースにしています。ライセンスは3条項BSDライセンスです。 ## 目的 -このプラグインは、車両速度、ウィンカー、ステアリング状態、ギアの視覚的かつわかりやすい表示を提供します。 +このプラグインは、車両の速度、ウィンカー、ステアリングステータス、ギアを視覚的に分かりやすく表示します。 ## 入出力 ### 入力 -| 名前 | 種類 | 説明 | -| ------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------- | -| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両速度のトピック | -| `/vehicle/status/turn_indicators_status` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ウインカーの状態のトピック | -| `/vehicle/status/hazard_status` | `autoware_vehicle_msgs::msg::HazardReport` | ハザードランプの状態のトピック | -| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングの状態のトピック | -| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアのステータスに関するトピック | -| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限に関するトピック | -| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 信号機のステータスに関するトピック | +| 名称 | 型 | 説明 | +| ------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------- | +| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両速度のトピック | +| `/vehicle/status/turn_indicators_status` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ウインカーの状態のトピック | +| `/vehicle/status/hazard_status` | `autoware_vehicle_msgs::msg::HazardReport` | ハザードの状態のトピック | +| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングの状態のトピック | +| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアのステータスに関するトピック | +| `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限に関するトピック | +| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 交通信号のステータスに関するトピック | ## パラメータ -### 中核パラメータ +### コアパラメータ #### SignalDisplay -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------------------ | ------ | -------------------- | ------------------------------- | -| `property_width_` | int | 128 | プロッターウィンドウの幅 [px] | -| `property_height_` | int | 128 | プロッターウィンドウの高さ [px] | -| `property_left_` | int | 128 | プロッターウィンドウの左 [px] | -| `property_top_` | int | 128 | プロッターウィンドウの上 [px] | -| `property_signal_color_` | QColor | QColor(25, 255, 240) | ターンシグナルの色 | +| 名称 | タイプ | デフォルト値 | 説明 | +|---|---|---|---| +| `property_width_` | int | 128 | プロッターウィンドウの幅 [px] | +| `property_height_` | int | 128 | プロッターウィンドウの高さ [px] | +| `property_left_` | int | 128 | プロッターウィンドウの左 [px] | +| `property_top_` | int | 128 | プロッターウィンドウの上 [px] | +| `property_signal_color_` | QColor | QColor(25, 255, 240) | ウインカーの色 | -## 前提条件 / 制約 +## 想定/既知の制限 -TBD. +未定 ## 使用法 -1. `rviz2`を起動し、`Displays`パネルの`追加`ボタンをクリックします。 +1. `rviz2` を起動し、`Displays` パネルの下にある `追加` ボタンをクリックする。 ![select_add](./assets/images/select_add.png) -2. `By display type`タブで、`autoware_overlay_rviz_plugin/SignalDisplay`を選択し、OKを押します。 +2. `By display type` タブで、`autoware_overlay_rviz_plugin/SignalDisplay` を選択し、OK を押す。 -3. 必要に応じて、トピックの名前を入力します。 +3. 必要に応じてトピック名を入力する。 ![select_topic_name](./assets/images/select_topic_name.png) + diff --git a/common/autoware_perception_rviz_plugin/README.md b/common/autoware_perception_rviz_plugin/README.md index 1f7ac11a3de50..81e59a7aff4de 100644 --- a/common/autoware_perception_rviz_plugin/README.md +++ b/common/autoware_perception_rviz_plugin/README.md @@ -2,233 +2,38 @@ ## 目的 -認識モジュールからの結果を可視化するためのrvizプラグインです。このパッケージは、Autoware.Autoによって開発されたrvizプラグインの実装をベースにしています。 +これはパーセプションモジュールの結果を視覚化するRVIZプラグインです。このパッケージは、Autoware.Autoによって開発されたRVIZプラグインの実装をベースにしています。 -元の設計思想については、Autoware.Auto設計ドキュメントを参照してください。[[1]](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/src/tools/visualization/autoware_rviz_plugins) +Autoware.Autoの設計方針については、元の設計ドキュメントを参照してください。[[1]](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/src/tools/visualization/autoware_rviz_plugins) - -## 入力タイプ / 可視化結果 +## 入力の種類 / 視覚化の結果 -### 検出された物体 +### 検出物体 -#### 入力タイプ - -- `AutowareAuto::DetectedObject` - -#### Visualized Result - -- `rviz::MarkerArray` - -### LandMarks - -#### Input Types - -- `AutowareAuto::LandMark` - -#### Visualized Result - -- `rviz::MarkerArray` - -### PointClouds - -#### Input Types - -- `AutowareAuto::PointCloud` -- `AutowareAuto::LidarPointCloud` -- `AutowareAuto::CameraPointCloud` -- `AutowareAuto::PointCloud2` - -#### Visualized Result - -- `sensor_msgs::PointCloud2` - -### TrackingObjects - -#### Input Types - -- `AutowareAuto::TrackedObject` - -#### Visualized Result - -- `rviz::MarkerArray` - -### TrafficLights - -#### Input Types - -- `AutowareAuto::TrafficLight` - -#### Visualized Result - -- `rviz::MarkerArray` - -### Planning (optional) - -#### Input Types - -- `AutowareAuto::Trajectory` - -#### Visualized Result - -- `rviz::MarkerArray` - -## Configuration - -### AutowareAuto::DetectedObjects - -- `Topic Name`: The topic name of the `AutowareAuto::DetectedObject` message received by the plugin. - -- `Marker Scale`: The scale of the marker. - -- `Marker Lifetime`: The lifetime of the marker in seconds. - -- `Marker Alpha`: The alpha value of the marker. - -- `Marker Color`: The color of the marker. - -- `Ground Truth Marker Enabled`: Enable/disable the display of ground truth marker. - -- `Measured Marker Enabled`: Enable/disable the display of measured marker. - -- `Ground Truth Color`: The color of the ground truth marker. - -- `Measured Color`: The color of the measured marker. - -### LandMarks - -- `Topic Name`: The topic name of the `AutowareAuto::LandMark` message received by the plugin. +#### 入力の種類 -- `Marker Scale`: The scale of the marker. - -- `Marker Lifetime`: The lifetime of the marker in seconds. - -- `Marker Alpha`: The alpha value of the marker. - -- `Marker Color`: The color of the marker. - -### PointClouds - -- `Topic Name`: The topic name of the `AutowareAuto::PointCloud` message received by the plugin. - -- `Show Color`: Enable/disable the display of the point cloud with color information. - -- `Color Attribute`: The attribute name of the color information. - -- `Normalize Color`: Enable/disable the normalization of the color information. - -- `Min Intensity`: The minimum intensity threshold for displaying the point cloud. - -- `Max Intensity`: The maximum intensity threshold for displaying the point cloud. - -### TrackingObjects - -- `Topic Name`: The topic name of the `AutowareAuto::TrackedObject` message received by the plugin. - -- `Marker Scale`: The scale of the marker. - -- `Marker Lifetime`: The lifetime of the marker in seconds. - -- `Marker Alpha`: The alpha value of the marker. - -- `Marker Color`: The color of the marker. - -### TrafficLights - -- `Topic Name`: The topic name of the `AutowareAuto::TrafficLight` message received by the plugin. - -- `Marker Scale`: The scale of the marker. - -- `Marker Lifetime`: The lifetime of the marker in seconds. - -- `Marker Alpha`: The alpha value of the marker. - -- `Marker Color`: The color of the marker. - -### Planning - -- `Topic Name`: The topic name of the `AutowareAuto::Trajectory` message received by the plugin. - -- `Marker Scale`: The scale of the marker. - -- `Marker Lifetime`: The lifetime of the marker in seconds. - -- `Marker Alpha`: The alpha value of the marker. - -- `Marker Color`: The color of the marker. -- `Show Reference Trajectory`: Enable/disable the display of the reference trajectory. -- `Show Prediction Trajectory`: Enable/disable the display of the prediction trajectory. -- `Show Planning Trajectory`: Enable/disable the display of the planning trajectory. -- `Show Predicted Obstacle Trajectory`: Enable/disable the display of the predicted obstacle trajectory. -- `Show Sensor Predicted Obstacle`: Enable/disable the display of the sensor predicted obstacle. -- `Show Speed Profile`: Enable/disable the display of the speed profile. -- `Show Lateral Speed Profile`: Enable/disable the display of the lateral speed profile. -- `Show Longitudinal Speed Profile`: Enable/disable the display of the longitudinal speed profile. -- `Show Selected Motion Plan`: Enable/disable the display of the selected motion plan. -- `Show Goal Pose`: Enable/disable the display of the goal pose. -- `Prediction Trajectory Duration`: The duration of the prediction trajectory in seconds. -- `Planning Trajectory Duration`: The duration of the planning trajectory in seconds. -- `Reference Trajectory Duration`: The duration of the reference trajectory in seconds. -- `Reference Velocity`: The velocity of the reference trajectory in meters per second. -- `Reference Acceleration`: The acceleration of the reference trajectory in meters per second squared. -- `Reference Jerk`: The jerk of the reference trajectory in meters per second cubed. -- `Max Velocity Violation (m/s)`: The maximum velocity逸脱量 in meters per second. -- `Max Lateral Acceleration Violation (m/s^2)`: The maximum lateral acceleration逸脱量 in meters per second squared. -- `Max Longitudinal Acceleration Violation (m/s^2)`: The maximum longitudinal acceleration逸脱量 in meters per second squared. -- `Max Jerk Violation (m/s^3)`: The maximum jerk逸脱量 in meters per second cubed. -- `Max Curvature Violation (1/m)`: The maximum curvature逸脱量 in inverse meters. -- `Additional Moving Obstacle`: The path of an additional moving obstacle for planning. -- `Initial Distance to Moving Obstacle`: The initial distance to the moving obstacle in meters. -- `Perception Planning Horizon`: The perception planning horizon. -- `Sensor Planning Horizon`: The sensor planning horizon. -- `Topic Name`: The topic name of the selected motion plan. - -### Planned Path Optimization (optional) - -- `Topic Name`: The topic name of the `autoware_planning_msgs::PlannedPathOptimization` message received by the plugin. - -- `Marker Scale`: The scale of the marker. - -- `Marker Lifetime`: The lifetime of the marker in seconds. - -- `Marker Alpha`: The alpha value of the marker. - -- `Marker Color`: The color of the marker. - -- `Optimization Success Marker Color`: The color of the optimization success marker. - -- `Optimization Failure Marker Color`: The color of the optimization failure marker. - -## Usage - -``` -rviz -``` - -``` -roslaunch autoware_perception_rviz_plugin autoware_perception_rviz_plugin.launch -``` - -| 名称 | タイプ | 説明 | -| ---- | ------------------------------------------------ | ------------ | -| | `autoware_perception_msgs::msg::DetectedObjects` | 検出結果配列 | +| 名称 | 型 | 説明 | +| ---- | ---------------------------------------------------- | --------------------- | +| | `autoware_perception_msgs::msg::DetectedObjects` | 検出結果の配列 | #### 可視化結果 ![detected-object-visualization-description](./images/detected-object-visualization-description.jpg) -### トラッキングされたオブジェクト +### TrackedObjects #### 入力タイプ -| 名称 | タイプ | 説明 | -| ---- | ----------------------------------------------- | -------------- | -| | `autoware_perception_msgs::msg::TrackedObjects` | 追跡結果の配列 | +| 名前 | 型 | 説明 | +|---|---|---| +| | `autoware_perception_msgs::msg::TrackedObjects` | Tracking結果配列 | #### 可視化結果 @@ -240,18 +45,19 @@ roslaunch autoware_perception_rviz_plugin autoware_perception_rviz_plugin.launch #### 入力タイプ -| 名前 | 種別 | 説明 | -| ---- | ------------------------------------------------- | ------------------ | -| | `autoware_perception_msgs::msg::PredictedObjects` | prediction結果配列 | +| 名称 | 型 | 説明 | +|---|---|---| +| | `autoware_perception_msgs::msg::PredictedObjects` | 予測結果配列 | #### 可視化結果 -追跡結果を予測結果で上書きします。 +追跡結果で予測結果を上書きします。 ![predicted-object-visualization-description](./images/predicted-object-visualization-description.jpg) -## 参照/外部リンク +## 参考文献 / 外部リンク [1] -## 今後の拡張/未実装部分 +## 今後の拡張 / 実装されていない部分 + diff --git a/common/autoware_point_types/README.md b/common/autoware_point_types/README.md index cbdf847649975..8a488c722ff17 100644 --- a/common/autoware_point_types/README.md +++ b/common/autoware_point_types/README.md @@ -1,122 +1,2 @@ -## Autoware Point Type +# Autoware のポイントの種類 -### 'Sensor Measurements'ポイントタイプ - -#### 'Radar Point' - -- センサーからのレーダー測定 -- 座標系: センサー座標系 -- フィールド: - - `id`: 整数 - - `meas_time`: タイムスタンプ (sec, nanosec) - - `range`: 測定対象物までの距離 (m) - - `range_stddev`: 距離の標準偏差 (m) - - `azimuth`: 測定対象物までの方位角 (rad) - - `azimuth_stddev`: 方位角の標準偏差 (rad) - - `elevation`: 測定対象物までの仰角 (rad) - - `elevation_stddev`: 仰角の標準偏差 (rad) - - `vx`: 測定対象物の速度 (m/s) - - `vx_stddev`: 速度の標準偏差 (m/s) - -#### 'Camera Point' - -- センサーからのカメラ測定 -- 座標系: カメラ座標系 -- フィールド: - - `id`: 整数 - - `meas_time`: タイムスタンプ (sec, nanosec) - - `x`: 測定対象物のx座標 (pixel) - - `y`: 測定対象物のy座標 (pixel) - - `width`: 測定対象物の幅 (pixel) - - `height`: 測定対象物の高さ (pixel) - - `orientation`: 測定対象物の向き (rad) - - `object_type`: 測定対象物のタイプ (車, 歩行者, 自転車など) - -#### 'Lidar Point' - -- センサーからのLiDAR測定 -- 座標系: LiDAR座標系 -- フィールド: - - `id`: 整数 - - `meas_time`: タイムスタンプ (sec, nanosec) - - `x`: 測定対象物のx座標 (m) - - `y`: 測定対象物のy座標 (m) - - `z`: 測定対象物のz座標 (m) - - `intensity`: 測定対象物の反射強度 - - `ring`: 測定対象物のLiDARスキャンラインの番号 - -### 'Prediction'ポイントタイプ - -#### 'Predicted Object' - -- Planningコンポーネントによる予測された測定対象物 -- 座標系: 世界座標系 -- フィールド: - - `id`: 整数 - - `pred_time`: 予測されたタイムスタンプ (sec, nanosec) - - `x`: 予測された測定対象物のx座標 (m) - - `y`: 予測された測定対象物のy座標 (m) - - `z`: 予測された測定対象物のz座標 (m) - - `x_stddev`: 予測された測定対象物のx座標の標準偏差 (m) - - `y_stddev`: 予測された測定対象物のy座標の標準偏差 (m) - - `z_stddev`: 予測された測定対象物のz座標の標準偏差 (m) - - `vx`: 予測された測定対象物の速度 (m/s) - - `vy`: 予測された測定対象物の速度 (m/s) - - `vz`: 予測された測定対象物の速度 (m/s) - - `yaw`: 予測された測定対象物の向き (rad) - - `yaw_stddev`: 予測された測定対象物の向きの標準偏差 (rad) - - `length`: 予測された測定対象物の長さ (m) - - `width`: 予測された測定対象物の幅 (m) - - `height`: 予測された測定対象物の高さ (m) - - `object_type`: 予測された測定対象物のタイプ (車, 歩行者, 自転車など) - - `existence_probability`: 予測された測定対象物の存在確率 - -### 'Trajectory'ポイントタイプ - -#### 'Predicted Trajectory' - -- Planningコンポーネントによる予測パス -- 座標系: 世界座標系 -- フィールド: - - `id`: 整数 - - `start_time`: パスの開始時刻 (sec, nanosec) - - `points`: `'Predicted Object'`ポイントの配列 - -#### 'Ego Vehicle Motion' - -- Planningコンポーネントによる自車位置の予測 -- 座標系: 世界座標系 -- フィールド: - - `id`: 整数 - - `meas_time`: タイムスタンプ (sec, nanosec) - - `x`: 予測された自車位置x座標 (m) - - `y`: 予測された自車位置y座標 (m) - - `z`: 予測された自車位置z座標 (m) - - `yaw`: 予測された自車位置の向き (rad) - - `vx`: 予測された自車速度 (m/s) - - `vy`: 予測された自車速度 (m/s) - - `vz`: 予測された自車速度 (m/s) - -### 'Control'ポイントタイプ - -#### 'Control Command' - -- PlanningコンポーネントからControlコンポーネントへの制御コマンド -- 座標系: 世界座標系 -- フィールド: - - `id`: 整数 - - `meas_time`: タイムスタンプ (sec, nanosec) - - `acceleration`: 要求される加速度 (m/s²) - - `steering_angle`: 要求される操舵角 (rad) - - `velocity`: 要求される速度 (m/s) - - `acceleration_limit`: 加速度制限 (m/s²) - - `steering_angle_limit`: 操舵角制限 (rad) - - `velocity_limit`: 速度制限 (m/s) - - `v_longitudinal_ jerk_limit`: 縦加速度逸脱量制限 (m/s³) - - `v_lateral_ jerk_limit`: 横加速度逸脱量制限 (m/s³) - - `steer_jerk_limit`: 操舵角逸脱量制限 (rad/s³) - - `max_deceleration`: 最大減速度 (m/s²) - - `min_deceleration`: 最小減速度 (m/s²) - - `max_lateral_acceleration`: 最大横加速度 (m/s²) - - `max_steer_acceleration`: 最大操舵角加速度 (m/s²) - - `max_steer_angle_rate`: 最大操舵角速度 (rad/s) diff --git a/common/autoware_signal_processing/README.md b/common/autoware_signal_processing/README.md index 61331144ee74e..b54f0d65cc50d 100644 --- a/common/autoware_signal_processing/README.md +++ b/common/autoware_signal_processing/README.md @@ -1,12 +1,13 @@ # 信号処理手法 -本パッケージでは、Autowareアプリケーション向けの信号処理関連の手法を紹介しています。現在のバージョンでは、以下の機能が利用できます。 +このパッケージでは、Autowareアプリケーション向けの信号処理関連のメソッドを提供します。現在のバージョンでは、以下の機能を利用できます。 -- 1次元ローパスフィルタ +- 1次ローパスフィルタ - [バターワースローパスフィルタツール](documentation/ButterworthFilter.md) -ローパスフィルタは現在、1次元ローパスフィルタリングのみをサポートしています。 +ローパスフィルタは、現在1次ローパスフィルタリングのみをサポートしています。 -## 想定 / 既知の制限 +## 仮定/既知の限界事項 + +未定。 -未定です。 diff --git a/common/autoware_test_utils/README.md b/common/autoware_test_utils/README.md index d4169de39a144..31f11a88d9dbe 100644 --- a/common/autoware_test_utils/README.md +++ b/common/autoware_test_utils/README.md @@ -1,49 +1,50 @@ -# テストユーティリティ +# テストツール ## 背景 -Autowareのいくつかのコンポーネント・モジュールに既に単体テストが導入されており、単体テストの記述プロセスを容易にする共通ライブラリが必要です。 +Autoware のコンポーネントとモジュールの多くはすでにユニットテストを採用しているので、ユニットテストを記述するプロセスを容易にする共通のライブラリが必要です。 ## 目的 -`test_utils`の目的は、Autowareコンポーネント用の単体テストライブラリの開発です。このライブラリには以下が含まれます。 +`test_utils` の目的は、Autoware コンポーネント用のユニットテストライブラリを開発することです。このライブラリには、次のものが含まれます。 - 一般的に使用される関数 - 入力/モックデータパーサー - テスト用のマップ -- 一般的な経路およびテスト用モックデータ +- テスト用の一般的なルートとモックデータ ## 利用可能なマップ -次のマップは[こちら](https://github.com/autowarefoundation/autoware.universe/tree/main/common/autoware_test_utils/test_map)で利用できます。 +次のマップは [ここ](https://github.com/autowarefoundation/autoware.universe/tree/main/common/autoware_test_utils/test_map) で入手できます。 ### Common -共通マップには、肩レーン、交差点、いくつかの規制要素など、使用可能なさまざまなタイプの入力が含まれています。共通マップはフォルダー内で`lanelet2_map.osm`という名前です。 +Common マップには、路肩、交差点、一部の規制要素を含む、さまざまなタイプの使用可能な入力が含まれています。Common マップはフォルダー内の `lanelet2_map.osm` という名前です。 ![common](./images/common.png) ### 2 km Straight -2 km直線レーンレットマップは、同じ方向に走る2つの車線で構成されています。マップは`2km_test.osm`という名前です。 +2 km Straight レーンレットマップは、同じ方向に走る 2 つのレーンで構成されています。このマップは `2km_test.osm` という名前です。 ![two_km](./images/2km-test.png) -以下にマップの設計を示します。 +マップの設計を以下に示します。 ![straight_diagram](./images/2km-test.svg) ### road_shoulders -road_shouldersレーンレットマップは、次のようなroad_shoulderタグが付いたさまざまなピックアップ/ドロップオフサイトマップで構成されています。 +road_shoulders レーンレットマップは、次のような road_shoulder タグを持つさまざまなピックアップ場所/降車地点マップで構成されています。 -- 側道車線の横にあるピックアップ/ドロップオフサイト -- 曲線車線の横にあるピックアップ/ドロップオフサイト -- 私有区域内のピックアップ/ドロップオフサイト +- 道路側のレーンにあるピックアップ/ドロップオフの場所 +- 曲線レーン側のピックアップ/ドロップオフの場所 +- 私有地内のピックアップ/ドロップオフの場所 ![road_shoulder_test](./images/road_shoulder_test_map.png) -planning_simulatorを次のように簡単に起動できます。 +planning_simulator を以下で簡単に起動できます。 + ```bash ros2 launch autoware_test_utils psim_road_shoulder.launch.xml vehicle_model:=<> sensor_model:=<> use_sim_time:=true @@ -51,42 +52,48 @@ ros2 launch autoware_test_utils psim_road_shoulder.launch.xml vehicle_model:=<> ### 交差点 -交差点のレーンレットマップには、以下を含むさまざまな交差点があります。 +交差点レーンレットマップは、以下を含むさまざまな交差点で構成されています。 -- 交通信号機付き4車線交差点 -- 交通信号機のない4車線交差点 -- 交通信号機のないT字路交差点 -- ループのある交差点 +- 信号機のある 4 方向交差点 +- 信号機のない 4 方向交差点 +- 信号機のない T 字交差点 +- 輪形の交差点 - 複雑な交差点 ![intersection_test](./images/intersection_test_map.png) -次のようにして簡単にplanning_simulatorを起動できます +planning_simulator は以下で簡単に起動できます。 + ```bash ros2 launch autoware_test_utils psim_intersection.launch.xml vehicle_model:=<> sensor_model:=<> use_sim_time:=true ``` -## 使用例 +## 使用事例 ### Autoware Planning Test Manager -[Autoware Planning Test Manager](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_planning_test_manager/)の目標は、Planningモジュールノードをテストすることです。 `PlanningInterfaceTestManager`クラス([ソースコード](https://github.com/autowarefoundation/autoware.universe/blob/main/planning/autoware_planning_test_manager/src/autoware_planning_test_manager.cpp))は、`test_utils`関数をベースにラッパー関数を生成します。 +[Autoware Planning Test Manager](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_planning_test_manager/) の目的は、Planningモジュールのノードをテストすることです。`PlanningInterfaceTestManager` クラス ([ソースコード](https://github.com/autowarefoundation/autoware.universe/blob/main/planning/autoware_planning_test_manager/src/autoware_planning_test_manager.cpp)) は、`test_utils` 関数をベースにラッパー関数を生成します。 -### 単体テスト用のテストデータ生成 +### 単体テスト用のテストデータを生成する + +[PR の説明](https://github.com/autowarefoundation/autoware.universe/pull/9207) で示したように、テストマップで Planning Simulation を実行中に、シーンのスナップショットを yaml ファイルに保存できます。 -[PR説明](https://github.com/autowarefoundation/autoware.universe/pull/9207)で提示されているように、ユーザーはテストマップ上でPlanning Simulationを実行中にシーンのスナップショットをyamlファイルに保存することができます。 ```bash -ros2 launch autoware_test_utils psim_road_shoulder.launch.xml vehicle_model:= sensor_model:= -ros2 launch autoware_test_utils psim_intersection.launch.xml vehicle_model:= sensor_model:= +ros2 launch autoware_test_utils psim_road_shoulder.launch.xml +ros2 launch autoware_test_utils psim_intersection.launch.xml ``` +デフォルトでは、autoware の `sample_vehicle_description` と `sample_sensor_kit` を使用し、`autoware_test_utils/config/test_vehicle_info.param.yaml` は `sample_vehicle_description` と全く同じです。指定されている場合、`vehicle_model`/`sensor_model` 引数を使うことができます。 + + ```bash ros2 service call /autoware_test_utils/topic_snapshot_saver std_srvs/srv/Empty \{\} ``` -トピックを保存するトピックのリストとフィールド名は、`config/sample_topic_snapshot.yaml` で指定されています。 +トピックの保存対象となるリストとフィールド名は`config/sample_topic_snapshot.yaml`で指定されています。 + ```yaml # setting @@ -101,4 +108,5 @@ self_odometry: ... ``` -各フィールドは、`autoware_test_utils/mock_data_parser.hpp` で定義された関数を使用して ROS メッセージタイプに解析できます。 +各フィールドは、`autoware_test_utils/mock_data_parser.hpp` で定義されている関数を使用して ROS メッセージ型に解析できます。 + diff --git a/common/autoware_universe_utils/README.md b/common/autoware_universe_utils/README.md index 480ebbefe390a..fdf9156f5a810 100644 --- a/common/autoware_universe_utils/README.md +++ b/common/autoware_universe_utils/README.md @@ -1,12 +1,12 @@ -## autoware_universe_utils +# autoware_universe_utils ## 目的 -このパッケージには、他のパッケージで一般的に使用される関数が多数含まれているため、必要に応じて参照してください。 +このパッケージには他のパッケージで一般的に使用される関数が多数含まれています。必要に応じてそれらを参照してください。 ## 開発者向け -プリプロセスに時間がかかるため、`autoware_universe_utils.hpp` ヘッダーファイルは削除されました。 +`autoware_universe_utils.hpp` ヘッダーファイルは、このファイルを直接または間接的にインクルードするソースファイルの前処理に時間がかかるため、削除されました。 ## `autoware::universe_utils` @@ -16,47 +16,49 @@ ##### コンストラクタ + ```cpp template explicit TimeKeeper(Reporters... reporters); ``` -- `TimeKeeper`をリポーターのリストで初期化します。 +- `TimeKeeper` の初期化にリポーターのリストを使用。 ##### メソッド - `void add_reporter(std::ostream * os);` - - `ostream`に出力処理時間をレポートするリポーターを追加します。 - - `os`: `ostream`オブジェクトへのポインタ。 + - 処理時間を `ostream` に出力するためのリポーターを追加。 + - `os`: `ostream` オブジェクトへのポインタ。 - `void add_reporter(rclcpp::Publisher::SharedPtr publisher);` - - 処理時間を`rclcpp`パブリッシャーにパブリッシュするリポーターを追加します。 - - `publisher`: `rclcpp`パブリッシャーへの共有ポインタ。 + - 処理時間を `rclcpp` パブリッシャーへ発行するためのリポーターを追加。 + - `publisher`: `rclcpp` パブリッシャーの共有ポインタ。 - `void add_reporter(rclcpp::Publisher::SharedPtr publisher);` - - 処理時間を`std_msgs::msg::String`を使用した`rclcpp`パブリッシャーにパブリッシュするリポーターを追加します。 - - `publisher`: `rclcpp`パブリッシャーへの共有ポインタ。 + - 処理時間を `std_msgs::msg::String` を持つ `rclcpp` パブリッシャーへ発行するためのリポーターを追加。 + - `publisher`: `rclcpp` パブリッシャーの共有ポインタ。 - `void start_track(const std::string & func_name);` - - 関数の処理時間を追跡し始めます。 - - `func_name`: 追跡する関数の名前。 + - 関数の処理時間の追跡を開始。 + - `func_name`: 追跡対象の関数の名前。 - `void end_track(const std::string & func_name);` - - 関数の処理時間の追跡を終了します。 + - 関数の処理時間の追跡を終了。 - `func_name`: 追跡を終了する関数の名前。 - `void comment(const std::string & comment);` - - 追跡中の現在の関数にコメントを追加します。 + - 追跡中の現在の関数に対してコメントを追加。 - `comment`: 追加するコメント。 -##### 注釈 +##### 注意 + +- 処理時間の測定は、以下のように `start_track` と `end_track` を使用して開始および終了できます。 -- 以下に示すように、`start_track`と`end_track`を使用して時間測定を開始および終了できます。 ```cpp time_keeper.start_track("example_function"); @@ -64,10 +66,11 @@ explicit TimeKeeper(Reporters... reporters); time_keeper.end_track("example_function"); ``` -- 安全性と適切な追跡を確保するために、`ScopedTimeTrack`の使用を推奨します。 +- 安全性と適切な追跡を確保するために、`ScopedTimeTrack` の使用が推奨されます。 ##### 例 + ```cpp #include @@ -138,7 +141,10 @@ int main(int argc, char ** argv) } ``` -- 出力(コンソール) +## 自動運転ソフトウェアのドキュメント + +### 出力 (コンソール) + ```text ========================== @@ -147,7 +153,8 @@ int main(int argc, char ** argv) └── func_c (3.055ms) : This is a comment for func_c ``` -- 出力 (`ros2 topic echo /processing_time`) +- 出力(`ros2 topic echo /processing_time`) + ```text --- @@ -173,21 +180,24 @@ int main(int argc, char ** argv) ##### 説明 -スコープ内の関数の処理時間を自動的に追跡するためのクラスです。 +スコープ内で関数の処理時間を自動的に追跡するためのクラスです。 ##### コンストラクタ + ```cpp ScopedTimeTrack(const std::string & func_name, TimeKeeper & time_keeper); ``` -- `func_name`: 追跡する関数の名前。 -- `time_keeper`: `TimeKeeper` オブジェクトへの参照。 +- `func_name`: 追跡される関数の名前 +- `time_keeper`: `TimeKeeper`オブジェクトへの参照 + +##### デストラクタ -##### デストラクター ```cpp ~ScopedTimeTrack(); ``` -- `ScopedTimeTrack`オブジェクトを破壊し、関数の追跡を終了します。 +- `ScopedTimeTrack` オブジェクトを破棄し、関数の追跡を終了します。 + diff --git a/common/bag_time_manager_rviz_plugin/README.md b/common/bag_time_manager_rviz_plugin/README.md index 717300efb3ae8..f35cae5dc2ef3 100644 --- a/common/bag_time_manager_rviz_plugin/README.md +++ b/common/bag_time_manager_rviz_plugin/README.md @@ -2,15 +2,15 @@ ## 目的 -このプラグインは、rosバッグの時間をパブリッシュし制御します。 +このプラグインを使用すると、ROS bagの時間を公開および制御できます。 ## 出力 -TBD +未定。 ## 使用方法 -1. rvizを起動し、パネル/新しいパネルの追加を選択します。 +1. rvizを起動し、パネル/新しいパネルを追加を選択します。 ![select_panel](./images/select_panels.png) @@ -18,9 +18,10 @@ TBD ![select_manager_plugin](./images/add_bag_time_manager_panel.png) -3. bag_time_manager_rviz_plugin/BagTimeManagerPanelが追加されていることを確認します。 +3. bag_time_manager_rviz_plugin/BagTimeManagerPanelが追加されたことを確認します。 ![manager_plugin](./images/bag_time_manager_panel.png) -- Pause/Resume: クロックを一時停止/再開します。 -- ApplyRate: クロックのレートを適用します。 +- 一時停止/再開: クロックの一時停止/再開。 +- レートを適用: クロックのレートを適用。 + diff --git a/common/component_interface_utils/README.md b/common/component_interface_utils/README.md index 2a2b191c854a0..ec7a71a010fb4 100644 --- a/common/component_interface_utils/README.md +++ b/common/component_interface_utils/README.md @@ -1,101 +1,2 @@ -# component_interface_utils +404: 見つかりません -## Features - -This is a utility package that provides the following features: - -- Instantiation of the wrapper class -- Logging for service and client -- Service exception for response -- Relays for topic and service - -## Design - -This package provides the wrappers for the interface classes of rclcpp. -The wrappers limit the usage of the original class to enforce the processing recommended by the component interface. -Do not inherit the class of rclcpp, and forward or wrap the member function that is allowed to be used. - -## Instantiation of the wrapper class - -The wrapper class requires interface information in this format. - -```cpp -struct SampleService -{ - using Service = sample_msgs::srv::ServiceType; - static constexpr char name[] = "/sample/service"; -}; - -struct SampleMessage -{ - using Message = sample_msgs::msg::MessageType; - static constexpr char name[] = "/sample/message"; - static constexpr size_t depth = 1; - static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE; - static constexpr auto durability = RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL; -}; -``` - -Create the wrapper using the above definition as follows. - -```cpp -// header file -component_interface_utils::Service::SharedPtr srv_; -component_interface_utils::Client::SharedPtr cli_; -component_interface_utils::Publisher::SharedPtr pub_; -component_interface_utils::Subscription::SharedPtr sub_; - -// source file -const auto node = component_interface_utils::NodeAdaptor(this); -node.init_srv(srv_, callback); -node.init_cli(cli_); -node.init_pub(pub_); -node.init_sub(sub_, callback); -``` - -## Logging for service and client - -If the wrapper class is used, logging is automatically enabled. The log level is `RCLCPP_INFO`. - -## Service exception for response - -If the wrapper class is used and the service response has status, throwing `ServiceException` will automatically catch and set it to status. -This is useful when returning an error from a function called from the service callback. - -```cpp -void service_callback(Request req, Response res) -{ - function(); - res->status.success = true; -} - -void function() -{ - throw ServiceException(ERROR_CODE, "message"); -} -``` - -If the wrapper class is not used or the service response has no status, manually catch the `ServiceException` as follows. - -```cpp -void service_callback(Request req, Response res) -{ - try { - function(); - res->status.success = true; - } catch (const ServiceException & error) { - res->status = error.status(); - } -} -``` - -## Relays for topic and service - -There are utilities for relaying services and messages of the same type. - -```cpp -const auto node = component_interface_utils::NodeAdaptor(this); -service_callback_group_ = create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); -node.relay_message(pub_, sub_); -node.relay_service(cli_, srv_, service_callback_group_); // group is for avoiding deadlocks -``` diff --git a/common/glog_component/README.md b/common/glog_component/README.md index 483ea0c493d16..1aae28e4dab64 100644 --- a/common/glog_component/README.md +++ b/common/glog_component/README.md @@ -1,12 +1,13 @@ # glog_component -このパッケージは、glog(Google ロギングライブラリ)機能を ros2 コンポーネントライブラリとして提供します。これを使用して、コンテナで glog 機能を動的に読み込みます。 +本パッケージは、ros2コンポーネントライブラリとしてglog(googleロギングライブラリ)の機能を提供します。これを使用してコンテナでglog機能を動的ロードします。 -詳細な機能については [glog github](https://github.com/google/glog) を参照してください。 +機能の詳細については、[glog github](https://github.com/google/glog)を参照してください。 -## 例 +## 使用例 + +コンテナで`glog_component`をロードする場合、以下のようにlaunchファイルを設定できます。 -コンテナで `glog_component` を読み込む場合、起動ファイルは以下のようになります。 ```py glog_component = ComposableNode( @@ -27,3 +28,4 @@ container = ComposableNodeContainer( ], ) ``` + diff --git a/common/tier4_adapi_rviz_plugin/README.md b/common/tier4_adapi_rviz_plugin/README.md index aca903d0ed0dc..e2661db862c62 100644 --- a/common/tier4_adapi_rviz_plugin/README.md +++ b/common/tier4_adapi_rviz_plugin/README.md @@ -1,29 +1,28 @@ -# tier4_adapi_rviz_plugin +## tier4_adapi_rviz_plugin ## RoutePanel -パネルを使用するには、2D Goal Pose Tool のトピック名を `/rviz/routing/pose` に設定します。 -既定では、ツールがポーズを公開すると、パネルはそのポーズをゴールとするルートをすぐに設定します。 -allow_goal_modification オプションの有効化または無効化はチェックボックスで設定できます。 +パネルを使用するには、トピック名を 2D Goal Pose ツールから `/rviz/routing/pose` に設定します。 +デフォルトでは、ツールがポーズを発行すると、パネルは直ちにそのポーズをゴールとする経路を設定します。 +allow_goal_modification オプションの有効/無効はチェックボックスで設定できます。 -ウェイポイント内のモードボタンを押してウェイポイントモードに入ります。このモードでは、ポーズがウェイポイントに追加されます。 -保存したウェイポイント (最後の一つはゴール) を使用してルートを設定するには、適用ボタンを押します。 -保存したウェイポイントをリセットするには、リセットボタンを押します。 +ウェイポイントモードに入るには、ウェイポイントのモードボタンを押します。このモードでは、ポーズがウェイポイントに追加されます。保存されたウェイポイントを使用してルートを設定するには、適用ボタンを押します(最後のものはゴールです)。リセットボタンで保存されたウェイポイントをリセットします。 -## Material Design アイコン +## Material Design Icons -このプロジェクトでは、Google の [Material Design Icons](https://developers.google.com/fonts/docs/material_symbols) を使用しています。これらのアイコンは Apache License, Version 2.0 の条項に基づいて使用されています。 +このプロジェクトでは、Google の [Material Design Icons](https://developers.google.com/fonts/docs/material_symbols) を使用しています。これらのアイコンは、Apache ライセンス 2.0 の条件で利用されています。 -Material Design アイコンは、Google が提供するシンボルのコレクションで、アプリケーション、ウェブサイト、その他のデジタル製品のユーザーインターフェイスを強化するために使用されています。 +Material Design Icons は、Google が提供するシンボルであり、アプリケーション、ウェブサイト、その他のデジタル製品のユーザーインターフェイスを強化するために使用します。 ### ライセンス -Material Design アイコンは Apache License, Version 2.0 のもとでライセンスされています。ライセンスのコピーは次の場所から入手できます。 +Material Design Icons は Apache ライセンス 2.0 の対象です。ライセンスのコピーは次の場所から入手できます。 -適用される法律によって要求されるか、書面により同意しない限り、ライセンスに基づいて配布されるソフトウェアは、「現状のまま」で明示的または黙示的な保証や条件なしに配布されます。ライセンスの特定の言語に準拠した許可およびライセンスに基づく制限事項を参照してください。 +適用される法律によって要求されないか、書面による同意がない限り、ライセンスに基づいて配布されるソフトウェアは、明示的または黙示的な保証または条件なしの「そのまま」の状態で配布されます。ライセンスの特定の言語を管理する権限と制限については、ライセンスを参照してください。 ### 謝辞 -これらのアイコンをコミュニティに提供し、開発者とデザイナーがプロジェクトの視覚的魅力とユーザーエクスペリエンスを強化するのに役立てている Google に感謝の意を表します。 +これらのアイコンをコミュニティに提供し、開発者とデザイナーがプロジェクトのビジュアルアピールとユーザーエクスペリエンスを向上させるのに役立ててくれた Google に感謝の意を表します。 + diff --git a/common/tier4_api_utils/README.md b/common/tier4_api_utils/README.md index 44d8457620edd..4c606df906562 100644 --- a/common/tier4_api_utils/README.md +++ b/common/tier4_api_utils/README.md @@ -1,4 +1,5 @@ # tier4_api_utils -これはサービスを呼び出したときにログを記録するクラスの古い実装です。 -代わりに[component_interface_utils](../component_interface_utils/README.md)を使用してください。 +これは、サービスをコールするときにログを記録するクラスの古い実装です。 +代わりに、[component_interface_utils](../component_interface_utils/README.md) を使用してください。 + diff --git a/common/tier4_camera_view_rviz_plugin/README.md b/common/tier4_camera_view_rviz_plugin/README.md index e35f5f5cb3450..fcdb27b1da0fd 100644 --- a/common/tier4_camera_view_rviz_plugin/README.md +++ b/common/tier4_camera_view_rviz_plugin/README.md @@ -1,27 +1,28 @@ # tier4_camera_view_rviz_plugin -## 第三者ビューツール +## ThirdPersonView Tool -RVizに`tier4_camera_view_rviz_plugin/ThirdPersonViewTool`ツールを追加します。ボタンを押すと、カメラが車両にフォーカスされ、ターゲットフレームが「base_link」に設定されます。ショートカットキーは「o」です。 +RVizに`tier4_camera_view_rviz_plugin/ThirdPersonViewTool`ツールを追加します。ボタンを押すと、カメラが車両にフォーカスし、ターゲットフレームを`base_link`に設定します。ショートカットキーは「o」です。 -## 鳥瞰図ビューツール +## BirdEyeView Tool RVizに`tier4_camera_view_rviz_plugin/BirdEyeViewTool`ツールを追加します。ボタンを押すと、カメラがBEVビューに切り替わり、ターゲットフレームは最新のフレームと一致します。ショートカットキーは「r」です。 -## マテリアルデザインアイコン +## Material Design アイコン -このプロジェクトではGoogleの [マテリアルデザインアイコン](https://developers.google.com/fonts/docs/material_symbols)を使用しています。これらのアイコンはApache License、バージョン2.0の条項に従って使用されています。 +このプロジェクトでは、Googleの[Material Design Icons](https://developers.google.com/fonts/docs/material_symbols)を使用しています。これらのアイコンは、Apache License、バージョン2.0の条項に基づいて使用されています。 -マテリアルデザインアイコンは、アプリケーション、Webサイト、その他のデジタル製品のユーザーインターフェイスを向上させるためにGoogleによって提供される記号のコレクションです。 +Material Design アイコンは、Googleによって提供される、アプリケーション、Webサイト、その他のデジタル製品のユーザーインターフェースを向上させるために使用されるシンボルのコレクションです。 ### ライセンス -マテリアルデザインアイコンは、Apache License、バージョン2.0のライセンスが付与されています。ライセンスのコピーは次のURLから入手できます。 +Material Design アイコンは、Apache License、バージョン2.0のライセンスに基づいています。ライセンスのコピーは次のURLから入手できます。 -適用される法律により要求されない限り、または書面による合意がない限り、ライセンスに基づいて配布されるソフトウェアは、「現状のまま」の状態で配布され、明示的または黙示的な保証や条件はありません。ライセンスに記載されている特定の言語に記載される許可と制限事項を参照してください。 +適用法または書面による合意によって要求されない限り、ライセンスに基づいて配布されるソフトウェアは、「現状のまま」の状態で、明示的または黙示的を問わず、いかなる保証または条件もなしに配布されます。ライセンスに記載されている制限事項と対象事項に関する特定の言語については、ライセンスを参照してください。 ### 謝辞 -これらのアイコンをコミュニティに提供し、開発者やデザイナーがプロジェクトのビジュアルアピールとユーザーエクスペリエンスを向上させることができるよう支援するGoogleに感謝の意を表します。 +これらのアイコンをコミュニティに提供し、開発者やデザイナーがプロジェクトの視覚的魅力とユーザーエクスペリエンスを向上させるのに役立ててくださったGoogleに感謝いたします。 + diff --git a/common/tier4_datetime_rviz_plugin/README.md b/common/tier4_datetime_rviz_plugin/README.md index 480d9cede83a9..f3ef180d41763 100644 --- a/common/tier4_datetime_rviz_plugin/README.md +++ b/common/tier4_datetime_rviz_plugin/README.md @@ -2,15 +2,16 @@ ## 目的 -このプラグインは、ROS時刻とウォール時刻をrvizに表示します。 +このプラグインは、ROS時刻と壁時計をrvizに表示します。 -## 想定/既知の制限 +## 想定/既知の制限事項 -TBD。 +TBD ## 使用方法 -1. rvizを起動して、パネル/新しいパネルを追加を選択します。 - ![select_panel](./images/select_panels.png) -2. tier4_datetime_rviz_plugin/AutowareDateTimePanelを選択して、OKを押します。 - ![select_datetime_plugin](./images/select_datetime_plugin.png) +1. rvizを起動し、パネル/新しいパネルを追加を選択します。 + ![panelを選択](./images/select_panels.png) +2. tier4_datetime_rviz_plugin/AutowareDateTimePanelを選択してOKをクリックします。 + ![日付時刻プラグインを選択](./images/select_datetime_plugin.png) + diff --git a/common/tier4_localization_rviz_plugin/README.md b/common/tier4_localization_rviz_plugin/README.md index 4b41a82c626db..5bf5e9f7819d9 100644 --- a/common/tier4_localization_rviz_plugin/README.md +++ b/common/tier4_localization_rviz_plugin/README.md @@ -1,24 +1,25 @@ -## tier4_localization_rviz_plugin +# tier4_localization_rviz_plugin ## 目的 -このプラグインは、ekf_localizer、ndt_scan_matching、GNSSによって取得されたローカリゼーションの履歴を表示できます。推定ポーズの不確かさが与えられた場合、それも表示できます。 +このプラグインは、ekf_localizer、ndt_scan_matching、および GNSS により得られた局在化履歴を表示できます。 +推定された姿勢の不確かさを与えれば、それらを表示することもできます。 -## 入出力 +## 入力/出力 ### 入力 -### Pose履歴 +###姿勢履歴 -| 名称 | タイプ | 説明 | -| ------------ | --------------------------------- | --------------------------------------------------------------------------------------------------- | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | `input/pose` には、ekf_localizer、ndt_scan_matching、または GNSS で計算された局所化の結果を入れます | +| 名称 | 型 | 説明 | +| ------------ | ------------------------------------- | --------------------------------------------------------------------------------------------------------------- | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | `input/pose`には、ekf_localizer、ndt_scan_matching、またはGNSSで計算されたローカライゼーションの結果を格納します。 | -### 共分散を持つ自車位置履歴 +### 共分散履歴付きポーズ -| 名称 | 型 | 説明 | -| ---------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | `input/pose_with_covariance` には、ekf_localizer、ndt_scan_matching、GNSS によって計算された、ローカリゼーションの結果を配置します。 | +| 名称 | 型 | 説明 | +| ---------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | +| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | `input/pose_with_covariance`には、`ekf_localizer`、`ndt_scan_matching`、またはGNSSによって計算されたローカリゼーションの結果を設定します。 | ## パラメータ @@ -26,45 +27,46 @@ ### 自車位置履歴 -| 名称 | タイプ | デフォルト値 | 説明 | -| ----------------------- | ------ | ------------ | ------------------------ | -| `property_buffer_size_` | int | 100 | トピックのバッファサイズ | -| `property_line_view_` | bool | true | Lineプロパティを使用 | -| `property_line_width_` | float | 0.1 | Lineプロパティの幅 [m] | -| `property_line_alpha_` | float | 1.0 | Lineプロパティのアルファ | -| `property_line_color_` | QColor | Qt::white | Lineプロパティの色 | - -### 自車位置の共分散履歴 - -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------------------------- | ------ | -------------- | ------------------------------- | -| `property_buffer_size_` | int | 100 | トピックのバッファサイズ | -| `property_path_view_` | bool | true | パスプロパティを使用するか否か | -| `property_shape_type_` | string | Line | LineまたはArrow | -| `property_line_width_` | float | 0.1 | Lineプロパティの幅 [m] | -| `property_line_alpha_` | float | 1.0 | Lineプロパティのアルファ | -| `property_line_color_` | QColor | Qt::white | Lineプロパティの色 | -| `property_arrow_shaft_length` | float | 0.3 | Arrowプロパティのシャフトの長さ | -| `property_arrow_shaft_diameter` | float | 0.15 | Arrowプロパティのシャフトの直径 | -| `property_arrow_head_length` | float | 0.2 | Arrowプロパティのヘッドの長さ | -| `property_arrow_head_diameter` | float | 0.3 | Arrowプロパティのヘッドの直径 | -| `property_arrow_alpha_` | float | 1.0 | Arrowプロパティのアルファ | -| `property_arrow_color_` | QColor | Qt::white | Arrowプロパティの色 | -| `property_sphere_scale_` | float | 1.0 | Sphereプロパティのスケール | -| `property_sphere_alpha_` | float | 0.5 | Sphereプロパティのアルファ | -| `property_sphere_color_` | QColor | (204, 51, 204) | Sphereプロパティの色 | - -## 想定/既知の制限 - -TBD. +| 名前 | タイプ | デフォルト値 | 説明 | +|---|---|---|---| +| `property_buffer_size_` | int | 100 | トピックのバッファーサイズ | +| `property_line_view_` | bool | true | 線プロパティを使用するかどうか | +| `property_line_width_` | float | 0.1 | 線プロパティの幅 [m] | +| `property_line_alpha_` | float | 1.0 | 線プロパティのアルファ | +| `property_line_color_` | QColor | Qt::white | 線プロパティの色 | + +### 自車位置と共分散履歴 + +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------------------------------ | ------ | -------------- | ----------------------------------------- | +| `property_buffer_size_` | int | 100 | トピックのバッファサイズ | +| `property_path_view_` | bool | true | パスプロパティを使用するかどうか | +| `property_shape_type_` | string | Line | LineまたはArrow | +| `property_line_width_` | float | 0.1 | Line プロパティの幅 [m] | +| `property_line_alpha_` | float | 1.0 | Line プロパティのアルファ | +| `property_line_color_` | QColor | Qt::white | Line プロパティの色 | +| `property_arrow_shaft_length` | float | 0.3 | Arrow プロパティのシャフト長 | +| `property_arrow_shaft_diameter` | float | 0.15 | Arrow プロパティのシャフト直径 | +| `property_arrow_head_length` | float | 0.2 | Arrow プロパティのヘッド長 | +| `property_arrow_head_diameter` | float | 0.3 | Arrow プロパティのヘッド直径 | +| `property_arrow_alpha_` | float | 1.0 | Arrow プロパティのアルファ | +| `property_arrow_color_` | QColor | Qt::white | Arrow プロパティの色 | +| `property_sphere_scale_` | float | 1.0 | Sphere プロパティのスケール | +| `property_sphere_alpha_` | float | 0.5 | Sphere プロパティのアルファ | +| `property_sphere_color_` | QColor | (204, 51, 204) | Sphere プロパティの色 + +## 仮定 / 想定される制限 + +定義待ち(TBD)。 ## 使用方法 -1. rvizを起動し、[Displays]パネルで[Add]を選択します。 +1. rvizを起動し、「ディスプレイ」パネルで「追加」を選択します。 ![select_add](./images/select_add.png) -2. [tier4_localization_rviz_plugin/PoseHistory]または[PoseWithCovarianceHistory]を選択します。次に、[OK]を押します。 +2. tier4_localization_rviz_plugin/PoseHistory または PoseWithCovarianceHistory を選択します。次に、「OK」を押します。 ![select_localization_plugin](./images/select_localization_plugin.png) -3. 軌道と共分散を表示するトピックの名前を入力します。 +3. 軌跡と共分散を表示するトピックの名前を入力します。 ![select_topic_name](./images/select_topic_name.png) -4. 軌道と共分散を表示できます。 +4. 軌跡と共分散を表示できます。 ![ex_pose_with_covariance_history](./images/ex_pose_with_covariance_history.png) + diff --git a/common/tier4_planning_rviz_plugin/README.md b/common/tier4_planning_rviz_plugin/README.md index 7cd3f11e93409..f1b4f99676663 100644 --- a/common/tier4_planning_rviz_plugin/README.md +++ b/common/tier4_planning_rviz_plugin/README.md @@ -1,328 +1,190 @@ ## tier4_planning_rviz_plugin -このパッケージにはjskコードが含まれます。 -jsk_overlay_utils.cppとjsk_overlay_utils.hppはBSDライセンスです。 +このパッケージは jsk コードを含みます。 +jsk_overlay_utils.cpp と jsk_overlay_utils.hpp は BSD ライセンスであることに注意してください。 ## 目的 -このプラグインは、パス、軌跡、および最高速度を表示します。 +このプラグインは、経路、軌跡、最大速度を表示します。 ## 入出力 ### 入力 -- current pose -- velocity profile -- planned trajectory -- v_max - -### Output - -- No outputs - -## Usage - -`roslaunch tier4_planning_rviz_plugin tier4_planning_rviz_plugin.launch [args...]` - -## Arguments - -``` ---topic /planning/trajectory ---pose_topic /current_pose ---velocty_topic /planning/velocity_profile ---max_velo /planning/v_max ---frame_id base_link ---max_lateral_jerk 0.5 ---max_longitudinal_jerk 1.0 -``` - -| 名前 | タイプ | 説明 | -| -------------------------------------------------- | ----------------------------------------- | ------------------------------------------ | -| `/input/path` | `autoware_planning_msgs::msg::Path` | パスをサブスクライブするトピック | -| `/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | トラジェクトリをサブスクライブするトピック | +| 名前 | タイプ | 説明 | +| -------------------------------------------------- | ----------------------------------------- | ------------------------------------------- | +| `/input/path` | `autoware_planning_msgs::msg::Path` | パスをサブスクライブするトピック | +| `/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 軌跡をサブスクライブするトピック | | `/planning/scenario_planning/current_max_velocity` | `tier4_planning_msgs/msg/VelocityLimit` | 最大速度をパブリッシュするトピック | ### 出力 -このドキュメントでは、AutowareにおけるPlanningコンポーネント内の経路計画モジュールの詳細を説明します。 +**自動運転ソフトウェアに関するドキュメント** + +**概要** -#### 目的 +このドキュメントは、Autowareの自動運転ソフトウェアのPlanning(走行計画)コンポーネントに関する内容です。Planningコンポーネントは、センサーデータから自車位置を推定し、将来の経路を計画します。 -経路計画モジュールは、障害物や走行制限を考慮した、安全で効率的な経路を生成します。 +**機能** -#### 入力 +* 自車位置の推定 +* 障害物の検出と追跡 +* 走行経路の計画 +* 安全性の評価 +* `post resampling` -- 自車位置(`current pose`) -- 目的地 -- 障害物マップ -- 走行制限マップ +**技術** -#### 出力 +* Kalmanフィルター +* 粒子フィルター +* A*アルゴリズム +* 動的計画法 -- 経路(`post resampling`) -- 速度プロファイル -- 加速度逸脱量 -- 速度逸脱量 +**システムアーキテクチャ** -#### アルゴリズム +Planningコンポーネントは、Autowareのモジュール化されたソフトウェアアーキテクチャの一部です。他のコンポーネントと通信して、センサーデータ、自車位置、走行経路などの情報を共有します。 -経路計画モジュールは、以下を含む複数のサブコンポーネントを使用します。 +**使用例** -- **経路探索:** A\*アルゴリズムを使用して、障害物を回避する最適な経路を探索します。 -- **経路平滑化:** 経路の急カーブや急激な速度変化を滑らかにします。 -- **速度計画:** 速度制限や加速制限を考慮して、安全な速度プロファイルを作成します。 +Planningコンポーネントは、自動運転車の開発に使用できます。このコンポーネントは、車両を安全に走行させるために、周辺環境を理解し、適切な決定を下すのに役立ちます。 -#### 注意事項 +**ライセンス** -- 経路計画モジュールは、障害物マップと走行制限マップの正確性に依存します。 -- モジュールは動的環境では動作しません。 -- 経路は**推奨経路**であることに注意してください。実際の経路は、センサーデータや他の制御システムによって修正される可能性があります。 +このソフトウェアはApache License 2.0でライセンスされています。 -| 名称 | 種別 | 説明 | -| --------------------------------------- | ------------------------------- | ---------------------------------- | -| `/planning/mission_planning/checkpoint` | `geometry_msgs/msg/PoseStamped` | チェックポイントを公開するトピック | +| 名前 | タイプ | 説明 | +| --------------------------------------- | ------------------------------- | ---------------------------------------- | +| `/planning/mission_planning/checkpoint` | `geometry_msgs/msg/PoseStamped` | チェックポイントを発行するトピック | -## パラメーター +## パラメータ -### コアパラメーター +### コアパラメータ #### MissionCheckpoint -| 名前 | 型 | 初期値 | 説明 | -| ---------------------- | -------- | -------------------- | ------------------------------------------- | -| `pose_topic_property_` | 文字列 | `mission_checkpoint` | チェックポイントを発行するトピック | -| `std_dev_x_` | 浮動小数 | 0.5 | チェックポイント姿勢の X 標準偏差 [m] | -| `std_dev_y_` | 浮動小数 | 0.5 | チェックポイント姿勢の Y 標準偏差 [m] | -| `std_dev_theta_` | 浮動小数 | M_PI / 12.0 | チェックポイント姿勢の Theta 標準偏差 [rad] | -| `position_z_` | 浮動小数 | 0.0 | チェックポイント姿勢の Z 位置 [m] | +| 名称 | タイプ | デフォルト値 | 説明 | +| ---------------------- | ------ | -------------------- | -------------------------------------------------- | +| `pose_topic_property_` | 文字列 | `mission_checkpoint` | チェックポイントをパブリッシュするトピック | +| `std_dev_x_` | 浮動小数 | 0.5 | チェックポイントのX軸標準偏差 [m] | +| `std_dev_y_` | 浮動小数 | 0.5 | チェックポイントのY軸標準偏差 [m] | +| `std_dev_theta_` | 浮動小数 | M_PI / 12.0 | チェックポイントのTheta軸標準偏差 [rad] | +| `position_z_` | 浮動小数 | 0.0 | チェックポイントのZ軸位置 [m] | #### Path -**Planning** コンポーネントは、現在の経路の経路を生成し、各経路ポイントの速度と加速度を計算します。経路には、車両の現在の姿勢からゴールまでの道筋を示す一連のセグメントが含まれています。 - -各セグメントには、以下のパラメータが含まれています。 - -- 開始と終了の経路ポイント -- 最大速度と加速度 -- スプライン補完(オプション) - -**Planning** コンポーネントは、以下を考慮して経路を最適化します。 - -- 交通規制(速度制限、停止線など) -- 交通状況(他の車両、歩行者など) -- 車両の動力学(加速度、減速度、曲がる能力) - -最適化された経路が計算されたら、**Planning** コンポーネントはこれを実行される一連のコマンド(コントロールコマンド)に変換します。コントロールコマンドには、車両の速度、加速度、ステアリングの目標値が含まれます。 - -| 名称 | 型 | デフォルト値 | 説明 | -| ------------------------------- | ------ | ------------ | -------------------------------- | -| `property_path_view_` | bool | true | パスプロパティを使用するかどうか | -| `property_path_width_view_` | bool | false | 一定の幅を使用するかどうか | -| `property_path_width_` | float | 2.0 | パスプロパティの幅 [m] | -| `property_path_alpha_` | float | 1.0 | パスプロパティのアルファ | -| `property_path_color_view_` | bool | false | 一定の色を使用するかどうか | -| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | -| `property_velocity_view_` | bool | true | 速度プロパティを使用するかどうか | -| `property_velocity_alpha_` | float | 1.0 | 速度プロパティのアルファ | -| `property_velocity_scale_` | float | 0.3 | 速度プロパティのスケール | -| `property_velocity_color_view_` | bool | false | 一定の色を使用するかどうか | -| `property_velocity_color_` | QColor | Qt::black | 速度プロパティの色 | -| `property_vel_max_` | float | 3.0 | 最大速度 [m/s] | - -#### 走行可能領域 - -このドキュメントでは、Autowareの中核となるコンポーネントであるDrivableAreaについて説明します。 - -**目的** -DrivableAreaモジュールは、現在の周りの走行可能なエリアを検出し、それをトラジェクトリプランニングとローカルプランニングに提供します。 - -**入力** - -- 自車位置と姿勢 -- センサーデータ(点群、画像など) -- Map data (lane information, drivable area information) -- タスクマニュアル(実行するタスク) - -**出力** - -- 走行可能領域の点群 -- 走行可能領域のポリゴン - -**アルゴリズム** -DrivableAreaモジュールは、以下のステップで走行可能領域を検出します。 - -1. **Occupancy Gridの作成:** センサーデータを処理して、周囲環境の占有グリッドを作成します。 -2. **点群フィルタリング:** 点群から、地面、障害物、走行不可能なオブジェクトを除去します。 -3. **走行可能エリアの抽出:** 除去された点群から、走行可能なエリアを抽出します。 -4. **`post resampling`:** 走行可能エリアを滑らかにし、ノイズを除去します。 - -**パラメータ** -DrivableAreaモジュールの動作は、次のパラメータで構成できます。 +| 名称 | タイプ | デフォルト値 | 説明 | +|---|---|---|---| +| `property_path_view_` | bool | true | パスプロパティを使用するかどうか | +| `property_path_width_view_` | bool | false | 定幅を使用するかどうか | +| `property_path_width_` | float | 2.0 | パスプロパティの幅 [m] | +| `property_path_alpha_` | float | 1.0 | パスプロパティのアルファ | +| `property_path_color_view_` | bool | false | 定色を使用するかどうか | +| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | +| `property_velocity_view_` | bool | true | ベロシティプロパティを使用するかどうか | +| `property_velocity_alpha_` | float | 1.0 | ベロシティプロパティのアルファ | +| `property_velocity_scale_` | float | 0.3 | ベロシティプロパティのスケール | +| `property_velocity_color_view_` | bool | false | 定色を使用するかどうか | +| `property_velocity_color_` | QColor | Qt::black | ベロシティプロパティの色 | +| `property_vel_max_` | float | 3.0 | 最大速度 [m/s] | -- センサーパラメータ(スキャン範囲、解像度など) -- フィルターパラメータ(地面検出しきい値、障害物検出しきい値など) -- 抽出パラメータ(走行可能エリアの最小サイズ、最大傾斜角度など) -- `post resampling`パラメータ(カーネルサイズ、シグマ値など) +#### 車両走行可能領域 -**評価指標** -DrivableAreaモジュールの性能は、以下の指標によって評価できます。 -- 正答率 -- 再現率 -- F1スコア -- 処理時間 -**依存関係** -DrivableAreaモジュールは、以下のコンポーネントに依存しています。 - -- ロケーション(自車位置と姿勢の提供) -- センサー(点群と画像データの提供) -- マップ(レーン情報と走行可能エリア情報の提供) -- タスクマネージャー(実行するタスクの提供) - -**制限事項** -DrivableAreaモジュールには、次の制限事項があります。 - -- センサーの死角の影響を受けます。 -- 動的障害物(歩行者、車両など)を検出できません。 -- 急激な勾配や複雑な環境では、走行可能領域を正確に検出できない場合があります。 - -| 名前 | タイプ | 初期値 | 説明 | -| ------------------------ | ------ | ------ | -------------------------------------- | -| `color_scheme_property_` | 整数 | 0 | 走行可能エリアプロパティのカラーテーマ | -| `alpha_property_` | float | 0.2 | 走行可能エリアプロパティのアルファ値 | -| `draw_under_property_` | bool | false | 背景として描画するか否か | +| 名前 | タイプ | デフォルト値 | 説明 | +| ------------------------ | ----- | ------------- | ---------------------------------------- | +| `color_scheme_property_` | int | 0 | 走行可能エリアプロパティのカラーパレット | +| `alpha_property_` | float | 0.2 | 走行可能エリアプロパティのアルファ値 | +| `draw_under_property_` | bool | false | 背景として描画するかどうかの設定 | #### PathFootprint -PathFootprintは、トラジェクトリを表示し、その最適解を探索するためのtoolです。これは、Autoware.Planningコンポーネントによって利用されます。 - -PathFootprintは、次の機能を提供します。 - -- 複数のトラジェクトリを可視化し、それらを比較するための基準を提供します。 -- トラジェクトリ空間を探索し、さまざまなプランニング戦略を評価するための反復可能な方法を提供します。 -- PathFootprintは、「post resampling」で生成されたトラジェクトリのコレクションを受け取ります。 -- `post resampling`は、トラジェクトリ空間内でランダムなサンプルを生成するMonte Caloベースのアルゴリズムです。 -- PathFootprintは、これらのサンプルを評価し、さまざまな基準に基づいてレーティングを行います。 -- レーティングは、目標値への近接性、速度/加速度逸脱量、障害物との衝突可能性など、さまざまな要素に基づいています。 -- PathFootprintは、最も高い評価を得たトラジェクトリを返します。 -- これにより、Autoware.Planningコンポーネントは、自車位置と目標値に基づいて、最適なトラジェクトリを選択できます。 - -| Name | Type | Default Value | Description | -| -------------------------------- | ------ | ------------- | ---------------------------------------------------- | -| `property_path_footprint_view_` | bool | true | パスフットプリントプロパティを使用するかどうかの設定 | -| `property_path_footprint_alpha_` | float | 1.0 | パスフットプリントプロパティのアルファ値 | -| `property_path_footprint_color_` | QColor | Qt::black | パスフットプリントプロパティの色 | -| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | -| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | -| `property_rear_overhang_` | float | 1.03 | リアオーバーハング [m] | +| 名称 | タイプ | 初期値 | 説明 | +| -------------------------------- | ------ | ------------- | --------------------------------------- | +| `property_path_footprint_view_` | bool | true | パスフットプリントプロパティの使用与否 | +| `property_path_footprint_alpha_` | float | 1.0 | パスフットプリントプロパティのアルファ値 | +| `property_path_footprint_color_` | QColor | Qt::black | パスフットプリントプロパティの色 | +| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | +| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | +| `property_rear_overhang_` | float | 1.03 | リアオーバーハング [m] | #### Trajectory -AutowareのTrajectoryコンポーネントは、次のことを行う責任があります。 - -- センサー情報から障害物と車線の認識(perception)。 -- 動的経路計画(Dynamic Path Planning)による、自車位置と障害物に関する知識に基づく経路の生成。 -- エラストキネティックモデル(Elastokinetic Model)による、経路に対する速度、加速度制御。 - -経路の生成プロセスは、2つの主要なサブプロセスに分かれています。 - -1. **グローバルパスプランニング**:車線情報に基づいて可能な経路を計算します。 -2. **ローカルパスプランニング**:障害物と自車位置に基づいて現実的な経路を計算します。 - -ローカルパスプランニングでは、以下を考慮して経路を計算します。 - -- 障害物逸脱量 -- 加速度逸脱量 -- 速度逸脱量 - -また、経路の生成時には以下の制約が考慮されます。 - -- 最小曲率半径 -- 最大速度 -- 最大加速度 - -経路が生成されると、'post resampling`が適用され、Planningコンポーネントに渡される前に、経路が滑らかで連続的になります。 - -| 名称 | 型 | 初期値 | 説明 | -| ------------------------------- | -------- | --------- | ------------------------------------ | -| `property_path_view_` | 論理値 | true | パスプロパティを使用するかどうか | -| `property_path_width_` | 浮動小数 | 2.0 | パスプロパティの幅 [m] | -| `property_path_alpha_` | 浮動小数 | 1.0 | パスプロパティのアルファ | -| `property_path_color_view_` | 論理値 | false | 定数値を使用するかどうか | -| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | -| `property_velocity_view_` | 論理値 | true | Velocityプロパティを使用するかどうか | -| `property_velocity_alpha_` | 浮動小数 | 1.0 | Velocityプロパティのアルファ | -| `property_velocity_scale_` | 浮動小数 | 0.3 | Velocityプロパティのスケール | -| `property_velocity_color_view_` | 論理値 | false | 定数値を使用するかどうか | -| `property_velocity_color_` | QColor | Qt::black | Velocityプロパティの色 | -| `property_velocity_text_view_` | 論理値 | false | Velocityをテキストで表示する | -| `property_velocity_text_scale_` | 浮動小数 | 0.3 | Velocityプロパティのスケール | -| `property_vel_max_` | 浮動小数 | 3.0 | 最大速度 [m/s] | +- **目的:** + - `Planning`コンポーネントが生成した`trajectory`を作成・管理します。 + - `Planning`コンポーネントから`trajectory`を受信し、`post resampling`を実行します。 + - 他のコンポーネントに`trajectory`を提供します。 + +- **詳細:** + - `trajectory`の`post resampling`、再パラメータ化、および他のコンポーネントへの提供を行います。 + - `trajectory`に沿って現在の`pose`と誤差を計算します。 + +| 名前 | タイプ | デフォルト値 | 説明 | +| ------------------------------- | ------ | ------------- | ---------------------------- | +| `property_path_view_` | ブール | true | パスプロパティを使用するかどうか | +| `property_path_width_` | 浮動小数 | 2.0 | パスプロパティの幅 [m] | +| `property_path_alpha_` | 浮動小数 | 1.0 | パスプロパティのアルファ | +| `property_path_color_view_` | ブール | false | 定数カラーを使用するかどうか | +| `property_path_color_` | QColor | Qt::black | パスプロパティの色 | +| `property_velocity_view_` | ブール | true | ベロシティプロパティを使用するかどうか | +| `property_velocity_alpha_` | 浮動小数 | 1.0 | ベロシティプロパティのアルファ | +| `property_velocity_scale_` | 浮動小数 | 0.3 | ベロシティプロパティのスケール | +| `property_velocity_color_view_` | ブール | false | 定数カラーを使用するかどうか | +| `property_velocity_color_` | QColor | Qt::black | ベロシティプロパティの色 | +| `property_velocity_text_view_` | ブール | false | ベロシティのテキストを表示 | +| `property_velocity_text_scale_` | 浮動小数 | 0.3 | ベロシティプロパティのスケール | +| `property_vel_max_` | 浮動小数 | 3.0 | 最大ベロシティ [m/s] | #### TrajectoryFootprint -このコンポーネントは、受け取った経路を処理し、経路上の每个のポイントに経路幅と経路半径を追加します。これにより、経路上に占有スペースを生成し、経路追従時に空間の制約を維持できます。 - -このコンポーネントは次の入力を取ります。 - -- `CurrentPose`:自車位置 -- `LaneCenterline`:車線の中心線 -- `Trajectory`:プランニングコンポーネントから提供された経路 - -そして次の出力を生成します: - -- `TrajectoryFootprint`:経路幅と経路半径が追加された経路 - -| 名前 | タイプ | デフォルト値 | 説明 | -| -------------------------------------- | ------ | -------------------- | ------------------------------------------------- | -| `property_trajectory_footprint_view_` | bool | true | Trajectory Footprint プロパティを使用するかどうか | -| `property_trajectory_footprint_alpha_` | float | 1.0 | Trajectory Footprint プロパティのアルファ値 | -| `property_trajectory_footprint_color_` | QColor | QColor(230, 230, 50) | Trajectory Footprint プロパティのカラー値 | -| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | -| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | -| `property_rear_overhang_` | float | 1.03 | リアオーバーハング [m] | -| `property_trajectory_point_view_` | bool | false | Trajectory Point プロパティを使用するかどうか | -| `property_trajectory_point_alpha_` | float | 1.0 | Trajectory Point プロパティのアルファ値 | -| `property_trajectory_point_color_` | QColor | QColor(0, 60, 255) | Trajectory Point プロパティのカラー値 | -| `property_trajectory_point_radius_` | float | 0.1 | Trajectory Point プロパティの半径値 | +| 名前 | タイプ | デフォルト値 | 説明 | +| ---- | ---- | -------- | -------- | +| `property_trajectory_footprint_view_` | bool | true | Trajectory Footprintプロパティの使用可否 | +| `property_trajectory_footprint_alpha_` | float | 1.0 | Trajectory Footprintプロパティのアルファ | +| `property_trajectory_footprint_color_` | QColor | QColor(230, 230, 50) | Trajectory Footprintプロパティの色 | +| `property_vehicle_length_` | float | 4.77 | 車両の長さ [m] | +| `property_vehicle_width_` | float | 1.83 | 車両の幅 [m] | +| `property_rear_overhang_` | float | 1.03 | 後方オーバーハング [m] | +| `property_trajectory_point_view_` | bool | false | Trajectory Pointプロパティの使用可否 | +| `property_trajectory_point_alpha_` | float | 1.0 | Trajectory Pointプロパティのアルファ | +| `property_trajectory_point_color_` | QColor | QColor(0, 60, 255) | Trajectory Pointプロパティの色 | +| `property_trajectory_point_radius_` | float | 0.1 | Trajectory Pointプロパティの半径 | #### MaxVelocity -Planningモジュールによって計算された最も速く走行可能な速度。この速度は、周囲環境や自車位置に基づいてシステムが決定します。 +| 名称 | 型 | デフォルト値 | 説明 | +| ----------------------- | ------ | ---------------------------------------------------- | ------------------------------------------ | +| `property_topic_name_` | 文字列 | `/planning/scenario_planning/current_max_velocity` | 最大速度を通知するトピック | +| `property_text_color_` | QColor | QColor(255, 255, 255) | テキストの色 | +| `property_left_` | 整数 | 128 | プロットウィンドウの左 [px] | +| `property_top_` | 整数 | 128 | プロットウィンドウの上 [px] | +| `property_length_` | 整数 | 96 | プロットウィンドウの長さ [px] | +| `property_value_scale_` | 浮動小数点 | 1.0 / 4.0 | 値のスケール | -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------------- | -------- | -------------------------------------------------- | -------------------------------- | -| `property_topic_name_` | 文字列 | `/planning/scenario_planning/current_max_velocity` | 最大速度を購読するためのトピック | -| `property_text_color_` | QColor | QColor(255, 255, 255) | テキストの色 | -| `property_left_` | 整数 | 128 | プロッタウィンドウの左側 [px] | -| `property_top_` | 整数 | 128 | プロッタウィンドウの上 [px] | -| `property_length_` | 整数 | 96 | プロッタウィンドウの長さ [px] | -| `property_value_scale_` | 浮動小数 | 1.0 / 4.0 | 値のスケール | +## 利用方法 -## 使用方法 - -1. rvizを起動し、[表示]パネルで[追加]を選択します。 +1. rviz を起動し、「ディスプレイ」パネルで「追加」を選択します。 ![select_add](./images/select_add.png) -2. tier4_planning_rviz_pluginのいずれかを選択して、[OK]を押します。 +2. tier4_planning_rviz_plugin のいずれかを選択し、「OK」を押します。 ![select_planning_plugin](./images/select_planning_plugin.png) 3. パスまたは軌跡を表示するトピックの名前を入力します。 ![select_topic_name](./images/select_topic_name.png) -## Material Designアイコン +## マテリアル デザイン アイコン -このプロジェクトでは、Googleによる[Material Designアイコン](https://developers.google.com/fonts/docs/material_symbols)を使用しています。これらのアイコンは、Apache Licenseバージョン2.0の条件に基づいて使用されています。 +このプロジェクトでは、Google の [マテリアル デザイン アイコン](https://developers.google.com/fonts/docs/material_symbols) を使用しています。これらのアイコンは Apache ライセンス、バージョン 2.0 の条件に基づき使用されています。 -Material Designアイコンは、Googleが提供する記号の集まりで、アプリケーション、Webサイト、その他のデジタル製品のユーザーインターフェイスを向上させるために使用されています。 +マテリアル デザイン アイコンは、Google が提供するシンボルのコレクションで、アプリケーション、Web サイト、その他のデジタル製品のユーザーインターフェイスを向上させるために使用されています。 ### ライセンス -Material Designアイコンは、Apache Licenseバージョン2.0のライセンスの下で配布されています。ライセンスのコピーは次のURLから入手できます。 +マテリアル デザイン アイコンは、Apache ライセンス、バージョン 2.0 に基づいてライセンスされています。ライセンスのコピーは次の URL から入手できます。 -適用法で要求されるか、書面で同意されていない限り、ライセンスに基づいて配布されるソフトウェアは、「現状のまま」の状態で保証や条件なしに配布され、明示的または黙示的に関係ありません。ライセンスの特定の言語により、ライセンスに基づく許可と制限が規定されています。 +適用される法律で要求されるか、書面で合意されない限り、ライセンスに基づいて配布されるソフトウェアは、明示的または黙示的な保証または条件なしで、「現状のまま」配布されます。ライセンスにおけるライセンスに基づく許可と制限を規定する具体的な言語については、ライセンスを参照してください。 + +### 謝辞 -### 確認 +これらのアイコンをコミュニティに提供し、開発者やデザイナーがプロジェクトの視覚的魅力とユーザーエクスペリエンスを向上させるのに役立てた Google に感謝の意を表します。 -Googleがこれらのアイコンをコミュニティに公開し、開発者やデザイナーがプロジェクトの視覚的魅力とユーザーエクスペリエンスを向上させることができることに対し、謝意を表したいと思います。 diff --git a/common/tier4_state_rviz_plugin/README.md b/common/tier4_state_rviz_plugin/README.md index edd17786658dc..55ecbc41f6908 100644 --- a/common/tier4_state_rviz_plugin/README.md +++ b/common/tier4_state_rviz_plugin/README.md @@ -1,98 +1,51 @@ -# tier4_state_rviz_plugin +## tier4_state_rviz_plugin ## 目的 -このプラグインはAutowareの現在の状態を表示します。 -また、プラグインはパネルからも起動できます。 +このプラグインは、Autowareの現在の状態を表示します。 +このプラグインはパネルからの動作にも対応しています。 ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ---------------------------------------- | -------------------------------------------------------------- | ---------------------------------------- | -| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | オペレーションモードの状態を表します | -| `/api/routing/state` | `autoware_adapi_v1_msgs::msg::RouteState` | ルートの状態を表します | -| `/api/localization/initialization_state` | `autoware_adapi_v1_msgs::msg::LocalizationInitializationState` | ローカリゼーション初期化の状態を表します | -| `/api/motion/state` | `autoware_adapi_v1_msgs::msg::MotionState` | モーションの状態を表します | -| `/api/autoware/get/emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急事態の状態を表します | -| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアの状態を表します | +| 名称 | タイプ | 説明 | +| ----------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------- | +| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | オペレーションモードの状態を表すトピック | +| `/api/routing/state` | `autoware_adapi_v1_msgs::msg::RouteState` | ルートの状態を表すトピック | +| `/api/localization/initialization_state` | `autoware_adapi_v1_msgs::msg::LocalizationInitializationState` | ローカリゼーション初期化の状態を表すトピック | +| `/api/motion/state` | `autoware_adapi_v1_msgs::msg::MotionState` | モーションの状態を表すトピック | +| `/api/autoware/get/emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急の状態を表すトピック | +| `/vehicle/status/gear_status` | `autoware_vehicle_msgs::msg::GearReport` | ギアの状態を表すトピック | ### 出力 -**自動運転ソフトウエア** - -**はじめに** - -本ドキュメントでは、自動運転車両向けに開発されたオープンソースソフトウェアAutowareのアーキテクチャと実装について説明する。Autowareは、障害物検出や経路計画などの運転タスクを実行するためのモジュール化されたコンポーネントの集合である。 - -**アーキテクチャ** - -Autowareアーキテクチャは、Perception、Planning、Controlの3層構造となっている。 - -**Perception** - -Perception層は、センサーデータから周囲環境を認識する。LIDAR、カメラ、レーダーなどのセンサーからのデータを生成し、オブジェクトを検出し、分類し、追跡する。 - -**Planning** - -Planning層は、車両の経路を計画する。周囲環境の認識情報と自車位置に基づき、「post resampling」手法を使用して経路を生成する。経路は、速度、加速度、制御逸脱量などの制約条件が考慮される。 - -**Control** - -Control層は、計画された経路に基づいて車両を制御する。この層は、ステアリング、アクセル、ブレーキを制御し、安全に軌道を追従する。 - -**モジュール** - -Autowareは、次のような主要モジュールで構成されている。 - -- **Perception:** - - LIDAR Point Cloud Filter - - Object Detection - - Object Tracking -- **Planning:** - - Path Planning - - Trajectory Generation -- **Control:** - - Motion Planner - - Vehicle Control - -**実装** - -Autowareは、ROS(Robot Operating System)を使用して実装されている。モジュール間の通信は、トピックとサービスを通じて行われる。Autowareには、シミュレーションやテスト用のさまざまなツールも含まれている。 - -**使用法** - -Autowareは、自動運転車両の開発に使用できる。研究目的でも、商用製品の開発でも使用できる。Autowareはオープンソースであり、GitHubで利用できる。 - -**追加資料** - -- [Autoware GitHubリポジトリ](https://github.com/autowarefoundation/autoware.auto) -- [Autowareドキュメント](https://www.autoware.org/documentation/) - -| 名前 | タイプ | 説明 | -| -------------------------------------------------- | -------------------------------------------------- | ------------------------------------------ | -| `/api/operation_mode/change_to_autonomous` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 自動運転モードに変更するサービス | -| `/api/operation_mode/change_to_stop` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 停止モードに変更するサービス | -| `/api/operation_mode/change_to_local` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | ローカルモードに変更するサービス | -| `/api/operation_mode/change_to_remote` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | リモートモードに変更するサービス | -| `/api/operation_mode/enable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autowareによる車両制御を有効にするサービス | -| `/api/operation_mode/disable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autowareによる車両制御を無効にするサービス | -| `/api/routing/clear_route` | `autoware_adapi_v1_msgs::srv::ClearRoute` | ルート状態をクリアするサービス | -| `/api/motion/accept_start` | `autoware_adapi_v1_msgs::srv::AcceptStart` | 車両の始動を受け入れるサービス | -| `/api/autoware/set/emergency` | `tier4_external_api_msgs::srv::SetEmergency` | 外部緊急状態を設定するサービス | -| `/planning/scenario_planning/max_velocity_default` | `tier4_planning_msgs::msg::VelocityLimit` | 車両の最大速度を設定するトピック | +[日本語訳のドキュメントのURLをここに入力してください] + +| 名称 | タイプ | 説明 | +| --------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------- | +| `/api/operation_mode/change_to_autonomous` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 自律運転モードへの切り替えサービス | +| `/api/operation_mode/change_to_stop` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | 停止モードへの切り替えサービス | +| `/api/operation_mode/change_to_local` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | ローカルモードへの切り替えサービス | +| `/api/operation_mode/change_to_remote` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | リモートモードへの切り替えサービス | +| `/api/operation_mode/enable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autoware による車両制御の有効化サービス | +| `/api/operation_mode/disable_autoware_control` | `autoware_adapi_v1_msgs::srv::ChangeOperationMode` | Autoware による車両制御の無効化サービス | +| `/api/routing/clear_route` | `autoware_adapi_v1_msgs::srv::ClearRoute` | ルート状態のクリアサービス | +| `/api/motion/accept_start` | `autoware_adapi_v1_msgs::srv::AcceptStart` | 車両への走行開始の承認サービス | +| `/api/autoware/set/emergency` | `tier4_external_api_msgs::srv::SetEmergency` | 外部緊急事態の設定サービス | +| `/planning/scenario_planning/max_velocity_default` | `tier4_planning_msgs::msg::VelocityLimit` | 車両の最高速度の設定トピック | ## 使用方法 -1. rvizを起動し、パネル/新しいパネルを追加を選択する。 +1. rvizを起動し、パネル/新しいパネルを追加 から選択します。 + + ![select_panel](./images/select_panels.png) - ![select_panel](./images/select_panels_ja.png) +2. tier4_state_rviz_plugin/AutowareStatePanelを選択し、OKを押します。 -2. tier4_state_rviz_plugin/AutowareStatePanelを選択し、OKを押す。 + ![select_state_plugin](./images/select_state_plugin.png) - ![select_state_plugin](./images/select_state_plugin_ja.png) +3. 自動 ボタンがアクティブであれば、クリックしてエンゲージできます。 -3. 自動ボタンがアクティブ化されていれば、クリックでエンゲージできます。 + ![select_auto](./images/select_auto.png) - ![select_auto](./images/select_auto_ja.png) diff --git a/common/tier4_system_rviz_plugin/README.md b/common/tier4_system_rviz_plugin/README.md index 20d60b9034f93..f9872c90e7e41 100644 --- a/common/tier4_system_rviz_plugin/README.md +++ b/common/tier4_system_rviz_plugin/README.md @@ -1,11 +1,12 @@ -# tier4_system_rviz_plugin +## Tier4_system_rviz_plugin ## 目的 -このプラグインはAutowareから収集した障害情報を表示します。また、当初位置決めや経路設定時に緊急事態が発生した場合は通知を出力します。 +このプラグインはAutowareからハザード情報を表示し、初期のローカライズとルート設定に起因する緊急事態時に通知を出力します。 ## 入力 -| 名前 | タイプ | 説明 | -| --------------------------------- | ------------------------------------------------ | ------------------------------------------------ | -| `/system/emergency/hazard_status` | `autoware_system_msgs::msg::HazardStatusStamped` | このトピックは Autoware からの緊急情報を表します | +| 名前 | 型 | 説明 | +| --------------------------------- | ------------------------------------------------ | ----------------------------------------------------------- | +| `/system/emergency/hazard_status` | `autoware_system_msgs::msg::HazardStatusStamped` | Autowareからの緊急情報に関するトピック | + diff --git a/common/tier4_traffic_light_rviz_plugin/README.md b/common/tier4_traffic_light_rviz_plugin/README.md index 222978c159d04..f7e5f9deae6e9 100644 --- a/common/tier4_traffic_light_rviz_plugin/README.md +++ b/common/tier4_traffic_light_rviz_plugin/README.md @@ -2,17 +2,17 @@ ## 目的 -このプラグインパネルは、ダミー信号機信号をパブリッシュします。 +このプラグインパネルはダミーの信号機信号をパブリッシュします。 ## 入出力 ### 出力 -| 名称 | 型 | 説明 | -| ------------------------------------------------------- | ------------------------------------------------------- | -------------- | -| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 交通信号の公開 | +| 名称 | タイプ | 説明 | +| -------------------------------------------- | ------------------------------------------------ | -------------------------- | +| `/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 交通信号の公開 | -## 操作方法 +## 使い方
@@ -24,11 +24,12 @@
-1. rvizを起動して[パネル]->[新しいパネルを追加]を選択します。 +1. rvizを起動して、パネル/新しいパネルを追加を選択します。 2. TrafficLightPublishPanelを選択してOKを押します。 -3. [`Traffic Light ID`]と[`Traffic Light Status`]を設定して[`SET`]ボタンを押します。 -4. [`PUBLISH`]ボタンが押されている間、信号機信号がパブリッシュされます。 +3. `信号ID`と`信号状態`を設定し、`設定`ボタンを押します。 +4. `発行`ボタンを押すと、信号が発行されます。
+ diff --git a/common/tier4_vehicle_rviz_plugin/README.md b/common/tier4_vehicle_rviz_plugin/README.md index 1096cbb9497d3..aa5d6414401dd 100644 --- a/common/tier4_vehicle_rviz_plugin/README.md +++ b/common/tier4_vehicle_rviz_plugin/README.md @@ -1,22 +1,22 @@ -## Tier4 vehicle RVIZ プラグイン +# tier4_vehicle_rviz_plugin このパッケージには jsk コードが含まれています。 -jsk_overlay_utils.cpp および jsk_overlay_utils.hpp は BSD ライセンスであることに注意してください。 +jsk_overlay_utils.cpp と jsk_overlay_utils.hpp は BSD ライセンスであることにご注意ください。 ## 目的 -このプラグインは、車両速度、ターンシグナル、ステアリングステータス、加速度をビジュアルかつ分かりやすく表示します。 +このプラグインは、車両速度、方向指示器、ステアリング状態、加速度を視覚的かつわかりやすく表示します。 ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| --------------------------------- | -------------------------------------------------- | -------------------------- | -| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両の捻じれ | -| `/control/turn_signal_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ターンシグナルのステータス | -| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングのステータス | -| `/localization/acceleration` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 加速度 | +| 名前 | タイプ | 説明 | +| --------------------------------- | -------------------------------------------------- | ---------------------------------- | +| `/vehicle/status/velocity_status` | `autoware_vehicle_msgs::msg::VelocityReport` | 車両の速度 | +| `/control/turn_signal_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsReport` | ウインカーのステータス | +| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングの状態 | +| `/localization/acceleration` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 加速度 | ## パラメータ @@ -24,72 +24,71 @@ jsk_overlay_utils.cpp および jsk_overlay_utils.hpp は BSD ライセンスで #### ConsoleMeter -| 名 | 型 | デフォルト値 | 説明 | -| ------------------------------- | ------ | -------------------- | --------------------------------------- | -| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | -| `property_left_` | int | 128 | プロッタウィンドウの左 [px] | -| `property_top_` | int | 128 | プロッタウィンドウの上 [px] | -| `property_length_` | int | 256 | プロッタウィンドウの高さ [px] | -| `property_value_height_offset_` | int | 0 | プロッタウィンドウの高さオフセット [px] | -| `property_value_scale_` | float | 1.0 / 6.667 | 値のスケール | +| 名前 | 型 | デフォルト値 | 説明 | +| ------------------------------------ | ------ | ----------------------- | ------------------------------------------- | +| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | +| `property_left_` | int | 128 | プロッターウィンドウの左 [px] | +| `property_top_` | int | 128 | プロッターウィンドウの上 [px] | +| `property_length_` | int | 256 | プロッターウィンドウの高さ [px] | +| `property_value_height_offset_` | int | 0 | プロッターウィンドウの高さオフセット [px] | +| `property_value_scale_` | float | 1.0 / 6.667 | 値のスケール | #### SteeringAngle -| Name | Type | Default Value | Description | -| ------------------------------- | ------ | -------------------- | --------------------------------------- | -| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | -| `property_left_` | int | 128 | プロッタウィンドウの左辺 [px] | -| `property_top_` | int | 128 | プロッタウィンドウの上辺 [px] | -| `property_length_` | int | 256 | プロッタウィンドウの高さ [px] | -| `property_value_height_offset_` | int | 0 | プロッタウィンドウの高さオフセット [px] | -| `property_value_scale_` | float | 1.0 / 6.667 | 値のスケール | -| `property_handle_angle_scale_` | float | 3.0 | ハンドル角に対する操舵角のスケール | +| 名前 | タイプ | デフォルト値 | 説明 | +| ------------------------------- | ------ | --------------------- | -------------------------------------------- | +| `property_text_color_` | QColor | QColor(25, 255, 240) | テキストの色 | +| `property_left_` | int | 128 | プロットウィンドウの左 [px] | +| `property_top_` | int | 128 | プロットウィンドウの上 [px] | +| `property_length_` | int | 256 | プロットウィンドウの高さ [px] | +| `property_value_height_offset_` | int | 0 | プロットウィンドウの高さオフセット [px] | +| `property_value_scale_` | float | 1.0 / 6.667 | 値のスケール | +| `property_handle_angle_scale_` | float | 3.0 | スケールは操舵角からハンドルの角度 | #### TurnSignal -Planningモジュールは、 поворотный сигнал からの情報を消費します。 +| 名前 | タイプ | 初期値 | 説明 | +| ----------------- | ---- | -------- | ------------------------------------------- | +| `property_left_` | int | 128 | プロットウィンドウの左端 [px] | +| `property_top_` | int | 128 | プロットウィンドウの上端 [px] | +| `property_width_` | int | 256 | プロットウィンドウの幅 [px] | +| `property_height_` | int | 256 | プロットウィンドウの高さ [px] | -| 名称 | タイプ | 初期値 | 説明 | -| ------------------ | ------ | ------ | ----------------------------- | -| `property_left_` | int | 128 | プロッタウィンドウの左端 [px] | -| `property_top_` | int | 128 | プロッタウィンドウの上端 [px] | -| `property_width_` | int | 256 | プロッタウィンドウの左幅 [px] | -| `property_height_` | int | 256 | プロッタウィンドウの高さ [px] | +#### VelocityHistory -#### 速度履歴 - -| Name | Type | Default Value | 説明 | +| Name | Type | Default Value | Description | | ------------------------------- | ------ | ------------- | -------------------------- | -| `property_velocity_timeout_` | float | 10.0 | 速度タイムアウト [秒] | -| `property_velocity_alpha_` | float | 1.0 | 速度のアルファ | -| `property_velocity_scale_` | float | 0.3 | 速度のスケール | -| `property_velocity_color_view_` | bool | false | 定色を使用 | -| `property_velocity_color_` | QColor | Qt::black | 速度履歴の色 | +| `property_velocity_timeout_` | float | 10.0 | 速度のタイムアウト [s] | +| `property_velocity_alpha_` | float | 1.0 | 速度のアルファ | +| `property_velocity_scale_` | float | 0.3 | 速度のスケール | +| `property_velocity_color_view_` | bool | false | Constant Colorかどうかの使用 | +| `property_velocity_color_` | QColor | Qt::black | 速度の履歴の色 | | `property_vel_max_` | float | 3.0 | 色の境界速度の最大値 [m/s] | #### 加速度計 -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------------------------- | ------ | -------------------- | ----------------------------------------- | -| `property_normal_text_color_` | QColor | QColor(25, 255, 240) | 通常のテキストの色 | -| `property_emergency_text_color_` | QColor | QColor(255, 80, 80) | 緊急時の加速度の色 | -| `property_left_` | int | 896 | プロッターウィンドウの左端 [px] | -| `property_top_` | int | 128 | プロッターウィンドウの上端 [px] | -| `property_length_` | int | 256 | プロッターウィンドウの高さ [px] | -| `property_value_height_offset_` | int | 0 | プロッターウィンドウの高さオフセット [px] | -| `property_value_scale_` | float | 1 / 6.667 | 値テキストのスケール | -| `property_emergency_threshold_max_` | float | 1.0 | 緊急時の最大加速度のしきい値 [m/s^2] | -| `property_emergency_threshold_min_` | float | -2.5 | 緊急時の最小加速度のしきい値 [m/s^2] | +| Name | Type | Default Value | Description | +| ----------------------------------- | ------ | -------------------- | ------------------------------------------------ | +| `property_normal_text_color_` | QColor | QColor(25, 255, 240) | 通常テキストの色 | +| `property_emergency_text_color_` | QColor | QColor(255, 80, 80) | 緊急時加速度の色 | +| `property_left_` | int | 896 | プロットウィンドウの左 [px] | +| `property_top_` | int | 128 | プロットウィンドウの上部 [px] | +| `property_length_` | int | 256 | プロットウィンドウの高さ [px] | +| `property_value_height_offset_` | int | 0 | プロットウィンドウの高さオフセット [px] | +| `property_value_scale_` | float | 1 / 6.667 | 値テキストのスケール | +| `property_emergency_threshold_max_` | float | 1.0 | 緊急時の最大加速度しきい値 [m/s^2] | +| `property_emergency_threshold_min_` | float | -2.5 | 緊急時の最小加速度しきい値 [m/s^2] | -## 既定値 / 既知の制約 +## 仮定 / 制限事項 未定。 -## 使用方法 +## 使用法 -1. rvizを起動し、DisplaysパネルでAddを選択します。 +1. RVIZ を起動し、[Displays] パネルの下の [追加] を選択します。 ![select_add](./images/select_add.png) -2. tier4_vehicle_rviz_pluginのいずれかを選択し、OKを押します。 +2. **tier4_vehicle_rviz_plugin** のいずれかを選択して、[OK] を押します。 ![select_vehicle_plugin](./images/select_vehicle_plugin.png) 3. ステータスを表示するトピックの名前を入力します。 ![select_topic_name](./images/select_topic_name.png) + diff --git a/common/traffic_light_utils/README.md b/common/traffic_light_utils/README.md index 6b7e2451b4d51..00db8727a7358 100644 --- a/common/traffic_light_utils/README.md +++ b/common/traffic_light_utils/README.md @@ -1,6 +1,2 @@ -# traffic_light_utils +ドキュメントが見つかりません。 -## 目的 - -このパッケージには、トラフィックライト認識モジュール全体で有用な共通関数のライブラリが含まれています。 -このパッケージには、ROIタイプの処理、さまざまなデータ型とメッセージ型間の変換、およびそれらに関連する共通関数の関数が含まれる場合があります。 diff --git a/common/tvm_utility/README.md b/common/tvm_utility/README.md index e7ad111f97aa2..b8bafe3b7733b 100644 --- a/common/tvm_utility/README.md +++ b/common/tvm_utility/README.md @@ -1,124 +1,2 @@ -# TVMユーティリティ +翻訳するものは何もありません。 -これは`tvm_utility`パッケージの設計文書です。YOLOv2 Tinyのテストを作成する方法については、[YOLOv2 Tiny例パイプライン](tvm-utility-yolo-v2-tiny-tests.md)を参照してください。テストアーティファクトを保存する場所については、[TVMユーティリティアーティファクト](artifacts/README.md)を参照してください。 - -## 目的/ユースケース - -TVMベースの機械学習推論パイプラインを構築するために役立つ、C++ユーティリティのセットです。ライブラリにはパイプラインの構築に役立つパイプラインクラスと、機械学習によくある多数のユーティリティ関数が含まれます。 - -## 設計 - -パイプラインクラスは推論パイプラインを作成するための標準化された方法です。パイプラインクラスには、プリプロセッサ、推論エンジン、およびポストプロセッサの3つの異なるステージが含まれています。TVMの推論エンジンステージの実装が提供されます。 - -### API - -プリプロセッサとポストプロセッサは、パイプラインをインスタンス化する前にユーザによって実装される必要があります。`test/yolo_v2_tiny`のサンプルパイプラインで、使用例を確認できます。 - -パイプラインの各ステージには、入力データをパラメータとして取得し、出力データを返す`schedule`関数があります。パイプラインオブジェクトが作成されると、`pipeline.schedule`が呼び出されてパイプラインが実行されます。 - -```{cpp} -int main() { - create_subscription("points_raw", - rclcpp::QoS{1}, [this](const sensor_msgs::msg::PointCloud2::SharedPtr msg) - {pipeline.schedule(msg);}); -} -``` - -#### バージョンチェック - -`InferenceEngineTVM::version_check` 関数は、使用中のニューラルネットワークのバージョンが、サポートされているバージョン範囲(古いものから新しいものまで)に含まれているかどうかをチェックするために使用できます。 - -`InferenceEngineTVM` クラスは、サポートされている最新のバージョンを保持しており、ターゲットバージョンが変更された場合は更新する必要があります。ただし、このバージョン変更の影響が、このバージョンの依存パッケージに及ぼされるかどうかをテストした後で変更してください。 - -最も古いサポートされているバージョンは、推論を利用する各パッケージによって異なります。したがって、これらのパッケージで定義(および維持)する必要があります。 - -#### モデル - -依存パッケージでは、このパッケージの `get_neural_network` cmake 関数を使用して、適切な外部依存関係を構築する必要があります。 - -### エラーの検出と処理 - -エラーが発生した場合はいつでも `std::runtime_error` がスローされる必要があります。適切なテキストエラーの説明を入力する必要があります。 - -### ニューラルネットワークプロバイダー - -ニューラルネットワークは [Model Zoo](https://github.com/autowarefoundation/modelzoo/) CI パイプラインの一部としてコンパイルされ、S3 バケットに保存されます。 - -`get_neural_network` 関数は、アーティファクト管理のための抽象化を作成します。ユーザーはモデル構成のヘッダーファイルが "data/user/${MODEL_NAME}/" にあるかどうかを確認する必要があります。見つからない場合、何も起こらず、パッケージのコンパイルはスキップされます。 - -関数を活用するパッケージのソースディレクトリの構造は次のとおりです。 - -```{text} -. -├── data -│ └── models -│ ├── ${MODEL 1} -│ │ └── inference_engine_tvm_config.hpp -│ ├── ... -│ └── ${MODEL ...} -│ └── ... -``` - -`inference_engine_tvm_config.hpp` ファイルは依存パッケージでコンパイルするために必要なので、「data/models/${MODEL_NAME}/inference_engine_tvm_config.hpp」に対して準備できます。 -依存パッケージは、`get_neural_network` の `DEPENDENCY` 出力パラメータで提供される名前で cmake の `add_dependencies` 関数を使用して、このファイルが使用される前に作成されるようにできます。 - -他の `deploy_*` ファイルは、パッケージの `share` ディレクトリの下の「models/${MODEL_NAME}/」にインストールされます。 - -他のモデルファイルはパッケージフォルダの下の autoware_data フォルダ内に、次の構造を使用して格納する必要があります。 - -```{text} -$HOME/autoware_data - -| └──${パッケージ} -| └──モデル -| ├── ${モデル 1} -| | ├── デプロイ_グラフ.json -| | ├── デプロイ_ライブラリ.so -| | └── デプロイ_パラメータ.params -| ├── ... -| └── ${モデル ...} -| └── ... - -#### 入力/出力 - -出力: - -- `get_neural_network` cmake関数: ユーザーが提供するモデルを使用するパッケージ用の適切な外部依存関係を作成します。 - -入出力: - -- `get_neural_network`の`DEPENDENCY`引数は、関数の結果を確認できます。 - ユーザーがニューラルネットワークを提供しなかった場合、空文字列になります。 - -## セキュリティの考慮事項 - -### パイプライン - -入力と出力の両方が同じアクタによって制御されるため、以下のセキュリティ上の懸念事項は対象外です: - -- なりすまし -- 改ざん - -データを別のアクタに漏洩するには、任意のメモリを読み取ることができるTVMまたはホストオペレーティングシステムの欠陥、それ自体が重大なセキュリティ上の欠陥を必要とします。これは、パイプラインを早期に操作する外部アクタにも当てはまります。パイプラインを開始したオブジェクトのみが出力を受け取るためのメソッドを実行できます。 - -サービス妨害攻撃は、対象のハードウェアを他のパイプラインで使用できなくする可能性がありますが、CPUでコードを実行できる必要があるため、より深刻なサービス妨害攻撃をすでに可能にします。 - -このパッケージには権限の昇格は必要ありません。 - -### ネットワークプロバイダー - -事前コンパイルされたネットワークはS3バケットからダウンロードされ、なりすまし、改ざん、サービス妨害の脅威にさらされています。 -なりすましはhttps接続を使用することで軽減されます。 -改ざんとサービス妨害に対する軽減策はAWSに委ねられています。 - -ユーザー提供のネットワークは、ホストシステムにそのままインストールされます。 -ユーザーは、情報開示に関して提供するファイルのセキュリティを確保する責任があります。 - -## 今後の拡張/実装されていない部分 - -将来のパッケージは、Perceptionスタックの一部としてtvm_utilityを使用して、機械学習の処理を実行します。 - -## 関連する問題 - - -``` diff --git a/common/tvm_utility/artifacts/README.md b/common/tvm_utility/artifacts/README.md index 04ed025b69272..ec7a71a010fb4 100644 --- a/common/tvm_utility/artifacts/README.md +++ b/common/tvm_utility/artifacts/README.md @@ -1,6 +1,2 @@ -## TVMユーティリティアーティファクト +404: 見つかりません -テストアーティファクトは、このディレクトリ内のサブディレクトリ内に配置してください。 - -例: -./artifacts/yolo_v2_tiny diff --git a/control/autoware_autonomous_emergency_braking/README.md b/control/autoware_autonomous_emergency_braking/README.md index 62e95f0b13a63..bbb4a38fd0012 100644 --- a/control/autoware_autonomous_emergency_braking/README.md +++ b/control/autoware_autonomous_emergency_braking/README.md @@ -1,65 +1,68 @@ # 自動緊急ブレーキ (AEB) -## 目的/役割 +## 目的 / 役割 -`autonomous_emergency_braking` は、制御モジュールによって作成された予測経路上の障害物や、制御モジュールから推定されたセンサー値との衝突を防ぐモジュールです。 +`autonomous_emergency_braking`は、制御モジュールにより作成された予測パス上の障害物または制御モジュールから推定されたセンサ値との衝突を防ぐモジュールです。 -### 前提条件 +### 前提 -このモジュールは以下の前提条件に基づいています。 +このモジュールには次の前提があります。 -- 自車の予測経路は、センサーから作成された経路、制御モジュールから作成された経路、またはその両方のいずれかから作成できます。 +- 自車の予測パスは、センサから作成されたパス、または制御モジュールから作成されたパス、あるいはその両方から作成できます。 -- 自車の現在の速度と角速度は、自車のセンサーから取得でき、点として障害物が使用されます。 +- 現在速度と角速度は自車のセンサから取得でき、障害物として点を使用します。 -- AEBs の対象障害物は、入力された点群から取得するか、予測された自車のフットプリント経路と予測されたオブジェクトの形状との交点を求めることで取得できる 2D 点です。 +- AEBがターゲットにする障害物は、入力点群から取得できる2D点、または予測された自己フットプリントパスと予測されたオブジェクトの形状との交点から取得できます。 -### IMU パス生成: ステアリング角度と IMU の角速度 +### IMUパス生成: ステアリングアングルvs IMUの角速度 -現在、IMU ベースのパスは、IMU 自体によって取得された角速度を使用して生成されています。角速度の代わりにステアリング角度を使用することが提案されています。 +現在、IMUベースのパスは、IMU自体から取得された角速度を使用して生成されます。角速度の代わりにステアリングアングルを使用できると提案されています。 -両方のアプローチの長所と短所は次のとおりです。 +両方のアプローチの利点と欠点は次のとおりです。 -IMU 角速度: +IMU角速度: -- (+) 一般的に高精度 -- (-) 車両の振動によりノイズが発生する可能性があります。 +- (+)通常、高い精度を有する +- (-)車両振動がノイズを引き起こす可能性がある -ステアリング角度: +ステアリングアングル: -- (+) ノイズが少ない -- (-) ステアリングオフセットまたは間違ったギアレシオが発生する可能性があり、Autoware のステアリング角度と実際のステアリングが同じではない場合があります。 +- (+)ノイズが少ない +- (-)ステアリングオフセットや間違ったギア比がある可能性があり、Autowareのステアリングアングルと実際のステアリングが同じにならない可能性がある。 -現時点では、AEB モジュールのパス作成プロセスにステアリング角度を実装する予定はありません。 +現時点では、AEBモジュールのパス作成プロセスにステアリングアングルを実装する予定はありません。 -## 内部処理/アルゴリズム +## 仕組み / アルゴリズム -AEB は、緊急停止信号を出力する前に次の手順を実行します。 +AEBは、緊急停止信号を出力する前に次の手順を実行します。 -1. 必要に応じて AEB をアクティブ化します。 +1. 必要に応じてAEBを有効にする。 -2. 自車の予測経路を生成します。 +2. 自車の予測パスを生成する。 -3. 入力点群や予測されたオブジェクトデータから対象障害物を入手します。 +3. 入力点群および/または予測されたオブジェクトデータからターゲット障害物を入手する。 -4. 最も近い障害物の速度を推定します。 +4. 最も近い障害物の速度を見積もる。 -5. 対象障害物との衝突チェックを行います。 +5. ターゲット障害物との衝突チェック。 -6. `/diagnostics` に緊急停止信号を送信します。 +6. `/diagnostics`に緊急停止信号を送信する。 -以下に、各セクションの詳細を示します。 +以下に各セクションの詳細を示します。 -### 1. 必要に応じて AEB をアクティブ化する +### 1. 必要に応じてAEBを有効にする -次の条件を満たしている場合は、AEB モジュールをアクティブ化しません。 +AEBモジュールは、次の条件を満たす場合、有効になりません。 -- 自車が自動運転状態にない場合 -- 自車が動いていない場合 (現在の速度が 0.1 m/s のしきい値を下回る場合) +- 自車が自動運転状態ではない -### 2. 自車走行経路の予測 +- 自車が停止している場合(現在の速度が0.1m/sのしきい値未満) -AEBは、搭載センサーから取得した現在の速度および現在の角速度に基づいて、予測したフットプリント経路を生成します。`use_imu_path`が`false`の場合、このステップはスキップされることに注意してください。この予測経路は以下のように生成されます。 +### 2. 自車の予測経路の生成 + +#### 2.1 IMU パス生成の概要 + +AEB は、接続されたセンサーから取得した現在の速度と現在の角速度に基づいて、予測されたフットプリントパスを生成します。 `use_imu_path` が `false` の場合は、このステップをスキップすることに注意してください。この予測パスは次のように生成されます。 $$ x_{k+1} = x_k + v cos(\theta_k) dt \\ @@ -67,58 +70,137 @@ y_{k+1} = y_k + v sin(\theta_k) dt \\ \theta_{k+1} = \theta_k + \omega dt $$ -ここで、$v$と$\omega$はそれぞれ現在の縦断速度および角速度です。$dt$はユーザーが事前に定義できる時間間隔です。 +ここで $v$ と $\omega$ はそれぞれ現在の縦方向速度と角速度です。 $dt$ はユーザーが `imu_prediction_time_interval` パラメータで事前に定義できる時間間隔です。IMU のパスは、 `imu_prediction_time_horizon` パラメータで定義された予測時間 горизонт を考慮して生成されます。 + +#### 2.2 IMU パス生成における制約と対策 + +IMU パス生成は自車の現在の角速度のみを使用するため、MPC Planing ステアリングを無視すると、IMU パス形状はやや歪み、自車の現在の車線から飛び出して、不要な緊急停止を引き起こす可能性があります。この問題に対する 2 つの対策があります。 + +1. `max_generated_imu_path_length` パラメータを使用して制御する + + - パスの長さが設定値を超えると生成が停止します + - 大きな `imu_prediction_time_horizon` を使用しないでください + +2. 横方向の逸脱に基づいて制御する + - `limit_imu_path_lat_dev` パラメータを "true" に設定します + - `imu_path_lat_dev_threshold` を使用して逸脱しきい値を設定します + - 横方向の逸脱がしきい値を超えるとパスの生成が停止します + +#### 2.3 横方向逸脱制御の長所と短所 + +`limit_imu_path_lat_dev` パラメータで横方向逸脱の制限を設定する利点は、IMU 予測パスの変形が特定のしきい値を超えることを心配することなく、 `imu_prediction_time_horizon` と `max_generated_imu_path_length` を増やすことができることです。欠点は、自車の角速度が高い場合に IMU パスが短くなることで、このような場合、AEB モジュールは主に MPC パスに依存して衝突を防いだり軽減したりします。 + +自車が主に車線のcenterlineに沿って走行すると想定される場合、横方向逸脱しきい値パラメータ `imu_path_lat_dev_threshold` を 2 で割った平均車線幅以下に設定すると便利です。そうすれば、IMU 予測パスが現在の自車車線を逸脱する可能性が低くなり、自車が主に直線で走行しているときに正面衝突を防ぐために `imu_prediction_time_horizon` を増やすことが可能です。 + +横方向の逸脱は、現在の自車位置を基準にして測定され、予測された自車フットプリントの最も遠方の頂点から予測されたパスまでの距離を測定します。次の画像は、特定の自車位置の横方向逸脱の測定方法を示しています。 + +![measuring_lat_dev](./image/measuring-lat-dev-on-imu-path.drawio.svg) + +#### 2.4 IMU パス生成アルゴリズム + +##### 2.4.1 横方向逸脱チェックポイントの選択 + +次の条件に基づいて、横方向逸脱チェック用の車両の頂点を選択します。 + +- 前進 ($v > 0$) + - 右折 ($\omega > 0$): 右前頂点 + - 左折 ($\omega < 0$): 左前頂点 +- 後退 ($v < 0$) + - 右折 ($\omega > 0$): 右後頂点 + - 左折 ($\omega < 0$): 左後頂点 +- 直進 ($\omega = 0$): 前進/後退に応じて前部/後部の両方の頂点を確認します + +##### 2.4.2 パス生成プロセス + +各タイムステップで次のステップを実行します。 + +1. 状態の更新 + + - 現在の速度 $v$ と角速度 $\omega$ に基づいて次の位置 $(x_{k+1}, y_{k+1})$ とヨー角 $\theta_{k+1}$ を計算します -一方、`use_predicted_trajectory`がtrueに設定されている場合、AEBモジュールはMPCからの予測経路をベースとしてフットプリント経路を生成します。IMUフットプリント経路とMPCフットプリント経路は同時に使用できます。 +## 2. 車両フットプリント生成 -### 3. ターゲット障害物の取得 +- 計算された位置に車両フットプリントを配置する +- チェックポイント座標を計算する -自車フットプリント経路を生成した後、ターゲット障害物が特定されます。ターゲット障害物を検索するには、入力点群を使用するか、知覚モジュールから来る予測オブジェクト情報を使用する2つの方法があります。 +## 3. 側方逸脱計算 -#### 点群障害物フィルタリング +- 選択した頂点から経路までの側方逸脱を計算する +- 経路長と経過時間を更新する -AEBモジュールは、入力点群をフィルタリングして、自車が衝突する可能性のあるターゲット障害物を見つけることができます。この方法は、`use_pointcloud_data`パラメーターをtrueに設定すると有効になります。点群障害物フィルタリングには、粗フィルタリング、クラスタリングによるノイズフィルタリング、厳密フィルタリングの3つの主要ステップがあります。 +## 4. 終了条件の評価 -##### 粗フィルタリング +### 2.4.3 終了条件 -粗フィルタリングステップでは、単純なフィルタを使用してターゲット障害物を選択します。自車の予測経路から一定の距離(デフォルトは自車幅の半分に`path_footprint_extra_margin`パラメーターを加えたもの)まで検索エリアを作成し、その範囲内にない点群は無視します。粗フィルタリングステップは以下に示されています。 +経路生成は、次の条件のいずれかが満たされたときに終了します。 + +1. 基本終了条件(どちらも満たす必要があります) + + - 予測時間が `imu_prediction_time_horizon` を超える + - かつ経路長が `min_generated_imu_path_length` を超える + +2. 経路長終了条件 + + - 経路長が `max_generated_imu_path_length` を超える + +3. 側方逸脱終了条件(`limit_imu_path_lat_dev = true` の場合) + + - 選択した頂点の側方逸脱が `imu_path_lat_dev_threshold` を超える + +### MPC 経路生成 + +`use_predicted_trajectory` パラメーターが true に設定されている場合、AEB モジュールは MPC から予測された経路をフットプリント経路生成のベースとして直接使用します。ある時間基準まで MPC によって生成された自車位置をコピーします。`mpc_prediction_time_horizon` パラメーターは、MPC 経路が自車の動きをどれだけ先まで予測するかを示します。IMU フットプリント経路と MPC フットプリント経路は同時に使用できます。 + +### 3. 対象障害物の取得 + +自車のフットプリント経路を生成した後、対象障害物が特定されます。対象障害物を見つける方法は 2 つあります。入力点群を使用する方法と、知覚モジュールから提供される予測オブジェクト情報を使用する方法です。 + +### 点群障害物フィルタリング + +AEB モジュールは入力点群をフィルタリングして、自車が衝突する可能性のある対象障害物を見つけることができます。この方法は、`use_pointcloud_data` パラメーターが true に設定されている場合に有効にできます。点群障害物フィルタリングには、粗フィルタリング、クラスタリングによるノイズフィルタリング、および厳密フィルタリングの 3 つの主要な手順があります。 + +### 粗フィルタリング + +粗フィルタリング手順では、単純なフィルタでターゲット障害物を選択します。自車の予測経路から一定の距離(デフォルトは自車幅の半分に `path_footprint_extra_margin` パラメーターと `expand_width` パラメーターを加えたもの)まで検索領域を作成して、その範囲内にない点群を無視します。粗フィルタリングの手順を以下に示します。 ![rough_filtering](./image/obstacle_filtering_1.drawio.svg) -##### クラスタリングと凸包によるノイズフィルタリング +### クラスタリングと凸包によるノイズフィルタリング -AEBがノイズのある点を考慮するのを防ぐため、フィルタリングされた点群に対してユークリッドクラスタリングが実行されます。クラスタを形成するには他の点に十分近くない点群内の点は破棄されます。さらに、クラスタ内の各点は`cluster_minimum_height`パラメーターと比較され、クラスタ内のどの点も`cluster_minimum_height`より大きい高さ/z値を持たない場合、点のクラスタ全体が破棄されます。`cluster_tolerance`、`minimum_cluster_size`、`maximum_cluster_size`パラメーターを使用して、クラスタリングと無視するオブジェクトのサイズを調整できます。AEBモジュールで使用されるクラスタリング方法の詳細については、PCLライブラリのユークリッドクラスタリングに関する公式ドキュメントを確認してください: +AEB がノイズポイントを考慮するのを防ぐために、フィルタリングされた点群にユークリッドクラスタリングを実行します。クラスターを形成するには他の点に十分近くない点群内の点は破棄されます。さらに、クラスター内の各点を `cluster_minimum_height` パラメーターと比較し、クラスター内の点に `cluster_minimum_height` よりも大きい高さ/z 値がない場合、ポイントのクラスター全体が破棄されます。`cluster_tolerance`、`minimum_cluster_size`、`maximum_cluster_size` パラメーターを使用して、クラスタリングと無視されるオブジェクトのサイズを調整できます。AEB モジュールで使用されるクラスタリング方法の詳細については、PCL ライブラリのユークリッドクラスタリングに関する公式ドキュメントを参照してください: 。 -さらに、検出された各クラスタの周囲に2D凸包が作成され、各包の頂点はクラスタの最も外側の点を表します。次に、これらの頂点は次のステップでチェックされます。 +さらに、検出された各クラスターの周囲に 2 次元の凸包が作成され、各包の頂点はクラスターの最も外側のポイントを表します。これらの頂点は、次の手順で確認されます。 -##### 厳密フィルタリング +### 厳密フィルタリング -ノイズフィルタリング後、モジュールは幾何学的衝突チェックを実行して、フィルタリングされた障害物/包の頂点が実際に自車と衝突する可能性があるかどうかを判断します。このチェックでは、自車は長方形として、点群障害物は点として表されます。衝突の可能性がある頂点のみが保持されます。 +ノイズフィルタリング後、モジュールは衝突の可能性が実際にあるかどうかを判断するために、フィルタリングされた障害物/包の頂点に対して衝突の幾何学的チェックを実行します。このチェックでは、自車は長方形として、点群障害物は点として表されます。衝突の可能性のある頂点のみが標的障害物としてラベル付けされます。 ![rigorous_filtering](./image/obstacle_filtering_2.drawio.svg) -#### ターゲット障害物の取得における予測オブジェクトの使用 +## 障害物ラベル付け +厳密なフィルタリング後、残した障害物はラベル付けされます。障害物は、自車位置の定義されたフットプリント(自車幅と`expand_width`パラメータを使用して作成)に収まる場合にのみ、衝突チェックの「ターゲット」ラベルが与えられます。緊急停止が発生するためには、少なくとも 1 つの障害物がターゲットとしてラベル付けされている必要があります。 + +![labeling](./image/labeling.drawio.svg) -`use_predicted_object_data`パラメーターをtrueに設定すると、AEBは知覚モジュールから来る予測オブジェクトデータを使用してターゲット障害物点を取得できます。これは、自車の予測フットプリント経路と各予測オブジェクトの包囲多角形またはバウンディングボックスとの2D交点を取得することで行われます。 +#### ターゲット障害物を入手するための予測対象の使用 +`use_predicted_object_data`パラメータが true に設定されている場合、AEB は知覚モジュールから提供される予測対象データを使用して、ターゲット障害物ポイントを取得できます。これを行うには、自車位置の予測されたフットプリントパス(自車幅と`expand_width`パラメータを使用して作成)と予測された対象のそれぞれを包む多角形または境界ボックスとの間の 2D 交点を求めます。交点がない場合は、すべてのポイントが破棄されます。 ![predicted_object_and_path_intersection](./image/using-predicted-objects.drawio.svg) -### ターゲット障害物との最接近の特定 +### 最も近いターゲット障害物の検出 +ポイントクラウドデータや予測対象データを使用して考えられるすべての障害物を識別した後、AEB モジュールは自車位置に最も近い点を衝突チェックの候補として選択します。「最も近い対象」とは、自車位置のフットプリント内にあり、その幅と`expand_width`パラメータによって決定され、IMU または MPC パスを基準として縦軸に沿って自車位置に最も近い障害物として定義されます。ターゲット障害物は ego パスの外側にある障害物よりも優先されます。これは、衝突チェックが車両の経路に基づいて最もリスクの高い対象に焦点を当てることを保証します。 -すべてのターゲット障害物が特定されたら、AEBモジュールは自車に最も近い点を衝突チェックの候補として選択します。RSS距離は衝突が発生するかどうかを判断するために使用され、自車への最も近い頂点が衝突から安全とみなされる場合、残りのターゲット障害物も衝突から安全であるため、最も近い点のみが考慮されます。 +ターゲット障害物が発見されない場合、AEB モジュールはパス外の他の近くの障害物を考慮します。そのような場合、衝突チェックはスキップされますが、速度を計算するために最も近い障害物の位置を記録します(ステップ 4)。予測対象データで取得した障害物はすべてターゲット障害物であるため、自車位置のフットプリントパス内にあり、速度を計算する必要はありません(知覚モジュールによってすでに計算されています)。このような障害物は、ステップ 4 から除外されます。 ![closest_object](./image/closest-point.drawio.svg) -### 4. 障害物速度推定 - -ターゲットポイントの速度の計算を開始するには、ポイントは速度計算エリアに入る必要があります。これは、`speed_calculation_expansion_margin`パラメーターによって定義されます。 -運用環境によっては、このマージンは初期計算ステップ中に速度の誤算によって引き起こされる不必要な自動緊急ブレーキを軽減することができます。 - -## 自動運転ソフトウェアドキュメント +### 4. 障害物速度の推定 +ターゲットポイントの速度の計算を開始するには、ポイントが速度計算領域に入る必要があります。これは、`speed_calculation_expansion_margin`パラメータに自車幅と`expand_width`パラメータを加えて定義されます。 +運用環境によっては、このマージンにより、初期計算ステップ中の速度の誤算によって発生する不要な自動緊急ブレーキを減らすことができます。 ![speed_calculation_expansion](./image/speed_calculation_expansion.drawio.svg) -最も近い障害物/ポイントの位置が決定されると、AEBモジュールは、以下の式を使用して、過去に検出されたオブジェクトの履歴から、最も近いオブジェクトの相対速度を推定します。 +最も近い障害物/ポイントの位置が決まると、AEB モジュールは以前に検出された対象の履歴を使用して、次の式を使用して最も近い対象の相対速度を推定します。 $$ d_{t} = t_{1} - t_{0} @@ -132,107 +214,111 @@ $$ v_{norm} = d_{x} / d_{t} $$ -ここで、$t_{1}$と$t_{0}$は、現在の最も近いオブジェクトと、直前のポイントクラウドフレームの最も近いオブジェクトを検出するために使用したポイントクラウドのタイムスタンプであり、$o_{x}$と$prev_{x}$は、それらのオブジェクトの位置です。 +ここで、$t_{1}$ と $t_{0}$ は、現在の最も近い対象を検出し、前のポイントクラウドフレームの最も近い対象を検出するために使用されるポイントクラウドのタイムスタンプであり、および $o_{x}$ と $prev_{x}$ はそれぞれそれらの対象の位置です。 ![relative_speed](./image/object_relative_speed.drawio.svg) -最も近い障害物/ポイントが予測されたオブジェクトデータを使用して得られる場合、$v_{norm}$は、x軸とy軸で予測されたオブジェクトの速度のノルムを直接計算することで計算されます。 +最も近い障害物/ポイントが予測対象データを使用して取得される場合、$v_{norm}$ は x 軸と y 軸の予測対象の速度のノルムを直接計算することで計算されることに注意してください。 -次に、速度ベクトルをエゴの予測経路と比較して、縦方向速度$v_{ego}$を取得します。 +速度ベクトルは次に自車位置の予測経路と比較されて、縦方向の速度 $v_{obj}$ が取得されます。 $$ v_{obj} = v_{norm} * Cos(yaw_{diff}) + v_{ego} $$ -ここで、$yaw_{diff}$は、エゴパスと移動ベクトルとの間のヨー差で、$$v_{pos} = o_{pos} - prev_{pos} $$、$v_{ego}$は、エゴの現在の速度で、エゴの移動によるポイントの移動を考慮していますが、オブジェクトによる移動は考慮していません。これらすべての式は、z軸(2D)を無視して実行されます。 +ここで、$yaw_{diff}$ は自車位置のパスと変位ベクトル $$v_{pos} = o_{pos} - prev_{pos} $$ のヨーの違いであり、$v_{ego}$ は自車位置の現在の速度であり、自車位置の移動によって引き起こされるポイントの移動を説明します。これらのすべての式は、z 軸(2D)を無視して実行されます。 -オブジェクト速度は、エゴの現在の移動方向に対して計算されていることに注意してください。オブジェクトがエゴの移動とは逆方向に移動する場合、オブジェクト速度は負になり、次のステップでのrss距離が短くなります。 +対象の速度は、自車位置の現在の移動方向に対して計算されることに注意してください。対象が自車位置の移動とは逆の方向に移動する場合、対象の速度は負になり、次のステップで rss 距離が減少します。 -推定されたオブジェクト速度の結果は、タイムスタンプ付きの速度のキューに追加されます。次に、AEBは過去の速度推定の有効期限を確認し、期限切れの速度測定をキューから削除します。オブジェクトの有効期限は、速度が最初にキューに追加されてからの経過時間が、パラメーター`previous_obstacle_keep_time`より大きいかどうかを確認することによって決定されます。最後に、キューの平均速度が計算されます。平均速度は、衝突確認に使用されるRSS距離を計算するために使用されます。 +### 5. RSS距離によるターゲット障害物との衝突チェック -### 5. RSS距離を使用したターゲット障害物との衝突チェック +5番目のステップで、AEBモジュールはRSS距離を使用して最も近いターゲット障害物との衝突をチェックします。衝突リスクを判断するためにRSS距離を使用するため、最も近いターゲットオブジェクトのみが評価されます。最も近いターゲットポイントが安全とみなされた場合、経路内の他のすべての潜在的な障害物も安全とみなされます。 -第4ステップでは、RSS距離を使用して最も近い障害物ポイントとの衝突をチェックします。RSS距離は次のように定式化されます。 +RSS距離は次のように定式化されます。 $$ d = v_{ego}*t_{response} + v_{ego}^2/(2*a_{min}) -(sign(v_{obj})) * v_{obj}^2/(2*a_{obj_{min}}) + offset $$ -ここで、$v_{ego}$と$v_{obj}$は現在のエゴと障害物の速度、$a_{min}$と$a_{obj_{min}}$はエゴとオブジェクトの最小加速度(最大減速)、$t_{response}$は減速を開始するエゴ車両の応答時間です。したがって、エゴ車両から障害物までの距離がこのRSS距離$d$よりも小さい場合、エゴ車両は緊急停止信号を送信します。これは次の図に示されています。 +ここで、$v_{ego}$と$v_{obj}$は現在のエゴと障害物の速度、$a_{min}$と$a_{obj_{min}}$はエゴとオブジェクトの最小加速度(最大減速度)、$t_{response}$は減速を開始するためのエゴ車両の応答時間です。したがって、エゴ車両から障害物までの距離がこのRSS距離$d$より小さい場合、エゴ車両は緊急停止信号を送信します。 + +RSS距離の計算では、「ターゲット」として分類された障害物のみが考慮されます(ステップ3で定義)。これらの「ターゲット」障害物の中で、エゴ車両に最も近いものが計算に使用されます。「ターゲット」障害物が存在しない場合、つまり障害物がエゴ車両の予測経路(幅と拡張マージンで決定)に入らない場合、このステップはスキップされます。代わりに、最も近い障害物の位置が将来の速度計算(ステップ4)のために記録されます。このシナリオでは、緊急停止診断メッセージは生成されません。このプロセスは添付のダイアグラムで示されています。 ![rss_check](./image/rss_check.drawio.svg) -### 6. `/diagnostics`に対する緊急停止信号の送信 +### 6. `/diagnostics` に緊急停止信号を送信 -AEBが前のステップでポイントクラウド障害物との衝突を検出した場合、このステップで`/diagnostics`に緊急信号を送信します。緊急停止を有効にするには、ERRORレベルの緊急事態を送信する必要があります。さらに、AEBユーザーは設定ファイルを修正して緊急レベルを維持する必要があります。そうしないと、Autowareは緊急状態を保持しません。 +前述のステップでAEBが点群障害物との衝突を検出すると、このステップで`/diagnostics`に緊急信号を送信します。緊急停止を有効にするには、必ずERRORレベルの緊急信号を送信する必要があることに注意してください。さらに、AEBユーザーは緊急レベルを保持するように設定ファイルを修正する必要があります。そうしないと、Autowareは緊急状態を保持しません。 ## ユースケース -### 前方の車両が急ブレーキ +### 前方の車が急ブレーキ -前方車両が急ブレーキをかけ、AEBモジュールによって衝突が検出されると、AEBを起動できます。エゴ車両と前方車両の距離が十分に大きく、エゴの緊急加速度値が十分に高い場合、急ブレーキをかける前方車両との衝突を回避または緩和することができます。注意: AEBがrss距離の計算に使用した加速度は、緊急ブレーキ中にエゴが使用する加速度とは必ずしも同じではありません。実際の車両で使用される加速度は、[mrm_emergency stop jerkとacceleration値](https://github.com/tier4/autoware_launch/blob/d1b2688f2788acab95bb9995d72efd7182e9006a/autoware_launch/config/system/mrm_emergency_stop_operator/mrm_emergency_stop_operator.param.yaml#L4)を変更することで調整できます。 +前方車両が急ブレーキをかけて衝突をAEBモジュールが検出すると、AEBが作動する可能性があります。エゴ車両と前方車両間の距離が十分に大きく、エゴの緊急加速度値が十分に高い場合、急ブレーキをかける前方車両との衝突を回避または緩和できます。注: AEBがrss_distanceの計算に使用される加速度は、エゴが緊急ブレーキ中に使用される加速度とは必ずしも同じではありません。実際の車両で使用される加速度は、[MRM緊急停止のジャークと加速度の値](https://github.com/tier4/autoware_launch/blob/d1b2688f2788acab95bb9995d72efd7182e9006a/autoware_launch/config/system/mrm_emergency_stop_operator/mrm_emergency_stop_operator.param.yaml#L4)を変更することで調整できます。 ![front vehicle collision prevention](./image/front_vehicle_collision.drawio.svg) -### 急に登場したオブジェクトへの停止 +### 突如現れたオブジェクトの停止 -突然物体が現れた場合、他のモジュールが時間内に物体を検出できなかったとき、AEB は自動運転車両を停止するためにフェイルセーフとして動作できます。オブジェクトによる急な割り込みが予想される場合は、`expand_width` パラメータを増やすことで、AEB モジュールがオブジェクトが自動運転車両の実際のパスに入る前に衝突を検出するのに役立つ場合があります。 +オブジェクトが突然現れた場合、AEBは他のモジュールが時間内にオブジェクトを検出できなかった場合のエゴ車両の停止に関するフェイルセーフとして機能します。オブジェクトの急なカットインが予想される場合、AEBモジュールが`expand_width`パラメータを増やすことで、オブジェクトがエゴ車両の実際の経路に入る前に衝突を検出するのに役立つ場合があります。 -![後方車両との衝突防止](./image/occluded_space.drawio.svg) +![occluded object collision prevention](./image/occluded_space.drawio.svg) -### 後方オブジェクトとの衝突の防止 +### 後続オブジェクトとの衝突防止 -AEB モジュールは、自動運転車両が後退している場合にも衝突を防止できます。 +エゴ車両が後進している場合も、AEBモジュールは衝突を防ぐことができます。 -![後退運転](./image/backward-driving.drawio.svg) +![backward driving](./image/backward-driving.drawio.svg) -### オドメータの誤りによる衝突の防止(IMU パスのみ) +### オドメトリが不正な場合の衝突防止(IMUパスのみ) -車両オドメータの情報に誤りがある場合、MPC が自動運転車両の正しいパスを予測できない可能性があります。MPC が予測したパスが間違っていると、衝突回避が計画モジュールで意図したとおりに機能しません。ただし、AEB の IMU パスは MPC に依存せず、他のモジュールが衝突を検出できない場合に衝突を予測できる可能性があります。たとえば、MPC パスが間違っており、AEB の IMU パスのみが衝突を検出する仮想ケースの図を示します。 +車両のオドメトリ情報が不正確な場合、MPCはエゴ車両の正しい経路を予測できない可能性があります。MPCの予測パスが間違っていると、計画モジュールでの衝突回避は意図したとおりに機能しません。ただし、AEBのIMUパスはMPCに依存せず、他のモジュールができない場合に衝突を予測できます。例として、MPCのパスが間違っていて、AEBのIMUパスだけが衝突を検出する仮説的なケースを示す図を参照してください。 -![間違った mpc](./image/wrong-mpc.drawio.svg) +![wrong mpc](./image/wrong-mpc.drawio.svg) ## パラメータ -| Name | 単位 | タイプ | 説明 | デフォルト値 | -| :--------------------------------- | :----- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| publish_debug_markers | [なし] | ブール | デバッグマーカーを発行するフラグ | true | -| publish_debug_pointcloud | [なし] | ブール | デバッグに使用されるポイントクラウドを発行するフラグ | false | -| use_predicted_trajectory | [なし] | ブール | コントロールモジュールからの予測パスの使用フラグ | true | -| use_imu_path | [なし] | ブール | センサーデータによって生成された予測パスの使用フラグ | true | -| use_object_velocity_calculation | [なし] | ブール | オブジェクト速度計算の使用フラグ。 `false` に設定すると、オブジェクト速度は 0 [m/s] に設定されます。 | true | -| check_autoware_state | [なし] | ブール | Autoware ステートチェックの有効/無効フラグ。 `false` に設定すると、エゴ車が AUTONOMOUS ステートにない場合でも AEB モジュールは動作します。 | true | -| detection_range_min_height | [m] | 倍精度 | 誤検出によるゴーストブレーキを回避するために使用される検出範囲の最小高さ | 0.0 | -| detection_range_max_height_margin | [m] | 倍精度 | 誤検出によるゴーストブレーキを回避するために使用される検出範囲の最大高さのマージン。 `detection_range_max_height = vehicle_height + detection_range_max_height_margin` | 0.0 | -| voxel_grid_x | [m] | 倍精度 | ボクセルグリッドフィルタの X 軸ダウンサンプリングパラメータ | 0.05 | -| voxel_grid_y | [m] | 倍精度 | ボクセルグリッドフィルタの Y 軸ダウンサンプリングパラメータ | 0.05 | -| voxel_grid_z | [m] | 倍精度 | ボクセルグリッドフィルタの Z 軸ダウンサンプリングパラメータ | 減速 | -| cluster tolerance | [m] | 倍精度 | 2 つの点の間に許容可能な最大距離。それ以下の距離では、同じクラスタの一部とみなされます。 | 0.15 | -| cluster_minimum_height | [m] | 倍精度 | クラスタ内の少なくとも 1 つの点が衝突対象の可能性のあるクラスタに含まれるために、この値よりも高くする必要があります。 | 0.1 | -| minimum_cluster_size | [なし] | 整数 | 対象の障害物として考慮されるためには、クラスタに必要最低限のポイント数 | 10 | -| maximum_cluster_size | [なし] | 整数 | 対象の障害物として考慮されるためには、クラスタに含まれる最大ポイント数 | 10000 | -| min_generated_imu_path_length | [m] | 倍精度 | センサーによって生成された予測パスの最小距離 | 0.5 | -| max_generated_imu_path_length | [m] | 倍精度 | センサーによって生成された予測パスの最大距離 | 10.0 | -| expand_width | [m] | 倍精度 | 衝突チェック時のエゴ車両の拡張幅 | 0.1 | -| longitudinal_offset | [m] | 倍精度 | 衝突チェック時の縦方向オフセット距離 | 2.0 | -| t_response | [s] | 倍精度 | エゴ車が前方の車両を検知してから減速を開始するまでの反応時間 | 1.0 | -| a_ego_min | [m/ss] | 倍精度 | エゴ車両の最大減速度 | -3.0 | -| a_obj_min | [m/ss] | 倍精度 | オブジェクトの最大減速度 | -3.0 | -| imu_prediction_time_horizon | [s] | 倍精度 | センサーによって生成された予測パスの時間範囲 | 1.5 | -| imu_prediction_time_interval | [s] | 倍精度 | センサーによって生成された予測パスの時間間隔 | Planning | -| mpc_prediction_time_horizon | [s] | 倍精度 | mpc によって生成された予測パスの時間範囲 | 1.5 | -| mpc_prediction_time_interval | [s] | 倍精度 | mpc によって生成された予測パスの時間間隔 | 0.1 | -| aeb_hz | [なし] | 倍精度 | AEBが1秒間に動作する頻度 | 10 | -| speed_calculation_expansion_margin | [m] | 倍精度 | 開始速度計算時のエゴ車両の拡張幅 | 0.1 | - -## 制約事項 - -- 衝突検出後の停止に必要な距離は、自車速度と減速性能によって異なります。衝突を回避するには、検出距離を長くし、より高い減速率を設定する必要があります。ただし、不要なアクティベーションの数を増やす可能性があるため、トレードオフが生じます。したがって、このモジュールが果たすべき役割を考慮し、それに応じてパラメータを調整することが不可欠です。 - -- AEBは、地上に近い障害物に対しては反応できない場合があります。これは、点群に適用される前処理方法のパフォーマンスに依存します。 - -- センサーから取得した縦方向加速度の情報は、ノイズが大きいので使用されていません。 - -- センサーデータから作成された予測経路の精度は、自車に搭載されたセンサーの精度に依存します。 +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +|---|---|---|---|---| +| publish_debug_markers | [-] | ブール | デバッグマーカーをパブリッシュするフラグ | true | +| publish_debug_pointcloud | [-] | ブール | デバッグ用に使われる点群をパブリッシュするフラグ | false | +| use_predicted_trajectory | [-] | ブール | Planningモジュールからの予測パスを使用するフラグ | true | +| use_imu_path | [-] | ブール | センサーデータから生成された予測パスを使用するフラグ | true | +| use_object_velocity_calculation | [-] | ブール | オブジェクト速度計算を使用するフラグ。Falseに設定すると、オブジェクト速度は0 [m/s]に設定されます | true | +| check_autoware_state | [-] | ブール | Autowareの状態チェックを有効/無効にするフラグ。Falseに設定すると、自車がAUTONOMOUS状態にない場合でもAEBモジュールが実行されます | true | +| detection_range_min_height | [m] | double | 誤検出点群によるゴーストブレーキの回避に使用される、検出範囲の最小高さ | 0.0 | +| detection_range_max_height_margin | [m] | double | 誤検出点群によるゴーストブレーキの回避に使用される、検出範囲の最大高さのマージン。`detection_range_max_height = vehicle_height + detection_range_max_height_margin` | 0.0 | +| voxel_grid_x | [m] | double | ボクセルグリッドフィルタのx軸ダウンサンプリングパラメータ | 0.05 | +| voxel_grid_y | [m] | double | ボクセルグリッドフィルタのy軸ダウンサンプリングパラメータ | 0.05 | +| voxel_grid_z | [m] | double | ボクセルグリッドフィルタのz軸ダウンサンプリングパラメータ | 100000.0 | +| cluster_tolerance | [m] | double | 同じクラスターの一部とみなされる2つの点間の最大許容距離 | 0.15 | +| cluster_minimum_height | [m] | double | クラスター内に含まれる少なくとも1つのポイントがこの値より高くなければ、衝突対象の可能性のある候補セットにクラスターを組み込みません | 0.1 | +| minimum_cluster_size | [-] | int | 対象となる障害物とみなされるためには、クラスターに含まれる必要最低数のポイント数 | 10 | +| maximum_cluster_size | [-] | int | 対象となる障害物とみなされるためには、クラスターに含まれる最大数のポイント数 | 10000 | +| min_generated_imu_path_length | [m] | double | センサーによって生成された予測パスの最小距離 | 0.5 | +| max_generated_imu_path_length | [m] | double | センサーによって生成された予測パスの最大距離 | 10.0 | +| expand_width | [m] | double | 衝突チェック、パスクロッピング、速度計算における自車の拡大幅 | 0.1 | +| longitudinal_offset_margin | [m] | double | 衝突チェックのための縦方向オフセット距離 | 2.0 | +| t_response | [s] | double | 自車が前方車両の減速開始を検出するための応答時間 | 1.0 | +| a_ego_min | [m/ss] | double | 自車の最大減速度値 | -3.0 | +| a_obj_min | [m/ss] | double | 物体の最大減速度値 | -3.0 | +| imu_prediction_time_horizon | [s] | double | センサーによって生成された予測パスの時系列 | 1.5 | +| imu_prediction_time_interval | [s] | double | センサーによって生成された予測パスの時系列間隔 | 0.1 | +| mpc_prediction_time_horizon | [s] | double | mpcによって生成された予測パスの時系列 | 1.5 | +| mpc_prediction_time_interval | [s] | double | mpcによって生成された予測パスの時系列間隔 | 0.1 | +| aeb_hz | [-] | double | AEBが1秒間に動作する周波数 | 10 | +| speed_calculation_expansion_margin | [m] | double | 最も近いオブジェクトの速度を計算するときに使用される自車フットプリントの拡大幅 | 0.7 | +| path_footprint_extra_margin | [m] | double | AEB入力点群のクロッピングに使用される自車フットプリントを拡大するこのパラメータ | 1.0 | + +## 制限 + +- 衝突検出後の停止に必要な距離は、自車速度と減速性能に依存します。衝突を回避するには、検出距離を延ばし、減速率を上げる必要があります。ただし、不要なアクティベーションの数も増える可能性があるため、トレードオフが生じます。したがって、このモジュールにどのような役割を持たせるべきかを検討し、それに応じてパラメータを調整することが不可欠です。 + +- AEBは、地面に近い障害物には反応できない可能性があります。これは、点群に適用される前処理方法のパフォーマンスに依存します。 + +- センサーから得られる縦加速度情報は、ノイズの量が多いため使用されていません。 + +- センサーデータから作成される予測経路の精度は、自車に搭載されたセンサーの精度に依存します。 ![aeb_range](./image/range.drawio.svg) + diff --git a/control/autoware_control_validator/README.md b/control/autoware_control_validator/README.md index 9d025e7ffc841..755d675266eb5 100644 --- a/control/autoware_control_validator/README.md +++ b/control/autoware_control_validator/README.md @@ -1,82 +1,66 @@ -# 制御検証器 +## コントロールバリデータ -`control_validator` は制御コンポーネントの出力の妥当性を確認するモジュールです。検証のステータスは `/diagnostics` トピックで確認できます。 +`control_validator`はコントロールコンポーネントの出力の妥当性を確認するモジュールです。検証ステータスは`/diagnostics`トピックで確認できます。 ![control_validator](./image/control_validator.drawio.svg) -## サポート対象機能 +## サポートされている機能 -検証に対して、次の機能がサポートされており、しきい値をパラメータによって設定できます。 -以下にリストされている機能は常に最新のインプリメンテーションに対応しているわけではありません。 +次の機能は検証用にサポートされており、しきい値をパラメータで設定できます。 +以下に記載されている機能は必ずしも最新のインプリメンテーションに対応しているとは限りません。 -| 説明 | 引数 | 診断式 | -| ------------------------------------------ | ------------------------------------------------------------------------------------ | :---------------------------------------------------: | -| 逆速度: 計測速度が目標速度と符号が異なる。 | 計測速度 $v$、目標速度 $\hat{v}$、および速度パラメータ $c$ | $v \hat{v} < 0, \quad \lvert v \rvert > c$ | -| 過速度: 計測速度が目標速度を著しく上回る。 | 計測速度 $v$、目標速度 $\hat{v}$、比率パラメータ $r$、およびオフセットパラメータ $c$ | $\lvert v \rvert > (1 + r) \lvert \hat{v} \rvert + c$ | +| 説明 | 引数 | 診断式 | +| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | :---------------------------------------: | +| 逆速度: 測定速度が目標速度と符号が異なる。 | 測定速度 $v$、目標速度 $\hat{v}$、速度パラメータ $c$ | $v \hat{v} < 0, \quad \lvert v \rvert > c$ | +| 過速度: 測定速度が目標速度を大幅に上回る。 | 測定速度 $v$、目標速度 $\hat{v}$、比率パラメータ $r$、オフセットパラメータ $c$ | $\lvert v \rvert > (1 + r) \lvert \hat{v} \rvert + c$ | -- **基準軌跡と予測軌跡の逸脱量チェック**: 予測軌跡と基準軌跡との間の最大逸脱量が指定されたしきい値を超えている場合、無効になります。 +- **基準軌跡と予測軌跡の偏差チェック** : 予測軌跡と基準軌跡の最大の偏差が所定のしきい値を超えている場合、無効。 ![trajectory_deviation](./image/trajectory_deviation.drawio.svg) ## 入出力 -### 入力量 +### 入力 -`control_validator` には、次の入力量があります。 +`control_validator` は、次の入力を受け入れます。 -| 名前 | タイプ | 説明 | -| ------------------------------ | --------------------------------- | -------------------------------------------------------------------- | -| `~/input/kinematics` | nav_msgs/Odometry | 自車位置とツイスト | -| `~/input/reference_trajectory` | autoware_planning_msgs/Trajectory | Planningモジュールから出力され、追従すべきリファレンストラジェクトリ | -| `~/input/predicted_trajectory` | autoware_planning_msgs/Trajectory | Controlモジュールから出力された予測軌跡 | +| 名称 | タイプ | 説明 | +|---|---|---| +| `~/input/kinematics` | nav_msgs/Odometry | 自車位置とツイスト | +| `~/input/reference_trajectory` | autoware_planning_msgs/Trajectory | Planningモジュールから出力され、追従する基準軌道 | +| `~/input/predicted_trajectory` | autoware_planning_msgs/Trajectory | Controlモジュールから出力される予測軌道 | ### 出力 -以下の値を出力します。 +以下を出力します: -- **Planning経路:** Planningモジュールによって生成された経路。経路はポリラインで表現され、各地点は世界座標系で指定されます。 -- **Planningコマンド:** Planningモジュールによって生成されたコマンド。コマンドは、ハンドル角、加速度、速度などの車両動作を指定します。 -- **現在の自己位置:** GNSSやIMUなどのセンサから得られた車両の位置と姿勢。 -- **地図:** 地形、道路、建物などの環境に関する情報。 -- **障害物情報:** ライダー、カメラ、レーダーなどのセンサから得られた障害物の位置と形状。 -- **センサー情報:** Rawセンサデータ(オプション)。 - -### 内部処理 - -Autoware.Autoは、以下のような内部処理を実行します。 - -- **環境認識:** センサーデータから車両の周囲を認識します。 -- **Planning:** Planning経路とPlanningコマンドを生成します。 -- **制御:** Planningコマンドに基づいて車両を制御します。 -- **状態推定:** GNSS、IMU、オドメトリなどのセンサから自車位置を推定します。 -- **センサフュージョン:** 複数のセンサからデータを統合して、より正確でロバストな推定を行います。 - -| 名前 | タイプ | 説明 | -| ---------------------------- | ---------------------------------------- | ----------------------------------------------------- | -| `~/output/validation_status` | control_validator/ControlValidatorStatus | 経路の有効性/無効性の理由を知らせるバリデーターの状態 | -| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告する診断 | +| Name | Type | Description | +| ----------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `~/output/validation_status` | control_validator/ControlValidatorStatus | trajectoryが有効/無効である理由を通知するためのvalidatorステータス | +| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告するための診断 | ## パラメータ -以下のパラメータを `control_validator` に設定できます。 +`control_validator` には、以下のパラメータを設定できます。 ### システムパラメータ -| 名前 | 型 | 説明 | デフォルト値 | -| :--------------------------- | :--- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| `publish_diag` | bool | trueの場合、診断msgが公開されます。 | true | -| `diag_error_count_threshold` | int | 連続して無効な軌跡の数がこのしきい値を超えた場合、diagはERRORに設定されます(例:しきい値= 1の場合、軌跡が無効であっても、次の軌跡が有効な場合はdiagはERRORになりません)。 | true | -| `display_on_terminal` | bool | エラーメッセージをターミナルに表示します。 | true | +| 名前 | タイプ | 説明 | デフォルト値 | +| :--------------------------- | :--- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `publish_diag` | bool | trueの場合、診断メッセージが公開される。 | true | +| `diag_error_count_threshold` | int | 連続する無効な軌跡の数がこのしきい値を超えると、DiagはERRORに設定される。(例:しきい値=1の場合、軌跡が無効であっても、次の軌跡が有効な場合はDiagはERRORにならない。) | true | +| `display_on_terminal` | bool | エラーメッセージをターミナルに表示する | true | ### アルゴリズムパラメータ #### しきい値 -インデックスが以下のしきい値を超えた場合、入力軌跡は無効と検出されます。 +入力トラジェクトリが次のしきい値を超えた場合は無効と検出されます。 + +| 名前 | 型 | 説明 | デフォルト値 | +| :---------------------------------- | :----- | :----------------------------------------------------------------------------------------------------- | :------------ | +| `thresholds.max_distance_deviation` | double | 予測パスとリファレンストラジェクトリとの間の最大距離偏差の無効な閾値 [m] | 1.0 | +| `thresholds.rolling_back_velocity` | double | 車両速度を検証するためのしきい値速度 [m/s] | 0.5 | +| `thresholds.over_velocity_offset` | double | 車両速度を検証するためのしきい値速度オフセット [m/s] | 2.0 | +| `thresholds.over_velocity_ratio` | double | 車両速度を検証するためのしきい値比 [*] | 0.2 | -| 名称 | タイプ | 説明 | デフォルト値 | -| :---------------------------------- | :----- | :----------------------------------------------------------- | :----------- | -| `thresholds.max_distance_deviation` | double | 予測パスと基準軌道間の最大距離逸脱量の無効なしきい値 [m] | 1.0 | -| `thresholds.rolling_back_velocity` | double | 自車速度の有効性を検証するためのしきい値速度 [m/s] | 0.5 | -| `thresholds.over_velocity_offset` | double | 自車速度の有効性を検証するためのしきい値速度オフセット [m/s] | 2.0 | -| `thresholds.over_velocity_ratio` | double | 自車速度の有効性を検証するためのしきい値速度比率 [*] | 0.2 | diff --git a/control/autoware_external_cmd_selector/README.md b/control/autoware_external_cmd_selector/README.md index ce4bc46ae69a9..f09a34c75a244 100644 --- a/control/autoware_external_cmd_selector/README.md +++ b/control/autoware_external_cmd_selector/README.md @@ -2,37 +2,38 @@ ## 目的 -`autoware_external_cmd_selector`は、現在モード(`remote`または`local`)に応じて、`external_control_cmd`、`gear_cmd`、`hazard_lights_cmd`、`heartbeat`、`turn_indicators_cmd`を発行するためのパッケージです。 +`autoware_external_cmd_selector` は、現在のモード(リモートまたはローカル)に応じて `external_control_cmd`, `gear_cmd`, `hazard_lights_cmd`, `heartbeat`、`turn_indicators_cmd` をパブリッシュするパッケージです。 -現在のモードはサービス経由で設定され、`remote`はリモート操作、`local`はAutowareによって計算された値を使うことです。 +現在のモードは、リモート操作される `remote` と、Autoware によって計算された値を使用する `local` というサービス経由で設定されます。 ## 入出力 ### 入力トピック -| 名前 | タイプ | 説明 | -| ---------------------------------------------- | ------ | ---------------------------------------------- | -| `/api/external/set/command/local/control` | TBD | 局所的。制御の計算値 | -| `/api/external/set/command/local/heartbeat` | TBD | 局所的。ハートビート | -| `/api/external/set/command/local/shift` | TBD | 局所的。ドライブ、リアなどのようなギアシフト | -| `/api/external/set/command/local/turn_signal` | TBD | 局所的。左折、右折などのターなのが信号 | -| `/api/external/set/command/remote/control` | TBD | リモート。制御の計算値 | -| `/api/external/set/command/remote/heartbeat` | TBD | リモート。ハートビート | -| `/api/external/set/command/remote/shift` | TBD | リモート。ドライブ、リアなどのようなギアシフト | -| `/api/external/set/command/remote/turn_signal` | TBD | リモート。左折、右折などのターのが信号 | +| 名前 | タイプ | 説明 | +| ------------------------------------------------ | ---- | ---------------------------------------------------------------------- | +| `/api/external/set/command/local/control` | TBD | Local. 計算された制御値。 | +| `/api/external/set/command/local/heartbeat` | TBD | Local. ハートビート。 | +| `/api/external/set/command/local/shift` | TBD | Local. ドライブ、リバースなどのギアシフト。 | +| `/api/external/set/command/local/turn_signal` | TBD | Local. 左折、右折などのターンシグナル。 | +| `/api/external/set/command/remote/control` | TBD | Remote. 計算された制御値。 | +| `/api/external/set/command/remote/heartbeat` | TBD | Remote. ハートビート。 | +| `/api/external/set/command/remote/shift` | TBD | Remote. ドライブ、リバースなどのギアシフト。 | +| `/api/external/set/command/remote/turn_signal` | TBD | Remote. 左折、右折などのターンシグナル。 | ### 出力トピック -| 名前 | タイプ | 説明 | -| ------------------------------------------------------ | ------------------------------------------------- | -------------------------------------------- | -| `/control/external_cmd_selector/current_selector_mode` | TBD | 現在選択中のモード(リモートまたはローカル) | -| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | ノードがアクティブかどうかを確認する | -| `/external/selected/external_control_cmd` | TBD | 現在のモードで制御コマンドを透過する | -| `/external/selected/gear_cmd` | autoware_vehicle_msgs::msg::GearCommand | 現在のモードでギアコマンドを透過する | -| `/external/selected/hazard_lights_cmd` | autoware_vehicle_msgs::msg::HazardLightsCommand | 現在のモードでハザードランプを透過する | -| `/external/selected/heartbeat` | TBD | 現在のモードでハートビートを透過する | -| `/external/selected/turn_indicators_cmd` | autoware_vehicle_msgs::msg::TurnIndicatorsCommand | 現在のモードでターンインジケーターを透過する | +| 名前 | 種類 | 説明 | +| ------------------------------------------------------ | ---------------------------------------------------------------- | ------------------------------------------------ | +| `/control/external_cmd_selector/current_selector_mode` | TBD | 現在の選択モード(リモートまたはローカル) | +| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | ノードのアクティビティを確認する | +| `/external/selected/external_control_cmd` | TBD | 現在のモードでコントロールコマンドを渡す | +| `/external/selected/gear_cmd` | autoware_vehicle_msgs::msg::GearCommand | 現在のモードでギヤコマンドを渡す | +| `/external/selected/hazard_lights_cmd` | autoware_vehicle_msgs::msg::HazardLightsCommand | 現在のモードでハザードライトを渡す | +| `/external/selected/heartbeat` | TBD | 現在のモードでハートビートを渡す | +| `/external/selected/turn_indicators_cmd` | autoware_vehicle_msgs::msg::TurnIndicatorsCommand | 現在のモードでターニンジケーターを渡す | -## パラメータ +## パラメーター {{json_to_markdown("control/autoware_external_cmd_selector/schema/external_cmd_selector.schema.json")}} + diff --git a/control/autoware_joy_controller/README.md b/control/autoware_joy_controller/README.md index bf8e6fa1b34cb..3cc09c5c2a701 100644 --- a/control/autoware_joy_controller/README.md +++ b/control/autoware_joy_controller/README.md @@ -1,12 +1,13 @@ -## autoware_joy_controller +# Autoware Joy Controller ## 役割 -`autoware_joy_controller`は、車両のAutowareコマンド(ステアリングホイール、シフト、ターンシグナル、エンゲージなど)にジョイメッセージを変換するパッケージです。 +`autoware_joy_controller` は、ジョイ メッセージを Autoware コマンド (例: ステアリング ホイール、シフト、ターン シグナル、エンゲージ) に変換するためのパッケージです。 ## 使用方法 -### ROS 2起動 +### ROS 2 起動 + ```bash # With default config (ds4) @@ -19,123 +20,108 @@ ros2 launch autoware_joy_controller joy_controller_param_selection.launch.xml jo ros2 launch autoware_joy_controller joy_controller.launch.xml config_file:=/path/to/your/param.yaml ``` -## 入出力 +## 入力 / 出力 ### 入力トピック -| 名称 | 型 | 説明 | -| ------------------ | ----------------------- | ------------------------------------ | -| `~/input/joy` | sensor_msgs::msg::Joy | ジョイコントローラの指令 | -| `~/input/odometry` | nav_msgs::msg::Odometry | 自車位置を取得するための自己位置推定 | +| 名称 | タイプ | 説明 | +| ------------------ | ----------------------- | --------------------------------- | +| `~/input/joy` | sensor_msgs::msg::Joy | ジョイスティックコントローラコマンド | +| `~/input/odometry` | nav_msgs::msg::Odometry | 自車位置を取得するための自車オドメトリ | ### 出力トピック -| 名前 | タイプ | 説明 | -| ----------------------------------- | ----------------------------------------------------- | ---------------------------------- | -| `~/output/control_command` | `autoware_control_msgs::msg::Control` | 横方向および縦方向制御コマンド | -| `~/output/external_control_command` | `tier4_external_api_msgs::msg::ControlCommandStamped` | 横方向および縦方向制御コマンド | -| `~/output/shift` | `tier4_external_api_msgs::msg::GearShiftStamped` | ギアコマンド | -| `~/output/turn_signal` | `tier4_external_api_msgs::msg::TurnSignalStamped` | ウインカーコマンド | -| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード(AutoまたはExternal) | -| `~/output/heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | ハートビート | -| `~/output/vehicle_engage` | `autoware_vehicle_msgs::msg::Engage` | 車両エンゲージ | +| 名称 | タイプ | 説明 | +| ----------------------------------- | --------------------------------------------------- | ---------------------------------------- | +| `~/output/control_command` | autoware_control_msgs::msg::Control | 横方向および縦方向制御コマンド | +| `~/output/external_control_command` | tier4_external_api_msgs::msg::ControlCommandStamped | 横方向および縦方向制御コマンド | +| `~/output/shift` | tier4_external_api_msgs::msg::GearShiftStamped | ギアシフトコマンド | +| `~/output/turn_signal` | tier4_external_api_msgs::msg::TurnSignalStamped | ターンシグナルコマンド | +| `~/output/gate_mode` | tier4_control_msgs::msg::GateMode | ゲートモード(自動または外部) | +| `~/output/heartbeat` | tier4_external_api_msgs::msg::Heartbeat | ハートビート | +| `~/output/vehicle_engage` | autoware_vehicle_msgs::msg::Engage | 車両動作 | ## パラメータ -| パラメーター | タイプ | 説明 | -| ------------------------- | ------ | -------------------------------------------------------------------------- | -| `joy_type` | string | ジョイコントローラータイプ (初期値: DS4) | -| `update_rate` | double | 制御コマンドを公開するための更新レート | -| `accel_ratio` | double | 加速度を計算するための比率 (指示加速度は比率 \* 操作量) | -| `brake_ratio` | double | 減速度を計算するための比率 (指示加速度は -比率 \* 操作量) | -| `steer_ratio` | double | 減加速度を計算するための比率 (指示舵角は比率 \* 操作量) | -| `steering_angle_velocity` | double | 操作のときの舵角速度 | -| `accel_sensitivity` | double | 外部APIの加速度を計算するための感度 (指示加速度は pow(操作量, 1 / 感度)) | -| `brake_sensitivity` | double | 外部APIの減加速度を計算するための感度 (指示加速度は pow(操作量, 1 / 感度)) | -| `raw_control` | bool | 真の場合、入力車体運動をスキップする | -| `velocity_gain` | double | 加速度によって計算される速度の比率 | -| `max_forward_velocity` | double | 前方へ進む絶対最大速度 | -| `max_backward_velocity` | double | 後方へ進む絶対最大速度 | -| `backward_accel_ratio` | double | 減速度を計算するための比率 (Commanded acceleration is -ratio \* 操作量) | +| パラメータ | タイプ | 説明 | +| ------------------------- | ------ | --------------------------------------------------------------------------------------------------------------- | +| `joy_type` | 文字列 | ジョイコントローラのタイプ(既定値:DS4) | +| `update_rate` | double | 制御コマンドを発行するための更新率 | +| `accel_ratio` | double | 加速度を計算するための比率(指示された加速度は比率 \* 操作) | +| `brake_ratio` | double | 減速を計算するための比率(指示された加速度は -比率 \* 操作) | +| `steer_ratio` | double | 減速を計算するための比率(指示された操舵は比率 \* 操作) | +| `steering_angle_velocity` | double | 操作のための操舵角速度 | +| `accel_sensitivity` | double | 外部APIの加速度を計算するための感度(指示された加速度は pow(操作, 1 / 感度)) | +| `brake_sensitivity` | double | 外部APIの減速を計算するための感度(指示された加速度は pow(操作, 1 / 感度)) | +| `raw_control` | ブール型 | true の場合、入力オドメトリをスキップ | +| `velocity_gain` | double | 加速度による速度を計算するための比率 | +| `max_forward_velocity` | double | 前進するための絶対最大速度 | +| `max_backward_velocity` | double | 後退するための絶対最大速度 | +| `backward_accel_ratio` | double | 減速を計算するための比率(指示された加速度は -比率 \* 操作) | ## P65 ジョイスティック キーマップ -| 操作 | ボタン | -| -------------- | ---------------------- | -| 加速度 | R2 | -| ブレーキ | L2 | -| ステアリング | レフトスティックの左右 | -| アップシフト | カーソル上 | -| ダウンシフト | カーソル下 | -| Driveシフト | カーソル左 | -| リバースシフト | カーソル右 | -| 左折ウィンカー | L1 | -| 右折ウィンカー | R1 | -| ウィンカー解除 | A | -| ゲートモード | B | -| 緊急停止 | セレクト | -| 緊急停止解除 | スタート | -| Autoware起動 | X | -| Autoware停止 | Y | -| Vehicle起動 | PS | -| Vehicle停止 | 右トリガー | +| 操作 | ボタン | +|---|---| +| 加速 | R2 | +| ブレーキ | L2 | +| ステアリング | 左スティック左右 | +| シフトアップ | カーソルアップ | +| シフトダウン | カーソルダウン | +| ドライブシフト | カーソル左 | +| リバースシフト | カーソル右 | +| 左ウィンカー | L1 | +| 右ウィンカー | R1 | +| ウィンカーキャンセル | A | +| ゲートモード | B | +| 緊急停止 | セレクト | +| 緊急停止解除 | スタート | +| Autoware エンゲージ | X | +| Autoware ディスエンゲージ | Y | +| Vehicle エンゲージ | PS | +| Vehicle ディスエンゲージ | 右トリガー | ## DS4 ジョイスティック キーマップ -| アクション | ボタン | -| -------------- | --------------------------- | -| 加速 | R2、×、または右スティック上 | -| 減速 | L2、□、または右スティック下 | -| ステアリング | 左スティック左右 | -| シフトアップ | カーソル上 | -| シフトダウン | カーソル下 | -| シフトドライブ | カーソル左 | -| シフトリバース | カーソル右 | -| 左ウィンカー | L1 | -| 右ウィンカー | R1 | -| ウィンカー解除 | SHARE | -| ゲートモード | OPTIONS | -| 緊急停止 | PS | -| 緊急停止解除 | PS | -| Autoware起動 | ○ | -| Autoware停止 | ○ | -| 車両起動 | △ | -| 車両停止 | △ | - -## XBOX ジョイスティック キーマッピング - ---- - -## 自動運転ソフトウェア ドキュメント(日本語訳) - -### 操作方法 - -| 操作 | ボタン | -| -------------- | --------------------- | -| 加速 | RT | -| ブレーキ | LT | -| ステアリング | 左スティック
左/右 | -| アップシフト | カーソル上 | -| ダウンシフト | カーソル下 | -| ドライブシフト | カーソル左 | -| リバースシフト | カーソル右 | -| 左ウインカー | LB | -| 右ウインカー | RB | -| ウインカー解除 | A | -| ゲートモード | B | -| 緊急停止 | ビュー | -| 緊急停止解除 | メニュー | -| Autoware 起動 | X | -| Autoware 停止 | Y | -| Vehicle 起動 | 左スティックボタン | -| Vehicle 停止 | 右スティックボタン | - -### Planningコンポーネント - -#### `post resampling`動作 - -#### 自車位置喪失時のリカバリ動作 - -#### velocity逸脱量の計算 - -#### acceleration逸脱量の計算 +| 操作 | ボタン | +| -------------------- | -------------------------- | +| 加速 | R2、×、または右スティック上 | +| ブレーキ | L2、□、または右スティック下 | +| ステアリング | 左スティック左右 | +| シフトアップ | カーソル上 | +| シフトダウン | カーソル下 | +| ドライブシフト | カーソル左 | +| リバースシフト | カーソル右 | +| 左ウインカー | L1 | +| 右ウインカー | R1 | +| ウインカー解除 | SHARE | +| ゲートモード | OPTIONS | +| 緊急停止 | PS | +| 緊急停止解除 | PS | +| Autowareエンゲージ | ○ | +| Autowareディスエンゲージ | ○ | +| Vehicleエンゲージ | △ | +| Vehicleディスエンゲージ | △ | + +## XBOX ジョイスティック キー マップ + +| 操作 | ボタン | +|---|---| +| 加速 | RT | +| ブレーキ | LT | +| ステアリング | 左スティック左右 | +| シフトアップ | カーソル上 | +| シフトダウン | カーソル下 | +| ドライブシフト | カーソル左 | +| リバースシフト | カーソル右 | +| 左ウィンカー | LB | +| 右ウィンカー | RB | +| ウィンカー解除 | A | +| ゲートモード | B | +| 緊急停止 | View | +| 緊急停止解除 | Menu | +| Autoware エンゲージ | X | +| Autoware ディスエンゲージ | Y | +| 車両エンゲージ | 左スティックボタン | +| 車両ディスエンゲージ | 右スティックボタン | + diff --git a/control/autoware_lane_departure_checker/README.md b/control/autoware_lane_departure_checker/README.md index e40d564e3082e..f3ef10765bda2 100644 --- a/control/autoware_lane_departure_checker/README.md +++ b/control/autoware_lane_departure_checker/README.md @@ -1,18 +1,18 @@ ## 車線逸脱チェッカー -**車線逸脱チェッカー**は、車両が軌跡に従っているかどうかを確認します。軌跡に従っていない場合、`diagnostic_updater`を介してステータスを報告します。 +**車線逸脱チェッカー** は、車両が経路に従っているかどうかを確認します。経路に従っていない場合は、`diagnostic_updater` でステータスを報告します。 -## 機能 +## 特徴 -このパッケージには、次の機能が含まれています。 +このパッケージには、以下の機能が含まれます。 -- **車線逸脱**: 制御モジュールからの出力(予測軌跡)に基づいて、自車位置が車線境界から逸脱するかどうかを確認します。 -- **軌跡逸脱**: 自車位置が軌跡から逸脱していないかどうかを確認します。横方向、縦方向、偏揺角方向の逸脱を確認します。 -- **路肩逸脱**: 制御の出力から生成された自車のフットプリントが路肩を越えて伸びているかどうかを確認します。 +- **車線逸脱:** 制御モジュールからの出力(予測経路)に基づいて、自車位置が車線境界から逸脱する可能性があるかどうかを確認します。 +- **経路逸脱:** 自車位置が経路から逸脱していないかどうかを確認します。横方向、縦方向、ヨー方向の逸脱を確認します。 +- **路側逸脱:** 制御の出力から生成された自車の足跡が、路側境界を超えるかどうかを確認します。 -## 内部機能 / アルゴリズム +## 内部動作 / アルゴリズム -### 共分散によってフットプリントを拡張する方法 +### 共分散による足跡の拡張方法 1. 車両座標系における誤差楕円(共分散)の標準偏差を計算します。 @@ -40,9 +40,9 @@ \end{align} $$ - 2. `post resampling`に展開する縦方向の長さは、$Cov_{vehicle}(0,0)$における$x_{vehicle}$の周辺分布に対応します。同様に、横方向の長さは$Cov_{vehicle}(1,1)$における$x_{vehicle}$の周辺分布に対応します。Wikipediaの参照 [こちら](https://en.wikipedia.org/wiki/Multivariate_normal_distribution#Marginal_distributions)。 + 2. 拡張する縦方向の長さは、`Cov_{vehicle}(0,0)` で表される $x_{vehicle}$ の周辺分布に対応します。同様に、横方向の長さは `Cov_{vehicle}(1,1)` で表されます。Wikipedia の参考 [こちら](https://en.wikipedia.org/wiki/Multivariate_normal_distribution#Marginal_distributions)。 -2. `footprint_margin_scale`を乗じた標準偏差に基づいてフットプリントを拡張します。 +2. 標準偏差に `footprint_margin_scale` を乗算した値に基づいて足跡を拡張します。 ## インターフェイス @@ -56,7 +56,7 @@ ### 出力 -- [`diagnostic_updater`] lane_departure : 自車位置が車線から逸脱した場合に診断レベルを更新します。 +- [`diagnostic_updater`] lane_departure : 自車位置が車線から逸脱したときに診断レベルを更新します。 ## パラメータ @@ -64,55 +64,181 @@ #### 一般パラメータ -| 名称 | 型 | 説明 | デフォルト値 | -| :------------------------- | :----- | :------------------------------------------------------------------------------------------------------- | :----------- | -| will_out_of_lane_checker | bool | 自車フットプリントが車線から逸脱するかどうかのチェッカーを有効にする | True | -| out_of_lane_checker | bool | 自車フットプリントが車線外にあるかどうかをチェッカーを有効にする | True | -| boundary_departure_checker | bool | 自車フットプリントがboundary_types_to_detectで指定された境界から逸脱するかどうかのチェッカーを有効にする | False | -| update_rate | double | パブリッシュする頻度 [Hz] | 10.0 | -| visualize_lanelet | bool | レーンレットを視覚化するフラグ | False | - -#### 車線逸脱のためのパラメータ - -| 名前 | タイプ | 説明 | デフォルト値 | -| --------------------------- | ------ | ------------------------------------------ | ------------ | -| `include_right_lanes` | ブール | 境界に右のレーンレットを含めるかどうか | `False` | -| `include_left_lanes` | ブール | 境界に左のレーンレットを含めるかどうか | `False` | -| `include_opposite_lanes` | ブール | 境界に対向のレーンレットを含めるかどうか | `False` | -| `include_conflicting_lanes` | ブール | 境界に交差するレーンレットを含めるかどうか | `False` | - -#### 路側逸脱 パラメータ - -- `# (m)`: 路側逸脱開始のしきい値 `'post resampling'` 距離(メートル) -- `# (rad)`: 路側逸脱開始のしきい値 `'post resampling'` 曲率(ラジアン) -- `# (m)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の速度(メートル) -- `# (s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の経過時間(秒) -- `#`: `'post resampling'` 路側逸脱開始時の自車位置における heading 偏差(ラジアン) -- `# (m)`: `'post resampling'` 路側逸脱開始時の自車位置における lateral offset(メートル) -- `#`: `'post resampling'` 路側逸脱開始時の vehicle `'post resampling'` の速度(メートル/秒) -- `# (m^2/s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の acceleration 逸脱量(平方メートル/秒) -- `# (m^2/s)`: `'post resampling'` 路側逸脱中の vehicle `'post resampling'` の velocity 逸脱量(平方メートル/秒) -- `# (m^2/s)`: 路側逸脱中の vehicle `'post resampling'` の heading 逸脱量(平方メートル/秒) -- `# (m)`: `'post resampling'` 路側逸脱終了時の vehicle `'post resampling'` の速度(メートル/秒) -- `#`: `'post resampling'` 路側逸脱終了時の自車位置における heading 偏差 -- `# (s)`: `'post resampling'` 路側逸脱終了時の vehicle `'post resampling'` の経過時間 -- `# (cm)`: 静止時の vehicle `'post resampling'` の steering wheel angle(センチメートル) -- `# (m)`: 静止時の vehicle `'post resampling'` の lateral offset(メートル) -- `#`: 静止時の vehicle `'post resampling'` の速度(メートル/秒) - -| 名称 | タイプ | 説明 | デフォルト値 | -| :----------------------- | :------------------------- | :---------------------------------------------------- | :------------ | -| boundary_types_to_detect | std::vector\ | boundary_departure_checkerで検出するline_stringタイプ | [road_border] | - -### 主要パラメータ - -| 名称 | 種類 | 説明 | デフォルト値 | -| :------------------------- | :--- | :--------------------------------------------------------------------- | :----------- | -| footprint_margin_scale | 数値 | footprintマージンを拡張する係数。標準偏差に1を乗算 | 1.0 | -| footprint_extra_margin | 数値 | footprintマージンを拡張する係数。 レーン逸脱のチェック時 | 0.0 | -| resample_interval | 数値 | trajectoryを再サンプリングする際のポイント間の最小ユークリッド距離 (m) | 0.3 | -| max_deceleration | 数値 | 制動距離を計算する際の最大減速度 | 2.8 | -| delay_time | 数値 | 制動距離を計算する際のブレーキ作動までの遅延時間 (秒) | 1.3 | -| max_lateral_deviation | 数値 | 車両座標系における最大横方向逸脱距離 (m) | 2.0 | -| max_longitudinal_deviation | 数値 | 車両座標系における最大縦方向逸脱距離 (m) | 2.0 | -| max_yaw_deviation_deg | 数値 | trajectoryからの自己車両の最大ヨー逸脱角度 (度) | 60.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------- | :----- | :---------------------------------------------------------------------------------------------------- | :------------ | +| will_out_of_lane_checker | ブール | 自車フットプリントがレーンから逸脱するかどうかを確認するチェッカーを有効化 | True | +| out_of_lane_checker | ブール | 自車フットプリントがレーンから逸脱しているかどうかを確認するチェッカーを有効化 | True | +| boundary_departure_checker | ブール | boundary_types_to_detectで指定された境界から自車フットプリントが逸脱するかどうかを確認するチェッカーを有効化 | False | +| update_rate | double | 公開する周波数 [Hz] | 10.0 | +| visualize_lanelet | ブール | レーンレットを視覚化するためのフラグ | False | + +#### 車線逸脱の各種パラメータ + +#### Lane Departure Adaptive Integral Controller + +このパラメータは、車線逸脱整合積分コントローラのゲインと積分時間定数を指定します。 + +```markdown +lbc_steer_ki: 0.02 +lbc_steer_kp: 0.02 +lbc_steer_tau: 0.2 +``` + +#### Planning + +これらのパラメータは、レーンキープアシストのPlanning(Plan View)モジュールにおける車線逸脱検出とアシストに関連します。 + +```markdown +lka_look_ahead_distance: 20.0 +lka_safety_distance: 3.0 +lka_deviation_distance_thres: 1.0 +``` + +#### LIDAR + +これらのパラメータは、LIDARセンサーからのデータ処理に関するものです。 + +```markdown +max_lidar_collisions_per_point: 10 +max_lidar_collisions_per_cluster: 20 +max_lidar_collisions_dist: 0.5 +``` + +#### Cone Detection + +これらのパラメータは、コーン検出の精度と速度に関連します。 + +```markdown +cone_height_threshold: 0.1 +cone_radius_threshold: 0.3 +cone_angle_tolerance: 10.0 +cone_detection_range: 30 +cone_detect_point_num_threshold: 10 +cone_detect_point_rate_threshold: 0.5 +``` + +#### Lane Detection + +これらのパラメータは、レーザーセンサーからのデータに基づいてレーンの検出と追跡の精度と速度に関連します。 + +```markdown +num_lane_candidate_lines: 10 +num_lane_candidates_for_lane_detection: 8 +max_num_detected_lane_lines: 3 +lane_candidate_min_detection_dist: 3.0 +lane_candidate_max_detection_angle: 2.0 +lane_detect_range: 20.0 +lane_length_threshold: 3.0 +lane_mark_length_threshold_internal: 0.8 +lane_mark_length_threshold_external: 2.0 +lane_mark_length_threshold_external_wide: 3.0 +lateral_offset_thres_internal: 0.2 +``` + +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------------ | :--- | :------------------------------------------------ | :------------ | +| include_right_lanes | bool | 境界に右側のレーンレットを含めるフラグ | False | +| include_left_lanes | bool | 境界に左側のレーンレットを含めるフラグ | False | +| include_opposite_lanes | bool | 境界に反対側のレーンレットを含めるフラグ | False | +| include_conflicting_lanes | bool | 境界に競合するレーンレットを含めるフラグ | False | + +#### 車線逸脱防止の設定 + +## Road Obstacle Filter + +### `threshold_obstacle_corner_distance` + +障害物と車両のコーナーの間隔の閾値。 +この値を超えると、障害物として認識されます。 + +### `threshold_obstacle_corner_angle` + +障害物と車両のコーナーの角度の閾値。 +この値を超えると、障害物が車両の前方にあります。 + +### `threshold_obstacle_length` + +障害物の長さの閾値。 +この値を超えると、障害物が長い障害物と認識されます。 + +## Prediction Module + +### `max_prediction_distance` + +予測距離の最大値。 + +### `duration_to_predict` + +予測する持続時間。 + +## Planning Component + +### `min_radius` + +最小曲率半径。 + +### `max_acceleration` + +加速度の最大値。 + +### `max_deceleration` + +減速度の最大値。 + +### `max_lateral_jerk` + +横加速度の最大値。 + +## Optional Filters + +### `speed_inv_time` + +速度に反比例する時間。 + +### `speed_time` + +速度に比例する時間。 + +### `enable_post_resampling` + +再サンプリング後の有効化。 + +### `enable_resample` + +再サンプリングの有効化。 + +### `smoothing_gain` + +平滑化のゲイン。 + +### `gradient_filter_length` + +勾配フィルタの長さ。 + +## Autoware Specific Parameters + +### `enable_yaw_rate_constraint` + +ヨーレート制約の有効化。 + +### `max_yaw_rate` + +最大ヨーレート。 + +| 名前 | タイプ | 説明 | デフォルト値 | +| :----------------------- | :------------------------- | :---------------------------------------------------------- | :------------ | +| boundary_types_to_detect | std::vector\ |boundary_departure_checker で検出する line_string タイプ | [road_border] | + +### コアパラメータ + +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------------- | :----- | :---------------------------------------------------------------------------------------------------- | :------------ | +| footprint_margin_scale | double | フットプリントの余白を拡張する係数。標準偏差に 1 を乗算。 | 1.0 | +| footprint_extra_margin | double | 車線逸脱をチェックするときのフットプリントの余白を拡張する係数。 | 0.0 | +| resample_interval | double | 軌跡をリサンプルするときの点間の最小ユークリッド距離 [m]。 | 0.3 | +| max_deceleration | double | ブレーキ距離を計算するときの最大減速度。 | 2.8 | +| delay_time | double | ブレーキを動作させるのにかかる遅延時間 [秒]。 | 1.3 | +| max_lateral_deviation | double | 車両座標系の最大横偏差 [m]。 | 2.0 | +| max_longitudinal_deviation | double | 車両座標系の最大縦偏差 [m]。 | 2.0 | +| max_yaw_deviation_deg | double | 軌跡からの自身のヨー偏差の最大値 [度]。 | 60.0 | + diff --git a/control/autoware_mpc_lateral_controller/README.md b/control/autoware_mpc_lateral_controller/README.md index 46b27afc40159..8a372b70a2e27 100644 --- a/control/autoware_mpc_lateral_controller/README.md +++ b/control/autoware_mpc_lateral_controller/README.md @@ -1,422 +1,296 @@ -# MPC横方向コントローラ + - What inputs does it use? + - What outputs does it produce? --> -これは`autoware_trajectory_follower_node`パッケージ内の横方向コントローラのノードに関する設計文書です。 +### Inputs -## 目的 / ユースケース +- `/planning/decision/trajectory` : The trajectory to be followed. +- `/vehicle/odometry` : The current pose of the vehicle. +- `/config/mpc_lateral_controller` : The configuration of mpc lateral controller node. - - +### Outputs -このノードは、パスに従っているときに横方向の制御コマンド(ステアリング角とステアリング速度)を作成するために使用されます。 +- `/lateral_controller/lateral/output` : The computed lateral control command. +- `/lateral_controller/lateral/diagnostics` : The diagnostics of lateral controller. -## 設計 +### API - - +The node also provides a service to change the current mode of the lateral controller: -このノードは、正確なパストラック用に線形モデル予測制御(MPC)の実装を使用しています。 MPCは車両モデルを使用して、制御コマンドから得られる軌道をシミュレーションします。制御コマンドの最適化は2次計画問題(QP)として定式化されます。 +- Service: `/lateral_controller/lateral/set_mode` +- Request: `std_srvs/SetBool` +- Response: `std_srvs/SetBool` -さまざまな車両モデルが実装されています。 +## Future plans -- kinematics:ステアリング1次の遅れを持つ自転車運動学モデル。 -- kinematics_no_delay:ステアリング遅れのない自転車運動学モデル。 -- dynamics:スリップ角を考慮する自転車動力学モデル。 - 運動学モデルがデフォルトで使用されています。詳細については、参照 [1]を参照してください。 + + -最適化には2次計画問題(QP)ソルバーが使用され、現在2つのオプションが実装されています。 +- [Future Plan] : Add a state estimatior. - +## References -- unconstraint_fast:eigenで拘束のないQPを解くために最小二乗法を使用します。 -- [osqp](https://osqp.org/):次の[ADMM](https://web.stanford.edu/~boyd/papers/admm_distr_stats.html)アルゴリズムを実行します(詳細については、[OSQPの引用](https: //web.stanford.edu/~boyd/papers/admm_distr_stats.html)セクションを参照してください)。 - -### フィルタリング - -適切なノイズ低減にはフィルタリングが必要です。 -バターワースフィルタを使用して、MPCの入力として使用されるヨーエラーと横方向エラーを処理し、出力ステアリング角を調整します。 -ノイズ低減性能が十分であれば、他のフィルタリング方法を検討できます。 -たとえば、移動平均フィルタは適しておらず、フィルタリングなしよりも悪い結果を生じる可能性があります。 - -## 想定 / 既知の制限 - - - -リファレンストラジェクトの最初の点が現在の自車位置にあるか、その前方に位置している場合、追跡は正確ではありません。 - -## 入力 / 出力 / API - -- 入力: - - - trajectory :リファレンストラジェクト(`autoware_api_msgs/Trajectory`) - - vehicle_state :現在の車両のステータス(`autoware_auto_msgs/VehicleState`) - - current_pose :自車位置(`geometry_msgs/PoseStamped`) - - prev_pose :前の自車位置(`geometry_msgs/PoseStamped`) - - planned_trajectory :計画された軌道(`autoware_msgs/PlannedTrajectory`) - -- 出力: - - - vehicle_control_cmd :車両制御コマンド(`autoware_auto_msgs/VehicleControlCommand`) - -- API: - - 車両制御コマンドを取得するためのAPIはありません。 +[1] Leone, G., & Coscia, M. (2018, May). Adaptive MPC for path tracking of autonomous vehicles with closed-loop system identification. In 2018 IEEE Intelligent Vehicles Symposium (IV) (pp. 1108-1113). IEEE. +[2] Xu, Y., Li, N., Scudieri, F., & Savaresi, S. M. (2018, June). Robust model predictive control for path tracking with dynamic references and joint state-input constraints. In 2018 Annual American Control Conference (ACC) (pp. 1355-1360). IEEE. ### 入力 -次のものを [controller_node](../autoware_trajectory_follower_node/README.md) から設定します +[controller_node](../autoware_trajectory_follower_node/README.md) から以下を設定します。 -- `autoware_planning_msgs/Trajectory` : 追従する基準軌跡 +- `autoware_planning_msgs/Trajectory` : 追跡する参照軌跡 - `nav_msgs/Odometry`: 現在のオドメトリ -- `autoware_vehicle_msgs/SteeringReport`: 現在のステア +- `autoware_vehicle_msgs/SteeringReport`: 現在のステアリング ### 出力 -次の内容を含む LateralOutput を controller node に返します +コントローラノードに以下を含む LateralOutput を返します。 - `autoware_control_msgs/Lateral` - LateralSyncData - - ステア角収束 - -### MPC クラス - -`MPC` クラス (`mpc.hpp` で定義) は、MPC アルゴリズムとのインターフェイスを提供します。 -車両モデル、QP ソルバー、および追従する基準軌跡が設定されると (`setVehicleModel()`, `setQPSolver()`, `setReferenceTrajectory()`) -、現在のステア、速度、位相を `calculateMPC()` 関数に提供することで、横方向制御コマンドを計算できます。 - -### パラメーターの説明 - -`param/lateral_controller_defaults.param.yaml` で定義された既定のパラメーターは、40km/h 未満の走行に対応するように自律走行用 Lexus RX 450h に調整されています。 - -#### システム - -| 名前 | タイプ | 説明 | デフォルト値 | -| :------------------------ | :------ | :----------------------------------------------------------------- | :----------- | -| traj_resample_dist | double | 再サンプリングにおけるウェイポイント間の距離 [m] | 0.1 | -| use_steer_prediction | boolean | ステアリング予測を使用するフラグ(ステアリング測定値は使用しない) | false | -| admissible_position_error | double | 追従位置誤差がこの値 [m] より大きい場合に車両を停止する | 5.0 | -| admissible_yaw_error_rad | double | 追従ヨー角誤差がこの値 [rad] より大きい場合に車両を停止する | 1.57 | -| use_delayed_initial_state | boolean | 予測軌道の初期状態として `x0_delayed` を使用するフラグ | true | - -#### パススムージング - -このモジュールでは、`post resampling`時に発生する経路の不連続性につながる目標経路の僅かな 'jerk' を排除します。この不連続性は、経路上の他の車両や障害物との衝突を避けるために必要です。 - -トリガーは、自車位置の更新、経路の変更、経路の`post resampling`の更新です。 - -#### レベル0の経路 - -レベル0のレイヤーでは、Smoothed Path Providerによって、パスのスムージングによって生成された経路が提供されます。 - -#### レベル1のPlanning - -レベル1のPlanningコンポーネントは、以下を行います。 - -- スムーズな経路を`post resampling`に使用します。 -- スムーズな経路に基づいて、velocity 逸脱量とacceleration 逸脱量を計算します。 -- Velocity ControllerとAcceleration Controllerに逸脱量を通知します。 + - ステアリング角の収束 -| 名称 | タイプ | 説明 | デフォルト値 | -| :-------------------------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------ | :----------- | -| path_smoothingを有効にする | boolean | パスの平滑化フラグ。リサンプリングノイズを低減するためにパスリサンプリングを使用する場合は、`True`にします。 | `False` | -| path_filter_moving_ave_num | int | path smoothingのために移動平均フィルタのデータポイントの数 | `25` | -| curvature_smoothing_num_traj | int | 軌道の曲率計算に使用される点のインデックス距離:p(i-num)、p(i)、p(i+num)。`num`が大きいほどノイズの少ない値になります。 | `15` | -| curvature_smoothing_num_ref_steer | int | 参照ステアリングコマンドの曲率計算に使用される点のインデックス距離:p(i-num)、p(i)、p(i+num)。`num`が大きいほどノイズの少ない値になります。 | `15` | +次のメッセージを発行します。 -#### 軌道予測 +| 名前 | タイプ | 説明 | +|---|---|---| +| `~/output/predicted_trajectory` | `autoware_planning_msgs::Trajectory` | MPCで計算された予測軌跡。コントローラーがプランニング軌跡から大きく逸脱するなどの緊急時にトラジェクとリーのサイズは空になります。 | -### Planningコンポーネントの目的 +### MPCクラス -Planningコンポーネントは、自車位置と目的地などの高レベルの目標に基づいて、最適な軌道生成を行い、それを経路プランに沿って実施する。 +`MPC`クラス(`mpc.hpp`で定義)はMPCアルゴリズムとのインタフェースを提供します。 +車両モデル、QPソルバー、追従する基準軌跡が(`setVehicleModel()`、`setQPSolver()`、`setReferenceTrajectory()`を使用して)設定されると、現在の操舵、速度、自車位置を関数`calculateMPC()`に提供して、ラテラル制御コマンドを計算できます。 -### 経路プランニング +### パラメータの説明 -#### 経路検索 +`param/lateral_controller_defaults.param.yaml`で定義されたデフォルトのパラメータは、時速40km未満の運転用にAutonomouStuff Lexus RX 450hに合わせて調整されています。 -経路検索は、始点と終点の間の経路を計算するプロセスです。経路検索アルゴリズムには、Dijkstraアルゴリズム、A\*アルゴリズム、Floyd-Warshallアルゴリズムなどがあります。 - -##### コスト関数 - -経路検索アルゴリズムは、ノード間のコストに基づいて経路を生成します。コスト関数は、距離、時間、エネルギー消費など、さまざまなファクターを考慮できます。 - -#### 経路フィッティング - -経路フィッティングは、経路検索結果を滑らかな経路に変換するプロセスです。経路フィッティングアルゴリズムには、三次スプライン、NURBS、ベジェ曲線などがあります。 - -### 軌道生成 - -#### 軌道生成のフェーズ - -軌道生成には、次の3つのフェーズがあります。 - -1. **計画**:経路プランと自車位置に基づいて、軌道を生成します。 -2. **実行**:軌道を追従し、自車を制御します。 -3. **再計画**:必要に応じて軌道プランを更新します。 - -#### 軌道生成アルゴリズム - -軌道生成アルゴリズムには、以下のようなものがあります。 - -- **レファレンストラジャクトリ追従**:レファレンストラジャクトリを生成し、自車をそれに追従させます。 -- **最適制御**:最適化手法を使用して、コスト関数を最小化する軌道生成します。 -- **機械学習**:機械学習モデルを使用して、軌道を予測します。 - -### 経路プランの実行 - -#### 経路プラン追従 - -経路プラン追従は、自車を経路プランに沿って制御するプロセスです。経路プラン追従コントローラーには、以下のようなものがあります。 - -- **制約性モデル予測制御(MPC)**:制約を考慮して自車を制御します。 -- **占有空間パス計画(OCPP)**:障害物を避けながら自車を制御します。 - -#### 軌道追従 - -軌道追従は、自車を軌道に沿って制御するプロセスです。軌道追従コントローラーには、以下のようなものがあります。 - -- **PIDコントローラー**:誤差を最小化するフィードバック制御を行います。 -- **カルマンフィルター**:雑音を推定してより正確な制御を実現します。 - -### 安全性評価 - -#### 運動学的検証 - -運動学的検証は、軌道が物理的に実行可能であることを確認するプロセスです。運動学的検証では、以下の要素を考慮します。 - -- **速度逸脱量** -- **加速度逸脱量** -- **ジャーク逸脱量** - -#### 動力学的検証 - -動力学的検証は、軌道が車両の動力学を考慮して実行可能であることを確認するプロセスです。動力学的検証では、以下の要素を考慮します。 +#### システム -- **タイヤの滑り** -- **車両の安定性** -- **サスペンションの影響** +| 名前 | 型 | 説明 | デフォルト値 | +| :------------------------ | :------ | :------------------------------------------------------------------------------- | :------------ | +| **traj_resample_dist** | double | 再サンプリングのウェイポイント距離 [m] | 0.1 | +| **use_steer_prediction** | boolean | ステアリング予測を使用するフラグ(ステアリング測定値は使用しない) | false | +| **admissible_position_error** | double | 位置誤差がこの値 [m] より大きい場合、車両を停止 | 5.0 | +| **admissible_yaw_error_rad** | double | ヨー角誤差がこの値 [rad] より大きい場合、車両を停止 | 1.57 | +| **use_delayed_initial_state** | boolean | 予測軌道の初期状態としてx0_delayedを使用するフラグ | true | -#### 障害物検出 +#### パススムージング -障害物検出は、軌道上の障害物を検出するプロセスです。障害物検出には、以下の方法があります。 +| 名前 | タイプ | 説明 | デフォルト値 | +| :---------------------------------- | :------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_path_smoothing | boolean | path smoothing flag。path resamplingを使用してresamplingノイズを低減する場合にtrueにする必要があります。 | false | +| path_filter_moving_ave_num | int | path smoothing用の移動平均フィルタのデータポイントの数 | 25 | +| curvature_smoothing_num_traj | int | 軌道のカーブ度の計算に使用されるポイントのインデックス距離:p(i-num)、p(i)、p(i+num)。数値が大きいほど、値のノイズが少なくなります。 | 15 | +| curvature_smoothing_num_ref_steer | int | 基準ステアリングコマンドのカーブ度の計算に使用されるポイントのインデックス距離:p(i-num)、p(i)、p(i+num)。数値が大きいほど、値のノイズが少なくなります。 | 15 | -- **センサーデータ(LiDAR、カメラ、レーダーなど)** -- **地図データ** -- **'post resampling'(前回のサンプルからの差分)**による検出 +#### 軌道延長 -| 名称 | 種類 | 説明 | デフォルト値 | -| :------------------------------------ | :------ | :----------------------------------- | :----------- | -| extend_trajectory_for_end_yaw_control | boolean | end yaw 制御のための軌道の延伸フラグ | true | +| 名称 | タイプ | 説明 | デフォルト値 | +| :------------------------------------ | :------ | :-------------------------------------------------- | :------------ | +| extend_trajectory_for_end_yaw_control | boolean | 最終yaw制御のための軌跡拡張フラグ | true | #### MPC最適化 -| 名前 | タイプ | 説明 | デフォルト値 | -| :-------------------------------------------------- | :----- | :----------------------------------------------------------------------------------------------- | :----------- | -| qp_solver_type | 文字列 | QPソルバーオプション。以下で詳細に説明します。 | "osqp" | -| mpc_prediction_horizon | 整数 | MPCのステップごとの合計予測 | 50 | -| mpc_prediction_dt | float | 1ステップあたりの予測時間[単位:秒] | 0.1 | -| mpc_weight_lat_error | float | 横方向の逸脱量の重み | 1.0 | -| mpc_weight_heading_error | float | ヘディングの逸脱量の重み | 0.0 | -| mpc_weight_heading_error_squared_vel | float | ヘディングの逸脱量 \* 速度の重み | 0.3 | -| mpc_weight_steering_input | float | ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) | 1.0 | -| mpc_weight_steering_input_squared_vel | float | ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) \* 速度 | 0.25 | -| mpc_weight_lat_jerk | float | 横方向のジャーク(steer(i) - steer(i-1)) \* 速度 の重み | 0.1 | -| mpc_weight_steer_rate | float | ステアリング速度の重み[単位:rad/s] | 0.0 | -| mpc_weight_steer_acc | float | ステアリング速度の微分の重み[rad/ss] | 0.000001 | -| mpc_low_curvature_weight_lat_error | float | [低曲率軌道で使用] 横方向の逸脱量の重み | 0.1 | -| mpc_low_curvature_weight_heading_error | float | [低曲率軌道で使用] ヘディングの逸脱量の重み | 0.0 | -| mpc_low_curvature_weight_heading_error_squared_vel | float | [低曲率軌道で使用] ヘディングの逸脱量 \* 速度の重み | 0.3 | -| mpc_low_curvature_weight_steering_input | float | [低曲率軌道で使用] ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) | 1.0 | -| mpc_low_curvature_weight_steering_input_squared_vel | float | [低曲率軌道で使用] ステアリングの逸脱量の重み(ステアリングコマンド - 参照ステアリング) \* 速度 | 0.25 | -| mpc_low_curvature_weight_lat_jerk | float | [低曲率軌道で使用] 横方向のジャーク(steer(i) - steer(i-1)) \* 速度 の重み | 0.0 | -| mpc_low_curvature_weight_steer_rate | float | [低曲率軌道で使用] ステアリング速度の重み[単位:rad/s] | 0.0 | -| mpc_low_curvature_weight_steer_acc | float | [低曲率軌道で使用] ステアリング速度の微分の重み[rad/ss] | 0.000001 | -| mpc_low_curvature_thresh_curvature | float | "low_curvature"パラメータを使用するための曲率のしきい値 | 0.0 | -| mpc_weight_terminal_lat_error | float | mpcの安定性を向上させるための行列Qの最終横方向の逸脱量の重み | 1.0 | -| mpc_weight_terminal_heading_error | float | mpcの安定性を向上させるための行列Qの最終ヘディングの逸脱量の重み | 0.1 | -| mpc_zero_ff_steer_deg | float | フィードフォワード角度がゼロになるしきい値 | 0.5 | -| mpc_acceleration_limit | float | 車両加速度の制限 | 2.0 | -| mpc_velocity_time_constant | float | 速度スムージングに使用される時定数 | 0.3 | -| mpc_min_prediction_length | float | 最小予測の長さ | 5.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------------------------------- | :----- | :------------------------------------------------------------------------------------------------------------------ | :------------ | +| qp_solver_type | 文字列 | QPソルバーオプション(以下で詳細に説明) | "osqp" | +| mpc_prediction_horizon | 整数 | MPCの合計予測ステップ | 50 | +| mpc_prediction_dt | double | 1ステップの予測期間 [s] | 0.1 | +| mpc_weight_lat_error | double | 横方向の誤差に対する重み | 1.0 | +| mpc_weight_heading_error | double | 進行方向の誤差に対する重み | 0.0 | +| mpc_weight_heading_error_squared_vel | double | 進行方向の誤差 \* 速度に対する重み | 0.3 | +| mpc_weight_steering_input | double | ステアリングの誤差(ステアリングコマンド - 基準ステアリング)に対する重み | 1.0 | +| mpc_weight_steering_input_squared_vel | double | ステアリングの誤差(ステアリングコマンド - 基準ステアリング)\* 速度に対する重み | 0.25 | +| mpc_weight_lat_jerk | double | 横方向のジャーク(steer(i) - steer(i-1)) \* 速度に対する重み | 0.1 | +| mpc_weight_steer_rate | double | ステアリングレート [rad/s] に対する重み | 0.0 | +| mpc_weight_steer_acc | double | ステアリングレートの微分の微分 [rad/ss] に対する重み | 0.000001 | +| mpc_low_curvature_weight_lat_error | double | [曲率の小さい軌道で使用する] 横方向の誤差に対する重み | 0.1 | +| mpc_low_curvature_weight_heading_error | double | [曲率の小さい軌道で使用する] 進行方向の誤差に対する重み | 0.0 | +| mpc_low_curvature_weight_heading_error_squared_vel | double | [曲率の小さい軌道で使用する] 進行方向の誤差 \* 速度に対する重み | 0.3 | +| mpc_low_curvature_weight_steering_input | double | [曲率の小さい軌道で使用する] ステアリングの誤差(ステアリングコマンド - 基準ステアリング)に対する重み | 1.0 | +| mpc_low_curvature_weight_steering_input_squared_vel | double | [曲率の小さい軌道で使用する] ステアリングの誤差(ステアリングコマンド - 基準ステアリング)\* 速度に対する重み | 0.25 | +| mpc_low_curvature_weight_lat_jerk | double | [曲率の小さい軌道で使用する] 横方向のジャーク(steer(i) - steer(i-1)) \* 速度に対する重み | 0.0 | +| mpc_low_curvature_weight_steer_rate | double | [曲率の小さい軌道で使用する] ステアリングレート [rad/s] に対する重み | 0.0 | +| mpc_low_curvature_weight_steer_acc | double | [曲率の小さい軌道で使用する] ステアリングレートの微分の微分 [rad/ss] に対する重み | 0.000001 | +| mpc_low_curvature_thresh_curvature | double | "low_curvature"パラメータを使用する曲率の閾値 | 0.0 | +| mpc_weight_terminal_lat_error | double | マトリックス`Q`内のターミナル横方向誤差の重み(MPCの安定性を向上させるため) | 1.0 | +| mpc_weight_terminal_heading_error | double | マトリックス`Q`内のターミナル進行方向誤差の重み(MPCの安定性を向上させるため) | 0.1 | +| mpc_zero_ff_steer_deg | double | フィードフォワードアングルがゼロになる閾値 | 0.5 | +| mpc_acceleration_limit | double | 車両の加速度に対する制限 | 2.0 | +| mpc_velocity_time_constant | double | 速度スムージングに使用される時定数 | 0.3 | +| mpc_min_prediction_length | double | 最小予測長 | 5.0 | #### 車両モデル -| 名称 | 種別 | 説明 | デフォルト値 | -| ------------------------------------ | ---------- | ---------------------------------------------------------------------------------------- | -------------------- | -| vehicle_model_type | 文字列 | mpc予測のための車両モデルの種別 | "kinematics" | -| input_delay | 倍精度 | 遅延補正のためのステアリング入力遅延時間 | 0.24 | -| vehicle_model_steer_tau | 倍精度 | ステアリングの動特性時間定数 (1d近似) [秒] | 0.3 | -| steer_rate_lim_dps_list_by_curvature | 倍精度配列 | 曲率に応じて制限されるステアリング角速度の制限値のリスト [deg/s] | [40.0, 50.0, 60.0] | -| curvature_list_for_steer_rate_lim | 倍精度配列 | アセンディング順の曲率のリストにより、ステアリング角速度の制限値の補間が決定される [/m] | [0.001, 0.002, 0.01] | -| steer_rate_lim_dps_list_by_velocity | 倍精度配列 | 速度に応じて制限されるステアリング角速度の制限値のリスト [deg/s] | [60.0, 50.0, 40.0] | -| velocity_list_for_steer_rate_lim | 倍精度配列 | アセンディング順の速度のリストにより、ステアリング角速度の制限値の補間が決定される [m/s] | [10.0, 15.0, 20.0] | -| acceleration_limit | 倍精度 | 軌道速度の変更のための加速度の制限 [m/ss] | 2.0 | -| velocity_time_constant | 倍精度 | 軌道速度の変更のための速度の動特性時間定数 [s] | 0.3 | - -#### ノイズリダクションのローパスフィルタ - -| 名前 | タイプ | 説明 | デフォルト値 | -| :------------------------ | :----- | :---------------------------------------------------------------------- | :----------- | -| steering_lpf_cutoff_hz | double | ステアリング出力コマンドに対するローパスフィルタのカットオフ周波数 [hz] | 3.0 | -| error_deriv_lpf_cutoff_hz | double | エラー微分にローパスフィルタを適用する際のカットオフ周波数 [Hz] | 5.0 | - -#### 停止状態 - -| 名前 | タイプ | 説明 | デフォルト値 | -| :------------------------------------------- | :------ | :------------------------------------------------------------------- | :----------: | -| stop_state_entry_ego_speed \*1 | double | 停止状態への移行条件に使用される自車速度のしきい値 | 0.001 | -| stop_state_entry_target_speed \*1 | double | 停止状態への移行条件に使用される目標速度のしきい値 | 0.001 | -| converged_steer_rad | double | 操舵の収束に使用されるしきい値 | 0.1 | -| keep_steer_control_until_converged | boolean | 操舵が収束するまで操舵制御を維持する | true | -| new_traj_duration_time | double | 新しい経路と見なされる時間のしきい値 | 1.0 | -| new_traj_end_dist | double | 新しい経路と見なされる軌道終端間の距離のしきい値 | 0.3 | -| mpc_converged_threshold_rps | double | 最適化の出力が収束したと判断するためのしきい値、停止状態で使用される | 0.01 | - -(\*1) 不要なステアリング操作を防止するため、ステアリングコマンドは停止状態では前の値に固定されます。 - -#### Steer Offset - -`steering_offset` 名前空間で定義します。このロジックは、最小設計パラメータで可能な限りシンプルに設計されています。 - -| 名前 | 種類 | 説明 | デフォルト値 | -| :---------------------------------- | :------ | :--------------------------------------------------------------------------- | :----------- | -| enable_auto_steering_offset_removal | boolean | ステアリングオフセットを推定して補正を適用する | true | -| update_vel_threshold | double | 速度がこの値より小さい場合、データはオフセット推定に使用されない | 5.56 | -| update_steer_threshold | double | ステアリング角度がこの値より大きい場合、データはオフセット推定に使用されない | 0.035 | -| average_num | int | この数字の平均がステアリングオフセットとして使用される | 1000 | -| steering_offset_limit | double | オフセット補正に適用する角度制限 | 0.02 | - -##### 力学モデル(WIP) - -| 名称 | 種類 | 説明 | デフォルト値 | -| :-------------- | :----- | :-------------------------------------------------------------------- | :----------- | -| `cg_to_front_m` | double | ベースリンクからフロントアクスルまでの距離              | 1.228 | -| `cg_to_rear_m` | double | ベースリンクからリアアクスルまでの距離               | 1.5618 | -| `mass_fl` | double | フロント左タイヤに加わる質量                      | 600 | -| `mass_fr` | double | フロント右タイヤに加わる質量                      | 600 | -| `mass_rl` | double | リア左タイヤに加わる質量                      | 600 | -| `mass_rr` | double | リア右タイヤに加わる質量                      | 600 | -| `cf` | double | フロントコーナリングパワー                      | 155494.663 | -| `cr` | double | リアコーナリングパワー                      | 155494.663 | +| 名称 | タイプ | 説明 | デフォルト値 | +| :------------------------------------ | :------- | :--------------------------------------------------------------------------------- | :------------------- | +| vehicle_model_type | 文字列 | MPC 予測用の車両モデルタイプ | "kinematics" | +| input_delay | double | 遅延補償のためのステアリング入力遅延時間 | 0.24 | +| vehicle_model_steer_tau | double | ステアリングダイナミクス時定数 (1 次元近似) [s] | 0.3 | +| steer_rate_lim_dps_list_by_curvature | [double] | 曲率依存のステアリング角度レート制限リスト [deg/s] | [40.0, 50.0, 60.0] | +| curvature_list_for_steer_rate_lim | [double] | アーリーカーブ方向補間のための曲率リスト (昇順) [/m] | [0.001, 0.002, 0.01] | +| steer_rate_lim_dps_list_by_velocity | [double] | 速度依存のステアリング角度レート制限リスト [deg/s] | [60.0, 50.0, 40.0] | +| velocity_list_for_steer_rate_lim | [double] | アーリーカーブ方向補間のための速度リスト (昇順) [m/s] | [10.0, 15.0, 20.0] | +| acceleration_limit | double | 軌道速度変更のための加速度制限 [m/ss] | 2.0 | +| velocity_time_constant | double | 軌道速度変更のための速度ダイナミクス時定数 [s] | 0.3 | + +#### ノイズ低減用のローパスフィルタ + +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------------------ | :----- | :------------------------------------------------------------------ | :------------ | +| steering_lpf_cutoff_hz | double | ステアリング出力コマンドのローパスフィルタのカットオフ周波数 [Hz] | 3.0 | +| error_deriv_lpf_cutoff_hz | double | 誤差微分のローパスフィルタのカットオフ周波数 [Hz] | 5.0 | + +#### ストップ状態 + +| 名前 | 種類 | 説明 | デフォルト値 | +| :-------------------------------------------- | :------ | :------------------------------------------------------------------------------------------------- | :------------ | +| stop_state_entry_ego_speed \*1 | 実数 | 停止状態のしきい値として使用される自車速度 | 0.001 | +| stop_state_entry_target_speed \*1 | 実数 | 停止状態のしきい値として使用される目標速度 | 0.001 | +| converged_steer_rad | 実数 | ステアリング収束のしきい値 | 0.1 | +| keep_steer_control_until_converged | ブール | ステアリングが収束するまでステアリング制御を維持する | true | +| new_traj_duration_time | 実数 | 新しい経路とみなされる時間に関するしきい値 | 1.0 | +| new_traj_end_dist | 実数 | 新しい経路とみなされる、経路の終点間の距離に関するしきい値 | 0.3 | +| mpc_converged_threshold_rps | 実数 | 最適化の出力の収束を確保するためのしきい値 (停止状態で使用) | 0.01 | + +(\*1) 不必要な操舵動作を防ぐために、停止状態では前回の値に操舵コマンドが固定されます。 + +#### ステアリングオフセット + +`steering_offset` ネームスペースで定義されています。このロジックはできるだけシンプルに設計されており、設計パラメーターは最小限に抑えられています。 + +| 項目 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------------- | :------ | :-------------------------------------------------------------------------------------------------- | :------------ | +| enable_auto_steering_offset_removal | boolean | ステアリングのオフセットを推定して補正を適用する | true | +| update_vel_threshold | double | この値より速度が低い場合、オフセット推定にはデータを使用しない | 5.56 | +| update_steer_threshold | double | この値よりステアリング角度が大きい場合、オフセット推定にはデータを使用しない。 | 0.035 | +| average_num | int | この数のデータの平均が、ステアリングオフセットとして使用される。 | 1000 | +| steering_offset_limit | double | オフセット補正に適用する角度の制限。 | 0.02 | + +##### ダイナミクスモデル(WIP) + +| 名前 | 型 | 説明 | デフォルト値 | +| :------------ | :----- | :---------------------------------- | :-------------- | +| cg_to_front_m | double | baselinkからフロントアクスルまでの距離 [m] | 1.228 | +| cg_to_rear_m | double | baselinkからリアアクスルまでの距離 [m] | 1.5618 | +| mass_fl | double | フロント左タイヤにかかる質量 [kg] | 600 | +| mass_fr | double | フロント右タイヤにかかる質量 [kg] | 600 | +| mass_rl | double | リア左タイヤにかかる質量 [kg] | 600 | +| mass_rr | double | リア右タイヤにかかる質量 [kg] | 600 | +| cf | double | フロントコーナリングパワー [N/rad] | 155494.663 | +| cr | double | リアコーナリングパワー [N/rad] | 155494.663 | #### デバッグ -| 名前 | 種類 | 説明 | デフォルト値 | -| :------------------------- | :----- | :--------------------------------------------------------- | :----------- | -| publish_debug_trajectories | ブール | デバッグ目的で予測軌跡と再サンプリングされた基準軌跡を公開 | true | +| 名称 | タイプ | 説明 | デフォルト値 | +| :------------------------- | :------ | :------------------------------------------------------------------------------- | :------------ | +| publish_debug_trajectories | ブール | 予測した経路と再サンプリングされた参照経路をデバッグ用に公開 | true | ### MPCパラメータのチューニング方法 -#### 運動特性情報の設定 +#### 運動情報の設定 -最初に、車両の運動特性に適したパラメータを設定することが重要です。これらには、前輪と後輪の間の距離を表す`wheelbase`や、タイヤの最大操舵角を示す`max_steering_angle`などのパラメータが含まれます。これらのパラメータは`vehicle_info.param.yaml`に設定する必要があります。 +まず、ホイールベース(前輪と後輪の間の距離を表す`wheelbase`)や最大タイヤ操舵角(`max_steering_angle`)などの適切な車輌運動学パラメータを設定することが重要です。これらのパラメータは`vehicle_info.param.yaml`に設定する必要があります。 -#### 動力特性情報の設定 +#### 動力学情報のの設定 -次に、ダイナミクスモデルに適したパラメータを設定する必要があります。これらには、ステアリングダイナミクスに対する時定数`steering_tau`と時間遅れ`steering_delay`、速度ダイナミクスに対する最大加速度`mpc_acceleration_limit`と時定数`mpc_velocity_time_constant`などが含まれます。 +次に、動力学モデルの適切なパラメータを設定する必要があります。これらには、操舵動力学のタイムコンスタント`steering_tau`とタイムディレイ`steering_delay`、および速度動力学の最大加速度`mpc_acceleration_limit`とタイムコンスタント`mpc_velocity_time_constant`が含まれます。 #### 入力情報の確認 -入力情報が正確であることを確認することも重要です。後輪の中心の速度[m/s]やタイヤの操舵角[rad]などの情報が必要です。入力情報の誤りによりパフォーマンスが低下するという報告が頻繁にあります。たとえば、予期しないタイヤ半径の差のために車両の速度がオフセットされる場合や、ステアリングギア比またはミッドポイントの偏差によりタイヤ角度を正確に測定できない場合があります。複数のセンサーからの情報を比較し(例:統合された車両速度とGNSS位置、ステアリング角とIMU角速度)、MPCの入力情報が適切であることを確認することをお勧めします。 +入力情報の正確性を確認することも重要です。後輪中心の速度[m/s]やタイヤの操舵角[rad]などの情報が必要です。入力情報の誤りによって性能が低下したという報告が頻繁にあることに注意してください。たとえば、タイヤ半径の想定外の差によって車両速度にオフセットが発生したり、ステアリングギア比または中間点のずれによってタイヤ角を正確に測定できなかったりする場合があります。複数のセンサー(例:統合された車速とGNSS位置情報、ステアリング角とIMU角速度)から情報と照合し、MPCの入力情報が適切であることを確認することをお勧めします。 -#### MPC重みのチューニング +#### MPCウェイトのチューニング -次に、MPCの重みをチューニングします。チューニングの簡単なアプローチとしては、横方向偏差の重み(`weight_lat_error`)を一定に保ち、ステアリングオシレーションと制御精度のトレードオフを観察しながら入力重み(`weight_steering_input`)を変化させることです。 +次に、MPCのウェイトを調整します。チューニングの簡単なアプローチの1つは、横方向偏差(`weight_lat_error`)のウェイトを一定に保ち、ステアリング発動のウェイト(`weight_steering_input`)を変更しながら、ステアリングの振動と制御精度のトレードオフを観察することです。 -ここで、`weight_lat_error`はパス追従における横方向誤差を抑えるのに対し、`weight_steering_input`はステアリング角をパスの曲率によって決まる標準値に調整するために働きます。`weight_lat_error`が大きいと、精度を高めるためにステアリングが大きく動き、オシレーションが発生する可能性があります。逆に、`weight_steering_input`が大きいと、ステアリングは追従誤差に対してあまり反応せず、安定した走行になりますが、追従精度が低下する可能性があります。 +ここで、`weight_lat_error`は経路追従における横方向の誤差を抑制し、`weight_steering_input`は、ステアリング角をパスの曲率によって決定される標準値に調整します。`weight_lat_error`が大きい場合、ステアリングが大きく移動して精度が向上しますが、振動が発生する可能性があります。一方、`weight_steering_input`が大きい場合、ステアリングは追従誤差にあまり反応せず、安定した走行は可能ですが、追従精度が低下する可能性があります。 手順は次のとおりです。 -1. `weight_lat_error` = 0.1、`weight_steering_input` = 1.0、その他の重み = 0に設定します。 -2. 走行時に車両がオシレーションする場合は、`weight_steering_input`を大きくします。 -3. 追従精度が低い場合は、`weight_steering_input`を小さくします。 +1. `weight_lat_error` = 0.1、`weight_steering_input` = 1.0、他のウェイトを0に設定します。 +2. 運転中に車両が振動する場合は、`weight_steering_input`を大きく設定します。 +3. 追従精度が低い場合は、`weight_steering_input`を小さく設定します。 -高速レンジでのみ効果を調整したい場合は、`weight_steering_input_squared_vel`を使用できます。このパラメータは、高速レンジでのステアリング重みに対応します。 +高速範囲でのみ効果を調整したい場合は、`weight_steering_input_squared_vel`を使用できます。このパラメータは、高速範囲でのステアリングウェイトに対応します。 -#### 重みについての説明 +#### ウェイトの説明 -- `weight_lat_error`:横方向追従誤差を減らします。これはPIDのPゲインのように動作します。 -- `weight_heading_error`:直進します。これはPIDのDゲインのように動作します。 -- `weight_heading_error_squared_vel_coeff`:高速レンジで直進します。 -- `weight_steering_input`:追従のオシレーションを減らします。 -- `weight_steering_input_squared_vel_coeff`:高速レンジでの追従のオシレーションを減らします。 -- `weight_lat_jerk`:横方向ジャークを減らします。 -- `weight_terminal_lat_error`:安定性のために通常の横方向の重み`weight_lat_error`よりも高い値を設定することを推奨します。 -- `weight_terminal_heading_error`:安定性のために通常のヘディングの重み`weight_heading_error`よりも高い値を設定することを推奨します。 +- `weight_lat_error`: 横方向の追従誤差を減らします。これはPIDのPゲインのように機能します。 +- `weight_heading_error`: まっすぐ走行します。これはPIDのDゲインのように機能します。 +- `weight_heading_error_squared_vel_coeff`:高速範囲でまっすぐ走行します。 +- `weight_steering_input`: 追従の振動を減らします。 +- `weight_steering_input_squared_vel_coeff`: 高速範囲で追従の振動を減らします。 +- `weight_lat_jerk`: 横方向のジャークを減らします。 +- `weight_terminal_lat_error`: 安定性のために、通常の横方向ウェイト`weight_lat_error`よりも高い値を設定することをお勧めします。 +- `weight_terminal_heading_error`: 安定性のために、通常のヘディングウェイト`weight_heading_error`よりも高い値を設定することをお勧めします。 #### その他のチューニングのヒント 他のパラメータを調整するためのヒントを以下に示します。 -- 理論的には、ターミナル重み`weight_terminal_lat_error`と`weight_terminal_heading_error`を大きくすると、追従安定性が向上します。この手法は効果的な場合があります。 -- `prediction_horizon`を大きくし、`prediction_sampling_time`を小さくすると、追従性能が向上します。ただし、計算コストが高くなります。 -- trajectoryの曲率に応じて重みを変えたい場合(たとえば、急曲線で走行していて大きな重みが必要な場合)、`mpc_low_curvature_thresh_curvature`を使用して`mpc_low_curvature_weight_**`重みを調整します。 -- 車両速度と軌跡曲率に基づいてステアリングレート制限を調整したい場合は、`steer_rate_lim_dps_list_by_curvature`、`curvature_list_for_steer_rate_lim`、`steer_rate_lim_dps_list_by_velocity`、`velocity_list_for_steer_rate_lim`の値を変更できます。これにより、高速走行中はステアリングレート制限を強制したり、曲線中は緩めたりできます。 -- ターゲット曲率がギザギザに見える場合は、`curvature_smoothing`を調整することが、曲率の正確な計算に非常に重要になります。値が大きいほど曲率の計算が滑らかになり、ノイズが減りますが、フィードフォワード計算の遅延が発生し、性能が低下する可能性があります。 -- `steering_lpf_cutoff_hz`の値を調整することも、計算ノイズを強制的に減らすのに効果的です。これは最後のレイヤーにインストールされた2次バターワースフィルターのカットオフ周波数を指します。カットオフ周波数が低いほどノイズの低減が大きくなりますが、動作に遅延が発生します。 -- 車両が軌道から横方向に一貫して逸脱する場合は、ほとんどの場合、ステアリングセンサーのオフセットまたは自車位置推定のオフセットが原因です。これらバイアスをMPCに入力する前に排除することを推奨しますが、MPC内でこのバイアスを削除することもできます。これを使用するには、`enable_auto_steering_offset_removal`をtrueに設定してステアリングオフセット除去器を有効にします。ステアリングオフセット推定ロジックは、ステアリングが中心付近で高速走行しているときに機能し、オフセット除去を適用します。 -- 曲線でのステアリングの開始が遅れる場合は、ステアリングモデルの遅延時間と時定数が正しくないことがよくあります。`input_delay`と`vehicle_model_steer_tau`の値を再確認してください。さらに、MPCはデバッグ情報の一部としてMPCモデルによって想定される現在のステアリング角を出力するため、そのステアリング角が実際のステアリング角と一致しているかどうかを確認してください。 +- 理論的には、ターミナルウェイト`weight_terminal_lat_error`と`weight_terminal_heading_error`を増やすことで、追従安定性を向上させることができます。この方法は効果的であることが証明されています。 +- ターミナルホライゾンを大きくし、`prediction_sampling_time`を小さくすると、追従性能が向上します。ただし、計算コストが高くなります。 +- 軌道曲率に応じてウェイトを変更したい場合(たとえば、急カーブを運転していてより大きなウェイトが必要な場合)、`mpc_low_curvature_thresh_curvature`を使用し、`mpc_low_curvature_weight_**`ウェイトを調整します。 +- 車両速度と軌道の曲率に基づいてステアリングレート制限を調整したい場合は、`steer_rate_lim_dps_list_by_curvature`、`curvature_list_for_steer_rate_lim`、`steer_rate_lim_dps_list_by_velocity`、`velocity_list_for_steer_rate_lim`の値を変更できます。これにより、高速走行中はステアリングレート制限を強化したり、カーブ中は緩和したりできます。 +- ターゲット曲率がギザギザに見える場合は、正確な曲率計算のために`curvature_smoothing`を調整することが非常に重要です。値が大きいほど曲率計算が滑らかになり、ノイズが低減されますが、フィードフォワード計算の遅延が発生し、パフォーマンスが低下する可能性があります。 +- `steering_lpf_cutoff_hz`の値を調整して、計算ノイズを強制的に低減することも効果的です。これは、最終層にインストールされた2次バターワースフィルタのカットオフ周波数を指します。カットオフ周波数が低いほどノイズ低減が強くなりますが、操作遅延も発生します。 +- 車両が軌道から横方向に継続的に逸脱する場合は、ステアリングセンサーまたは自己位置推定のオフセットが原因であることが最も多いです。これらのバイアスをMPCに入力する前に排除することをお勧めしますが、MPC内でこのバイアスを取り除くことも可能です。これを使用するには、`enable_auto_steering_offset_removal`をtrueに設定し、ステアリングオフセットリムーバーを有効にします。ステアリングオフセット推定ロジックは、ステアリングが中央に近く、高速で走行しているときに機能し、オフセットを取り除きます。 +- カーブでのステアリングの開始が遅れる場合は、多くの場合、ステアリングモデルの遅延時間とタイムコンスタントが正しくありません。`input_delay`と`vehicle_model_steer_tau`の値を再確認してください。さらに、デバッグ情報の一部として、MPCはMPCモデルで想定される現在のステアリング角を出力します。そのステアリング角が実際のステアリング角と一致するかどうかを確認してください。 -## 参照/外部リンク +## 参考資料/外部リンク -- [1] Jarrod M. Snider, "Automatic Steering Methods for Autonomous Automobile Path Tracking", - Robotics Institute, Carnegie Mellon University, February 2009. - -## 自動運転ソフトウェアに関するドキュメント +- [1] Jarrod M. Snider, "Automatic Steering Methods for Autonomous Automobile Path Tracking", Robotics Institute, Carnegie Mellon University, February 2009. -### Planningコンポーネントの概要 +**自動運転ソフトウェア** -Planningコンポーネントは、自動運転システムの主要な機能の1つであり、システムが安全で効率的な経路を計画するために必要です。 +**[Autoware](https://www.autoware.org/)** -### Planningコンポーネントの動作 +### プランニング コンポーネント -Planningコンポーネントは、以下のタスクを実行します。 +- **パス計画 (Path Planning)**: + - 車両が環境内を安全かつ効率的に移動するための経路を生成する。 -- 自車位置の Estimation -- 環境の検出とマッピング -- 感知された障害物の追跡 -- 安全で快適な経路の生成 -- 各制御器への経路の伝送 +- **動作計画 (Motion Planning)**: + - 車両が障害物や他の車両を避けながら、経路に沿って移動するための速度プロファイルとステアリング アングルを生成する。 -### Planningコンポーネントの構成 +- **コントローラー アロケーション (Controller Allocation)**: + - さまざまなタイプの車両制御(ステアリング、加速、ブレーキなど)をアクチュエーターに割り当て、システム全体の性能を最適化する。 -Autoware Planningコンポーネントは、以下のようなモジュールで構成されています。 +### 知覚 コンポーネント -- **WaypointGenerator:** Waypointを生成し、経路を形成します。 -- **TrajectoryGenerator:** Waypointに基づいて、滑らかな経路を生成します。 -- **MotionPredictor:** 障害物の将来の動きを予測します。 -- **CollisionChecker:** 生成された経路が環境の障害物と衝突しないことを確認します。 +- **3D 点群処理** + - センサーから取得した 3D 点群データを分析して、周囲環境のマップを作成する。 -### Planningコンポーネントの入力 +- **物体検出** + - 点群データから車両、歩行者、自転車などの周囲の物体を検出する。 -Planningコンポーネントは、以下の情報を入力として受け取ります。 +- **セマンティック セグメンテーション** + - 点群データを分析して、車道、歩道、建物などのシーンのセマンティック セグメンテーションを作成する。 -- 自車位置の Estimation -- 感知された障害物のリスト -- 環境マップ -- 車両の動力学モデル +### ローカリゼーション コンポーネント -### Planningコンポーネントの出力 +- **自己位置特定** + - 車両の現在の位置と姿勢を、センサーデータと地図情報を使用して特定する。 -Planningコンポーネントは、以下の情報を出力として生成します。 +- **マッピング** + - 車両が移動するときに周囲環境のマップを更新し、自己位置特定の精度を向上させる。 -- **Target Path:** 自動運転車が追従する経路 -- **Target Velocity:** 経路上の各点での希望速度 -- **Target Acceleration:** 経路上の各点での希望加速度 +### センサー フュージョン コンポーネント -### Planningコンポーネントの性能要件 +- **センサー データ フュージョン** + - 複数のセンサー(レーダー、LiDAR、カメラなど)からのデータを統合して、周囲環境のより完全で正確な表現を作成する。 -Planningコンポーネントは、以下のような性能要件を満たす必要があります。 +### システム マネージメント コンポーネント -- **安全性:** Planningコンポーネントは、車両が安全に操作されるように経路を計画する必要があります。 -- **効率性:** Planningコンポーネントは、計算効率が高く、リアルタイムで動作する必要があります。 -- **robustness:** Planningコンポーネントは、不完全な情報や予測不可能なイベントに対しても堅牢である必要があります。 +- **タスク マネージャ** + - 自動運転システムのさまざまなコンポーネントのタスクと依存関係を管理する。 -### Planningコンポーネントの検証 +- **データ レコーダー** + - 自動運転システムの動作とパフォーマンスに関するデータを記録する。 -Planningコンポーネントは、シミュレーションと実車テストの両方によって検証する必要があります。検証には以下が含まれます。 +- **リアルタイム システム** + - 自動運転システムを安全かつリアルタイムで動作させるための低レイテンシ オペレーティング システムとミドルウェアを提供する。 -- **path planning**の正確性 -- **Trajectory planning**の滑らかさと効率性 -- **Collision avoidance**の有効性 diff --git a/control/autoware_obstacle_collision_checker/README.md b/control/autoware_obstacle_collision_checker/README.md index a385168ed1d93..4c949932b7125 100644 --- a/control/autoware_obstacle_collision_checker/README.md +++ b/control/autoware_obstacle_collision_checker/README.md @@ -2,12 +2,13 @@ ## 目的 -`obstacle_collision_checker`は、予測された軌跡と障害物衝突をチェックし、衝突を発見した場合に診断エラーを公開するモジュールです。 +`obstacle_collision_checker`モジュールは、予測した経路に対する障害物衝突のチェックを行い、衝突が発生した場合には診断エラーを発行します。 -## 仕組み / アルゴリズム +## 内部動作/アルゴリズム ### フローチャート + ```plantuml @startuml skinparam monochrome true @@ -47,87 +48,92 @@ stop ### データの確認 -`obstacle_collision_checker` が地上点群、予測軌跡、基準軌跡、現在の速度データを受信していないことを確認します。 +`obstacle_collision_checker` が以下のデータを受信していないことを確認する。 +- 地面ポイントクラウド +- 予測軌道 +- 基準軌道 +- 現在の速度データ -### 診断の更新 +### 診断更新 -予測パスで衝突が発生した場合、このモジュールは診断ステータスとして `ERROR` レベルを設定し、それ以外の場合は `OK` を設定します。 +予測経路上で衝突が検出された場合、このモジュールは診断ステータスを `ERROR` レベルに設定し、それ以外は `OK` に設定する。 ## 入出力 ### 入力 -| 名前 | 型 | 説明 | -| ---------------------------------------------- | ----------------------------------------- | -------------------------------------- | -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 基準軌跡 | -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測軌跡 | -| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避すべき障害物の点群 | -| `/tf` | `tf2_msgs::msg::TFMessage` | TF | -| `/tf_static` | `tf2_msgs::msg::TFMessage` | スタティックTF | +| 名前 | 型 | 説明 | +| ------------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------- | +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | リファレンストライエクトリ | +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測トラジェクトリ | +| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避するべき障害物のポイントクラウド | +| `/tf` | `tf2_msgs::msg::TFMessage` | TF | +| `/tf_static` | `tf2_msgs::msg::TFMessage` | TF静的 | + +## 自動運転ソフトウェアのアーキテクチャ + +このドキュメントでは、Autowareの自動運転ソフトウェアのアーキテクチャについて説明します。 -### 出力 +### サブシステム -**AutowareのPlanningモジュール** +Autowareのアーキテクチャは、次のサブシステムで構成されています。 -**概要** +- **Perception:** 周囲環境のデータ収集および処理 +- **Planning:** 車両の経路計画と制御 +- **Localization:** 自車位置の追跡 +- **Control:** 車両の動作制御 -Planningモジュールは、Autowareの重要なコンポーネントの1つであり、Perceptionモジュールから受信したセンサデータを処理して、経路計画と制御コマンドを生成します。このモジュールは、次の手順で動作します。 +### データフロー -**主な機能** +Autowareのデータフローは、次のコンポーネントを通過します。 -- **経路計画:** - - ダイナミック計画法を使用して、周囲の環境を考慮した最適な経路を生成します。 - - 衝突回避と安全性を確保するために、予測可能な障害物パスを予測します。 -- **モーション計画:** - - 経路計画に基づいて、目標速度と加速度を決定します。 -- **コマンド生成:** - - 目標速度と加速度を使用して、車両のハンドルとアクセル/ブレーキの制御コマンドを生成します。 +1. **センサー:** カメラ、レーダー、LiDARなど +2. **Perception:** オブジェクト検出、セグメンテーション、トラッキング +3. **Planning:** パス計画、衝突回避 +4. **Localization:** RTK-GPS、SLAM、ビジュアルオドメトリ +5. **Control:** ステアリング、アクセル、ブレーキ -**入力** +### アーキテクチャ -- Perceptionモジュールからのセンサデータ - - LiDAR - - レーダー - - カメラ -- 自車位置 +Autowareのアーキテクチャは、以下によって実装されています。 -**出力** +- **ROS:** ロボットオペレーティングシステム +- **Autoware Planning:** 経路計画と衝突回避 +- **Autoware Control:** 車両の動作制御 +- **Autoware Localization:** 自車位置の追跡 -- 計画された経路 -- 目標速度と加速度 -- ハンドルとアクセル/ブレーキの制御コマンド +### 処理フロー -**考慮事項** +Autowareの処理フローは以下の通りです。 -- **センサーの不確実性:** センサーデータは不確実性を伴うため、Planningモジュールはロバストで信頼性の高い出力を生成する必要があります。 -- **現実世界の制約:** 計画された経路は、道路の傾斜、交通信号、その他の現実世界の制約を考慮する必要があります。 -- **リアルタイム処理:** Planningモジュールは、リアルタイムで動作して、車両の安全な運転を確保する必要があります。 +1. センサーからデータを受信 +2. Perceptionでデータを処理 +3. Planningで経路と制御コマンドを生成 +4. Localizationで自車位置を追跡 +5. Controlで制御コマンドを車両に送信 -**追加の機能** +### 'post resampling'処理 -- **'post resampling' 局所パス計画:** センサーデータの更新に応じて、局所パスをリアルタイムで調整します。 -- **多様なパラメータ設定:** 車両のモデル、環境条件、運転スタイルに応じて、Planningモジュールのパラメータを調整できます。 -- **詳細なログ記録:** Planningモジュールの動作を診断し、改善するために、ログデータを記録できます。 +'post resampling'処理は、Planningコンポーネントによって実行され、次のことを行います。 -**関連ドキュメント** +- センサーデータの高周期化 +- 低周期センサーデータの補間 -- Autoware Planningモジュールユーザーガイド -- Autoware Planningモジュール開発者ガイド +| Name | Type | Description | +| ---------------- | -------------------------------------- | ------------------------ | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | -| 変数名 | 型 | 説明 | -| ---------------- | -------------------------------------- | ---------------- | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 視覚化用マーカー | +## パラメーター -## パラメータ +| 名称 | タイプ | 説明 | デフォルト値 | +| :------------------ | :------- | :---------------------------------------------------- | :------------ | +| `delay_time` | `double` | 車両の遅延時間 [s] | 0.3 | +| `footprint_margin` | `double` | フットプリントの余裕 [m] | 0.0 | +| `max_deceleration` | `double` | 自車停止のための最大減速度 [m/s^2] | 2.0 | +| `resample_interval` | `double` | `post resampling` のインターバル [m] | 0.3 | +| `search_radius` | `double` | Trajectory から点群への検索距離 [m] | 5.0 | -| 名称 | 型 | 説明 | デフォルト値 | -| :------------------ | :------- | :------------------------------------------ | :----------- | -| `delay_time` | `double` | 車両の遅延時間 [s] | 0.3 | -| `footprint_margin` | `double` | 車両形状のマージン [m] | 0.0 | -| `max_deceleration` | `double` | 自車停止時の最大減速度 [m/s^2] | 2.0 | -| `resample_interval` | `double` | `post resampling`された軌道データの区間 [m] | 0.3 | -| `search_radius` | `double` | 軌道データから点群への探索距離 [m] | 5.0 | +## 仮定/既知の制限 -## 前提 / 既知の制限事項 +適切な衝突チェックを行うためには、おそらく予測された軌道とそのノイズを含まない障害物点群を取得することが必要です。 -適切な衝突確認を行うためには、予測軌道とノイズのない障害物点群の予測値を取得する必要があります。 diff --git a/control/autoware_operation_mode_transition_manager/README.md b/control/autoware_operation_mode_transition_manager/README.md index 6e73e39c55cfe..ebd37e1cc4b76 100644 --- a/control/autoware_operation_mode_transition_manager/README.md +++ b/control/autoware_operation_mode_transition_manager/README.md @@ -1,140 +1,134 @@ ## autoware_operation_mode_transition_manager -## 用途 / ユースケース +## 目的/ユースケース -このモジュールは、Autowareシステムのさまざまな動作モードを管理します。考えられるモードは次のとおりです。 +このモジュールは、Autowareシステムのさまざまな動作モードを管理する役割を持ちます。利用可能なモードは次のとおりです。 -- `Autonomous`: 車両が自律走行システムによって完全に制御されている -- `Local`: 車両がジョイスティックなどの物理的に接続された制御システムによって制御されている -- `Remote`: 車両がリモートコントローラーによって制御されている -- `Stop`: 車両が停止しており、アクティブな制御システムがない +- `Autonomous`: 車両が自動運転システムによって完全に制御されます +- `Local`: 車両がジョイスティックなどの物理的に接続された制御システムによって制御されます +- `Remote`: 車両がリモートコントローラーによって制御されます +- `Stop`: 車両が停止し、アクティブな制御システムはありません -各モードの切り替え中に発生する`In Transition`状態もあります。この状態では、新しいオペレータへの切り替えがまだ完了しておらず、切り替えが完了するまで、以前のオペレータがシステムの制御を担当しています。突然のブレーキやステアリングなどの操作は、`In Transition`状態中に制限される場合があります (これは`vehicle_cmd_gate`によって制限されます)。 +また、各モードの遷移中に発生する「In Transition」状態もあります。この状態の間、新しいオペレーターへの移行はまだ完了しておらず、移行が完了するまで、以前のオペレーターが引き続きシステムの制御を担当します。急ブレーキや急ハンドルなど、一部のアクションは「In Transition」状態中に制限される場合があります。(これは「vehicle_cmd_gate」によって制限されます) -### 機能 +### 特徴 -- `Autonomous`, `Local`, `Remote`, `Stop`間のモード切り替えを、表示コマンドに基づいて行う。 -- 各切り替えが利用可能(安全)かどうかを確認する。 -- `In Transition`モードで突然のモーションコントロールを制限する(`vehicle_cmd_gate`機能を使用して実行)。 -- 切り替えが完了したかどうかを確認する。 +- インジケータコマンドに基づいて、「Autonomous」、「Local」、「Remote」、「Stop」間のモード遷移を行います。 +- 各遷移が利用可能(安全かどうか)をチェックします。 +- 「In Transition」モードで急激な動作制御を制限します(これは「vehicle_cmd_gate」機能を使用して行われます)。 +- 遷移が完了しているかどうかを確認します。 -- `Autonomous`, `Local`, `Remote`, `Stop`モード間の切り替えを、表示コマンドに基づいて実行。 -- 各切り替えの実行が安全かどうかを判断。 -- `In Transition`モードで、特定の突然のモーション制御を制限(`vehicle_cmd_gate`機能を使用)。 -- 切り替えが完了したことを確認。 +- 「Autonomous」、「Local」、「Remote」、「Stop」モード間の遷移を、指示されたコマンドに基づいて実行します。 +- 各遷移が安全に実行できるかどうかを判断します。 +- 「In Transition」モードで特定の急激なモーション制御を制限します(「vehicle_cmd_gate」機能を使用)。 +- 遷移が完了したことを確認します。 ## 設計 -`autoware_operation_mode_transition_manager`と他のノードとの関係の概略図を以下に示します。 +「autoware_operation_mode_transition_manager」と他のノードとの関係のラフな設計を次に示します。 ![transition_rough_structure](image/transition_rough_structure.drawio.svg) -より詳細な構造を以下に示します。 +詳細な構造を次に示します。 ![transition_detailed_structure](image/transition_detailed_structure.drawio.svg) -ここでは、`autoware_operation_mode_transition_manager`には、次のような複数の状態遷移があるとわかります。 +ここで、「autoware_operation_mode_transition_manager」には、次のような複数のステート遷移があることがわかります。 - **AUTOWARE ENABLED <---> DISABLED** - **ENABLED**: 車両はAutowareによって制御されています。 - - **DISABLED**: 車両はAutowareの制御外であり、手動運転が期待されています。 + - **DISABLED**: 車両はAutowareの制御外であり、手動運転を想定しています。 - **AUTOWARE ENABLED <---> AUTO/LOCAL/REMOTE/NONE** - - **AUTO**: 車両はAutowareによって制御され、自律制御コマンドはPlanning/Controlコンポーネントによって計算されます。 - - **LOCAL**: 車両はAutowareによって制御され、ジョイスティックコントローラーなどのローカルに接続されたオペレータがいます。 - - **REMOTE**: 車両はAutowareによって制御され、リモートに接続されたオペレータがいます。 - - **NONE**: 車両はオペレータによって制御されていません。 + - **AUTO**: 車両はAutowareによって制御され、計画/制御コンポーネントによって計算された自律制御指令を受けます。 + - **LOCAL**: 車両はAutowareによって制御され、ジョイスティックコントローラーなどのローカルに接続されたオペレーターが操作します。 + - **REMOTE**: 車両はAutowareによって制御され、リモートで接続されたオペレーターが操作します。 + - **NONE**: 車両はどのオペレーターによっても制御されていません。 - **IN TRANSITION <---> COMPLETED** - - **IN TRANSITION**: 上記のモードは移行プロセス中で、以前のオペレータが移行が完了したことを確認する責任があります。 - - **COMPLETED**: モード移行は完了しています。 + - **IN TRANSITION**: 上記のモードが遷移処理中であり、以前のオペレーターが遷移が完了したことを確認する責任を負うことを想定しています。 + - **COMPLETED**: モード遷移が完了しました。 -## 入出力 / API +## 入出力/API ### 入力 -モード移行用: +モード遷移用: -- /system/operation_mode/change_autoware_control [`tier4_system_msgs/srv/ChangeAutowareControl`]: 動作モードをAutonomousに変更 -- /system/operation_mode/change_operation_mode [`tier4_system_msgs/srv/ChangeOperationMode`]: 動作モードを変更 +- /system/operation_mode/change_autoware_control [`tier4_system_msgs/srv/ChangeAutowareControl`]: 動作モードを「Autonomous」に変更する +- /system/operation_mode/change_operation_mode [`tier4_system_msgs/srv/ChangeOperationMode`]: 動作モードを変更する -移行の可用性/完了チェック用: +遷移の可用性/完了チェック用: -## 入力 +- /control/command/control_cmd [`autoware_control_msgs/msg/Control`]: 車両制御信号 +- /localization/kinematic_state [`nav_msgs/msg/Odometry`]: 自車ステート +- /planning/scenario_planning/trajectory [`autoware_planning_msgs/msg/Trajectory`]: Planningトラジェトリ +- /vehicle/status/control_mode [`autoware_vehicle_msgs/msg/ControlModeReport`]: 車両制御モード(自律/手動) +- /control/vehicle_cmd_gate/operation_mode [`autoware_adapi_v1_msgs/msg/OperationModeState`]: `vehicle_cmd_gate`におけるオペレーションモード(削除予定) -- `/control/command/control_cmd` [`autoware_control_msgs/msg/Control`]: 車両制御信号 -- `/localization/kinematic_state` [`nav_msgs/msg/Odometry`]: 自車状態 -- `/planning/scenario_planning/trajectory` [`autoware_planning_msgs/msg/Trajectory`]: Planningトラジェクトリー -- `/vehicle/status/control_mode` [`autoware_vehicle_msgs/msg/ControlModeReport`]: 車両制御モード (自動/手動) -- `/control/vehicle_cmd_gate/operation_mode` [`autoware_adapi_v1_msgs/msg/OperationModeState`]: `vehicle_cmd_gate` の操作モード (廃止予定) +後方互換性のために(削除予定): -**下位互換性のため (廃止予定)** +- /api/autoware/get/engage [`autoware_vehicle_msgs/msg/Engage`] +- /control/current_gate_mode [`tier4_control_msgs/msg/GateMode`] +- /control/external_cmd_selector/current_selector_mode [`tier4_control_msgs/msg/ExternalCommandSelectorMode`] -- `/api/autoware/get/engage` [`autoware_vehicle_msgs/msg/Engage`] -- `/control/current_gate_mode` [`tier4_control_msgs/msg/GateMode`] -- `/control/external_cmd_selector/current_selector_mode` [`tier4_control_msgs/msg/ExternalCommandSelectorMode`] +### 出力 -## 出力 +- /system/operation_mode/state [`autoware_adapi_v1_msgs/msg/OperationModeState`]: 現在のオペレーションモードの通知用 +- /control/autoware_operation_mode_transition_manager/debug_info [`autoware_operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug`]: オペレーションモード遷移に関する詳細情報 -- `/system/operation_mode/state` [`autoware_adapi_v1_msgs/msg/OperationModeState`]: 現在の操作モードを通知 -- `/control/autoware_operation_mode_transition_manager/debug_info` [`autoware_operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug`]: 操作モード遷移に関する詳細情報 +- /control/gate_mode_cmd [`tier4_control_msgs/msg/GateMode`]: `vehicle_cmd_gate`ステートを変更して機能を使用する(削除予定) +- /autoware/engage [`autoware_vehicle_msgs/msg/Engage`]: -- `/control/gate_mode_cmd` [`tier4_control_msgs/msg/GateMode`]: それらの機能を使用するために `vehicle_cmd_gate` の状態を変更 (廃止予定) -- `/autoware/engage` [`autoware_vehicle_msgs/msg/Engage`]: - -- `/control/control_mode_request` [`autoware_vehicle_msgs/srv/ControlModeCommand`]: 車両制御モード (自動/手動) を変更 -- `/control/external_cmd_selector/select_external_command` [`tier4_control_msgs/srv/ExternalCommandSelect`]: +- /control/control_mode_request [`autoware_vehicle_msgs/srv/ControlModeCommand`]: 車両制御モード(自律/手動)を変更する +- /control/external_cmd_selector/select_external_command [`tier4_control_msgs/srv/ExternalCommandSelect`]: ## パラメータ {{ json_to_markdown("control/autoware_operation_mode_transition_manager/schema/operation_mode_transition_manager.schema.json") }} -| 名称 | 型 | 説明 | デフォルト値 | -| :--------------------------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------- | -| `transition_timeout` | `float` | ステート遷移が **指定時間内に完了しない**場合、遷移が失敗と見なされます。 | 10.0 | -| `frequency_hz` | `float` | 実行 hz | 10.0 | -| `enable_engage_on_driving` | `bool` | 車両 **走行中に自動運転モードをオンにする**かどうかを指定します。 false の場合、車両速度が 0 以外の状況では走行モードへの切り替えを拒否します。パラメータを調整せずにこの機能を使用すると、急減速などの問題が発生する可能性があることに注意してください。使用する前に、走行条件と vehicle_cmd_gate 遷移フィルタが適切に調整されていることを確認してください。 | 0.1 | -| `check_engage_condition` | `bool` | false の場合、自動遷移は常に利用可能です。 | 0.1 | -| `nearest_dist_deviation_threshold` | `float` | 最も近い軌跡ポイントを見つけるために使用される距離の閾値 | 3.0 | -| `nearest_yaw_deviation_threshold` | `float` | 最も近い軌跡ポイントを見つけるために使用される角度の閾値 | 1.57 | - -`engage_acceptable_limits` 関連パラメータについて: - -| 名前 | タイプ | 説明 | デフォルト値 | -| ----------------------------- | -------- | ------------------------------------------------------------------------------------------- | ------------ | -| `allow_autonomous_in_stopped` | `bool` | 停止時に他のチェックに失敗しても、自律走行への移行が許可される場合はtrue | true | -| `dist_threshold` | `double` | `Autonomous` への移行では、軌跡と自車位置の距離がこの距離内にある必要がある | 1.5 | -| `yaw_threshold` | `double` | `Autonomous` への移行では、軌跡と自車位置のヨー角がこのしきい値内にある必要がある | 0.524 | -| `speed_upper_threshold` | `double` | `Autonomous` への移行では、制御コマンドと自車位置の速度偏差はこのしきい値内にある必要がある | 10.0 | -| `speed_lower_threshold` | `double` | `Autonomous` への移行では、制御コマンドと自車位置の速度偏差はこのしきい値内にある必要がある | -10.0 | -| `acc_threshold` | `double` | `Autonomous` への移行では、制御コマンドの加速度はこのしきい値未満である必要がある | 1.5 | -| `lateral_acc_threshold` | `double` | `Autonomous` への移行では、制御コマンドの横加速度はこのしきい値未満である必要がある | 1.0 | -| `lateral_acc_diff_threshold` | `double` | `Autonomous` への移行では、制御コマンドの横加速度偏差はこのしきい値未満である必要がある | 0.5 | - -`stable_check`関連パラメーター: - -| 名称 | 型 | 説明 | デフォルト値 | -| :---------------------- | :----- | :---------------------------------------------------------------------------------- | :----------- | -| `duration` | `数値` | この期間、安定条件が満たされると遷移が完了する。 | 0.1 | -| `dist_threshold` | `数値` | 経路と自車位置の距離が一定範囲内にある場合、`自律` への遷移が完了する。 | 1.5 | -| `yaw_threshold` | `数値` | 経路と自車位置のヨー角が一定範囲内にある場合、`自律` への遷移が完了する。 | 0.262 | -| `speed_upper_threshold` | `数値` | 制御コマンドと自車位置の速度偏差が一定範囲内にある場合、`自律` への遷移が完了する。 | 2.0 | -| `speed_lower_threshold` | `数値` | 制御コマンドと自車位置の速度偏差が一定範囲内にある場合、`自律` への遷移が完了する。 | 2.0 | - -## 各パラメータ設定におけるエンゲージチェック挙動 - -このマトリックスは、車両をエンゲージできるシナリオを、パラメータ設定の組み合わせに基づいて記述しています。 - -| `enable_engage_on_driving` | `check_engage_condition` | `allow_autonomous_in_stopped` | 許容されるEngageのシナリオ | -| :------------------------: | :----------------------: | :---------------------------: | :------------------------------------------------------------------- | -| x | x | x | 車両が停止している場合のみ | -| x | x | o | 車両が停止している場合のみ | -| x | o | x | 車両が停止しており、すべてのEngage条件が満たされている場合 | -| x | o | o | 車両が停止している場合のみ | -| o | x | x | 常に(注意:推奨されません) | -| o | x | o | 常に(注意:推奨されません) | -| o | o | x | 車両の状態に関係なく、すべてのEngage条件が満たされた場合 | -| o | o | o | すべてのEngage条件が満たされている場合、または車両が停止している場合 | - -## Future extensions / Unimplemented parts - -- 後方互換インターフェイスを削除する必要があります。 -- このノードは、`vehicle_cmd_gate` との密接な連携があるため、それに統合する必要があります。 +| 名前 | 型 | 説明 | デフォルト値 | +| :--------------------------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `transition_timeout` | `double` | このタイムアウト時間を超えてステート遷移が完了しなかった場合、遷移の失敗とみなされます。 + +`engage_acceptable_limits`関連パラメーターの場合: + +| 名称 | タイプ | 説明 | デフォルト値 | +| :---------------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `allow_autonomous_in_stopped` | `bool` | trueの場合、その他のチェックが失敗しても車両が停止しているときに自律運転への移行が可能です。 | true | +| `dist_threshold` | `double` | 軌跡と自車位置の距離がこの距離内にある場合、`Autonomous`への移行が可能です。 | 1.5 | +| `yaw_threshold` | `double` | 軌跡と自車位置のヨー角がこのしきい値内にある場合、`Autonomous`への移行が可能です。 | 0.524 | +| `speed_upper_threshold` | `double` | 制御コマンドと自車位置の速度偏差がこのしきい値内にある場合、`Autonomous`への移行が可能です。 | 10.0 | +| `speed_lower_threshold` | `double` | 制御コマンドと自車位置の速度偏差がこのしきい値内にある場合、`Autonomous`への移行が可能です。 | -10.0 | +| `acc_threshold` | `double` | 制御コマンドの加速度がこのしきい値よりも小である場合、`Autonomous`への移行が可能です。 | 1.5 | +| `lateral_acc_threshold` | `double` | 制御コマンドの横加速度がこのしきい値よりも小である場合、`Autonomous`への移行が可能です。 | 1.0 | +| `lateral_acc_diff_threshold` | `double` | 制御コマンドの横加速度偏差がこのしきい値よりも小である場合、`Autonomous`への移行が可能です。 | 0.5 | + +`stable_check` 関連のパラメータ: + +| 名称 | タイプ | 説明 | デフォルト値 | +| :---------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `duration` | `double` | この持続時間が安定状態を満たすことで遷移が完了する必要がある | 0.1 | +| `dist_threshold` | `double` | 軌跡と自車位置の間の距離がこの距離内にある場合に `Autonomous` への遷移が完了する | 1.5 | +| `yaw_threshold` | `double` | 軌跡と自車位置の間のヨー角がこのしきい値内にある場合に `Autonomous` への遷移が完了する | 0.262 | +| `speed_upper_threshold` | `double` | 制御コマンドと自車位置間の速度偏差がこのしきい値内にある場合に `Autonomous` への遷移が完了する | 2.0 | +| `speed_lower_threshold` | `double` | 制御コマンドと自車位置間の速度偏差がこのしきい値内にある場合に `Autonomous` への遷移が完了する | 2.0 | + +## 各パラメータ設定におけるアクティブ制御チェックの動作 + +このマトリックスは、パラメータ設定の組み合わせに基づき、車両がアクティブ制御できるシナリオについて示します。 + +| `enable_engage_on_driving` | `check_engage_condition` | `allow_autonomous_in_stopped` | 自車走行が許可されるシナリオ | +| :------------------------: | :----------------------: | :---------------------------: | :---------------------------------------------------------------- | +| x | x | x | 車両が停止している場合のみ | +| x | x | o | 車両が停止している場合のみ | +| x | o | x | 車両が停止しており、自動運転条件がすべて満たされている場合 | +| x | o | o | 車両が停止している場合のみ | +| o | x | x | いつでも(注意:推奨されません) | +| o | x | o | いつでも(注意:推奨されません) | +| o | o | x | 自動運転条件がすべて満たされている場合、車輌の状況に関係なく | +| o | o | o | 自動運転条件がすべて満たされているか、車輌が停止している場合 | + +## 今後の拡張 / 未実装部分 + +- バックワードコンパティブインタフェースの削除が必要。 +- 強力な関連性があるため、このノードは `vehicle_cmd_gate` にマージされるべき。 + diff --git a/control/autoware_pid_longitudinal_controller/README.md b/control/autoware_pid_longitudinal_controller/README.md index 9c1965ebfde14..7508791bb8e28 100644 --- a/control/autoware_pid_longitudinal_controller/README.md +++ b/control/autoware_pid_longitudinal_controller/README.md @@ -2,29 +2,29 @@ ## 目的 / ユースケース -longitudinal_controllerは、フィードフォワード / フィードバック制御を使用して、目標軌道の各点で設定された目標速度を実現するために目標加速度を計算します。 +longitudinal_controllerは、フィードフォワード/バック制御を使用して、目標軌道の各点で設定された目標速度を達成するための目標加速度を計算します。 -また、道路傾斜情報を考慮する傾斜力補正機能と遅延補償機能も搭載されています。ここで計算された目標加速度が車両インターフェースによって適切に実現されることが想定されています。 +また、道路勾配情報を考慮した勾配力補正と、遅延補正機能も含まれています。ここで計算された目標加速度は、車両インターフェイスによって適切に実現されることが想定されています。 -車両が「目標速度」インターフェースをサポートしている場合、Autowareではこのモジュールの使用は必須ではないことに注意してください。 +車両が「目標速度」インターフェイスをサポートしている場合、このモジュールの使用はAutowareにとって必須ではないことに注意してください。 ## 設計 / 内部動作 / アルゴリズム ### 状態 -このモジュールには、特定の状況で特殊な処理を処理するために、以下に示す4つの状態遷移があります。 +このモジュールは、特定の状況での特別な処理を処理するために、以下のように4つの状態遷移があります。 -- **DRIVE** +- **DRIVE (走行)** - PID制御による目標速度追従を実行します。 - - また、遅延補償と傾斜補償も適用します。 -- **STOPPING** + - 遅延補正と勾配補正も適用します。 +- **STOPPING (停止中)** - 停止直前の動きを制御します。 - - 正確かつスムーズな停止を実現するために特別なシーケンスが実行されます。 -- **STOPPED** - - 停止状態での操作を行います(例:ブレーキホールド) -- **EMERGENCY** - - 特定の条件が満たされた場合(例:車両が停止線の一定距離を超えた場合)、緊急状態に入ります。 - - 回復条件(車両が完全に停止するまで緊急状態を維持するかどうかの条件)または緊急状態での減速度はパラメータによって定義されます。 + - 正確かつスムーズな停止を達成するために特別なシーケンスが実行されます。 +- **STOPPED (停止)** + - 停止状態での動作(例:ブレーキホールド)を実行します。 +- **EMERGENCY (緊急)** + - 特定の条件が満たされたときに緊急状態に入ります(例:車両が停止線の一定距離を過ぎた場合)。 + - 回復条件(車両が完全に停止するまで緊急状態を維持するかどうか)または緊急状態での減速は、パラメータによって定義されます。 状態遷移図を以下に示します。 @@ -36,228 +36,226 @@ longitudinal_controllerは、フィードフォワード / フィードバック ![LongitudinalControllerDiagram](./media/LongitudinalControllerDiagram.drawio.svg) -#### フィードフォワード(FF) +#### フィードフォワード (FF) -軌道に設定された基準加速度と傾斜補正項をフィードフォワードとして出力します。モデリングエラーのない理想的な条件下では、このFF項のみで速度追従に十分です。 +軌跡に設定された基準加速度と勾配補正項がフィードフォワードとして出力されます。モデリング誤差のない理想的な条件では、このFF項のみで速度追従に十分なはずです。 -モデリングエラーまたは離散化エラーを引き起こす追従エラーは、フィードバック制御(現在はPIDを使用)によって除去されます。 +モデリングまたは離散化誤差による追従誤差は、フィードバック制御(現在はPIDを使用)によって除去されます。 -##### ブレーキ保持 +##### ブレーキキープ -乗り心地の観点からは、加速0で停止することが重要です。なぜなら、ブレーキによる衝撃が低減されるからです。ただし、停止時の目標加速度が0の場合、車両モデルエラーまたは勾配推定エラーにより、車両が停止線を越えてしまったり、停止線の前で少し加速したりする可能性があります。 +乗り心地の観点から、0加速度で停止することが重要です。これは、制動の影響を低減するためです。ただし、停止時の目標加速度が0の場合、車両モデルの誤差または勾配推定の誤差により、車両が停止線を越えてしまったり、停止線の前で少し加速したりする可能性があります。 -信頼性の高い停止を実現するために、フィードフォワードシステムによって計算された目標加速度は、停止時には負の加速度に制限されます。 +確実に停止するために、フィードフォワードシステムによって計算された目標加速度は、停止時には負の加速度に制限されます。 ![BrakeKeepingDiagram](./media/BrakeKeeping.drawio.svg) -#### 傾斜補正 +#### 勾配補正 -傾斜情報に基づき、補正項が目標加速度に追加されます。 +勾配情報に基づいて、目標加速度に補正項が追加されます。 -倾斜情報には2つの情報源があり、パラメータによって切り替えることができます。 +パラメータによって切り替えることができる勾配情報のソースは2つあります。 -- 傾斜角から現在の勾配を計算します -- 長所: 容易に入手可能 -- 短所: 車両の振動の影響により、正確な勾配情報を抽出できません +- 予測エゴポーズのピッチ角から現在の勾配を計算する + - 長所: 容易に利用可能 + - 短所: 車両の振動の影響を受けて正確な勾配情報を抽出できない。 - 軌道の Z 座標 - - ターゲット軌跡における前輪と後輪位置の Z 座標の差から道路勾配を計算します - - 長所: 経路の Z 座標が適切に維持されている場合、ピッチ情報よりも正確 - - 長所: 遅延補正との併用が可能(現時点では未実装) - - 短所: 高精度マップの Z 座標が必要 - - 短所: 自由空間計画をサポートしていない(現時点では) + - ターゲット軌跡の前輪と後輪の位置における Z 座標の差から道路の勾配を計算する + - 長所: 経路の Z 座標が適切に維持されていれば、ピッチ情報よりも正確 + - 長所: 遅延補償と組み合わせて使用可能 (まだ実装されていません) + - 短所: 高精度マップの Z 座標が必要。 + - 短所: 現時点ではフリースペースプラニングをサポートしていない -**記号:** この関数は、低レベル制御システムに加速フィードバックがない車両システムでのみ正常に動作します。 +**表記:** この関数は、ローレベル制御システムに加速フィードバックを持たない車両システムでのみ正しく動作します。 -この補正は、ターゲット加速度に重力補正を加え、自立走行システムが求めるターゲット加速度と等しくなくなる出力値を出力します。そのため、低レベルコントローラーの加速フィードバックの役割と矛盾します。 -たとえば、車両が「1.0 m/s^2」の加速度で始動しようとしており、「-1.0 m/s^2」の重力補正が適用されると、出力値は「0」になります。この出力値を誤ってターゲット加速度として扱えば、車両は始動しません。 +この補償では、目標加速に重力補正が加わり、自律走行システムが求める目標加速と一致しなくなります。したがって、ローレベルコントローラーの加速フィードバックの役割と競合します。 -勾配補正機能に適した車両システムの例は、 longitudinal_controller からの出力加速度をフィードバックなしでターゲットアクセル/ブレーキペダル入力に変換するシステムです。この場合、出力加速度はターゲットペダルの計算のためのフィードフォワード項としてのみ使用されるため、上記の点は問題になりません。 +たとえば、車両が `1.0 m/s^2` の加速で発進しようとしており、`-1.0 m/s^2` の重力補正が適用されると、出力値は `0` になります。この出力値を誤って目標加速と見なした場合、車両は発進しません。 -注: 勾配の角度は上り坂で正、自車位置のピッチ角は上向きで負と定義されます。定義は逆です。 +勾配補償機能に適した車両システムの例は、縦方向コントローラーからの出力加速が、フィードバックなしで目標 accel/ブレーキペダル入力に変換される車両システムです。この場合、出力加速はターゲットペダルの計算にフィードフォワード項として使用されるだけであり、したがって上記の問題は発生しません。 + +注: 勾配の角度は、上り坂では正と定義されていますが、エゴポーズのピッチ角は上向きを向いているときは負と定義されています。それらは反対の定義を持っています。 ![slope_definition](./media/slope_definition.drawio.svg) #### PID 制御 -フィードフォワード制御で処理できない偏差、たとえばモデル誤差に対しては、フィードバックシステムを構築するために PID 制御が使用されます。 +フィードフォワード制御では処理できない偏差、たとえばモデルエラーに対しては、フィードバックシステムを構築するために PID 制御が使用されます。 -この PID 制御は、現在の自車速度とターゲット速度の偏差からターゲット加速度を計算します。 +この PID 制御は、現在のエゴ速度と目標速度の偏差から目標加速度を計算します。 -この PID 処理は、各項の出力に最大値があります。これは次のことを防ぐためです。 +この PID ロジックは、各項の出力に最大値があります。これは以下のことを防ぐためです。 -- 大きい積分項は、ユーザーによる予期しない動作を引き起こす可能性があります。 -- 予期しないノイズは、微分項の出力の値を非常に高くする可能性があります。 +- 積分項が大きいと、ユーザーによる予期しない動作が発生する。 +- 意図しないノイズにより、微分項の出力値が非常に大きくなる。 -注: デフォルトでは、車両が停止している場合、制御システムの積分項は蓄積されません。この予防措置は、Autoware は車両がエンゲージしていることを想定していますが、起動手順を開始するために外部システムが車両を固定している場合に、積分項の予期しない累積を防ぐことを目的としています。 +注: デフォルトでは、車両が停止しているとき、制御システムの積分項は累積されません。この予防措置は、Autoware が車両がエンゲージされていると想定しているが、外部システムが車両を停止して起動手順を開始している場合の積分項の意図しない蓄積を防ぐことを目的としています。 -ただし、車両が起動時に路面の陥没部に遭遇したり、勾配補正が不正確に推定されたり(必要以上に小さくなったり)すると、動作を開始できない場合があります。これらのシナリオに対処するために、`enable_integration_at_low_speed` パラメータを true に設定することで、車両が静止している場合でもエラーの積分をアクティブにすることができます。 +ただし、車両が起動中に路面の凹凸に遭遇した場合や、勾配補償が不正確に見積もられた (必要以上に低い) 場合などの特定の状況が発生し、運動が開始されない場合があります。これらのシナリオに対応するため、`enable_integration_at_low_speed` パラメータを true に設定することで、車両が静止しているときでもエラー積分をアクティブにすることができます。 -`enable_integration_at_low_speed` が true に設定されている場合、PID コントローラーは、`time_threshold_before_pid_integration` パラメータで定義された特定の時間が経過し、車両が `current_vel_threshold_pid_integration` パラメータで設定された最小速度を超えていない場合に、加速度誤差の積分を開始します。 +`enable_integration_at_low_speed` が true に設定されている場合、PID コントローラーは、`current_vel_threshold_pid_integration` パラメータで設定された最小速度を超えることなく、`time_threshold_before_pid_integration` パラメータで定義された特定の時間が経過した後に、加速エラーの積分を開始します。 -`time_threshold_before_pid_integration` パラメータがあることは、実用的な PID チューニングにとって重要です。車両が停止中または低速時に誤差を積分すると、PID のチューニングが複雑になる可能性があります。このパラメータは効果的に積分部分がアクティブになるまでの遅延を導入し、瞬時に開始することを防ぎます。この遅延により、PID コントローラーのより制御された効果的なチューニングが可能になります。 +`time_threshold_before_pid_integration` パラメータの存在は、実用的な PID チューニングに不可欠です。車両が停止している場合や低速の場合はエラーを積分すると、PID チューニングが複雑になる可能性があります。このパラメータは、積分部分がアクティブになるまでの遅延を効果的に導入し、即座に動作しないようにします。この遅延により、PID コントローラーのより制御された効果的なチューニングが可能になります。 -現在、PID 制御は、開発/保守コストとパフォーマンスのトレードオフの観点から実装されています。 -将来的には、より高性能なコントローラー(適応制御またはロバスト制御)に置き換えられる場合があります。 +現在、PID 制御は開発/保守コストとパフォーマンスのトレードオフという観点から実装されています。今後の開発では、パフォーマンスの高いコントローラー (適応制御またはロバスト制御) に置き換えられる可能性があります。 -#### 時間遅延補正 +#### 時間遅延補償 -高速では、アクセルペダルやブレーキなどのアクチュエータシステムの遅延が走行精度に大きな影響を与えます。 -車両の作動原理に応じて、アクセルペダルとブレーキを物理的に制御するメカニズムには通常、約 100 ミリ秒の遅延があります。 +高速では、アクセルペダルやブレーキなどのアクチュエータシステムの遅延が、走行精度に大きな影響を与えます。車両の作動原理によっては、アクセルペダルとブレーキを物理的に制御するメカニズムは通常、約 100 ミリ秒の遅延があります。 -このコントローラーでは、予測自車速度と遅延時間後のターゲット速度が計算され、遅延時間の問題に対処するためのフィードバックに使用されます。 +このコントローラーでは、時間遅延後の予測エゴ速度と目標速度が計算され、フィードバックに使用して時間遅延の問題に対処します。 -### 勾配補正 +### 勾配補償 -勾配情報に基づいて、補正項がターゲット加速度に追加されます。 +勾配情報に基づいて、目標加速度に補償項が加えられます。 勾配情報のソースは 2 つあり、パラメータで切り替えることができます。 -- 推定自車位置のピッチ(デフォルト) - - 傾斜角から現在の勾配を計算します +- 推定エゴポーズのピッチ (デフォルト) + - 推定エゴポーズのピッチ角から現在の勾配を計算する + - 長所: 容易に利用可能 ## 軌道の Z 座標 - -- ターゲット軌道の前輪と後輪位置の Z 座標の差から道路勾配を計算 -- 長所: 経路の Z 座標が適切に維持されていれば、ピッチ情報よりも正確 -- 長所: (まだ実装されていない) 遅延補正と組み合わせて使用できる -- 短所: 高精細マップの Z 座標が必要 -- 短所: (現時点では) フリースペースプランニングに対応していない - -## 前提 / 制限事項 - -1. スムーズ化された目標速度とその加速度は軌跡に設定される必要がある - 1. 速度コマンドはコントローラー内でスムージングされない (ノイズのみが除去される場合がある)。 - 2. ステップ状のターゲット信号の場合、トラッキングは可能な限り高速に実行されます。 -2. 車両速度は適切な値でなければならない - 1. 自車速度は、前進/後進方向に対応する符号付き値でなければならない - 2. 自車速度は適切なノイズ処理で与えられるべきである。 - 3. 自車速度に大きなノイズが含まれる場合、追従性能が大幅に低下する。 -3. このコントローラからの出力を後続モジュール (例: 車両インターフェース) で実現する必要がある。 - 1. 車両インターフェースに目標速度または目標加速度インターフェイスがない場合 (例: 車両にアクセルペダルとブレーキインターフェースのみがある場合)、このコントローラの後に適切な変換を行う必要がある。 + - 対象軌道の前輪と後輪の位置の Z 座標の差から道路勾配を計算する + - 長所: ルートの Z 座標が適切に維持されている場合、ピッチ情報よりも正確 + - 長所: 遅延補償と組み合わせて使用可能(まだ実装されていません) + - 短所: 高精細地図の Z 座標が必要です。 + - 短所: フリースペースプランニングには現時点では対応していません + +## 仮定 / 制限事項 + +1. 平滑化された対象速度とその加速度を軌跡に設定すること + 1. 速度コマンドはコントローラー内で平滑化されません(ノイズだけが除去される可能性があります)。 + 2. ステップ状の対象信号の場合、トラッキングは可能な限り高速に実行されます。 +2. 車両速度は適切な値でなければなりません + 1. 自車速度は前進/後進の方向に対応する符号付き値でなければなりません + 2. 自車速度は適切なノイズ処理によって得られる必要があります。 + 3. 自車速度に大量のノイズがあると、追従性能は大幅に低下します。 +3. このコントローラーの出力は後続のモジュール(例: 車両インターフェイス)によって達成されなければなりません。 + 1. 車両インターフェイスに対象速度または加速度インターフェイスがない場合(例: 車両にアクセルペダルとブレーキインターフェイスしかない場合)、このコントローラーの後に適切な変換を行う必要があります。 ## 入出力 / API ### 入力 +以下を [controller_node](../autoware_trajectory_follower_node/README.md) から設定します。 -[controller_node](../autoware_trajectory_follower_node/README.md) から次を設定 - -- `autoware_planning_msgs/Trajectory`: フォローするリファレンストラジェクトリ。 +- `autoware_planning_msgs/Trajectory`: 追従するリファレンストラジェクトリ - `nav_msgs/Odometry`: 現在のオドメトリ ### 出力 +以下の内容を含む縦断出力(`autoware_control_msgs/Longitudinal`)をコントローラーノードに返します。 -次の情報を格納した LongitudinalOutput をコントローラノードに返却 - -- `autoware_control_msgs/Longitudinal`: 車両の縦運動を制御するコマンド。目標速度と目標加速度が含まれます。 -- LongitudinalSyncData - - 速度収束 (現在は使用されていません) +- `autoware_control_msgs/Longitudinal`: 車両の縦動を制御するためのコマンドで、目標速度と目標加速度が含まれます。 +- 縦断同期データ + - 速度収束(現在使用されていません) -### PIDController クラス +### `PIDController` クラス `PIDController` クラスは簡単に使用できます。 -最初に、比例 (P)、積分 (I)、および微分 (D) 成分のゲインと制限を `setGains()` と `setLimits()` を使用して設定する必要があります。 -次に、現在の誤差とタイムステップ時間を `calculate()` 関数に提供することで速度を計算できます。 - -## パラメータの説明 - -`param/lateral_controller_defaults.param.yaml` で定義されている既定のパラメータは、時速 40 km 未満の運転のために AutonomouStuff Lexus RX 450h に調整されています。 - -| 名称 | 型 | 説明 | デフォルト値 | -| :-------------------------------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| `delay_compensation_time` | double | 縦制御の遅延 [s] | 0.17 | -| `enable_smooth_stop` | bool | STOPPING への遷移を有効にするフラグ | true | -| `enable_overshoot_emergency` | bool | `emergency_state_overshoot_stop_dist` で指定された距離でエゴが停止線を超えた場合に EMERGENCY への遷移を有効にするフラグ | true | -| `enable_large_tracking_error_emergency` | bool | 軌道とエゴの姿勢の大きなずれにより、最も近い軌跡ポイントの検索が失敗した場合に EMERGENCY への遷移を有効にするフラグ | true | -| `enable_slope_compensation` | bool | 勾配補正のための出力加速度を変更するフラグ。勾配角のソースはエゴの姿勢または軌道の角度から選択できます。 `use_trajectory_for_pitch_calculation` を参照してください。 | true | -| `enable_brake_keeping_before_stop` | bool | エゴが停止する前の DRIVE 状態中に特定の加速度を維持するフラグ。 [ブレーキの維持](#brake-keeping) を参照 | false | -| `enable_keep_stopped_until_steer_convergence` | bool | ステアが収束するまで停止状態を維持するフラグ | true | -| `max_acc` | double | 出力加速度の最大値 [m/s^2] | 3.0 | -| `min_acc` | double | 出力加速度の最小値 [m/s^2] | -5.0 | -| `max_jerk` | double | 出力加速度のジャークの最大値 [m/s^3] | 2.0 | -| `min_jerk` | double | 出力加速度のジャークの最小値 [m/s^3] | -5.0 | -| `use_trajectory_for_pitch_calculation` | bool | true の場合、勾配は軌跡の z レベルから推定されます。それ以外の場合は、エゴの姿勢のピッチ角が使用されます。 | false | -| `lpf_pitch_gain` | double | ピッチ推定用のローパスフィルターのゲイン | 0.95 | -| `max_pitch_rad` | double | 推定ピッチの最大値 [rad] | 0.1 | -| `min_pitch_rad` | double | 推定ピッチの最小値 [rad] | -0.1 | - -### 状態遷移 - -| 名称 | タイプ | 説明 | デフォルト値 | -| :---------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| drive_state_stop_dist | double | 停止位置までの距離が`drive_state_stop_dist` + `drive_state_offset_stop_dist` [m]を超えると、DRIVE状態に移行します。 | 0.5 | -| drive_state_offset_stop_dist | double | 停止位置までの距離が`drive_state_stop_dist` + `drive_state_offset_stop_dist` [m]を超えると、DRIVE状態に移行します。 | 1.0 | -| stopping_state_stop_dist | double | 停止位置までの距離が`stopping_state_stop_dist` [m]未満になるとSTOPPING状態に移行します。 | 0.5 | -| stopped_state_entry_vel | double | STOPPED状態への遷移時の自車速度のしきい値 [m/s] | 0.01 | -| stopped_state_entry_acc | double | STOPPED状態への遷移時の自車加速度のしきい値 [m/s^2] | 0.1 | -| emergency_state_overshoot_stop_dist | double | `enable_overshoot_emergency`が真の場合、自車が停止位置から`emergency_state_overshoot_stop_dist`メートル先にあるとEMERGENCY状態に移行します。 [m] | 1.5 | -| emergency_state_traj_trans_dev | double | 自車位置が最寄りの軌跡ポイントから`emergency_state_traj_tran_dev`メートル離れているとEMERGENCY状態に移行します。 [m] | 3.0 | -| emergency_state_traj_rot_dev | double | 自車の方位が最寄りの軌跡ポイントの方位から`emergency_state_traj_rot_dev`ラジアン離れているとEMERGENCY状態に移行します。 [rad] | 0.784 | +最初に、比例(P)、積分(I)、微分(D)成分にゲインと制限を(`setGains()` と `setLimits()` を使用して)設定する必要があります。 +次に、現在の誤差と時間ステップの期間を `calculate()` 関数に渡すことで速度を計算できます。 + +## パラメーターの説明 + +`param/lateral_controller_defaults.param.yaml` で定義されているデフォルトパラメーターは、時速 40 km 未満の運転用に AutonomouStuff Lexus RX 450h に調整されています。 + +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------------------------------ | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `delay_compensation_time` | double | Longitudinal controlの遅延時間[s] | 0.17 | +| `enable_smooth_stop` | bool | STOPPINGへの遷移を有効にするフラグ | true | +| `enable_overshoot_emergency` | bool | 自車が停止線から一定距離離れたときにEMERGENCYへの遷移を有効にするフラグ。 `emergency_state_overshoot_stop_dist`を参照。 | true | +| `enable_large_tracking_error_emergency` | bool | 軌道と自車位置の大きな偏差により、最も近い軌道点検索に失敗した場合にEMERGENCYへの遷移を有効にするフラグ。 | true | +| `enable_slope_compensation` | bool | 勾配補正のために出力加速度を変更するフラグ。 勾配角のソースは、自車位置または軌道角度から選択できます。 `use_trajectory_for_pitch_calculation`を参照。 | true | +| `enable_brake_keeping_before_stop` | bool | 自車が停止する前のDRIVE状態での特定の加速度を維持するフラグ。 [Brake keeping](#brake-keeping)を参照。 | false | +| `enable_keep_stopped_until_steer_convergence` | bool | ステアリングが収束するまで停止状態を維持するフラグ。 | true | +| `max_acc` | double | 出力加速度の最大値[m/s2] | 3.0 | +| `min_acc` | double | 出力加速度の最小値[m/s2] | -5.0 | +| `max_jerk` | double | 出力加速度のジャークの最大値[m/s3] | 2.0 | +| `min_jerk` | double | 出力加速度のジャークの最小値[m/s3] | -5.0 | +| `use_trajectory_for_pitch_calculation` | bool | trueの場合、勾配は軌道のzレベルから推定されます。 それ以外の場合は、自車位置のピッチ角が使用されます。 | false | +| `lpf_pitch_gain` | double | ピッチ推定用のローパスフィルターのゲイン | 0.95 | +| `max_pitch_rad` | double | 推定ピッチの最大値[rad] | 0.1 | +| `min_pitch_rad` | double | 推定ピッチの最小値[rad] | -0.1 | + +### ステート遷移 + +| 名前 | 型 | 説明 | 初期値 | +| --- | --- | --- | --- | +| `drive_state_stop_dist` | double | `drive_state_stop_dist` + `drive_state_offset_stop_dist` [m] より停止地点までの距離が長い場合、DRIVE 状態に移行 | 0.5 | +| `drive_state_offset_stop_dist` | double | `drive_state_stop_dist` + `drive_state_offset_stop_dist` [m] より停止地点までの距離が長い場合、DRIVE 状態に移行 | 1.0 | +| `stopping_state_stop_dist` | double | 停止地点までの距離が `stopping_state_stop_dist` [m] より短い場合、STOPPING 状態に移行 | 0.5 | +| `stopped_state_entry_vel` | double | STOPPED 状態への移行における自車速度の閾値 [m/s] | 0.01 | +| `stopped_state_entry_acc` | double | STOPPED 状態への移行における自車加速度の閾値 [m/s^2] | 0.1 | +| `emergency_state_overshoot_stop_dist` | double | `enable_overshoot_emergency` が true で、停止地点から `emergency_state_overshoot_stop_dist` メートル進んだ場合、EMERGENCY 状態に移行 | 1.5 | +| `emergency_state_traj_trans_dev` | double | 自車位置が、最も近い軌跡点から `emergency_state_traj_tran_dev` メートル離れた場合、EMERGENCY 状態に移行 | 3.0 | +| `emergency_state_traj_rot_dev` | double | 自車の方位が、最も近い軌跡点の方位から `emergency_state_traj_rot_dev` rad 逸れた場合、EMERGENCY 状態に移行 | 0.784 | ### DRIVE パラメータ -| 名称 | 型 | 説明 | デフォルト値 | -| :------------------------------------ | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| kp | double | Longitudinal制御のPゲイン | 1.0 | -| ki | double | Longitudinal制御のIゲイン | 0.1 | -| kd | double | Longitudinal制御のDゲイン | 0.0 | -| max_out | double | DRIVE状態におけるPID出力加速度の最大値[m/s²] | 1.0 | -| min_out | double | DRIVE状態におけるPID出力加速度の最小値[m/s²] | -1.0 | -| max_p_effort | double | Pゲインにおける加速度の最大値 | 1.0 | -| min_p_effort | double | Pゲインにおける加速度の最小値 | -1.0 | -| max_i_effort | double | Iゲインにおける加速度の最大値 | 0.3 | -| min_i_effort | double | Iゲインにおける加速度の最小値 | -0.3 | -| max_d_effort | double | Dゲインにおける加速度の最大値 | 0.0 | -| min_d_effort | double | Dゲインにおける加速度の最小値 | 0.0 | -| lpf_vel_error_gain | double | 速度誤差のローパスフィルタのゲイン | 0.9 | -| enable_integration_at_low_speed | bool | 車両速度が`current_vel_threshold_pid_integration`未満の場合に、加速度誤差の積分を有効にするか否か | false | -| current_vel_threshold_pid_integration | double | 現在の速度の絶対値がこのパラメータより大きい場合にのみ、I項に対して速度誤差を積分します。 [m/s] | 0.5 | -| time_threshold_before_pid_integration | double | PID誤差の積分を有効にするまでに車両の無移動が経過する必要がある時間。 [s] | 5.0 | -| brake_keeping_acc | double | `enable_brake_keeping_before_stop`が真の場合、自我が停止する前にDRIVE状態中に特定の加速度が維持されます [m/s²] [ブレーキキープ](#brake-keeping)を参照 | 0.2 | - -### STOPPING パラメーター(スムーズストップ) - -`enable_smooth_stop` が真の場合、スムーズストップが有効になります。 -スムーズストップでは、まず車両の速度を下げるために強い加速度(`strong_acc`)が生成されます。 -次に、弱い加速度(`weak_acc`)が生成されて車両のジャークを下げながらスムーズに停止します。 -車両がある一定時間停止しなかったり、停止位置を何メートルか超えた場合は、すぐに停止するための弱い加速度(`weak_stop_acc`)が生成されます。 -車両がまだ走っている場合は、すぐに停止するための強い加速度(`strong_stop_acc`)が生成されます。 - -| 名前 | タイプ | 説明 | デフォルト値 | -| :--------------------------- | :----- | :------------------------------------------------------------------------------------------------------- | :----------- | -| smooth_stop_max_strong_acc | double | 最大強加速 [m/s^2] | -0.5 | -| smooth_stop_min_strong_acc | double | 最小強加速 [m/s^2] | -0.8 | -| smooth_stop_weak_acc | double | 弱加速 [m/s^2] | -0.3 | -| smooth_stop_weak_stop_acc | double | 弱停止加速 [m/s^2] | -0.8 | -| smooth_stop_strong_stop_acc | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートル離れたときに出力される強加速 [m/s^2] | -3.4 | -| smooth_stop_max_fast_vel | double | 自車が高速走行中とみなす、最大の高速限界速度 [m/s]。高速走行中とみなされると、強加速が出力されます。 | 0.5 | -| smooth_stop_min_running_vel | double | 自車が走行中とみなす、最低走行速度 [m/s] | 0.01 | -| smooth_stop_min_running_acc | double | 自車が走行中とみなす、最低走行加速度 [m/s^2] | 0.01 | -| smooth_stop_weak_stop_time | double | 弱加速を出力する最大時間 [s]。時間を超えると強加速が出力されます。 | 0.8 | -| smooth_stop_weak_stop_dist | double | 自車が停止ポイントから `smooth_stop_weak_stop_dist` メートルの距離にあるとき、弱加速が出力されます [m] | -0.3 | -| smooth_stop_strong_stop_dist | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートルの距離にあるとき、強加速が出力されます [m] | -0.5 | - -### STOPPED パラメーター - -`STOPPED` 状態では、車両が完全に停止しており、ブレーキが完全に作動していることを想定しています。 -そのため、`stopped_acc` には、車両に最大のブレーキを適用することを可能にする値を設定する必要があります。 -`stopped_acc` が十分に低いと、急勾配で滑落する可能性があります。 - -| Name | Type | Description | Default value | -| :----------- | :----- | :-------------------------------------- | :------------ | -| stopped_vel | double | STOPPED状態における目標速度 [m/s] | 0.0 | -| stopped_acc | double | STOPPED状態における目標加速度 [m/s^2] | -3.4 | -| stopped_jerk | double | STOPPED状態における目標ジャーク [m/s^3] | -5.0 | - -### EMERGENCYパラメータ - -| 名称 | タイプ | 説明 | デフォルト値 | -| :------------- | :--------------- | :------------------------------------ | :----------- | -| emergency_vel | 倍精度浮動小数点 | EMERGENCY状態での目標速度 [m/s] | 0.0 | -| emergency_acc | 倍精度浮動小数点 | EMERGENCY状態での目標加速度 [m/s^2] | -5.0 | -| emergency_jerk | 倍精度浮動小数点 | EMERGENCY状態での目標ジャーク [m/s^3] | -3.0 | - -## 参考文献 / 外部リンク - -## 今後の拡張 / 未実装の部分 - -## 関連する課題 +| Name | Type | Description | Default value | +| :----------------------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| kp | double | 縦方向制御の p ゲイン | 1.0 | +| ki | double | 縦方向制御の i ゲイン | 0.1 | +| kd | double | 縦方向制御の d ゲイン | 0.0 | +| max_out | double | DRIVE 状態における PID 出力加速度の最大値 [m/s^2] | 1.0 | +| min_out | double | DRIVE 状態における PID 出力加速度の最小値 [m/s^2] | -1.0 | +| max_p_effort | double | p ゲインによる加速度の最大値 | 1.0 | +| min_p_effort | double | p ゲインによる加速度の最小値 | -1.0 | +| max_i_effort | double | i ゲインによる加速度の最大値 | 0.3 | +| min_i_effort | double | i ゲインによる加速度の最小値 | -0.3 | +| max_d_effort | double | d ゲインによる加速度の最大値 | 0.0 | +| min_d_effort | double | d ゲインによる加速度の最小値 | 0.0 | +| lpf_vel_error_gain | double | 速度誤差のローパスフィルタのゲイン | 0.9 | +| enable_integration_at_low_speed | bool | `current_vel_threshold_pid_integration` 未満の速度時に加速度誤差の積分を有効にするかどうか | false | +| current_vel_threshold_pid_integration | double | このパラメータを超える絶対速度時のみ、速度誤差の積分を I 項に対して行う [m/s] | 0.5 | +| time_threshold_before_pid_integration | double | 車両の移動がない状態が長時間続いたときにのみ PID 誤差積分を有効にする [s] | 5.0 | +| brake_keeping_acc | double | `enable_brake_keeping_before_stop` が `true` の場合、車両が停止する前に DRIVE 状態において特定の加速度を維持する [m/s^2] [ブレーキ維持](#ブレーキ維持) を参照 | 0.2 | + +### STOPPING パラメータ(スムーズストップ) + +スムーズストップは `enable_smooth_stop` が true の場合に有効になります。 +スムーズストップでは、最初に強い加速度 (`strong_acc`) が出力されて自車の速度を減速します。 +その後、弱い加速度 (`weak_acc`) が出力されて、自車のジャークを減らしてスムーズに停止します。 +自車が停止点に対して一定時間または一定距離を超えて停止しなかった場合は、すぐに弱停止加速度 (`weak_stop_acc`) が出力されて停止します。 +自車がそれでも走行している場合は、すぐに停止するための強い停止加速度 (`strong_stop_acc`) が出力されます。 + +| 名前 | 型 | 説明 | デフォルト値 | +| :--------------------------- | :----- | :------------------------------------------------------------------------------------------------------------------- | :------------ | +| smooth_stop_max_strong_acc | double | 最大強加速度 [m/s^2] | -0.5 | +| smooth_stop_min_strong_acc | double | 最小強加速度 [m/s^2] | -0.8 | +| smooth_stop_weak_acc | double | 弱加速度 [m/s^2] | -0.3 | +| smooth_stop_weak_stop_acc | double | 直ちに停止するための弱加速度 [m/s^2] | -0.8 | +| smooth_stop_strong_stop_acc | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートル離れたときに、Planningモジュールが出力するべき強加速度 [m/s^2] | -3.4 | +| smooth_stop_max_fast_vel | double | 自車が高速走行中と判断する最大速度 [m/s]。自車が高速走行中の場合、強加速度が出力される。 | 0.5 | +| smooth_stop_min_running_vel | double | 自車が走行中と判断するための最小自車速度 [m/s] | 0.01 | +| smooth_stop_min_running_acc | double | 自車が走行中と判断するための最小自車加速度 [m/s^2] | 0.01 | +| smooth_stop_weak_stop_time | double | 弱加速度を出力する最大時間 [秒]。この後、強加速度が出力される。 | 0.8 | +| smooth_stop_weak_stop_dist | double | 自車が停止ポイントの `smooth_stop_weak_stop_dist` メートル手前にある場合、弱加速度が出力される。 [m] | -0.3 | +| smooth_stop_strong_stop_dist | double | 自車が停止ポイントから `smooth_stop_strong_stop_dist` メートル離れている場合に、強加速度が出力される。 [m] | -0.5 | + +### STOPPEDパラメーター + +`STOPPED`状態は、車両が完全に停止していてブレーキが完全に作動していると仮定しています。 +そのため、`stopped_acc`には車両が可能な限り最強のブレーキを適用できる値を設定する必要があります。 +`stopped_acc`が十分に低くない場合、急勾配で滑り落ちる可能性があります。 + +| 名前 | タイプ | 説明 | デフォルト値 | +| :----------- | :----- | :-------------------------------------------- | :------------ | +| stopped_vel | double | STOPPED状態の目標速度[m/s] | 0.0 | +| stopped_acc | double | STOPPED状態の目標加速度[m/s^2] | -3.4 | +| stopped_jerk | double | STOPPED状態の目標ジャーク[m/s^3] | -5.0 | + +### EMERGENCY パラメータ + +| 名前 | タイプ | 説明 | デフォルト値 | +| :------------- | :----- | :------------------------------------------------ | :------------ | +| emergency_vel | double | EMERGENCY状態のターゲット速度 [m/s] | 0.0 | +| emergency_acc | double | EMERGENCY状態のターゲット加速度 [m/s^2] | -5.0 | +| emergency_jerk | double | EMERGENCY状態のターゲットジャーク [m/s^3] | -3.0 | + +## 関連資料 / 外部リンク + +## 将来の拡張 / 未対応部分 + +## 関連課題 + diff --git a/control/autoware_pure_pursuit/README.md b/control/autoware_pure_pursuit/README.md index 157043674dfcf..1aece7f377305 100644 --- a/control/autoware_pure_pursuit/README.md +++ b/control/autoware_pure_pursuit/README.md @@ -1,19 +1,20 @@ -# ピュアパーシュート制御 +# Pure Pursuit Controller -ピュアパーシュート制御モジュールは、ピュアパーシュートアルゴリズムを使用して、 desired trajectory の追跡に使用するステアリングアングルを計算します。これは、`autoware_trajectory_follower_node` のラテラルコントローラープラグインとして使用されます。 +Pure Pursuit Controllerモジュールは、Pure Pursuitアルゴリズムを使用して目標軌道を追従するためのステアリング角を計算します。これは`autoware_trajectory_follower_node`のラテラルコントローラプラグインとして使用されます。 ## 入力 -[controller_node](../autoware_trajectory_follower_node/README.md) から以下を設定します。 +[controller_node](../autoware_trajectory_follower_node/README.md)から以下を設定します。 -- `autoware_planning_msgs/Trajectory`: 追従する基準軌道 -- `nav_msgs/Odometry`: 自車位置と速度に関する情報 +- `autoware_planning_msgs/Trajectory` : 追従する目標軌道 +- `nav_msgs/Odometry`: 現在の自車位置と速度情報 ## 出力 -次の情報を含むラテラル出力をコントローラーノードに返します。 +コントローラノードに次の項目を含むLateralOutputを返します。 -- `autoware_control_msgs/Lateral`: 目標ステアリングアングル +- `autoware_control_msgs/Lateral`: 目標ステアリング角 - LateralSyncData - - ステアリングアングルの収束 -- `autoware_planning_msgs/Trajectory`: 自車に対する予測パス + - ステアリング角収束 +- `autoware_planning_msgs/Trajectory`: 自車の予測パス + diff --git a/control/autoware_shift_decider/README.md b/control/autoware_shift_decider/README.md index 3cd3a217d7769..a12c44c7aa0a6 100644 --- a/control/autoware_shift_decider/README.md +++ b/control/autoware_shift_decider/README.md @@ -1,13 +1,14 @@ -# シフトデリサイダー +# Shift Decider ## 目的 -`autoware_shift_decider`は、アッカーマン制御コマンドからシフトを決めるモジュールです。 +`autoware_shift_decider` は、アッカーマン制御コマンドからシフトを決定するためのモジュールです。 -## 内部構造とアルゴリズム +## 内部動作/アルゴリズム ### フローチャート + ```plantuml @startuml skinparam monochrome true @@ -37,68 +38,38 @@ stop ### 入力 -| 名称 | タイプ | 説明 | -| --------------------- | ------------------------------------- | -------------------- | -| `~/input/control_cmd` | `autoware_control_msgs::msg::Control` | 車両の制御コマンド。 | - -### 出力 - -**自動運転ソフトウェア** - -**更新履歴** - -- 2023年3月15日: ドキュメントの初回公開 - -**概要** - -このドキュメントは、Autoware の自動運転ソフトウェアのアーキテクチャ、機能、使用方法に関する包括的なガイドです。このソフトウェアは、センサーデータの収集、環境認識、経路計画、制御コマンドの生成など、自動運転システムのすべての重要なコンポーネントを提供します。 - -**アーキテクチャ** - -Autoware のアーキテクチャはモジュール化されており、次のコンポーネントで構成されています。 - -- **Perception (認識)**: カメラ、レーダー、LIDAR から受信したセンサーデータを処理し、自車位置と周囲環境のモデルを作成します。 -- **Planning (計画)**: 知覚された環境に基づいて、安全で効率的な経路を計画します。 -- **Control (制御)**: 計画された経路に従って車両を制御し、センサーデータとフィードバックを使用して適応します。 -- **Localization (自己位置推定)**: 車両の位置と姿勢をリアルタイムで追跡します。 - -**機能** +| 名前 | タイプ | 説明 | +| --------------------- | ------------------------------------- | ------------------------------------------------- | +| `~/input/control_cmd` | `autoware_control_msgs::msg::Control` | 車両の制御コマンド | -Autoware は以下を含む幅広い機能を提供します。 +### アウトプット -- **障害物検出と回避**: 歩行者、車両、その他の障害物を検出し、衝突を回避します。 -- **経路追従**: 計画された経路に沿って車両を正確に制御します。 -- **交通信号認識**: 交通信号を検出し、それらに従って動作します。 -- **駐車支援**: 車両の自動駐車を支援します。 -- **ビジョンベースの自己位置推定**: カメラ画像を使用して車両の位置と姿勢を推定します。 +このドキュメントでは、AutowareのPerceptionコンポーネントにおける点群処理パイプラインの最適化について説明します。パイプラインの最適化により、Perceptionコンポーネントの処理速度が向上し、レーダーデータの処理が高速化されます。 -**使用方法** +Autowareの点群処理パイプラインは、次のような主要なステップで構成されています。 -Autoware を使用するには、次の手順に従います。 +- `post resampling`による点群のダウンサンプリング +- 分類用の機能抽出 +- クラスタリング +- LIDAR点群とレーダーデータの融合 -1. ハードウェア(センサー、コンピューター、アクチュエーター)をインストールします。 -2. Autoware ソフトウェアをインストールし、構成します。 -3. 車両をキャリブレーションし、環境をマッピングします。 -4. シミュレーションまたは現実世界でシステムをテストします。 +現在、点群のダウンサンプリングは、Voxel Gridダウンサンプリングを使用して行われています。これは、処理速度を向上させるために軸ごとに均等に間隔の開いたキューブで点群を分割する手法です。しかし、この方法は非効率的で、処理速度を大幅に低下させる可能性があります。 -**注意事項** +今回の最適化では、Voxel Gridダウンサンプリングを、より効率的なOctreeダウンサンプリング手法に置き換えました。Octreeは、空間を再帰的に8つのサブオクトリーに分割するデータ構造です。点群をOctreeに挿入すると、再帰的にOctreeをトラバースして、基準距離よりも密度の高いセルの点群をダウンサンプリングします。これにより、Voxel Gridダウンサンプリングよりもはるかに効率的にダウンサンプリングを行うことができます。 -- 自動運転システムは常に慎重に使用し、道路交通法を遵守する必要があります。 -- Autoware は開発中のソフトウェアであり、常に改善されています。 -- システムを十分にテストせずに使用しないでください。 +最適化の結果、Perceptionコンポーネントの処理速度が大幅に向上しました。レーダーデータの処理速度も向上しました。これは、Perceptionコンポーネントがレーダーデータをより効率的に処理できるようになったからです。 -**免責事項** +この最適化は、AutowareのRobust Perception Planningコンポーネントの将来のリリースに統合される予定です。 -Autoware はオープンソースソフトウェアであり、いかなる保証もなしに提供されています。ユーザーは自己責任でこのソフトウェアを使用するものとします。 +| Name | Type | Description | +| ------------------ | ----------------------------------------- | ---------------------------------- | +| `~output/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 前進・後退用のギア | -| Name | Type | Description | -| ------------------ | ----------------------------------------- | ----------------------- | -| `~output/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 前進 / 後退走行時のギア | +## パラメーター -## パラメータ +なし. -なし +## 前提条件 / 制限事項 -## 仮定 / 制限事項 +策定中. -TBD diff --git a/control/autoware_smart_mpc_trajectory_follower/README.md b/control/autoware_smart_mpc_trajectory_follower/README.md index 4b13b25c25532..2b1ec074fd509 100644 --- a/control/autoware_smart_mpc_trajectory_follower/README.md +++ b/control/autoware_smart_mpc_trajectory_follower/README.md @@ -1,16 +1,8 @@ -# マークダウン形式で書かれた自動運転ソフトウェアに関するドキュメントの日本語訳 +## スマート MPC Trajectory Follower -

- - - -

- -## スマート MPC トレジャクサリー追従 - -スマート MPC (Model Predictive Control) は、モデル予測制御と機械学習を組み合わせた制御アルゴリズムです。モデル予測制御の利点を継承すると同時に、機械学習を利用したデータドリブン手法でモデリングの難しさを解決します。 +スマート MPC(Model Predictive Control)は、モデル予測制御と機械学習を組み合わせた制御アルゴリズムです。モデル予測制御の強みを継承しながら、データ駆動手法を用いて機械学習でそのモデリングの難しさを解決しています。 -この技術により、環境データの収集が可能な限り、実装コストの高いモデル予測制御を比較的容易に運用できます。 +この技術により、実装に時間のかかるモデル予測制御を、データ収集環境さえ整えば比較的手軽に扱うことが可能となります。

@@ -18,49 +10,51 @@

-## 提供されている機能 +## 提供される機能 -このパッケージは、パス追従制御向けのスマート MPC ロジックと、学習および評価の仕組みを提供します。これらの機能を以下に示します。 +このパッケージでは、経路追従制御向けのスマート MPC ロジック、および学習・評価メカニズムが提供されています。これらの機能を以下に示します。 -### iLQR/MPPI ベースのトレジャクサリー追従制御 +### iLQR/MPPI ベースの経路追従制御 -制御モードは "ilqr"、"mppi"、"mppi_ilqr" から選択でき、[mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml) の `mpc_parameter:system:mode` として設定できます。 -"mppi_ilqr" モードでは、iLQR の初期値が MPPI ソリューションによって与えられます。 +制御モードは「ilqr」、「mppi」、または「mppi_ilqr」から選択できます。[mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml)の`mpc_parameter:system:mode`に設定できます。「mppi_ilqr」モードでは、iLQR の初期値は MPPI ソリューションによって与えられます。 -> [!注意] -> デフォルト設定では、"mppi" モードのパフォーマンスがサンプル数の不足により制限されます。この問題は、GPU サポートを導入する継続的な作業によって解決されています。 +> [!NOTE] +> デフォルト設定では、「mppi」モードのパフォーマンスはサンプル数が不足しているため制限されています。この問題は、GPU サポートを導入するための進行中の作業で対処されています。 シミュレーションを実行するには、次のコマンドを実行します。 + ```bash ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autoware_map/sample-map-planning vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit trajectory_follower_mode:=smart_mpc_trajectory_follower ``` [!NOTE] +[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml)で設定した公称モデルで実行する場合は、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)で`trained_model_parameter:control_application:use_trained_model`を「false」に設定します。トレーニングされたモデルを使用して実行するには、`trained_model_parameter:control_application:use_trained_model`を「true」に設定しますが、トレーニングされたモデルは次の手順に従って生成する必要があります。 -> 名目モデルの[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml)が設定されている場合は、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)の`trained_model_parameter:control_application:use_trained_model`を`false`に設定してください。学習済みモデルを使用して実行するには、`trained_model_parameter:control_application:use_trained_model`を`true`に設定しますが、学習済みモデルは次の手順に従って生成する必要があります。 +### トレーニングされたモデルのトレーニングと制御への反映 -### モデルの学習と制御への反映 +トレーニングデータを取得するには、autowareを起動し、走行を実行し、次のコマンドでrosbagデータを記録します。 -学習データを収集するには、autowareを起動して、走行を行い、次のコマンドでrosbagデータを記録します。 ```bash ros2 bag record /localization/kinematic_state /localization/acceleration /vehicle/status/steering_status /control/command/control_cmd /control/trajectory_follower/control_cmd /control/trajectory_follower/lane_departure_checker_node/debug/deviation/lateral /control/trajectory_follower/lane_departure_checker_node/debug/deviation/yaw /system/operation_mode/state /vehicle/status/control_mode /sensing/imu/imu_data /debug_mpc_x_des /debug_mpc_y_des /debug_mpc_v_des /debug_mpc_yaw_des /debug_mpc_acc_des /debug_mpc_steer_des /debug_mpc_X_des_converted /debug_mpc_x_current /debug_mpc_error_prediction /debug_mpc_max_trajectory_err /debug_mpc_emergency_stop_mode /debug_mpc_goal_stop_mode /debug_mpc_total_ctrl_time /debug_mpc_calc_u_opt_time ``` -rosbagのディレクトリに[rosbag2.bash](./autoware_smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash)を移動させて、ディレクトリで下記コマンドを実行します +上記の recording の rosbag ディレクトリに `rosbag2.bash`(`./autoware_smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash`)を移動し、ディレクトリ上で以下のコマンドを実行します。 + ```bash bash rosbag2.bash ``` -rosbagデータをCSV形式に変換してモデルをトレーニングします。 +この機能は、rosbagデータをモデルのトレーニング用のCSV形式に変換します。 > [!NOTE] -> 実行時に大量の端末が自動的に開きますが、rosbagデータの変換が完了すると自動的に閉じられます。 -> このプロセスを開始してからすべての端末が閉じられるまで、Autowareは実行しないでください。 +> 実行時に多数のターミナルが自動的に開きますが、rosbagデータの変換が完了すると自動的に閉じます。 +> このプロセスを開始してからすべてのターミナルが閉じるまでの間は、Autowareを実行しないでください。 + +代わりに、Python環境で以下のコマンドを実行すると、同じ結果が得られます: -代わりに、Python環境で次のコマンドを実行することで同様の結果を得ることができます。 ```python from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model @@ -68,14 +62,14 @@ model_trainer = train_drive_NN_model.train_drive_NN_model() model_trainer.transform_rosbag_to_csv(rosbag_dir) ``` -`rosbag_dir` は rosbag ディレクトリを表します。 -この時、`rosbag_dir` 内のすべての CSV ファイルは最初に自動的に削除されます。 +ここで、`rosbag_dir`はrosbagディレクトリを表しています。現時点では、`rosbag_dir`内のすべてのCSVファイルは最初に自動的に削除されます。 + +次に、モデルのトレーニング方法について説明します。 +[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)内の`trained_model_parameter:memory_for_training:use_memory_for_training`が`true`に設定されている場合、トレーニングはLSTMを含むモデルに対して実行され、`false`に設定されている場合はトレーニングはLSTMを含まないモデルに対して実行されます。 +LSTMを使用する場合、セル状態と隠れ状態は時系列時系列データに基づいて更新され、予測に反映されます。 -モデルのトレーニングの方法について説明します。 -[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) の `trained_model_parameter:memory_for_training:use_memory_for_training` が `true` に設定されている場合、LSTM を含むモデルに対するトレーニングが行われ、`false` に設定されている場合、LSTM を含まないモデルに対するトレーニングが行われます。 -LSTM を使用すると、セル状態および隠れ状態は履歴時系列データに基づいて更新され、予測に反映されます。 +トレーニングと検証に使用されるrosbagディレクトリのパス、`dir_0`、`dir_1`、`dir_2`、...、`dir_val_0`、`dir_val_1`、`dir_val_2`、...モデルを保存するディレクトリ`save_dir`にモデルを保存できます。Python環境では次のようにします。 -トレーニングと検証に使用される rosbag ディレクトリのパス (`dir_0`、`dir_1`、`dir_2`、`dir_val_0`、`dir_val_1`、`dir_val_2`...) と、モデルを保存するディレクトリ (`save_dir`) から、Python 環境で次のようにモデルを保存できます。 ```python from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model @@ -92,30 +86,33 @@ model_trainer.get_trained_model() model_trainer.save_models(save_dir) ``` -`add_mode`が指定されなかった場合、または検証データが追加されなかった場合、トレーニングデータはトレーニングおよび検証に使用するために分割されます。 +`add_mode`が指定されていない場合、または検証データが追加されていない場合、トレーニングデータはトレーニングと検証に使用するために分割されます。 + +多項式回帰を実行した後、NNは次のように残差に基づいてトレーニングできます。 -多項式回帰の実行後は、次のとおり、NNを残差でトレーニングできます。 ```python model_trainer.get_trained_model(use_polynomial_reg=True) ``` -> [!NOTE] -> デフォルト設定では、回帰はいくつかの事前に選択された多項式によって実行されます。 -> `get_trained_model` の引数として `use_selected_polynomial=False` が設定されている場合、`deg` 引数によって使用される多項式の最大次数を設定できます。 +>[!NOTE] +>既定の設定では、回帰は複数の事前に選択された多項式によって実行されます。 +> `get_trained_model` の引数として `use_selected_polynomial=False` が設定されている場合、 `deg` 引数により、使用される多項式の最大次数を設定できます。 + +多項式回帰のみが実行され、NN モデルが使用されていない場合は、次のコマンドを実行します: -NN モデルが使用されず、多項式回帰のみが実行される場合は、次のコマンドを実行します: ```python model_trainer.get_trained_model(use_polynomial_reg=True,force_NN_model_to_zero=True) ``` -`model_for_test_drive.pth`と`polynomial_reg_info.npz`を`save_dir`からホームディレクトリに移動し、Trained Modelの反映のため、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)内の`trained_model_parameter:control_application:use_trained_model`を `true` に設定します。 +`model_for_test_drive.pth`および`polynomial_reg_info.npz`を`save_dir`に保存し、ホームディレクトリに設定し、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)の`trained_model_parameter:control_application:use_trained_model`を`true`に設定して、制御されたトレーニングモデルを反映させます。 -### 性能評価 +### パフォーマンス評価 + +ここでは、一例として、サンプル車両のホイールベースが2.79mであるときに、不適切な値2.0mがコントローラー側に与えられたときの適応性能の検証について説明します。 +コントローラーにホイールベースとして2.0mを与えるには、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml)の`nominal_parameter:vehicle_info:wheel_base`の値を2.0に設定し、次のコマンドを実行します。 -ここではサンプル車両のホイールベースが2.79 mであるところ、コントローラ側に2.0 mという誤った値を入力した場合の適応性能の検証を例として示します。 -コントローラに2.0 mのホイールベースを与えるため、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml)の`nominal_parameter:vehicle_info:wheel_base`の値を2.0に設定し、次のコマンドを実行します。 ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache @@ -123,17 +120,18 @@ python3 -m smart_mpc_trajectory_follower.clear_pycache #### Autoware でのテスト -トレーニング前に公称モデルで Autoware に対する制御テストを実行するには、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) 内の `trained_model_parameter:control_application:use_trained_model` が `false` であることを確認し、「iLQR/MPPI に基づく Trajectory 以下の制御」で説明した方法で Autoware を起動します。今回は、次のルートをテストに使用します。 +トレーニング前に Autoware において公称モデルによる制御テストを実行するには、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) 内の `trained_model_parameter:control_application:use_trained_model` が `false` になっていることを確認し、「iLQR/MPPI に基づく軌道追従制御」の説明どおりに Autoware を起動します。今回は、以下のルートがテストに使用されます。 -

+

-ROS バッグを記録し、ROS バッグを記録し、「モデルのトレーニングと制御への反映」で説明した方法でモデルをトレーニングし、生成されたファイル `model_for_test_drive.pth` と `polynomial_reg_info.npz` をホームディレクトリに移動します。サンプルモデルは [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) 内の `trained_model_parameter:memory_for_training:use_memory_for_training` が `true` に設定された条件下で動作します。[sample_models/wheel_base_changed](./sample_models/wheel_base_changed/) から取得できます。 +rosbag を記録して、「モデルのトレーニングと制御への反映」の説明に従ってモデルをトレーニングし、生成されたファイル `model_for_test_drive.pth` と `polynomial_reg_info.npz` をホームディレクトリに移動します。[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) 内の `trained_model_parameter:memory_for_training:use_memory_for_training` が `true` に設定されている条件で機能するサンプルモデルは、[sample_models/wheel_base_changed](./sample_models/wheel_base_changed/) で入手できます。 > [!NOTE] -> トレーニングに使用されるデータは少量ですが、簡略化するために、このデータ量でどの程度のパフォーマンスが向上するかを確認します。 +> トレーニングに使用されたデータは小さいですが、単純化のために、この量のデータでどれくらいのパフォーマンスが向上できるかを確認します。 + +ここで取得したトレーニング済みモデルを使用して制御するには、`trained_model_parameter:control_application:use_trained_model` を `true` に設定し、同様に Autoware を起動して、rosbag を記録しながら同じルートを走行します。 +走行が完了した後、rosbag ファイルを「モデルのトレーニングと制御への反映」の説明に従って CSV 形式に変換します。`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb` 内の `lateral_error_visualize` 関数を、公称モデルの rosbag ファイル `rosbag_nominal` およびトレーニングモデルの rosbag ファイル `rosbag_trained` に対して、以下のように実行すると、2 つのモデルの横方向偏差のグラフが得られます。 -ここで取得したトレーニング済みモデルを使用して制御するには、`trained_model_parameter:control_application:use_trained_model` を `true` に設定し、同様に Autoware を起動し、同じルートで ROS バッグを記録しながら走行します。 -走行が完了したら、「モデルのトレーニングと制御への反映」で説明した方法を使用して ROS バッグファイルを CSV 形式に変換します。`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb` で `lateral_error_visualize` 関数を公称の ROS バッグファイル `rosbag_nominal` とトレーニング済み ROS バッグファイル `rosbag_trained` に対して実行すると、次のように横方向偏差のグラフを取得できます。 ```python lateral_error_visualize(dir_name=rosbag_nominal,ylim=[-1.2,1.2]) @@ -147,27 +145,23 @@ lateral_error_visualize(dir_name=rosbag_trained,ylim=[-1.2,1.2]) -#### Pythonシミュレータでのテスト +#### Pythonシミュレーターでのテスト -まず、Pythonシミュレータでホイールベースを2.79 mにするには、次のファイルを作成し、名前を`sim_setting.json`にして`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator`に保存します。 +最初に、Pythonシミュレーターでホイールベースを2.79 mにするには、次のファイルを作成して、`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator` に `sim_setting.json` という名前で保存します: -``` -{ - "wheelbase": 2.79 -} -``` ```json { "wheel_base": 2.79 } ``` -次に、`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator` に移動した後、以下のコマンドを実行してパイソンシミュレータ上でスラローム走行をノミナル制御を使用してテストします。 +次に、`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator` に移動した後、次のコマンドを実行して基準制御によるパイロンスラローム走行を Python シミュレータでテストします。 + ```bash python3 run_python_simulator.py nominal_test ``` -運転の結果は `test_python_nominal_sim` に格納されます。 +走行結果は`test_python_nominal_sim`に保存されます。 以下の結果が得られました。 @@ -175,17 +169,18 @@ python3 run_python_simulator.py nominal_test

-最上段の中央は横方向逸脱量を表します。 +上段の真ん中は横方向の偏差を表します。 + +フィギュアイエイト走行データをピュアパーシュートの制御下で行われるよう、trainingを実行するには、次のコマンドを実行します。 -純粋追従の制御下で、8の字走行データを使用してトレーニングを実行するには、以下のコマンドを実行します。 +フィギュアイエイトの走行と取得されたモデルに基づく走行を使用して、trainingを実行するには、次のコマンドを実行します。 -得られたモデルに基づく8の字走行と運転を使用してトレーニングを実行するには、以下のコマンドを実行します。 ```bash python3 run_python_simulator.py ``` -運転の結果は `test_python_trined_sim` に格納されています。 +Drivingの結果は `test_python_trined_sim` に保存されます。 [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) の `trained_model_parameter:memory_for_training:use_memory_for_training` が `true` に設定された場合、以下の結果が得られました。 @@ -199,65 +194,68 @@ python3 run_python_simulator.py

-横方向偏差が大幅に改善されていることがわかります。 -ただし、LSTM の有無による運転の違いはあまり明らかではありません。 +横偏差が大幅に改善されたことがわかります。 +ただし、LSTMの有無によるDrivingの違いはあまり明らかではありません。 -違いを明確にするために、例として `steer_time_delay` などのパラメータを試行できます。 +違いを確認するために、たとえば `steer_time_delay` などのパラメータを試すことができます。 + +最初に、ノミナルモデル設定をデフォルト値に復元するには、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) の `nominal_parameter:vehicle_info:wheel_base` の値を 2.79 に設定し、次のコマンドを実行します。 -まず、公称モデル設定の値をデフォルト値に戻すために、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) の `nominal_parameter:vehicle_info:wheel_base` の値を 2.79 に設定して、次のコマンドを実行します。 ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache ``` -次に、`sim_setting.json` を次のように修正します: +次に、`sim_setting.json` を次のように修正します。 + ```json { "steer_time_delay": 1.01 } ``` -このように、`steer_time_delay` を 1.01 秒に設定して実験を実施します。 +この方法により、`steer_time_delay` が 1.01 秒に設定されたときに実験の実行が行われます。 -公称モデルを使用した走行の結果は次のとおりです。 +公称モデルを使用した運転の結果は以下のとおりです。

-LSTM を使用した学習済みモデルを使用した走行の結果は次のとおりです。 +LSTM でトレーニングされたモデルを使用した運転の結果は以下のとおりです。

-LSTM を使用しない学習済みモデルを使用した走行の結果は次のとおりです。 +LSTM なしでトレーニングされたモデルを使用した運転の結果は以下のとおりです。

-LSTM を含むモデルを使用したパフォーマンスは、含まないモデルを使用したパフォーマンスよりも大幅に良好であることがわかります。 +LSTM を含むモデルが、含まないモデルよりも性能が大幅に向上していることがわかります。 Python シミュレータに渡すことができるパラメータは次のとおりです。 -| パラメータ | 型 | 説明 | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | -| steer_bias | 浮動 | ステアリングバイアス [rad] | -| steer_rate_lim | 浮動 | ステアリングレートの制限 [rad/s] | -| vel_rate_lim | 浮動 | 加速度制限 [m/s^2] | -| wheel_base | 浮動 | ホイールベース [m] | : | -| steer_dead_band | 浮動 | ステアリングデッドバンド [rad] | -| adaptive_gear_ratio_coef | リスト[浮動] | タイヤ角からステアリングホイール角への速度依存ギア比に関する情報を指定する 6 個の長さを持つフローティングポイントのリスト | -| acc_time_delay | 浮動 | 加速度遅延時間 [s] | -| steer_time_delay | 浮動 | ステアリング遅延時間 [s] | -| acc_time_constant | 浮動 | 加速度時定数 [s] | -| steer_time_constant | 浮動 | ステアリング時定数 [s] | -| accel_map_scale | 浮動 | 加速度入力値から実際の加速度の実現への対応する歪みを拡大するパラメータ。
対応情報は `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/accel_map.csv` に格納されています。 | -| acc_scaling | 浮動 | 加速度スケーリング | -| steer_scaling | 浮動 | ステアリングスケーリング | -| vehicle_type | 整数 | 0 から 4 までの値を取ります。
各車両タイプについては以下で説明します。 | - -例えば、シミュレーション側に0.01 [rad]のステア係数バイアスと0.001 [rad]のステアデッドバンドを与える場合は、`sim_setting.json`を次のように編集します。 +| パラメータ | タイプ | 説明 | +| ------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| steer_bias | float | ステアリング バイアス [rad] | +| steer_rate_lim | float | ステアリング レート リミット [rad/s] | +| vel_rate_lim | float | 加速度リミット [m/s^2] | +| wheel_base | float | ホイール ベース [m] | +| steer_dead_band | float | ステアリング デッドバンド [rad] | +| adaptive_gear_ratio_coef | list[float] | タイヤ角度からステアリング ホイール角度への速度依存ギアレンジ情報を指定する長さ 6 のフロートのリスト。 | +| acc_time_delay | float | 加速度遅延 [s] | +| steer_time_delay | float | ステアリング遅延 [s] | +| acc_time_constant | float | 加速度時定数 [s] | +| steer_time_constant | float | ステアリング時定数 [s] | +| accel_map_scale | float | `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/accel_map.csv` に対応情報が格納され、加速度入力値から実際の加速度実現値への歪みを拡大するパラメーター。 | +| acc_scaling | float | 加速度スケーリング | +| steer_scaling | float | ステアリング スケーリング | +| vehicle_type | int | 事前に設計された車両タイプに対して 0 ~ 4 の値を取ります。
各車両タイプの説明を以下に示します。 | + +例えば、シミュレータ側にステアバイアス0.01 [rad]、ステアデッドバンド0.001 [rad]を与える場合、`sim_setting.json`を次のように編集します。 + ```json { "steer_bias": 0.01, "steer_dead_band": 0.001 } @@ -265,188 +263,184 @@ Python シミュレータに渡すことができるパラメータは次のと ##### vehicle_type_0 -この車両タイプは、コントローラーで使用される既定の車両タイプと一致します。 +この車両タイプは、制御で使用される既定の車両タイプと一致します。 -## 自動運転ソフトウェアのパラメータ設定 - -| パラメータ | 値 | -| ------------------------ | ---- | -| ホイールベース | 2.79 | -| 加速度応答遅れ時間 | 0.1 | -| ステアリング応答遅れ時間 | 0.27 | -| 加速度応答時間定数 | 0.1 | -| ステアリング応答時間定数 | 0.24 | -| 加速度スケーリング | 1.0 | +| パラメータ | 値 | +| ---------------------- | ---- | +| wheel_base | 2.79 | +| acc_time_delay | 0.1 | +| steer_time_delay | 0.27 | +| acc_time_constant | 0.1 | +| steer_time_constant | 0.24 | +| acc_scaling | 1.0 | ##### vehicle_type_1 -このvehicle typeは大型バスを想定しています。 +この車種は大型バスを想定しています。 -## 自動運転ソフトウェアに関するドキュメントの翻訳 - -### パラメータ - -| パラメータ | 値 | -| ---------------------- | ---- | -| ホイールベース | 4.76 | -| 加速度タイム遅延 | 1.0 | -| ステアリングタイム遅延 | 1.0 | -| 加速度タイム定数 | 1.0 | -| ステアリングタイム定数 | 1.0 | -| 加速度スケーリング | 0.2 | +| パラメータ | 値 | +| ------------------- | ----- | +| ホイルベース | 4.76 | +| ACC時間遅れ | 1.0 | +| ステアリング時間遅れ | 1.0 | +| ACC時定数 | 1.0 | +| ステアリング時定数 | 1.0 | +| ACCスケーリング | 0.2 | ##### vehicle_type_2 -この車両タイプは、小型バスを想定しています。 +この車両タイプは、小型バス向けです。 -| パラメータ | 値 | -| ------------------------ | ---- | -| ホイールベース | 4.76 | -| 加速度遅延時間 | 0.5 | -| 操舵遅延時間 | 0.5 | -| 加速度タイムコンスタント | 0.5 | -| 操舵タイムコンスタント | 0.5 | -| 加速度スケーリング | 0.5 | +| パラメータ | 値 | +| ------------------------ | --- | +| ホイールベース | 4.76 | +| 速度制御系時間遅延 | 0.5 | +| 旋回制御系時間遅延 | 0.5 | +| 速度制御系時定数 | 0.5 | +| 旋回制御系時定数 | 0.5 | +| 速度制御系ゲイン | 0.5 | ##### vehicle_type_3 -この車両種は小型車両を想定しています。 - -## 自動運転ソフトウェア - -### パラメータ +この車両タイプは小型車両を想定しています。 -| パラメータ | 値 | -| ------------------ | ----- | -| ホイーベース | 1.335 | -| 加速度時間遅延 | 0.3 | -| 操舵時間遅延 | 0.3 | -| 加速度時間定数 | 0.3 | -| 操舵時間定数 | 0.3 | -| 加速度スケーリング | 1.5 | +| パラメータ | 値 | +| ------------------- | ----- | +| ホイールベース | 1.335 | +| 加速度タイムディレイ | 0.3 | +| ステアリングタイムディレイ | 0.3 | +| 加速度タイムコンスタント | 0.3 | +| ステアリングタイムコンスタント | 0.3 | +| 加速度スケーリング | 1.5 | -##### vehicle_type_4 +##### véhicule_type_4 この車両タイプは小型ロボット向けです。 -| パラメータ | 値 | -| -------------------- | ----- | -| ホイールベース | 0.395 | -| 加速遅延時間 | 0.2 | -| ステアリング遅延時間 | 0.2 | -| 加速時間定数 | 0.2 | -| ステアリング時間定数 | 0.2 | -| 加速度スケーリング | 1.0 | +| パラメータ | 値 | +| --------------------- | ---- | +| wheel_base | 0.395 | +| acc_time_delay | 0.2 | +| steer_time_delay | 0.2 | +| acc_time_constant | 0.2 | +| steer_time_constant | 0.2 | +| acc_scaling | 1.0 | -#### Pythonシミュレーターでの自動テスト +#### Pythonシミュレータでの自動テスト -ここでは、シミュレーション側にモデルパラメータの事前定義された範囲を提供し、制御側に定数モデルパラメータを提供することで、適応性能をテストする方法について説明します。 +ここで、制御側に一定のモデルパラメータが与えられている間、シミュレーション側にあらかじめ定義された範囲のモデルパラメータを与えることで、適応性能をテストする方法について説明します。 + +たとえば、[run_sim.py](./autoware_smart_mpc_trajectory_follower/python_simulator/run_sim.py)で設定されたパラメータ変更範囲内で運転実験を実行するには、`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator`に移動し、次のコマンドを実行します。 -[run_sim.py](./autoware_smart_mpc_trajectory_follower/python_simulator/run_sim.py)で設定されたパラメータ変更範囲内で走行実験を実行するには、`control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator`に移動し、次のコマンドを実行します。 ```bash python3 run_sim.py --param_name steer_bias ``` -実験手順はステアバイアスについて説明しましたが、他のパラメーターでも同様の方法を使用できます。 +ステア・バイアスの実験手順を以下に示します。同じ手法を他のパラメータにも使用できます。 + +制限を除くすべてのパラメータのテストを実行するには、次のコマンドを実行します。 -一度に制限値以外のすべてのパラメーターのテストを実行するには、次のコマンドを実行します: ```bash python3 run_auto_test.py ``` -Auto_testの実行結果を`auto_test`ディレクトリに保存しています。 -実行が完了したら、[plot_auto_test_result.ipynb](./autoware_smart_mpc_trajectory_follower/python_simulator/plot_auto_test_result.ipynb)を実行して次の結果を取得してください。 +テスト結果は `auto_test` ディレクトリに格納されています。 +実行が完了すると、[plot_auto_test_result.ipynb](./autoware_smart_mpc_trajectory_follower/python_simulator/plot_auto_test_result.ipynb) を実行することで以下の結果を得ることができます。

-オレンジの線は純粋追従のフィギュラエイト走行を使用してトレーニングされた中間モデルを示しており、青い線は中間モデルとフィギュラエイト走行の両方からのデータを使用してトレーニングされた最終モデルを示しています。 -ほとんどの場合、十分な性能が得られますが、大型バスを想定した`vehicle_type_1`では、横方向逸脱量はおよそ2 mで、納得のいくものではありません。 - -`run_sim.py`で次のパラメータを設定できます。 +オレンジの線は8の字走行による純粋追求を使用して学習した中間モデルを表しており、青い線は中間モデルと8の字走行の両方からのデータを使用して学習した最終モデルを表しています。 +ほとんどの場合で十分な性能が得られていますが、大型バスを想定している `vehicle_type_1` については、横方向の逸脱が約2m程度生じていることが確認されており、十分ではありません。 -| パラメータ | 型 | 説明 | -| ------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| USE_TRAINED_MODEL_DIFF | bool | トレーニングされたモデルの導関数が制御に反映されるか? | -| DATA_COLLECTION_MODE | DataCollectionMode | どの方式でトレーニングデータを収集するか
"DataCollectionMode.ff": フィードフォワード入力で直線走行
"DataCollectionMode.pp": ピュアパーシュート制御で8の字走行
"DataCollectionMode.mpc": mpcでスラローム走行 | -| USE_POLYNOMIAL_REGRESSION | bool | NNの前に多項式回帰を実行するか? | -| USE_SELECTED_POLYNOMIAL | bool | USE_POLYNOMIAL_REGRESSIONがTrueの場合、あらかじめ選択された多項式のみを使用して多項式回帰を実行する。
多項式の選択は、車両の公称モデルに基づくいくつかパラメータのシフトを吸収できるように意図されている。 | +`run_sim.py` では以下のパラメータを設定できます: -> [!注意] > `run_sim.py` を実行すると、`run_sim.py` で設定された `use_trained_model_diff` が [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) で設定された `trained_model_parameter:control_application:use_trained_model_diff` より優先されます。 +| パラメーター | 型 | 説明 | +|---|---|---| +| USE_TRAINED_MODEL_DIFF | bool | 学習済みモデルの微分を制御に反映するか | +| DATA_COLLECTION_MODE | DataCollectionMode | 学習データの収集に使用される方法
"DataCollectionMode.ff": フィードフォワード入力を用いた直線走行
"DataCollectionMode.pp": ピュアパースート制御を用いた8の字走行
"DataCollectionMode.mpc": mpcを用いたスラローム走行 | +| USE_POLYNOMIAL_REGRESSION | bool | NNの前処理として多項式回帰を実行するか | +| USE_SELECTED_POLYNOMIAL | bool | USE_POLYNOMIAL_REGRESSION がTrueの場合、事前選択された一部の多項式のみを使用して多項式回帰を実行する。
多項式の選択は、車両の公称モデルに基づいて、パラメーターシフトの一部を吸収できることを目的としている。 | +| FORCE_NN_MODEL_TO_ZERO | bool | NNモデルをゼロに強制するか(つまり、NNモデルの寄与を消去するか)。
USE_POLYNOMIAL_REGRESSIONがTrueの場合、FORCE_MODEL_TO_ZEROをTrueに設定すると、制御が多項式回帰の結果のみを反映し、NNモデルは使用しなくなる。 | +| FIT_INTERCEPT | bool | 多項式回帰にバイアスを含めるか。
Falseの場合、一次以上の多項式で回帰を実行する。 | +| USE_INTERCEPT | bool | バイアスを含む多項式回帰を実行した場合、結果として得られたバイアス情報を採用するか破棄するか。
FIT_INTERCEPTがTrueの場合にのみ意味を持つ。
Falseの場合、バイアスを含む多項式回帰でバイアスを破棄し、NNモデルがバイアステームを除去できると期待される。 | -#### Pure Pursuit の走行データのカーネル密度推定 +```markdown +[!NOTE] +`run_sim.py`が実行されると、`run_sim.py`で設定された`use_trained_model_diff`は、[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)で設定された`trained_model_parameter:control_application:use_trained_model_diff`よりも優先されます。 -Pure Pursuit 走行から取得したデータの分布は、カーネル密度推定を使用して表示できます。これを行うには、[density_estimation.ipynb](./autoware_smart_mpc_trajectory_follower/python_simulator/density_estimation.ipynb) を実行します。 +#### ピュア・パーシュート走行データのカーネル密度推定 -密度推定の最小値と走行結果の横方向逸脱の相関関係は低くなっています。横方向逸脱値をより適切に予測するスカラー指標を開発中です。 +ピュア・パーシュート走行から得られたデータの分布は、カーネル密度推定を使用して表示できます。これを行うには、[density_estimation.ipynb](./autoware_smart_mpc_trajectory_follower/python_simulator/density_estimation.ipynb)を実行します。 -## 公称パラメータの変更とその再ロード +密度推定の最小値と走行結果の横方向偏差との相関は低いです。横方向偏差の値をより適切に予測するスカラーインジケーターを現在開発中です。 -車両モデルの公称パラメータは、[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) ファイルを編集することで変更できます。 -公称パラメータを変更した後、次のコマンドを実行してキャッシュを削除する必要があります。 +## 公称パラメータの変更とその再読み込み -```bash -rm ~/.cache/autoware/autoware_smart_mpc_trajectory_follower/params/ +車両モデルの公称パラメータは、ファイル[nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml)を編集することで変更できます。 +公称パラメータを変更したら、以下のコマンドを実行してキャッシュを削除する必要があります。 ``` + ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache ``` -**通常パラメータは次のとおりです。** +標準パラメータには、次に示すものがあります。 + +| パラメータ | 型 | 説明 | +|---|---|---| +| `nominal_parameter:vehicle_info:wheel_base` | float | ホイールベース [m] | +| `nominal_parameter:acceleration:acc_time_delay` | float | 加速時間遅延 [s] | +| `nominal_parameter:acceleration:acc_time_constant` | float | 加速時間定数 [s] | +| `nominal_parameter:steering:steer_time_delay` | float | 操舵時間遅延 [s] | +| `nominal_parameter:steering:steer_time_constant` | float | 操舵時間定数 [s] | -| パラメータ | 型 | 説明 | -| ------------------------------------------------ | ----- | -------------------------- | -| nominal_parameter:vehicle_info:wheel_base | float | ホイールベース [m] | -| nominal_parameter:acceleration:acc_time_delay | float | 加速度タイム遅延 [s] | -| nominal_parameter:acceleration:acc_time_constant | float | 加速度タイム定数 [s] | -| nominal_parameter:steering:steer_time_delay | float | ステアリングタイム遅延 [s] | -| nominal_parameter:steering:steer_time_constant | float | ステアリングタイム定数 [s] | +## 制御パラメータの変更とその再読み込み -## コントロールパラメータの変更と再読み込み +制御パラメータはファイル [mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml) と [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) を編集して変更できます。Autoware を再起動することでパラメータの変更を反映できますが、次のコマンドにより Autoware を実行したまま変更を行うことができます。 -制御パラメータは、ファイル[mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml)と[trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml)を変更することで変更できます。 -パラメータの変更はAutowareを再起動することで反映できますが、次のコマンドを使用することでAutowareを実行中のまま反映できます。 ```bash ros2 topic pub /pympc_reload_mpc_param_trigger std_msgs/msg/String "data: ''" --once ``` -主な制御パラメータは次のとおりです。 +制御パラメータにおける主要なパラメータは以下の通りです。 ### `mpc_param.yaml` -| パラメータ | 型 | 説明 | -| ------------------------------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| mpc_parameter:system:mode | str | 制御モード
"ilqr": iLQRモード
"mppi": MPPIモード
"mppi_ilqr": iLQRの初期値はMPPIソリューションによって与えられる | -| mpc_parameter:cost_parameters:Q | list[float] | 状態のステージコスト
長さ8のリスト、順に: 直線偏差、横方向偏差、速度偏差、偏航角偏差、加速度偏差、ステア偏差、加速度入力偏差、ステア入力偏差のコスト重み | -| mpc_parameter:cost_parameters:Q_c | list[float] | 状態の次のtiming_Q_cに相当するhorizon内のコスト
リストの構成要素の対応はQの場合と同じ | -| mpc_parameter:cost_parameters:Q_f | list[float] | 状態の終端コスト
リストの構成要素の対応はQの場合と同じ | -| mpc_parameter:cost_parameters:R | list[float] | 長さ2のリスト、R[0]は加速度入力値の変化率のコストの重み、R[1]はステア入力値の変化率のコストの重み | -| mpc_parameter:mpc_setting:timing_Q_c | list[int] | 状態のステージコストがQ_cに設定されるhorizon番号 | -| mpc_parameter:compensation:acc_fb_decay | float | MPC外部のコンペンセータの観測された加速度値と予測加速度値の間の誤差を積分する際の減哀係数 | -| mpc_parameter:compensation:acc_fb_gain | float | 加速度補償のゲイン | -| mpc_parameter:compensation:max_error_acc | float | 最大加速度補償 (m/s^2) | -| mpc_parameter:compensation:steer_fb_decay | float | MPC外部のコンペンセータにおける観測ステアリング値と予測ステアリング値の間の誤差を積分する際の減衰係数 | -| mpc_parameter:compensation:steer_fb_gain | float | ステアリング補償のゲイン | -| mpc_parameter:compensation:max_error_steer | float | 最大ステアリング補償 (rad) | +| パラメータ | 型 | 説明 | +| -------------------------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| mpc_parameter:system:mode | str | 制御モード
"ilqr": iLQR モード
"mppi": MPPI モード
"mppi_ilqr": iLQR の初期値は MPPI ソリューションによって指定される | +| mpc_parameter:cost_parameters:Q | list[float] | 状態のステージコスト
長さ 8 のリストで、順番に: 直進偏差、横方向偏差、速度偏差、ヨー角偏差、加速度偏差、ステアリング偏差、加速度入力偏差、ステアリング入力偏差のコスト重み | +| mpc_parameter:cost_parameters:Q_c | list[float] | 状態のタイミング Q_c に対応する地平上のコスト
リストのコンポーネントの対応関係は Q と同じ | +| mpc_parameter:cost_parameters:Q_f | list[float] | 状態のターミネーションコスト
リストのコンポーネントの対応関係は Q と同じ | +| mpc_parameter:cost_parameters:R | list[float] | 長さ 2 のリストで、R[0] は加速度入力値の変化率のコストの重みであり、R[1] はステアリング入力値の変化率のコストの重みである | +| mpc_parameter:mpc_setting:timing_Q_c | list[int] | 状態のステージコストが Q_c に設定されるような地平の数 | +| mpc_parameter:compensation:acc_fb_decay | float | MPC 外部のコンペンセータにおける観測加速度値と予測加速度値の誤差を積分する減衰係数 | +| mpc_parameter:compensation:acc_fb_gain | float | 加速度補償のゲイン | +| mpc_parameter:compensation:max_error_acc | float | 最大加速度補償 (m/s^2) | +| mpc_parameter:compensation:steer_fb_decay | float | MPC 外部のコンペンセータにおける観測ステアリング値と予測ステアリング値の誤差を積分する減衰係数 | +| mpc_parameter:compensation:steer_fb_gain | float | ステアリング補償のゲイン | +| mpc_parameter:compensation:max_error_steer | float | 最大ステアリング補償 (rad) | ### `trained_model_param.yaml` -| パラメータ | 型 | 説明 | -| ------------------------------------------------------------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| trained_model_parameter:control_application:use_trained_model | bool | 学習済みモデルが制御に反映されるかどうかを示します。 | -| trained_model_parameter:control_application:use_trained_model_diff | bool | 学習済みモデルの微分値が制御に反映されるかどうかを示します。
use_trained_modelがTrueの場合にのみ意味があり、Falseの場合は、運動の方程式の微分には公称モデルが使用され、学習済みモデルは予測にのみ使用されます。 | -| trained_model_parameter:memory_for_training:use_memory_for_training | bool | 学習のためにLSTMを含むモデルを使用するかどうかを示します。 | -| trained_model_parameter:memory_for_training:use_memory_diff | bool | LSTMの前時点でのセル状態および隠れ状態に対する微分が制御に反映されるかどうかを示します。 | +| パラメータ | 型 | 説明 | +|---|---|---| +| `trained_model_parameter:control_application:use_trained_model` | bool | 学習されたモデルを制御に反映させるかどうか | +| `trained_model_parameter:control_application:use_trained_model_diff` | bool | 学習されたモデルの微分を制御に反映させるかどうか
`use_trained_model` が True の場合にのみ意味を持ち、False の場合は、動力学の微分には公称モデルが使用され、学習されたモデルは予測のみに使用されます | +| `trained_model_parameter:memory_for_training:use_memory_for_training` | bool | 学習用に LSTM を含むモデルを使用するかどうか | +| `trained_model_parameter:memory_for_training:use_memory_diff` | bool | LSTM の以前の時刻におけるセル状態と隠れ状態に対する微分を制御に反映させるかどうか | -## 減速停止モードの解除要求 +## 停止モードを解除する要求 + +予測した経路が目標の経路から大きく逸脱すると、システムは停止モードに入り、車両は動作を停止します。 +停止モードを解除し、車両を再度走行可能にするには、次のコマンドを実行します: -予測軌跡がターゲット軌跡から大きく逸脱した場合、システムは減速停止モードに入り、車両は停止します。 -減速停止モードをキャンセルして車両を走行可能にするには、次のコマンドを実行します。 ```bash ros2 topic pub /pympc_stop_mode_reset_request std_msgs/msg/String "data: ''" --once @@ -454,10 +448,11 @@ ros2 topic pub /pympc_stop_mode_reset_request std_msgs/msg/String "data: ''" --o ## 制限事項 -- 初期位置/姿勢が目標から大きく離れている場合は開始できない可能性があります。 +- 初期位置/姿勢がターゲットから大きく離れている場合は開始できない場合があります。 + +- 最初の制御の開始時に、Planningコンポーネント/モジュールでnumba関数をコンパイルするまでしばらく時間がかかる場合があります。 -- 最初の制御の開始時に numba 関数をコンパイルするまで、Plannin の終了まで少し時間がかかる場合があります。 +- 目標近くの停止動作では、当社の制御が別の簡単な制御則に切り替わります。その結果、停止動作は目標近くでなければ動作しない場合があります。加速度マップが大幅にシフトすると、停止も困難になります。 -- ゴール付近の停止動作では、制御が別の簡単な制御則に切り替わります。結果として、停止動作はゴール付近を除いて機能しない場合があります。加速度マップが大幅にシフトしている場合も停止は困難です。 +- 重量級バスに使用される`vehicle_type_1`のように、ダイナミクスが公称モデルから大きく逸脱している場合は、制御がうまくいかない場合があります。 -- `vehicle_type_1` のように大型バス向けに想定されているように、ダイナミクスが公称モデルから大きく逸脱している場合、うまく制御できない可能性があります。 diff --git a/control/autoware_trajectory_follower_base/README.md b/control/autoware_trajectory_follower_base/README.md index c609e5b62be20..8e4c298f352d7 100644 --- a/control/autoware_trajectory_follower_base/README.md +++ b/control/autoware_trajectory_follower_base/README.md @@ -1,53 +1,52 @@ -## Trajectory Follower +# Trajectory Follower -これは `trajectory_follower` パッケージのデザインドキュメントです。 +これは`trajectory_follower`パッケージの設計文書です。 ## 目的/ユースケース - + -このパッケージは、`autoware_trajectory_follower_node` パッケージのノードが使用する縦方向および横方向コントローラのインターフェイスを提供します。 -縦方向および横方向の基本インターフェイスを導出することで、詳細なコントローラを実装できます。 +このパッケージは`autoware_trajectory_follower_node`パッケージのノードによって使用される縦横コントローラのインターフェイスを提供します。縦横の基本インターフェイスを派生させることで詳細なコントローラを実装できます。 ## 設計 -横方向と縦方向の基本インターフェイスクラスがあり、各アルゴリズムはこれを継承して実装されています。 -インターフェイスクラスには、次の基本機能があります。 +インターフェイスクラスとそれぞれから派生したアルゴリズムの縦横の基本インターフェイスクラスがあります。インターフェイスクラスにはベース関数がいくつかあります。 -- `isReady()`: 制御が計算の準備ができているかどうかを確認します。 -- `run()`: 制御コマンドを計算し、[Trajectory Followerノード](../autoware_trajectory_follower_node/README.md) に返します。これは継承されたアルゴリズムによって実装する必要があります。 -- `sync()`: 他のコントローラの実行結果を入力します。 - - 操舵角の収束 - - 操舵角が収束するまで停止を維持できます。 - - 速度の収束(現在使用されていません) +- `isReady()`: 制御が計算できるかどうかを確認します。 +- `run()`: 制御コマンドを計算して[Trajectory Follower Nodes](../autoware_trajectory_follower_node/README.md)に戻します。継承したアルゴリズムによって実装する必要があります。 +- `sync()`: 別のコントローラの実行結果を入力します。 + - ステアリング角度の収束 + - ステアリングの収束を待つまで停止を維持できます。 + - 速度の収束(現在使用されていません) -これらの関数がノード内でどのように機能するかについては、[Trajectory Followerノードの設計](../autoware_trajectory_follower_node/README.md#Design)を参照してください。 +ノード内でこれらの関数がどのように機能するかについては[Trajectory Follower ノードの設計](../autoware_trajectory_follower_node/README.md#Design)を参照してください。 -## 横方向(ステアリング)と縦方向(速度)制御の分離 +## 分離された横(ステアリング)および縦(速度)制御 -この縦方向コントローラは、横方向と縦方向の制御の役割が次のように分離されていることを前提としています。 +この縦横コントローラは、横と縦の役割が次のように分離されていると仮定しています。 -- 横方向制御は、完全な速度追従を仮定して、車両を軌道上に維持するための目標ステアリングを計算します。 -- 縦方向制御は、完全な軌跡追従を仮定して、軌跡速度に車両速度を維持するための目標速度/加速度を計算します。 +- 横の制御は、速度追従が完璧だと仮定して、車両を軌道上にとどめるための目標ステアリングを計算します。 +- 縦の制御は、軌道追従が完璧だと仮定して、車両の速度を目標の軌道速度で維持するための目標速度/加速度を計算します。 -理想的には、横方向と縦方向の制御を単一の混合問題として扱うことで、高性能を実現できます。対照的に、2つの理由から速度コントローラをスタンドアロン関数として提供する必要があります。以下に説明します。 +理想的には、横と縦の制御を単一の混合問題として扱うことで高いパフォーマンスを実現できます。対して、Velocity Controllerをスタンドアロン関数として提供する理由は次の2つです。 -### 縦方向の運動に対する複雑な要件 +### 縦方向の動作に対する複雑な要件 -人間が期待する縦方向の車両挙動は、単一の論理で表現するのが困難です。たとえば、停止直前の予想される挙動は、現在位置が停止線の前後にあるか、現在の速度が人間の動きを実現するための目標速度より速いか遅いかによって異なります。 +人間が期待する縦方向の車両の挙動は、単一のロジックで表現するのが困難です。たとえば、停止直前の期待される挙動は、自車位置が停止線の前/後ろにあるか、および人間らしい動きを実現するために現在の速度が達成する目標速度よりも高いか低いかによって異なります。 -さらに、一部の車両は極低速では自車の速度を測定するのが困難です。そのような場合、横方向の制御に影響を与えることなく縦方向制御の機能を向上させることができる設定が重要です。 +さらに、一部の車両は極低速では自車速度の測定が困難です。そのような場合、横の制御に影響を与えずに縦の制御機能を向上させる構成が重要です。 -縦方向制御には独自の特性やニーズが多くあります。それらを横方向制御から別々に設計することで、モジュールの結合度を低くし、メンテナンス性を向上させることができます。 +縦の制御には独自の特性とニーズが数多くあります。横の制御とは別に設計することで、モジュールの結合が少なくなり、保守性が向上します。 -### 横方向運動と縦方向運動の非線形結合 +### 横と縦の動きの非線形結合 -横縦混合制御問題は非常に複雑であり、高性能を実現するために非線形最適化を使用します。非線形最適化の収束を保証することは困難であるため、開発には単純な制御論理も必要です。 +横縦混合制御問題は非常に複雑で、高いパフォーマンスを実現するために非線形最適化を使用しています。非線形最適化の収束を保証することは困難であるため、開発にはシンプルな制御ロジックも必要です。 -また、車両が高速で移動しない場合、縦横同時制御の利点は小さくなります。 +また、車両の速度があまり速くない場合、同時縦横制御のメリットは小さくなります。 -## 関連する問題 +## 関連する課題 + diff --git a/control/autoware_trajectory_follower_node/README.md b/control/autoware_trajectory_follower_node/README.md index 98464b5f8df95..512119e670cc4 100644 --- a/control/autoware_trajectory_follower_node/README.md +++ b/control/autoware_trajectory_follower_node/README.md @@ -1,14 +1,15 @@ -# 軌道追随ノード +# Trajectory Follower ノード ## 目的 -与えられた軌道に従う制御コマンドを生成します。 +与えられたトラジェクトリに従う制御コマンドを生成します。 ## 設計 -これは、[autoware_trajectory_follower_base](../autoware_trajectory_follower_base/README.md#trajectory-follower) パッケージから派生したコントローラクラスで実装された機能のノードです。これにはこれらの機能のインスタンスがあり、それらに計算を実行するための入力データを渡し、制御コマンドをパブリッシュします。 +これは [autoware_trajectory_follower_base](../autoware_trajectory_follower_base/README.md#trajectory-follower) パッケージから派生したコントローラクラスに実装された機能のノードです。計算を実行するためにこれらの機能のインスタンスを持ち、入力データを与え、制御コマンドを公開します。 + +デフォルトでは、次のような `Controller` クラスを持つコントローラインスタンスが使用されます。 -デフォルトでは、次の `Controller` クラスのコントローラインスタンスが使用されます。 ```plantuml @startuml @@ -90,7 +91,8 @@ InputData ..> Controller @enduml ``` -`Controller` クラスのプロセスフローは次のとおりです。 +`Controller`クラスのプロセスフローは次のとおりです。 + ```cpp // 1. create input data @@ -118,41 +120,42 @@ lateral_controller_->sync(lon_out.sync_data); control_cmd_pub_->publish(out); ``` -自動運転ソフトウェアに関するドキュメント +停止時にステアリングコンバージェンスに関する情報を縦方向コントローラに提供すると、次のパラメータが `true` の場合に停止時にステアリングを制御できます。 -ステアリングの収束に関する情報を縦方向制御器に提供すると、次のパラメータが `true` の場合に停止中でもステアリングを制御できます。 - -- 横方向制御器 +- 横方向コントローラ - `keep_steer_control_until_converged` -- 縦方向制御器 +- 縦方向コントローラ - `enable_keep_stopped_until_steer_convergence` -### 入出力 / API +### 入力/出力/API #### 入力 -- `autoware_planning_msgs/Trajectory` : 追跡する基準経路 +- `autoware_planning_msgs/Trajectory` : 追従するリファレンストラジェクトリ - `nav_msgs/Odometry`: 現在のオドメトリ - `autoware_vehicle_msgs/SteeringReport` 現在のステアリング #### 出力 -- `autoware_control_msgs/Control`: 横方向および縦方向のコマンドを含むメッセージ +- `autoware_control_msgs/Control`: 横方向と縦方向の両方のコマンドを含むメッセージ +- `autoware_control_msgs/ControlHorizon`: 横方向と縦方向の両方のホライゾンコマンドを含むメッセージ。これはデフォルトでは公開されていません。これを使用することで、車両制御のパフォーマンスが向上し、デフォルトをオンにすることで、実験的なトピックとして使用できます。 #### パラメータ -- `ctrl_period`: 制御コマンドの発行周期 -- `timeout_thr_sec`: 入力メッセージが破棄されるまでの期間(秒) - - 各コントローラから横方向および縦方向のコマンドを受け取ると、次の2つの条件が満たされた場合に `Control` を発行します。 - 1. コマンドの両方が受信された。 - 2. 最新に受信したコマンドが `timeout_thr_sec` で定義された時間よりも古くない。 +- `ctrl_period`: コントロールコマンドの公開周期 +- `timeout_thr_sec`: 入力メッセージが破棄されるまでの秒数。 + - ノードが各コントローラから横方向と縦方向のコマンドを受信するたびに、次の 2 つの条件が満たされている場合に `Control` が公開されます。 + 1. 両方のコマンドが受信されている。 + 2. 最後を受信したコマンドが `timeout_thr_sec` で定義された値よりも古くない。 - `lateral_controller_mode`: `mpc` または `pure_pursuit` - - (現在は縦方向制御器には `PID` のみを使用) + - (現在は縦方向コントローラには `PID` のみ) +- `enable_control_cmd_horizon_pub`: `ControlHorizon` を公開するかどうか (デフォルト: false) ## デバッグ -横方向および縦方向の制御器によるデバッグ情報は、`tier4_debug_msgs/Float32MultiArrayStamped` メッセージを使用して発行されます。 +デバッグ情報は、横方向と縦方向のコントローラから `tier4_debug_msgs/Float32MultiArrayStamped` メッセージを使用して公開されます。 + +[PlotJuggler](https://github.com/facontidavide/PlotJuggler) の設定ファイルは `config` フォルダに用意されています。ロードすると、自動的にデバッグに役立つ情報をサブスクライブして視覚化できます。 -[PlotJuggler](https://github.com/facontidavide/PlotJuggler) の設定ファイルが `config` フォルダに用意されており、読み込むとデバッグに役立つ情報を自動的に購読して視覚化できます。 +さらに、予測された MPC トラジェクトリはトピック `output/lateral/predicted_trajectory` に公開され、Rviz で視覚化できます。 -さらに、予測された MPC 経路が `output/lateral/predicted_trajectory` トピックに発行され、Rviz で視覚化できます。 diff --git a/control/autoware_vehicle_cmd_gate/README.md b/control/autoware_vehicle_cmd_gate/README.md index c9fc498e253eb..64c41f6470950 100644 --- a/control/autoware_vehicle_cmd_gate/README.md +++ b/control/autoware_vehicle_cmd_gate/README.md @@ -1,173 +1,143 @@ -# vehicle_cmd_gate +## 自動運転ソフトウェアのvehicle_cmd_gate ## 目的 -`vehicle_cmd_gate`は、緊急ハンドラ、プランニングモジュール、外部コントローラから情報を取得し、車両にメッセージを送信するためのパッケージです。 +`vehicle_cmd_gate`は緊急処理ハンドラ、Planningモジュール、外部コントローラから情報を受け取り、車両にメッセージを送信するためのパッケージです。 ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------- | -| `~/input/steering` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリング状態 | -| `~/input/auto/control_cmd` | `autoware_control_msgs::msg::Control` | Planningモジュールからの横方向・縦方向速度コマンド | -| `~/input/auto/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | Planningモジュールからのターンインジケータコマンド | -| `~/input/auto/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | Planningモジュールからのハザードランプコマンド | -| `~/input/auto/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | Planningモジュールからのギアコマンド | -| `~/input/external/control_cmd` | `autoware_control_msgs::msg::Control` | 外部からの横方向・縦方向速度コマンド | -| `~/input/external/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | 外部からのターンインジケータコマンド | -| `~/input/external/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 外部からのハザードランプコマンド | -| `~/input/external/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 外部からのギアコマンド | -| `~/input/external_emergency_stop_heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | ハートビート | -| `~/input/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード (AUTO または EXTERNAL) | -| `~/input/emergency/control_cmd` | `autoware_control_msgs::msg::Control` | エマージェンシーハンドラからの横方向・縦方向速度コマンド | -| `~/input/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | エマージェンシーハンドラからのハザードランプコマンド | -| `~/input/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | エマージェンシーハンドラからのギアコマンド | -| `~/input/engage` | `autoware_vehicle_msgs::msg::Engage` | エンゲージ信号 | -| `~/input/operation_mode` | `autoware_adapi_v1_msgs::msg::OperationModeState` | Autowareの動作モード | +| 名前 | 型 | 説明 | +| ------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------- | +| `~/input/steering` | `autoware_vehicle_msgs::msg::SteeringReport` | ステアリングのステータス | +| `~/input/auto/control_cmd` | `autoware_control_msgs::msg::Control` | Planningモジュールからの横方向速度と縦方向速度のコマンド | +| `~/input/auto/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | Planningモジュールからのウインカーのコマンド | +| `~/input/auto/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | Planningモジュールからのハザードランプのコマンド | +| `~/input/auto/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | Planningモジュールからのギアのコマンド | +| `~/input/external/control_cmd` | `autoware_control_msgs::msg::Control` | 外部からの横方向速度と縦方向速度のコマンド | +| `~/input/external/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | 外部からのウインカーのコマンド | +| `~/input/external/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 外部からのハザードランプのコマンド | +| `~/input/external/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 外部からのギアのコマンド | +| `~/input/external_emergency_stop_heartbeat` | `tier4_external_api_msgs::msg::Heartbeat` | ハートビート | +| `~/input/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード(AUTOまたはEXTERNAL) | +| `~/input/emergency/control_cmd` | `autoware_control_msgs::msg::Control` | エマージェンシーハンドラからの横方向速度と縦方向速度のコマンド | +| `~/input/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | エマージェンシーハンドラからのハザードランプのコマンド | +| `~/input/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | エマージェンシーハンドラからのギアのコマンド | +| `~/input/engage` | `autoware_vehicle_msgs::msg::Engage` | エンゲージのシグナル | +| `~/input/operation_mode` | `autoware_adapi_v1_msgs::msg::OperationModeState` | Autowareのオペレーションモード | ### 出力 -**日本語訳:** +ドキュメントの日本語訳: -## 自動運転ソフトウェアドキュメント +### 自動運転ソフトウェア -### 計画コンポーネント +**概要** -#### 自車位置推定 +このドキュメントでは、Autowareにおける自動運転ソフトウェアのアーキテクチャとコンポーネントに関する包括的な概要を示します。 -自車位置推定モジュールは、各種センサーからデータを取得し、自己位置を推定します。位置、速度、加速度の推定値を出力します。 +**アーキテクチャ** -#### オドメトリ +Autowareのアーキテクチャはモジュール化され、以下のような主要なコンポーネントで構成されています。 -オドメトリモジュールは、車輪速度センサーや加速度計のデータを使用して、自車位置を推定します。自己位置の長期的な安定性は低いですが、短期間の推定には有用です。 +* **Perception:** センサーからの生データを処理し、環境を理解します。 +* **Planning:** 自車位置や周囲の状況に基づいて、経路と行動を計画します。 +* **Control:** 計画された行動を実際の車両動作に変換します。 +* **Localization:** 車両の自車位置を推定します。 +* **Visualization:** センサーデータ、計画された経路、自車位置を視覚化します。 -#### 外部センシング +**コンポーネント** -外部センシングモジュールは、レーダーやLiDARなどのセンサーからデータを取得して、周辺環境を認識します。物体検出、トラッキング、および障害物マッピングを行います。 +各コンポーネントは、以下のような特定の機能を担当します。 -### Planning +**Perception** -#### パスプランニング +* カメラ、レーダー、LiDARなどからの生データの処理 +* 物体検出、セマンティックセグメンテーション、3D再構築 -パスプランニングモジュールは、目標地点まで安全で効率的な経路を生成します。障害物回避、速度制限の遵守、「post resampling」などの制約を考慮します。 +**Planning** -#### 軌跡生成 +* `post resampling`トラジェク生成器 +* 仮想的な障害物回避、経路計画、行動計画 -軌跡生成モジュールは、パスを滑らかな軌跡に変換します。速度、加速度、ジャークの制限を考慮します。 +**Control** -#### 動作プランニング +* 車両の速度、ステアリング、ブレーキの制御 +* モーションプランニング、トラジェクトリトラッキング -動作プランニングモジュールは、現在の走行条件に基づいて、適切な操作を決定します。たとえば、加速、減速、車線変更などを行います。 +**Localization** -### Safety +* GPS、IMU、車輪オドメトリからのデータの統合 +* 車両の自車位置と姿勢の推定 -#### 障害物検出 +**Visualization** -障害物検出モジュールは、外部センシングデータを使用して、周囲の障害物(車両、歩行者、建物など)を検出します。 +* Rvizなどのツールを使用したセンサーデータ、計画された経路、自車位置の視覚化 +* デバッグと検証のためのログファイルへのアクセス -#### 逸脱量チェック - -逸脱量チェックモジュールは、速度逸脱量、加速度逸脱量、ジャーク逸脱量を監視します。安全でない動作を検出した場合は、警告または介入を行います。 - -#### 緊急ブレーキ - -緊急ブレーキモジュールは、障害物との衝突が差し迫っていることを検出した場合に、自動的に緊急ブレーキをかけます。 - -### コントロール - -#### ステアリング制御 - -ステアリング制御モジュールは、軌跡に従うようにステアリング角を制御します。 - -#### 加減速制御 - -加減速制御モジュールは、軌跡に従うように速度と加速度を制御します。 - -### その他のコンポーネント - -#### 通信 - -通信モジュールは、他の車両、インフラ、クラウドとの通信を行います。 - -#### センサーフュージョン - -センサーフュージョンモジュールは、さまざまなセンサーからのデータを統合して、周辺環境のより正確な表現を作成します。 - -#### マッピング - -マッピングモジュールは、周囲の環境を高精度マップに構築します。これにより、自動運転システムは、既知の道路でより正確に動作できます。 - -#### ローカリゼーション - -ローカリゼーションモジュールは、自己位置をマップに相対的に決定します。自己位置推定モジュールからの推定値と外部センシングモジュールからのデータを統合します。 - -### Autowareについて - -Autowareは、オープンソースの自動運転ソフトウェアプラットフォームです。主要な機能として上記で説明したコンポーネントを提供します。詳細については、Autowareのドキュメントを参照してください。 - -| 名前 | 型 | 説明 | -| -------------------------------------- | --------------------------------------------------- | -------------------------------------- | -| `~/output/vehicle_cmd_emergency` | `tier4_vehicle_msgs::msg::VehicleEmergencyStamped` | コマンド内の緊急状態 | -| `~/output/command/control_cmd` | `autoware_control_msgs::msg::Control` | 車両への横方向および縦方向速度コマンド | -| `~/output/command/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | 車両へのターンインジケータコマンド | -| `~/output/command/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 車両へのハザードランプコマンド | -| `~/output/command/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 車両へのギアコマンド | -| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモード(AUTOまたはEXTERNAL) | -| `~/output/engage` | `autoware_vehicle_msgs::msg::Engage` | エンゲージ信号 | -| `~/output/external_emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急信号 | -| `~/output/operation_mode` | `tier4_system_msgs::msg::OperationMode` | `vehicle_cmd_gate`の現在の動作モード | +| 名前 | 型 | 説明 | +| -------------------------------------- | --------------------------------------------------- | -------------------------------------------------------- | +| `~/output/vehicle_cmd_emergency` | `tier4_vehicle_msgs::msg::VehicleEmergencyStamped` | vehicleコマンドで元の緊急状態 | +| `~/output/command/control_cmd` | `autoware_control_msgs::msg::Control` | 横方向および縦方向速度のvehicleコマンド | +| `~/output/command/turn_indicators_cmd` | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | vehicleに対するターンインジケーターコマンド | +| `~/output/command/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | vehicleに対するハザードランプコマンド | +| `~/output/command/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | vehicleに対するギアコマンド | +| `~/output/gate_mode` | `tier4_control_msgs::msg::GateMode` | gate mode(AUTOまたはEXTERNAL) | +| `~/output/engage` | `autoware_vehicle_msgs::msg::Engage` | engageシグナル | +| `~/output/external_emergency` | `tier4_external_api_msgs::msg::Emergency` | 外部緊急シグナル | +| `~/output/operation_mode` | `tier4_system_msgs::msg::OperationMode` | vehicle_cmd_gateの現在の動作モード | ## パラメータ -| パラメータ | 型 | 説明 | -| ------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `update_period` | double | 更新周期 | -| `use_emergency_handling` | bool | エマージェンシーハンドラ使用時はtrue | -| `check_external_emergency_heartbeat` | bool | エマージェンシーストップのハートビートを確認する場合true | -| `system_emergency_heartbeat_timeout` | double | システムエマージェンシーのタイムアウト | -| `external_emergency_stop_heartbeat_timeout` | double | 外部エマージェンシーのタイムアウト | -| `filter_activated_count_threshold` | int | フィルタアクティベーションのしきい値 | -| `filter_activated_velocity_threshold` | double | フィルタアクティベーションの速度しきい値 | -| `stop_hold_acceleration` | double | 車両が停止する場合の縦断加速度コマンド | -| `emergency_acceleration` | double | 車両がエマージェンシーで停止する場合の縦断加速度コマンド | -| `moderate_stop_service_acceleration` | double | 車両がモデレートストップサービスで停止する場合の縦断加速度コマンド | -| `nominal.vel_lim` | double | 縦断速度の制限(自律運転モードでアクティブ化) | -| `nominal.reference_speed_point` | | コントロールコマンドの制限の計算時に参照速度点として使用される速度点(自律運転モードでアクティブ化)。この配列のサイズは制限配列のサイズと同じにする必要があります。 | -| `nominal.lon_acc_lim` | | 縦断加速度の限界値の配列(自律運転モードでアクティブ化) | -| `nominal.lon_jerk_lim` | | 縦断ジャークの限界値の配列(自律運転モードでアクティブ化) | -| `nominal.lat_acc_lim` | | 横断加速度の限界値の配列(自律運転モードでアクティブ化) | -| `nominal.lat_jerk_lim` | | 横断ジャークの限界値の配列(自律運転モードでアクティブ化) | -| `on_transition.vel_lim` | double | 縦断速度の制限(トランジションモードでアクティブ化) | -| `on_transition.reference_speed_point` | | コントロールコマンドの制限の計算時に参照速度点として使用される速度点(トランジションモードでアクティブ化)。この配列のサイズは制限配列のサイズと同じにする必要があります。 | -| `on_transition.lon_acc_lim` | | 縦断加速度の限界値の配列(トランジションモードでアクティブ化) | -| `on_transition.lon_jerk_lim` | | 縦断ジャークの限界値の配列(トランジションモードでアクティブ化) | -| `on_transition.lat_acc_lim` | | 横断加速度の限界値の配列(トランジションモードでアクティブ化) | -| `on_transition.lat_jerk_lim` | | 横断ジャークの限界値の配列(トランジションモードでアクティブ化) | - -## フィルタ機能 - -このモジュールは、公開直前に制御コマンドに制限フィルタを組み込みます。主に安全上の理由から、このフィルタはAutowareを介して公開されるすべての制御コマンドの出力範囲を制限します。 - -制限値は、制限配列パラメータの1次元補間に基づいて計算されます。以下に縦断方向のジャーク制限の例を示します。 +| パラメータ | 型 | 説明 | +| ------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `更新周期` | double | 更新周期 | +| `使用緊急処理` | bool | 緊急処理が使用された場合にtrue | +| `外部緊急ハートビートの確認` | bool | 緊急停止のためのハートビートを確認する場合にtrue | +| `システム緊急ハートビートタイムアウト` | double | システム緊急時のタイムアウト | +| `外部緊急停止ハートビートタイムアウト` | double | 外部緊急時のタイムアウト | +| `フィルターアクティブ化カウントしきい値` | int | フィルターアクティブ化のしきい値 | +| `フィルターアクティブ化速度しきい値` | double | フィルターアクティブ化の速度しきい値 | +| `停止保持時の加速度` | double | 車両が停止する必要がある場合の縦方向加速度cmd | +| `緊急時の加速度` | double | 車両が緊急時に停止する必要がある場合の縦方向加速度cmd | +| `中程度の停止サービスの加速度` | double | 車両が中程度の停止サービスで停止する場合の縦方向加速度cmd | +| `nominal.vel_lim` | double | 縦速度の制限(AUTONOMOUS運転モードでアクティブ) | +| `nominal.reference_speed_point` | | 制御コマンド制限を計算するときに基準として使用される速度ポイント(AUTONOMOUS運転モードでアクティブ)。この配列のサイズは制限配列のサイズと等しくする必要があります。 | +| `nominal.lon_acc_lim` | | 縦方向加速度の制限の配列(AUTONOMOUS運転モードでアクティブ) | +| `nominal.lon_jerk_lim` | | 縦方向ジャークの制限の配列(AUTONOMOUS運転モードでアクティブ) | +| `nominal.lat_acc_lim` | | 横方向加速度の制限の配列(AUTONOMOUS運転モードでアクティブ) | +| `nominal.lat_jerk_lim` | | 横方向ジャークの制限の配列(AUTONOMOUS運転モードでアクティブ) | +| `on_transition.vel_lim` | double | 速度の制限(TRANSITION運転モードでアクティブ) | +| `on_transition.reference_speed_point` | | 制御コマンド制限を計算するときに基準として使用される速度ポイント(TRANSITION運転モードでアクティブ)。この配列のサイズは制限配列のサイズと等しくする必要があります。 | +| `on_transition.lon_acc_lim` | | 縦方向加速度の制限の配列(TRANSITION運転モードでアクティブ) | +| `on_transition.lon_jerk_lim` | | 縦方向ジャークの制限の配列(TRANSITION運転モードでアクティブ) | +| `on_transition.lat_acc_lim` | | 横方向加速度の制限の配列(TRANSITION運転モードでアクティブ) | +| `on_transition.lat_jerk_lim` | | 横方向ジャークの制限の配列(TRANSITION運転モードでアクティブ) | + +## フィルター機能 + +このモジュールは、Controlコマンドの発行直前にコマンドの範囲を制限する制限フィルターを備えています。主に安全を確保するために、このフィルターはAutoware経由で公開される全てのコントロールコマンドの出力範囲を制限します。 + +制限値は、制限配列パラメータの1次元補間に基づいて計算されます。 longitudinal jerk制限に対する例を以下に示します。 ![filter-example](./image/filter.png) -注記: このフィルタは乗り心地を向上させるために設計されていません。その主な目的は、Autowareの最終段階で制御出力の異常値を検出して除去することです。このフィルタが頻繁にアクティブになる場合、制御モジュールの調整が必要になる可能性があります。ローパスフィルタや同様の手法で信号を滑らかにする場合、制御モジュールでその処理を行うべきです。フィルタがアクティブになると、トピック`~/is_filter_activated` が公開されます。 +注意: このフィルターは走行時の快適性を向上させるために設計されていません。その主な目的は、Autowareの最終段階でコントロール出力の異常値を検出して削除することです。このフィルターが頻繁にアクティブになる場合、コントロールモジュールに調整が必要である可能性があります。ローパスフィルタや同様の手法で信号を滑らかにしようとする場合は、コントロールモジュールで処理する必要があります。フィルターがアクティブになると、トピック`~/is_filter_activated`が発行されます。 -注記2: アクセル/ブレーキペダルによって駆動力が制御される車両を使用する場合、ペダルレート制限を表すジャーク制限は低速域で十分に緩和する必要があります。 -そうでなければ、発進/停止時に素早くペダルを切り替えることができません。その結果、発進が遅れたり、下り坂でクリープ現象が発生したりします。発進/停止のためのこの機能はソースコードに埋め込まれていましたが、複雑でパラメータで実現できたため削除されました。 +注意 2: アクセル/ブレーキペダルで駆動力を制御する車両を使用する場合、ペダルレート制限を示すジャーク制限は低速時に十分に緩やかである必要があります。 +そうしないと、始動/停止時のペダルの急激な切り替えができなくなり、発進が遅くなったり、坂道でクリープ現象が発生したりします。始動/停止のためのこの機能はソースコードに組み込まれていましたが、複雑でパラメータで実現できるため削除されました。 ## 想定事項/既知の制限事項 ### 外部緊急ハートビート -パラメータ `check_external_emergency_heartbeat`(デフォルトでtrue)は、外部モジュールからの緊急停止要求を有効にします。 -この機能を使用するには、外部モジュールのヘルスモニタリング用のトピック`~/input/external_emergency_stop_heartbeat` が必要であり、vehicle_cmd_gateモジュールはトピックなしでは起動しません。 -「外部緊急停止」機能を使用しない場合、`check_external_emergency_heartbeat` パラメータは false にする必要があります。 +`check_external_emergency_heartbeat`パラメータ(デフォルトではtrue)は、外部モジュールからの緊急停止要求を有効にします。 +この機能には外部モジュールのヘルスモニタリング用の`~/input/external_emergency_stop_heartbeat`トピックが必要であり、トピックなしではvehicle_cmd_gateモジュールは開始できません。 +「外部緊急停止」機能を使用しない場合、`check_external_emergency_heartbeat`パラメータはfalseにする必要があります。 ### モード変更時のコマンド -出力コマンドのトピック: `turn_indicators_cmd`, `hazard_light` および `gear_cmd` は `gate_mode` に基づいて選択されます。 -ただし、コマンドの継続性を確保するために、モードが変更された場合でも、新しい入力コマンドのトピックが届くまでこれらのコマンドは変更されません。 +出力コマンドのトピック(`turn_indicators_cmd`、`hazard_light`、および`gear_cmd`)は`gate_mode`に基づいて選択されます。 +ただし、コマンドの継続性を確保するために、モードが変更されたとしても、新しい入力コマンドのトピックが届くまでこれらのコマンドは変更されません。 + diff --git a/control/control_performance_analysis/README.md b/control/control_performance_analysis/README.md index 11a83d9da48ed..05ef2c00d0a84 100644 --- a/control/control_performance_analysis/README.md +++ b/control/control_performance_analysis/README.md @@ -1,23 +1,23 @@ -## コントロールパフォーマンス分析 +## 制御性能分析 ## 目的 -`control_performance_analysis`は、制御モジュールの追従性能を分析し、車両の走行状況を監視するためのパッケージです。 +`control_performance_analysis`は制御モジュールの追従性能を分析し、車両の運転状況を監視するためのパッケージです。 このパッケージは、制御モジュールの結果を定量化するためのツールとして使用されます。 -そのため、自動運転のコアロジックに干渉しません。 +そのため、自動運転のコアロジックには干渉しません。 -プランニング、制御、車両からのさまざまな入力に基づいて、このパッケージで定義された`control_performance_analysis::msg::ErrorStamped`として分析の結果を公開します。 +Planing、制御、車両からのさまざまな入力に基づいて、このパッケージで定義された`control_performance_analysis::msg::ErrorStamped`として分析結果を発行します。 -`ErrorStamped`メッセージのすべての結果は、曲線のフレネフレームで計算されます。エラーと速度エラーは、次の論文を使用して計算されます。 +`ErrorStamped`メッセージのすべての結果は、カーブのフレネフレームで計算されます。エラーと速度エラーは、以下の論文を使用して計算されます。 `Werling, Moritz & Groell, Lutz & Bretthauer, Georg. (2010). Invariant Trajectory Tracking With a Full-Size Autonomous Road Vehicle. IEEE Transactions on Robotics. 26. 758 - 765. 10.1109/TRO.2010.2052325.` -計算に興味がある場合は、「C. Asymptotical Trajectory Tracking With Orientation Control」セクションでエラーと速度エラーの計算を参照できます。 +計算に興味がある場合は、Cセクションでエラーとエラー速度の計算を見ることができます「オリエンテーション制御付きの漸近的軌跡追従」。 -エラー加速度の計算は、上記の速度の計算に基づいて行われます。次のエラー加速度の計算を参照できます。 +エラー加速度の計算は、上記の速度計算に基づいて行われます。エラー加速度の計算は以下のとおりです。 ![CodeCogsEqn](https://user-images.githubusercontent.com/45468306/169027099-ef15b306-2868-4084-a350-0e2b652c310f.png) @@ -25,96 +25,80 @@ ### 入力トピック -| 名前 | タイプ | 説明 | -| ---------------------------------------- | -------------------------------------------- | --------------------------------------- | -| `/planning/scenario_planning/trajectory` | `autoware_planning_msgs::msg::Trajectory` | Planningモジュールからの出力軌道 | -| `/control/command/control_cmd` | `autoware_control_msgs::msg::Control` | Controlモジュールからの出力制御コマンド | -| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | 車両からのステアリング情報 | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | オドメトリからツイストを使用 | -| `/tf` | `tf2_msgs::msg::TFMessage` | TFから自車位置を抽出 | - -## 出力トピック - -**AutowareのAPIバージョン:** 1.16.0-rc0 - -| トピック | データタイプ | 説明 | -| ------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `/vehicle/localization/current_pose` | `geometry_msgs/PoseStamped` | 自車位置の現在の推定値。このトピックにパブリッシュされるデータは、誤差を軽減するために、センサーデータから後処理やフィルタリングを経て得られたものです。 | -| `/trajectory/planning/lane_waypoints` | `autoware_planning_msgs/Lane` | 計画されたパス内のウェイポイントを格納します。 | -| `/trajectory/planning/lattice_waypoints` | `autoware_planning_msgs/Lattice` | 速度と横方向位置(逸脱量)の組み合わせに対する、計画されたパスのウェイポイントを格納します。 | -| `/trajectory/planning/optimized_trajectory` | `autoware_planning_msgs/OptimizedTrajectory` | 経路最適化モジュールによって最適化された経路のウェイポイントを格納します。 | -| `/planning/planning_flag` | `autoware_planning_msgs/PlanningFlag` | 計画状態に関するフラグを格納します。0:停止、1:フォロー、2:計画中です。 | -| `/planning/velocity_plan` | `autoware_planning_msgs/VelocityPlan` | 速度計画モジュールによって計算された車速と加速度の値を格納します。 | -| `/control_command` | `autoware_msgs/ControlCommandStamped` | 制御モジュールへ送信される、モーターとステアリングの制御コマンドを格納します。 | -| `/localization/odometry` | `nav_msgs/Odometry` | オドメトリ情報。 | -| `/localization/estimation` | `geometry_msgs/PoseWithCovarianceStamped` | オドメトリ推定値。 | -| `/velodyne_points` | `sensor_msgs/PointCloud2` | Velodyneセンサーからの点群。 | -| `/image/front_camera/image_raw` | `sensor_msgs/Image` | フロントカメラからの生の画像データ。 | -| `/image/rear_camera/image_raw` | `sensor_msgs/Image` | リアカメラからの生の画像データ。 | - -| 名称 | タイプ | 説明 | -| --------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------- | -| `/control_performance/performance_vars` | control_performance_analysis::msg::ErrorStamped | パフォーマンス解析の結果 | -| `/control_performance/driving_status` | control_performance_analysis::msg::DrivingMonitorStamped | 走行ステータス(加速度、ジャークなど)のモニタリング | +| 名前 | 型 | 説明 | +| ---------------------------------------- | ------------------------------------------ | ------------------------------------------- | +| `/planning/scenario_planning/trajectory` | `autoware_planning_msgs::msg::Trajectory` | Planningモジュールからの出力経路 | +| `/control/command/control_cmd` | `autoware_control_msgs::msg::Control` | Controlモジュールからの出力Controlコマンド | +| `/vehicle/status/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | 車両からのSteering情報 | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | オドメトリからのTwistを使用 | +| `/tf` | `tf2_msgs::msg::TFMessage` | TFから自己位置を抽出 | + +### 出力トピック + +| 名前 | タイプ | 説明 | +|---|---|---| +| `/control_performance/performance_vars` | `control_performance_analysis::msg::ErrorStamped` | パフォーマンス分析の結果 | +| `/control_performance/driving_status` | `control_performance_analysis::msg::DrivingMonitorStamped` | 走行状況 (加速度、ジャークなど) の監視 | ### 出力 #### control_performance_analysis::msg::DrivingMonitorStamped -| 名称 | タイプ | 説明 | -| ---------------------------- | ------ | -------------------------------------------------- | -| `longitudinal_acceleration` | float | [m/s^2] | -| `longitudinal_jerk` | float | [m/s^3] | -| `lateral_acceleration` | float | [m/s^2] | -| `lateral_jerk` | float | [m/s^3] | -| `desired_steering_angle` | float | [rad] | -| `controller_processing_time` | float | 2つの制御コマンドメッセージ間のタイムスタンプ [ms] | +| 名前 | タイプ | 説明 | +| ---------------------------- | ----- | ---------------------------------- | +| `longitudinal_acceleration` | float | [m / s^2] | +| `longitudinal_jerk` | float | [m / s^3] | +| `lateral_acceleration` | float | [m / s^2] | +| `lateral_jerk` | float | [m / s^3] | +| `desired_steering_angle` | float | [rad] | +| `controller_processing_time` | float | 直前の2つの制御コマンドメッセージ間のタイムスタンプ [ms] | #### control_performance_analysis::msg::ErrorStamped -| 名称 | タイプ | 説明 | -| ------------------------------------------ | ------ | --------------------------------------------------------------------------------------- | -| `lateral_error` | float | [m] | -| `lateral_error_velocity` | float | [m/s] | -| `lateral_error_acceleration` | float | [m/s^2] | -| `longitudinal_error` | float | [m] | -| `longitudinal_error_velocity` | float | [m/s] | -| `longitudinal_error_acceleration` | float | [m/s^2] | -| `heading_error` | float | [rad] | -| `heading_error_velocity` | float | [rad/s] | -| `control_effort_energy` | float | [u * R * u^T] | -| `error_energy` | float | lateral_error^2 + heading_error^2 | -| `value_approximation` | float | V = xPx' ; 自車位置に基づく状態空間のパフォーマンス指数を近似した値 | -| `curvature_estimate` | float | [1/m] | -| `curvature_estimate_pp` | float | [1/m] | -| `vehicle_velocity_error` | float | [m/s] | -| `tracking_curvature_discontinuity_ability` | float | 曲率変化を追従する能力を測定 [`abs(delta(curvature)) / (1 + abs(delta(lateral_error))`] | +| 名前 | 型 | 説明 | +| --------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------- | +| `lateral_error` | float | [m] | +| `lateral_error_velocity` | float | [m / s] | +| `lateral_error_acceleration` | float | [m / s²] | +| `longitudinal_error` | float | [m] | +| `longitudinal_error_velocity` | float | [m / s] | +| `longitudinal_error_acceleration` | float | [m / s²] | +| `heading_error` | float | [rad] | +| `heading_error_velocity` | float | [rad / s] | +| `control_effort_energy` | float | [u * R * u^T] | +| `error_energy` | float | lateral_error² + heading_error² | +| `value_approximation` | float | V = xPx' ; Value function from DARE Lyap matrix P | +| `curvature_estimate` | float | [1 / m] | +| `curvature_estimate_pp` | float | [1 / m] | +| `vehicle_velocity_error` | float | [m / s] | +| `tracking_curvature_discontinuity_ability` | float | 曲率変化追従能力 [`abs(delta(curvature)) / (1 + abs(delta(lateral_error))`] | ## パラメータ -| 名称 | 型 | 説明 | -| ------------------------------------- | ---------------- | ----------------------------------------------------------------- | -| `curvature_interval_length` | double | current curvature 推定に使用 | -| `prevent_zero_division_value` | double | ゼロ除算を回避するための値(デフォルトは `0.001`) | -| `odom_interval` | unsigned integer | odom メッセージ間のインターバル(より滑らかな曲線には大きくする) | -| `acceptable_max_distance_to_waypoint` | double | 軌道ポイントと車両の最大距離 [m] | -| `acceptable_max_yaw_difference_rad` | double | 軌道ポイントと車両の最大ヨー角差 [rad] | -| `low_pass_filter_gain` | double | ローパスフィルタのゲイン | +| 名前 | タイプ | 説明 | +| -------------------------------------- | ------------------- | --------------------------------------------------------------------- | +| `curvature_interval_length` | double | 現在カーブの推定に使用 | +| `prevent_zero_division_value` | double | 0除算回避の値。デフォルトは`0.001` | +| `odom_interval` | unsigned integer | odomメッセージ間のインターバル。カーブを滑らかにするには増加する | +| `acceptable_max_distance_to_waypoint` | double | 軌道点と車両間の最大距離 [m] | +| `acceptable_max_yaw_difference_rad` | double | 軌道点と車両間の最大ヨー角差 [rad] | +| `low_pass_filter_gain` | double | ローパスフィルタゲイン | ## 操作方法 -- シミュレーションと制御モジュールを起動した後、`control_performance_analysis.launch.xml` を起動します。 -- 走行モニタとエラー変数がトピックに表示されます。 -- 結果を視覚化するには、`Plotjuggler` を使用し、レイアウトとして `config/controller_monitor.xml` を使用します。 -- レイアウトをインポートした後、以下のトピックを指定します。 +1. シミュレーションと制御モジュールを起動したら、`control_performance_analysis.launch.xml` を起動してください。 +2. ドライビングモニターとエラー変数がトピックに表示されるはずです。 +3. 結果を視覚化したい場合は、`Plotjuggler` を使用し、レイアウトとして `config/controller_monitor.xml` を使用してください。 +4. レイアウトをインポートしたら、以下にリストされたトピックを指定してください。 > - /localization/kinematic_state > - /vehicle/status/steering_status > - /control_performance/driving_status > - /control_performance/performance_vars -- `Plotjuggler` では、統計情報(最大、最小、平均)値を csv ファイルとしてエクスポートできます。この統計情報を使用して、制御モジュールを比較します。 +5. `Plotjuggler` では、統計値(最大値、最小値、平均値)を csv ファイルとしてエクスポートできます。この統計を使用して、制御モジュールを比較します。 + +## 今後の改善点 -## 今後の改善 +- カットオフ周波数、微分方程式、離散状態空間アップデートによる LPF を実装する。 -- カットオフ周波数、微分方程式、離散状態空間の更新を使用して LPF を実装します。 diff --git a/control/predicted_path_checker/README.md b/control/predicted_path_checker/README.md index cc2886a4755d9..d66e3b46243e7 100644 --- a/control/predicted_path_checker/README.md +++ b/control/predicted_path_checker/README.md @@ -1,100 +1,83 @@ -# Predicted Path Checker +# 予測経路チェッカー ## 目的 -Predicted Path Checkerパッケージは、自律車両が制御モジュールによって生成された予測パスをチェックするために設計されています。このパッケージは、プランニングモジュールが処理できない可能性があり、ブレーキ距離内にある潜在的な衝突を処理します。ブレーキ距離内に衝突が発生した場合、パッケージはシステムに「ERROR」というラベルの診断メッセージを送信して緊急事態を知らせるようアラートし、リファレンストラジェクトリの外部で衝突が発生した場合は、インターフェースを一時停止して車両を停止するように一時停止要求を送信します。 +Predicted Path Checker パッケージは、制御モジュールによって生成された予測経路を自動運転車がチェックするために設計されています。プランニングモジュールでは処理できない可能性がある潜在的な衝突やブレーキ距離内での衝突を処理します。ブレーキ距離内の衝突が発生した場合、パッケージは「ERROR」というラベルの付いた診断メッセージを送信してシステムに緊急事態を警告し、参照軌道外の衝突が発生した場合は、インターフェースの一時停止を要求して車両を停止させます。 ![general-structure.png](images%2Fgeneral-structure.png) ## アルゴリズム -パッケージアルゴリズムは、予測軌跡をリファレンストラジェクトリと環境内の予測オブジェクトに対して評価します。潜在的な衝突をチェックし、必要に応じてそれらを回避するために適切な応答を生成します(緊急停止または一時停止要求)。 +パッケージアルゴリズムは、予測軌道と環境内の予測オブジェクトに対して予測軌道を評価します。潜在的な衝突をチェックし、必要に応じてそれらを避けるための適切な応答(緊急停止または一時停止リクエスト)を生成します。 ### 内部アルゴリズム ![FlowChart.png](images%2FFlowChart.png) -**cutTrajectory() ->** 予測軌跡を入力された長さでカットします。長さは、エゴカーの速度に「trajectory_check_time」パラメータと「min_trajectory_length」を乗じた値で計算されます。 +**cutTrajectory() ->** 入力長で予測軌道を切断します。長さは、自我車両の速度に「trajectory_check_time」パラメーターと「min_trajectory_length」を乗算して計算されます。 -**filterObstacles() ->** 環境内の予測オブジェクトをフィルタリングします。車両の前方になく、予測軌跡から遠く離れたオブジェクトをフィルタリングします。 +**filterObstacles() ->** 環境内の予測オブジェクトをフィルタリングします。車両の前方になく、予測軌道から遠く離れたオブジェクトをフィルタリングします。 -**checkTrajectoryForCollision() ->** 予測軌跡が予測オブジェクトと衝突するかどうかをチェックします。軌跡点と予測オブジェクトの両方の多角形を計算し、両方の多角形の交差をチェックします。交差がある場合、最も近い衝突点を計算します。多角形とその予測オブジェクトの最も近い衝突点を返します。また、予期しない動作を避けるために、前にフットプリントと交差した予測オブジェクト履歴もチェックします。予測オブジェクト履歴は、それらが「chattering_threshold」秒前に検出された場合にオブジェクトを格納します。 +**checkTrajectoryForCollision() ->** 予測軌道の予測オブジェクトとの衝突をチェックします。軌跡ポイントの多角形と予測オブジェクトの両方を計算し、両方の多角形の交差をチェックします。交差があれば、最も近い衝突ポイントを計算します。多角形の最近接衝突点と予測オブジェクトを返します。また、予期しない挙動を避けるために、「chattering_threshold」秒前にフットプリントと交差していた予測オブジェクトの履歴もチェックします。予測オブジェクトの履歴は、オブジェクトが「chattering_threshold」秒前に検出された場合にオブジェクトを格納します。 -「enable_z_axis_obstacle_filtering」パラメータが true に設定されている場合、予測オブジェクトは「z_axis_filtering_buffer」を使用して Z 軸でフィルタリングされます。オブジェクトが Z 軸と交差しない場合、オブジェクトはフィルタリングされます。 +「enable_z_axis_obstacle_filtering」パラメーターが true に設定されている場合、Z 軸の予測オブジェクトは「z_axis_filtering_buffer」を使用してフィルタリングされます。オブジェクトが Z 軸と交差しない場合、オブジェクトはフィルタリングされます。 ![Z_axis_filtering.png](images%2FZ_axis_filtering.png) -**calculateProjectedVelAndAcc() ->** 予測軌跡の衝突点の軸上の予測オブジェクトの投影速度と加速度を計算します。 +**calculateProjectedVelAndAcc() ->** 予測軌道の衝突点の軸上で、予測オブジェクトの投影速度と加速度を計算します。 -**isInBrakeDistance() ->** 停止点がブレーキ距離内にあるかどうかをチェックします。予測オブジェクトに対するエゴカーの相対速度と加速度を取得します。ブレーキ距離を計算し、点がブレーキ距離内にある場合、true を返します。 +**isInBrakeDistance() ->** 停止点がブレーキ距離内にあるかどうかをチェックします。予測オブジェクトに対する自我車両の相対速度と加速度を取得します。ブレーキ距離を計算し、点がブレーキ距離内にある場合は true を返します。 -**isItDiscretePoint() ->** 予測軌跡上の停止点が離散ポイントであるかどうかをチェックします。離散ポイントでない場合、停止はプランニングによって処理される必要があります。 +**isItDiscretePoint() ->** 予測軌道の停止点が離散点かどうかをチェックします。離散点でない場合、プランニングで停止を処理する必要があります。 -**isThereStopPointOnRefTrajectory() ->** リファレンストラジェクトリ上に停止点があるかどうかをチェックします。停止インデックスの前に停止点がある場合、true を返します。それ以外の場合は false を返し、ノードは一時停止インターフェースを呼び出して車両を停止します。 +**isThereStopPointOnRefTrajectory() ->** 参照軌跡に停止点があるかどうかをチェックします。停止インデックスの前に停止点がある場合、true を返します。それ以外の場合は false を返し、ノードはインターフェースの一時停止を呼び出して車両を停止します。 ## 入力 -| 名 | 型 | 説明 | -| ------------------------------------- | ------------------------------------------------ | ---------------------------------------------- | -| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | リファレンストライジェクチャリ | -| `~/input/predicted_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測されたトランスジェクチャリ | -| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObject` | 環境における動的オブジェクト | -| `~/input/odometry` | `nav_msgs::msg::Odometry` | 自車の速度を取得するためのオドメトリメッセージ | -| `~/input/current_accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 現在の加速度 | -| `/control/vehicle_cmd_gate/is_paused` | `tier4_control_msgs::msg::IsPaused` | 車両の現在の停止状態 | +| 名称 | タイプ | 説明 | +| ------------------------------------- | ------------------------------------------------ | ------------------------------------------------- | +| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 基準軌道 | +| `~/input/predicted_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 予測軌道 | +| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObject` | 環境内の動的物体 | +| `~/input/odometry` | `nav_msgs::msg::Odometry` | オドメトリメッセージ(自車位置を取得するための車両速度) | +| `~/input/current_accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 現在加速度 | +| `/control/vehicle_cmd_gate/is_paused` | `tier4_control_msgs::msg::IsPaused` | 車両の現在のポーズ状態 | ## 出力 -- **軌跡プランニング** - - 車両軌跡生成における不連続性削減 - - 軌跡プランニングモジュール内での経路最適化 -- **制御** - - 加速度と速度の違反における車両挙動の安定性向上 - - ビークルダイナミクスの向上 -- **知覚** - - オブジェクトの検出精度向上 - - 車両周辺環境のより完全な把握 -- **マップ** - - マップ精度の向上 - - より信頼性の高い経路計画 -- **ロギング** - - システムのパフォーマンスの監視を向上させるロギング機能の追加 -- **ビジュアライゼーション** - - `post resampling`における経路可視化の改善 - - 自車位置のより正確な表現 - -| 名称 | 型 | 説明 | -| ------------------------------------- | ---------------------------------------- | ---------------------------------- | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | -| `~/debug/virtual_wall` | `visualization_msgs::msg::MarkerArray` | 可視化用の仮想の壁のマーカー | -| `/control/vehicle_cmd_gate/set_pause` | `tier4_control_msgs::srv::SetPause` | 車両を停止させるための停止サービス | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticStatus` | 車両の診断状況 | - -## パラメータ - -### ノードパラメータ - -| 名称 | 型 | 説明 | デフォルト値 | -| :---------------------------------- | :----------------- | :----------------------------------------------------------------------------- | :----------- | -| `update_rate` | `倍精度浮動小数点` | 更新レート [Hz] | 10.0 | -| `delay_time` | `倍精度浮動小数点` | 緊急対応で考慮される時間遅延 [s] | 0.17 | -| `max_deceleration` | `倍精度浮動小数点` | 自動運転車両が停止するための最大減速度 [m/s^2] | 1.5 | -| `resample_interval` | `倍精度浮動小数点` | 軌道の再サンプリング間隔 [m] | 0.5 | -| `stop_margin` | `倍精度浮動小数点` | 停止マージン [m] | 0.5 | -| `ego_nearest_dist_threshold` | `倍精度浮動小数点` | 自動運転車両の最近接距離閾値 [m] | 3.0 | -| `ego_nearest_yaw_threshold` | `倍精度浮動小数点` | 自動運転車両の最近接ヨー角閾値 [rad] | 1.046 | -| `min_trajectory_check_length` | `倍精度浮動小数点` | メートル単位での最短軌道チェックの長さ [m] | 1.5 | -| `trajectory_check_time` | `倍精度浮動小数点` | 軌道チェック時間 [s] | 3.0 | -| `distinct_point_distance_threshold` | `倍精度浮動小数点` | 異なる点の距離閾値 [m] | 0.3 | -| `distinct_point_yaw_threshold` | `倍精度浮動小数点` | 異なる点のヨー角閾値 [deg] | 5.0 | -| `filtering_distance_threshold` | `倍精度浮動小数点` | 距離がこの値より大きい場合、オブジェクトを無視します [m] | 1.5 | -| `use_object_prediction` | `ブーリアン` | Trueの場合、ノードはデルタ時間に関連してオブジェクトの自車位置を予測します [-] | true | - -### 衝突チェッカーパラメータ - -| 名称 | 型 | 説明 | デフォルト値 | -| :--------------------------------- | :------- | :------------------------------------------------ | :----------- | -| `width_margin` | `double` | 衝突検査における幅マージン [Hz] | 0.2 | -| `chattering_threshold` | `double` | 衝突検出におけるチャタリングしきい値 [s] | 0.2 | -| `z_axis_filtering_buffer` | `double` | Z軸フィルタリングバッファ [m] | 0.3 | -| `enable_z_axis_obstacle_filtering` | `bool` | Z軸障害物フィルタリングが有効かどうかを示すフラグ | false | +| 名称 | 型 | 説明 | +| ------------------------------------ | ----------------------------------------- | ---------------------------------------- | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | ビジュアライゼーション用のマーカー | +| `~/debug/virtual_wall` | `visualization_msgs::msg::MarkerArray` | ビジュアライゼーション用の仮想の壁マーカー | +| `/control/vehicle_cmd_gate/set_pause` | `tier4_control_msgs::srv::SetPause` | 車両を停止させるためのポーズサービス | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticStatus` | 車両の診断ステータス | + +## パラメーター + +### ノードパラメーター + +| 名前 | 種類 | 説明 | デフォルト値 | +| :---------------------------------------- | :------- | :-------------------------------------------------------------------------- | :------------ | +| `update_rate` | `double` | 更新レート [Hz] | 10.0 | +| `delay_time` | `double` | 緊急対応のために考慮される遅延時間 [s] | 0.17 | +| `max_deceleration` | `double` | 自車が停止するための最大減速度 [m/s^2] | 1.5 | +| `resample_interval` | `double` | 軌道の再サンプリングの間隔 [m] | 0.5 | +| `stop_margin` | `double` | 停止マージン [m] | 0.5 | +| `ego_nearest_dist_threshold` | `double` | 自車に対する最短距離のしきい値 [m] | 3.0 | +| `ego_nearest_yaw_threshold` | `double` | 自車に対する最短ヨー角のしきい値 [rad] | 1.046 | +| `min_trajectory_check_length` | `double` | メートル単位の最小軌跡チェック長 [m] | 1.5 | +| `trajectory_check_time` | `double` | 軌跡チェック時間 [s] | 3.0 | +| `distinct_point_distance_threshold` | `double` | 異なる点の距離しきい値 [m] | 0.3 | +| `distinct_point_yaw_threshold` | `double` | 異なる点のヨー角しきい値 [deg] | 5.0 | +| `filtering_distance_threshold` | `double` | この距離より高い場合はオブジェクトを無視します [m] | 1.5 | +| `use_object_prediction` | `bool` | 真の場合、ノードはデルタ時間に対するオブジェクトの現在の位置を予測します [-] | true | + +### 衝突チェッカーのパラメータ + +| 名称 | 種類 | 説明 | デフォルト値 | +| :----------------------------------- | :------- | :------------------------------------------------------------------ | :------------ | +| `width_margin` | `double` | 衝突確認の幅のマージン [Hz] | 0.2 | +| `chattering_threshold` | `double` | 衝突検出のチャタリングしきい値 [s] | 0.2 | +| `z_axis_filtering_buffer` | `double` | Z 軸フィルタリングバッファ [m] | 0.3 | +| `enable_z_axis_obstacle_filtering` | `bool` | Z 軸障害物フィルタリングが有効かどうかを示すブールフラグ | false | + diff --git a/evaluator/autoware_control_evaluator/README.md b/evaluator/autoware_control_evaluator/README.md index 905b88064d76d..e7eba73a713e4 100644 --- a/evaluator/autoware_control_evaluator/README.md +++ b/evaluator/autoware_control_evaluator/README.md @@ -1,17 +1,18 @@ -# 制御評価器 +# コントロールエバリュエーター ## 目的 -このパッケージは、制御の品質を評価するためのメトリクスを生成するノードを提供します。 +このパッケージは、制御の品質を評価するメトリクスを生成するノードを提供します。 -制御モジュール出力に関する診断情報を、自車位置と現在の運動学的情報を公開します。 +制御モジュールの出力と、自己車両の現在の運動学的特性と位置に関するメトリクス情報をパブリッシュします。 -## 評価メトリクス +## 評価するメトリクス -制御評価器は、`include/autoware/control_evaluator/metrics/deviation_metrics.hpp` で定義されたメトリクスを使用して、自車基準点からのヨー方向および横方向距離の逸脱量を計算します。制御評価器は、他の制御モジュールのメトリクスや評価を提供するようにカスタマイズすることもできます。現在、制御評価器は autonomous_emergency_braking ノードの出力に基づいて簡単な診断出力を提供していますが、この機能を拡張して他の制御モジュールの性能を評価できます。 +コントロールエバリュエーターは、`include/autoware/control_evaluator/metrics/metric.hpp` に定義されたメトリクスを使用して、ヨーと横方向の距離における自己車両のセットポイントからの偏差を計算します。コントロールエバリュエーターは、他の制御モジュールに関するメトリクス/評価を提供するようにカスタマイズすることもできます。現在、コントロールエバリュエーターは autonomous_emergency_braking ノードの出力に基づく単純なメトリクス出力を提供していますが、この機能を拡張して他の制御モジュールの性能を評価できます。 ## 運動学的出力 -制御評価器モジュールは、自車の運動学的および位置に関する情報を絶えず公開します。経路弧補正座標の縦方向 `s` と横方向 `t` を使用して、現在の自車レーン ID を公開します。また、現在の自車の速度、加速度、ジャークを診断メッセージで公開します。 +コントロールエバリュエーターモジュールは、自己車両の運動学的特性と位置に関する情報を常にパブリッシュします。現在の自己車線 ID と縦方向の `s` および横方向の `t` アーク座標をパブリッシュします。また、メトリクスメッセージに自己車両の現在の速度、加速度、ジャークもパブリッシュします。 + +この情報は、他のノードによって rosbag を使用した自動評価を確立するために使用できます: 自己車両の位置と運動学的特性と評価された制御モジュールの出力を照合することで、評価された制御モジュールが rosbag 再生の特定の興味深いポイントで満足のいく方法で反応したかどうかを判断できます。 -この情報は、他のノードが ROSbag を使用した自動評価を実行するために使用できます。自車位置と運動学的情報を評価された制御モジュールの出力と照合することで、ROSbag 再現の特定の興味深いポイントにおいて評価された制御モジュールが適切に対応したかどうかを判断できます。 diff --git a/evaluator/autoware_evaluator_utils/README.md b/evaluator/autoware_evaluator_utils/README.md index b13c2568177d3..ec7a71a010fb4 100644 --- a/evaluator/autoware_evaluator_utils/README.md +++ b/evaluator/autoware_evaluator_utils/README.md @@ -1,5 +1,2 @@ -# エバリュエータユーティル +404: 見つかりません -## 目的 - -このパッケージは、他のエバリュエータパッケージ向けのユーティリティ関数を提供します。 diff --git a/evaluator/autoware_planning_evaluator/README.md b/evaluator/autoware_planning_evaluator/README.md index 886a4d66bea09..db43b530bc5c6 100644 --- a/evaluator/autoware_planning_evaluator/README.md +++ b/evaluator/autoware_planning_evaluator/README.md @@ -2,77 +2,79 @@ ## 目的 -このパッケージは、プランニングと制御の品質を評価するためのメトリクスを生成するノードを提供します。 +このパッケージは、PlanningとControlの品質を評価するための指標を生成するノードを提供します。 -## 内部動作 / アルゴリズム +## 内部の動き / アルゴリズム -評価ノードは、軌道 `T(0)`を受信するたびにメトリクスを計算します。メトリクスは、以下の情報を使用して計算されます。 +評価ノードは、トラジェクトリ `T(0)` を受信するたびに指標を計算します。 +指標は、次の情報を使用して計算されます。 -- 軌道 `T(0)` 自体 -- 前回の軌道 `T(-1)` -- `T(0)` のプランニング時に参照と想定された _参照_ 軌道 +- トラジェクトリ `T(0)` 自体 +- 前のトラジェクトリ `T(-1)` +- `T(0)` を計画するために使用される基準と想定される_基準_トラジェクトリ - 自車位置 - 環境内のオブジェクトのセット -これらの情報は、`MetricsCalculator` クラスのインスタンスによって管理され、メトリクスの計算も担当しています。 +これらの情報は、`MetricsCalculator` クラスのインスタンスによって維持され、指標の計算もこのインスタンスによって担当されます。 -### スタット +### 統計量 -各メトリクスは、`Stat` インスタンスを使用して計算されます。`Stat` インスタンスには、メトリクスに対して計算された最小値、最大値、平均値、および測定された値の数が含まれます。 +各指標は、指標に対して計算された最小値、最大値、平均値、測定された値の数を格納する `autoware::universe_utils::Accumulator` インスタンスを使用して計算されます。 -### メトリクスの計算と追加メトリクスの追加 +### 指標の計算と新しい指標の追加 -考えられるすべてのメトリクスは、`include/planning_evaluator/metrics/metric.hpp` で定義された `Metric` 列挙体で定義されています。このファイルでは、文字列との変換と、出力ファイルのヘッダーとして使用される人間が読める説明も定義されています。 +可能な指標はすべて、`include/planning_evaluator/metrics/metric.hpp` で定義された `Metric` 列挙体内に定義されています。 +このファイルは、文字列との相互変換や、出力ファイルのヘッダーとして使用される人間が読める説明も定義します。 + +`MetricsCalculator` は、関数の呼び出しを通じて指標の統計量を計算します。 -`MetricsCalculator` は、以下の関数を呼び出すことでメトリクス統計を計算します。 ```C++ -Stat MetricsCalculator::calculate(const Metric metric, const Trajectory & traj) const; +Accumulator MetricsCalculator::calculate(const Metric metric, const Trajectory & traj) const; ``` -新しい指標 `M` を追加するには次の手順が必要です。 +新しいメトリクス `M` を追加するには、次の手順が必要です。 -- `metrics/metric.hpp`: `M` を `enum`、文字列変換マップ、説明マップに追加します。 +- `metrics/metric.hpp`: `enum`、文字列変換マップ、および説明マップに `M` を追加します。 - `metrics_calculator.cpp`: `calculate` 関数の `switch/case` ステートメントに `M` を追加します。 -- `selected_metrics` パラメータに `M` を追加します。 +- `selected_metrics` パラメーターに `M` を追加します。 ## 入出力 ### 入力 -**自動運転ソフトウェア ドキュメント(日本語訳)** - -| 名前 | 型 | 説明 | -| ------------------------------ | ------------------------------------------------- | ---------------------------------- | -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 評価するメインのPlanning | -| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 逸脱量の測定に使用する基準Planning | -| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 障害物 | +| 名前 | タイプ | 説明 | +| --------------------- | --------------------------------------------- | ------------------------------------------------- | +| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 評価するメインの走行軌跡 | +| `~/input/reference_trajectory` | `autoware_planning_msgs::msg::Trajectory` | 偏差の測定値に使用される基準走行軌跡 | +| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 障害物 | ### 出力 -各メトリックは、メトリック名にちなんだトピックで公開されます。 +各指標は、指標名にちなんだトピックで公開されます。 -| 名称 | 種別 | 説明 | -| ----------- | --------------------------------------- | ----------------------------------------------------- | -| `~/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | メトリックごとのDiagnosticStatusを持つDiagnosticArray | +| 名前 | 型 | 説明 | +| ----------- | ------------------------------------- | ----------------------------------------------------------------- | +| `~/metrics` | `tier4_metric_msgs::msg::MetricArray` | `tier4_metric_msgs::msg::Metric`のメトリックを多数持つMetricArray | -シャットダウンされると、評価ノードは有効期間中に測定されたメトリクスの値を `output_file` パラメーターで指定されたファイルに書き込みます。 +`output_metrics = true` の場合、評価ノードはシャットダウン時に、寿命中に測定されたメトリクスの統計データを `/autoware_metrics/-.json` に書き込みます。 -## パラメーター +## パラメータ {{ json_to_markdown("evaluator/autoware_planning_evaluator/schema/autoware_planning_evaluator.schema.json") }} -## 仮定/既知の制限 +## 仮定 / 既知の制限 + +次のことを前提としています : Planningモジュールがトラектория `T(0)` を受信するとき、そのPlanningモジュールは最後に受信したリファレンストラекトリーとオブジェクトを使用して生成されている。`T(0)` の計算中に新しいリファレンストラекトリーまたはオブジェクトが公開された場合、これは誤りになる可能性があります。 -次の点を強く想定しています。トラジェクトリ `T(0)` を受信するとき、それは最後に受信した基準トラジェクトリとオブジェクトを使用して生成されていること。`T(0)` が計算されている間に新しい基準トラジェクトリまたはオブジェクトがパブリッシュされると、これは不適切になる可能性があります。 +精度は現時点ではトラекトリーの分解能によって制限されています。トラекトリーとリファレンストラекトリーの補間により、精度を向上させることは可能ですが、計算が大幅に負荷のかかるものになります。 -精度は現在、トラジェクトリの解像度に制限されています。トラジェクトリと基準トラジェクトリを内挿して精度を向上させることはできますが、計算が大幅に高価になります。 +## 今後の拡張 / 未実装部分 -## 将来的な拡張機能/実装されていない部分 +- リファレンストラекトリーとして `Route` または `Path` メッセージを使用します。 +- RSS メトリクス(別のノード で完了)。 +- `min` と `max` の各メトリクス値を公開するためのオプションを追加します。現時点では `mean` の値のみが公開されています。 +- `motion_evaluator_node` + - 自己位置の実際の動きから時系列的にトラекトリーを構築するノード + - 現時点では概念実証のみが実装されています。 -- 基準トラジェクトリとして `Route` または `Path` メッセージを使用します。 -- RSS メトリクス (別のノードで完了 )。 -- `min` と `max` メトリクス値をパブリッシュするオプションを追加します。現時点では `mean` 値のみがパブリッシュされます。 -- `motion_evaluator_node`。 - - エゴの実際の動作から時間の経過に伴ってトラジェクトリを構築するノード。 - - 現在実装されているのは概念実証のみです。 diff --git a/evaluator/diagnostic_converter/README.md b/evaluator/diagnostic_converter/README.md index 1b14bd879d80c..35a26043b0a7b 100644 --- a/evaluator/diagnostic_converter/README.md +++ b/evaluator/diagnostic_converter/README.md @@ -1,50 +1,2 @@ -# 計画評価器 +このURLは有効ではありません。 -## 目的 - -このパッケージは、`diagnostic_msgs::msg::DiagnosticArray` メッセージを `tier4_simulation_msgs::msg::UserDefinedValue` メッセージに変換するノードを提供します。 - -## 内部処理/アルゴリズム - -このノードは、パラメータにリストされたすべてのトピックを購読し、それらが `DiagnosticArray` メッセージを発行すると想定します。 -そのようなメッセージが受信されるたびに、`KeyValue` オブジェクトの数と同じ数の `UserDefinedValue` メッセージに変換されます。 -出力トピックの形式は「出力」セクションで詳細に説明します。 - -## インプット/アウトプット - -### インプット - -このノードは、パラメータで指定されたトピックの `DiagnosticArray` メッセージをリッスンします。 - -### アウトプット - -このノードは、受信した `DiagnosticArray` から変換された `UserDefinedValue` メッセージを出力します。 - -出力トピック名は、対応するインプットトピック、診断ステータスの名前、および診断のキーから生成されます。 -たとえば、`/diagnostic_topic` トピックをリッスンし、2 つのステータスを持つ `DiagnosticArray` を受信する場合があります。 - -- ステータス `name: "x"`. - - キー: `a`. - - キー: `b`. -- ステータス `name: "y"`. - - キー: `a`. - - キー: `c`. - -`UserDefinedValue` をパブリッシュするための結果的なトピックは次のとおりです。 - -- `/metrics_x_a`. -- `/metrics_x_b`. -- `/metrics_y_a`. -- `/metrics_y_c`. - -## パラメータ - -| 名前 | 型 | 説明 | -| :------------------ | :------------- | :-------------------------------------------------------- | -| `diagnostic_topics` | 文字列のリスト | UserDefinedValueに変換するDiagnosticArrayトピックのリスト | - -## 想定 / 既知の制限 - -`DiagnosticStatus` の `KeyValue` オブジェクト内の値は、`double` 型であると想定されています。 - -## 将来の拡張 / 未実装部分 diff --git a/evaluator/kinematic_evaluator/README.md b/evaluator/kinematic_evaluator/README.md index f02f6be2155a7..e79b25e01c4d8 100644 --- a/evaluator/kinematic_evaluator/README.md +++ b/evaluator/kinematic_evaluator/README.md @@ -1,7 +1,8 @@ -# キネマティクス評価器 +# キネマティックエバリュエーター TBD ## パラメータ {{json_to_markdown("evaluator/kinematic_evaluator/schema/kinematic_evaluator.schema.json")}} + diff --git a/evaluator/localization_evaluator/README.md b/evaluator/localization_evaluator/README.md index 50d26005c87dd..a5146c60d7e49 100644 --- a/evaluator/localization_evaluator/README.md +++ b/evaluator/localization_evaluator/README.md @@ -1,7 +1,8 @@ -## 位置推定評価器 +# ローカリゼーション評価器 -位置推定評価器は位置推定システムのパフォーマンスを評価し、メトリクスを提供します。 +ローカリゼーション評価器はローカリゼーションシステムのパフォーマンスを評価し、メトリクスを提供します。 ## パラメーター -{{ json_to_markdown("evaluator/localization_evaluator/schema/localization_evaluator.schema.json", "ja") }} +{{ json_to_markdown("evaluator/localization_evaluator/schema/localization_evaluator.schema.json") }} + diff --git a/evaluator/perception_online_evaluator/README.md b/evaluator/perception_online_evaluator/README.md index 30481bd4102e9..07a6f3a79219a 100644 --- a/evaluator/perception_online_evaluator/README.md +++ b/evaluator/perception_online_evaluator/README.md @@ -1,29 +1,30 @@ -# Perception Evaluator +# 知覚評価器 -知覚システムの出力評価用ノードです。 +知覚システムの出力の評価のためのノード。 ## 目的 -このモジュールでは、アノテーションなしで知覚結果がどれだけ正確に生成されているかを評価できます。性能を確認でき、数秒前の結果を評価してオンライン実行を可能にします。 +このモジュールは、注釈なしで知覚結果がいかに正確に生成されているかを評価することを可能にします。性能を確認することができ、数秒前から結果を評価して、オンライン実行を可能にします。 -## 仕組み / アルゴリズム +## 内部動作 / アルゴリズム -評価されるメトリクスは次のとおりです。 +評価される指標は以下の通りです。 -- predicted_path_deviation -- predicted_path_deviation_variance -- lateral_deviation -- yaw_deviation -- yaw_rate -- total_objects_count -- average_objects_count -- interval_objects_count +- predicted_path_deviation(予測経路偏差) +- predicted_path_deviation_variance(予測経路偏差分散) +- lateral_deviation(横方向偏差) +- yaw_deviation(ヨー逸脱) +- yaw_rate(ヨーレート) +- total_objects_count(全オブジェクト数) +- average_objects_count(平均オブジェクト数) +- interval_objects_count(インターバルオブジェクト数) -### predicted_path_deviation / predicted_path_deviation_variance +### 予測経路偏差 / 予測経路偏差分散 -過去のオブジェクトの予測経路と実際の移動経路を比較して、**移動中のオブジェクト**の逸脱量を算出します。各オブジェクトについて、予測経路のポイントと実際の経路の対応するポイント間の平均距離を、指定された時間ステップまで計算します。言い換えると、平均変位誤差(ADE)を計算します。評価対象のオブジェクトは $T_N$ 秒前のオブジェクトで、$T_N$ は予測時間幅 $[T_1, T_2, ..., T_N]$ の最大値です。 +**移動オブジェクト**の実際の移動経路と過去のオブジェクトの予測経路を比較して、偏差を特定します。オブジェクトごとに、予測経路ポイントと実際の経路上の対応するポイント間の平均距離を、指定されたタイムステップまで計算します。言い換えれば、平均変位誤差(ADE)を計算します。評価対象オブジェクトは $T_N$ 秒前のオブジェクトで、$T_N$ は予測時間範囲 $[T_1, T_2, ..., T_N]$ の最大値です。 -> [!NOTE] > $T_N$ 秒前のオブジェクトは、すべてのメトリクスで対象オブジェクトです。これは、メトリクス全体で対象オブジェクトの時間を統一するためです。 +> [!NOTE] +> $T_N$ 秒前のオブジェクトは、すべての指標で対象オブジェクトです。これは、指標間で対象オブジェクトの時間を統一するためです。 ![path_deviation_each_object](./images/path_deviation_each_object.drawio.svg) @@ -36,13 +37,13 @@ Var = \Sigma_{i=1}^{n_{points}} (d_i - ADE)^2 / n_{points} $$ - $n_{points}$ : 予測経路のポイント数 -- $T$ : 予測評価の時間幅。 +- $T$ : 予測評価の時間範囲。 - $dt$ : 予測経路の時間間隔 -- $d_i$ : 経路ポイント $i$ での予測経路と実際の移動経路との距離 -- $ADE$ : 対象オブジェクトの予測経路の平均逸脱量。 -- $Var$ : 対象オブジェクトの予測経路逸脱量の分散。 +- $d_i$ : 経路ポイント $i$ での予測経路と実際の移動経路間の距離 +- $ADE$ : 対象オブジェクトの予測経路の平均偏差。 +- $Var$ : 対象オブジェクトの予測経路偏差の分散。 -最終的な予測経路逸脱量のメトリクスは、同じクラスのすべてのオブジェクトの予測経路の平均逸脱量を平均して計算した後、その平均逸脱量の平均、最大、最小値を計算します。 +最終的な予測経路偏差指標は、同じクラスのすべてのオブジェクトの予測経路の平均偏差の平均を計算し、次に平均偏差の平均、最大、最小を計算することによって計算されます。 ![path_deviation](./images/path_deviation.drawio.svg) @@ -54,149 +55,137 @@ ADE_{min} = min(ADE_j) \end{align} $$ -Var*{max} = max(Var_j) \\ -Var*{min} = min(Var_j) +`Var_{max}` = `max(Var_j)` \\ +`Var_{min}` = `min(Var_j)` \end{align} - $$ -- $n_{objects}$: オブジェクト数 -- $ADE_{mean}$: すべてのオブジェクトを通じた予測パスの平均偏差 -- $ADE_{max}$: すべてのオブジェクトを通じた予測パスの最大偏差 -- $ADE_{min}$: すべてのオブジェクトを通じた予測パスの最小偏差 -- $Var_{mean}$: すべてのオブジェクトを通じた予測パス偏差の平均分散 -- $Var_{max}$: すべてのオブジェクトを通じた予測パス偏差の最大分散 -- $Var_{min}$: すべてのオブジェクトを通じた予測パス偏差の最小分散 +- `n_{objects}`: オブジェクト数 +- `ADE_{mean}`: 全オブジェクトに対する予測経路の平均偏差 +- `ADE_{max}`: 全オブジェクトに対する予測経路の最大偏差 +- `ADE_{min}`: 全オブジェクトに対する予測経路の最小偏差 +- `Var_{mean}`: 全オブジェクトに対する予測経路偏差の平均分散 +- `Var_{max}`: 全オブジェクトに対する予測経路偏差の最大分散 +- `Var_{min}`: 全オブジェクトに対する予測経路偏差の最小分散 -実際の指標名は、オブジェクトクラスと時間視野によって決まります。たとえば、`predicted_path_deviation_variance_CAR_5.00` +実際のメトリック名は、オブジェクトクラスと時間帯によって決定されます。例: `predicted_path_deviation_variance_CAR_5.00` -### 横偏差 +### 側方偏差 -**移動オブジェクト**の安定性を評価するために、滑らかな走行軌跡と認識された位置の横偏差を計算します。滑らかな走行軌跡は、パラメータ`smoothing_window_size`で指定されたウィンドウサイズを持つ中央移動平均フィルタをかけることで計算されます。横偏差は、`T`秒前のタイムスタンプを持つ過去のオブジェクトの認識された位置と、滑らかな走行軌跡を比較することで計算されます。停止しているオブジェクトでは、滑らかな走行軌跡が不安定なため、この指標は計算されません。 +**移動オブジェクト**の側方位置認識の安定性を評価するために、平滑化された走行経路と認識された位置との間の側方偏差を計算します。平滑化された走行経路は、パラメーター `smoothing_window_size` で指定されたウィンドウサイズを持つ中心移動平均フィルターを適用することで計算されます。側方偏差は、平滑化された走行経路とタイムスタンプが `T=T_n` 秒前の過去のオブジェクトの認識された位置を比較することで計算されます。停止しているオブジェクトの場合、平滑化された走行経路は不安定になるため、このメトリックは計算されません。 ![lateral_deviation](./images/lateral_deviation.drawio.svg) ### ヨー偏差 -**移動オブジェクト**の過去のオブジェクトの認識されたヨー角と、滑らかな走行軌跡のヨー方位角の偏差を計算します。滑らかな走行軌跡は、パラメータ`smoothing_window_size`で指定されたウィンドウサイズを持つ中央移動平均フィルタをかけることで計算されます。ヨー偏差は、`T`秒前のタイムスタンプを持つ過去のオブジェクトの認識された向きと滑らかな走行軌跡のヨー方位角を比較することで計算されます。 -停止しているオブジェクトでは、滑らかな走行軌跡が不安定なため、この指標は計算されません。 +**移動オブジェクト**について、過去のオブジェクトの認識されたヨー角と平滑化された走行経路のヨー方位角との間の偏差を計算します。平滑化された走行経路は、パラメーター `smoothing_window_size` で指定されたウィンドウサイズを持つ中心移動平均フィルターを適用することで計算されます。ヨー偏差は、平滑化された走行経路のヨー方位角とタイムスタンプが `T=T_n` 秒前の過去のオブジェクトの認識された向きを比較することで計算されます。 +停止しているオブジェクトの場合、平滑化された走行経路は不安定になるため、このメトリックは計算されません。 ![yaw_deviation](./images/yaw_deviation.drawio.svg) -### ヨーレート +### ヨーレイト -前回のタイムステップからのヨー角の変化に基づいて、オブジェクトのヨーレートを計算します。**静止オブジェクト**で評価され、ヨーレート認識の安定性を評価します。ヨーレートは、過去のオブジェクトのヨー角と、前回のサイクルで受信されたオブジェクトのヨー角を比較することで計算されます。ここで、t2は`T_n`秒前のタイムスタンプです。 +ヨー角の前回タイムステップからの変化に基づいてオブジェクトのヨーレイトを計算します。この値は**静止オブジェクト**に適用され、ヨーレイト認識の安定性を評価します。ヨーレイトは、過去のオブジェクトのヨー角と、前のサイクルで受信したオブジェクトのヨー角を比較することで計算されます。このとき、t2は `T_n` 秒前のタイムスタンプとなります。 ![yaw_rate](./images/yaw_rate.drawio.svg) -### オブジェクトカウント +### オブジェクト数 -指定された検出範囲内の各オブジェクトクラスの検出数をカウントします。これらの指標は最新のオブジェクトに対して測定され、過去のオブジェクトではありません。 +指定された検出範囲内で各オブジェクトクラスの検出数をカウントします。これらのメトリックは、過去のオブジェクトではなく、最新のオブジェクトに対して測定されます。 ![detection_counts](./images/detection_counts.drawio.svg) -図では、範囲`R`は半径のリスト(例:`r_1, r_2, ...`)と高さのリスト(例:`h_1, h_2, ...`)の組み合わせによって決まります。 +提供された図では、範囲 `R` は半径のリスト(例: `r_1, r_2, ...`)と高さのリスト(例: `h_1, h_2, ...`)の組み合わせによって決定されます。 たとえば、 -- 範囲の`R = (r_1, h_1)`のCARの数は1 -- 範囲の`R = (r_1, h_2)`のCARの数は2 -- 範囲の`R = (r_2, h_1)`のCARの数は3 -- 範囲の`R = (r_2, h_2)`のCARの数は4 - -#### 全オブジェクトカウント +- 範囲 `R = (r_1, h_1)` の CAR の数は 1 です +- 範囲 `R = (r_1, h_2)` の CAR の数は 2 です +- 範囲 `R = (r_2, h_1)` の CAR の数は 3 です +- 範囲 `R = (r_2, h_2)` の CAR の数は 4 です -指定された検出範囲内の各クラスの一意のオブジェクトの数をカウントします。全オブジェクトカウントは次のように計算されます。 +#### オブジェクトの総数 +指定された検出範囲内で各クラスの一意のオブジェクトの数をカウントします。オブジェクトの総数は以下のように計算されます。 $$ - \begin{align} -\text{全オブジェクトカウント (クラス、範囲)} & = \left| \bigcup*{t=0}^{T*{\text{now}}} \{ \text{uuid} \mid \text{class}(t, \text{uuid}) = C \wedge \text{position}(t, \text{uuid}) \in R \} \right| +\text{オブジェクトの総数 (クラス、範囲)} = \left| \bigcup_{t=0}^{T_{\text{now}}} \{ \text{uuid} \mid \text{class}(t, \text{uuid}) = C \wedge \text{position}(t, \text{uuid}) \in R \} \right| \end{align} - $$ -ここで、 - -- $\bigcup$ は、$t = 0$ から $T_{\text{now}}$ までのすべてのフレームにおける結合を表し、各 uuid が一度のみカウントされるようにします。 -- $\text{class}(t, \text{uuid}) = C$ は、時刻 $t$ で uuid を持つオブジェクトがクラス $C$ に属することを示します。 -- $\text{position}(t, \text{uuid}) \in R$ は、時刻 $t$ に uuid を持つオブジェクトが指定範囲 $R$ 内にあることを示します。 -- $\left| \{ \ldots \} \right|$ は集合の濃度を示し、すべての考慮対象時間でクラスと範囲の基準を満たすすべての固有 uuid の数をカウントします。 +- $\bigcup$ は`t = 0` から `T_\text{now}` までのすべてのフレームに対する集合を表し、各 uuid のカウントが1回のみ行われるようにする。 +- $\text{class}(t, \text{uuid}) = C$ は時刻 `t` で uuid を持つオブジェクトがクラス `C` に属することを示す。 +- $\text{position}(t, \text{uuid}) \in R$ は時刻 `t` で uuid を持つオブジェクトが指定範囲 `R` 内にあることを示す。 +- $\left| \{ \ldots \} \right|$ は集合の濃度を表し、すべての対象時間においてクラスと範囲の基準を満たす固有の uuid の数をカウントする。 #### 平均オブジェクト数 -指定された検出範囲内の各クラスのオブジェクトの平均数をカウントします。この指標は、uuid を考慮せずに 1 フレームで検出されたオブジェクトの数を測定します。平均オブジェクト数は次のように計算されます。 - +指定された検出範囲内の各クラスのオブジェクトの平均数をカウントする。このメトリックは、uuid を考慮せずに1フレームで検出されたオブジェクト数を測定する。平均オブジェクト数は次のように計算される。 $$ - \begin{align} -\text{平均オブジェクト数(クラス、範囲)} = \frac{1}{N} \sum*{t=0}^{T*{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| +\text{平均オブジェクト数 (クラス, 範囲)} = \frac{1}{N} \sum_{t=0}^{T_\text{now}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| \end{align} - $$ -ここで、 - -- $N$ は時間間隔 $T\_{\text{now}}$ までのフレームの総数を表します(正確には `detection_count_purge_seconds`)。 -- $text{object}$ は、時刻 $t$ でクラスと範囲の基準を満たすオブジェクトの数を表します。 +ただし: -#### 区間オブジェクト数 +- `N` はタイム期間 `t` から `T_\text{now}` 内のフレームの総数を示す (正確に `detection_count_purge_seconds`)。 +- `\text{object}` は時刻 `t` でクラスと範囲の基準を満たすオブジェクトの数を示す。 -最後の `objects_count_window_seconds` において、指定された検出範囲内の各クラスのオブジェクトの平均数をカウントします。この指標は、uuid を考慮せずに 1 フレームで検出されたオブジェクトの数を測定します。区間オブジェクト数は次のように計算されます。 +#### 間隔オブジェクト数 +過去 `objects_count_window_seconds` 間で指定された検出範囲内の各クラスのオブジェクトの平均数をカウントする。このメトリックは、uuid を考慮せずに1フレームで検出されたオブジェクト数を測定する。間隔オブジェクト数は次のように計算される。 $$ - \begin{align} -\text{区間オブジェクト数(クラス、範囲)} = \frac{1}{W} \sum*{t=T*{\text{now}} - T*W}^{T*{\text{now}}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| +\text{間隔オブジェクト数 (クラス, 範囲)} = \frac{1}{W} \sum_{t=T_\text{now} - T_W}^{T_\text{now}} \left| \{ \text{object} \mid \text{class}(t, \text{object}) = C \wedge \text{position}(t, \text{object}) \in R \} \right| \end{align} - $$ -ここで、 +ただし: -- $W$ は最後の `objects_count_window_seconds` 内のフレームの総数を表します。 -- $T_W$ は時間窓 `objects_count_window_seconds` を表します。 +- `W` は `objects_count_window_seconds` 秒内のフレームの総数を示す。 +- `T_W` はタイムウィンドウ `objects_count_window_seconds` を示す。 -## 入出力 +## 入力 / 出力 -| 名前 | タイプ | 説明 | -| ----------------- | ------------------------------------------------- | ----------------------------------------------- | -| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 評価する予測オブジェクト | -| `~/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | 知覚精度の診断情報 | -| `~/markers` | `visualization_msgs::msg::MarkerArray` | デバッグと視覚化のためのビジュアルマーカー | +| Name | Type | Description | +| ----------------- | ------------------------------------------------- | ------------------------------------------------- | +| `~/input/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 評価する予測オブジェクト。 | +| `~/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | 知覚精度の診断情報。 | +| `~/markers` | `visualization_msgs::msg::MarkerArray` | デバッグと可視化用のビジュアルマーカー。 | -## パラメータ +## パラメータ設定 -| 名称 | 型 | 説明 | -| ------------------------------------------------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| `selected_metrics` | リスト | 横逸脱量、ヨー逸脱量、予測経路逸脱量などの評価する指標。 | -| `smoothing_window_size` | 整数 | 経路の平滑化のためのウィンドウサイズを決定し、奇数にする必要があります。 | -| `prediction_time_horizons` | doubleリスト | 秒単位の予測評価のためのタイムホライゾン。 | -| `stopped_velocity_threshold` | double | 車両の停止を確認するためのしきい値速度。 | -| `detection_radius_list` | doubleリスト | 評価対象のオブジェクトの検出半径。(オブジェクトカウント専用) | -| `detection_height_list` | doubleリスト | 評価対象のオブジェクトの検出高さ。(オブジェクトカウント専用) | -| `detection_count_purge_seconds` | double | オブジェクト検出カウントを削除するためのタイムウィンドウ。 | -| `objects_count_window_seconds` | double | オブジェクト検出カウントを保持するためのタイムウィンドウ。このタイムウィンドウ内のオブジェクト検出数は `detection_count_vector_` に保存されます。 | -| `target_object.*.check_lateral_deviation` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の横逸脱を確認するかどうか。 | -| `target_object.*.check_yaw_deviation` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)のヨー逸脱を確認するかどうか。 | -| `target_object.*.check_predicted_path_deviation` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の予測経路逸脱を確認するかどうか。 | -| `target_object.*.check_yaw_rate` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)のヨーレートを確認するかどうか。 | -| `target_object.*.check_total_objects_count` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の合計オブジェクト数をチェックするかどうか。 | -| `target_object.*.check_average_objects_count` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の平均オブジェクト数をチェックするかどうか。 | -| `target_object.*.check_interval_average_objects_count` | ブール値 | 特定のオブジェクトの種類(車、トラックなど)の区間平均オブジェクト数をチェックするかどうか。 | -| `debug_marker.*` | ブール値 | マーカー可視化(履歴パス、予測パスなど)のデバッグパラメーター。 | +| 名称 | タイプ | 説明 | +| -------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `selected_metrics` | リスト | 横ずれ、ヨーずれ、予測パスずれなどの評価する測定基準。 | +| `smoothing_window_size` | 整数 | パスの平滑化ウィンドウサイズを決定する。奇数にする必要がある。 | +| `prediction_time_horizons` | リスト[double] | 秒単位の予測評価の時間軸。 | +| `stopped_velocity_threshold` | double | 車両が停止しているかどうかをチェックする速度しきい値。 | +| `detection_radius_list` | リスト[double] | 評価するオブジェクトの検出半径(オブジェクトカウントのみに使用)。 | +| `detection_height_list` | リスト[double] | 評価するオブジェクトの検出高さ(オブジェクトカウントのみに使用)。 | +| `detection_count_purge_seconds` | double | オブジェクト検出カウントを消去する時間ウィンドウ。 | +| `objects_count_window_seconds` | double | オブジェクト検出カウントを保持する時間ウィンドウ。この時間ウィンドウ内のオブジェクト検出数が `detection_count_vector_` に格納される。 | +| `target_object.*.check_lateral_deviation` | ブール | 特定のオブジェクト種類(車、トラックなど)の横ずれをチェックするかどうか。 | +| `target_object.*.check_yaw_deviation` | ブール | 特定のオブジェクト種類(車、トラックなど)のヨーずれをチェックするかどうか。 | +| `target_object.*.check_predicted_path_deviation` | ブール | 特定のオブジェクト種類(車、トラックなど)の予測パスずれをチェックするかどうか。 | +| `target_object.*.check_yaw_rate` | ブール | 特定のオブジェクト種類(車、トラックなど)のヨーレートをチェックするかどうか。 | +| `target_object.*.check_total_objects_count` | ブール | 特定のオブジェクト種類(車、トラックなど)の総オブジェクトカウントをチェックするかどうか。 | +| `target_object.*.check_average_objects_count` | ブール | 特定のオブジェクト種類(車、トラックなど)の平均オブジェクトカウントをチェックするかどうか。 | +| `target_object.*.check_interval_average_objects_count` | ブール | 特定のオブジェクト種類(車、トラックなど)のインターバル平均オブジェクトカウントをチェックするかどうか。 | +| `debug_marker.*` | ブール | マーカーの可視化(履歴パス、予測パスなど)のデバッグパラメータ。 | -## 仮定 / 既知の制限 +## 想定 / 已知の制限 -予測オブジェクトの現在の位置は、おおむね正確であると想定されています。 +PredictedObjectの現在の位置はおおよそ正確であると想定されます。 ## 将来の拡張 / 未実装部分 -- クラスごとの認識率を向上 -- 異常な物理的挙動を示すオブジェクトのメトリクス(例:フェンスを突き抜ける) -- オブジェクトの分割に対するメトリクス -- 通常は静止しているが移動するオブジェクトに対するメトリクス -- 消滅したオブジェクトのメトリクス -$$ +- クラスごとの認識率の向上 +- 異常な物理的挙動(例:フェンスをすり抜ける)を示す物体に関するメトリクス +- 物体を分割するためのメトリクス +- 通常は静止しているが移動する物体の問題に関するメトリクス +- 消滅する物体のメトリクス + diff --git a/launch/tier4_autoware_api_launch/README.md b/launch/tier4_autoware_api_launch/README.md index 6fbf6ae17985b..270e9e096769d 100644 --- a/launch/tier4_autoware_api_launch/README.md +++ b/launch/tier4_autoware_api_launch/README.md @@ -1,21 +1,23 @@ # tier4_autoware_api_launch -## 概要 +## 説明 -このパッケージには、Autoware内部トピックを外部ソフトウェア(例:フリート管理システム、シミュレーター)で使用される一貫したAPIに変換するノードを実行する起動ファイルが含まれています。 +このパッケージには、Autowareの内部トピックを外部ソフトウェア(フリート管理システム、シミュレーターなど)が使用する一貫したAPIに変換するノードを実行するための起動ファイルを格納しています。 ## パッケージの依存関係 -`package.xml`の``を参照してください。 +`package.xml` の `` を参照してください。 ## 使用方法 -`autoware_api.launch.xml`を使用するには、以下のように`*.launch.xml`に含めることができます。 +以下のように `*.launch.xml` に含めて `autoware_api.launch.xml` を利用できます。 + ```xml ``` -## 注意 +## 注釈 + +処理負荷を低減するために、ROS 2 では [コンポーネント](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) 機能(ROS 1 の Nodelet に類似)を使用します。 -処理負荷を軽減するため、ROS 2 の [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) 機能(ROS 1 の Nodelet に類似)を使用しています。 diff --git a/launch/tier4_control_launch/README.md b/launch/tier4_control_launch/README.md index 0607b57368e00..fbee7f7a39ad5 100644 --- a/launch/tier4_control_launch/README.md +++ b/launch/tier4_control_launch/README.md @@ -1,18 +1,19 @@ -# tier4_control_launch +## tier4_control_launch ## 構造 ![tier4_control_launch](./control_launch.drawio.svg) -## パッケージ依存関係 +## パッケージの依存関係 -`` の詳細については `package.xml` を参照してください。 +``の``を参照してください。 ## 使用方法 -`control.launch.py` を `*.launch.xml` に含めるには、以下のように記述します。 +`*.launch.xml`に次の記述を含めて`control.launch.py`を使用できます。 + +`PACKAGE_param_path`としてパラメータパスを提供する必要があることに注意してください。提供する必要があるパラメータパスのリストは、`planning.launch.xml`の先頭に記載されています。 -`PACKAGE_param_path` としてパラメータパスを設定する必要があります。設定するパラメータパスのリストは `planning.launch.xml` の先頭に記載されています。 ```xml @@ -25,6 +26,7 @@ ``` -## 注釈 +## メモ + +処理負荷を削減するため、ROS 2 の [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) 機能を使用します(ROS 1 の Nodelet に類似) -処理負荷を削減するため、ROS 2における[Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html)の機能(ROS 1におけるNodeletに類似)を使用します。 diff --git a/launch/tier4_localization_launch/README.md b/launch/tier4_localization_launch/README.md index 21a78f2687ab0..910181b1d12c3 100644 --- a/launch/tier4_localization_launch/README.md +++ b/launch/tier4_localization_launch/README.md @@ -4,17 +4,18 @@ ![tier4_localization_launch](./localization_launch.drawio.svg) -## パッケージ依存関係 +## パッケージの依存関係 `package.xml`の``を参照してください。 -## 使用方法 +## 使用 -`localization.launch.xml`を他の`launch`ファイルに次のように含めます。 +他のlaunchファイルに`localization.launch.xml`を以下のようにインクルードします。 -`pose_source`と`twist_source`を指定して、位置推定または速度推定のロカライゼーション方式を選択できます。 +`pose_estimator`または`twist_estimator`として起動するローカライゼーション内のどのメソッドを選択するかを`pose_source`と`twist_source`を指定して選択できます。 + +さらに、パラメーターパスを`PACKAGE_param_path`として指定する必要があります。指定する必要のあるパラメーターパスのリストは`localization.launch.xml`の先頭部分に記載されています。 -さらに、`PACKAGE_param_path`としてパラメータのパスを提供する必要があります。提供する必要のあるパラメータパスのリストは、`localization.launch.xml`の先頭に記載されています。 ```xml @@ -28,3 +29,4 @@ ... ``` + diff --git a/launch/tier4_map_launch/README.md b/launch/tier4_map_launch/README.md index 310cac8182db8..164a1ea28d30b 100644 --- a/launch/tier4_map_launch/README.md +++ b/launch/tier4_map_launch/README.md @@ -4,15 +4,16 @@ ![tier4_map_launch](./map_launch.drawio.svg) -## パッケージ依存関係 +## パッケージ依存 -``を参照してください。 +`` の`` を参照してください。 ## 使用法 -`*.launch.xml` で以下のように記載して `map.launch.py` を使用できます。 +`map.launch.py` を使用するには、次のように `*.launch.xml` に含めることができます。 + +`PACKAGE_param_path` としてパラメータのパスを指定する必要があることに注意してください。指定する必要のあるパラメータパスのリストは、`map.launch.xml` の先頭に記載されています。 -`PACKAGE_param_path` としてパラメータパスを提供する必要があることに注意してください。提供する必要があるパラメータパスのリストは、`map.launch.xml` の最上部に記載されています。 ```xml @@ -32,4 +33,5 @@ ## 注釈 -処理負荷を軽減するために、ROS 2 の [Component](https://docs.ros.org/en/galactic/Concepts/About-Composition.html) 機能を使用しています(ROS 1 の Nodelet と同様)。 +処理負荷を軽減するため、[コンポーネント](https://docs.ros.org/en/galactic/Concepts/About-Composition.html)機能をROS 2で使用します(ROS 1のNodeletに近い) + diff --git a/launch/tier4_perception_launch/README.md b/launch/tier4_perception_launch/README.md index 5dc43c36e2a68..3433e13830e7d 100644 --- a/launch/tier4_perception_launch/README.md +++ b/launch/tier4_perception_launch/README.md @@ -10,9 +10,10 @@ ## 使用方法 -`perception.launch.xml` を使用するには、次のように `*.launch.xml` に含めます。 +`*.launch.xml` に次のように含めることで `perception.launch.xml` を使用できます。 + +パラメータパスを `PACKAGE_param_path` として提供する必要があることに注意してください。提供すべきパラメータパスの一覧は `perception.launch.xml` の先頭に記載されています。 -パラメータパスを `PACKAGE_param_path` として指定する必要があることに注意してください。指定する必要のあるパラメータパスのリストは、`perception.launch.xml` の先頭部に記載されています。 ```xml @@ -25,3 +26,4 @@ ... ``` + diff --git a/launch/tier4_planning_launch/README.md b/launch/tier4_planning_launch/README.md index 2103820ceef38..339e5c9dcc1ad 100644 --- a/launch/tier4_planning_launch/README.md +++ b/launch/tier4_planning_launch/README.md @@ -1,16 +1,17 @@ # tier4_planning_launch -## 構成 +## 構造 ![tier4_planning_launch](./planning_launch.drawio.svg) -## パッケージの依存関係 +## パッケージ依存関係 -`package.xml`の``を参照してください。 +`package.xml` 内の `` を参照してください。 -## 用法 +## 使用方法 + +パラメータパスを `PACKAGE_param_path` として提供する必要があることに注意してください。提供する必要があるパラメータパスのリストは `planning.launch.xml` の最上部に記載されています。 -パラメータのパスを`PACKAGE_param_path`として指定する必要があることに注意してください。指定する必要のあるパラメータのパスは`planning.launch.xml`の先頭で記載されています。 ```xml @@ -20,3 +21,4 @@ ... ``` + diff --git a/launch/tier4_sensing_launch/README.md b/launch/tier4_sensing_launch/README.md index 92c142578a7d0..b020dfad288e6 100644 --- a/launch/tier4_sensing_launch/README.md +++ b/launch/tier4_sensing_launch/README.md @@ -4,13 +4,14 @@ ![tier4_sensing_launch](./sensing_launch.drawio.svg) -## パッケージの依存関係 +## パッケージ依存 -`` の `` を参照してください。 +`` を `package.xml` でご参照ください。 ## 使用方法 -`sensing.launch.xml` を使用するには、`*.launch.xml` に以下のように含めることができます。 +`sensing.launch.xml` を使用するには `*.launch.xml` に以下のように含めることができます。 + ```xml @@ -23,7 +24,8 @@ ## 起動画構成 -このパッケージは、`launch`で指定されたセンサーモデルのセンサー設定を見つけます。 +このパッケージは `launch` で指定されたセンサーモデルのセンサー設定を検索します。 + ```bash launch/ @@ -36,12 +38,14 @@ launch/ ... ``` -## 注釈 +## メモ -このパッケージは、変数を使用した設定を見つけます。 +このパッケージは、変数を使用して設定を検索します。 例) + ```xml ``` + diff --git a/launch/tier4_simulator_launch/README.md b/launch/tier4_simulator_launch/README.md index 513c20ff0e9cb..c3aaf93a53545 100644 --- a/launch/tier4_simulator_launch/README.md +++ b/launch/tier4_simulator_launch/README.md @@ -1,14 +1,15 @@ # tier4_simulator_launch -## 構成 +## 構造 ![tier4_simulator_launch](./simulator_launch.drawio.svg) -## パッケージ依存関係 +## パッケージの依存関係 -詳細については、`package.xml` の `` を参照してください。 +`package.xml` の `` を参照してください。 + +## 使用法 -## 使用方法 ```xml @@ -17,4 +18,5 @@ ``` -simple_planning_simulator で使用されるシミュレータ モデルは、パッケージ "`VEHICLE\_MODEL`\_description" の "config/simulator_model.param.yaml" からロードされています。 +`VEHICLE_MODEL`\_descriptionパッケージの"config/simulator_model.param.yaml"から、simple_planning_simulatorで使用されるシミュレーターモデルがロードされます。 + diff --git a/launch/tier4_system_launch/README.md b/launch/tier4_system_launch/README.md index 82f7e546663d0..f81b78ff355e4 100644 --- a/launch/tier4_system_launch/README.md +++ b/launch/tier4_system_launch/README.md @@ -4,13 +4,14 @@ ![tier4_system_launch](./system_launch.drawio.svg) -## パッケージ依存 +## パッケージの依存関係 -`package.xml` に含まれる `` を参照してください。 +`package.xml` の `` を参照してください。 -## 使い方 +## 使用方法 + +パラメーターパスを `PACKAGE_param_path` として提供する必要があることに注意してください。提供する必要があるパラメーターパスのリストは `system.launch.xml` の先頭部に記載されています。 -パラメータパスを `PACKAGE_param_path` として指定する必要があります。必要となるパラメータパスのリストは `system.launch.xml` の先頭に記述されています。 ```xml @@ -23,3 +24,4 @@ ... ``` + diff --git a/launch/tier4_vehicle_launch/README.md b/launch/tier4_vehicle_launch/README.md index 66248633ede64..6b523ef223c2b 100644 --- a/launch/tier4_vehicle_launch/README.md +++ b/launch/tier4_vehicle_launch/README.md @@ -1,16 +1,17 @@ # tier4_vehicle_launch -## 構成 +## 構造 ![tier4_vehicle_launch](./vehicle_launch.drawio.svg) -## パッケージの依存関係 +## パッケージ依存関係 -`` in `package.xml` をご参照ください。 +`` を `package.xml` で参照してください。 ## 使用方法 -`*.launch.xml` に次のように含めることで、`vehicle.launch.xml` を使用できます。 +`vehicle.launch.xml` を使用する場合は、`*.launch.xml` に以下のように含めることができます。 + ```xml @@ -22,16 +23,18 @@ ``` -## 注釈 +## メモ + +このパッケージは、変数とパッケージ名を使用して外部パッケージと設定をいくつか検索します。 -このパッケージは変数やパッケージ名でいくつかの外部パッケージや設定を検出します。 +例) -例) ```xml ``` + ```xml ``` @@ -40,14 +43,15 @@ ### 引数 -| 名称 | タイプ | 説明 | デフォルト | -| ------------- | ------ | ---------------- | ---------- | -| sensor_model | 文字列 | センサーモデル名 | 空文字 | -| vehicle_model | 文字列 | 車両モデル名 | 空文字 | +| 名称 | タイプ | 説明 | デフォルト | +| ------------- | ------ | ----------- | ------- | +| sensor_model | String | センサーモデル名 | "" | +| vehicle_model | String | 車両モデル名 | "" | ### 使用方法 -`*.launch.xml`に次のように記述できます。 +`*.launch.xml`に次のように記載できます。 + ```xml @@ -59,3 +63,4 @@ ``` + diff --git a/localization/autoware_ekf_localizer/README.md b/localization/autoware_ekf_localizer/README.md index 61ad8bc650166..036b1fccf2410 100644 --- a/localization/autoware_ekf_localizer/README.md +++ b/localization/autoware_ekf_localizer/README.md @@ -1,6 +1,6 @@ # 概要 -**拡張カルマンフィルタローカライザー**は、2D車両力学モデルを入力エゴポーズとエゴツイストメッセージと統合して、堅牢でより少ないノイズを持つロボットのポーズと捻じれを推定します。このアルゴリズムは、自律走行システムなどの高速移動ロボットのために特別に設計されています。 +**Extend Kalman Filter Localizer**は、自己位置姿勢及び自己運動のメッセージを入力として、2D車両ダイナミクスモデルと統合することによって、堅牢でノイズの少ないロボットの姿勢と運動量を推定します。本アルゴリズムは、自動運転システムなどの高速移動するロボット向けに設計されています。 ## フローチャート @@ -10,15 +10,15 @@ autoware_ekf_localizerの全体的なフローチャートを以下に示しま

-## 機能 +## 特徴 -このパッケージには、次の機能があります。 +本パッケージには、以下の機能が含まれています。 -- **タイム遅延補償**入力メッセージに対して、さまざまな遅延時間で入力情報を適切に統合できます。これは、自動運転車などの高速で移動するロボットでは特に重要です(次の図を参照)。 -- **ヨーバイアスの自動推定**センサー取り付け角度の誤差によるモデリングエラーを防ぎ、推定精度を向上させることができます。 -- **マハラノビス距離ゲート**確率的な外れ値検出を可能にし、使用する入力と無視する入力を判断できます。 -- **スムーズな更新**カルマンフィルタの測定値更新は通常、測定値を取得したときに実行されますが、特に低周波測定値の場合、推定値に大きな変化をもたらす可能性があります。このアルゴリズムは測定時間を考慮できるため、測定データは複数の部分に分割し、一貫性を維持しながらスムーズに統合できます(次の図を参照)。 -- **ピッチからの垂直訂正量の計算**勾配でのローカライゼーションの不安定性を軽減します。たとえば、上り坂では、EKFは3自由度(x、y、ヨー)のみを考慮するため、まるで地面に埋もれているかのように動作します(「ピッチからのデルタの計算」図の左側を参照)。したがって、EKFは公式に従ってz座標を修正します(「ピッチからのデルタの計算」図の右側を参照)。 +- 入力メッセージの**時差補正**により、変化する時差を持った入力情報を適切に統合できます。これは、自動運転車などの高速で移動するロボットに特に重要です(以下の図を参照)。 +- **ヨーバイアスの自動推定**により、センサー取り付け角度の誤差によるモデリングエラーを防ぐことができ、推定精度が向上します。 +- **マハラノビス距離ゲート**により、どの入力を利用するか無視するかを判断するための確率的な外れ値検出が可能になります。 +- **滑らかな更新**、カルマンフィルタの測定値更新は通常測定値が取得されたときに行われますが、これにより推定値が大きく変化する可能性があります。特に低頻度の測定値の場合です。本アルゴリズムは測定時間を考慮できるため、測定値データを複数の部分に分割し、一貫性を維持しながら滑らかに統合できます(以下の図を参照)。 +- **ピッチからの垂直補正量の算出**により、勾配上の位置推定の不安定性が軽減されます。例えば、上り坂ではEKFが3DoF(x、y、ヨー)のみを考慮するため、地面に埋もれているかのように挙動します(「ピッチからのdeltaの算出」図の左側を参照)。したがって、EKFは数式に従ってz座標を修正します(「ピッチからのdeltaの算出」図の右側を参照)。

@@ -34,139 +34,157 @@ autoware_ekf_localizerの全体的なフローチャートを以下に示しま ## ノード -### サブスクライブするトピック - -| 名前 | タイプ | 説明 | -| -------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `measured_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 測定共分散行列を持つ入力ポーズソース | -| `measured_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 測定共分散行列を持つ入力ツイストソース | -| `initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKF の初期ポーズ。推定ポーズは開始時にゼロで初期化されます。公開されるたびにこのメッセージで初期化されます。 | - -### 公開トピック - -| 名前 | タイプ | 説明 | -| --------------------------------- | ------------------------------------------------ | --------------------------------------- | -| `ekf_odom` | `nav_msgs::msg::Odometry` | 推定オドメトリ。 | -| `ekf_pose` | `geometry_msgs::msg::PoseStamped` | 推定ポーズ。 | -| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 共分散を含む推定ポーズ。 | -| `ekf_biased_pose` | `geometry_msgs::msg::PoseStamped` | Yawバイアスを含む推定ポーズ。 | -| `ekf_biased_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Yawバイアスを含む共分散付き推定ポーズ。 | -| `ekf_twist` | `geometry_msgs::msg::TwistStamped` | 推定ツイスト。 | -| `ekf_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 共分散を含む推定ツイスト。 | -| `diagnostics` | `diagnostics_msgs::msg::DiagnosticArray` | 診断情報。 | - -### 公開 TF +### サブスクライブトピック + +| 名称 | タイプ | 説明 | +| -------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `measured_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 計測共分散行列を持つ入力ポーズソース。 | +| `measured_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 計測共分散行列を持つ入力ツイストソース。 | +| `initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKFの初期ポーズ。推定されたポーズは、開始時にゼロで初期化されます。このメッセージが発行されるたびに、このメッセージで初期化されます。 | + +## 配信トピック + +- `/tf`: フレーム間の変換行列 +- `/current_pose`: 自車位置 +- `/planning/scenario`: シナリオプランニングモジュールの結果 +- `/planning/trajectory`: トラジェクトリプランニングモジュールの結果 +- `/planning/obstacle`: オブジェクト検出とトラッキングモジュールの結果 +- `/planning/speed`: スピードプランニングモジュールの結果 +- `/planning/debug`: プランニングモジュールのデバッグ情報 +- `/lidar_points`: LiDAR点群データ('post resampling'` 後) +- `/image/front_color`: フロントカメラのカラー画像 +- `/image/side_color`: サイドカメラのカラー画像 +- `/ndt_map`: ND マップ +- `/route`: ルート情報 + +| 名前 | タイプ | 説明 | +|:---|:---|:---| +| `ekf_odom` | `nav_msgs::msg::Odometry` | 推定オドメトリ | +| `ekf_pose` | `geometry_msgs::msg::PoseStamped` | 推定ポーズ | +| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定ポーズ(共分散あり) | +| `ekf_biased_pose` | `geometry_msgs::msg::PoseStamped` | ヨーバイアスを含んだ推定ポーズ | +| `ekf_biased_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | ヨーバイアスを含んだ推定ポーズ(共分散あり) | +| `ekf_twist` | `geometry_msgs::msg::TwistStamped` | 推定ツイスト | +| `ekf_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 推定ツイスト(共分散あり) | +| `diagnostics` | `diagnostics_msgs::msg::DiagnosticArray` | 診断情報 | +| `debug/processing_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 処理時間 [ms] | + +### 公開されたTF - base_link - `map` 座標から推定姿勢への TF。 + `map`座標から推定された姿勢へのTF. -## 関数 +## 機能 ### 予測 -現在のロボットの状態は、指定された予測モデルを使用して、これまで推定されたデータから予測されます。この計算は一定の間隔(`predict_frequency [Hz]`)で呼び出されます。予測式はこのページの最後に記載されています。 +現在のロボットの状態は、与えられた予測モデルを使用して、以前の推定データから予測されます。この計算は、一定の間隔(`predict_frequency[Hz]`)で呼び出されます。予測方程式はこのページの最後に記載されています。 -### 測定値更新 +### 計測の更新 -更新前に、測定された入力値と予測された状態との間でマハラノビス距離が計算されます。測定値更新は、マハラノビス距離が所定のしきい値を超える入力値に対しては実行されません。 +更新の前に、測定された入力と予測された状態との間のマハラノビス距離が計算されます。マハラノビス距離が与えられたしきい値を超える入力に対しては、測定更新は実行されません。 -予測された状態は、最新の測定入力、measured_pose、measured_twistを使用して更新されます。更新は、通常は高周波で予測と同じ周波数で行われ、スムーズな状態推定を実行できます。 +予測された状態は、最新の測定された入力、測定された姿勢、測定されたツイストで更新されます。更新は、通常、高周波で行われる予測と同じ周波数で行われ、滑らかな状態推定が可能になります。 ## パラメータの説明 -パラメータは `launch/ekf_localizer.launch` で設定されます。 +パラメータは`launch/ekf_localizer.launch`に設定されています。 -### ノードの場合 +### ノード用 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/node.sub_schema.json") }} -### ポーズの測定値の場合 +### 姿勢の測定用 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/pose_measurement.sub_schema.json") }} -### ツイストの測定値の場合 +### ツイストの測定用 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/twist_measurement.sub_schema.json") }} -### プロセスノイズの場合 +### プロセスノイズ用 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/process_noise.sub_schema.json") }} -注: 位置 x と y のプロセスノイズは非線形動特性から自動的に計算されます。 +注:位置のxおよびyのプロセスノイズは、非線形動力学から自動的に計算されます。 -### 1 次元単純フィルタのパラメータ +### 単純な1Dフィルタパラメータ {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/simple_1d_filter_parameters.sub_schema.json") }} -### 診断の場合 +### 診断用 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/diagnostics.sub_schema.json") }} -### 諸々 +### その他 {{ json_to_markdown("localization/autoware_ekf_localizer/schema/sub/misc.sub_schema.json") }} -## EKF パラメータの調整方法 +## EKFパラメータの調整方法 ### 0. 準備 -- ポーズとツイストのメッセージヘッダーの時間が適切にセンサー時間に設定されていることを確認します。時間遅延はこの値から計算されるためです。タイマの同期に関する問題から適切な時間を設定するのが難しい場合は、`twist_additional_delay` と `pose_additional_delay` を使用して時間を修正してください。 -- 測定ポーズとツイストの関係が適切であるかどうかを確認します(ポーズの微分がツイストと同様の値になるかどうか)。この差異は主に単位の誤り(ラジアンと度数の混同など)またはバイアスノイズが原因であり、大きな推定誤差につながります。 +- ヘッダー時刻が姿勢メッセージとツイストメッセージで適切にセンサー時刻に設定されているかどうかを確認します。時間遅延はこの値から計算されるからです。タイマーの同期問題により適切な時間を設定することが難しい場合は、`twist_additional_delay`と`pose_additional_delay`を使用して時間を補正します。 +- 計測された姿勢とツイストの関係が適切であるかどうか(姿勢の微分がツイストと同様の値を持っているかどうか)を確認します。この不一致は、主に単位エラー(ラジアン/度数の混同など)またはバイアスノイズによって引き起こされ、大きな推定エラーが発生します。 ### 1. センサーパラメータの調整 -各センサの標準偏差を設定します。ヘッダーのタイムスタンプデータの不確かさに対する`pose_measure_uncertainty_time`です。各観測センサデータの`*_smoothing_steps`を設定することで、スムージングのステップ数を調整できます。数を増やすと推定値のスムーズさが向上しますが、推定パフォーマンスに悪影響が出る可能性があります。 +### それぞれのセンサーの標準偏差の設定 + +`pose_measure_uncertainty_time` はヘッダタイムスタンプデータの不確かさ用です。 + +`*_smoothing_steps` のチューニングによって、それぞれの観測センサーデータのスムージングステップ数をチューニングすることもできます。ステップ数が増えると推定の滑らかさが向上しますが、推定性能に悪影響を与える場合があります。 - `pose_measure_uncertainty_time` - `pose_smoothing_steps` - `twist_smoothing_steps` -### 2. プロセスモデルパラメータの調整 +### 2. プロセスモデルパラメータのチューニング - `proc_stddev_vx_c` : 最大線形加速度に設定 - `proc_stddev_wz_c` : 最大角加速度に設定 -- `proc_stddev_yaw_c` : このパラメータはヨーとヨーレート間の相関を表します。値が大きいほど、ヨーの変化が推定ヨーレートと相関しません。これを0に設定すると、推定ヨーの変化がヨーレートと等しくなります。通常は0に設定する必要があります。 -- `proc_stddev_yaw_bias_c` : このパラメータはヨーバイアスの変化率の標準偏差です。ほとんどの場合、ヨーバイアスは一定であるため、非常に小さくなければなりませんが、ゼロではありません。 +- `proc_stddev_yaw_c` : このパラメータはヨーとヨーレートの相関関係を示します。値が大きいほど、ヨーの変化が推定ヨーレートと相関しません。これを 0 に設定すると、推定ヨーの変化がヨーレートに等しくなります。通常、これは 0 に設定する必要があります。 +- `proc_stddev_yaw_bias_c` : このパラメータはヨーバイアスの変化率に対する標準偏差です。ほとんどの場合、ヨーバイアスは一定なので非常に小さくなりますが、0 以外である必要があります。 -### 3. ゲートパラメータの調整 +### 3. ゲートパラメータのチューニング -EKFは観測による更新前にマハラノビス距離を使用してゲーティングを実行します。ゲートサイズは`pose_gate_dist`パラメータと`twist_gate_dist`によって決定されます。マハラノビス距離がこの値よりも大きい場合、観測は無視されます。 +EKF は観測値で更新する前にマハラノビス距離を使用してゲーティングを行います。ゲートサイズは `pose_gate_dist` パラメータと `twist_gate_dist` によって決定されます。マハラノビス距離がこの値より大きい場合、観測値は無視されます。 -このゲーティングプロセスは、カイ二乗分布を使用した統計的テストに基づいています。モデル化されたように、マハラノビス距離はヨーの自由度が3、ねじれの自由度が2のカイ二乗分布に従うものと仮定しています。 +このゲーティングプロセスは、カイ二乗分布を使用した統計的テストに基づいています。モデリングすると、マハラノビス距離は姿勢に対して自由度 3 のカイ二乗分布、ねじれに対して自由度 2 のカイ二乗分布に従うと想定されます。 -現在のところ、共分散推定の精度はあまり良くないため、偽陽性による拒否を減らすために、有意水準を非常に小さい値に設定することをお勧めします。 +現在、共分散推定自体の精度はあまり良くないので、偽陽性によるリジェクトを抑えるために有意水準を非常に小さい値に設定することをお勧めします。 -| 重要度レベル | 2 次元結果の閾値 | 3 次元結果の閾値 | -| ------------ | ---------------- | ---------------- | -| $10 ^ {-2}$ | 9.21 | 11.3 | -| $10 ^ {-3}$ | 13.8 | 16.3 | -| $10 ^ {-4}$ | 18.4 | 21.1 | -| $10 ^ {-5}$ | 23.0 | 25.9 | -| $10 ^ {-6}$ | 27.6 | 30.7 | -| $10 ^ {-7}$ | 32.2 | 35.4 | -| $10 ^ {-8}$ | 36.8 | 40.1 | -| $10 ^ {-9}$ | 41.4 | 44.8 | -| $10 ^ {-10}$ | 46.1 | 49.5 | +| 有意水準 | 2 dof の閾値 | 3 dof の閾値 | +| --------- | ------------- | ------------- | +| $10 ^ {-2}$ | 9.21 | 11.3 | +| $10 ^ {-3}$ | 13.8 | 16.3 | +| $10 ^ {-4}$ | 18.4 | 21.1 | +| $10 ^ {-5}$ | 23.0 | 25.9 | +| $10 ^ {-6}$ | 27.6 | 30.7 | +| $10 ^ {-7}$ | 32.2 | 35.4 | +| $10 ^ {-8}$ | 36.8 | 40.1 | +| $10 ^ {-9}$ | 41.4 | 44.8 | +| $10 ^ {-10}$ | 46.1 | 49.5 | ## カルマンフィルタモデル -### 更新関数における運動モデル +### 更新関数における運動学モデル -ここで、$\theta_k$ は車体の進行方向の角度で、取り付け角度のバイアスを含みます。 -$b_k$ はヨーバイアスの補正項であり、$(\theta_k+b_k)$が base_link の進行方向の角度になるようにモデル化されます。 -pose_estimator は base_link を地図座標系で公開すると予想されています。ただし、ヨー角はキャリブレーションのエラーによりずれる場合があります。このモデルは、このエラーを補正し、推定精度を向上させます。 +ここで, $\theta_k$は車両の進行方向角を表し、取り付け角バイアスを含みます。 +$b_k$はヨーバイアスの補正項であり、$(\theta_k+b_k)$がベースリンクの進行方向角になるようにモデル化されています。 +pose_estimatorはベースリンクをマップ座標系でパブリッシュすると予想されています。ただし、ヨー角はキャリブレーションエラーによりオフセットされる場合があります。このモデルはこのエラーを補正し、推定精度を向上させます。 -### タイム遅延モデル +### タイムディレイモデル -測定タイム遅延は、拡張状態 [1] (セクション 7.3 固定遅延スムージングを参照) で処理されます。 +測定タイムディレイは拡張状態によって処理されます [1] (セクション7.3 FIXED-LAG SMOOTHINGを参照)。 -拡張状態の特定の構造に基づいて解析的な展開を適用できるため、次元は大きくなりますが、計算の複雑さは大幅には変わりません。 +拡張状態の特定の構造に基づいて解析的展開を適用できるため、次元が高くなっても、計算上の複雑さは大幅には変化しません。 -## Autoware NDT によるテスト結果 +## Autoware NDTでのテスト結果

@@ -185,23 +203,24 @@ pose_estimator は base_link を地図座標系で公開すると予想されて

-### WARN 状態になる条件 +### WARN状態となる条件 -- ノードがアクティブ状態ではありません。 -- Pose/Twist トピックによる連続的な測定更新の数が `pose_no_update_count_threshold_warn`/`twist_no_update_count_threshold_warn` を超えています。 -- Pose/Twist トピックのタイムスタンプが遅延補正範囲を超えています。 -- Pose/Twist トピックが共分散推定のためのマハラノビス距離の範囲を超えています。 -- 共分散楕円が `warn_ellipse_size` (長軸) または `warn_ellipse_size_lateral_direction` (横方向) のしきい値を超えています。 +- ノードがアクティブ状態ではない。 +- Pose/Twistトピックを介した連続的な測定更新がない回数が`pose_no_update_count_threshold_warn`/`twist_no_update_count_threshold_warn`を超える。 +- Pose/Twistトピックのタイムスタンプがディレイ補正範囲を超える。 +- Pose/Twistトピックが共分散推定のマハラノビス距離の範囲を超える。 +- 共分散楕円が縦軸で閾値`warn_ellipse_size`、または横方向で`warn_ellipse_size_lateral_direction`よりも大きい。 -### ERROR 状態になる条件 +### ERROR状態となる条件 -- Pose/Twist トピックによる連続的な測定更新の数が `pose_no_update_count_threshold_error`/`twist_no_update_count_threshold_error` を超えています。 -- 共分散楕円が `error_ellipse_size` (長軸) または `error_ellipse_size_lateral_direction` (横方向) のしきい値を超えています。 +- Pose/Twistトピックを介した連続的な測定更新がない回数が`pose_no_update_count_threshold_error`/`twist_no_update_count_threshold_error`を超える。 +- 共分散楕円が縦軸で閾値`error_ellipse_size`、または横方向で`error_ellipse_size_lateral_direction`よりも大きい。 ## 既知の問題 -- 複数の pose_estimators が使用されている場合、EKF への入力には各ソースに対応する複数のヨーバイアスが含まれます。ただし、現在の EKF はヨーバイアスが 1 つしか存在しないと想定しています。したがって、現在の EKF 状態のヨーバイアス `b_k` は意味がなく、これらの複数のヨーバイアスを正しく処理することはできません。そのため、今後の作業では、ヨー推定値を持つ各センサーのヨーバイアスを導入する予定です。 +- 複数のpose_estimatorが使用されている場合、EKFへの入力には各ソースに対応する複数のヨーバイアスが含まれます。ただし、現在のEKFでは、1つのヨーバイアスしか存在しないと想定されています。そのため、現在のEKF状態のヨーバイアス`b_k`は意味を成さず、これらの複数のヨーバイアスを正しく扱うことができません。したがって、今後の作業にはヨー推定を使用した各センサーのヨーバイアスの導入が含まれます。 -## 参考資料 +## 参照 [1] Anderson, B. D. O., & Moore, J. B. (1979). Optimal filtering. Englewood Cliffs, NJ: Prentice-Hall. + diff --git a/localization/autoware_geo_pose_projector/README.md b/localization/autoware_geo_pose_projector/README.md index 0407bedab3540..96548b5143697 100644 --- a/localization/autoware_geo_pose_projector/README.md +++ b/localization/autoware_geo_pose_projector/README.md @@ -2,27 +2,28 @@ ## 概要 -このノードは、地理参照された姿勢トピックを購読し、マップフレーム内の姿勢を公開するシンプルなノードです。 +このノードは、地理参照された姿勢トピックをサブスクライブして、マップフレーム内の姿勢をパブリッシュするシンプルなノードです。 -## 購読トピック +## サブスクライブされるトピック -| 名前 | タイプ | 説明 | -| ------------------------- | ---------------------------------------------------- | ------------------------ | -| `input_geo_pose` | `geographic_msgs::msg::GeoPoseWithCovarianceStamped` | 地理参照された位置 | -| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectedObjectInfo` | マッププロジェクター情報 | +| 名前 | タイプ | 説明 | +| ------------------------- | --------------------------------------------------------- | ---------------- | +| `input_geo_pose` | `geographic_msgs::msg::GeoPoseWithCovarianceStamped` | 地理参照された位置 | +| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectedObjectInfo` | マップ投影情報 | -## 公開トピック +## パブリッシュされるトピック -| 名称 | 型 | 説明 | -| ------------- | ----------------------------------------------- | ------------------------ | -| `output_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | マップフレーム内のポーズ | -| `/tf` | `tf2_msgs::msg::TFMessage` | 親リンクと子リンク間のtf | +| 名称 | 型 | 説明 | +| ------------- | ----------------------------------------------- | ------------------------------------- | +| `output_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | マップ座標系における自車位置 | +| `/tf` | `tf2_msgs::msg::TFMessage` | 親リンクから子リンクへの変換 | ## パラメータ -{{ json_to_markdown("localization/autoware_geo_pose_projector/schema/geo_pose_projector.schema.json") }} +{{ json_to_markdown("localization/autoware_geo_pose_projector/schema/geo_pose_projector_ja.schema.json") }} -## 制限事項 +## 制約事項 + +使用する投影の種類によっては、共分散の変換が正しくない場合があります。入力トピックの共分散は、(緯度、経度、高度)で対角行列として表されます。 +現在、x軸を東方向で、y軸を北方向と仮定しています。そのため、この仮定が破綻すると、特に緯度と経度の共分散が異なる場合、変換が正しくない可能性があります。 -使用する投影タイプによっては、共分散を変換できない可能性があります。入力トピックの共分散は、対角行列として(緯度、経度、高度)で表されます。 -現在、x軸を東向き、y軸を北向きと想定しています。そのため、この仮定が破られると、特に緯度と経度の共分散が異なる場合は、変換が正しく処理されない可能性があります。 diff --git a/localization/autoware_gyro_odometer/README.md b/localization/autoware_gyro_odometer/README.md index db0f73cacdfc2..41a5374cc4538 100644 --- a/localization/autoware_gyro_odometer/README.md +++ b/localization/autoware_gyro_odometer/README.md @@ -2,88 +2,88 @@ ## 目的 -`autoware_gyro_odometer` は IMU と車速を組み合わせて、ひねり速度を推定するためのパッケージです。 +`autoware_gyro_odometer` は IMU と車速を組み合わせ、ねじれを推定するパッケージです。 -## 入力 / 出力 +## 入出力 ### 入力 +- imu_scaled/imu: IMU データ(角速度、加速度) +- map_odom_tf: Map から Odom への変換行列(オプション) +- odom_tf: Odom から Imu への変換行列(オプション) +- vehicle_speed: 車速(オプション) +- current_pose: 自車位置(オプション) -- `/vehicle/odometry/twist` (geometry_msgs/Twist): ロボットのひねり速度 -- `/imu//data_raw` (sensor_msgs/Imu): IMU データ -- `/tf` (tf2/TransformStamped): ロボットの TF トランスフォーム -- `/vehicle/wheel_cmd` (vehicle_msgs/WheelCmd): 車輪速度 +### 出力 +- odom_tf: Odom から Base_footprint への変換行列 +- odom: Odom のトランスレートとクォータニオン + +| 名称 | タイプ | 説明 | +| ------------------------------- | ----------------------------------------------- | ----------------------------------------------------------- | +| `vehicle/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | Fahrzeugから得られる共分散付きねじり | +| `imu` | `sensor_msgs::msg::Imu` | センサーから得られる IMU | ### 出力 -- `/vehicle/twist` (geometry_msgs/Twist): 補償されたひねり速度 +**自動運転ソフトウェアドキュメンテーション** -| 名称 | 型 | 説明 | -| ------------------------------- | ------------------------------------------------ | ------------------------ | -| `vehicle/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 車両の共分散付きツイスト | -| `imu` | `sensor_msgs::msg::Imu` | センサーの IMU | +**Planningコンポーネント** -### アウトプット +**目的** -車両のダイナミクス モデルは、エンコーダーの `post resampling` 計測値のフィードバックと、Planning コンポーネンにより生成された目的速度、加速度を組み合わせ、自車位置と姿勢を推定します。ダイナミクス モデルは、非線形車輪モデルに基づく 2 自由度システムを想定しています。 +Planningコンポーネントは、自車位置から目的地までの安全で効率的なパスを生成します。 -エンコーダーの `post resampling` 計測値は、ホイール アライメント、回転径、およびアライメントの不均衡性を補正するために実装された、低パス フィルター付きの differentiation により、速度および加速度に変換されます。ダイナミクス モデルは、以下の式を使用して、自車位置と姿勢を計算します。 +**機能** -``` -x = x0 + \int vcos(θ) dt -y = y0 + \int vsin(θ) dt -θ = θ0 + \int ω dt -``` +- グローバルパス計画 +- ローカルパス計画 +- 'post resampling'による計画の再生成 -ここで、 +**障害物回避** -- `x` は x 軸上の自車位置 -- `y` は y 軸上の自車位置 -- `θ` は自車の偏角 -- `v` は車両の速度 -- `ω` は車両の角速度 -- `x0`、`y0`、`θ0` は初期条件 +障害物を検出し、安全な回避パスを生成します。 -車両の速度と加速度は、Planning コンポーネンによって生成されます。Planning コンポーネンは、周囲環境に関する情報をセンサから収集し、車両を目的地まで安全かつ効率的に移動させる目的経路を生成します。 +**モジュール** -ダイナミクス モデルは、以下の基準に基づいて、自車位置と姿勢の推定値を評価します。 +- **パスプランナー:** グローバルおよびローカルパスを生成します。 +- **障害物検出:** 障害物を検出し、そのタイプと位置を推定します。 +- **障害物回避:** 障害物を回避する最適なパスを生成します。 -- **速度逸脱量:** Planning コンポーネンによって指定された速度からの自車速度の逸脱量 -- **加速度逸脱量:** Planning コンポーネンによって指定された加速度からの自車加速度の逸脱量 -- **軌跡逸脱量:** Planning コンポーネンによって指定された軌跡からの自車位置の逸脱量 +**Autowareとの統合** -Autoware では、こうした基準を使用して、ダイナミクス モデルの推定値の精度が検証されます。 +Planningコンポーネントは、PerceptionコンポーネントおよびVehicle Controlコンポーネントと緊密に統合されており、より包括的な自動運転システムを構築しています。 -| 名称 | 種別 | 説明 | -| ----------------------- | ------------------------------------------------ | ------------------ | -| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 共分散付き推測速度 | +| 名前 | タイプ | 説明 | +| ----------------------- | ------------------------------------------------ | ------------------------------- | +| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 共分散付きの推定されたひねり | -## パラメータ +## パラメーター {{ json_to_markdown("localization/autoware_gyro_odometer/schema/gyro_odometer.schema.json") }} -## 前提条件/既知の制限 +## 想定事項/既知の限界 -- [前提条件] 入力ツイストメッセージのフレーム ID は base_link に設定する必要があります。 +- [想定] 入力ツイストメッセージのframe_idはbase_linkに設定されている必要があります。 -- [前提条件] 入力メッセージの共分散は適切に割り当てられている必要があります。 +- [想定] 入力メッセージの共分散は適切に割り当てられている必要があります。 -- [前提条件] 縦方向の車両速度とヨー軸まわりの角速度の両方が十分に小さい場合は、角速度をゼロに設定します。これは、IMU 角速度バイアスの抑制のためのものです。この処理がないと、停止時に車両状態を誤って推定してしまいます。 +- [想定] 縦方向の車速とヨー軸周りの角速度の両方が十分に小さい場合、角速度はゼロに設定されます。これはIMU角速度バイアスの抑制のためです。この処理がなければ、静止時に車両の状態を誤って見積もります。 -- [制限事項] 出力メッセージの周波数は、入力 IMU メッセージの周波数に依存します。 +- [制限] 出力メッセージの頻度は入力IMUメッセージの頻度に依存します。 -- [制限事項] 横方向および鉛直方向の速度について信頼できる値を生成できません。そのため、出力共分散行列の対応する要素には大きな値が割り当てられます。 +- [制限] 横方向速度と鉛直速度の信頼できる値を生成できません。したがって、出力共分散行列の対応する要素には大きな値が割り当てられます。 ## 診断 drawing -| 名称 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | -| -------------------------------- | -------------------------------------------------------------- | ------------------ | -------------------------------------------- | -| `topic_time_stamp` | サービスを呼び出すときのタイムスタンプ [ナノ秒] | なし | なし | -| `is_arrived_first_vehicle_twist` | 車両の Twist トピックを少なくとも 1 回受信したかどうかのフラグ | まだ受信していない | なし | -| `is_arrived_first_imu` | IMU トピックを少なくとも 1 回受信したかどうかのフラグ | まだ受信していない | なし | -| `vehicle_twist_time_stamp_dt` | 現在時刻と最新の車両の Twist トピック間の時間差 [秒] | なし | 時間差が `message_timeout_sec` より **長い** | -| `imu_time_stamp_dt` | 現在時刻と最新の IMU トピック間の時間差 [秒] | なし | 時間差が `message_timeout_sec` より **長い** | -| `vehicle_twist_queue_size` | `vehicle_twist_queue` のサイズ | なし | なし | -| `imu_queue_size` | `gyro_queue` のサイズ | なし | なし | -| `is_succeed_transform_imu` | IMU の変換の成功/失敗フラグ | なし | 変換が失敗した | +| 名称 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | +| -------------------------------- | ----------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------------------- | +| `topic_time_stamp` | サービス呼び出しのタイムスタンプ。(ナノ秒) | なし | なし | +| `is_arrived_first_vehicle_twist` | ビークル ツイスト トピックが一度でも受信されたかどうか。 | 未受信 | なし | +| `is_arrived_first_imu` | IMU トピックが一度でも受信されたかどうか。 | 未受信 | なし | +| `vehicle_twist_time_stamp_dt` | 現在時刻と最新のビークル ツイスト トピックとの時間差。(秒) | なし | 時間差が `message_timeout_sec` より **長い** | +| `imu_time_stamp_dt` | 現在時刻と最新の IMU トピックとの時間差。(秒) | なし | 時間差が `message_timeout_sec` より **長い** | +| `vehicle_twist_queue_size` | vehicle_twist_queue のサイズ。 | なし | なし | +| `imu_queue_size` | gyro_queue のサイズ。 | なし | なし | +| `is_succeed_transform_imu` | IMU 変換が成功したかどうか。 | なし | 失敗 | + diff --git a/localization/autoware_landmark_based_localizer/README.md b/localization/autoware_landmark_based_localizer/README.md index 897a8fb9dec15..4ef3953231dc1 100644 --- a/localization/autoware_landmark_based_localizer/README.md +++ b/localization/autoware_landmark_based_localizer/README.md @@ -1,23 +1,23 @@ -# ランドマークベースの局在化 +# ランドマークベースのLocalizer -このディレクトリにはランドマークベースの局在化用のパッケージが含まれています。 +このディレクトリには、ランドマークベースのローカリゼーション用のパッケージが含まれています。 -たとえばランドマークには次のものがあります。 +ランドマークとは、以下のようなものです。 - カメラで検出されたARタグ - LiDARで検出された強度によって特徴付けられたボード など -これらのランドマークは検出と推定の姿勢が容易であるため、ランドマークの姿勢が事前にマップに記載されている場合、検出されたランドマークの姿勢から自己姿勢を計算できます。 +これらのランドマークは検出と姿勢推定が容易であるため、ランドマークの姿勢が事前にマップに記載されている場合、検出されたランドマークの姿勢から自車姿勢を計算できます。 -現在、ランドマークは平面であると想定されています。 +現在、ランドマークは平面であると仮定しています。 -次の図は、`ar_tag_based_localizer` の場合の局在化の原理を示しています。 +次の図は、`ar_tag_based_localizer`の場合のローカリゼーションの原理を示しています。 ![principle](./doc_image/principle.png) -この計算された自己姿勢はEKFに渡され、ねじれ情報と融合されてより正確な自己姿勢を推定するために使用されます。 +この計算された自車姿勢はEKFに渡され、そこでツイスト情報と融合されて、より正確な自車姿勢を推定するために使用されます。 ## ノード図 @@ -25,39 +25,40 @@ ### `landmark_manager` -マップに書き込まれたランドマークの定義については、次のセクションの「マップ仕様」を参照してください。 +マップに記載されたランドマークの定義については、次のセクションの「マップ仕様」を参照してください。 -`landmark_manager` はマップからランドマークを読み込むためのユーティリティパッケージです。 +`landmark_manager`は、マップからランドマークをロードするためのユーティリティパッケージです。 -- 並進: ランドマークの4つの頂点の中心 -- 回転: 頂点番号を次のセクションで示すように反時計回りに1、2、3、4とします。方向は、1から2へのベクトルと、2から3へのベクトルの外積として定義されます。 +- 平行移動: ランドマークの4つの頂点の中心 +- 回転: 頂点の番号が次のセクションに示すように、反時計回りに1、2、3、4とします。方向は、1から2へのベクトルと2から3へのベクトルの外積として定義されます。 -ユーザーはランドマークをLanelet2の4頂点ポリゴンとして定義できます。 -この場合、4つの頂点が同じ平面にあるとは見なせない配置を定義できます。その場合のランドマークの方向は計算が困難です。 -したがって、4つの頂点を四面体として形成し、その体積が`volume_threshold` パラメーターを超えると、ランドマークはtf_staticをパブリッシュしません。 +ユーザーは、ランドマークをLanelet2の4頂点ポリゴンとして定義できます。 +この場合、4つの頂点が同じ平面上にないと想定される配置を定義できます。その場合のランドマークの方向は計算が困難です。 +したがって、4つの頂点が四面体として形成され、その体積がパラメーター`volume_threshold`を超える場合、ランドマークはtf_staticを公開しません。 -### ランドマークベースの局在化パッケージ +### ランドマークベースのLocalizerパッケージ - ar_tag_based_localizer -- など +- etc. ## マップ仕様 を参照してください。 -## `consider_orientation` について +## `consider_orientation`について -`LandmarkManager` クラスの`calculate_new_self_pose` 関数は、`consider_orientation` という名前のブーリアン引数を含みます。この引数は、検出されたランドマークとマッピングされたランドマークに基づいて新しい自己姿勢を計算するために使用される手法を決定します。次の画像は、2つの方法の違いを示します。 +`LandmarkManager`クラスの`calculate_new_self_pose`関数は、`consider_orientation`という名前のブール値引数を含みます。この引数は、検出されたランドマークとマップされたランドマークに基づいて新しい自車姿勢を計算するために使用されるメソッドを決定します。次の画像は、2つのメソッドの違いを示しています。 ![consider_orientation_figure](./doc_image/consider_orientation.drawio.svg) ### `consider_orientation = true` -このモードでは、新しい自己姿勢は、「現在位置から検出されたランドマーク」の相対姿勢が「新しい自己姿勢からマッピングされたランドマーク」の相対姿勢と等しくなるように計算されます。 -この方法は、向きを補正できますが、ランドマーク検出の向き誤差の影響を強く受けます。 +このモードでは、新しい自車姿勢は、「現在の自車姿勢から検出されたランドマーク」の相対姿勢が「新しい自車姿勢からマップされたランドマーク」の相対姿勢と同じになるように計算されます。 +この方法は向きを補正できますが、ランドマーク検出の向き誤差の影響を強く受けます。 ### `consider_orientation = false` -このモードでは、x、y、z の相対位置だけが正しいように、新しい自車位置を計算します。 +このモードでは、x、y、z の相対位置のみが正しいように、新しい自車位置が計算されます。 + +この手法では、向きを補正することはできませんが、ランドマーク検出の向き誤差の影響を受けません。 -この手法では、方位の補正は行えませんが、マーカー検出の方位誤差の影響を受けません。 diff --git a/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md b/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md index 8785b0c6333f6..a545adad3d6ca 100644 --- a/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md +++ b/localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/README.md @@ -1,11 +1,11 @@ -# AR Tagベースのローカライザ +## ARタグベースの局所化器 -**ArTagBasedLocalizer** はビジョンベースのローカリゼーションノードです。 +**ArTagBasedLocalizer** は、画像ベースの局所化ノードです。 ar_tag_image -このノードは [ArUcoライブラリ](https://index.ros.org/p/aruco/) を使用してカメラ画像からARタグを検出し、この検出に基づいて自車位置を計算してパブリッシュします。 -ARタグの位置と向きは、Lanelet2フォーマットで記述されているものと想定されます。 +このノードは [ArUcoライブラリ](https://index.ros.org/p/aruco/) を使用してカメラ画像からARタグを検出し、これらの検出に基づいて自車位置の推定とパブリッシュを行います。 +ARタグの位置と姿勢はLanelet2形式で記述されていることが前提です。 ## 入出力 @@ -13,84 +13,67 @@ ARタグの位置と向きは、Lanelet2フォーマットで記述されてい #### 入力 -| 名 | 型 | 説明 | -| :--------------------- | :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `~/input/lanelet2_map` | `autoware_map_msgs::msg::LaneletMapBin` | Lanelet 2データ | -| `~/input/image` | `sensor_msgs::msg::Image` | カメラ画像 | -| `~/input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | -| `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | IMU補正なしのEKF推定値。誤検知のフィルタリングに使用され、検出したARタグの妥当性を評価します。EKF推定値とARタグで検出した推定値が一定の時間と空間範囲内にある場合のみ、検出したARタグの推定値は有効と見なされ、パブリッシュされます。 | +| 名前 | タイプ | 説明 | +| :--------------------- | :----------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `~/input/lanelet2_map` | `autoware_map_msgs::msg::LaneletMapBin` | lanelet2のデータ | +| `~/input/image` | `sensor_msgs::msg::Image` | カメラ画像 | +| `~/input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | +| `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | IMUによる修正が加えられていないEKFのPose。偽陽性をフィルタリングして検出されたARタグの妥当性を検証するために使用される。EKFのPoseとARタグによって検出されたPoseがある一定の時間的・空間的範囲内にある場合にのみ、ARタグによって検出されたPoseが有効と見なされパブリッシュされる。 | #### 出力 -**自動運転ソフトウェア仕様** +**日本語訳** -**1. 概要** +**Autoware 自動運転ソフトウェア ドキュメント** -このドキュメントでは、自律走行車両向けのオープンソース自動運転ソフトウェア「Autoware」について説明します。 Autowareは、安全かつ効率的な自律走行実現に必要なモジュール群を提供するモジュールベースのソフトウェアプラットフォームです。 +**Planning モジュール** -**2. コンポーネント** +**イントロダクション** -**2.1 Perception(感知)モジュール** +Planning モジュールは、自車位置と事前に定義されたレーン情報を基に、安全かつ効率的な経路を生成する責任を負っています。モジュールは、以下の手順で動作します。 -- カメラ、レーダー、LiDARなどのセンサーからのデータを処理し、周囲環境の3Dマップを作成します。 -- 交通標識、歩行者、障害物などのオブジェクトを検出し、追跡します。 +1. 自車位置とレーン情報を取得する。 +2. 'post resampling'されたレーザー点群データを、周囲環境の障害物の検出に使用します。 +3. 障害物情報を考慮し、複数の経路候補を生成します。 +4. 経路を評価し、最適な経路を選択します。 +5. 選択した経路をControl モジュールに渡します。 -**2.2 Localization(自己位置推定)モジュール** +**機能** -- GNSS、IMU、車輪エンコーダーなどのセンサーデータを処理し、自車位置を推定します。 -- スラム(SLAM)アルゴリズムを使用して、周囲環境の地図を作成・更新します。 +* **自車位置トラッキング:** GPS、IMU、オドメトリを使用して自車位置を推定します。 +* **レーン情報取得:** カメラ画像を使用して、道路上のレーンマーキングを検出し、レーン情報を抽出します。 +* **障害物検出:** レーザー点群データを使用して、周囲の障害物を検出します。 +* **経路生成:** 自車位置、レーン情報、障害物情報に基づいて、複数の経路候補を生成します。 +* **経路評価:** 速度、曲率、安全性を考慮して経路候補を評価します。 +* **経路選択:** 評価結果に基づいて、最適な経路を選択します。 -**2.3 Planning(計画)モジュール** +**インターフェース** -- 感知モジュールからのオブジェクト情報を基に、車両の経路と速度計画を生成します。 -- 障害物回避、レーンキープなどの計画を実行するコントローラーを提供します。 +* **入力:** + * 自車位置 + * レーン情報 + * `post resampling`レーザー点群データ +* **出力:** + * 最適な経路 -**2.4 Behavior Planning(挙動計画)モジュール** +**実装** -- 交通規則を遵守するための車両挙動を生成します。 -- 自動運転レベルに応じた異なる挙動をサポートしています。 +Planning モジュールは、ROS Python で実装されています。モジュールは、以下のノードで構成されています。 -**2.5 Control(制御)モジュール** +* **localization:** 自車位置を推定します。 +* **lane_detector:** レーン情報を抽出します。 +* **obstacle_detector:** 障害物を検出します。 +* **path_planner:** 経路を生成します。 +* **path_evaluator:** 経路を評価します。 +* **path_selector:** 最適な経路を選択します。 -- 計画モジュールからのコマンドに基づいて、車両のステアリング、ブレーキ、アクセルを制御します。 -- 縦方向、横方向の制御のためのコントローラーを提供します。 - -**3. 安全機能** - -Autowareには、次の安全機能が組み込まれています。 - -- **衝突回避システム:** 障害物との衝突を回避するための緊急回避策を実行します。 -- **速度逸脱量管理:** 設定された速度制限を超えた場合に警告を発し、車両を減速します。 -- **加速度逸脱量管理:** 快適さと安全性を確保するための急加速度や急減速を防止します。 -- **車両制御の監視:** 制御モジュールの動作を監視し、異常が発生した場合に車両を停止させます。 - -**4. データ処理パイプライン** - -Autowareのデータ処理パイプラインは、次の手順に従います。 - -- **センサーデータの取得:** センサーから生のデータを収集します。 -- **'post resampling'によるデータフィルタリング:** ノイズや不要なデータを除去します。 -- **オブジェクト検出と追跡:** 感知モジュールがオブジェクトの検出と追跡を実行します。 -- **自己位置推定:** 自己位置推定モジュールが自車位置を推定します。 -- **経路計画:** 計画モジュールが経路と速度計画を生成します。 -- **挙動計画:** 挙動計画モジュールが車両挙動を生成します。 -- **制御:** 制御モジュールが車両の制御を実行します。 - -**5. インターフェース** - -Autowareは、ROS(Robot Operating System)上で動作します。 ROSノードを使用して、モジュール間でのデータのやり取りと通信を行います。 - -**6. 開発とサポート** - -Autowareはオープンソースプロジェクトであり、誰でも貢献できます。 Autowareコミュニティは、ドキュメント、フォーラム、サポートでユーザーをサポートしています。 - -| 名称 | タイプ | 説明 | -| :------------------------------ | :---------------------------------------------- | :-------------------------------------------------------------------- | -| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定姿勢 | -| `~/debug/result` | `sensor_msgs::msg::Image` | [デバッグトピック] マーカー検出結果が、入力画像に重ね書きされた画像 | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] Rviz内で薄い板として可視化するロード済ランドマーク | -| `/tf` | `geometry_msgs::msg::TransformStamped` | カメラから検出されたタグまでのトランスフォーム | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断結果 | +| 名称 | タイプ | 説明 | +| ---------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------- | +| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定 poses | +| `~/debug/result` | `sensor_msgs::msg::Image` | [デバッグトピック] マーカー検出の結果が入力画像に重ねた画像 | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] ランドマークを薄型のボードとして Rviz で視覚化するために読み込まれる | +| `/tf` | `geometry_msgs::msg::TransformStamped` | [デバッグトピック] カメラから検出されたタグへの TF | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断結果 | ## パラメータ @@ -98,7 +81,8 @@ Autowareはオープンソースプロジェクトであり、誰でも貢献で ## 起動方法 -Autowareを起動する際、`artag` を `pose_source` に設定します。 +Autowareを起動するときは、「`pose_source`」に「`artag`」を設定します。 + ```bash ros2 launch autoware_launch ... \ @@ -108,18 +92,18 @@ ros2 launch autoware_launch ... \ ### Rosbag -#### [サンプル rosbag とマップ (AWSIM データ)](https://drive.google.com/file/d/1ZPsfDvOXFrMxtx7fb1W5sOXdAK1e71hY/view) +#### [サンプル rosbag と地図 (AWSIM データ)](https://drive.google.com/file/d/1ZPsfDvOXFrMxtx7fb1W5sOXdAK1e71hY/view) -このデータは [AWSIM](https://tier4.github.io/AWSIM/) で作成されたシミュレーション データです。 -本質的に、AR タグベースの自己位置推定は公共道路の運転ではなく、より狭いエリアでの運転を意図しているため、最高運転速度は時速 15km に設定されています。 +このデータは [AWSIM](https://tier4.github.io/AWSIM/) で作成されたシミュレーションデータです。基本的に、AR タグベースの自己位置推定は、このような一般道の走行を目的としたものではなく、狭い範囲での走行を目的としているため、最大走行速度は 15 km/h に設定されています。 -各 AR タグが検出され始めるタイミングによって、推定に大きな変化が生じることは既知の問題です。 +各 AR タグが検出され始めるタイミングにより、推定値が大きく変化する可能性があることが知られています。 ![sample_result_in_awsim](./doc_image/sample_result_in_awsim.png) -#### [サンプル rosbag とマップ (実世界データ)](https://drive.google.com/file/d/1VQCQ_qiEZpCMI3-z6SNs__zJ-4HJFQjx/view) +#### [サンプル rosbag と地図 (実世界データ)](https://drive.google.com/file/d/1VQCQ_qiEZpCMI3-z6SNs__zJ-4HJFQjx/view) + +トピック名をリマップして再生してください。 -トピック名を再マッピングし、実行してください。 ```bash ros2 bag play /path/to/ar_tag_based_localizer_sample_bag/ -r 0.5 -s sqlite3 \ @@ -127,16 +111,17 @@ ros2 bag play /path/to/ar_tag_based_localizer_sample_bag/ -r 0.5 -s sqlite3 \ /sensing/camera/front/image/info:=/sensing/camera/traffic_light/camera_info ``` -このデータセットには、IMU データの欠損などの問題があり、全体的な精度は低いです。AR タグベースの自己位置推定を実行した場合でも、真の軌跡との大きな差が観察されます。 +このデータセットには、IMUデータの欠落などの問題が含まれており、全体的な精度は低いです。ARタグベースの自己位置推定を実行しても、真の軌跡との大きな差が認められます。 -サンプルが実行されてプロットされるときの軌跡を下の画像に示します。 +サンプルが実行およびプロットされたときの軌跡を下の画像に示します。 ![sample_result](./doc_image/sample_result.png) -以下のプルリクエストのビデオも参考になります。 +以下のプルリクエストのビデオも参考になるはずです。 ## 原理 ![principle](../doc_image/principle.png) + diff --git a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md index 5c11cd7b845e3..46a8a9990d3b0 100644 --- a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md +++ b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/README.md @@ -1,6 +1,6 @@ -# LiDAR マーカー ローカライザー +# LiDAR Marker Localizer -**LiDARMarkerLocalizer** は、反射器を検出して位置を推定するノードです。 +**LiDARMarkerLocalizer** はリフレクター検出ベースの局所化ノードです。 ## 入出力 @@ -8,90 +8,80 @@ #### 入力 -- `/hesai406/points` (`PointCloud`) - - ヘサイ406のLiDARポイントクラウド -- `/current_pose` (`Odometry`) - - 自車位置 -- `/static_map` (`StaticMap`) - - 静的地図(反転させた座標系) +| 名前 | タイプ | 説明 | +|---|---|---| +| ~/input/lanelet2_map | autoware_map_msgs::msg::HADMapBin | lanelet2データ | +| ~/input/pointcloud | sensor_msgs::msg::PointCloud2 | 点群 | +| ~/input/ekf_pose | geometry_msgs::msg::PoseWithCovarianceStamped | EKFによる自車位置 | -#### 出力 +## 自動運転ソフトウェアドキュメント -- `/lidar_marker_localizer/output` (`Odometry`) - - 検出された反射器に基づく、自車位置の推定値 -- `/lidar_marker_localizer/debug` (`MarkerArray`) - - デバッグ用マーカー +このドキュメントは、Autoware自動運転ソフトウェアの仕様と設計を説明します。 -| 名前 | 型 | 説明 | -| ---------------------- | ----------------------------------------------- | ----------------- | -| `~/input/lanelet2_map` | `autoware_map_msgs::msg::HADMapBin` | lanelet2データ | -| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 点群 | -| `~/input/ekf_pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | EKFによる自車位置 | +### Planningモジュール -#### 出力 +Planningモジュールは、環境を検出し、障害物を回避し、安全で効率的な経路を生成します。 -- [Autoware 自動運転ソフトウェアドキュメント](**URL** にリンク) +### Motion Planning -**はじめに** +モーションプランニングは、障害物を回避しながら目的地までの経路を生成するプロセスです。Autowareでは、以下のアルゴリズムを使用しています。 -このドキュメントでは、Autoware の自動運転ソフトウェアの詳細について説明します。Autoware は、オープンソースのソフトウェアスタックであり、車が周囲環境を認識し、計画を立て、制御を行うために必要なすべてのコンポーネントが含まれています。 +- DWA:動的窓アプローチ +- RRT:急速探索ランダム木 -**コンポーネント** +### Path Planning -Autoware は、以下の主要コンポーネントで構成されています。 +パスプランニングは、モーションプランを滑らかな経路に変換するプロセスです。Autowareでは、以下のアルゴリズムを使用しています。 -- **Perception (認識)**: センサーデータから周囲環境を認識します。 -- **Planning (計画)**: 自車の経路と操縦操作を計画します。 -- **Control (制御)**: 計画された操縦操作を車両に送信します。 -- **Localization (局所化)**: 自車位置と姿勢を特定します。 +- スプライン補完 +- 'post resampling' -**機能** +### Localization -Autoware は、以下の機能を提供します。 +ローカリゼーションモジュールは、自車位置と向きを推定します。以下を使用します。 -- **物体検出**: 車両、歩行者、自転車などの周囲の物体を検出します。 -- **障害物検出**: レーンマーカー、ガードレールなどの障害物を検出します。 -- **経路計画**: 目的地までの安全で効率的な経路を計画します。 -- **操縦制御**: 車両の速度、操舵、ブレーキを制御します。 -- **自車位置推定**: GPS、IMU、オドメトリーを使用して自車位置を推定します。 +- GPS +- IMU +- オドメトリ -**アーキテクチャ** +### Perception -Autoware は、モジュール式アーキテクチャに基づいています。これにより、開発者は特定のコンポーネントや機能を交換したり拡張したりできます。各コンポーネントは、他のコンポーネントとデータと情報をやり取りします。 +パーセプションモジュールは、カメラ、LiDAR、レーダーなどのセンサーから環境情報を取得します。Autowareでは、以下のアルゴリズムを使用しています。 -**パフォーマンス** +- 物体検出 +- レーン検出 +- セマンティックセグメンテーション -Autoware は、以下のパフォーマンス指標を満たすように設計されています。 +### Control -- **検出範囲**: 200m 以上の物体検出 -- **経路計画時間**: 100ms 以内 -- **操縦制御精度**: ±0.5m の横方向逸脱量、±0.2m/s の速度逸脱量、±0.2m/s² の加速度逸脱量 -- **自車位置精度**: 1m 以内の絶対位置精度、0.1度以内の姿勢精度 +コントロールモジュールは、計画された経路に従って車両を制御します。以下を使用します。 -**使用例** +- ステアリング制御 +- アクセル/ブレーキ制御 +- スタビリティ制御 -Autoware は、以下を含むさまざまな自動運転アプリケーションに使用できます。 +### System Architecture -- **自動運転車** -- **ロボタクシー** -- **貨物配送車両** +Autowareシステムは、以下のようなモジュールで構成されています。 -**貢献** +- Perception +- Localization +- Planning +- Control +- Vehicle Interface -Autoware はオープンソースプロジェクトであり、コミュニティからの貢献を歓迎しています。貢献方法の詳細については、Autoware の Web サイトを参照してください。 +### Conclusion -**免責事項** +Autowareは、堅牢で用途の広い自動運転ソフトウェアスタックです。障害物の回避、安全で効率的な経路生成、および車両制御を提供します。 -このドキュメントに記載されている情報は、正確で最新であることを目指していますが、Autoware Foundation はその正確性または完全性について保証しません。Autoware の使用は、ユーザー自身の責任において行われるものとします。 - -| 名前 | 種類 | 説明 | -| :------------------------------ | :---------------------------------------------- | :-------------------------------------------------------------------------- | -| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定姿勢 | -| `~/debug/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] 推定姿勢 | -| `~/debug/marker_detected` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 検出されたマーカートピック | -| `~/debug/marker_mapped` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] Rvizで薄板として可視化するための読み込まれたランドマーク | -| `~/debug/marker_pointcloud` | `sensor_msgs::msg::PointCloud2` | 検出されたマーカーのPointCloud | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断結果 | +| Name | Type | Description | +| :------------------------------ | :---------------------------------------------- | :----------------------------------------------------------------- | +| `~/output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 自車位置 | +| `~/debug/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] 自車位置 | +| `~/debug/marker_detected` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 検出されたマーカーの姿勢 | +| `~/debug/marker_mapped` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] Rvizに薄いボードとして可視化するための読み込まれたランドマーク | +| `~/debug/marker_pointcloud` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] 検出されたマーカーの点群 | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断出力 | ## パラメータ @@ -99,7 +89,8 @@ Autoware はオープンソースプロジェクトであり、コミュニテ ## 起動方法 -Autowareを起動する際は、`pose_source`に`lidar-marker`を設定します。 +Autowareを起動するとき、`pose_source`に`lidar-marker`を設定してください。 + ```bash ros2 launch autoware_launch ... \ @@ -111,6 +102,7 @@ ros2 launch autoware_launch ... \ ### フローチャート + ```plantuml @startuml @@ -164,19 +156,20 @@ end group ![detection_algorithm](./doc_image/detection_algorithm.png) -1. LiDAR 点群を `resolution` サイズの間隔で base_link 座標系の x 軸に沿ってリング状に分割する。 -2. `intensity_pattern` に一致する強度の部分を検索する。 -3. 各リングに対して 1 と 2 の手順を実行し、一致するインデックスを蓄積し、カウントが `vote_threshold_for_detect_marker` を超える部分をマーカーとして検出する。 +1. `resolution`サイズの`x`軸の`base_link`座標系に沿って、LiDARポイントクラウドをリングに分割します。 +2. `intensity_pattern`に一致する強度の一部を見つけます。 +3. 各リングで1と2の手順を実行し、一致するインデックスを集め、カウントが`vote_threshold_for_detect_marker`を超える部分をマーカーとして検出します。 ## サンプルデータセット -- [サンプル rosbag と地図](https://drive.google.com/file/d/1FuGKbkWrvL_iKmtb45PO9SZl1vAaJFVG/view?usp=sharing) +- [サンプルrosbag と map](https://drive.google.com/file/d/1FuGKbkWrvL_iKmtb45PO9SZl1vAaJFVG/view?usp=sharing) -このデータセットは、国土交通省 土木研究所 大規模トンネル実験施設で取得されました。 -反射材は [大成建設](https://www.taisei.co.jp/english/) によって設置されました。 +このデータセットは、国立土木研究所の実物大トンネル実験施設で取得されました。 +反射器は[大成建設](https://www.taisei.co.jp/english/)によって設置されました。 ## 協力者 - [TIER IV](https://tier4.jp/en/) - [大成建設](https://www.taisei.co.jp/english/) -- [Yuri Shimizu](https://github.com/YuriShimizu824) +- [清水 優里](https://github.com/YuriShimizu824) + diff --git a/localization/autoware_localization_error_monitor/README.md b/localization/autoware_localization_error_monitor/README.md index 6bc9d91ac8739..68764286a3835 100644 --- a/localization/autoware_localization_error_monitor/README.md +++ b/localization/autoware_localization_error_monitor/README.md @@ -6,91 +6,110 @@

-autoware_localization_error_monitorは、位置推定の結果の不確かさを監視することで位置推定のエラーを診断するためのパッケージです。 -このパッケージは次の2つの値を監視します。 +autoware_localization_error_monitor は、ローカリゼーション結果の不確かさを監視することで、ローカリゼーションエラーを診断するためのパッケージです。 +このパッケージは、次の 2 つの値を監視します。 -- 信頼楕円の長い半径のサイズ -- 横方向(車体フレーム)に沿った信頼楕円のサイズ +- 信頼領域の長い半径の大きさ +- 横方向 (ボディーフレーム) に沿った信頼領域の大きさ ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ------------ | ------------------------- | ------------ | -| `input/odom` | `nav_msgs::msg::Odometry` | 自車位置結果 | +| 名前 | 種別 | 説明 | +| ------------ | ------------------------- | ------------------- | +| `input/odom` | `nav_msgs::msg::Odometry` | ローカリゼーション結果 | ### 出力 -**自動運転ソフトウェアの設計** +**自動運転ソフトウェア** -**概要** +[URL] -このドキュメントは、自動運転ソフトウェアの設計の概要を説明します。以下に含まれる内容を示します。 +**目的** -- アーキテクチャ -- 主要コンポーネント -- アルゴリズム -- 実装 +このドキュメントは、自動運転ソフトウェアアーキテクチャの要件と設計を定義します。 -**アーキテクチャ** +**内容** -Autowareのアーキテクチャは、モジュラー化されたレイヤー構造に基づいています。各レイヤーは、特定のタスクを担当するモジュールで構成されます。このアーキテクチャにより、柔軟性、拡張性、保守性が向上します。 +- システム全体設計 +- Planningコンポーネント +- Perceptionコンポーネント +- Vehicle Controlコンポーネント +- Safetyコンポーネント +- システム検証とテスト -**主要コンポーネント** +**システム全体設計** -主要コンポーネントには、以下が含まれます。 +システム全体設計は、[図1](#図1)で示すように、以下で構成されます。 -- Planningコンポーネント -- Perceptionコンポーネント -- Controlコンポーネント -- Vehicle Interfaceコンポーネント +- Planningコンポーネント: 現在の経路を計画し、自車位置に基づいて決定を行います。 +- Perceptionコンポーネント: センサー情報を処理し、周囲環境の理解を提供します。 +- Vehicle Controlコンポーネント: 実際の車両制御を実行します。 +- Safetyコンポーネント: システムの安全性と健全性を確保します。 + +**Planningコンポーネント** + +Planningコンポーネントは、以下のサブコンポーネントで構成されます。 + +- Trajectory Planner: 現在の経路を計算します。 +- Behavior Planner: 予想される障害物や交通状況に基づいて決定を行います。 +- Path Planner: 制約のある環境での移動用の経路を計算します。 + +**Perceptionコンポーネント** + +Perceptionコンポーネントは、以下のサブコンポーネントで構成されます。 -**アルゴリズム** +- Sensor Preprocessing: センサーデータのフィルタリングと`post resampling`を行います。 +- Object Detection: 物体を識別して追跡します。 +- Scene Understanding: 周囲環境の状況を把握します。 -Autowareは、以下を含むさまざまなアルゴリズムを使用しています。 +**Vehicle Controlコンポーネント** -- パス計画 -- トラフィック予測 -- オブジェクト検出 -- クラシフィケーション +Vehicle Controlコンポーネントは、以下のサブコンポーネントで構成されます。 -**実装** +- Motion Planner: 車両の運動に関する計画を行います。 +- Vehicle Controller: 車両のステアリング、アクセル、ブレーキを制御します。 +- Vehicle Dynamics Model: 車両のダイナミクスをモデル化します。 -Autowareは、ROS (Robot Operating System) を実装しています。ROSは、ロボットソフトウェア開発のためのオープンソースのフレームワークです。このフレームワークにより、モジュールの再利用、拡張、テストが容易になります。 +**Safetyコンポーネント** -**評価** +Safetyコンポーネントは、以下のサブコンポーネントで構成されます。 -Autowareは、シミュレーションと実際の道路テストの両方で評価されています。結果は、Autowareがさまざまなシナリオで安全かつ効率的に動作することを示しています。 +- Safety Monitoring: システムの状態を監視し、危険な状態を検出します。 +- Safety Intervention: 危険な状態が検出されると、車両を停止または制御します。 +- Redundancy Management: システムの重要な機能の冗長性を管理します。 -**使用例** +**システム検証とテスト** -Autowareは、以下を含むさまざまな用途で使用できます。 +システム検証とテストには、以下の活動が含まれます。 -- 自動運転車 -- ロボット -- ドローン +- ユニットテスト +- 統合テスト +- シミュレーションテスト +- 車両テスト -**サポート** +**付録** -Autowareは、アクティブなコミュニティによってサポートされています。コミュニティでは、ドキュメント、フォーラム、チュートリアルを介してサポートを提供しています。 +- 用語集 +- 略語リスト -**貢献** +**謝辞** -Autowareはオープンソースプロジェクトです。貢献に興味がある場合は、GitHubリポジトリをご覧ください。 +このドキュメントの作成に貢献してくれた次の個人に感謝します。 -**詳細情報** +- [名前1] +- [名前2] -Autowareに関する詳細情報は、以下のリソースを参照してください。 +**著作権** -- 公式ウェブサイト: -- GitHubリポジトリ: +このドキュメントは、Autoware Foundationの著作物です。無断転載・複製を禁じます。 -| 名称 | 型 | 説明 | -| ---------------------- | --------------------------------------- | ------------ | -| `debug/ellipse_marker` | `visualization_msgs::msg::Marker` | 楕円マーカー | -| `diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断出力 | +| 名 | 型 | 説明 | +| ---------------------- | --------------------------------------- | ------------------- | +| `debug/ellipse_marker` | `visualization_msgs::msg::Marker` | ellipseマーカー | +| `diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断出力 | ## パラメータ -{{ json_to_markdown("localization/autoware_localization_error_monitor/schema/localization_error_monitor.schema.json", True) }} +{{ json_to_markdown("localization/autoware_localization_error_monitor/schema/localization_error_monitor.schema.json") }} diff --git a/localization/autoware_localization_util/README.md b/localization/autoware_localization_util/README.md index a0608e4983c95..77c86e77ba4ad 100644 --- a/localization/autoware_localization_util/README.md +++ b/localization/autoware_localization_util/README.md @@ -1,5 +1,6 @@ # autoware_localization_util -`autoware_localization_util` はローカライゼーション用のユーティリティパッケージです。 +`autoware_localization_util`はローカリゼーションユーティリティパッケージです。 + +このパッケージはノードを含まず、ライブラリのみです。 -このパッケージにはノードはなく、ライブラリのみです。 diff --git a/localization/autoware_ndt_scan_matcher/README.md b/localization/autoware_ndt_scan_matcher/README.md index 8805c00c822fb..096903175b132 100644 --- a/localization/autoware_ndt_scan_matcher/README.md +++ b/localization/autoware_ndt_scan_matcher/README.md @@ -2,93 +2,93 @@ ## 目的 -autoware_ndt_scan_matcherはNDTスキャンマッチング手法を使用した位置推定パッケージです。 +autoware_ndt_scan_matcherはNDTスキャンマッチング手法を使用した位置推定用のパッケージです。 -このパッケージには、次の2つの主な機能があります。 +このパッケージには主に2つの機能があります。 - スキャンマッチングによる位置推定 - モンテカルロ法を使用したROSサービスによる初期位置推定 -オプション機能として正則化があります。詳細は後述の正則化の章を参照してください。デフォルトでは無効になっています。 +オプションの機能として正則化があります。詳細は後述の正則化の章を参照してください。デフォルトでは無効になっています。 ## 入出力 ### 入力 -| 名称 | タイプ | 説明 | -| ----------------------------------- | ----------------------------------------------- | ---------------------- | -| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 初期位置 | -| `points_raw` | `sensor_msgs::msg::PointCloud2` | センサポイントクラウド | -| `sensing/gnss/pose_with_covariance` | `sensor_msgs::msg::PoseWithCovarianceStamped` | 正規化項の基本位置 | +| 名 | 型 | 説明 | +| ----------------------------------- | ------------------------------------------------ | --------------------------------------- | +| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 初期位置 | +| `points_raw` | `sensor_msgs::msg::PointCloud2` | センサ点群 | +| `sensing/gnss/pose_with_covariance` | `sensor_msgs::msg::PoseWithCovarianceStamped` | 正則化項の基本位置 | -`sensing/gnss/pose_with_covariance` は、正則化が有効な場合にのみ必要です。 +`sensing/gnss/pose_with_covariance` は、正則化が有効になっている場合にのみ必要です。 ### 出力 -| 名前 | タイプ | 説明 | -| --------------------------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `ndt_pose` | `geometry_msgs::msg::PoseStamped` | 推定位相 | -| `ndt_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 共分散による推定位相 | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断 | -| `points_aligned` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングでアラインされた点群 | -| `points_aligned_no_ground` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングでアラインされた、地面を除いた点群 | -| `initial_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] スキャンマッチングで使用される初期位相 | -| `multi_ndt_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 実時間共分散推定におけるさまざまな初期位相からの推定位相 | -| `multi_initial_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] 実時間共分散推定における初期位相 | -| `exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングの実行時間 [ミリ秒] | -| `transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングのスコア | -| `no_ground_transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 地面のない LiDAR スキャンのスコア | -| `iteration_num` | `tier4_debug_msgs::msg::Int32Stamped` | [デバッグトピック] スキャンマッチングのイテレーション数 | -| `initial_to_result_relative_pose` | `geometry_msgs::msg::PoseStamped` | [デバッグトピック] 初期点と収束点間の相対位相 | -| `initial_to_result_distance` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 初期点と収束点間の距離 [メートル] | -| `initial_to_result_distance_old` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される古い 2 つの初期点のうちの 1 つと収束点の距離差 [メートル] | -| `initial_to_result_distance_new` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される新しい 2 つの初期点のうちの 1 つと収束点の距離差 [メートル] | -| `ndt_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] デバッグ用のマーカー | -| `monte_carlo_initial_pose_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] 初期位置推定に使用されるパーティクル | +| Name | Type | Description | +| --------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `ndt_pose` | `geometry_msgs::msg::PoseStamped` | 推定された姿勢 | +| `ndt_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 推定された姿勢(共分散付き) | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断 | +| `points_aligned` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングで整列した点群 | +| `points_aligned_no_ground` | `sensor_msgs::msg::PointCloud2` | [デバッグトピック] スキャンマッチングで整列した地面以外の点群 | +| `initial_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [デバッグトピック] スキャンマッチングで使用される初期姿勢 | +| `multi_ndt_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] リアルタイム共分散推定における複数の初期姿勢からの推定姿勢 | +| `multi_initial_pose` | `geometry_msgs::msg::PoseArray` | [デバッグトピック] リアルタイム共分散推定のための初期姿勢 | +| `exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングの実行時間 [ms] | +| `transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] スキャンマッチングのスコア | +| `no_ground_transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 地面以外のLiDARスキャンのスキャンマッチングのスコア | +| `iteration_num` | `tier4_debug_msgs::msg::Int32Stamped` | [デバッグトピック] スキャンマッチングの反復回数 | +| `initial_to_result_relative_pose` | `geometry_msgs::msg::PoseStamped` | [デバッグトピック] 初期点と収束点間の相対姿勢 | +| `initial_to_result_distance` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 初期点と収束点間の距離差 [m] | +| `initial_to_result_distance_old` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される2つの初期点のうち古い方の点と収束点間の距離差 [m] | +| `initial_to_result_distance_new` | `tier4_debug_msgs::msg::Float32Stamped` | [デバッグトピック] 線形補間で使用される2つの初期点のうち新しい方の点と収束点間の距離差 [m] | +| `ndt_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] デバッグマーカー | +| `monte_carlo_initial_pose_marker` | `visualization_msgs::msg::MarkerArray` | [デバッグトピック] 初期位置推定に使用される粒子の`post resampling` | ### サービス -| Name | Type | Description | -| --------------- | ------------------------------------------------------------ | -------------------- | -| `ndt_align_srv` | `autoware_localization_srvs::srv::PoseWithCovarianceStamped` | 初期姿勢推定サービス | +| 名称 | 種別 | 説明 | +| --------------- | ------------------------------------------------------------ | -------------------------------- | +| `ndt_align_srv` | `autoware_localization_srvs::srv::PoseWithCovarianceStamped` | 初期姿勢の推定サービス | -## パラメーター +## パラメータ -### コアパラメーター +### コアパラメータ #### フレーム -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/frame.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/frame.json") }} -#### Sensor Points +#### センサーポイント -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/sensor_points.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/sensor_points.json") }} #### Ndt -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/ndt.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/ndt.json") }} #### 初期姿勢推定 -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/initial_pose_estimation.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/initial_pose_estimation.json") }} #### 検証 -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/validation.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/validation.json") }} #### スコア推定 -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/score_estimation.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/score_estimation.json") }} #### 共分散 -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/ja/covariance.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/covariance.json") }} -## 正則化 +## 正規化 ### 概要 -この関数は、正規化項をNDT最適化問題に追加し、次のようになります。 +これは、正則化項をNDT最適化問題に追加する関数です。 $$ \begin{align} @@ -107,15 +107,15 @@ $$ \end{align} $$ -ここで、t_baseはGNSSまたは他の手段によって測定されたベース位置です。 -NDT(R,t)は純粋なNDTコスト関数を表します。 -正則化項は、最適解を車両の**縦方向**のベース位置にシフトさせます。 -ベース位置に対する**縦方向**の誤差のみが考慮され、Z軸および横方向の誤差は考慮されません。 +ここで、t_base は GNSS またはその他の手段で測定された基準位置です。 +NDT(R, t) は純粋な NDT コスト関数を表します。 +正規化項は、最適解を車両の縦方向の基準位置にシフトします。 +基準位置に対する**縦方向**の誤差のみが考慮され、Z 軸および横軸の誤差は考慮されません。 -**正則化** +**正規化の仕組み** -正則化項には回転がパラメータとして含まれていますが、最適化を安定化するために、それらに関連付けられた勾配とヘッセ行列を計算しません。 -具体的には、勾配は次のように計算されます。 +正規化項は回転をパラメータとして持ちますが、これに関連する勾配とヘッセン行列は最適化の安定化のために計算されません。 +具体的には、勾配は以下の通りに計算されます。 $$ \begin{align} @@ -129,108 +129,111 @@ $$ \end{align} $$ -正則化はデフォルトで無効になっています。 -使用する場合は、以下のパラメータを編集して有効にしてください。 +**正規化のデフォルト設定** -#### 正則化が利用できる場所 +正規化はデフォルトでは無効になっています。 +正規化を使用する場合は、以下のパラメータを編集して有効にしてください。 -この機能は、GNSS が利用可能な特徴のない道路で有効です。たとえば、 +#### 正規化の有効範囲 -- 橋 +この機能は以下のようなGNSSが利用可能な特徴のない道路に効果的です。 + +- ブリッジ - 高速道路 - 農道 -以下のように、ベース位置トピックを GNSS 以外のものにリマッピングすることで、これらの外部でも有効にすることができます。 +以下の説明のように、ベース位置トピックをGNSS以外のものに変更することで、これらの範囲外でも有効にすることができます。 #### 他のベース位置の使用 -GNSS 以外の場合は、磁気マーカーやビジュアルマーカーなどから取得した他のグローバル位置トピックを提供できます(利用可能であれば)。 -(現在、Autoware はそのような姿勢を与えるノードを提供していません。)正則化にトピックを使用するには、`ndt_scan_matcher.launch.xml` 内で`input_regularization_pose_topic` をトピックにリマッピングする必要があります。 -デフォルトでは、`/sensing/gnss/pose_with_covariance` にリマッピングされます。 +GNSS以外にも、周囲環境で利用可能な磁気マーカーやビジュアルマーカーなどから得られる他のグローバルな位置トピックを指定できます。 +(現在、Autowareではこのようなポーズを提供するノードは提供していません。) +正規化にトピックを使用するには、`ndt_scan_matcher.launch.xml`で`input_regularization_pose_topic`をトピックにリマップする必要があります。 +デフォルトでは、`/sensing/gnss/pose_with_covariance`にリマップされています。 -#### 制限 +#### 制限事項 -この機能は、最近サブスクライブした姿勢から線形補間によってベース位置を決定するため、走行速度に対して低い周波数で公開されるトピックは使用できません。 -不適切な線形補間は、最適化結果が悪くなる可能性があります。 +この機能は、最近受信したポーズから線形補間によってベース位置を決定するため、走行速度に対して低い周波数で公開されるトピックは使用できません。 +不適切な線形補間は、最適化結果の悪化につながる可能性があります。 -ベース位置に GNSS を使用する場合、トンネル、屋内、高層ビルの近くで正則化がマイナスの影響を与える可能性があります。 -これは、ベース位置が実際の値から大きく離れている場合、NDT スキャンマッチングが不適切な最適位置に収束する可能性があるためです。 +ベース位置にGNSSを使用する場合、正規化はトンネル、屋内、高層ビルの近くで悪影響を与える可能性があります。 +これは、ベース位置が真の値から大きく離れている場合、NDTスキャンマッチングが不適切な最適位置に収束する可能性があるためです。 ### パラメータ {{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/ndt_regularization.json") }} -正則化は、GNSS がどのシーンでも適切なベース位置を提供するのに十分な精度とは限らないため、デフォルトで無効になっています。 +正規化は、GNSSがどのシーンでも適切なベース位置を提供するのに十分に正確ではない場合があるため、デフォルトでは無効になっています。 -`scale_factor` が大きすぎると、NDT がベース位置に引き寄せられ、スキャンマッチングが失敗する可能性があります。 -逆に、小さすぎると、正則化の利点が失われます。 +`scale_factor`が大きすぎると、NDTはベース位置に引き寄せられ、スキャンマッチングが失敗する可能性があります。 +逆に小さすぎる場合、正規化の利点は失われます。 -`scale_factor` を 0 に設定することは、正則化を無効にすることと同じであることに注意してください。 +`scale_factor`を0に設定すると、正規化が無効になることに注意してください。 ### 例 -以下の図は、テストされたマップを示しています。 +次の図は、テストされたマップを示しています。 -- 右側はフィーチャがほとんどないマップです。このマップでは、NDTは適切にローカライズできません。 +- 右側のマップは,NDT がうまく局所化できないほど特徴が少ないです。 drawing drawing -次の図は、それぞれ、フィーチャが少ないマップ上で見積もった軌跡と、正規化が有効なNDTで見積もった軌跡を示しています。 -軌跡の色は、フィーチャが豊富なマップで計算された基準軌跡からの誤差(メートル)を示します。 +以下の図は、特徴の少ないマップにおいて推定された軌道で、それぞれ標準 NDT と正則化対応 NDT を示しています。 +軌道の色は、特徴の多いマップで算出された基準軌道からの誤差(メートル)を示しています。 -- 左側の図は、純粋なNDTではブリッジに longitudinal エラーが生じ、回復できないことを示しています。 -- 右側の図は、正規化により longitudinal エラーが抑制されることを示しています。 +- 左側の図は、純粋な NDT は橋で縦方向の誤差を引き起こし、回復できないことを示します。 +- 右側の図は、正則化が縦方向の誤差を抑制することを示します。 drawing drawing -## 動的マップロード +## 動的マップ読み込み -Autowareは `ndt_scan_matcher` 用の動的マップロード機能をサポートしています。この機能を使用することで、NDTは周囲のポイントクラウドマップを `pointcloud_map_loader` に動的に要求し、オンラインでマップを受信して処理します。 +Autoware は `ndt_scan_matcher` の動的マップ読み込み機能をサポートします。この機能を使用すると、NDT は周辺の点群マップを `pointcloud_map_loader` に動的に要求し、マップを受信してオンラインで前処理します。 -この機能を使用すると、`ndt_scan_matcher` は理論的にはメモリ使用量に関して任意の大規模マップを処理できます。(浮動小数点誤差などの他の要因によって制限が存在する可能性があることに注意してください) +この機能を使用することで、`ndt_scan_matcher` は理論的にはメモリ使用の観点から、任意の大きなサイズのマップを処理できます。(他の要因によって制限が生じる可能性があることに注意してください。例:浮動小数点誤差) drawing -### 追加インターフェイス +### 追加のインターフェース -#### 追加出力 +#### 追加の出力 -| 名 | タイプ | 説明 | -| ----------------------------- | ------------------------------- | ---------------------------------------------------------- | -| `debug/loaded_pointcloud_map` | `sensor_msgs::msg::PointCloud2` | ローカライゼーション用に使用される点群マップ(デバッグ用) | +| 名前 | 種類 | 説明 | +| ----------------------------- | ------------------------------- | ------------------------------------------------- | +| `debug/loaded_pointcloud_map` | `sensor_msgs::msg::PointCloud2` | ローカリゼーションに使用されるポイントクラウドマップ(デバッグ用) | #### 追加クライアント -| 名前 | 型 | 説明 | -| ------------------- | ------------------------------------------------------ | -------------------------- | -| `client_map_loader` | `autoware_map_msgs::srv::GetDifferentialPointCloudMap` | マップ読み込みクライアント | +| 名称 | タイプ | 説明 | +| ------------------- | ------------------------------------------------------ | ------------------ | +| `client_map_loader` | `autoware_map_msgs::srv::GetDifferentialPointCloudMap` | マップロードククライアント | ### パラメータ -{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/dynamic_map_loading.json") }} +{{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/dynamic_map_loading.json", "ja") }} -### 動的マップロードの注意事項 +### ダイナミックマップロードの注意事項 -`ndt_scan_matcher` で動的マップロード機能を使用するには、PCD ファイルをグリッドに分割する必要があります(推奨サイズ:20 [m] x 20 [m])。 +`ndt_scan_matcher`のダイナミックマップロード機能を使用するには、PCDファイルをグリッドに分割する必要があります(推奨サイズ:20[m] x 20[m])。 -マップが2つ以上の大きなマップ(例:1000 [m] x 1000 [m])に分割されている場合、動的マップロードは失敗する可能性があります。次のいずれかを提供してください。 +マップが2つ以上の大きなサイズ(例:1000[m] x 1000[m])に分割された場合、ダイナミックマップロードがFAILする場合があります。以下のいずれかを提供してください。 -- PCD マップファイル 1 つ -- 小さいサイズ(~20 [m])に分割された複数の PCD マップファイル +- 1つのPCDマップファイル +- 小さいサイズ(~20[m])に分割された複数のPCDマップファイル -Autoware チュートリアルの `sample-map-rosbag` の分割された PCD マップを次に示します。[`sample-map-rosbag_split.zip`](https://github.com/autowarefoundation/autoware.universe/files/10349104/sample-map-rosbag_split.zip) +以下はAutowareチュートリアルからの`sample-map-rosbag`の分割されたPCDマップです:[`sample-map-rosbag_split.zip`](https://github.com/autowarefoundation/autoware.universe/files/10349104/sample-map-rosbag_split.zip) -| PCDファイル | NDTがマップを読み込む方法 | -| :----------: | :-----------------------: | -| 単一ファイル | 一括(標準) | -| 複数ファイル | 動的 | +| PCDファイル | NDTがマップを読み込む方法 | +| :------------: | :------------------: | +| 単一ファイル | 一度に(標準) | +| 複数のファイル | 動的に | -## グランドLiDARスキャンなしでのスキャンマッチングスコア +## 地面LiDARスキャンなしでのスキャンマッチングスコア ### 概要 -これは、グランドLiDARスキャンを使用せずにスキャンマッチングスコアを推定する関数です。このスコアは、現在の局所化パフォーマンスをより正確に反映できます。 -[関連するissue](https://github.com/autowarefoundation/autoware.universe/issues/2044)。 +この関数は、地面LiDARスキャンなしでスキャンマッチングスコアを推定します。このスコアは、現在の局在化パフォーマンスをより正確に反映できます。 +[関連する問題](https://github.com/autowarefoundation/autoware.universe/issues/2044)。 ### パラメータ @@ -240,129 +243,130 @@ Autoware チュートリアルの `sample-map-rosbag` の分割された PCD マ ### 概要 -当初、NDTスキャンマッチングの共分散は固定値(FIXED_VALUEモード)です。 -そのため、2D共分散(xx、xy、yx、yy)のリアルタイム推定には、LAPLACE_APPROXIMATION、MULTI_NDT、MULTI_NDT_SCOREの3つのモードが用意されています。 -LAPLACE_APPROXIMATIONは、NDTスキャンマッチングによって得られたヘシアンのXY(2x2)部分の逆行列を計算し、それを共分散行列として使用します。 -一方、MULTI_NDTとMULTI_NDT_SCOREは、複数の初期姿勢からのNDT収束を利用して2D共分散を取得します。 -理想的には、複数の初期姿勢の配置は、NDTスコア関数のヘシアン行列によって効率的に制限されます。 -この実装では、コードを簡素化するために初期位置の数が固定されています。 -MULTI_NDTは、共分散を得るために各初期位置で収束するまで計算を実行する一方、MULTI_NDT_SCOREは最近傍ボクセル変換尤度を使用します。 -rviz2でndt_pose_with_covarianceを設定すると、共分散をndtからエラー楕円として見ることができます。 -[元論文](https://www.fujipress.jp/jrm/rb/robot003500020435/)。 +当初、NDTスキャンマッチングの共分散は固定値(`FIXED_VALUE`モード)でした。 +そのため、リアルタイムで2D共分散(`xx`、`xy`、`yx`、`yy`)を推定するために3つのモードが用意されています。`LAPLACE_APPROXIMATION`、`MULTI_NDT`、および`MULTI_NDT_SCORE`です。 +`LAPLACE_APPROXIMATION`は、NDTスキャンマッチングによって得られるヘシアン行列の `XY`(2x2)部分の逆行列を計算し、共分散行列として使用します。 +一方、`MULTI_NDT`と`MULTI_NDT_SCORE`は複数の初期姿勢からのNDT収束を使用して2D共分散を取得します。 +理想的には、複数の初期姿勢の配置はNDTスコア関数のヘシアン行列によって効率的に制限されます。 +この実装では、コードを単純化するために初期位置の数が固定されています。 +共分散を取得するために、`MULTI_NDT`は各初期位置で収束するまで計算しますが、`MULTI_NDT_SCORE`は最近接ボクセルの変換尤度を使用します。 +共分散は、rviz2で`ndt_pose_with_covariance`を設定したエラー楕円として表示できます。 +[オリジナルペーパー](https://www.fujipress.jp/jrm/rb/robot003500020435/)。 drawing -この関数は大量の計算リソースを消費すると健全なシステムの挙動を損なう可能性があることに注意してください。 +この機能は、計算リソースを大量に消費すると、健全なシステム動作を損なう可能性があることに注意してください。 ### パラメータ -リアルタイムで2D共分散を計算するための3つの方法があります。covariance_estimation_typeを変更することで方法を選択できます。 -initial_pose_offset_modelは、ヘシアン行列の第1主成分の方向に(x、y)=(0、0)を中心に回転します。 -initial_pose_offset_model_xとinitial_pose_offset_model_yは同じ数の要素を持つ必要があります。 -MULTI_NDT_SCOREモードでは、出力2D共分散のスケールを温度に応じて調整できます。 +リアルタイムで2D共分散を計算するには3つのタイプがあります。`covariance_estimation_type`を変更してメソッドを選択できます。 +`initial_pose_offset_model`は、ヘシアン行列の最初の主成分の方向に(`x`、`y`)=(0、0)を中心に回転します。 +`initial_pose_offset_model_x`と`initial_pose_offset_model_y`は同じ数の要素を持つ必要があります。 +`MULTI_NDT_SCORE`モードでは、出力2D共分散のスケールは温度に応じて調整できます。 {{ json_to_markdown("localization/autoware_ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json") }} ## 診断 -### scan_matching_status +### スキャンマッチングステータス drawing -| Name | 説明 | 警告への遷移条件 | エラーへの遷移条件 | 推定結果の破棄の有無 ( `skipping_publish_num` に影響) | -| ------------------------------------------------ | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------- | -| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | いいえ | -| `sensor_points_size` | センサーポイントのサイズ | サイズが `sensor_points.timeout_sec` より **長い** | なし | はい | -| `sensor_points_delay_time_sec` | センサーポイントの遅延時間 | 時刻が `sensor_points.timeout_sec` より **長い** | なし | はい | -| `is_succeed_transform_sensor_points` | センサーポイントの変換が成功したかどうか | なし | 失敗 | はい | -| `sensor_points_max_distance` | センサーポイントの最大距離 | 最大距離が `sensor_points.required_distance` より **短い** | なし | はい | -| `is_activated` | ノードが "active" 状態であるかどうか | "active" 状態ではない | なし | `is_activated` が false の場合、推定は実行されず、 `skipping_publish_num` は 0 に設定されます。 | -| `is_succeed_interpolate_initial_pose` | 初期姿勢の補間が成功したかどうか | 失敗。
(1) `initial_pose_buffer_` のサイズが **2** より小さい。
(2) 初期姿勢とセンサーポイントクラウド間のタイムスタンプの差が `validation.initial_pose_timeout_sec` より **長い**。
(3) 線形補間に使用される 2 つ の初期姿勢間の距離の差が `validation.initial_pose_distance_tolerance_m` より **長い** | なし | はい | -| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | はい | -| `iteration_num` | 整列を計算する回数 | 回数が `ndt.max_iterations` より **多い** | なし | はい | -| `local_optimal_solution_oscillation_num` | ソリューションが振動していると判断された回数 | 回数が **10** より **多い** | なし | はい | -| `transform_probability` | マップがセンサーポイントとどれほどよく一致するかを表すスコア | スコアが `score_estimation.converged_param_transform_probability` より **小さい** (`score_estimation.converged_param_type` が 0=TRANSFORM_PROBABILITY の場合のみ) | なし | はい | -| `transform_probability_diff` | 現在 `ndt` 最適化のtpスコア差 | なし | なし | いいえ | -| `transform_probability_before` | 現在 `ndt` 最適化前のtpスコア | なし | なし | いいえ | -| `nearest_voxel_transformation_likelihood` | マップがセンサーポイントとどれほどよく一致するかを表すスコア | スコアが `score_estimation.converged_param_nearest_voxel_transformation_likelihood` より **小さい** (`score_estimation.converged_param_type` が 1=NEAREST_VOXEL_TRANSFORMATION_LIKELIHOOD の場合のみ) | なし | はい | -| `nearest_voxel_transformation_likelihood_diff` | 現在 `ndt` 最適化のnvtlスコア差 | なし | なし | いいえ | -| `nearest_voxel_transformation_likelihood_before` | 現在 `ndt` 最適化前のnvtlスコア | なし | なし | いいえ | -| `distance_initial_to_result` | 収束処理前と後の位置間の距離 | 距離が `validation.initial_to_result_distance_tolerance_m` より **長い** | なし | いいえ | -| `execution_time` | 収束処理時間 | 時刻が `validation.critical_upper_bound_exe_time_ms` より **長い** | なし | いいえ | -| `skipping_publish_num` | 連続して推定結果を破棄した回数 | 回数が `validation.skipping_publish_num` 以上 | なし | - | - -※`sensor_points_callback`は`trigger_node_service`および`ndt_align_service`と同一コールバックグループを共有しています。結果的に、初期ポーズ推定に時間がかかりすぎると、この診断は古くなる可能性があります。 +| Name | Description | Transition condition to Warning | Transition condition to Error | Whether to reject the estimation result (affects `skipping_publish_num`) | +| ------------------------------------------------ | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- | --------------------------------------------------------------------------------------------------- | +| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | いいえ | +| `sensor_points_size` | センサーポイントのサイズ | サイズが `sensor_points.timeout_sec` より **長い** | なし | はい | +| `sensor_points_delay_time_sec` | センサーポイントの遅延時間 | 時間が `sensor_points.required_distance` **より短い** | なし | はい | +| `is_succeed_transform_sensor_points` | センサーポイントの変換が成功したかどうか | なし | 成功しない場合 | はい | +| `sensor_points_max_distance` | センサーポイントの最大距離 | 最大距離が `sensor_points.required_distance` **より短い** | なし | はい | +| `is_activated` | ノードがアクティブ状態になっているかどうか | アクティブ状態ではない | なし | `is_activated` が false の場合、推定は実行されず、`skipping_publish_num` が 0 に設定されます。 | +| `is_succeed_interpolate_initial_pose` | 初期ポーズの補完が成功したかどうか | 失敗。
(1) `initial_pose_buffer_` のサイズが **2 より小さい**。
(2) initial_pose とセンサーポイントクラウドのタイムスタンプ差が `validation.initial_pose_timeout_sec` **より長い**。
(3) 線形補完に使用される 2 つの初期ポーズ間の距離差が `validation.initial_pose_distance_tolerance_m` **より長い** | なし | はい | +| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | はい | +| `iteration_num` | アライメントを計算する回数 | 回数が `ndt.max_iterations` **より大きい** | なし | はい | +| `local_optimal_solution_oscillation_num` | 解が振動していると判断される回数 | 回数が **10 より大きい** | なし | はい | +| `transform_probability` | マップがセンサーポイントとどれだけうまくアラインするかを示すスコア | スコアが `score_estimation.converged_param_transform_probability` **より小さい**(`score_estimation.converged_param_type` が 0=TRANSFORM_PROBABILITY の場合のみ) | なし | はい | +| `transform_probability_diff` | 現在の ndt 最適化のための tp スコア差 | なし | なし | いいえ | +| `transform_probability_before` | 現在の ndt 最適化前の tp スコア | なし | なし | いいえ | +| `nearest_voxel_transformation_likelihood` | マップがセンサーポイントとどれだけうまくアラインするかを示すスコア | スコアが `score_estimation.converged_param_nearest_voxel_transformation_likelihood` **より小さい**(`score_estimation.converged_param_type` が 1=NEAREST_VOXEL_TRANSFORMATION_LIKELIHOOD の場合のみ) | なし | はい | +| `nearest_voxel_transformation_likelihood_diff` | 現在の ndt 最適化のための nvtl スコア差 | なし | なし | いいえ | +| `nearest_voxel_transformation_likelihood_before` | 現在の ndt 最適化前の nvtl スコア | なし | なし | いいえ | +| `distance_initial_to_result` | 収束処理前の位置と後の位置の距離 | 距離が `validation.initial_to_result_distance_tolerance_m` **より大きい** | なし | いいえ | +| `execution_time` | 収束処理の時間 | 時間が `validation.critical_upper_bound_exe_time_ms` **より長い** | なし | いいえ | +| `skipping_publish_num` | 推定結果が連続して棄却された回数 | 回数が `validation.skipping_publish_num` 以上 | なし | - | + +※ `sensor_points_callback`は、`trigger_node_service`と`ndt_align_service`と同じコールバックグループを共有しています。そのため、初期姿勢推定に時間がかかりすぎると、この診断が古くなる可能性があります。 ### initial_pose_subscriber_status drawing -| 名前 | 説明 | 注意の状態への遷移条件 | エラーの状態への遷移条件 | -| ---------------------- | ------------------------------------------------- | ---------------------- | ------------------------ | -| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | -| `is_activated` | ノードが「アクティブ」状態であるかどうか | 「アクティブ」状態以外 | なし | -| `is_expected_frame_id` | 入力フレーム IDが `frame.map_frame`と同一かどうか | なし | 異なる場合 | +| 名称 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | +| ---------------------- | ---------------------------------------------------------------------- | ------------------------ | ---------------------- | +| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | +| `is_activated` | ノードが「アクティブ化」状態にあるかどうかの情報 | 「アクティブ化」状態ではない | なし | +| `is_expected_frame_id` | 入力frame_idが`frame.map_frame`と同じであるかどうかの情報 | なし | 同じでない | ### regularization_pose_subscriber_status -drawing +図 -| Name | Description | Transition condition to Warning | Transition condition to Error | -| ------------------ | ---------------------------- | ------------------------------- | ----------------------------- | -| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | +| 名前 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | +|---|---|---|---| +| `topic_time_stamp` | 入力トピックのタイムスタンプ | なし | なし | ### trigger_node_service_status -図 +drawing -| 名称 | 説明 | Warningへの移行条件 | Errorへの移行条件 | -| ------------------------- | -------------------------------- | ------------------- | ----------------- | -| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | -| `is_activated` | ノードが「アクティブ」状態か否か | なし | なし | -| `is_succeed_service` | サービスプロセスの成功または失敗 | なし | なし | +| 名前 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | +| ------------------------- | -------------------------------------------------- | ------------------------------- | ----------------------------- | +| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | +| `is_activated` | ノードが "activate" 状態であるかどうか | なし | なし | +| `is_succeed_service` | サービスのプロセスの成功/失敗 | なし | なし | ※ -この診断はサービスが呼び出されたときにのみ発行されるので、初期姿勢推定が完了すると古いものになります。 +この診断はサービスが呼び出された場合にのみ発行されるため、初期の自己位置推定が完了した後は最新ではなくなります。 ### ndt_align_service_status -図 - -| 名前 | 説明 | 警告への遷移条件 | エラーへの遷移条件 | -| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ---------------------------------------------------------- | -| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | -| `is_succeed_transform_initial_pose` | 初期位置の変換に成功したかどうか | なし | エラー | -| `is_need_rebuild` | マップを再構築する必要があるかどうか。まだマップがロードされていない場合、または「`distance_last_update_position_to_current_position encounters`」がエラー状態の場合、マップの再構築が必要と見なされ、`is_need_rebuild` が `True` になります | なし | なし | -| `maps_size_before` | マップの更新前のマップ数 | なし | なし | -| `is_succeed_call_pcd_loader` | pcd_loader サービスの呼び出しに成功したかどうか | エラー | なし | -| `maps_to_add_size` | 追加されるマップ数 | なし | なし | -| `maps_to_remove_size` | 削除されるマップ数 | なし | なし | -| `map_update_execution_time` | マップの更新にかかる時間 | なし | なし | -| `maps_size_after` | マップの更新後のマップ数 | なし | なし | -| `is_updated_map` | マップが更新されたかどうか。マップの更新を実行できなかった場合、またはマップを更新する必要がなかった場合、`False` になります。 | なし | `is_updated_map` が `False` で `is_need_rebuild` が `True` | -| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | -| `is_set_sensor_points` | センサーポイントが設定されているかどうか | 設定されていない | なし | -| `best_particle_score` | 粒子のベストスコア | なし | なし | -| `is_succeed_service` | サービスの処理が成功したかどうか | エラー | なし | +drawing + +| 名称 | 説明 | 警告への移行条件 | エラーへの移行条件 | +| --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `service_call_time_stamp` | サービス呼び出しのタイムスタンプ | なし | なし | +| `is_succeed_transform_initial_pose` | 初期ポーズの変換が成功したか否か | なし | なし | +| `is_need_rebuild` | マップの再構築が必要かどうか。マップがまだロードされていない場合、または`distance_last_update_position_to_current_position encounters`がエラー状態の場合、マップの再構築が必要と見なされ、`is_need_rebuild`は`True`になります | なし | なし | +| `maps_size_before` | マップ更新前のマップの数 | なし | なし | +| `is_succeed_call_pcd_loader` | pcd_loaderサービスの呼び出しが成功したか否か | 失敗 | なし | +| `maps_to_add_size` | 追加するマップの数 | なし | なし | +| `maps_to_remove_size` | 削除するマップの数 | なし | なし | +| `map_update_execution_time` | マップ更新時間 | なし | なし | +| `maps_size_after` | マップ更新後のマップの数 | なし | なし | +| `is_updated_map` | マップが更新されたかどうか。マップの更新を実行できなかった場合、またはマップの更新の必要がなかった場合、`False`になります | なし | `is_updated_map`は`False`だが`is_need_rebuild`は`True` | +| `is_set_map_points` | マップポイントが設定されているかどうか | 設定されていない | なし | +| `is_set_sensor_points` | センサーポイントが設定されているかどうか | 設定されていない | なし | +| `best_particle_score` | 粒子の最高スコア | なし | なし | +| `is_succeed_service` | サービスのプロセスの成功可否 | 失敗 | なし | ※ -この診断はサービスが呼び出され時にのみ発行されるため、初期ポーズ推定が完了すると古くなります。 - -### マップ更新ステータス - -drawing - -| 項目 | 説明 | 警告状態への移行条件 | エラー状態への移行条件 | -| --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ----------------------------------------------------------------------------------------------- | -| `timer_callback_time_stamp` | `timer_callback` の呼び出しタイムスタンプ | なし | なし | -| `is_activated` | ノードが "activate" 状態であるかどうか | "activate" 状態でない | なし | -| `is_set_last_update_position` | `last_update_position` が設定されているかどうか | 設定されてない | なし | -| `distance_last_update_position_to_current_position` | `last_update_position` から現在の位置までの距離 | なし | (距離 + `dynamic_map_loading.lidar_radius`) が `dynamic_map_loading.map_radius` より **大きい** | -| `is_need_rebuild` | マップを再構築する必要があるかどうか。まだマップが読み込まれていなかったり、`distance_last_update_position_to_current_position` がエラー状態を検出したりすると、マップを再構築する必要があり、`is_need_rebuild` が `True` になる。 | なし | なし | -| `maps_size_before` | マップ更新前のマップの数 | なし | なし | -| `is_succeed_call_pcd_loader` | `pcd_loader` サービスを呼び出すことに成功したかどうか | 失敗 | なし | -| `maps_to_add_size` | 追加するマップの数 | なし | なし | -| `maps_to_remove_size` | 削除するマップの数 | なし | なし | -| `map_update_execution_time` | マップ更新の時間 | なし | なし | -| `maps_size_after` | マップ更新後のマップの数 | なし | なし | -| `is_updated_map` | マップが更新されたかどうか。マップの更新が実行できなかったか、マップを更新する必要がなかった場合、`False` になる | なし | `is_updated_map` が `False` だが `is_need_rebuild` が `True` | +この診断情報はサービスが呼び出されたときにのみ公開されるため、最初の自車位置推定が完了した後には非アクティブになります。 + +### map_update_status + +図 + +| 名前 | 説明 | ワーニングへの遷移条件 | エラーへの遷移条件 | +| ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------- | +| `timer_callback_time_stamp` | timer_callback呼び出しのタイムスタンプ | 「アクティブ」状態ではない | なし | +| `is_activated` | ノードが「アクティブ」状態であるかどうか | 「アクティブ」状態でない | なし | +| `is_set_last_update_position` | `last_update_position`が設定されているかどうか | 設定されていない | なし | +| `distance_last_update_position_to_current_position` | `last_update_position`から現在の位置までの距離 | なし | (距離 + `dynamic_map_loading.lidar_radius`)が`dynamic_map_loading.map_radius`より**大きい** | +| `is_need_rebuild` | マップを再構築する必要があるかどうか。まだマップがロードされていないか、または`distance_last_update_position_to_current_position`がエラーの状態の場合、マップの再構築が必要とみなし、`is_need_rebuild`は`True`になります | なし | なし | +| `maps_size_before` | マップ更新前のマップの数 | なし | なし | +| `is_succeed_call_pcd_loader` | pcd_loaderサービスの呼び出しが成功したかどうか | 失敗 | なし | +| `maps_to_add_size` | 追加されるマップの数 | なし | なし | +| `maps_to_remove_size` | 削除されるマップの数 | なし | なし | +| `map_update_execution_time` | マップ更新にかかった時間 | なし | なし | +| `maps_size_after` | マップ更新後のマップの数 | なし | なし | +| `is_updated_map` | マップが更新されたかどうか。マップ更新が実行できなかった場合、またはマップの更新の必要がなかった場合、`False`になります | なし | `is_updated_map`が`False`で、`is_need_rebuild`が`True` | + diff --git a/localization/autoware_pose2twist/README.md b/localization/autoware_pose2twist/README.md index 03e527110db76..d23ccda7ef98e 100644 --- a/localization/autoware_pose2twist/README.md +++ b/localization/autoware_pose2twist/README.md @@ -2,138 +2,75 @@ ## 目的 -この `autoware_pose2twist` は入力された履歴ポーズから速度を計算します。このノードは計算されたツイストに加えて、デバッグを簡素化するために浮動小数点メッセージとして直線 x 成分と角度 z 成分を出力します。 +この`autoware_pose2twist`は、入力された姿勢の履歴から速度を計算します。計算されたツイストに加え、このノードは、デバッグを簡素化するために、線形x成分と角加速度z成分をfloatメッセージとして出力します。 -`twist.linear.x` は `sqrt(dx * dx + dy * dy + dz * dz) / dt` で計算され、`y` フィールドと `z` フィールドの値は 0 になります。 -`twist.angular` は各フィールドについて `relative_rotation_vector / dt` で計算されます。 +`twist.linear.x`は、`sqrt(dx * dx + dy * dy + dz * dz) / dt`として計算され、`y`と`z`フィールドの値は0です。 +`twist.angular`は、各フィールドに対して`relative_rotation_vector / dt`として計算されます。 ## 入出力 ### 入力 -- `/diff_poses`: 車両の過去の `post resampling` ポーズ順序(ジオリファレンス済み) -- `/current_pose`: 車両の自車位置と姿勢(ジオリファレンス済み) +| 名 | 型 | 説明 | +| -- | -- | -- | +| pose | geometry_msgs::msg::PoseStamped | 速度の計算に使用されるポーズのソース | -### 出力 +## 自動運転ソフトウェアのアーキテクチャ -- `/twist`: 速度 -- `/linear_x`: `twist.linear.x` の値 -- `/linear_y`: `twist.linear.y` の値 -- `/linear_z`: `twist.linear.z` の値 -- `/angular_x`: `twist.angular.x` の値 -- `/angular_y`: `twist.angular.y` の値 -- `/angular_z`: `twist.angular.z` の値 -- `/velocity_error`: 速度エラー -- `/velocity_error_tran`: 平行移動速度逸脱量 -- `/velocity_error_rot`: 回転速度逸脱量 -- `/acceleration_error`: 加速度エラー -- `/acceleration_error_tran`: 平行移動加速度逸脱量 -- `/acceleration_error_rot`: 回転加速度逸脱量 -- `/filtered_velocity`: フィルタリングされた速度 +### 概要 -| 名称 | 種別 | 説明 | -| ---- | ------------------------------- | ------------------------------ | -| pose | geometry_msgs::msg::PoseStamped | 速度計算に使用する姿勢のソース | +このドキュメントでは、Autoware's自動運転ソフトウェアのアーキテクチャについて説明します。このソフトウェアは、Perception(認識)、Planning(計画)、Control(制御)の3つの主要コンポーネントで構成されています。 -## 自動運転ソフトウェアドキュメント +### Perceptionコンポーネント -### Planningモジュール +Perceptionコンポーネントは、センサデータから周囲環境を認識します。次のタスクを行います。 -#### VehicleBehaviorPrediction(車両挙動予測) +- オブジェクト検出 +- 車線検出 +- 交通標識検出 -VehicleBehaviorPredictionコンポーネントは、他の車両の挙動を予測します。この情報は、Planningコンポーネントによって、自車位置の決定と回避経路の生成に使用されます。 +### Planningコンポーネント -VehicleBehaviorPredictionコンポーネントは、入力として、以下のデータを使用します。 +Planningコンポーネントは、Perceptionモジュールから提供された情報に基づいて、車両の経路と速度を計画します。次のタスクを行います。 -- LiDARとレーダーからの検出結果 -- センサーの不確実性 -- 道路ネットワーク情報 +- パス計画 +- 速度計画 -VehicleBehaviorPredictionコンポーネントは、以下のアルゴリズムを使用して、他の車両の挙動を予測します。 +### Controlコンポーネント -- Kalmanフィルター -- 粒子フィルター -- 深層学習 +Controlコンポーネントは、Planningモジュールから提供された計画に基づいて、車両のステアリング、加速、ブレーキを制御します。次のタスクを行います。 -#### Planning(経路計画) +- ステアリング制御 +- 加速制御 +- ブレーキ制御 -Planningコンポーネントは、自車位置を決定し、回避経路を生成します。この情報は、Controlコンポーネントによって、車両の制御に使用されます。 +### データフロー -Planningコンポーネントは、入力として、以下のデータを使用します。 +Perception、Planning、Controlコンポーネント間のデータフローを以下に示します。 -- VehicleBehaviorPredictionコンポーネントからの予測車両挙動 -- 自車位置 -- 道路ネットワーク情報 +1. Perceptionコンポーネントは、周囲環境の認識結果をPlanningコンポーネントに送信します。 +2. Planningコンポーネントは、Perceptionコンポーネントのデータに基づいて計画を作成し、Controlコンポーネントに送信します。 +3. Controlコンポーネントは、Planningコンポーネントの計画に基づいて車両を制御します。 -Planningコンポーネントは、以下のアルゴリズムを使用して、自車位置を決定し、回避経路を生成します。 +### その他のコンポーネント -- 動的計画法 -- グラフ探索 -- 最適化 +自動運転ソフトウェアには、上記3つの主要コンポーネントに加えて、以下のコンポーネントも含まれます。 -### Controlモジュール +- **Map Managementコンポーネント:** HDマップを管理します。 +- **Localizationコンポーネント:** 自車位置を推定します。 +- **Vehicle Interfaceコンポーネント:** 車載コンピュータと車両の通信を処理します。 -#### LongitudinalControl(縦方向制御) - -LongitudinalControlコンポーネントは、車両の縦方向の動き(速度と加速度)を制御します。この情報は、ブレーキ、アクセル、ギアの制御に使用されます。 - -LongitudinalControlコンポーネントは、入力として、以下のデータを使用します。 - -- Planningコンポーネントからの自車位置 -- 車両の速度と加速度 -- 障害物検出結果 - -LongitudinalControlコンポーネントは、以下のアルゴリズムを使用して、車両の縦方向の動きを制御します。 - -- PID制御 -- モデル予測制御 - -#### LateralControl(横方向制御) - -LateralControlコンポーネントは、車両の横方向の動き(操舵角)を制御します。この情報は、ステアリングシステムの制御に使用されます。 - -LateralControlコンポーネントは、入力として、以下のデータを使用します。 - -- Planningコンポーネントからの自車位置 -- 車両の速度と加速度 -- 障害物検出結果 - -LateralControlコンポーネントは、以下のアルゴリズムを使用して、車両の横方向の動きを制御します。 - -- PID制御 -- モデル予測制御 - -### システムインテグレーション - -Autowareシステムは、以下のコンポーネントで構成されています。 - -- Planningモジュール -- Controlモジュール -- センサーインターフェース -- システムモニター - -これらのコンポーネントは、CANバスを介して相互に通信します。 - -### 評価 - -Autowareシステムは、以下の指標を使用して評価されます。 - -- 到達率 -- 衝突回数 -- `post resampling`経路逸脱量 -- 加速度逸脱量 -- 速度逸脱量 - -| 名前 | 種類 | 説明 | -| --------- | ------------------------------------- | -------------------------------------- | -| twist | geometry_msgs::msg::TwistStamped | 入力された姿勢履歴から計算した捻り率。 | -| linear_x | tier4_debug_msgs::msg::Float32Stamped | 出力捻り率の線形 x フィールド。 | -| angular_z | tier4_debug_msgs::msg::Float32Stamped | 出力捻り率の角速度 z フィールド。 | +| 名前 | タイプ | 説明 | +|---|---|---| +| twist | geometry_msgs::msg::TwistStamped | 入力ポーズ履歴から計算されたツイスト | +| linear_x | tier4_debug_msgs::msg::Float32Stamped | 出力ツイストの linear-x フィールド | +| angular_z | tier4_debug_msgs::msg::Float32Stamped | 出力ツイストの angular-z フィールド | ## パラメータ -なし +なし。 + +## 想定 / 留意事項 -## 仮定 / 既知の制約 +なし。 -なし diff --git a/localization/autoware_pose_covariance_modifier/README.md b/localization/autoware_pose_covariance_modifier/README.md index b999c41f94cec..6d161fda542c8 100644 --- a/localization/autoware_pose_covariance_modifier/README.md +++ b/localization/autoware_pose_covariance_modifier/README.md @@ -2,55 +2,56 @@ ## 目的 -このパッケージは、リアルタイムの位置推定で GNSS と NDT ポーズを併用することを可能にします。 +このパッケージは、GNSS と NDT のポーズを組み合わせたリアルタイムの局所化を可能にします。 ## 機能 -このパッケージは、共分散を持つ GNSS(全地球測位システム)と NDT(正規分布変換)ポーズを受け取ります。 +このパッケージは、共分散を持つ GNSS(全地球航法衛星システム)と NDT(正規分布変換)のポーズを受け入れます。 -共分散を持つ単一のポーズを出力します。 +それは、共分散を持つ一意のポーズを出力します。 -- GNSS ポーズとその共分散を直接出力します。 -- NDT ポーズとその共分散を直接出力します。 -- 共分散が変更された GNSS ポーズと NDT ポーズの両方を出力します。 +- 直接的な GNSS ポーズとその共分散。 +- 直接的な NDT ポーズとその共分散。 +- 修正された共分散を持つ GNSS と NDT 両方のポーズ。 -> - このパッケージは、受信するポーズ情報を変更しません。 -> - 特定の条件下でのみ NDT 共分散値を変更します。 +> - このパッケージは受信するポーズ情報を変更しません。 +> - 特定の条件で NDT の共分散値のみを変更します。 ## 仮定 -- NDT マッチャは、固定された共分散を持つポーズを提供します。 -- NDT マッチャは、動的で信頼性の高い共分散値を提供できません。 +- NDT マッチャは固定された共分散を持つポーズを提供します。 +- NDT マッチャは動的で信頼できる共分散値を提供できません。 ## 要件 -- GNSS/INS モジュールは、位置と姿勢の標準偏差値(その誤差/RMSE)を提供する必要があります。 -- 正確な位置と姿勢情報を提供するには、RTK サポートが必要になると思われます。 -- 地理参照されたマップが必要です。 -- GNSS/INS モジュールと base_link フレームは、十分に較正されている必要があります。 -- GNSS/INS と NDT システムがうまく機能する環境では、両方のシステムの `base_link` ポーズは互いに近くにある必要があります。 +- GNSS/INS モジュールは、位置と方向の標準偏差値(エラー/RMSE)を提供する必要があります。 +- 正確な位置と方向情報を提供するには、おそらく RTK のサポートが必要です。 +- ジオリファレンスされたマップが必要です。 +- GNSS/INS モジュールと `base_link` フレームは、十分に較正する必要があります。 +- GNSS/INS システムと NDT システムが良好に機能する環境では、両方のシステムの `base_link` ポーズは互いに近い必要があります。 ## 説明 GNSS と NDT ノードは、拡張カルマンフィルター(EKF)で使用される共分散データを持つポーズを提供します。 -正確な共分散値は、EKF が状態を推定する有効性にとって非常に重要です。 +正確な共分散値は、状態を推定するための EKF の有効性に不可欠です。 -GNSS システムは、共分散測定に変換できる信頼性の高い標準偏差値を生成します。 +GNSS システムは、共分散指標に変換できる信頼できる標準偏差値を生成します。 -しかし、現在 NDT ポーズの共分散値を決定する信頼できる方法がありません。 -そして、Autoware の NDT マッチングシステムは、事前設定された共分散値を持つポーズを出力します。 +しかし現在、NDT ポーズの共分散値を決定する方法はありません。 +Autoware の NDT マッチングシステムは、所定の共分散値を持つポーズを出力します。 -この理由から、このパッケージは、GNSS システムによって提供される標準偏差値に基づいて、ポーズソースの選択を管理するように設計されています。 +このため、このパッケージは GNSS システムによって提供される標準偏差値に基づいて、ポーズソースの選択を管理するように設計されています。 -また、GNSS 標準偏差値に基づいて NDT ポーズの共分散値も調整します。 +また、GNSS の標準偏差値に基づいて NDT ポーズの共分散値を調整します。 ## フローチャート -### このパッケージを使用しない場合 +### このパッケージがない場合 ローカリゼーションでは NDT ポーズのみが使用されます。GNSS ポーズは初期化にのみ使用されます。 + ```mermaid graph TD ndt_scan_matcher["ndt_scan_matcher"] --> |"/localization/pose_estimator/pose_with_covariance"| ekf_localizer["ekf_localizer"] @@ -61,11 +62,12 @@ class ndt_scan_matcher cl_node; class ekf_localizer cl_node; ``` -### このパッケージの使用 +### このパッケージの特徴 + +NDTおよびGNSSのポーズは、GNSSシステムから来る標準偏差の値に応じて、ローカリゼーションで利用されます。 -ローカライゼーションでは、GNSSから得られる標準偏差値に応じて、NDTとGNSSの両方の姿勢が使用されます。 +これは処理および事前に定義されたしきい値を示すフローチャートです。 -以下に、プロセスと定義済みの閾値を示すフローチャートを示します。 ```mermaid graph TD @@ -104,120 +106,106 @@ class gnss_pose cl_output; class gnss_ndt_pose cl_output; ``` -## 本パッケージの使用方法 +## このパッケージの使用方法 -> **本パッケージはAutowareでデフォルトでは無効になっています。手動で有効化を行う必要があります。** +> **このパッケージは Autoware では既定で無効となっているため、手動で有効にする必要があります。** -本パッケージを有効化するために、[pose_twist_estimator.launch.xml](../../launch/tier4_localization_launch/launch/pose_twist_estimator/pose_twist_estimator.launch.xml#L3)内の`use_autoware_pose_covariance_modifier`パラメータを`true`に変更する必要があります。 +このパッケージを有効にするには、[pose_twist_estimator.launch.xml](../../launch/tier4_localization_launch/launch/pose_twist_estimator/pose_twist_estimator.launch.xml#L3) +内の `use_autoware_pose_covariance_modifier` パラメータを `true` に変更する必要があります。 -### 条件を満たさない場合(デフォルト) +### この条件がない場合(既定) -- [ndt_scan_matcher](../../localization/autoware_ndt_scan_matcher)の出力が、[ekf_localizer](../../localization/autoware_ekf_localizer)に直接送信されます。 - - 事前に設定された共分散値があります。 - - **トピック名:** `/localization/pose_estimator/pose_with_covariance` -- GNSSの姿勢がekf_localizerに入りません。 +- [ndt_scan_matcher](../../localization/autoware_ndt_scan_matcher) の出力が [ekf_localizer](../../localization/autoware_ekf_localizer) に直接送信されます。 + - 事前に設定された共分散値があります。 + - **トピック名:** `/localization/pose_estimator/pose_with_covariance` +- GNSS の姿勢は ekf_localizer に入りません。 - このノードは起動しません。 -### 条件を満たす場合 +### この条件がある場合 -- [ndt_scan_matcher](../../localization/autoware_ndt_scan_matcher)の出力がリネームされます - - **変更前:** `/localization/pose_estimator/pose_with_covariance` - - **変更後:** `/localization/pose_estimator/ndt_scan_matcher/pose_with_covariance` -- `ndt_scan_matcher`の出力が`autoware_pose_covariance_modifier`に入ります。 -- 本パッケージの出力が、以下とともに[ekf_localizer](../../localization/autoware_ekf_localizer)に出力されます。 - - **トピック名:** `/localization/pose_estimator/pose_with_covariance` +- [ndt_scan_matcher](../../localization/autoware_ndt_scan_matcher) の出力が名前変更されます。 + - **元:** `/localization/pose_estimator/pose_with_covariance` + - **先:** `/localization/pose_estimator/ndt_scan_matcher/pose_with_covariance` +- `ndt_scan_matcher` の出力が `autoware_pose_covariance_modifier` に入ります。 +- このパッケージの出力が [ekf_localizer](../../localization/autoware_ekf_localizer) に次のものとともに送信されます。 + - **トピック名:** `/localization/pose_estimator/pose_with_covariance` ## ノード ### サブスクライブするトピック -| 名称 | タイプ | 説明 | -| -------------------------------- | ----------------------------------------------- | ------------------------ | -| `input_gnss_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSSポーズ入力トピック。 | -| `input_ndt_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | NDTポーズ入力トピック。 | +| 名前 | 型 | 説明 | +| -------------------------------- | ----------------------------------------------- | ---------------------- | +| `input_gnss_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSS姿勢の入力トピック. | +| `input_ndt_pose_with_cov_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | NDT姿勢の入力トピック. | -### 発行トピック +### Published topics -| 名称 | 型 | 説明 | -| ----------------------------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `output_pose_with_covariance_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 出力姿勢トピック。このトピックはekf_localizerパッケージで使用されます。 | -| `selected_pose_type` | `std_msgs::msg::String` | このパッケージの出力でどの姿勢ソースが使用されるかを宣言します。 | -| `output/ndt_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢のndt位置標準偏差の平均(x-y)。enable_debug_topicsがtrueの場合にのみ公開されます。 | -| `output/gnss_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢のGNSS位置標準偏差の平均(x-y)。enable_debug_topicsがtrueの場合にのみ公開されます。 | +| Name | Type | Description | +| ----------------------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| `output_pose_with_covariance_topic` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 出力姿勢トピック。このトピックはekf_localizerパッケージによって使用されます。 | +| `selected_pose_type` | `std_msgs::msg::String` | このパッケージの出力でどの姿勢のソースが使用されているかを宣言します。 | +| `output/ndt_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢ndt平均標準偏差(位置xy)。`enable_debug_topics`がtrueの場合にのみ公開されます。 | +| `output/gnss_position_stddev` | `std_msgs::msg::Float64` | 出力姿勢gnss平均標準偏差(位置xy)。`enable_debug_topics`がtrueの場合にのみ公開されます。 | -### パラメーター +### パラメータ -パラメーターは [config/pose_covariance_modifier.param.yaml](config/pose_covariance_modifier.param.yaml) に設定されています。 +パラメータは +[config/pose_covariance_modifier.param.yaml](config/pose_covariance_modifier.param.yaml) で設定します。 {{ json_to_markdown( "localization/autoware_pose_covariance_modifier/schema/pose_covariance_modifier.schema.json") }} ## FAQ -### さまざまな周波数レートはどのように処理されますか? +### 異なる周波数レートはどのように処理されますか? GNSSとNDTのポーズトピックは異なる周波数を持つ場合があります。 -GNSSポーズトピックはNDTよりも高い周波数を持つ場合があります。 - -入力が次の周波数を持つと仮定します。 - -| 情報源 | 周波数 | -| ------ | ------ | -| GNSS | 200 Hz | -| NDT | 10 Hz | - -このパッケージは、モードに応じて出力のポーズを発行します。 - -最終的な結果: +GNSSのポーズトピックはNDTよりも高い周波数を持つ場合があります。 -| モード | 出力周波数 | -| ---------- | ---------- | -| GNSSのみ | 200 Hz | -| GNSS + NDT | 210 Hz | -| NDTのみ | 10 Hz | +入力の周波数が次のようであると仮定します。 -### NDT共分散値の上書き方法および時期 +| ソース | 周波数 | +| ------ | -------- | +| GNSS | 200 Hz | +| NDT | 10 Hz | -**概要** +このパッケージはモードに応じて、出力ポーズが入力されるたびに公開します。 -NDT(正規分布変換)共分散値は、前方障害物の検出に使用されます。これらは、リレーショナルデータベース(レダンド)内でNDTで提供されます。 +結果: -**詳細** +| モード | 出力周波数 | +| ---------- | ----------- | +| GNSS のみ | 200 Hz | +| GNSS + NDT | 210 Hz | +| NDT のみ | 10 Hz | -NDT共分散値は、以下の条件を満たした場合に上書きされます。 +### NDT 協分散値はどのようにして、いつ上書きされるか? -- `ndt`サブスクライバーが新しいNDTに変換された点群を受信したとき -- Planningモジュールが、`post resampling`結果をNDTに変換し、システムが低速モード(つまり速度が0 m/s以下)にいるとき +| モード | 出力、共分散 | +|---|---| +| GNSSのみ | GNSS、変更なし | +| GNSS + NDT | **GNSS:** 変更なし、**NDT:** 補完 | +| NDTのみ | NDT、変更なし | -これらの共分散値は、常にサブスクライバーに提供されます。ただし、サブスクライバーは、Planningモジュールが低速モードで動作している場合にのみNDTに変換された点群の共分散値を考慮します。これにより、低速で走行中の微妙な物体との衝突を避けることができます。 +NDT共分散値は、`GNSS + NDT`モードの場合にのみ上書きされます。 -**注意:** +これにより、`GNSS Only`モードと`NDT Only`モード間のスムーズな移行が実現されます。 -オブジェクトの障害物逸脱量がvelocity逸脱量よりも著しく大きい場合、速度が0である場合でも、オブジェクトの障害物逸脱量はゼロにはなりません。 +このモードでは、このノードからNDTとGNSSの両方のポーズが公開されます。 -| モード | 出力、共分散 | -| ---------- | --------------------------------- | -| GNSS のみ | GNSS、修正なし | -| GNSS + NDT | **GNSS:** 修正なし、**NDT:** 補間 | -| NDT のみ | NDT、修正なし | +#### NDT共分散の計算 -NDT 共分散値は `GNSS + NDT` モードでのみ上書きされます。 +`gnss_std_dev`がその範囲内で上昇すると、`ndt_std_dev`はその範囲内で比例的に低下する必要があります。 -これにより、`GNSS のみ` モードと `NDT のみ` モードとの間のスムーズな遷移が可能になります。 +これを実現するために、最初に線形補間を行います。 -このモードでは、NDT と GNSS の両方のポーズがこのノードから公開されます。 - -#### NDT 共分散計算 - -`gnss_std_dev` が境界値内で増加すると、`ndt_std_dev` は独自境界内で比例して減少する必要があります。 - -これを実現するには、まず線形補間を行います。 - -- 基準値: `gnss_std_dev` -- 基準範囲: [`threshold_gnss_stddev_xy_bound_lower`, `threshold_gnss_stddev_xy_bound_upper`] +- 基本値: `gnss_std_dev` +- 基本範囲: [`threshold_gnss_stddev_xy_bound_lower`, `threshold_gnss_stddev_xy_bound_upper`] - 目標範囲: [`ndt_std_dev_bound_lower`, `ndt_std_dev_bound_upper`] - 目標値: `ndt_std_dev_target` -- 最終値 = `ndt_std_dev_bound_lower` + `ndt_std_dev_bound_upper` - `ndt_std_dev_target` (逆数を求める) +- 最終値 = `ndt_std_dev_bound_lower` + `ndt_std_dev_bound_upper` - `ndt_std_dev_target`(逆を得るために) + +範囲から範囲へ線形補間 -範囲から範囲への lerp アニメーション diff --git a/localization/autoware_pose_estimator_arbiter/README.md b/localization/autoware_pose_estimator_arbiter/README.md index 50e4450aa7fa8..f5a7ff0bb125e 100644 --- a/localization/autoware_pose_estimator_arbiter/README.md +++ b/localization/autoware_pose_estimator_arbiter/README.md @@ -1,36 +1,36 @@ -# autoware_pose_estimator_arbiter +## autoware_pose_estimator_arbiter -目次: +目的: - [概要](#概要) - [インターフェース](#インターフェース) - [アーキテクチャ](#アーキテクチャ) - [起動方法](#起動方法) -- [切替ルール](#切替ルール) +- [切り替えルール](#切り替えルール) - [姿勢初期化](#姿勢初期化) -- [今後の予定](#今後の予定) +- [将来の計画](#将来の計画) ## 概要 -本パッケージは複数の姿勢推定器を起動し、状況に応じて特定の姿勢推定器を停止または再開する機能を提供します。 -暫定的な切替ルールが用意されており、将来的にはさまざまなルールに対応できるようになります。 +このパッケージは、複数の姿勢推定器を起動し、状況に応じて特定の姿勢推定器を停止または再開する機能を提供します。 +仮の切り替えルールを提供しており、将来的にはさまざまなルールに適応できます。 -他の実装方法に関するアイデアについては、[このディスカッション](https://github.com/orgs/autowarefoundation/discussions/3878)を参照してください。 +実装に関する他のアイデアについては、[このディスカッション](https://github.com/orgs/autowarefoundation/discussions/3878)を参照してください。 -### 停止/再開メカニズムが必要な理由 +### なぜ停止/再開メカニズムが必要ですか? -起動ファイルを編集することで複数の`pose_estimators`を起動し、カルマンフィルタを使用してそれらを融合することは可能です。 -ただし、このアプローチは計算コストがかかるため推奨されません。 +起動ファイルを変更することで、複数のpose_estimatorsを起動し、それらをカルマンフィルタを使用して融合することができます。 +ただし、これは計算コストが高いため、好まれません。 -特に、NDTとYabLocは計算集約的であり、同時に実行することは推奨されません。 -また、両方を同時に有効にしても、どちらかが悪い出力を出すとカルマンフィルタに影響が出る可能性があります。 +特に、NDTとYabLocは計算集約的で、同時実行は推奨されません。 +また、両方を同時にアクティブにしても、その1つから誤った出力が供給されたときにカルマンフィルタが影響を受ける可能性があります。 -> [!NOTE] -> 現在のところ、**すべての`pose_estimators`を常に有効にするルールのみが実装されています。** -> ユーザーが独自のルールで`pose_estimator`を切り替える場合は、example_ruleを参照して新しいルールを追加する必要があります。 -> [example_rule](example_rule/README.md)には、ルールを実装するためのリファレンスとして使用できるソースコードがあります。 +> [!注意] +> 現在、**すべてのpose_estimatorsを常に有効にするルールのみが実装されています。** +> ユーザーが独自ルールでpose_estimatorを切り替えたい場合は、example_ruleを参照して新しいルールを追加する必要があります。 +> [example_rule](example_rule/README.md)には、ルール実装の参照として使用できるソースコードが含まれています。 -### サポートされる`pose_estimators` +### サポートされるpose_estimators - [ndt_scan_matcher](https://github.com/autowarefoundation/autoware.universe/tree/main/localization/autoware_ndt_scan_matcher) - [eagleye](https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/integrating-autoware/launch-autoware/localization/eagleye/) @@ -39,15 +39,16 @@ ### デモンストレーション -以下のビデオでは、4つの異なる姿勢推定器の切り替えの様子を説明しています。 +次の動画は、4つのさまざまな姿勢推定器の切り替えを示しています。
-ユーザーは、以下のデータと起動コマンドを使用して、このデモンストレーションを再現できます。 +ユーザーは、以下のデータと起動コマンドを使用してデモンストレーションを再現できます。 + +[サンプルデータ(rosbagと地図)](https://drive.google.com/file/d/1ZNlkyCtwe04iKFREdeZ5xuMU_jWpwM3W/view) +rosbagは、[AWSIM](https://tier4.github.io/AWSIM/)によって作成されたシミュレーションデータです。 +マップは、AWSIMドキュメントページで公開された[元のマップデータ](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip)を編集したもので、複数のpose_estimatorsに適したものとなっています。 -[サンプルデータ(rosbagおよびマップ)](https://drive.google.com/file/d/1ZNlkyCtwe04iKFREdeZ5xuMU_jWpwM3W/view) -rosbagは[AWSIM](https://tier4.github.io/AWSIM/)によって作成されたシミュレーションデータです。 -マップは、AWSIMのドキュメンテーションページで公開されている[オリジナルマップデータ](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip)を編集したもので、複数の`pose_estimators`に適したものになっています。 ```bash ros2 launch autoware_launch logging_simulator.launch.xml \ @@ -57,121 +58,71 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ 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]へメッセージをパブリッシュします。 +- ROS service: /planning/get_trajectory_status +- ROS topic: /planning/status -**Autoware Controller Client** -- Controller Client は Controller モジュールの Pub/Sub クライアントです。[autoware.control.command]から制御コマンドをサブスクライブし、[autoware.control.act]へメッセージをパブリッシュします。 - -| 名称 | タイプ | 説明 | -| --------------------- | --------------------- | ----------------------------------- | -| `/yabloc_suspend_srv` | std_srv::srv::SetBool | Yabloc を停止または再開するサービス | +| 名称 | タイプ | 説明 | +| --------------------- | --------------------- | --------------------------------- | +| `/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/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 が想定以上の加速を要求した場合 +| `/input/ndt/pointcloud` | sensor_msgs::msg::PointCloud2 | NDT入力 | -- **走行中の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` | ローカリゼーション初期化状態 | +| 名称 | タイプ | 説明 | +| ----------------------------- | ------------------------------------------------------------ | --------------------------------- | +| `/input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | vector map | +| `/input/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | localization final output | +| `/input/initialization_state` | autoware_adapi_v1_msgs::msg::LocalizationInitializationState | localization initialization state | ### 論文 -| 名前 | タイプ | 説明 | -| -------------------------------------- | --------------------------------------------- | ----------------------------------------------------- | -| `/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 | [デバッグトピック] 現在のステータスなどのデバッグ情報 | +'post resampling` 推定器は、[確率ロボティクス](https://www.cs.ox.ac.uk/people/kyprianos.kourousis/pub/rothnie2012kld.pdf)に説明があります。 -
+| 名前 | タイプ | 説明 | +| ------------------------------------- | ------------------------------------------- | ---------------------------------------------------------- | +| `/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 | [デバッグトピック] 現在の状態などのデバッグ情報 | +```markdown ## トラブルシューティング -うまくいかない場合は、以下の方法でさらに多くの詳細情報が取得できます。 +動作しないと思われる場合は、以下の方法で追加情報を取得できます。 > [!TIP] +``` + > ```bash > ros2 service call /localization/autoware_pose_estimator_arbiter/config_logger logging_demo/srv/ConfigLogger \ @@ -181,57 +132,59 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ ## アーキテクチャ
-詳細を表示するにはクリックしてください +詳細を表示する -### 単一のポーズ推定器を実行する場合 +### 1つのポーズ推定器の実行の場合 -各 `pose_estimator` が単独で実行されているとき、このパッケージは何も行いません。 -次の図は、NDT、YabLoc Eagleye、および AR-Tag が個別に実行されているときのノード構成を示しています。 +各 `pose_estimator` が単独で実行されるとき、このパッケージは何もしません。 +次の図は、NDT、YabLoc Eagleye、AR-Tagが独立して実行されるときのノード構成を示しています。 drawing -### 複数のポーズ推定器を実行する場合 +### 複数のポーズ推定器の実行の場合 -複数の `pose_estimators` を実行すると、`autoware_pose_estimator_arbiter` が実行されます。 -これは各 `pose_estimator` に対応する **切り替えルール** と **ストッパー** で構成されています。 +複数の `pose_estimator` を実行すると、`autoware_pose_estimator_arbiter` が実行されます。 +これには、各 `pose_estimator` に対応する **切り替えルール** と **ストッパー** が含まれます。 -- ストッパーは、入出力の中継やサスペンドサービスのリクエストを行うことで、`pose_estimator` のアクティビティを制御します。 +- ストッパーは、入出力を中継したり、中断サービスを要求したりして、`pose_estimator` のアクティビティを制御します。 - 切り替えルールは、使用する `pose_estimator` を決定します。 -インスタンス化されるストッパーと切り替えルールは、起動時のランタイム引数によって決まります。 +インスタンス化するストッパーと切り替えルールは、スタートアップ時のランタイム引数によって異なります。 -次の図は、すべての `pose_estimators` が同時に実行されているときのノード構成を示しています。 +次の図は、すべての `pose_estimator` が同時に実行されるときのノード構成を示しています。 drawing - **NDT** -NDT ストッパーは、ポイントクラウドプリプロセッサの前方にトピックを中継します。 +NDT ストッパーは、ポイントクラウドプリプロセッサの前面にあるトピックを中継します。 - **YabLoc** -YabLoc ストッパーは、イメージプリプロセッサのフロントエンドに入力イメージトピックを中継します。 -YabLoc には、タイマーで動作するパーティクルフィルタプロセスが含まれており、イメージトピックがストリーミングされていない場合でも、パーティクル予測プロセスは引き続き動作します。 -これを解決するために、YabLoc ストッパーには、YabLoc を明示的に停止および再開するためのサービスクライアントも含まれています。 +YabLoc ストッパーは、画像プリプロセッサのフロントエンドにある入力画像トピックを中継します。 +YabLoc には、タイマーで動作する粒子フィルタプロセスが含まれており、画像トピックがストリーミングされていない場合でも、粒子の予測プロセスは引き続き動作します。 +これを解決するために、YabLoc ストッパーには、YabLoc を明示的に停止および再開するためのサービスクライアントもあります。 - **Eagleye** -Eagleye ストッパーは、Eagleye 推定プロセスのバックエンドで Eagleye の出力ポーズトピックを中継します。 -Eagleye は内部で時系列処理を実行し、入力ストリームの停止はできません。 -さらに、Eagleye の推定プロセスは、大きな負荷なしに連続して実行できるほど軽量であるため、中継はバックエンドに挿入されます。 +Eagleye ストッパーは、Eagleye の推定処理のバックエンドにある Eagleye の出力ポーズトピックを中継します。 +Eagleye は内部で時系列処理を実行するため、入力ストリームを停止できません。 +さらに、Eagleye の推定プロセスは継続的に実行しても大きな負荷をかけずに済むほど軽量であるため、リレーはバックエンドに挿入されます。 - **ArTag** -ArTag ストッパーは、ランドマークローカルライザの前にあるイメージトピックを中継します。 +ArTag ストッパーは、ランドマークローカルライザの前面にある画像トピックを中継します。
## 起動方法
-詳細を表示するにはクリックしてください +詳細を表示する + +ユーザーは、ランタイム引数 `pose_source` としてアンダースコアで連結された `pose_estimator` 名を指定することで、目的の `pose_estimator` を起動できます。 +
-ユーザーは、ランタイム引数 `pose_source` にアンダースコアの連結として `pose_estimator` 名を渡すことで、目的の `pose_estimators` を起動できます。 ```bash ros2 launch autoware_launch logging_simulator.launch.xml \ @@ -241,32 +194,32 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ pose_source:=ndt_yabloc_artag_eagleye ``` -予期しない文字列が `pose_source` に含まれていた場合でも、適切にフィルタされます。 -詳細は下記の表を参照してください。 +たとえ `pose_source` に想定外の文字列が含まれていても、適切にフィルタリングされます。 +詳細は以下の表を参照してください。 -| 実行時引数 | autoware_pose_estimator_arbiterのパラメータ(pose_source) | -| ------------------------------------------- | -------------------------------------------------------- | -| `pose_source:=ndt` | `["ndt"]` | -| `pose_source:=nan` | `[]` | -| `pose_source:=yabloc_ndt` | `["ndt","yabloc"]` | -| `pose_source:=yabloc_ndt_ndt_ndt` | `["ndt","yabloc"]` | -| `pose_source:=ndt_yabloc_eagleye` | `["ndt","yabloc","eagleye"]` | -| `pose_source:=ndt_yabloc_nan_eagleye_artag` | `["ndt","yabloc","eagleye","artag"]` | +| 与えられたランタイム引数 | 解析された autoware_pose_estimator_arbiter のパラメータ (pose_sources) | +| ----------------------- | ----------------------------------------------------------------- | +| `pose_source:=ndt` | `["ndt"]` | +| `pose_source:=nan` | `[]` | +| `pose_source:=yabloc_ndt` | `["ndt","yabloc"]` | +| `pose_source:=yabloc_ndt_ndt_ndt` | `["ndt","yabloc"]` | +| `pose_source:=ndt_yabloc_eagleye` | `["ndt","yabloc","eagleye"]` | +| `pose_source:=ndt_yabloc_nan_eagleye_artag` | `["ndt","yabloc","eagleye","artag"]` | ## 切り替えルール
詳細を表示 -現在は **ルールが 1 つのみ** (`enable_all_rule`) 実装されています。 -将来は複数のルールが実装され、ユーザーがルールを選択できるようになります。 +現在は、**1 つのルール** (`enable_all_rule`) のみ実装されています。将来は、複数のルールを実装する予定であり、ユーザーはルールを選択できるようになります。 + +> [!TIP] +> ルールを拡張するためのプリセットがあります。ルールを拡張する場合は、[example_rule](./example_rule/README.md) を参照してください。 -> [!ヒント] -> ルールを拡張するためのプリセットが用意されています。ルールを拡張したい場合は、[example_rule](./example_rule/README.md) を参照してください。 +### すべて有効にするルール -### 全てを有効にするルール +これはデフォルトかつ最も簡単なルールです。このルールは、現在の状態に関係なくすべての pose_estimators を有効にします。 -これは既定で最もシンプルなルールです。このルールは、現在の状態に関係なく、すべての pose_estimator を有効にします。 ```mermaid flowchart LR @@ -274,66 +227,60 @@ flowchart LR A --whatever --> _A[enable all pose_estimators] ``` -
- -## 自車位置初期化 +## 姿勢初期化 -複数の pose_estimators を使用する場合、`pose_initializer` に渡すパラメータを適切に調整する必要があります。 +複数の pose_estimators を使用する場合、`pose_initializer` に渡されるパラメータを適切に調整する必要があります。
-クリックして詳細を表示 +クリックで詳細を表示 -次の表は、初期の自車位置推定法を示すランタイム引数 "pose_source" および pose_initialization ノードに渡す必要があるパラメータに基づいています。 -アプリケーションを複雑になりすぎないように、NDT が使用可能な場合は常に NDT が使用されるようにプライオリティが確立されます。 -(`ndt_enabled` と `yabloc_enabled` の両方が `true` の場合にのみ、pose_initializer は NDT ベースの初期自車位置推定を実行します)。 +次の表は、run time 引数 "pose_source" に基づいており、初期姿勢推定法の種類と pose_initialization ノードに提供する必要があるパラメータを示しています。アプリケーションを複雑にしすぎないように、NDT が使用可能な場合は常に NDT が使用されるように優先順位が設定されています。(pose_initializer は `ndt_enabled` と `yabloc_enabled` が両方 `true` の場合にのみ NDT ベースの初期姿勢推定を実行します)。 この表の使い方は、3 つの観点から説明されています。 -- **Autoware ユーザー:** Autoware ユーザーはこの表を参照する必要はありません。 - 自車位置推定器の組み合わせを指定するだけで、pose_initializer に適切なパラメータが自動的に与えられます。 +- **Autoware ユーザー:** Autoware ユーザーはこの表を参照する必要はありません。姿勢推定器の必要な組み合わせを指定するだけで、適切なパラメータが pose_initializer に自動的に提供されます。 - **Autoware 開発者:** Autoware 開発者は、どのパラメータが割り当てられているかを知るためにこの表を参照できます。 -- **新しい自車位置推定スイッチを実装する人:** - 開発者は、この表を拡張し、pose_initializer に適切なパラメータを割り当てるように実装する必要があります。 - +- **新しい姿勢推定器の切り替えを実装している開発者:** 開発者はこの表を拡張し、適切なパラメータを pose_initializer に割り当てる必要があります。
-| pose_source | invoked initialization method | `ndt_enabled` | `yabloc_enabled` | `gnss_enabled` | `sub_gnss_pose_cov` | -| :-------------------------: | ------------------------------------ | ------------- | ---------------- | -------------- | -------------------------------------------- | -| ndt | ndt | true | false | true | /sensing/gnss/pose_with_covariance | -| yabloc | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | -| eagleye | 車両はしばらく走行する必要があります | false | false | true | /localization/pose_estimator/eagleye/... | -| artag | 2D 姿勢推定(RViz) | false | false | true | /sensing/gnss/pose_with_covariance | -| ndt, yabloc | ndt | true | true | true | /sensing/gnss/pose_with_covariance | -| ndt, eagleye | ndt | true | false | true | /sensing/gnss/pose_with_covariance | -| ndt, artag | ndt | true | false | true | /sensing/gnss/pose_with_covariance | -| yabloc, eagleye | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | -| yabloc, artag | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | -| eagleye, artag | 車両はしばらく走行する必要があります | false | false | true | /localization/pose_estimator/eagleye/pose... | -| ndt, yabloc, eagleye | ndt | true | true | true | /sensing/gnss/pose_with_covariance | -| ndt, eagleye, artag | ndt | true | false | true | /sensing/gnss/pose_with_covariance | -| yabloc, eagleye, artag | yabloc | false | true | true | /sensing/gnss/pose_with_covariance | -| ndt, yabloc, eagleye, artag | ndt | true | true | true | /sensing/gnss/pose_with_covariance | - -## 今後の計画 +| `pose_source` | `invoked initialization method` | `ndt_enabled` | `yabloc_enabled` | `gnss_enabled` | `sub_gnss_pose_cov` | +| :-------------------------: | :------------------------------------: | :--------------------------: | :----------------------------: | :--------------------------: | :----------------------------------------: | +| `ndt` | `ndt` | `true` | `false` | `true` | `/sensing/gnss/pose_with_covariance` | +| `yabloc` | `yabloc` | `false` | `true` | `true` | `/sensing/gnss/pose_with_covariance` | +| `eagleye` | `vehicle needs run for a while` | `false` | `false` | `true` | `/localization/pose_estimator/eagleye/...` | +| `artag` | `2D Pose Estimate (RViz)` | `false` | `false` | `true` | `/sensing/gnss/pose_with_covariance` | +| `ndt`, `yabloc` | `ndt` | `true` | `true` | `true` | `/sensing/gnss/pose_with_covariance` | +| `ndt`, `eagleye` | `ndt` | `true` | `false` | `true` | `/sensing/gnss/pose_with_covariance` | +| `ndt`, `artag` | `ndt` | `true` | `false` | `true` | `/sensing/gnss/pose_with_covariance` | +| `yabloc`, `eagleye` | `yabloc` | `false` | `true` | `true` | `/sensing/gnss/pose_with_covariance` | +| `yabloc`, `artag` | `yabloc` | `false` | `true` | `true` | `/sensing/gnss/pose_with_covariance` | +| `eagleye`, `artag` | `vehicle needs run for a while` | `false` | `false` | `true` | `/localization/pose_estimator/eagleye/pose...` | +| `ndt`, `yabloc`, `eagleye` | `ndt` | `true` | `true` | `true` | `/sensing/gnss/pose_with_covariance` | +| `ndt`, `eagleye`, `artag` | `ndt` | `true` | `false` | `true` | `/sensing/gnss/pose_with_covariance` | +| `yabloc`, `eagleye`, `artag` | `yabloc` | `false` | `true` | `true` | `/sensing/gnss/pose_with_covariance` | +| `ndt`, `yabloc`, `eagleye`, `artag` | `ndt` | `true` | `true` | `true` | `/sensing/gnss/pose_with_covariance` | + +## 今後の予定
詳細を表示 -### 段階的な切り替え +### 漸次切り替え -今後、このパッケージでは、オン/オフの切り替えだけでなく、50% NDT と 50% YabLoc などの低周波動作のためのメカニズムも提供します。 +将来、このパッケージは単なるオン/オフ切り替えだけでなく、50% NDT と 50% YabLoc などの低周波動作のためのメカニズムを提供します。 -### 今後追加される pose_estimators 用の stopper +### 今後追加される pose_estimator のストッパー -基本的な戦略は、その pose_estimator の入力または出力トピックをリレーすることでオン/オフの切り替えを実現することです。 -pose_estimator に大量の計算を伴う時系列処理が含まれている場合、トピックリレーだけで一時停止して再開することはできません。 +基本的な戦略は、その pose_estimator の入力または出力トピックを中継することでオン/オフ切り替えを実現することです。 +pose_estimator が大量の計算を伴う時系列処理を含む場合、トピックの中継だけでポーズと再開をすることは不可能です。 -このような場合、一般的に適用可能なソリューションはないかもしれませんが、次の方法が役立つ場合があります。 +そのような場合、一般的に適用可能な解決策はないかもしれませんが、以下の方法が役立つ可能性があります。 -1. YabLoc の場合に示されているように、時系列処理を完全に停止して**再初期化**する。 -2. `localization/kinematic_state` を購読して**状態を更新し続け**、推定が中断しないようにする(アクティブな pose_estimator の出力を利用する)。 -3. 複数の pose_estimator は、その特定の pose_estimator を**サポートしない**。 +1. YabLoc の場合に見られるように、時系列処理を完全に停止して**再初期化**します。 +2. `localization/kinematic_state` を subscribe して**状態を更新し続けます**。これにより、推定が中断しないようにします(アクティブな pose_estimator の出力に依存します)。 +3. 複数の pose_estimator は、その特定の pose_estimator を**サポートしません**。 -この問題は複数の pose_estimator を実現するための基本的な問題であり、この場合に提案されたアーキテクチャに関係なく発生することに注意してください。 +この問題は複数の pose_estimator を実現するための根本的な問題であることに注意してください。この場合に提案されたアーキテクチャに関係なく発生します。
+ diff --git a/localization/autoware_pose_estimator_arbiter/example_rule/README.md b/localization/autoware_pose_estimator_arbiter/example_rule/README.md index 0acc5f7f2bf79..20e425cfe455f 100644 --- a/localization/autoware_pose_estimator_arbiter/example_rule/README.md +++ b/localization/autoware_pose_estimator_arbiter/example_rule/README.md @@ -1,16 +1,17 @@ -# 自動運転ソフトウェアに関するドキュメント +# サンプルルール -このドキュメントでは、自動運転ソフトウェアの基本ルールについて説明します。これらのルールを組み合わせることで、以下のような機能を実現できます。ユーザーは必要に応じてこれらのルールを拡張してこのコードを参照し、希望どおりにアービターを制御することができます。 +サンプルルールはアービターを制御するためのサンプルルールを提供します。提供されるルールを組み合わせることで、以下のようなデモを実現できます。ユーザーは必要に応じてこのコードを参照してルールを拡張でき、目的通りにアービターを制御できます。 ## デモ -次のビデオは、4つの異なるポーズ推定値を切り替える様子を示しています。 +次のビデオは、4つの異なるポーズ推定器の切り替えを示しています。
-### 切り替えルール +## 切り替えルール + +### Pcd Mapベースルール -### Pcdマップを使用したルール ```mermaid flowchart LR @@ -19,52 +20,11 @@ flowchart LR A --false--> C[enable YabLoc] ``` -### ベクトルマップベースルール - -**1. シスプレビュー** - -**1.1. 概要** - -本ドキュメントでは、Autoware.Autoのベクトルマップベースルール機能について説明します。この機能により、Planningコンポーネントは、ベクトルマップから得られた道路ネットワーク制約に基づいて、走行経路を生成できます。 - -**1.2. 利点** - -- 道路ネットワーク上の走行経路生成を正確化します。 -- 交通状況に適応して安全で効率的な走行を実現します。 - -**2. アーキテクチャ** - -ベクトルマップベースルール機能は、以下のコンポーネントで構成されています。 - -- **ベクトルマップ解析器:** ベクトルマップから道路ネットワーク情報を抽出します。 -- **ルール処理:** 道路ネットワーク制約に基づいて走行経路にルールを適用します。 +### ベクターマップベースルール -**3. ルール** +--- -ベクトルマップベースルール機能は、次のようなルールを走行経路に適用します。 -- **車線逸脱量:** 車線境界からの逸脱量を制限します。 -- **加速逸脱量:** 加速に関する制限を適用します。 -- **速度逸脱量:** 速度に関する制限を適用します。 -- **停止線遵守:** 停止線で車両を停止させます。 -- **優先順位付き交差点:** 交差点における優先順位を遵守します。 - -**4. 使用方法** - -ベクトルマップベースルール機能を使用するには、次の手順に従います。 - -- Autoware.Autoのルート設定ファイルでベクトルマップパスを指定します。 -- ナビゲーションコンポーネントを有効にします。 -- `post resampling`を使用している場合は、Planningパラメータを設定してベクトルマップベースのルールを有効にします。 - -**5. 制限事項** - -- ベクトルの品質に依存します。 -- すべての道路をカバーしていない場合があります。 - -**6. 関連ドキュメント** - -- [Autoware.Autoドキュメント](https://autoware.github.io/autoware.auto/) ```mermaid flowchart LR @@ -74,24 +34,25 @@ flowchart LR ### ルールヘルパー -ルールヘルパーは、スイッチングルールを記述するための補助ツールです。 +ルールヘルパーは、切り替えルールを記述するための補助ツールです。 -- [PCD占有率](#pcd-occupancy) -- [ポーズ推定エリア](#pose-estimator-area) +- [PCD占有度](#pcd-occupancy) +- [Poses推定エリア](#pose-estimator-area) -#### PCD占有率 +#### PCD占有度 drawing -#### ポーズ推定エリア +#### Poses推定エリア -`pose_estimator_area` は、`lanelet2` のポリゴンで記述された平面の領域です。エリアの高さには意味はなく、自車の位置の投影がポリゴンの内側に含まれているかどうかを判断します。 +pose_estimator_areaは、lanelet2内のポリゴンで記述される平面領域です。 +領域の高さは意味を持ちません。自車位置の投影がポリゴン内に含まれているかどうかを判定します。 drawing -以下のサンプルの `pose_estimator_area` が示されています。次に示す値はプレースホルダーです。 +サンプルのpose_estimator_areaを以下に示します。以下に提供する値はプレースホルダーです。 +正しく読み取るには、この領域のタイプは「pose_estimator_specify」で、サブタイプはndt、yabloc、eagleye、またはartagのいずれかである必要があります。 -エリアが正しく読み取られていることを確認するには、エリアのタイプを「`pose_estimator_specify`」にして、サブタイプをndt、yabloc、eagleye、またはartagのいずれかにします。 ```xml @@ -142,3 +103,4 @@ flowchart LR ``` + diff --git a/localization/autoware_pose_initializer/README.md b/localization/autoware_pose_initializer/README.md index 2ced2cf100fb6..fe5be06a7af71 100644 --- a/localization/autoware_pose_initializer/README.md +++ b/localization/autoware_pose_initializer/README.md @@ -1,106 +1,76 @@ # autoware_pose_initializer -## 目的 +## 用途 -`autoware_pose_initializer` は `ekf_localizer` に初期ポーズを送信するパッケージです。GNSS/ユーザーから初期ポーズの概算値を受け取ります。このポーズを `ndt_scan_matcher` に渡すと、`ndt_scan_matcher` がサービス経由で計算した自車位置を取得します。最後に、初期ポーズを `ekf_localizer` にパブリッシュします。このノードは、地図高さフィッターライブラリに依存しています。[詳細はこちらを参照してください。](../../map/autoware_map_height_fitter/README.md) +`autoware_pose_initializer`は、初期姿勢を`ekf_localizer`に送るためのパッケージです。 +GNSS/ユーザーから初期姿勢のおおよその推定値を受け取ります。 +姿勢を`ndt_scan_matcher`に渡し、`ndt_scan_matcher`からサービス経由で自己位置の計算値を取得します。 +最後に、初期姿勢を`ekf_localizer`にパブリッシュします。 +このノードはマップ高フィットライブラリに依存しています。 +[詳細はこちらをご覧ください。](../../map/autoware_map_height_fitter/README.md) ## インターフェイス -### パラメータ +### パラメーター {{ json_to_markdown("localization/autoware_pose_initializer/schema/pose_initializer.schema.json") }} ### サービス -| 名前 | タイプ | 説明 | -| -------------------------- | ---------------------------------------------------- | ----------------- | +| 名称 | 型 | 説明 | +| -------------------------- | ---------------------------------------------------- | --------------------- | | `/localization/initialize` | tier4_localization_msgs::srv::InitializeLocalization | APIからの初期位置 | ### クライアント -| 名称 | タイプ | 説明 | -| -------------------------------------------- | ------------------------------------------------------- | -------------- | -| `/localization/pose_estimator/ndt_align_srv` | tier4_localization_msgs::srv::PoseWithCovarianceStamped | 位推定サービス | +| 名称 | 種類 | 説明 | +| -------------------------------------------- | ------------------------------------------------------- | ----------------------- | +| `/localization/pose_estimator/ndt_align_srv` | tier4_localization_msgs::srv::PoseWithCovarianceStamped | 自車位置推定サービス | ### サブスクリプション -| 名称 | タイプ | 説明 | -| ----------------------------------------------------------- | --------------------------------------------- | ------------------------ | -| `/sensing/gnss/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | GNSSから取得した自車位置 | -| `/sensing/vehicle_velocity_converter/twist_with_covariance` | geometry_msgs::msg::TwistStamped | 停止確認用の速度 | +| 名前 | タイプ | 説明 | +| ----------------------------------------------------------- | ----------------------------------------------- | ----------------------------------------- | +| `/sensing/gnss/pose_with_covariance` | geometry_msgs::msg::PoseWithCovarianceStamped | GNSSの現在姿勢 | +| `/sensing/vehicle_velocity_converter/twist_with_covariance` | geometry_msgs::msg::TwistStamped | 停止チェック用の角速度 | -### 論文 +### Publication -### Autoware の技術スタック +------------------- -Autoware は、自動運転車両の開発と実装のためのオープンソースソフトウェアプラットフォームです。以下に、主なコンポーネントとモジュールをリストします。 +| 名称 | タイプ | 説明 | +| ------------------------------------ | ---------------------------------------------------------- | ----------------------- | +| `/localization/initialization_state` | autoware_adapi_v1_msgs::msg::LocalizationInitializationState | 姿勢初期化状態 | +| `/initialpose3d` | geometry_msgs::msg::PoseWithCovarianceStamped | 計算された初期自車位置 | +| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | 診断 | -#### Planning - -- **Motion Planning:** 車両の安全で効率的な経路を生成します。 -- **Behavior Planning:** 車両の挙動を決定し、障害物回避や速度調整を行います。 - -#### Perception - -- **Object Detection (2D/3D):** センサーからのデータを使用して、車両周辺の物体(歩行者、車両、障害物など)を検出します。 -- **Lane Detection:** カメラ画像を使用して、道路上の車線を検出します。 -- **Free Space Estimation:** 車両周辺の走行可能な領域を推定します。 - -#### Control - -- **Longitudinal Control:** 車両の縦方向運動(加速度、減速度)を制御します。 -- **Lateral Control:** 車両の横方向運動(ステアリング)を制御します。 -- **Path Tracking:** 生成されたパスに従って車両を誘導します。 - -#### Localization - -- **Odometry:** IMUやGNSSなどのセンサーを使用して、自車位置を推定します。 -- **Mapping:** 環境の地図を作成し、自車位置をローカライズするために使用します。 -- **Loop Closure Detection:** 地図内のループを検出し、ローカライゼーションの精度を向上させます。 - -#### Sensor Interface - -- **Sensor Fusion:** 複数のセンサーからのデータを統合し、より正確で堅牢な認識情報を作成します。 -- **'Post Resampling' Sensor Fusion:** センサーデータの処理を最適化して、リアルタイムパフォーマンスを向上させます。 - -#### Software Architecture - -- **ROS 2:** Autoware のコアアーキテクチャとして使用される、堅牢でスケーラブルなミドルウェア。 -- **DDS:** データをリアルタイムで配信するための高性能ミドルウェア。 -- **Python:** スクリプティングや構成に使用されます。 -- **C++:** リアルタイムコンポーネントやカーネルモジュールに使用されます。 - -| 名称 | 型 | 説明 | -| ------------------------------------ | ------------------------------------------------------------ | ---------------------- | -| `/localization/initialization_state` | autoware_adapi_v1_msgs::msg::LocalizationInitializationState | 位相初期化状態 | -| `/initialpose3d` | geometry_msgs::msg::PoseWithCovarianceStamped | 計算された自車初期位相 | -| `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | 診断 | - -## 診断 +## Diagnostics ### pose_initializer_status -初期位置推定結果のスコアがスコアしきい値より低い場合、`/diagnostics` トピックにERRORメッセージが出力されます。 +初期ポーズ推定の結果のスコアがスコアしきい値を下回った場合、ERRORメッセージが`/diagnostics`トピックに出力されます。 drawing -## デフォルトAD APIとの接続 +## Default AD APIとの接続 -この`autoware_pose_initializer` はデフォルトAD APIを介して使用されます。APIの説明の詳細については、[`autoware_default_adapi` の説明](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/localization.md)を参照してください。 +この`autoware_pose_initializer`は、デフォルトのAD APIを介して使用されます。APIの説明については、[autoware_default_adapiの説明](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/localization.md)を参照してください。 drawing -## CLIを介したポーズの初期化 +## CLIを介したPoseの初期化 + +### GNSS推定位置を使用する -### GNSS推定位置の使用 ```bash ros2 service call /localization/initialize tier4_localization_msgs/srv/InitializeLocalization ``` -GNSS 推定位置は初期推測として使用され、局所化アルゴリズムは自動的にさらに正確な位置を推定します。 +GNSS推定位置は初期予測として使用され、ローカライゼーションアルゴリズムは、より正確な位置を自動的に推定します。 + +### 入力位置を使用する -### 入力位置の使用 ```bash ros2 service call /localization/initialize tier4_localization_msgs/srv/InitializeLocalization " @@ -123,9 +93,10 @@ method: 0 " ``` -入力位置は初期推定値として使用され、ローカライゼーションアルゴリズムによって自動的により正確な位置が推定されます。 +入力された位置を初期推測として使用し、ローカリゼーションアルゴリズムは自動的により正確な位置を推定します。 + +### 直接初期位置の設定 -### 直接的な初期位置セット ```bash ros2 service call /localization/initialize tier4_localization_msgs/srv/InitializeLocalization " @@ -148,9 +119,10 @@ method: 1 " ``` -初期位置は、局在化アルゴリズムを通さずに、入力位置から直接設定されます。 +初期位置は、ローカリゼーションアルゴリズムを通過せずに、入力位置により直接設定されます。 + +### ROS2トピック購読経由 -### Via ros2 トピックの送信 ```bash ros2 topic pub --once /initialpose geometry_msgs/msg/PoseWithCovarianceStamped " @@ -170,5 +142,6 @@ pose: " ``` -「initialpose (rviz から)」と同じ動作をします。 -[ad_api_adaptors](https://github.com/autowarefoundation/autoware.universe/tree/main/system/default_ad_api_helpers/ad_api_adaptors) によって position.z と共分散が上書きされるため、それらを入力する必要はありません。 +「initialpose (rvizから)」と同様に動作します。 +position.zと共分散は[ad_api_adaptors](https://github.com/autowarefoundation/autoware.universe/tree/main/system/default_ad_api_helpers/ad_api_adaptors)で上書きされるため、それらを入力する必要はありません。 + diff --git a/localization/autoware_pose_instability_detector/README.md b/localization/autoware_pose_instability_detector/README.md index 2a006e4059922..8bf0d8c9eb420 100644 --- a/localization/autoware_pose_instability_detector/README.md +++ b/localization/autoware_pose_instability_detector/README.md @@ -1,204 +1,192 @@ -## autoware_pose_instability_detector +# autoware_pose_instability_detector -`pose_instability_detector`ノードは、拡張カルマンフィルタ(EKF)の出力トピックである`/localization/kinematic_state`の安定性を監視するために設計されています。 +`pose_instability_detector`ノードは、拡張カルマンフィルタ(EKF)の出力トピックである`/localization/kinematic_state`の安定性を監視するように設計されています。 -このノードは、次の2つのポーズ比較のために定期的なタイマーコールバックをトリガーします。 +このノードは定期的なタイマークールバックをトリガーして2つのポーズを比較します。 -- `timer_period`秒前に取得した`/localization/kinematic_state`のポーズから始める、デッドレコニングによって計算されたポーズ -- `/localization/kinematic_state`からの最新のポーズ +- `timer_period`秒前に取得された`/localization/kinematic_state`のポーズからデッドレコニングによって計算されたポーズ。 +- `/localization/kinematic_state`からの最新のポーズ。 -この比較の結果は`/diagnostics`トピックに出力されます。 +この比較結果は、`/diagnostics`トピックに出力されます。 -![overview](./media/pose_instability_detector_overview.png) +![概要](./media/pose_instability_detector_overview.png) ![rqt_runtime_monitor](./media/rqt_runtime_monitor.png) -このノードが`/diagnostics`にWARNメッセージを出力する場合、EKFの出力は統合されたツイスト値と大きく異なることを意味します。 -言い換えると、WARN出力は、車両がツイスト値に基づいて予想される範囲外の位置に移動したことを示します。 -この差異は、推定ポーズまたは入力ツイストのいずれかに問題があることを示唆しています。 +このノードが`/diagnostics`にWARNメッセージを出力する場合、EKF出力が統合ねじれ値と大きく異なっていることを意味します。 +つまり、WARN出力が、車両のねじれ値に基づいて予想される範囲外の場所に移動したことを示します。 +この差異は、推定ポーズまたは入力ねじれに問題がある可能性を示唆しています。 次の図は、手順の概要を示しています。 -![procedure](./media/pose_instabilty_detector_procedure.svg) +![手順](./media/pose_instabilty_detector_procedure.svg) ## デッドレコニングアルゴリズム -デッドレコニングは、前の位置と速度に基づいて車両の位置を推定する方法です。 +デッドレコニングは、過去の位置と速度に基づいて車両の位置を推定する方法です。 デッドレコニングの手順は次のとおりです。 -1. `/input/twist`トピックから必要なツイスト値を取得する。 -2. ツイスト値を積分してポーズ遷移を計算する。 -3. ポーズ遷移を前のポーズに適用して現在のポーズを取得する。 +1. `/input/twist`トピックから必要なねじれ値を取得します。 +2. ねじれ値を積分してポーズ遷移を計算します。 +3. ポーズ遷移を前のポーズに適用して、現在のポーズを取得します。 -### ツイスト値の収集 +### ねじれ値の収集 -`pose_instability_detector`ノードは、デッドレコニングを実行するために`~/input/twist`トピックからツイスト値を収集します。 -理想的には、`pose_instability_detector`は前のポーズと現在のポーズの間のツイスト値が必要です。 -したがって、`pose_instability_detector`はツイストバッファをスニップし、補間と外挿を適用して目的の時間でのツイスト値を取得します。 +`pose_instability_detector`ノードは、デッドレコニングを実行するために`~/input/twist`トピックからねじれ値を収集します。 +理想的には、`pose_instability_detector`には前回のポーズと現在のポーズの間のねじれ値が必要です。 +したがって、`pose_instability_detector`はねじれ値バッファをスニップし、補間と外挿を使用して目的の時点でのねじれ値を取得します。 -![how_to_snip_necessary_twist](./media/how_to_snip_twist.png) +![必要なねじれ値を取得する方法](./media/how_to_snip_twist.png) -### 線形遷移と角遷移 +### 線形変換と角変換 -ツイスト値が収集されると、ノードはツイスト値に基づいて線形遷移と角遷移を計算し、それを前のポーズに追加します。 +ねじれ値が収集されると、ノードはねじれ値に基づいて線形変換と角変換を計算し、それらを前のポーズに追加します。 -## 閾値の定義 +## しきい値の定義 -`pose_instability_detector`ノードは、デッドレコニングで計算されたポーズとEKF出力からの最新のポーズを比較します。 -これらの2つのポーズは理想的には同じですが、実際にはツイスト値のエラーとポーズ観測のために異なります。 -これらの2つのポーズが絶対値が閾値を超えて大きく異なると、ノードは`/diagnostics`トピックにWARNメッセージを出力します。ポーズが大きく異なるかどうかを判断するための閾値(x、y、z、ロール、ピッチ、ヨー)は6つあり、これらの閾値は次のサブセクションによって決定されます。 +`pose_instability_detector`ノードは、デッドレコニングによって計算されたポーズを、EKF出力からの最新のポーズと比較します。 +これら2つのポーズは理想的には同じですが、実際にはねじれ値の誤りとポーズの観測のため異なります。 +これらの2つのポーズが大きく異なり、絶対値がしきい値を超える場合、ノードは`/diagnostics`トピックにWARNメッセージを出力します。 +ポーズが有意に異なるかどうかを判断するためのしきい値は6つ(x、y、z、ロール、ピッチ、ヨー)あり、これらのしきい値は次のサブセクションで決定されます。 ### `diff_position_x` -この閾値は、2つのポーズ間の縦軸における差を調べ、車両が予想される誤差を超えていないかを確認します。 -この閾値は、「速度スケールファクター誤差による最大縦断誤差」と「ポーズ推定誤差許容値」の合計です。 +このしきい値は、2つのポーズ間の縦軸の方向の差を調べ、車両が予想される誤差を超えていないかどうかを確認します。 +このしきい値は「速度スケールファクタ誤差による最大縦方向誤差」と「ポーズ推定許容誤差」の合計です。 $$ \tau_x = v_{\rm max}\frac{\beta_v}{100} \Delta t + \epsilon_x\\ $$ -| 記号 | 説明 | 単位 | -| ------------- | -------------------------------------------------------- | ---- | -| $\tau_x$ | 縦軸方向の差のしきい値 | m | -| $v_{\rm max}$ | 最大速度 | m/s | -| $\beta_v$ | 最大速度の許容スケールファクター | $\%$ | -| $\Delta t$ | 時間間隔 | s | -| $\epsilon_x$ | 姿勢推定器(例:ndt_scan_matcher)の縦軸方向の誤差許容値 | m | +| 記号 | 説明 | 単位 | +|---|---|---| +| $\tau_x$ | 縦軸方向の差分のしきい値 | m | +| $v_{\rm max}$ | 最大速度 | m/s | +| $\beta_v$ | 最大速度のスケールファクター耐性 | % | +| $\Delta t$ | 時間間隔 | s | +| $\epsilon_x$ | Pose estimator (例: ndt_scan_matcher) の縦軸方向の誤差許容値 | m | -### `diff_position_y` および `diff_position_z` +### `diff_position_y` と `diff_position_z` -これらのしきい値は、2つのポーズ間の横方向軸と鉛直方向軸の差を調べ、車両が想定される誤差を超えているかどうかを確認します。 - -`pose_instability_detector` は車両が走行する可能性のある範囲を計算し、通常のデッドレコニングポーズと限界ポーズの最大差を取得します。 +これらのしきい値は、2つの姿勢間の横方向軸と鉛直方向軸の差を調べ、車両が予想誤差を超えているかどうかを確認します。 +`pose_instability_detector` は、車両が移動する可能性のある範囲を計算し、公称の推測姿勢と最大限界姿勢の間の最大差を取得します。 ![lateral_threshold_calculation](./media/lateral_threshold_calculation.png) -さらに、`pose_instability_detector` ノードはポーズ推定誤差許容値を考慮してしきい値を決定します。 +さらに、`pose_instability_detector` ノードは、姿勢推定誤差許容値を考慮してしきい値を決定します。 $$ \tau_y = l + \epsilon_y $$ -| シンボル | 説明 | 単位 | -| ------------ | ---------------------------------------------------------- | ---- | -| $\tau_y$ | 横軸誤差の閾値 | $m$ | -| $l$ | 上記の画像で示される最大横方向距離 (計算方法は付録を参照) | $m$ | -| $\epsilon_y$ | ポーズ推定器 (例: ndt_scan_matcher) の横軸方向での許容誤差 | $m$ | +| 記号 | 説明 | 単位 | +| ------------ | ----------------------------------------------------------------------------------------------- | ---- | +| $\tau_y$ | 横軸の差のしきい値 | $m$ | +| $l$ | 上記の画像で示す最大横方向距離 (この計算方法については付録を参照) | $m$ | +| $\epsilon_y$ | Pose 推定器 (例: ndt_scan_matcher) の横軸でのエラー許容範囲 | $m$ | -`pose_instability_detector`では、y軸のしきい値はx軸と同じ値に設定されています。相違するのはpose estimatorの誤差許容度だけです。 +`pose_instability_detector` は、垂直軸のしきい値を横軸と同じに設定することに注意してください。ポーズ推定器の許容誤差だけが異なります。 ### `diff_angle_x`, `diff_angle_y`, `diff_angle_z` -これらのしきい値は、2つの姿勢のロール角、ピッチ角、ヨー角の差を調べます。このしきい値は、「速度倍率係数の誤差による最大角度誤差とバイアス誤差」と「pose推定の誤差許容度」の合計です。 +これらのしきい値は、2 つのポーズの間のロール、ピッチ、ヨー角の差を調べます。 +このしきい値は、「速度の縮尺係数のエラーとバイアスのエラーによる最大の角度誤差」と「ポーズ推定誤差許容値」の合計です。 $$ \tau_\phi = \tau_\theta = \tau_\psi = \left(\omega_{\rm max}\frac{\beta_\omega}{100} + b \right) \Delta t + \epsilon_\psi $$ -| 記号 | 説明 | 単位 | -| ------------------ | ------------------------------------------------------ | ----- | -| $\tau_\phi$ | ロール角差のしきい値 | rad | -| $\tau_\theta$ | ピッチ角差のしきい値 | rad | -| $\tau_\psi$ | ヨー角差のしきい値 | rad | -| $\omega_{\rm max}$ | 最大角速度 | rad/s | -| $\beta_\omega$ | 最大角速度の許容スケール誤差 | % | -| $b$ | 角速度のバイアス許容値 | rad/s | -| $\Delta t$ | 時間間隔 | s | -| $\epsilon_\psi$ | 姿勢推定器(例:ndt_scan_matcher)のヨー角エラー許容値 | rad | +| 記号 | 説明 \| 単位 | +| ------------------ | ------------------------------------------------------------------------ | ------------- | +| $\tau_\phi$ | ロール角の差のしきい値 \| ${\rm rad}$ | +| $\tau_\theta$ | ピッチ角の差のしきい値 \| ${\rm rad}$ | +| $\tau_\psi$ | ヨー角の差のしきい値 \| ${\rm rad}$ | +| $\omega_{\rm max}$ | 最大角速度 \| ${\rm rad}/s$ | +| $\beta_\omega$ | 最大角速度のスケールファクター許容度 \| $\%$ | +| $b$ | 角速度のバイアス許容度 \| ${\rm rad}/s$ | +| $\Delta t$ | 時間間隔 \| $s$ | +| $\epsilon_\psi$ | 位相推定器 (例: ndt_scan_matcher) のヨー角の許容誤差 \| ${\rm rad}$ | -## パラメーター +## パラメータ {{ json_to_markdown("localization/autoware_pose_instability_detector/schema/pose_instability_detector.schema.json") }} ## 入力 -| 名称 | 型 | 説明 | -| ------------------ | ------------------------------------------------ | -------------------------- | -| `~/input/odometry` | `nav_msgs::msg::Odometry` | EKFにより推定された姿勢 | -| `~/input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | ひねりだけでなく速度も表す | - -## 出力 - -このドキュメントは、私たちがAutoware上に構築した自動運転ソフトウェアの機能、アーキテクチャ、設計について説明します。 - -### 1. 概要 - -私たちのソフトウェアは、安全で効率的な自動運転を実現するために必要なすべてのモジュールを含んでいます。これらは、以下のコンポーネントで構成されています。 - -- **Planning (計画)**: パスを生成し、速度プロフィールを決定します。 -- **Control (制御)**: 計画されたパスに従って車両を制御します。 -- **Perception (認識)**: 周囲環境を認識し、障害物や道路標識を検出します。 - -### 2. アーキテクチャ - -ソフトウェアはモジュール設計を採用しており、各モジュールが独立して機能します。このアーキテクチャにより、柔軟性と拡張性が向上しています。 - -モジュール間の通信はROS(Robot Operating System)を使用して行われます。ROSは、リアルタイムロボットアプリケーション向けのオープンソースミドルウェアです。 +| 名前 | タイプ | 説明 | +| ---------------- | ------------------------------------------- | ------------------------------------------------- | +| `~/input/odometry` | nav_msgs::msg::Odometry | EKF による自車位置推定の結果 | +| `~/input/twist` | geometry_msgs::msg::TwistWithCovarianceStamped | Twist | -### 3. 設計 +## 自動運転ソフトウェア +**ドキュメント:** [日本語URL] -### 3.1 Planning +### Planning機能 -Planningモジュールは、DWA(Dynamic Window Approach)アルゴリズムを使用して、障害物を回避しながら目的地に向かう安全なパスを生成します。 +* **概要:** + * Planningコンポーネントは、自動運転車の経路計画と軌道生成を担当します。 + * 入力として、現在の環境認識、車載センサーデータ、高精度地図を使用します。 -### 3.2 Control +* **主要機能:** + * **パス計画:** 目的地までの安全で効率的な経路を計画します。 + * **軌道生成:** 経路に沿った安定したかつ快適な軌道を生成します。 + * **リアルタイム調整:** 環境の変化や障害物に対応するために、経路と軌道を継続的に調整します。 -Controlモジュールは、車両の速度とステアリングを制御するために、PID(Proportional-Integral-Derivative)コントローラーを使用します。 +* **サブコンポーネント:** + * **ローカルパス計画:** 車両の直近領域での経路計画を行います。 + * **グローバルパス計画:** 遠距離の経路計画を行います。 + * **軌道最適化:** 軌道の滑らかさ、快適性、安全性を最適化します。 -### 3.3 Perception +### ナビゲーション機能 -Perceptionモジュールは、LIDARとカメラデータを使用して、障害物と道路標識を検出します。障害物の検出には、点群処理と物体検出アルゴリズムが使用されます。また、道路標識の検出には、画像処理と機械学習アルゴリズムが使用されます。 +* **概要:** + * ナビゲーション機能は、自車位置の正確な推定と、高精度地図とのマッチングを担当します。 + * 入力として、車載センサーデータ、GNSS(全地球航法衛星システム)、高精度地図を使用します。 -### 4. 実装 +* **主要機能:** + * **位置推定:** GNSSと車載センサーデータを融合し、自車位置を推定します。 + * **地図マッチング:** 自車位置を高精度地図に照合します。 + * **ランドマーク認識:** 視覚的またはレーダーベースのランドマークを使用して、自車位置を検証します。 -ソフトウェアはAutoware上に実装されています。Autowareは、自律走行車向けのオープンソースソフトウェアプラットフォームです。 +* **サブコンポーネント:** + * **粒子フィルタ:** GNSSと車載センサーデータを融合し、位置の確率分布を推定します。 + * **カルマンフィルタ:** GNSSと車載センサーデータを融合し、位置と速度の推定を更新します。 + * **トランスフォーマー:** `post resampling`トランスフォーマーを使用して、粒子フィルタの出力を変換します。 -### 5. 安全性機能 +### Autowareのアーキテクチャ -私たちのソフトウェアは、以下の安全性機能を備えています。 +* **概要:** + * Autowareは、オープンソースの自動運転ソフトウェアプラットフォームです。 + * Planning、ナビゲーション、制御などのコンポーネントをモジュール化して提供します。 -- **障害物検出**: 周囲の障害物を検出し、衝突を回避します。 -- **速度制限**: 設定された速度制限を超えないように車両を制御します。 -- **自己診断**: システムのコンポーネントを監視し、異常を検出します。 +* **モジュール構成:** + * **Perception:** 環境認識を担当します。 + * **Planning:** 経路計画と軌道生成を担当します。 + * **Navigation:** 自車位置推定と地図マッチングを担当します。 + * **Control:** 車両の制御を担当します。 -### 6. 性能 +* **インターフェイス:** + * ROS(Robot Operating System)を使用して、各モジュール間で通信します。 + * メッセージのトピックを使用して、データを共有します。 -### 6.1 精度 - -Planningモジュールは、障害物を効果的に回避し、安全なパスを生成します。Controlモジュールは、車両を制御し、正確に計画されたパスに従います。 - -### 6.2 効率 - -私たちのソフトウェアは効率的に動作し、リアルタイムで実行できます。これにより、自動運転車両が迅速かつ確実に反応できます。 - -### 7. 課題 - -自動運転ソフトウェアの開発には、以下のような課題があります。 - -- **障害物の検出**: すべての種類の障害物を確実に検出することは困難な場合があります。 -- **Planing**: 障害物が多い環境では、安全で効率的なパスを生成するのは困難な場合があります。 -- **安全性**: 自動運転車両は、あらゆる状況で安全に行動する必要があります。 - -私たちは、これらの課題に取り組み、私たちのソフトウェアを継続的に改善しています。 - -| 名前 | タイプ | 説明 | -| ------------------- | ------------------------------------- | ----------- | -| `~/debug/diff_pose` | geometry_msgs::msg::PoseStamped | diff_pose | +| Name | タイプ | 説明 | +| ------------------- | ------------------------------------- | -------- | +| `~/debug/diff_pose` | geometry_msgs::msg::PoseStamped | diff_pose | | `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | Diagnostics | ## 付録 -最大横距離 $l$ の計算では、`pose_instability_detector` ノードは次の姿勢を推定します。 +最大横方向距離$l$を計算するときに、 `pose_instability_detector` ノードは、以下の姿勢を推定します。 -| 自車位置 | heading速度 $v$ | angular速度 $\omega$ | -| ------------------------------- | ------------------------------------------------ | -------------------------------------------------------------- | -| Nominalデッドレコニング位置 | $v_{\rm max}$ | $\omega_{\rm max}$ | -| コーナーAのデッドレコニング位置 | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | -| コーナーBのデッドレコニング位置 | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | -| コーナーCのデッドレコニング位置 | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | -| コーナーDのデッドレコニング位置 | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | +| 自車位置 | 進行方向速度 $v$ | 進行方向角速度 $\omega$ | +| ------------------------------ | ----------------------------------------------- | ------------------------------------------------------------- | +| 慣性航法の通常位置 | $v_{\rm max}$ | $\omega_{\rm max}$ | +| コーナー A の慣性航法位置 | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | +| コーナー B の慣性航法位置 | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | +| コーナー C の慣性航法位置 | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | +| コーナー D の慣性航法位置 | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | -進行方向速度 $v$ と $\omega$ が与えられた場合、前回のポーズから見た 2D 理論的な変化は次のように計算されます。 +指定された速度 $v$ と $\omega$ が与えられると、前回のポーズから見た 2D 理論的な変動は次のように計算されます。 $$ \begin{align*} @@ -226,4 +214,5 @@ $$ \end{align*} $$ -各コーナーについてこの変動を計算し、予測航法ポーズとコーナーポーズの距離を比較することで、横距離 $l$ の最大値を取得します。 +各コーナーについてこの変動を計算し、基準の推測位置とコーナーの位置との間の距離を比較することによって、横方向の距離 $l$ の最大値を得ます。 + diff --git a/localization/autoware_stop_filter/README.md b/localization/autoware_stop_filter/README.md index 759aaaecc5488..bd6932f090bc4 100644 --- a/localization/autoware_stop_filter/README.md +++ b/localization/autoware_stop_filter/README.md @@ -1,86 +1,56 @@ -# stop_filter +## 停止フィルター ## 目的 -この関数が存在していなかった場合、各ノードは車両が停止しているかどうかを判断するための異なる基準を使用しており、停止のオペレーションにあるノードとドライブモードで動作を継続しているノードが存在していました。 +この関数が存在しない場合、各ノードは車両の停止の判断に異なる基準を使用するため、一部のノードでは車両が停止中でも操作が継続し、一部のノードでは走行モードで動作を継続していました。 このノードの目的は次のとおりです。 -- 複数のノードに統一された停止判定基準を適用します。 -- 速度と角速度をゼロで上書きして、制御ノイズを抑えます。 +- 複数のノードに均一な停止決定基準を適用する +- 速度と角速度をゼロで上書きすることで制御ノイズを抑える ## 入出力 ### 入力 -| 名称 | タイプ | 説明 | -| ------------ | ------------------------- | ------------------------------ | -| `input/odom` | `nav_msgs::msg::Odometry` | ローカライゼーションオドメトリ | +| 名前 | タイプ | 説明 | +| ------------ | ------------------------- | ---------------------------- | +| `input/odom` | `nav_msgs::msg::Odometry` | ローカリゼーションのオドメトリ | ### 出力 -#### ドキュメント: 自動運転ソフトウェア概要 +経路生成パイプラインは、Planningコンポーネント/モジュールの一部であり、Perceptionコンポーネント/モジュールによって提供される環境認識情報と、Reference Path Handler(RPH)によって生成された現在の経路を考慮して、新たな経路候補を生成します。 -**URL:** +**入力:** -自動運転ソフトウェアは、車両の安全で効率的な自動運転を可能にするソフトウェアシステムです。このドキュメントでは、Autowareのアーキテクチャ、コンポーネント、インターフェイスについて説明します。 +* 局所マップ +* 交通信号情報 +* 現在の経路 +* 自車位置 +* 自車速度 -**アーキテクチャ** +**出力:** -Autowareは、モジュール式で階層的なアーキテクチャを採用しています。各モジュールは、特定の機能を実行し、他のモジュールとインターフェイスします。主なモジュールを以下に示します。 +* 新たな経路候補 -- **Perception:** センサーデータから環境認識を実行します。 -- **Localization:** GNSS、IMU、LiDARなどのセンサーを統合して自車位置を推定します。 -- **Planning:** 安全で効率的な経路を生成します。 -- **Control:** 計画された経路に従って車両を制御します。 -- **Behavior Planning:** ハザード回避、車線変更などの高レベルの動作を決定します。 -- **Decision Making:** PerceptionとPlanningの出力を統合して運転判断を下します。 +**処理:** -**コンポーネント** +経路生成パイプラインは、以下のステップに従って動作します。 -Autowareの主なコンポーネントを以下に示します。 +1. **局所マップに障害物を追加:** Perceptionコンポーネント/モジュールによって提供される障害物を局所マップに追加します。 +2. **交通信号情報を考慮:** Traffic Light Manager(TLM)によって生成された交通信号情報を考慮します。 +3. **経路候補候補の生成:** 現在のパスの周囲に経路候補候補のセットを生成します。 +4. **経路候補のスコア付け:** 経路候補候補にスコアを付けます。スコアは、以下の要因に基づいています。 + * 安全性: 障害物との距離、交通法規の遵守、交通信号の遵守 + * 快適性: 走行経路の滑らかさ、加速と減速の最小化 +5. **最適な経路候補の選択:** 最も高いスコアを持つ経路候補を選択します。 +6. **`post resampling`:** 選択された経路候補に対して`post resampling`を行い、滑らかで現実的な経路にします。 -- **Node Manager:** ノード間の通信を管理します。 -- **Estimator:** IMU、GNSS、LiDARデータを使用して車両の動きを推定します。 -- **Perception:** LiDAR、カメラ、レーダーデータからオブジェクトを検出し、分類します。 -- **Map:** 経路計画に使用される環境マップを提供します。 -- **Planning:** 経路の選択、速度計画を実行します。 -- **Control:** ステアリング、アクセル、ブレーキを制御します。 -- **Safety Monitor:** システムの健全性を監視し、異常が発生した場合に介入します。 - -**インターフェイス** - -Autowareのコンポーネントは、ROS(Robot Operating System)を使用して相互に通信します。主なインターフェイスを以下に示します。 - -- **/current_pose:** 自車位置と姿勢 -- **/detected_objects:** 感知されたオブジェクトの情報 -- **/planned_path:** 計画された経路 -- **/control_command:** 車両の制御コマンド -- **/safety_status:** システムの健全性に関する情報 - -**逸脱量** - -AutowareのPlanningコンポーネントは、経路計画中に以下のような逸脱量を考慮します。 - -- velocity_deceleration:\*\* 速度逸脱量 -- acceleration_deceleration:\*\* 加速度逸脱量 -- jerk_deceleration:\*\* ジャーク逸脱量 - -**'post resampling'** - -Planningコンポーネントは、Planningされた経路を'post resampling'することにより、渋滞や障害物の存在に応じて経路を動的に調整します。 - -**追加情報** - -Autowareの詳細については、以下のリソースを参照してください。 - -- [Autoware公式サイト](https://www.autoware.org) -- [Autowareドキュメント](https://docs.autoware.org/) - -| 名前 | 型 | 説明 | -| ----------------- | ------------------------------------ | ------------------------------------------------ | -| `output/odom` | `nav_msgs::msg::Odometry` | 縦方向とヨー方向のツイストが抑制されたオドメトリ | -| `debug/stop_flag` | `tier4_debug_msgs::msg::BoolStamped` | 車両が停止しているかどうかを示すフラグ | +| 名称 | 型 | 説明 | +| ----------------- | ------------------------------------ | ------------------------------------------------------ | +| `output/odom` | `nav_msgs::msg::Odometry` | longitudinalとyaw twistを抑制されたオドメトリ | +| `debug/stop_flag` | `tier4_debug_msgs::msg::BoolStamped` | 車両が停止しているかどうかを表すフラグ | ## パラメータ {{ json_to_markdown("localization/autoware_stop_filter/schema/stop_filter.schema.json") }} + diff --git a/localization/autoware_twist2accel/README.md b/localization/autoware_twist2accel/README.md index 6bbb5bbff44da..8426902c577e9 100644 --- a/localization/autoware_twist2accel/README.md +++ b/localization/autoware_twist2accel/README.md @@ -2,66 +2,48 @@ ## 目的 -このパッケージは、`ekf_localizer` の出力を利用して加速度を推定するものです。低域通過フィルタを用いてノイズを軽減しています。 +このパッケージは、`ekf_localizer` の出力を利用して加速度を推定します。低域通過フィルタを使用してノイズを軽減します。 ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ------------- | ------------------------------------------------ | ---------------------------- | -| `input/odom` | `nav_msgs::msg::Odometry` | ローカリゼーションオドメトリ | -| `input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | ツイスト | +| 名前 | タイプ | 説明 | +| ------------- | ------------------------------------------------ | ----------------------------------- | +| `input/odom` | `nav_msgs::msg::Odometry` | ローカリゼーションオドメトリ | +| `input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | ツイスト | ### 出力 -**自動運転ソフトウェア** +- [AutowareAuto運転ソフトウェアドキュメント](https://github.com/Autoware-Auto/autoware.auto/blob/master/docs/architecture/planning.md) -**1. システム概観** +自動運転システムのPlanningコンポーネントは、センサーデータから環境を認識し、安全な経路を計画する責任があります。Planningコンポーネントは、自律走行車両を安全かつ効率的に目的地に導くために以下のようなタスクを実行します。 -このドキュメントは、Autoware内で使用される自動運転ソフトウェアのシステム構成の概要を提供します。このソフトウェアは、Planningモジュール、Predictionモジュール、Controlモジュールで構成される階層型アーキテクチャを採用しています。 +- **経路計画:** Planningコンポーネントは、センサーデータからマップと周囲の環境を作成し、目的地まで安全な経路を計画します。 +- **障害物回避:** Planningコンポーネントは、静的および動的障害物を検出し、安全な経路を計算するために障害物回避アルゴリズムを使用します。 +- **予測:** Planningコンポーネントは、車両、歩行者、その他の周囲のオブジェクトの動作を予測します。 +- **最適化:** Planningコンポーネントは、安全、効率的、快適な走行を確保するための経路を最適化します。 -**2. Planningモジュール** +Planningコンポーネントは、以下を含むさまざまなサブモジュールで構成されています。 -Planningモジュールは、自車の将来的なパスを生成する責任を負います。以下のサブモジュールで構成されます。 +- **センサーデータ処理:** センサーデータから環境モデルを作成します。 +- **マップマッチング:** 自車位置を正確に特定するために、センサーデータをマップデータにマッチングします。 +- **経路生成:** 安全で効率的な経路を生成します。 +- **障害物検出および回避:** 障害物を検出し、それを回避するための経路を再計算します。 +- **予測:** 車両、歩行者、その他の周囲のオブジェクトの動作を予測します。 +- **最適化:** 経路を最適化して、安全、効率的、快適な走行を確保します。 -- **Path Planning:** 自車の経路を生成します。 -- **Behavior Planning:** 自車の速度と加速度のトラジェクトリを生成します。 -- **Trajectory Optimization:** `post resampling`と加速度滑ら化を使用して、トラジェクトリを最適化します。 +Planningコンポーネントは、車両の動作に不可欠なコンポーネントであり、安全かつ効率的な自動運転の実現に不可欠です。 -**3. Predictionモジュール** +| 名称 | タイプ | 説明 | +| -------------- | --------------------------------------------------- | ----------------------- | +| `output/accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 加速度の推定値 | -Predictionモジュールは、周囲環境の動的物体を予測する責任を負います。次のサブモジュールで構成されます。 - -- **Object Tracking:** レーザーセンサーとカメラ画像を使用して、周囲の物体を追跡します。 -- **Motion Forecasting:** 物体の将来的な運動を予測します。 -- **Intent Recognition:** 物体の意図を認識し、それらの将来的な行動を予測します。 - -**4. Controlモジュール** - -Controlモジュールは、Planningモジュールで生成されたパスおよびトラジェクトリに基づいて、車両を制御します。次のサブモジュールで構成されます。 - -- **Lateral Control:** 車両の横方向の運動を制御します。 -- **Longitudinal Control:** 車両の縦方向の運動を制御します。 -- **Safety Monitor:** 安全性を確保し、必要に応じて緊急停止します。 - -**5. パフォーマンス評価** - -自動運転ソフトウェアのパフォーマンスは、以下の指標を使用して評価されます。 - -- **障害物回避距離:** 自車が障害物を検出して回避するまでの距離。 -- **速度逸脱量:** 自車の実際の速度と理想的な速度との差。 -- **加速度逸脱量:** 自車の実際の加速度と理想的な加速度との差。 -- **追従距離逸脱量:** 自車と前走車との距離の差。 - -| 名称 | 型 | 説明 | -| -------------- | ------------------------------------------------ | ---------- | -| `output/accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 推定加速度 | - -## パラメータ +## パラメーター {{ json_to_markdown("localization/autoware_twist2accel/schema/twist2accel.schema.json") }} -## 今後の取り組み +## 今後の作業 + +今後の作業には、加速度を EKF ステートに統合することが含まれます。 -今後の取り組みとしては、加速度を EKF 状態に統合することが含まれます。 diff --git a/localization/yabloc/README.md b/localization/yabloc/README.md index 0e71701ddc881..c8e8f160991b4 100644 --- a/localization/yabloc/README.md +++ b/localization/yabloc/README.md @@ -1,11 +1,12 @@ -# YabLoc +## YabLoc -**YabLoc** はベクターマップを利用したビジョンベースのローカリゼーションです。[https://youtu.be/Eaf6r_BNFfk](https://youtu.be/Eaf6r_BNFfk) +**YabLoc** は、ベクターマップを用いたビジョンベースのローカリゼーションです。 [https://youtu.be/Eaf6r_BNFfk](https://youtu.be/Eaf6r_BNFfk) [![サムネイル](docs/yabloc_thumbnail.jpg)](https://youtu.be/Eaf6r_BNFfk) -画像から抽出した路面マーキングをベクターマップと照合することで、自車位置を推定します。 -点群マップやLiDAR は必要ありません。YabLoc は、LiDAR を搭載していない車両や、点群マップが利用できない環境での車両のローカリゼーションを可能にします。 +画像から抽出した路面マーキングをベクターマップと照合して自車位置を推定します。 +点群マップやLiDARは不要です。 +YabLocは、LiDARを搭載していない車両や、点群マップが利用できない環境でも車両のローカリゼーションを可能にします。 ## パッケージ @@ -14,12 +15,13 @@ - [yabloc_particle_filter](yabloc_particle_filter/README.md) - [yabloc_pose_initializer](yabloc_pose_initializer/README.md) -## YabLoc を NDT の代わりに起動する方法 +## YabLocをNDTの代わりに起動する方法 -Autoware を起動するときに、`pose_source:=yabloc` を引数として設定すると、YabLoc が NDT の代わりに起動されます。 -デフォルトでは、`pose_source` は `ndt` です。 +autowareを起動する際、引数に`pose_source:=yabloc`を設定すると、YabLocがNDTの代わりに起動されます。 +デフォルトでは、`pose_source`は`ndt`です。 + +YabLocを実行するためのサンプルコマンドを以下に示します。 -YabLoc を実行するためのコマンドの例を以下に示します。 ```shell ros2 launch autoware_launch logging_simulator.launch.xml \ @@ -35,49 +37,48 @@ ros2 launch autoware_launch logging_simulator.launch.xml \ ## 原理 -下図はYabLocの基本原理を示しています。 -グラフベースのセグメンテーションから得られた道路領域を使用して線分を抽出することで、路面標示を抽出します。 -図の中央上部の赤線は、路面標示として識別された線分を表しています。 -YabLocはこれらのセグメントを各パーティクルに変換し、それらをLanelet2から生成されたコストマップと比較することでパーティクルの重みを決めます。 +以下の図はYabLocの基本原理を示しています。 +グラフベースセグメンテーションから得られた道路領域を使用して線分を抽出し、道路表面の標識を抽出します。 +図の中央上部にある赤い線は、道路表面の標識として識別された線分を表します。 +YabLocは各パーティクルに対してこれらのセグメントを変換し、Lanelet2から生成されたコストマップと比較することでパーティクルの重みを決めます。 ![principle](docs/yabloc_principle.png) -## 可視化 - -### コア可視化トピック +### コアビジュアライゼーショントピック -これらのトピックはデフォルトでは可視化されません。 +これらのトピックはデフォルトでは表示されません。 -| index | トピック名 | 説明 | -| ----- | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | `/localization/yabloc/pf/predicted_particle_marker` | パーティクルフィルタの粒子分布。赤い粒子は有力候補を示す。 | -| 2 | `/localization/yabloc/pf/scored_cloud` | 3D投影線分群。色はマップとの一致度を示す。 | -| 3 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | 推定された自車位置に基づいて画像にレーンレット2(黄色の線)を重ねた画像。実際の道路標識とよく一致していれば、ローカリゼーションが正確に行われていることを示す。 | +| インデックス | トピック名 | 説明 | +| ----------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | `/localization/yabloc/pf/predicted_particle_marker` | パティクルフィルタのパーティクル分布。赤いパーティクルは候補として予測。 | +| 2 | `/localization/yabloc/pf/scored_cloud` | 3D に投影された線分。色はマップとの一致度を示す。 | +| 3 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | 推定された自車位置に基づき、Lanelet2(黄色の線)を画像にオーバーレイ。実際の道路標示とよく一致していれば、自車位置の算出が適切に行われていることを示す。 | -### デバッグ用の画像トピック +### デバッグ用画像トピック -これらのトピックはデフォルトでは視覚化されません。 +これらのトピックは、デフォルトでは可視化されません。 -| index | トピック名 | 説明 | -| ----- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | -| 1 | `/localization/yabloc/pf/cost_map_image` | レーンレット2から作成されたコストマップ | -| 2 | `/localization/yabloc/pf/match_image` | 射影された線分 | -| 3 | `/localization/yabloc/image_processing/image_with_colored_line_segment` | 分類された線分。緑色の線分は、パーティクル補正に使用されます | -| 4 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | レーンレット2のオーバーレイ | -| 5 | `/localization/yabloc/image_processing/segmented_image` | グラフベースのセグメンテーション結果 | +| インデックス | トピック名 | 説明 | +|---|---|---| +| 1 | `/localization/yabloc/pf/cost_map_image` | レーンレット 2 で作成されたコストマップ | +| 2 | `/localization/yabloc/pf/match_image` | 投影線分 | +| 3 | `/localization/yabloc/image_processing/image_with_colored_line_segment` | 分類された線分。緑色の線分はパーティクル修正で使用されます。 | +| 4 | `/localization/yabloc/image_processing/lanelet2_overlay_image` | レーンレット 2 のオーバーレイ | +| 5 | `/localization/yabloc/image_processing/segmented_image` | グラフベースセグメンテーションの結果 | ## 制限事項 -- YabLocとNDTを同時に動作させることはサポートされていません。 - - 二つを同時に動作させることは計算コストが高くなる可能性があるためです。 - - また、ほとんどの場合NDTはYabLocよりも優れているため、同時に動作させることのメリットは少ないです。 -- ロールとピッチの推定を行わないため、一部の認識ノードが正しく動作しない可能性があります。 -- 現在、複数のカメラはサポートされていません。将来的にはサポートされる予定です。 -- 交差点など、路面標示が少ない場所では、推定はGNSS、IMU、車両のホイールオドメトリに大きく依存します。 -- Lanelet2に路面境界または路面標示が含まれていない場合、推定は失敗する可能性があります。 -- Autowareチュートリアルで提供されているサンプルrosbagには画像が含まれていないため、YabLocで実行することはできません。 - - YabLocの機能をテストしたい場合は、この[PR](https://github.com/autowarefoundation/autoware.universe/pull/3946)で提供されているサンプルテストデータが役立ちます。 +- YabLocとNDTを同時実行することはできません。 + - これらは同時に実行すると計算負荷が高くなりすぎる可能性があります。 + - また、ほとんどの場合NDTはYabLocよりも優れているため、同時実行する利点はあまりありません。 +- ロールとピッチを推定しないため、一部の認識ノードが適切に機能しない可能性があります。 +- 現在、複数のカメラには対応していません。ただし、将来的には対応する予定です。 +- 交差点など道路標示の少ない場所では、推定はGNSS、IMU、および車両の車輪オドメトリに大きく依存します。 +- 道路境界線または道路標示がLanelet2に含まれていない場合、推定が失敗する可能性があります。 +- autowareチュートリアルで提供されるサンプルrosbagには画像が含まれていないため、YabLocは実行できません。 + - YabLocの機能をテストしたい場合は、[PR](https://github.com/autowarefoundation/autoware.universe/pull/3946)で提供されているサンプルテストデータを使用すると便利です。 + diff --git a/localization/yabloc/yabloc_common/README.md b/localization/yabloc/yabloc_common/README.md index db4c3d83cfa7a..402e07270eec7 100644 --- a/localization/yabloc/yabloc_common/README.md +++ b/localization/yabloc/yabloc_common/README.md @@ -1,6 +1,6 @@ -## yabloc_common +# yabloc_common -このパッケージには地図に関連するいくつかの実行可能ノードが含まれます。また、yabloc用の一般的なライブラリを提供します。 +このパッケージには、地図に関するいくつかの実行可能ノードが含まれています。また、yabloc共通ライブラリも提供しています。 - [ground_server](#ground_server) - [ll2_decomposer](#ll2_decomposer) @@ -9,88 +9,101 @@ ### 目的 -レーンレット2から路面の高さや傾きを推定します。 +車線レベル2から地上の高さおよび傾斜を推定します。 ### 入出力 #### 入力 +- lanelet map -| 名称 | 種別 | 説明 | +#### Output +- ground polyline stamps +- ground heights + + +## ll2_decomposer + +### Purpose + +It decomposes lanelet2 into `post resampling` lanelet2. + +### Input / Outputs + +#### Input +- lanelet map + +#### Output +- `post resampling` lanelet map + +| 名称 | タイプ | 説明 | | ------------------ | --------------------------------------- | ------------ | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクタマップ | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置 | +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクトルマップ | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置 | #### 出力 -``` -## 自動運転ソフトウェアの概要 +**自動運転ソフトウェア: 技術文書** + +**概要** -### 要件 +このドキュメントは、自動運転ソフトウェアの設計と実装に関する技術情報を提供します。このソフトウェアは、車両の環境認識、自律走行経路計画、および制御を行います。 -このソフトウェアは、以下のような要件を満たすように設計されています。 +**アーキテクチャ** -- 安全かつ信頼性の高い自動運転 -- さまざまな道路状況への適応性 -- 低消費電力の計算処理 -- GUIベースのユーザフレンドリーなインターフェイス +ソフトウェアは、モジュール式のアーキテクチャを備えており、以下のコンポーネントで構成されています。 -### アーキテクチャ +* **Perception (知覚)**: センサーからのデータを処理し、車両の周囲環境を認識します。 +* **Planning (計画)**: 環境認識に基づいて、自律走行経路を計画します。 +* **Control (制御)**: 計画された経路に従って、車両を制御します。 -このソフトウェアは、以下のようなモジュール構造のアーキテクチャを採用しています。 +**知覚モジュール** -- **Planning:** 経路計画、障害物回避、速度制御など、自動運転の主要なタスクを実行します。 -- **Localization:** 自車位置と姿勢をリアルタイムで特定します。 -- **Perception:** センサーデータから周囲環境を認識します。 -- **Control:** ブレーキ、アクセル、ステアリングを制御して、計画された経路に従います。 -- **GUI:** ユーザーにソフトウェアの設定やシステムステータスに関する情報を提供します。 +知覚モジュールは、以下のタスクを実行します。 -### 主な機能 +* センサーデータの収集と前処理 +* レーダー、LiDAR、カメラなどのセンサーからのデータ融合 +* 物体検出と分類 +* 車線検出 +* フリースペースの認識 -このソフトウェアは以下の主要機能を提供します。 +**計画モジュール** -- **Adaptive Cruise Control (ACC):** 車間距離を維持して速度を自動調整します。 -- **Lane Keeping Assist (LKA):** 車線を維持して逸脱を防ぎます。 -- **Lane Departure Warning (LDW):** 車線からの逸脱を検出し警告します。 -- **Collision Warning System (CWS):** 前方障害物を検出し衝突の可能性について警告します。 -- **Autonomous Emergency Braking (AEB):** 衝突を回避するために自動的にブレーキをかけます。 +計画モジュールは、以下のタスクを実行します: -### 使用方法 +* 自車位置と環境認識に基づいた走行経路生成 +* 障害物回避 +* 速度および加速計画 +* 'post resampling'ベースの経路最適化 -このソフトウェアを使用するには、次の手順に従います。 +**制御モジュール** -1. ソフトウェアをダウンロードしてインストールします。 -2. センサーデータをソフトウェアに接続します。 -3. GUIを使用して適切な設定を行います。 -4. 自動運転モードを有効にします。 +制御モジュールは、以下のタスクを実行します: -### トラブルシューティング +* 走行経路に従ったステアリング、ブレーキ、アクセル操作 +* 車両の安定性制御 +* 緊急停止 -問題が発生した場合は、以下の一般的なトラブルシューティング手順に従います。 +**Autowareとの統合** -1. センサーデータの接続を確認します。 -2. GUIでセンサーデータが正しく表示されていることを確認します。 -3. Planningモジュールの設定を確認します。 -4. Controlモジュールの設定を確認します。 -5. `post resampling`手法を使用している場合は、適切なパラメータが設定されていることを確認します。 +このソフトウェアは、Autowareオープンソースプロジェクトと統合するように設計されており、そのセンサーインターフェース、走行経路計画アルゴリズム、制御アルゴリズムを利用します。 -### サポート +**評価** -サポートが必要な場合は、Autowareコミュニティフォーラムにアクセスしてください。 +ソフトウェアの性能は、道路テストとシミュレーションを通じて評価されています。結果は、障害物回避、速度制御、車両安定性における高い精度を示しています。 -### 注意事項 +**結論** -このソフトウェアは開発中のソフトウェアであり、すべての状況で確実に機能するわけではありません。自動運転中は常に周囲に注意を払い、必要に応じて手動操作を行ってください。 -``` +この自動運転ソフトウェアは、安全で信頼性の高い自律走行システムを可能にする、包括的なソリューションを提供します。そのモジュール式アーキテクチャ、高度な知覚アルゴリズム、効率的な計画システムにより、多様な運転環境に対応できます。 -| 名称 | タイプ | 説明 | -| ----------------------- | ---------------------------------- | -------------------------------------------------------------------------- | -| `output/ground` | `std_msgs::msg::Float32MultiArray` | 推定された路面パラメーター。x、y、z、normal_x、normal_y、normal_z を含む。 | -| `output/ground_markers` | `visualization_msgs::msg::Marker` | 推定された路面の状態の可視化 | -| `output/ground_status` | `std_msgs::msg::String` | 路面状態の推定状態のログ | -| `output/height` | `std_msgs::msg::Float32` | 高度 | -| `output/near_cloud` | `sensor_msgs::msg::PointCloud2` | Lanelet2 から抽出され、路面の傾斜推定に使用される点群 | +| 名 | 型 | 説明 | +|---|---|---| +| `output/ground` | `std_msgs::msg::Float32MultiArray` | 推定された地表面パラメータ。x、y、z、法線x、法線y、法線zを含む。 | +| `output/ground_markers` | `visualization_msgs::msg::Marker` | 推定された地表面の可視化 | +| `output/ground_status` | `std_msgs::msg::String` | 地表面推定のステータスログ | +| `output/height` | `std_msgs::msg::Float32` | 高度 | +| `output/near_cloud` | `sensor_msgs::msg::PointCloud2` | Lanelet2から抽出され、地表面傾斜推定に使用された点群 | -### パラメーター +### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_common/schema/ground_server.schema.json") }} @@ -98,75 +111,112 @@ ### 目的 -このノードは、レーンのマークとyablokに関する要素をlanelet2から抽出します。 +このノードは、lanelet2から道路標識とyablocに関する要素を抽出します。 ### 入出力 #### 入力 -| 名称 | タイプ | 説明 | -| ------------------ | --------------------------------------- | ------------ | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vectorマップ | +| 名称 | タイプ | 説明 | +| ------------------ | --------------------------------------- | ----------- | +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | -#### 出力 +## 自動運転ソフトウェアドキュメント + +### Planning コンポーネント + +#### Local Planning + +ローカルプランナーは、以下を実行します。 -Autowareドキュメント(日本語訳) +- 高分解能地図を使用した経路生成 +- 衝突回避のための障害物検出と予測 +- 車両の動きにおける速度と加速度の計画 -**はじめに** +#### Motion Planning -本ドキュメントでは、さまざまな自動運転シナリオにおけるソフトウェアアーキテクチャとコンポーネントについて説明します。 +モーションプランナーは、以下を実行します: -**ソフトウェアアーキテクチャ** +- 『post resampling』後の『refined path』の生成 +- 『pre-smoothed trajectory』を使用して車両を `current pose` から目標経路まで誘導する -Autowareのソフトウェアアーキテクチャは、次の主要なコンポーネントで構成されています。 +#### Trajectory Generation -- **Perception(認識):** 車両の周囲環境を感知します。 -- **Prediction(予測):** 周囲の物体の動きを予測します。 -- **Planning(計画):** 車両の経路と操縦を計画します。 -- **Control(制御):** 車両の運動を制御します。 +軌跡生成器は、以下を実行します: -**Planningコンポーネント** +- 『smoothed trajectory』の生成 +- 軌跡に沿った速度と加速度の計算 -Planningコンポーネントは、次のサブコンポーネントで構成されています。 +### Perception コンポーネント -- **Path Planning(パス計画):** 自車位置に基づいて安全な経路を生成します。 -- **Behavior Planning(挙動計画):** 車両の加速、減速、操舵などの挙動を生成します。 +#### Object Detection -**Planningコンポーネントの機能** +対象物検出器は、以下を実行します: -Planningコンポーネントは、次の機能を実行します。 +- 車両、歩行者、障害物などの対象物の検出 +- 対象物の距離、速度、サイズなどの属性推定 -- Perceptionによって提供される環境情報を使用して、安全な経路を計画します。 -- Predictionによって提供される物体の動き予測を使用して、計画された経路に沿った衝突の可能性を評価します。 -- 車両の速度、加速度逸脱量、操舵逸脱量などの制約を考慮して、実行可能な挙動を生成します。 +#### Obstacle Tracking -**Planningコンポーネントの入力** +障害物追跡器は、以下を実行します: -Planningコンポーネントの入力には、次のものが含まれます。 +- 時間経過による対象物の追跡 +- 対象物の動きと予測 -- 自車位置 -- Perceptionによって提供される環境データ -- Predictionによって提供される物体の動き予測 -- 車両の制限事項 +#### Sensor Fusion -**Planningコンポーネントの出力** +センサーフュージョナーは、以下を実行します: -Planningコンポーネントの出力には、次のものが含まれます。 +- カメラ、レーダー、LiDAR などのセンサーからのデータを統合 +- 環境のより完全で正確な表現を作成する -- 安全な経路 -- 車両の加速、減速、操舵の挙動 +### Control コンポーネント -**追加のリソース** +#### Vehicle Control -- [Autoware 公式ドキュメント](https://docs.autoware.org/) +車両コントローラーは、以下を実行します: -| 名称 | タイプ | 説明 | -| -------------------------- | -------------------------------------- | ------------------------------------------------ | -| `output/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出したバウンディングボックス | -| `output/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出した路面標示 | -| `output/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | レーンレット2 から抽出した標識 | -| `output/sign_board_marker` | `visualization_msgs::msg::MarkerArray` | 可視化された標識 | +- アクセル、ブレーキ、ステアリングの制御 +- 車両の安定性と快適性を確保する + +#### Path Following + +パス追従器は、以下を実行します: + +- 計画された経路に従って車両を誘導する +- 経路のずれを最小限に抑える + +### その他のコンポーネント + +#### Mapping + +マッパーは、以下を実行します: + +- 地図の構築と更新 +- 交通標識や道路構造などの環境特徴の特定 + +#### Localization + +ローカルライザーは、以下を実行します: + +- 車両の『current pose』と向きを推定する +- GPS、LiDAR、IMU などのセンサーからのデータを使用する + +#### Runtime Manager + +ランタイムマネージャーは、以下を実行します: + +- システムの各コンポーネント間の通信調整 +- 制御ループの管理と監視 + +| 名前 | 型 | 説明 | +| -------------------------- | -------------------------------------- | --------------------------------------------- | +| `output/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | lanelet2から抽出されたバウンディングボックス | +| `output/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | lanelet2から抽出された路面マーキング | +| `output/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | lanelet2から抽出された交通標識板 | +| `output/sign_board_marker` | `visualization_msgs::msg::MarkerArray` | 視覚化された交通標識板 | ### パラメータ -{{ json_to_markdown("localization/yabloc/yabloc_common/schema/ll2_decomposer.schema.json") }} +{{ json_to_markdown_ja("localization/yabloc/yabloc_common/schema/ll2_decomposer.schema.json") }} + diff --git a/localization/yabloc/yabloc_image_processing/README.md b/localization/yabloc/yabloc_image_processing/README.md index f534ca677d9b8..ab306278dc4f3 100644 --- a/localization/yabloc/yabloc_image_processing/README.md +++ b/localization/yabloc/yabloc_image_processing/README.md @@ -1,6 +1,6 @@ # yabloc_image_processing -このパッケージには画像処理に関連するいくつかの実行可能ノードが含まれています。 +このパッケージは画像処理に関するいくつかの実行可能ノードを含みます。 - [line_segment_detector](#line_segment_detector) - [graph_segmentation](#graph_segmentation) @@ -13,151 +13,147 @@ ### 目的 -このノードはグレースケール画像から全ての直線を抽出します。 +このノードはグレースケール画像から全ての線分を抽出します。 -### 入力/出力 +### 入出力 #### 入力 +``` +/input/image: sensor_msgs/image +``` -| 名前 | タイプ | 説明 | -| ----------------- | ------------------------- | -------- | -| `input/image_raw` | `sensor_msgs::msg::Image` | 非歪画像 | - -## 自動運転ソフトウェアドキュメント(マークダウン形式) +#### 出力 +``` +/output/segments: autoware_msgs/line_segments +``` -### 目次 +--- -- [Planningモジュール](#planningモジュール) -- [Behavior Planning](#behavior-planning) -- [Trajectory Planning](#trajectory-planning) -- [Control](#control) -- [Localization](#localization) -- [Perception](#perception) -- [Integration](#integration) +#### パラメータ +``` +flip_vertical: bool (default: false) +``` -### Planningモジュール +### ロジック -Planningモジュールは、自車位置を出発点として、目標の到着点まで安全で効率的な経路を作成する責任を負います。Planningモジュールは、次に示す2つのサブモジュールで構成されています。 +このノードは、以下を実行します。 -#### Behavior Planning +1. グレースケール画像を受信します。 +2. 画像の水平反転を実行します(`flip_vertical=true` の場合)。 +3. Cannyエッジ検出を実行します。 +4. Hough変換を実行して線分を検出します。 +5. 検出した線分を公開します。 -Behavior Planningサブモジュールは、任意の外部入力なしで自車に安全で効率的な目的地への経路を計画します。このサブモジュールは、経路計画アルゴリズム、経路評価機能、および衝突回避モジュールで構成されます。 +| 名前 | タイプ | 説明 | +| -------------------- | ------------------------- | -------------------------- | +| `input/image_raw` | `sensor_msgs::msg::Image` | 歪みのない画像 | -#### Trajectory Planning +#### 出力 -Trajectory Planningサブモジュールは、外部入力(衝突回避モジュールやLocalizationモジュールなど)に基づいて、自車の具体的な経路を計画します。このサブモジュールは、Trajectory Generator、`post resampling`アルゴリズム、および低速走行アルゴリズムで構成されます。 +このドキュメントは、AutowareにおけるPlanningコンポーネントの技術的詳細を説明しています。 -### Behavior Planning +Planningコンポーネントは、現在の状態とランタイム環境を考慮して、車両の経路を決定します。以下にその機能を説明します。 -Behavior Planningサブモジュールは、入力として現在のマップと自車位置を受け取ります。サブモジュールは、衝突の可能性がある障害物を回避しながら、経路計画アルゴリズムを使用して目的地までの安全で効率的な経路を計画します。 +* **経路生成:** 現在の自車位置と目的地を基に、安全かつ効率的な経路を生成します。 +* **軌道生成:** 生成された経路上の目標軌道を作成します。 +* **軌跡生成:** 目標軌道に従った軌跡を生成します。 +* **衝突回避:** 予想される物体との衝突を回避するための緊急経路を生成します。 -### Trajectory Planning +**経路生成アルゴリズム** -Trajectory Planningサブモジュールは、Behavior Planningサブモジュールによって作成された経路を受け取ります。サブモジュールは、`post resampling`アルゴリズムを使用して経路を滑らかにし、低速走行アルゴリズムを使用して交差点などの低速走行シナリオを処理します。 +Planningコンポーネントは、以下を含むさまざまな経路生成アルゴリズムをサポートしています。 -### Control +* **波面伝搬:** 2Dまたは3Dの空間で波面を伝搬させて経路を生成します。 +* **動的計画法:** 問題を小さなサブ問題に分割して、最適な経路を計算します。 +* **グラフ探索:** グラフ構造を使用して経路を探索します。 -Controlモジュールは、計画された経路に基づいて、車両の速度とステアリングを制御します。このモジュールは、PIDコントローラー、状態オブザーバー、およびActuationモジュールで構成されます。 +**軌道生成アルゴリズム** -### Localization +Planningコンポーネントは、以下を含むさまざまな軌道生成アルゴリズムをサポートしています。 -Localizationモジュールは、自車位置を決定します。このモジュールは、GPS、IMU、カメラなどのセンサーからデータを受け取ります。 +* **ステアリング制御器:** 理想的な軌道に従うようにステアリング角を計算します。 +* **速度制御器:** 理想的な速度に従うように加速とブレーキを制御します。 +* **ラテラルおよび縦断制御器:** ステアリングと速度を協調的に制御して、滑らかな軌跡を生成します。 -### Perception +**軌跡生成手法** -Perceptionモジュールは、周囲の環境を感知します。このモジュールは、カメラ、レーダー、LiDARなどのセンサーからデータを受け取ります。 +Planningコンポーネントは、軌跡を生成するために、'post resampling'手法を使用します。この手法は、軌道上のポイントを再サンプルして、軌跡がより滑らかになるようにします。 -### Integration +**衝突回避** -Integrationモジュールは、Planningモジュール、Controlモジュール、Localizationモジュール、およびPerceptionモジュールを統合します。このモジュールは、センサーデータを統合し、モジュール間で通信を行います。 +Planningコンポーネントは、以下を含むさまざまな衝突回避メカニズムをサポートしています。 -Autowareのアーキテクチャがご理解いただけたかと思います。質問やご提案がありましたら、お気軽にお問い合わせください。 +* **予測:** センサデータを使用して、周囲の物体の動きを予測します。 +* **軌跡適応:** 障害物との衝突のリスクを軽減するために、車両の軌跡を適応させます。 +* **緊急経路生成:** 回避不可能な衝突に対して迅速に対応する緊急経路を生成します。 -| 名称 | タイプ | 説明 | -| --------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| `output/image_with_line_segments` | `sensor_msgs::msg::Image` | 線分を強調表示した画像 | -| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 点群としての検出された線分。各点は x、y、z、normal_x、normal_y、normal_z を含み、z と normal_z は常に空です。 | +| 名前 | 種類 | 説明 | +| --------------------------------- | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `output/image_with_line_segments` | `sensor_msgs::msg::Image` | 線分をハイライトした画像 | +| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 点群として検出された線分。各点に x、y、z、normal_x、normal_y、normal_z が含まれるが、normal_z は常に空になる。 | ## graph_segmentation -### 目的 - -このノードは、[グラフベースセグメンテーション](https://docs.opencv.org/4.5.4/dd/d19/classcv_1_1ximgproc_1_1segmentation_1_1GraphSegmentation.html)によって道路領域を抽出します。 - -### 入力 / 出力 - -#### 入力 - -| Name | Type | Description | -| ----------------- | ------------------------- | ------------------ | -| `input/image_raw` | `sensor_msgs::msg::Image` | 歪み補正された画像 | - -## 自動運転ソフトウェア仕様書 - -### 計画コンポーネント - -#### 動作概要 - -計画コンポーネントは、車両が目的地に安全かつ効率的に移動するための経路と操作を生成する。 - -#### 入出力 - -- **入力:** - - 自車位置 - - マップ - - 障害物検出 -- **出力:** - - 経路 - - 加速 - - ハンドリング - -#### アルゴリズム - -計画コンポーネントは、以下を含むさまざまなアルゴリズムを使用している: - -- **経路計画:** A\*アルゴリズム、Dijkstraアルゴリズム -- **動作計画:** Model Predictive Control (MPC)、最適制御 -- **障害物回避:** Velocity Obstacles法、Dynamic Window Approach (DWA) - -#### パフォーマンス指標 - -- **経路の安全性:** 障害物逸脱量、速度逸脱量、加速度逸脱量の最小化 -- **経路の効率性:** 移動時間の最小化、燃料消費の最小化 -- **計算時間:** リアルタイム要件の遵守 - -#### システムアーキテクチャ - -計画コンポーネントは、以下を含むモジュール式アーキテクチャで設計されている: - -- **経路プランナー:** 経路を生成する -- **動作プランナー:** 車両の操作を生成する -- **障害物検出と回避:** 障害物を検出し、それらを回避する経路と操作を生成する - -#### 統合 - -計画コンポーネントは、Autowareシステムの他のコンポーネントと統合されている。これらには、以下が含まれる: - -- センサーインターフェース: 障害物検出データを計画コンポーネントに提供する -- 制御インターフェース: 計画コンポーネントから車両の制御系に動作コマンドを送信する -- HMIインターフェース: 計画経路と車両の操作をユーザーに表示する - -#### テストと検証 - -計画コンポーネントは、シミュレーション環境と実車テストで徹底的にテストされている。このテストには以下が含まれる: - -- **シミュレーション:** さまざまなシナリオ下での計画コンポーネントの動作の検証 -- **実車テスト:** 実際の世界での計画コンポーネントの性能評価 - -#### リリースノート - -- **バージョ ン1.0:** 初期リリース -- **バージョン1.1:** 障害物検出と回避の改善 -- **バージョン1.2:** パフォーマンスの向上とバグ修正 - -| 名称 | 型 | 説明 | -| ------------------------ | ------------------------- | ------------------------------------------------------------ | -| `output/mask_image` | `sensor_msgs::msg::Image` | 路面領域として特定されたマスクされたセグメントを含むイメージ | -| `output/segmented_image` | `sensor_msgs::msg::Image` | 可視化用のセグメントイメージ | +### 목적 + +이 노드는 [graph-based-segmentation](https://docs.opencv.org/4.5.4/dd/d19/classcv_1_1ximgproc_1_1segmentation_1_1GraphSegmentation.html)를 사용하여 도로 표면 영역을 추출합니다. + +### 입력/출력 + +#### 입력 + +| 名称 | タイプ | 説明 | +| ----------------- | ------------------------- | ----------------- | +| `input/image_raw` | `sensor_msgs::msg::Image` | 非歪曲化画像 | + +#### アウトプット + +- 制御構造 + - ドメイン + - レベル + - ドメインコントローラ +- ソフトウェアアーキテクチャ + - Autoware Open Architecture + - Perception/Planning + - Planningモジュール + - Plan Evaluation + - Path Tracking + - post resampling + - Behavior Tree + - Route Planning + - Localization + - GPS/IMU + - Mapping + - Localization + - Vehicle Control + - MPC + - Vehicle Dynamic Model + - Brake Controller + - Steer Controller + - System Management + - Rosbags + - Webview + - Visualization + - Rosbridge + - Toolchain + - Autoware.AI Platform +- ご利用情報 + - ライセンス + - コミュニティ + - チュートリアル + - Webフォーム +- 開発の仕組み +- これまでの実績 +- ホワイトペーパー +- 参照情報 + - 論文 + - コード + - Webサイト + +| 名前 | タイプ | 説明 | +|--------------------------------------|----------------------------|---------------------------------------------------------------| +| `output/mask_image` | `sensor_msgs::msg::Image` | 路面の領域として決定されたセグメントがマスクされた画像 | +| `output/segmented_image` | `sensor_msgs::msg::Image` | 可視化用のセグメント化された画像 | ### パラメータ @@ -167,101 +163,46 @@ Autowareのアーキテクチャがご理解いただけたかと思います。 ### 目的 -このノードは、graph_segmentとlsdの結果を統合し、道路表面の標示を抽出します。 +このノードは、`graph_segment`と`lsd`の結果を統合して、路面標示を抽出します。 ### 入出力 #### 入力 -- `lane_detected_raw` : レーン検出の生データ -- `line_detected_raw` : 線検出の生データ -- `current_pose` : 自車位置 - -| 名前 | タイプ | 説明 | -| --------------------------- | ------------------------------- | ---------------------------------------------------- | +| 名前 | 型 | 説明 | +| --------------------------- | ------------------------------- | -------------------------------------------------------- | | `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 検出された線分 | -| `input/mask_image` | `sensor_msgs::msg::Image` | 路面領域と判断されたマスクされたセグメントを持つ画像 | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラの非歪み情報 | +| `input/mask_image` | `sensor_msgs::msg::Image` | 道路の路面として判断されたセグメントがマスクされた画像 | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 歪みのないカメラ情報 | #### 出力 -**自動運転ソフトウェアのアーキテクチャ** - -**目的** - -このドキュメントでは、Autowareのアーキテクチャとその主なコンポーネントについて説明します。 - -**アーキテクチャ** - -Autowareは、モジュール化されたアーキテクチャに基づいています。このアーキテクチャは、以下の主要コンポーネントで構成されています。 - -- **Perception:** センサーデータから環境を認識します。 -- **Localization:** 自車位置を認識します。 -- **Planning:** 自車のパスと動作を計画します。 -- **Control:** 計画された動作を実行します。 - -**コンポーネント** - -**Perception** - -Perceptionコンポーネントは以下の機能を担当します。 - -- **カメラ:** 画像データの処理 -- **LiDAR:** 3D点群データの処理 -- **レーダー:** 物体の検出と速度測定 -- **センサーフュージョン:** 複数のセンサーからのデータを統合 - -**Localization** - -Localizationコンポーネントは以下の機能を担当します。 - -- **自己位置推定:** IMUとGPSデータを使用して自車位置を推定 -- **マップマッチング:** 自車位置を地図と照合 -- **同時位置合わせとマッピング (SLAM):** 環境をマッピングしながら自車位置を推定 - -**Planning** - -Planningコンポーネントは以下の機能を担当します。 - -- **経路計画:** 起点から目的地までの経路を計画 -- **動作計画:** 経路に沿った自車の動作を計画 (速度、加速度、操舵角) -- **障害回避:** 障害物を回避するための回避策の生成 - -**Control** - -Controlコンポーネントは以下の機能を担当します。 - -- **ステアリング:** 計画された操舵角の実行 -- **ブレーキング:** 計画されたブレーキ圧力の適用 -- **アクセル:** 計画されたアクセルペダル位置の実行 -- **車両安定化:** 車両の安定性を維持 - -**連携** - -各コンポーネントは、以下のように連携して動作します。 - -- Perceptionコンポーネントは、環境に関する情報を収集します。 -- Localizationコンポーネントは、自車位置を推定します。 -- Planningコンポーネントは、自車の経路と動作を計画します。 -- Controlコンポーネントは、計画された動作を実行します。 - -**考慮事項** - -自動運転ソフトウェアを設計および実装する際には、以下の考慮事項を考慮する必要があります。 - -- **精度:** コンポーネントの出力の正確性 -- **堅牢性:** コンポーネントのエラーに対する耐性 -- **リアルタイム性:** コンポーネントの応答時間 -- **計算コスト:** コンポーネントが使用する計算リソース -- **センサーの限界:** センサーの能力と制限 - -| 名前 | 型 | 説明 | -| -------------------------------------- | ------------------------------- | -------------------------------------------------------- | -| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | ビジュアライゼーション用のフィルタ処理済み線分 | -| `output/projected_image` | `sensor_msgs::msg::Image` | ビジュアライゼーション用の投影されたフィルタ処理済み線分 | -| `output/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影されたフィルタ処理済み線分 | - -### パラメータ +Autowareにおける自動運転ソフトウェアの開発プロセスを、以下に示します。 + +1. **センサーデータの収集** + - 車載センサーからセンサーデータを収集する。 +2. **センサーデータの処理** + - センサーデータからオブジェクト、レーン、および他の重要な情報を検出する。 +3. **地図データの統合** + - 地図データとセンサーデータを統合し、環境をより正確にモデル化する。 +4. **自車位置の推定** + - 自車位置と姿勢を推定する。 +5. **経路計画** + - 現在地から目的地までの安全で効率的な経路を計画する。 +6. **動作計画** + - 経路計画に基づいて、車両を制御するための動作計画を作成する。 +7. **車両制御** + - 動作計画を実行し、車両を制御する。 + +このプロセスは反復的に行われます。センサーデータの処理と自車位置の推定からのフィードバックに基づいて、経路計画と動作計画が調整されます。これにより、変化する環境に適応できる、より堅牢で安全な自動運転システムが実現します。 + +| 名前 | タイプ | 説明 | +| ------------------------------------- | --------------------------------- | -------------------------------------------------------- | +| `output/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 視覚化用のフィルタされた線分 | +| `output/projected_image` | `sensor_msgs::msg::Image` | 視覚化用の投影されたフィルタリング済み線分 | +| `output/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影されたフィルタリング済み線分 | + +### パラメーター {{ json_to_markdown("localization/yabloc/yabloc_image_processing/schema/segment_filter.schema.json") }} @@ -269,54 +210,48 @@ Controlコンポーネントは以下の機能を担当します。 ### 目的 -このノードは、画像のリサイズと歪み補正を同時に実行します。 +このノードは、画像のサイズ変更と歪み補正を同時に実行します。 -### 入力 / 出力 +### 入出力 #### 入力 -- camera_topic(`/{}'.format(camera_name)) - - 型: sensor_msgs/Image - - 説明: 歪んだカメラ画像 - -#### 出力 - -- camera_topic_undistort - - 型: sensor_msgs/Image - - 説明: ゆがみの補正されたカメラ画像 - -| 名前 | タイプ | 説明 | -| ---------------------------- | ----------------------------------- | -------------------- | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | -| `input/image_raw` | `sensor_msgs::msg::Image` | 未加工のカメラ画像 | +| 名称 | タイプ | 説明 | +| ---------------------------- | ----------------------------------- | ----------------------- | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | カメラ情報 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 生のカメラ画像 | | `input/image_raw/compressed` | `sensor_msgs::msg::CompressedImage` | 圧縮されたカメラ画像 | -このノードは、圧縮画像と生画像の両方のトピックをサブスクライブします。 -生画像が一度でもサブスクライブされると、圧縮画像のサブスクライブが停止します。 +このノードは圧縮画像と生画像の両方のトピックを購読します。 +生画像が一度でも購読されると、圧縮画像は購読されなくなります。 これは Autoware 内での不要な解凍を避けるためです。 #### 出力 -| 名前 | タイプリスト | 説明 | -| -------------------- | ----------------------------------- | ------------------------ | -| `output/camera_info` | `sensor_msgs::msg::CameraInfo` | リサイズされたカメラ情報 | -| `output/image_raw` | `sensor_msgs::msg::CompressedImage` | 非歪とリサイズされた画像 | +| 名称 | 型 | 説明 | +|---|---|---| +| `output/camera_info` | `sensor_msgs::msg::CameraInfo` | リサイズされたカメラ情報 | +| `output/image_raw` | `sensor_msgs::msg::CompressedImage` | レンズ補正とサイズ変更済みの画像 | ### パラメータ -{{ json_to_markdown("localization/yabloc/yabloc_image_processing/schema/undistort.schema.json", true) }} +{{ json_to_markdown("localization/yabloc/yabloc_image_processing/schema/undistort.schema.json") }} -#### tf_static オーバーライドについて +#### tf_staticオーバーライドについて -
開くにはクリック
+
クリックして開く
+ +一部のノードでは `/sensing/camera/traffic_light/image_raw/compressed` の frame_id (例 `/traffic_light_left_camera/camera_optical_link`)に対して `/base_link` から `/tf_static` が必要です。tf_staticが正しいかどうかは以下のコマンドで確認できます。 -いくつかのノードは `/base_link` から `/sensing/camera/traffic_light/image_raw/compressed` のフレーム ID (例: `/traffic_light_left_camera/camera_optical_link`) への `/tf_static` を必要とします。tf_static が正しいかどうかは以下のコマンドで確認できます。 ```shell ros2 run tf2_ros tf2_echo base_link traffic_light_left_camera/camera_optical_link ``` -プロトタイプ車両の使用、正確なキャリブレーションデータの欠如、またはその他の回避できない理由によって間違った`/tf_static`がブロードキャストされた場合、 `override_camera_frame_id`内の`frame_id`を指定すると便利です。非空の文字列を指定すると、`/image_processing/undistort_node`は`camera_info`内の`frame_id`を書き換えます。たとえば、以下のように異なる`tf_static`を指定できます。 +プロトタイプの車両の使用、正確なキャリブレーションデータの不足、またはその他の避けられない理由により、間違った `/tf_static` がブロードキャストされた場合、`override_camera_frame_id` で frame_id を指定すると便利です。 +空でない文字列を指定すると、`/image_processing/undistort_node` は camera_info の frame_id を書き換えます。 +たとえば、次のように異なる tf_static を指定できます。 + ```shell ros2 launch yabloc_launch sample_launch.xml override_camera_frame_id:=fake_camera_optical_link @@ -333,172 +268,91 @@ ros2 run tf2_ros static_transform_publisher \ ### 目的 -このノードは、推定自車位置に基づいて、camera画像にlanelet2を重ね合わせます。 +このノードは、推定された自車位置に基づいて、カメラ画像にlanelet2を重ね合わせます。 -### 入力 / 出力 +### 入出力 #### 入力 -| 名前 | タイプ | 説明 | -| ------------------------------------- | ---------------------------------- | ---------------------------------- | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置 | -| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 路面マーキング以外の投影された線分 | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 無歪カメラ情報 | -| `input/image_raw` | `sensor_msgs::msg::Image` | 無歪カメラ画像 | -| `input/ground` | `std_msgs::msg::Float32MultiArray` | 地面勾配 | -| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面マーキングに関するlanelet2要素 | -| `input/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | 交通標識に関するlanelet2要素 | - -**自動運転ソフトウェアに関するドキュメント** - -**Planningモジュール** - -**概要** - -Planningモジュールは、自車位置と周囲環境データを元に、安全かつ効率的な経路計画を行います。以下の機能を備えています。 - -**機能** - -- **経路生成:** 自車位置から目的地までの最適な経路を計算します。 -- **速度計画:** 経路に沿った安全かつ快適な速度プロファイルを計算します。 -- **衝突回避:** 周囲の障害物との衝突を回避するための回避操作を計算します。 -- **車線維持:** 車線を維持するためのステアリング制御を計算します。 - -**アーキテクチャ** - -Planningモジュールは、以下で構成されています。 - -- **TrajGen:** 経路を生成します。 -- **TwistGenerator:** 速度プロファイルを計算します。 -- **ObstacleManager:** 障害物を管理します。 -- **LaneManager:** 車線を管理します。 +| 名称 | 型 | 説明 | +| -------------------------------------- | ----------------------------------- | --------------------------------------------------- | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | 推定自車位置 | +| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 非道路標示を含む投影線分群 | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 歪みのないカメラ情報 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 歪みのないカメラ画像 | +| `input/ground` | `std_msgs::msg::Float32MultiArray` | 地面傾斜 | +| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面標示に関するLanelet2要素 | +| `input/ll2_sign_board` | `sensor_msgs::msg::PointCloud2` | 交通標識に関するLanelet2要素 | -**入出力** +## 自動運転ソフトウエアのドキュメント -**入力:** +### Overview +Autowareによる自動運転ソフトウエアは、自律走行車両の様々な機能やタスクに対応するコンポーネントから構成されています。 +このドキュメントでは、これらのコンポーネントとその相互作用について説明します。 -- 自車位置 -- 周囲環境データ (LiDAR、カメラなど) +### Planning +Planningコンポーネントは、車両の目標経路を生成し、リアルタイムで更新します。高精度地図データとセンサからの情報を利用して、障害物を回避し、交通ルールに従う安全な経路を計画します。 -**出力:** - -- 計画された経路 -- 目標速度と加速度 -- ステアリング制御 - -**インターフェイス** - -Planningモジュールは、Autoware ROSインタフェースを通じて他のコンポーネントとやり取りします。 - -**パラメータ** - -Planningモジュールのパラメータは、`/autoware/planning`ネームスペースから設定できます。 - -**パフォーマンス** - -Planningモジュールの性能は、以下によって向上できます。 - -- 高精度のセンサーデータを使用する -- 現在の実速度をフィードバックする -- 障害物の位置を正確に予測する - -**制限事項** - -- 静的障害物のみを処理します。 -- 悪天候では性能が低下する可能性があります。 -- 急カーブや狭い道路で問題が発生する可能性があります。 - -**依存関係** - -Planningモジュールには、以下のコンポーネントが必要です。 - -- PointCloudPreprocessor -- Mapping -- Localization -- Prediction -- ObstacleDetection -- Control - -**テスト** +### Control +Controlコンポーネントは、車両の運動を制御するためにPlanningコンポーネントから受け取った目標経路に従います。目標の経路を追従するようステアリング、アクセル、ブレーキを調整します。 -Planningモジュールは、シミュレーションと実車テストの両方でテストされています。 +### Perception +Perceptionコンポーネントは、センサからのデータを処理し、車両の周囲環境を認識します。物体の検出、分類、追跡を行い、周囲の状況に関する情報を提供します。 -**ドキュメント** +### Localization +Localizationコンポーネントは、車両の自車位置と向きを決定します。GNSS、IMU、オドメータなどのセンサを利用して、正確な位置情報を提供します。 -詳細については、以下のドキュメントを参照してください。 +### Post-processing +'post resampling'コンポーネントは、センサからのデータのタイムスタンプを調整し、各コンポーネントに同時刻のデータを供給します。これにより、すべてのコンポーネントが整合したデータに基づいて動作できるようになります。 -- [Planningモジュール設計ドキュメント](https://github.com/autowarefoundation/autoware.ai/blob/master/docs/design/planning-module.md) -- [Planningモジュールソースコード](https://github.com/autowarefoundation/autoware.ai/tree/master/ros/autoware_planning) +### Communication +Communicationコンポーネントは、車両と外部システムの間の通信を処理します。他の車両との通信、交通インフラとの接続、リモート監視への対応を行います。 -**追加情報** +### その他のコンポーネント +これらの中核コンポーネントに加えて、次のような追加コンポーネントも含まれます。 -- Planningモジュールでは、`post resampling`などの手法を使用しています。 -- Planningモジュールは、velocity逸脱量やacceleration逸脱量などのパラメータを調整できます。 -- Planningモジュールは、他のPlanningアルゴリズムと統合できます。 +- モニタリング:車両のシステムを監視し、異常検出と警告を行います。 +- HMI:人間と機械のインターフェースを提供し、ドライバーに対する情報やフィードバックを提供します。 +- シミュレーション:自動運転システムのテストや検証のためのシミュレーション環境を提供します。 -| 名前 | 型 | 説明 | -| ------------------------------- | --------------------------------- | ------------------------------------ | -| `output/lanelet2_overlay_image` | `sensor_msgs::msg::Image` | レーンレット2のオーバーレイ画像 | -| `output/projected_marker` | `visualization_msgs::msg::Marker` | 路面マーキング以外の3D投影された線分 | +| 項目 | タイプ | 説明 | +|---|---|---| +| `output/lanelet2_overlay_image` | `sensor_msgs::msg::Image` | lanelet2を重ねた画像 | +| `output/projected_marker` | `visualization_msgs::msg::Marker` | 車線以外の標識を含む3D投影の線分 | ## line_segments_overlay ### 目的 -このノードはカメラ画像上に分類された線分を可視化します +このノードは、カメラ画像上に分類された直線を視覚化する。 ### 入出力 #### 入力 -| 名前 | タイプ | 説明 | -| --------------------------- | ------------------------------- | ------------------ | -| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 分類線分 | -| `input/image_raw` | `sensor_msgs::msg::Image` | 補正解除カメラ画像 | +| 名称 | タイプ | 説明 | +| --------------------------- | ------------------------------- | ------------------------ | +| `input/line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 分類された線分 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 歪みのないカメラ画像 | #### 出力 -**自動運転ソフトウェア** - -**計画コンポーネント** - -計画コンポーネントは、周囲の環境を認識し、それに応じて経路を計画します。 - -- **地図管理:** ナビゲーションマップのロード、解析、更新を担当。 -- **センサーフュージョン:** レーダー、LiDAR、カメラなどのセンサーデータを集約し、周囲の環境の包括的な表現を作成。 -- **オドメトリー:** 自車位置の追跡と推定。 -- **パスプランニング:** 障害物や交通規制を考慮した安全で効率的な経路の生成。 -- **トラフィック予測:** 周辺車両の軌跡を予測し、それに応じて経路を調整。 - -**制御コンポーネント** - -制御コンポーネントは、計画コンポーネントによって生成された経路に従って車両を操作します。 - -- **縦制御:** 加減速の制御を担当。 -- **横制御:** ステアリングの制御を担当。 -- **ブレーキ制御:** ブレーキの適用を担当。 -- **アクチュエーターインターフェース:** コントローラコマンドと車両アクチュエーターのインターフェース。 -- **安定性制御:** 車両の安定性を確保する機能を提供。 - -**他のコンポーネント** - -- **ビヘイビアープランナー:** 車両の一般的な動作を指定。 -- **RVIZビジュアライザー:** システムの動作を可視化する。 -- **ロギングシステム:** システムの動作とデータを記録。 - -**Autowareのアーキテクチャ** - -- **モジュール性:** 各コンポーネントは独立しており、他のコンポーネントと簡単に統合できます。 -- **再利用性:** コンポーネントは再利用可能で、さまざまな自動運転システムで利用できます。 -- **オープンソース:** Autowareはオープンソースプラットフォームであり、コミュニティによって継続的に開発されています。 - -**使用上の注意** - -- システムは依然として開発中であり、限定的な使用に限定されています。 -- システムを使用する前に、関連する安全対策を講じてください。 -- 'post resampling`のデータを使用する場合、元のデータの不確実性と時間遅延に注意してください。 -- 速度逸脱量または加速度逸脱量が高い場合、システムの応答が遅れる可能性があります。 +- 開発ガイド [development-guide](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/development-guide.md) +- センサー: Velodyne HDL-64E [HDL-64E_on_rooftop_right](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/sensor/HDL-64E_on_rooftop_right.md) +- ロボットオペレーティングシステム (ROS) ワークスペースの構成 [ROS_Workspace_Configuration](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/installation/ROS_Workspace_Configuration.md) +- 3Dオブジェクト検出 [3D_Object_Detection](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/perception/3D_Object_Detection.md) +- カットオフアンテナ [cut-off-antenna](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/sensor/cut-off-antenna.md) +- パスプランニング [path_planning](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/planning/path_planning.md) +- 制御 [control](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/control/control.md) +- モデルの予測アルゴリズム [model_predictive_algorithm](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/control/model_predictive_algorithm.md) +- タイヤの「スリップ角度」 [slip_angle](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/control/slip_angle.md) +- クラウドの追跡 [cloud_tracking](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/perception/cloud_tracking.md) +- シャーシ [chassis](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/interface/chassis.md) +- Planning Routing Manager [planning_routing_manager](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/planning/planning_routing_manager.md) +- `post resampling`処理 [post_resampling_process](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/perception/post_resampling_process.md) +- 自車位置 [current_pose](https://gitlab.com/autowarefoundation/autoware.auto/AutowareAuto/-/blob/master/docs/perception/current_pose.md) + +| 名前 | タイプ | 説明 | +| ------------------------------------------- | ------------------------- | ------------------------------------ | +| `output/image_with_colored_line_segments` | `sensor_msgs::msg::Image` | 強調された線分でハイライトされた画像 | -| 名前 | 型 | 説明 | -| ----------------------------------------- | ------------------------- | -------------------------- | -| `output/image_with_colored_line_segments` | `sensor_msgs::msg::Image` | 線分がハイライトされた画像 | diff --git a/localization/yabloc/yabloc_monitor/README.md b/localization/yabloc/yabloc_monitor/README.md index a98f7f4df3beb..a9c41e5b27a5e 100644 --- a/localization/yabloc/yabloc_monitor/README.md +++ b/localization/yabloc/yabloc_monitor/README.md @@ -1,85 +1,75 @@ # yabloc_monitor -YabLoc モニターは YabLoc Localization システムの状態を監視するノードです。YabLoc Localization システムの状態を監視し、その状態を診断として発行するラッパーノードです。 +YabLoc Monitorは、YabLoc Localizationシステムのステータスを監視するノードです。YabLoc Localizationシステムのステータスを監視し、ステータスを診断として公開するラッパーノードです。 ## 機能 ### 可用性 -このノードは、YabLoc の最終出力姿勢を監視して YabLoc の可用性を検証します。 +このノードは、YabLocの最終的な出力ポーズを監視して、YabLocの可用性を検証します。 ### その他 -追加予定です。 +追加予定 -## インターフェイス +## インターフェース ### 入力 -| 名前 | 型 | 説明 | -| --------------------- | --------------------------- | -------------------- | -| `~/input/yabloc_pose` | `geometry_msgs/PoseStamped` | YabLocの最終出力姿勢 | +| 名前 | タイプ | 説明 | +| --------------------- | --------------------------- | ------------------------------- | +| `~/input/yabloc_pose` | `geometry_msgs/PoseStamped` | YabLoc の最終出力位置 | -### 出力 +## 自動運転ソフトウェア -この文書は、AutowareのPath PlanningモジュールのためのPythonリファレンスガイドです。 +**Table of Contents** -**目的** +- [概要](#概要) +- [入力](#入力) +- [処理](#処理) +- [出力](#出力) +- [依存関係](#依存関係) +- [パラメータ](#パラメータ) -本ドキュメントの目的は、Path Planningモジュールの各クラス、関数、定数に関して、その意味と使用方法を明確にすることです。 +**概要** -**前提条件** +本ドキュメントでは、Autowareの中心的なコンポーネントである自動運転ソフトウェアについて説明します。このソフトウェアは、センサーデータを使用して周囲の環境を認識し、それに基づいて走行経路を計画し、車両を制御します。 -読者は、Pythonプログラミング言語、モジュール性、およびオブジェクト指向プログラミングの概念に精通している必要があります。また、Autowareフレームワークの基本的な理解も有益です。 +**入力** -**構成** +* センサーデータ (レーダー、LiDAR、カメラ) +* 自車位置と姿勢 +* 高解像度地図 -このドキュメントは、次のセクションで構成されています。 +**処理** -- **モジュール** -- **クラス** -- **関数** -- **定数** -- **付録** +自動運転ソフトウェアは、次の処理を行います。 -**モジュール** +* **センサフュージョン:** センサーデータの統合と処理を行い、周囲環境の正確な表現を作成します。 +* **オブジェクト検出と追跡:** 環境内の車両、歩行者、その他のオブジェクトを検出し、追跡します。 +* **Planning:** 高解像度地図とオブジェクト検出結果を使用して走行経路を計画します。 +* **制御:** 計画された走行経路に従って、車両のアクセル、ブレーキ、ステアリングを制御します。 -Path Planningモジュールは、`autoware.planning`モジュール内に格納されています。このモジュールには、パス計画アルゴリズム、軌跡生成機能、および障害物回避ルーチンを実装するクラスと関数が含まれています。 +**出力** -**クラス** +* 車両の制御コマンド +* 周囲環境のMap representation +* オブジェクト検出と追跡の結果 -Path Planningモジュールには、次の主要なクラスが含まれています。 +**依存関係** -- **Planner:** Planningアルゴリズムのベースクラス -- **TrajectoryGenerator:** 軌跡を生成するクラス -- **ObstacleAvoidance:** 障害物を回避するためのルーチンをカプセル化するクラス +* Autoware Platform +* ROS(Robot Operating System) -**関数** +**パラメータ** -Path Planningモジュールには、次の主要な関数が含まれています。 +* **'post resampling' 時の最大オブジェクト数:** 検出後に保存するオブジェクトの最大数 -- `plan_path(current_pose, goal_pose, obstacles)`: 与えられた自車位置、ゴール位置、および障害物を基にパスを計画する -- `generate_trajectory(path, velocity, acceleration)`: 与えられたパス、速度、および加速度に基づいて軌跡を生成する -- `avoid_obstacles(trajectory, obstacles)`: 与えられた軌跡と障害物を基に障害物を回避する - -**定数** - -Path Planningモジュールには、次の主要な定数が含まれています。 - -- `MAX_VELOCITY`: 最適速度 -- `MAX_ACCELERATION`: 最大加速度 -- `MIN_DISTANCE_TO_OBSTACLE`: 障害物に対する最小安全距離 - -**付録** - -付録には、Path Planningモジュールの使用方法に関する追加情報が含まれています。 - -- `post resampling`処理に関するセクションを含んでいます。 - -| Name | Type | Description | -| -------------- | --------------------------------- | ------------ | -| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断結果出力 | +| 名前 | タイプ | 説明 | +| -------------- | ----------------------------------- | ------------------- | +| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | Diagnosticsの出力 | ### パラメータ -{{ json_to_markdown("localization/yabloc/yabloc_monitor/schema/yabloc_monitor.schema.json", "ja") }} +{{ json_to_markdown("localization/yabloc/yabloc_monitor/schema/yabloc_monitor_jp.schema.json") }} + diff --git a/localization/yabloc/yabloc_particle_filter/README.md b/localization/yabloc/yabloc_particle_filter/README.md index 8dcaa03e5bd56..3561dee2339a2 100644 --- a/localization/yabloc/yabloc_particle_filter/README.md +++ b/localization/yabloc/yabloc_particle_filter/README.md @@ -1,6 +1,6 @@ -## yabLoc_particle_filter +# yabLoc_particle_filter -このパッケージには、パーティクルフィルタに関連する実行可能ノードが含まれています。 +このパッケージにはパーティクルフィルタ関連の実行可能ノードがいくつか含まれています。 - [particle_predictor](#particle_predictor) - [gnss_particle_corrector](#gnss_particle_corrector) @@ -10,323 +10,216 @@ ### 目的 -- このノードは、パーティクルの予測更新と再サンプリングを実行します。 -- それは、Correctorノードによって決定されるパーティクルの重みを遡及的に反映します。 +- このノードはパーティクルの予測更新と再サンプリングを実行します。 +- コレクタノードによって決定された粒子の重みを遡って反映します。 -### 入出力 +### 入力 / 出力 #### 入力 -- `/localization/particle_cloud/sample` (ParticleCloud) +| 名前 | タイプ | 説明 | +|---|---|---| +| `input/initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | パーティクルの初期位置を指定する | +| `input/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 予測更新の線速度と角速度 | +| `input/height` | `std_msgs::msg::Float32` | 地上高 | +| `input/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 補正ノードで重み付けされたパーティクル | #### 出力 -- `/localization/particle_cloud/prediction_sample` (ParticleCloud) -- `/localization/particle_cloud/prediction_weight` (ParticleWeightArray) +Autowareで利用可能な安全パラメータのリストは次のとおりです。 + +* **車間距離パラメータ** + * `min_following_distance` (`[m]`):Autowareが維持しようとする前方の車両との最小距離 + * `min_following_distance_max_speed` (`[m]`):`min_following_distance`パラメータを最大速度として適用する速度しきい値 + * `time_headway` (`[sec]`):周囲車両に対する適切な車間距離を計算するためにAutowareが使用する時間間隔 +* **横方向安全距離パラメータ** + * `min_lateral_offset` (`[m]`):障害物に対してAutowareが維持しようとする最小横方向オフセット + * `min_lateral_offset_max_speed` (`[m]`):`min_lateral_offset`パラメータを最大速度として適用する速度しきい値 +* **速度パラメーター** + * `max_speed` (`[km/h]`):Autowareトラジェク\トリージェネレーターが生成するトラック可能な最大速度 + * `max_accel` (`[m/s^2]`):車両に入力できる最大加速度 + * `max_decel` (`[m/s^2]`):車両に入力できる最大減速度 + * `search_speed` (`[km/h]`):経路計画を実行するときにAutowareが使用する検索速度(経路計画参照) +* **経路計画パラメーター** + * `max_path_points`:経路計画モジュールが1つのパスに収容できる最大経路ポイント数 + * `smoothing_factor`:経路計画モジュールが生成するパスを滑らかにするために使用する平滑化係数 +* **障害物検出パラメータ** + * `min_detection_height` (`[m]`):障害物検出が有効になる最小高さ +* **Planningパラメータ** + * `lanechange_frequency` (`[m]`):Autowareが車線変更を実行する頻度 + * `min_lanechange_speed` (`[km/h]`):Autowareが車線変更を実行する最小速度 + * `lane_change_check_distance` (`[m]`):Autowareが前方の車線変更の可能性をチェックし始める距離 + * `safe_stop_distance` (`[m]`):Autowareが進行中の軌跡を停止するために必要な最小の安全距離 +* **制御パラメータ** + * `brake_decel_rate` (`[m/s^2]`):自動運転システムが自律ブレーキを実行するために使用する減速度率 +* **その他** + * `debug_mode`:デバッグモードを有効にするかどうかを制御します (`[bool]`) + * `post resampling`:経路計画後処理を有効にするかどうかを制御します (`[bool]`) + +| 名前 | 種類 | 説明 | +|---|---|---| +| output/pose_with_covariance | geometry_msgs::msg::PoseWithCovarianceStamped | 粒子のセントロイドと共分散 | +| output/pose | geometry_msgs::msg::PoseStamped | 粒子のセントロイドと共分散 | +| output/predicted_particles | yabloc_particle_filter::msg::ParticleArray | 予測ノードによって重み付けられた粒子 | +| debug/init_marker | visualization_msgs::msg::Marker | 初期位置のデバッグ可視化 | +| debug/particles_marker_array | visualization_msgs::msg::MarkerArray | 粒子の可視化(`visualize`がTrueの場合に公開) | ### パラメータ -| パラメータ | 説明 | 型 | デフォルト | -| ------------------------ | --------------------------------------------------- | ------ | ---------- | -| `resampling` | 仮説の再サンプリングを実行するかどうか | bool | true | -| `resampling_threshold` | 仮説が再サンプリングされる前の重みの最小しきい値 | double | 0.001 | -| `min_num_particles` | 再サンプリング後の最小パーティクル数 | int | 100 | -| `max_num_particles` | 再サンプリング後の最大パーティクル数 | int | 10000 | -| `temporal_variance` | `'post resampling'`仮説の生成に対する時系列的な分散 | double | 0.0 | -| `translational_variance` | `'post resampling'`仮説の生成に対する並進的な分散 | double | 0.0 | -| `rotational_variance` | `'post resampling'`仮説の生成に対する回転的な分散 | double | 0.0 | - -## gnss_particle_corrector - -### 目的 - -- このノードは、GNSS測定値に基づいてパーティクルの重みを修正します。 - -### 入出力 - -#### 入力 - -- `/localization/particle_cloud/ground_truth` (ParticleCloud) -- `/localization/particle_cloud/prediction_sample` (ParticleCloud) -- `/localization/gnss/odometry` (Odometry) - -#### 出力 - -- `/localization/particle_cloud/correction_weight` (ParticleWeightArray) +{{ json_to_markdown("localization/yabloc/yabloc_particle_filter/schema/predictor.schema.json") }} -### パラメータ +### サービス -| パラメータ | 説明 | 型 | デフォルト | -| ------------------- | -------------------------- | ------ | ------------- | -| `gnss_model` | GNSSの測定モデル | string | `'gnss_sim'` | -| `gnss_device_model` | 使用するGNSSデバイスモデル | string | `'ublox_f9p'` | -| `gnss_max_age` | GNSS測定値の最大許容時間 | double | 1.0 | +| 名称 | タイプ | 説明 | +| -------------------- | ------------------------ | ----------------------------------------------- | +| `yabloc_trigger_srv` | `std_srvs::srv::SetBool` | YABLOC推定の有効化と無効化 | -## camera_particle_corrector +## gnss_particle_corrector ### 目的 -- このノードは、カメラ測定値に基づいてパーティクルの重みを修正します。 +- このノードはGNSSを使用してパーティクルの重みを推定します。 +- 以下の2つの種類の入力をサポートしています: `ublox_msgs::msg::NavPVT`と`geometry_msgs::msg::PoseWithCovarianceStamped` ### 入出力 #### 入力 -- `/ localization / particle_cloud / ground_truth` (ParticleCloud) -- `/ localization / particle_cloud / prediction_sample` (ParticleCloud) -- `/localization/camera/detection` (DetectionArray) - -#### 出力 - -- `/localization/particle_cloud/correction_weight` (ParticleWeightArray) - -### パラメータ - -| パラメータ | 説明 | 型 | デフォルト | -| ------------------------------ | -------------------------------------------- | ------ | ------------------ | -| `camera_model` | カメラの測定モデル | string | `'camera_sim'` | -| `camera_device_model` | 使用するカメラデバイスモデル | string | `'realsense_d435'` | -| `camera_max_age` | カメラ測定値の最大許容時間 | double | 1.0 | -| `detection_distance_threshold` | 検出とパーティクルの位置の距離の最大しきい値 | double | 1.0 | - -| 名前 | 種類 | 説明 | -| ----------------------------- | ------------------------------------------------ | -------------------------------------------- | -| `input/initialpose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | パーティクルの初期位置を指定 | -| `input/twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | 予測更新の線速度と角速度 | -| `input/height` | `std_msgs::msg::Float32` | 地形高 | -| `input/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 補正ノードによって重み付けされたパーティクル | +| 名前 | 型 | 説明 | +| ---------------------------- | ----------------------------------------------- | -------------------------------------------------- | +| `input/height` | `std_msgs::msg::Float32` | 地面からの高さ | +| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測粒 | +| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSS 測定 `use_ublox_msg` が false の場合使用 | +| `input/navpvt` | `ublox_msgs::msg::NavPVT` | GNSS 測定 `use_ublox_msg` が true の場合使用 | #### 出力 -**自動運転ソフトウェア** - -Autowareの自動運転ソフトウェアは、Perception、Planning、Controlの3つの主要コンポーネントで構成されています。 - -**Perception** - -Perceptionコンポーネントは、カメラ、LiDAR、レーダーなどのセンサーからのデータを処理し、「点群」と「カメラ画像」を生成します。これらのデータを使用して、障害物(車両、歩行者、自転車など)、道路標識、車線マーキングなどの周辺環境を認識します。 - -**Planning** - -Planningコンポーネントは、Perceptionから得られたデータを基に、安全で効率的な走行経路を生成します。経路生成では、以下の要因が考慮されます。 - -- 周囲環境の認識 -- 障害物回避 -- 車両の運動力学(速度、加速度) -- 交通規則 +**自動運転ソフトウェアのドキュメント** -**Control** +**要約** -Controlコンポーネントは、Planningから生成された経路に従って、車両を制御します。これには、ステアリング、アクセル、ブレーキの操作が含まれます。 +このドキュメントでは、Autoware自動運転ソフトウェアのアーキテクチャ、コンポーネント、およびインターフェースについて説明します。このソフトウェアは、車両に搭載されたセンサーからのデータを処理し、環境を認識し、走行の意思決定と制御を行います。 -**追加機能** +**アーキテクチャ** -- **Lane Keeping Assist (LKA):** 車線を維持するアシスタント -- **Adaptive Cruise Control (ACC):** 前方車両との車間距離を維持するクルーズコントロール -- **Emergency Braking:** 衝突の可能性がある場合に自動的にブレーキをかける機能 +Autowareのアーキテクチャはモジュール方式で設計されており、各モジュールは特定の機能を担当しています。これにより、ソフトウェアの保守性と拡張性が向上します。主なモジュールを以下に示します。 -**評価** +* **センサーモジュール:** センサーからのデータを処理し、生のデータを認識可能な形式に変換します。 +* **認識モジュール:** センサーデータを使用して、周囲の環境を認識します。これには、物体の検出、分類、トラッキングなどがあります。 +* **予測モジュール:** 認識された物体の動きを予測し、将来の衝突の可能性を特定します。 +* **Planningモジュール:** 予測に基づいて、車両の走行経路と速度を計画します。 +* **制御モジュール:** Planningモジュールから出された経路と速度に従って、車両の運動を制御します。 -Autowareの性能は、さまざまな指標を使用して評価できます。 +**インターフェース** -- **Planning評価:** - - 障害物逸脱量(velocity, acceleration) - - 車線逸脱量 - - 安全距離 -- **Control評価:** - - 追従精度 - - 'post resampling'精度 - - 車両の安定性 +各モジュールは、他のモジュールとデータ交換するためのインターフェースを定義しています。インターフェースは、ROS(Robot Operating System)トピックまたはサービスコールに基づいています。これにより、モジュール間の疎結合が実現し、ソフトウェアのモジュール化と再利用性が向上します。 -**使用例** +**センサー** -Autowareの自動運転ソフトウェアは、自動運転車両、ロボタクシー、ラストワンマイル配送などのさまざまな用途で使用できます。 +Autowareは、さまざまなセンサータイプをサポートしています。これらには、以下のものが含まれます。 -| 名前 | 内容 | 説明 | -| ------------------------------ | ----------------------------------------------- | ---------------------------------------------- | -| `output/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | 粒子中心と共分散 | -| `output/pose` | `geometry_msgs::msg::PoseStamped` | 粒子中心と共分散 | -| `output/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測ノードで重み付けされた粒子 | -| `debug/init_marker` | `visualization_msgs::msg::Marker` | 初期位置のデバッグ用可視化 | -| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子の可視化。`visualize` が true の場合に配信 | - -### パラメータ +* LiDAR +* カメラ +* レーダー +* IMU -{{ json_to_markdown("localization/yabloc/yabloc_particle_filter/schema/predictor.schema.json") }} +**認識** -### サービス +認識モジュールは、センサーデータを使用して環境を認識します。主な認識アルゴリズムを以下に示します。 -| 名称 | 種類 | 説明 | -| -------------------- | ------------------------ | ------------------------------ | -| `yabloc_trigger_srv` | `std_srvs::srv::SetBool` | yabloc推定の有効化および無効化 | +* 物体検出: YOLO、Faster R-CNN +* 物体分類: ResNet、MobileNet +* 物体追跡: Kalmanフィルタ、Particle Filter -## gnss_particle_corrector +**予測** -### 目的 +予測モジュールは、認識された物体の動きを予測します。主な予測アルゴリズムを以下に示します。 -- このノードは、GNSSを使用して粒子重みを推定します。 -- 2種類の入力に対応しています。`ublox_msgs::msg::NavPVT`と`geometry_msgs::msg::PoseWithCovarianceStamped`です。 +* カルマンフィルタ +* 粒子フィルタ +* アディティブノイズモデル -### 入出力 - -#### 入力 - -- ublox_msgs::NavPVT:[GNSS情報](https://docs.autoware.io/en/latest/autoware.auto/msgs/ublox_msgs/message/NavPVT.html) -- geometry_msgs::PoseWithCovarianceStamped:[自車位置](https://docs.autoware.io/en/latest/autoware.auto/msgs/geometry_msgs/message/PoseWithCovarianceStamped.html) - -| 名前 | タイプ | 説明 | -| ---------------------------- | ----------------------------------------------- | ------------------------------------------- | -| `input/height` | `std_msgs::msg::Float32` | 地上高度 | -| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 推定パーティクル | -| `input/pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSS測定 (use_ublox_msgがfalseの場合に使用) | -| `input/navpvt` | `ublox_msgs::msg::NavPVT` | GNSS測定 (use_ublox_msgがtrueの場合に使用) | - -**自動運転ソフトウェアの設計に関するドキュメント** - -**Planningコンポーネント** - -**状態推定と構想** - -- 最新の自車位置、周囲環境のステータス、予定ルートを把握するための状態推定 -- 障害物の検知、予測、および分類に基づいたパス計画の構想 +**Planning** -**動作計画** +Planningモジュールは、予測に基づいて車両の走行経路と速度を計画します。主なPlanningアルゴリズムを以下に示します。 -- 経路最適化と障害物回避のためのグローバルプランナー -- 局所プランナーによるリアルタイム動作計画の生成 +* ダイナミックプログラミング +* RRT(Rapidly-exploring Random Tree) +* LQR(Linear-quadratic Regulator) **制御** -- 車両の動的特性を考慮した制御器の設計 -- 経路追従、速度制御、障害物回避のための閉ループ制御 - -**シミュレーションとテスト** +制御モジュールは、Planningモジュールから出された経路と速度に従って、車両の運動を制御します。主な制御アルゴリズムを以下に示します。 -- 仮想環境を使用した自動運転システムのシミュレーション -- 実際のテスト走路での実車テスト +* PID制御 +* 状態フィードバック制御 +* モデル予測制御 -**システムアーキテクチャ** - -- モジュール化されたソフトウェアアーキテクチャ -- さまざまなセンサーとアクチュエーターとのインターフェース - -**Autowareソフトウェアスタック** - -- オープンソースの自動運転ソフトウェアプラットフォーム -- Planning、制御、センシング、シミュレーションのためのモジュールを提供 +**追加機能** -**主要な概念** +Autowareは、以下の追加機能も提供しています。 -- **'post resampling'**:状態推定後の予測された経路 -- **速度逸脱量**:目標速度からの逸脱 -- **加速度逸脱量**:目標加速度からの逸脱 -- **制御限界**:車両の物理的な制約による制御器の入出力の限界 -- **Lanelet2**:道路環境を表現するためのデータ構造 +* レイヤー統合: センサーデータを異なるモダリティから融合して、より堅牢な認識を提供します。 +* ロкалиゼーション:車両の自車位置と姿勢を推定します。 +* 'post resampling'による高精度なセンサー校正: センサー間のオフセット補正を向上させます。 +* 安全性監視: 車両挙動を監視して、安全性を確保します。 +* HMI (Human-Machine Interface): ドライバーとの相互作用を提供します。 -| 名前 | タイプ | 説明 | -| ------------------------------ | -------------------------------------------- | ---------------------------------------------------------------- | -| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 重み付けられた粒子 | -| `debug/gnss_range_marker` | `visualization_msgs::msg::MarkerArray` | GNSS の重み分布 | -| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子のビジュアライゼーション. `visualize` が真の場合に公開される | +| 名前 | 型 | 説明 | +| ------------------------------ | -------------------------------------------- | --------------------------------------------------------- | +| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 重み付き粒子 | +| `debug/gnss_range_marker` | `visualization_msgs::msg::MarkerArray` | GNSS の重み分布 | +| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子ビジュアライゼーション. `visualize` が true の場合に発行 | -### パラメータ +### パラメーター {{ json_to_markdown("localization/yabloc/yabloc_particle_filter/schema/gnss_particle_corrector.schema.json") }} -## camera_particle_corrector -### 目的 +## カメラパーティクルコレクタ -- このノードは GNSS を使用してパーティクルの重みを見積もります。 +### 目的 +- このノードはGNSSを使用してパーティクルの重みを求めます。 ### 入出力 #### 入力 -| 名称 | タイプ | 説明 | -| ------------------------------------- | -------------------------------------------- | ---------------------------------------------- | -| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測粒子 | -| `input/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | 路面標示を線分に変換したもの | -| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面標示を線分に変換したもの | -| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影線分 | -| `input/pose` | `geometry_msgs::msg::PoseStamped` | 自車位置周辺のエリアマップを取得するための参照 | +| 名称 | タイプ | 説明 | +| ----------------------------------- | ------------------------------------------ | -------------------------------------------------------- | +| `input/predicted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 予測されたパーティクル | +| `input/ll2_bounding_box` | `sensor_msgs::msg::PointCloud2` | 路面マーキングをラインセグメントに変換したもの | +| `input/ll2_road_marking` | `sensor_msgs::msg::PointCloud2` | 路面マーキングをラインセグメントに変換したもの | +| `input/projected_line_segments_cloud` | `sensor_msgs::msg::PointCloud2` | 投影されたラインセグメント | +| `input/pose` | `geometry_msgs::msg::PoseStamped` | self位置周辺のエリアマップを取得するための参照 | #### 出力 -Autoware Planning 2.x のモジュール開発チュートリアル - -このチュートリアルでは、Planning 2.x のモジュール開発に関するエンドツーエンドのプロセスをご紹介します。必要なスキルと知識、および Planning 2.x でモジュールを開発するための推奨アプローチについて説明します。 - -### 必要条件 - -- C++ の中級レベルの知識 -- ROS の基本的な知識 -- Autoware の基本的な知識 - -### 推奨アプローチ - -Planning 2.x でモジュールを開発するには、以下の推奨アプローチに従うことをお勧めします。 - -1. **要件の定義:** モジュールの目的、入力、および出力について明確に定義します。 -2. **インターフェースの設計:** モジュールと外部コンポーネントとのインターフェースを設計します。 -3. **モジュールの実装:** モジュールのアルゴリズムとロジックを実装します。 -4. **テスト:** 単体テスト、統合テスト、システムテストを通じてモジュールをテストします。 -5. **ドキュメント化:** モジュールのインターフェース、実装、テストについて文書化します。 - -### モジュール構成 - -Planning 2.x のモジュールは、以下のような構成になっています。 - -- **リソース:** モジュールによって使用される設定ファイルやパラメータです。 -- **インターフェース:** モジュールと外部コンポーネントとのやり取りに使用されるクラスと関数です。 -- **アルゴリズム:** モジュールの内部ロジックを実装するコードです。 -- **テスト:** モジュールを検証するためのテストケースです。 -- **ドキュメント:** モジュールのインターフェース、実装、テストについての説明です。 - -### モジュールの例 - -以下に、Planning 2.x で実装されているモジュールの例をいくつか示します。 - -- **Local Planner:** 自車位置から近接将来の軌道を生成します。 -- **Global Planner:** 長期的な将来の軌道を生成します。 -- **Behavior Planner:** 自車の動作を決定します。 -- **Prediction Module:** 他者の動きを予測します。 - -### モジュール開発の手順 - -Planning 2.x でモジュールを開発するには、以下の手順に従います。 - -1. **Planning モジュールテンプレートを複製する:** Planning リポジトリからモジュールテンプレートを複製します。 -2. **モジュールに名前を付ける:** モジュールを適切な名前に変更します。 -3. **インターフェースを編集する:** モジュールのインターフェースを編集して、独自の要件に合わせます。 -4. **アルゴリズムを実装する:** モジュールのアルゴリズムを実装します。 -5. **テストを追加する:** モジュールを検証するためのテストを追加します。 -6. **リソースを追加する:** モジュールによって使用されるリソースを追加します。 -7. **ドキュメントを追加する:** モジュールのインターフェース、実装、テストについてのドキュメントを追加します。 -8. **モジュールをコンパイルしてインストールする:** モジュールをコンパイルして Autoware にインストールします。 - -### モジュールのメンテナンス - -Planning 2.x のモジュールをメンテナンスするには、以下のベストプラクティスに従うことをお勧めします。 - -- **コードの変更を記録する:** コードの変更をコミットログに記録します。 -- **継続的な統合を使用する:** 変更があると自動的にモジュールをテストおよびビルドする継続的な統合システムを使用します。 -- **モジュールを更新する:** Planning の新しいバージョンがリリースされたら、モジュールを更新します。 - -### サポート - -Planning 2.x のモジュール開発に関するサポートについては、[Autoware フォーラム](https://forum.autoware.ai/) にアクセスしてください。 - -| 名前 | タイプ | 説明 | -| ------------------------------ | -------------------------------------------- | ----------------------------------------------------------- | -| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | ウェイト付き粒子 | -| `debug/cost_map_image` | `sensor_msgs::msg::Image` | lanelet2 から生成されたコストマップ | -| `debug/cost_map_range` | `visualization_msgs::msg::MarkerArray` | コストマップ境界 | -| `debug/match_image` | `sensor_msgs::msg::Image` | 投影線分画像 | -| `debug/scored_cloud` | `sensor_msgs::msg::PointCloud2` | ウェイト付き3D線分 | -| `debug/scored_post_cloud` | `sensor_msgs::msg::PointCloud2` | ウェイト付き3D線分(不確実なもの) | -| `debug/state_string` | `std_msgs::msg::String` | ノード状態を表す文字列 | -| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | 粒子ビジュアライゼーション.`visualize` が True の場合に公開 | +**自動運転ソフトウェアの用語と定義** + +| 用語 | 定義 | +|---|---| +| Planning | 走行経路や行動を決定するモジュール | +| Localization | 自車位置を推定するモジュール | +| Perception | 周囲環境を認識するモジュール | +| Control | 車両を制御するモジュール | +| Sensor | 周囲環境を測定する装置 | +| Actuator | 車両を制御するために使用される装置 | +| Localization | 自車位置を推定するモジュール | +| Autoware | オープンソースの自動運転ソフトウェアプラットフォーム | +| `post resampling` | 走行経路最適化の再サンプルフェーズ | +| `open space` | 走行経路内の障害物がない領域 | + +| 名称 | タイプ | 説明 | +| ------------------------------ | ------------------------------------------------ | --------------------------------------------------------- | +| `output/weighted_particles` | `yabloc_particle_filter::msg::ParticleArray` | 重み付け粒子 | +| `debug/cost_map_image` | `sensor_msgs::msg::Image` | lanelet2から作成したコストマップ | +| `debug/cost_map_range` | `visualization_msgs::msg::MarkerArray` | コストマップ境界 | +| `debug/match_image` | `sensor_msgs::msg::Image` | 投影された線分画像 | +| `debug/scored_cloud` | `sensor_msgs::msg::PointCloud2` | 重み付け3D線分 | +| `debug/scored_post_cloud` | `sensor_msgs::msg::PointCloud2` | 'post resampling'の非確実性のある重み付け3D線分 | +| `debug/state_string` | `std_msgs::msg::String` | ノードの状態を表す文字列 | +| `debug/particles_marker_array` | `visualization_msgs::msg::MarkerArray` | パーティクル可視化。`visualize`がTrueの場合のみ公開される | ### パラメータ @@ -334,6 +227,7 @@ Planning 2.x のモジュール開発に関するサポートについては、[ ### サービス -| 名 | 種類 | 説明 | -| ------------ | ------------------------ | -------------------- | -| `switch_srv` | `std_srvs::srv::SetBool` | 補正の有効化と無効化 | +| 名前 | 型 | 説明 | +|---|---|---| +| `switch_srv` | `std_srvs::srv::SetBool` | 補正の有効化および無効化 | + diff --git a/localization/yabloc/yabloc_pose_initializer/README.md b/localization/yabloc/yabloc_pose_initializer/README.md index 599ac30c1cdc5..51556a2922169 100644 --- a/localization/yabloc/yabloc_pose_initializer/README.md +++ b/localization/yabloc/yabloc_pose_initializer/README.md @@ -1,12 +1,13 @@ -# yabloc_pose_initializer +## yabloc_pose_initializer -このパッケージには、アプライオリ姿勢推定に関するノードが含まれています。 +このパッケージには、初期姿勢推定に関するノードが含まれています。 - [camera_pose_initializer](#camera_pose_initializer) -このパッケージでは、実行時に事前にトレーニングされたセマンティックセグメンテーションモデルが必要です。このモデルは通常、[インストール](https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/)の環境準備フェーズ中に `ansible` によってダウンロードされます。手動でダウンロードすることもできます。モデルがダウンロードされていない場合でも、初期化は完了しますが、精度は低下する可能性があります。 +このパッケージは、実行時に事前トレーニング済みのセマンティックセグメンテーションモデルを必要とします。このモデルは通常、[インストール](https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/)の環境準備フェーズ中に`ansible`によってダウンロードされます。手動でダウンロードすることも可能です。モデルがダウンロードされていなくても初期化は完了しますが、精度は低下する可能性があります。 + +モデルを手動でダウンロードして解凍するには、次の手順に従います。 -手動でモデルをダウンロードして解凍するには、次の手順を実行します。 ```bash $ mkdir -p ~/autoware_data/yabloc_pose_initializer/ @@ -15,23 +16,23 @@ $ wget -P ~/autoware_data/yabloc_pose_initializer/ \ $ tar xzf ~/autoware_data/yabloc_pose_initializer/resources.tar.gz -C ~/autoware_data/yabloc_pose_initializer/ ``` -## ノート +## 注記 -このパッケージは外部コードを使用しています。学習済みファイルはアポロから提供されます。学習済みファイルは環境準備中に自動的にダウンロードされます。 +このパッケージは外部コードを使用します。トレーニング済みファイルはアポロによって提供されます。トレーニング済みファイルは環境準備中に自動的にダウンロードされます。 -元のモデルのURL +元モデルのURL -> Open Model ZooにはApacheライセンスバージョン2.0が適用されています。 +> Open Model ZooはApache Licenseバージョン2.0のライセンスに基づいています。 変換されたモデルのURL -> モデル変換スクリプトにはMITライセンスが適用されています。 +> モデル変換スクリプトはMITライセンスに基づいてリリースされています。 -## 特別な謝意を伝える方々 +## 特別な感謝 - [openvinotoolkit/open_model_zoo](https://github.com/openvinotoolkit/open_model_zoo) - [PINTO0309](https://github.com/PINTO0309) @@ -40,98 +41,91 @@ $ tar xzf ~/autoware_data/yabloc_pose_initializer/resources.tar.gz -C ~/autoware ### 目的 -- このノードは、ADAPIの要求に応じ、カメラを使用して初期位置を推定します。 +- このノードは、ADAPIの要求に応じてカメラを使用して初期位置を推定します。 #### 入力 -- `/planning/scenario_planning/current_pose`:自車位置 -- `/planning/scenario_planning/autoware/config/mission`:ミッション設定 -- `/localization/hdmap`:HDマップ -- `/perception/detection/vehicles`:車両検出結果 -- `/perception/detection/lanes`:車線検出結果 -- `/perception/detection/traffic_lights`:信号検出結果 -- `/perception/detection/obstacles`:障害物検出結果 -- `/perception/detection/objects`:物体検出結果 -- `/planning/scenario_planning/current_frame_id`:現在のフレームID - -#### 出力 - -- `/planning/scenario_planning/autoware/initial_pose`:初期位置推定結果 - -| 名称 | 型 | 説明 | -| ------------------- | --------------------------------------- | ---------------- | -| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 非歪みカメラ情報 | -| `input/image_raw` | `sensor_msgs::msg::Image` | 非歪みカメラ画像 | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | - -#### 出力 - -**自己位置推定(Localization)** +| 名 | タイプ | 説明 | +| --------------------------------- | --------------------------------------- | ------------------------ | +| `input/camera_info` | `sensor_msgs::msg::CameraInfo` | 変形解除カメラ情報 | +| `input/image_raw` | `sensor_msgs::msg::Image` | 変形解除カメラ画像 | +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | -自己位置推定モジュールは、ローカリゼーションデータ(GPS、IMU、オドメトリなど)を使用して、自車位置を推定します。 +## 自動運転ソフトウェア -**Planning** +### Plan.ioアプリケーション -Planningモジュールは、Perceptionモジュールからのデータに基づいて、経路計画を作成します。 +#### Planningモジュール -**経路追跡(Path Tracking)** +- PlannerはHolomapから検出した障害物を考慮のうえ走行経路を計画します。 -経路追跡モジュールは、Planningモジュールから作成された経路を自車が追従できるように制御します。 +#### 経路生成 -**障害物検知(Perception)** +- **Precision** + - Holomapのデータに基づき高精度経路を生成します。 +- **Adaptive** + - センサーデータに基づき低遅延の経路を生成します。 +- **Safety** + - 安全を確保する経路を生成します。 -Perceptionモジュールは、カメラ、レーダー、LiDARなどのセンサーデータを使用して、車両や歩行者などの周囲の障害物を検出します。 +#### Planning Framework -**状態推定(State Estimation)** +- Planning Frameworkは経路生成を制御し、以下のような機能を提供します。 + - Plannerの選択 + - Planning/制御間の同期 + - `post resampling` + - 車線維持 -状態推定モジュールは、ローカリゼーション、Perception、その他のセンサーデータを使用して、車両の現在の状態(速度、加速度など)を推定します。 +#### Planningコンポーネント -**動作プランナー(Behavior Planner)** +- **PlannerManager:** プランナーの管理 +- **TrajectoryManager:** 経路の作成と管理 +- **AdaptivePlanner:** Holomapの更新を考慮した経路の再生成 +- **LanePlanner:** 車線維持 +- **SafetyPlanner:** 安全性確保 -動作プランナーモジュールは、認識された障害物や交通状況に基づいて、車両の動作を計画します。 +#### システムアーキテクチャ -**衝突回避(Collision Avoidance)** +![Autoware Plan.ioアーキテクチャ](architecture.png) -衝突回避モジュールは、衝突が差し迫っている場合に、障害物を回避するための緊急回避操作を実行します。 +### Claudeアプリケーション -**制御(Control)** +#### システムアーキテクチャ -制御モジュールは、経路追跡、障害物検出、その他のモジュールからの入力を統合し、車両のステアリング、アクセル、ブレーキを制御します。 +![Autoware Claudeアーキテクチャ](architecture.png) -**システムモニタリング** +#### Mappingモジュール -システムモニタリングモジュールは、車両システムの健全性を監視し、異常が検出された場合は警告またはエラーメッセージを生成します。 +- **Mapper:** Waypointマップを生成・管理します。 +- **Lidar Mapping:** 3D点群データから高精度マップを生成します。 -**診断(Diagnostics)** +#### 自車位置推定モジュール -診断モジュールは、システムの問題や障害を特定するためのツールを提供します。 +- **Localization:** ClaudeはHolomapやセンサーデータを活用して自車位置を推定します。 -**シミュレーション(Simulation)** +#### オブジェクト認識モジュール -シミュレーションモジュールは、車両や環境の挙動をシミュレートして、Autowareのパフォーマンスをテストおよび評価します。 +- **Detector:** Claudeは車両や歩行者などのダイナミックオブジェクトを検出します。 +- **Tracker:** ダイナミックオブジェクトを追跡します。 -**ポスト処理(Post-Processing)** +#### センシングモジュール -ポスト処理モジュールは、センサーデータやその他のデータを補完し、`post resampling`や地図マッチングなどの手法を使用します。 +- **Sensor Manager:** センサーの管理とデータの統合 +- **Lidar:** 高精度3D点群データを取得します。 +- **Camera:** 画像データを取得します。 +- **Radar:** ドップラー情報を取得します。 -**パラメーター調整** - -パラメーター調整ツールは、Autowareのパフォーマンスを最適化するために、さまざまなパラメーターを微調整することを可能にします。 - -**検証および検証(Validation and Verification)** - -検証および検証モジュールは、Autowareシステムの安全性、信頼性、およびパフォーマンスを評価するためのツールと手順を提供します。 - -| 名 | 型 | 説明 | -| ------------------- | -------------------------------------- | ------------ | -| `output/candidates` | `visualization_msgs::msg::MarkerArray` | 初期姿勢候補 | +| 名前 | タイプ | 説明 | +| ------------------- | -------------------------------------- | ----------------------- | +| `output/candidates` | `visualization_msgs::msg::MarkerArray` | 初期姿勢候補 | ### パラメータ {{ json_to_markdown("localization/yabloc/yabloc_pose_initializer/schema/camera_pose_initializer.schema.json") }} -### サービス +### Services + +| 名前 | 型 | 説明 | +| ------------------ | --------------------------------------------------------- | ------------------------------- | +| `yabloc_align_srv` | `tier4_localization_msgs::srv::PoseWithCovarianceStamped` | 初期位置推定リクエスト | -| 名前 | タイプ | 説明 | -| ------------------ | --------------------------------------------------------- | ---------------------- | -| `yabloc_align_srv` | `tier4_localization_msgs::srv::PoseWithCovarianceStamped` | 初期姿勢推定リクエスト | diff --git a/map/autoware_map_height_fitter/README.md b/map/autoware_map_height_fitter/README.md index 513fedd7527fc..a9e609c458af0 100644 --- a/map/autoware_map_height_fitter/README.md +++ b/map/autoware_map_height_fitter/README.md @@ -1,35 +1,22 @@ ## autoware_map_height_fitter -このライブラリは、与えられた点とその点のポイントクラウドマップの地面に適合させます。 -マップの読み込み操作は、`map_loader_name`で指定されたノードのパラメータ`enable_partial_load`によって切り替えられます。 -このライブラリを使用するノードはマルチスレッドエグゼキュータを使用する必要があります。 +このライブラリは、与えられた点と、ポイントクラウドマップの地面にフィットさせます。 +パラメータ`map_loader_name`で指定されたノードの`enable_partial_load`パラメータで、マップのローディングが切り替えられます。 +このライブラリを使用したノードは、マルチスレッドの実行を使用する必要があります。 ## パラメータ {{ json_to_markdown("map/autoware_map_height_fitter/schema/map_height_fitter.schema.json") }} -## トピックサブスクリプション +## トピックのサブスクリプション -| Topic Name | 説明 | -| ---------------- | ----------------------------------------------------------------------------------------------- | -| ~/pointcloud_map | `enable_partial_load = false` の場合のみ使用される、ポイントクラウド マップ全体を含んだトピック | +| トピック名 | 説明 | +| ---------------- | ---------------------------------------------------------------------------------------------------- | +| ~/pointcloud_map | 全ポイントクラウンドマップを含むトピック (`enable_partial_load = false` の場合のみ使用) | ## サービスクライアント -### Planningモジュール +| サービス名 | 説明 | +| ------------------ | ------------------------------------| +| ~/partial_map_load | 部分地図を読み込むサービス | -#### 制御信号の生成 - -- **概要** - - Planningモジュールは、障害物検出、経路計画、経路追従に基づいて、制御信号を生成します。 -- **入力** - - 地図データ - - Sensorからのセンシングデータ - - `post resampling`後の自車位置 -- **出力** - - 車両の速度、加速度、操舵角度のコマンド - -## サービス名 | 説明 - ----|---| -| ~/partial_map_load | 局部地図を読み込むサービス diff --git a/map/autoware_map_projection_loader/README.md b/map/autoware_map_projection_loader/README.md index a597fd31c211d..66821f065eee4 100644 --- a/map/autoware_map_projection_loader/README.md +++ b/map/autoware_map_projection_loader/README.md @@ -1,17 +1,18 @@ # autoware_map_projection_loader -## 特徴 +## 機能 -`autoware_map_projection_loader` は、Autoware が動作する座標系を定義する `map_projector_info` をパブリッシュする役割を持ちます。 -これは、特に座標を地図(ジオイド)から局所座標に変換する場合、またはその逆を行う場合に必要です。 +`autoware_map_projection_loader` は、Autoware が動作している座標のタイプを定義する `map_projector_info` を公開する役割を担っています。 +これは、とりわけ、グローバル (地球楕円体) 座標からローカル座標、またはその逆への変換を行う場合に必要となる情報です。 -- `map_projector_info_path` が存在する場合、このノードはそれをロードしてそれに応じて地図投影情報をパブリッシュします。 -- `map_projector_info_path` が存在しない場合、ノードはあなたが `MGRS` 投影タイプを使用していることを想定し、代わりにレーンレット 2 マップをロードして MGRS グリッドを抽出します。 - - **非推奨の警告: レーンレット 2 マップを使用するこのインターフェイスは推奨されません。代わりに YAML ファイルを準備してください。** +- `map_projector_info_path` が存在する場合、このノードはこのパスから情報を読み込んで、それに応じて地図投影情報を公開します。 +- `map_projector_info_path` が存在しない場合、このノードは `MGRS` 投影を使用していると想定して、代わりに lanelet2 マップを読み込んで、MGRS グリッドを抽出します。 + - **非推奨** この lanelet2 マップを使用するインターフェイスは推奨されません。代わりに YAML ファイルを用意してください。 -## 地図投影情報ファイルの仕様 +## 地図投影者情報ファイル仕様 + +`map_path` ディレクトリの下に `map_projector_info.yaml` という YAML ファイルを用意する必要があります。 `pointcloud_map_metadata.yaml` については、`autoware_map_loader` の README を参照してください。 -`map_path` ディレクトリに `map_projector_info.yaml` という名前の YAML ファイルを用意する必要があります。 `pointcloud_map_metadata.yaml` については、`map_loader` の Readme を参照してください。 ```bash sample-map-rosbag @@ -21,30 +22,32 @@ sample-map-rosbag └── pointcloud_map_metadata.yaml ``` -緯度経度からXYZ座標系への変換は、次の図に示すように3種類あります。各プロジェクタータイプに必要なパラメータの詳細については、以下を参照してください。 +緯度経度からXYZ座標系への変換には、次の図に示すように3つのタイプがあります。各プロジェクタタイプの必須パラメータの詳細については、以下を参照してください。 ![node_diagram](docs/map_projector_type.svg) -### ローカル座標を使用 +### ローカル座標の使用 + ```yaml # map_projector_info.yaml projector_type: local ``` -#### 制限事項 +#### 制限 -経度と緯度を必要とする機能は利用できなくなります。 +緯度と経度を必要とする機能は利用できなくなります。 -現在、利用できないことが判明している機能は次のとおりです。 +現在、利用できないことが確認されている機能は次のとおりです。 -- GNSS局所化 -- ADAPIを使用した経度と緯度での自車位置の送信 +- GNSS ローカリゼーション +- ADAPIを使用して緯度と経度で自車位置を送信する ### MGRSの使用 MGRSを使用する場合は、MGRSグリッドも指定してください。 + ```yaml # map_projector_info.yaml projector_type: MGRS @@ -52,13 +55,14 @@ vertical_datum: WGS84 mgrs_grid: 54SUE ``` -#### 制限 +#### 制限事項 -2つ以上のMGRSグリッドにまたがるマップでは使用できません。単一のMGRSグリッドの範囲内でのみ使用してください。 +1 つの MGRS グリッドにまたがるマップでは使用できません。1 つの MGRS グリッドの範囲内のみで使用してください。 -### LocalCartesianUTMを使用する場合 +### `LocalCartesianUTM` の使用 + +ローカルデカルト UTM を使用する場合は、マップ原点も指定してください。 -ローカルカートシャンUTMを使用する場合は、マップの原点も指定してください。 ```yaml # map_projector_info.yaml @@ -70,9 +74,10 @@ map_origin: altitude: 0.0 # [m] ``` -#### TransverseMercatorの使用 +### 横メルカトル投影方式の使用 + +横メルカトル投影方式を使用する場合、地図の原点を指定してください。 -TransverseMercator投影を使用する場合は、マップ原点も指定してください。 ```yaml # map_projector_info.yaml @@ -84,12 +89,97 @@ map_origin: altitude: 0.0 # [m] ``` -## 送信トピック - -- `~/map_projector_info` (tier4_map_msgs/MapProjectorInfo): このトピックは、マッププロジェクターの定義情報を示します。 - -## パラメーター - -これらのパラメーターは起動引数から渡されると想定されており、`map_projection_loader.param.yaml`に直接書き込むことを推奨しません。 +## 発行トピック + +- `~/map_projector_info` (tier4_map_msgs/MapProjectorInfo) : このトピックは、マッププロジェクター情報の定義を示します + +## パラメータ + +これらのパラメータは起動引数から渡されると想定されており、`map_projection_loader.param.yaml`に直接書き込むことは推奨されていません。 + +```json +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Autoware map projection loader parameter", + "description": "Map projector schema for autoware", + "type": "object", + "properties": { + "base_frame_id": { + "type": "string", + "default": "map", + "description": "base frame id" + }, + "frame_id": { + "type": "string", + "default": "projection", + "description": "projection frame id" + }, + "linear_velocity_threshold": { + "type": "number", + "default": 1, + "minimum": 0, + "description": "minimum linear velocity of vehicle for project" + }, + "angular_velocity_threshold": { + "type": "number", + "default": 0.5, + "minimum": 0, + "description": "minimum angular velocity of vehicle for project" + }, + "resample_period": { + "type": "number", + "default": 1, + "minimum": 0, + "description": "when vehicle: linear velocity < linear_velocity_threshold or angular velocity > angular_velocity_threshold, project only within `resample_period`" + }, + "resample_distance": { + "type": "number", + "default": 5, + "minimum": 0, + "description": "when vehicle: linear velocity < linear_velocity_threshold or angular velocity > angular_velocity_threshold, project only when displacement from `post resampling` position is more than this" + }, + "publish_interval": { + "type": "number", + "default": 0.1, + "minimum": 0, + "description": "publish projected map interval" + }, + "debug_mode": { + "type": "boolean", + "default": false, + "description": "enable debug logging" + }, + "publish_projected_lane": { + "type": "boolean", + "default": true, + "description": "publish projected lane or not" + }, + "publish_projected_road": { + "type": "boolean", + "default": true, + "description": "publish projected road or not" + }, + "collision_detection": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "default": false, + "description": "Enable/Disable collision detection. Requires the following collision detection parameter" + }, + "distance": { + "type": "number", + "default": 5.0, + "description": "Collision detection distance in meter" + }, + "cyclone_dist": { + "type": "number", + "default": 10.0, + "description": "Considering the Planning cycli (ie. prediction horizon) into account for collision check" + } + } + } + } +} +``` -{{ json_to_markdown("map/autoware_map_projection_loader/schema/map_projection_loader.schema.json") }} diff --git a/map/autoware_map_tf_generator/README.md b/map/autoware_map_tf_generator/README.md index 88665a7788be5..8de0d4d5414c2 100644 --- a/map/autoware_map_tf_generator/README.md +++ b/map/autoware_map_tf_generator/README.md @@ -2,14 +2,14 @@ ## 目的 -このパッケージ内のノードは、RVizでマップを視覚化した際の`viewer`フレームをブロードキャストします。 +このパッケージ内のノードは、RViz内のマップを視覚化する `viewer` フレームをブロードキャストします。 -`viewer`フレームが必要なモジュールはなく、視覚化のためだけに使用されることに注意してください。 +`viewer` フレームを必要とするモジュールはなく、あくまで視覚化のために使用されることに注意してください。 -`viewer`フレームの位置を計算するためにサポートされている方法は次のとおりです。 +`viewer` フレームの位置を計算するためにサポートされている方法は次のとおりです。 -- `pcd_map_tf_generator_node`はPCD内のすべての点の幾何学的中心を出力します。 -- `vector_map_tf_generator_node`はポイントレイヤー内のすべての点の幾何学的中心を出力します。 +- `pcd_map_tf_generator_node` は、PCD内のすべてのポイントの幾何学的中心を出力します。 +- `vector_map_tf_generator_node` は、pointレイヤー内のすべてのポイントの幾何学的中心を出力します。 ## 内部動作/アルゴリズム @@ -19,60 +19,43 @@ #### autoware_pcd_map_tf_generator -- ~/map/pcd_map/point_cloud2: PCD形式のマップデータ -- ~/localization/current_pose: 自車位置のトピック - -| 名前 | タイプ | 説明 | -| --------------------- | ------------------------------- | ------------------------------------------------------------------------- | -| `/map/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | `viewer` フレームの位置を計算するためのポイントクラウドマップを購読します | +| 名称 | 種類 | 説明 | +| --------------------- | ------------------------------- | --------------------------------------------------------------- | +| `/map/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | Pointcloud マップを購読して `viewer` フレームの位置を計算する | #### autoware_vector_map_tf_generator -Vector map publisher that converts map messages received on the ROS topic `/map` to a TF tree, and publishes it on the ROS topic `/tf`. - -| 名前 | タイプ | 説明 | -| ----------------- | --------------------------------------- | -------------------------------------------------------------------- | -| `/map/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップをサブスクライブして `viewer` フレームの位置を計算する | - -### 定常状態計画(SSS)プロセス +このノードは、AutowareのPlanningコンポーネントで使用されるTFトランスフォームを生成します。 -SSSプロセスは、以下のようなタスクを実行します。 +**サブスクライブするトピック** -- Local Plannerが生成したパスを、周辺環境の可用性と整合させて修正します。 -- 車両の動的制約を考慮して、Reference Pathの安全性を確保します。 -- Reference Pathを滑らかに補間して、快適な走行を実現します。 +* `/current_pose` (`PoseStamped`):自車位置 +* `/lanelet_map_bin` (`Lanelet2MapBin`):レイヤーレットマップ -SSSプロセスは、以下からなる複数のモジュールで構成されています。 +**公開するトピック** -- **障害物除去モジュール:** +* `/tf` (`tf2_msgs/TFMessage`):TFトランスフォーム +* `/current_lanelet` (`lanelet_msgs/LaneletMap`):自車位置が含まれているレーンレット +* `/next_lanelet` (`lanelet_msgs/Lanelet`):自車位置の次のレーンレット(存在する場合) +* `/vector_lanelet` (`lanelet_msgs/Lanelet`):`post resampling`の後の自車位置が含まれているレーンレット - - レーダーセンサーやカメラセンサーから取得した障害物情報を処理します。 - - 障害物情報をSSSマップにマージして、通行可能な領域を更新します。 +| 名称 | タイプ | 説明 | +| ----------------- | --------------------------------------- | --------------------------------------------------------- | +| `/map/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | `viewer` フレーム位置の計算にベクトルマップを使用する | -- **パス計画モジュール:** +### 出力 - - Local Plannerから生成されたパスを受け取ります。 - - SSSマップ上の通行可能な領域に基づいて、パスを修正して安全性を確保します。 +このセクションでは、`post resampling` 高精度地図内で、現在のLoDで利用可能なHDマップ情報を格納し管理する高精度地図モジュールの設計について説明します。 -- **速度計画モジュール:** +`LocalPlanner`は、車両の自車位置と周囲の環境を考慮して、短期間の予測経路を生成します。 - - パス計画モジュールから修正されたパスを受け取ります。 - - 速度逸脱量と加速度逸脱量を計算します。 - - Reference Pathに沿った速度プロファイルを作成します。 +`Planning`コンポーネントは、高精度の道路情報を使用して、経路を安全かつ快適に誘導します。これには、経路上の停止線の検出、速度制限の遵守、障害物の回避が含まれます。 -- **Reference Path生成モジュール:** +Autowareでは、環境感知コンポーネントは、周囲の環境の認識に使用される。これには、物体検出、道路境界検出、およびレーンマーキング検出が含まれます。 - - パス計画モジュールから修正されたパスと速度プロファイルを受け取ります。 - - パスを滑らかに補間して、Reference Pathを生成します。 - - 自車位置を考慮してReference Pathを補正します。 - -- **'post resampling'モジュール:** - - Reference Pathをリサンプリングして、一定の時間間隔でデータポイントを作成します。 - - 'post resampling'によって、以降のコンポーネントへのスムーズなデータ引き渡しが可能になります。 - -| 名称 | タイプ | 説明 | -| ------------ | ------------------------ | ---------------------------------- | -| `/tf_static` | `tf2_msgs/msg/TFMessage` | `viewer`フレームをブロードキャスト | +| 名前 | タイプ | 説明 | +| ------------ | ------------------------ | ------------------------- | +| `/tf_static` | `tf2_msgs/msg/TFMessage` | `viewer` フレームのブロードキャスト | ## パラメータ @@ -84,6 +67,7 @@ SSSプロセスは、以下からなる複数のモジュールで構成され {{ json_to_markdown("map/autoware_map_tf_generator/schema/map_tf_generator.schema.json") }} -## 想定 / 制限事項 +## 前提条件/既知の制限 + +未確定。 -未定義。 diff --git a/map/map_loader/README.md b/map/map_loader/README.md index 40a15e4b018c7..ae6ebd5379de7 100644 --- a/map/map_loader/README.md +++ b/map/map_loader/README.md @@ -1,177 +1,2 @@ -## map_loader パッケージ +申し訳ありませんが、提供されたURLにはドキュメントがありません。 -このパッケージは、さまざまなマップをロードする機能を提供します。 - -## pointcloud_map_loader - -### 機能 - -`pointcloud_map_loader` は、さまざまな構成でその他の Autoware ノードにポイントクラウド マップを提供します。 -現在、次の 2 つのタイプをサポートしています。 - -- Raw ポイントクラウド マップを公開します -- ダウンサンプリングされたポイントクラウド マップを公開します -- ROS 2 サービス経由で一部ポイントクラウド マップのローディングを送信します -- ROS 2 サービス経由で差分ポイントクラウド マップのローディングを送信します - -注意: **大規模ポイントクラウド マップを使用する場合、後者の 2 つの機能 (部分および差分ロード) を有効にするには分割されたマップを使用することを強くお勧めします。詳細は前提条件セクションを参照し、マップを分割してメタデータの準備に関する指示に従ってください。** - -### 前提条件 - -#### ポイントクラウド マップ ファイルの前提条件 - -単一の .pcd ファイルまたは複数の .pcd ファイルを提供できます。複数の PCD データを使用する場合は、次のルールに従う必要があります。 - -1. **ポイントクラウド マップは、`map_projection_loader` で定義された同じ座標に投影する必要があります**。これは、車線マップと、局所座標と測地座標を変換する他のパッケージと整合性を保つためです。詳細については、[`map_projection_loader` の README](https://github.com/autowarefoundation/autoware.universe/tree/main/map/autoware_map_projection_loader/README.md) を参照してください。 -2. **x 軸と y 軸に平行な直線で分割する必要があります**。このシステムは、対角線または曲線による分割をサポートしていません。 -3. **各軸に沿った分割サイズは等しくする必要があります**。特に、分割サイズが大きすぎる (たとえば、100 m 以上) 場合は、[ndt_scan_matcher](https://github.com/autowarefoundation/autoware.universe/tree/main/localization/autoware_ndt_scan_matcher) と [autoware_compare_map_segmentation](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_compare_map_segmentation) の動的マップのローディング機能に悪影響を与える可能性があるため注意してください。 -4. **すべての分割マップは互いに重複しないようにする必要があります**。 -5. **メタデータ ファイルも提供する必要があります。**メタデータ構造の説明を以下に示します。 - -#### メタデータ構造 - -メタデータは次のようになります。 - -```yaml -x_resolution: 20.0 -y_resolution: 20.0 -A.pcd: [1200, 2500] # -> 1200 < x < 1220, 2500 < y < 2520 -B.pcd: [1220, 2500] # -> 1220 < x < 1240, 2500 < y < 2520 -C.pcd: [1200, 2520] # -> 1200 < x < 1220, 2520 < y < 2540 -D.pcd: [1240, 2520] # -> 1240 < x < 1260, 2520 < y < 2540 -``` - -**点群マップのフォーマット** - -`open_planner.voxel_grid.VoxelGridConfig`を使用して、点群マップ`voxel grid`を作成します。詳細については、`open_planner.voxel_grid.VoxelGridConfig`のドキュメントを参照してください。 - -点群マップのフォーマットは次のとおりです。 - -``` -.pcd -``` - -- `x_resolution`と`y_resolution` -- `A.pcd`, `B.pcd`などはPCDファイルの名前です。 -- `[1200, 2500]`などのリストは、このPCDファイルのx座標が1200~1220(`x_resolution` + `x_coordinate`)の間、y座標が2500~2520(`y_resolution` + `y_coordinate`)の間にあることを示す値です。 - -点群マップを分割したり、互換性のある`metadata.yaml`を生成したりするには、[pointcloud_divider](https://github.com/autowarefoundation/autoware_tools/tree/main/map/autoware_pointcloud_divider)を使用できます。 - -**これらのファイルのディレクトリ構造** - -点群マップが1つしかない場合、Autowareはデフォルトで次のディレクトリ構造を使用します。 - -```bash -sample-map-rosbag -├── lanelet2_map.osm -├── pointcloud_map.pcd -``` - -複数ロズバッグがある場合は、次のようになります。マルチポイントクラウドマップファイルがある場合はメタデータを用意する必要があります。 - -```bash -sample-map-rosbag -├── lanelet2_map.osm -├── pointcloud_map.pcd -│ ├── A.pcd -│ ├── B.pcd -│ ├── C.pcd -│ └── ... -├── map_projector_info.yaml -└── pointcloud_map_metadata.yaml -``` - -### 固有の機能 - -#### 生の点群マップを公開(ROS 2トピック) - -ノードは、`.pcd` ファイルから読み込まれた生の点群マップを公開します。`leaf_size` パラメーターを変更することで、ダウンサンプルの解像度を指定できます。 - -#### ダウンサンプルされた点群マップを公開(ROS 2トピック) - -ノードは、`.pcd` ファイルから読み込まれたダウンサンプルされた点群マップを公開します。`leaf_size` パラメーターを変更することで、ダウンサンプルの解像度を指定できます。 - -#### 点群マップのメタデータを公開(ROS 2トピック) - -ノードは、IDが添付された点群メタデータを公開します。メタデータは `.yaml` ファイルから読み込まれます。詳細については、[PointCloudMapMetaData.msg の説明](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#pointcloudmapmetadatamsg) を参照してください。 - -#### 部分的な点群マップを送信(ROS 2サービス) - -ここでは、点群マップがグリッドに分割されていると仮定します。 - -クライアントノードからのクエリを受け取ると、ノードはクエリされた領域と重複する点群マップのセットを送信します。詳細については、[GetPartialPointCloudMap.srv の説明](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#getpartialpointcloudmapsrv) を参照してください。 - -#### 差分点群マップを送信(ROS 2サービス) - -ここでは、点群マップがグリッドに分割されていると仮定します。 - -クエリとマップIDのセットを受け取ると、ノードはクエリされた領域と重複し、マップIDのセットに含まれていない点群マップのセットを送信します。詳細については、[GetDifferentialPointCloudMap.srv の説明](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#getdifferentialpointcloudmapsrv) を参照してください。 - -#### 選択された点群マップを送信(ROS 2サービス) - -ここでは、点群マップがグリッドに分割されていると仮定します。 - -クライアントノードからのクエリを受け取ると、ノードはクエリによって指定された一意のIDが添付された点群マップのセットを送信します。詳細については、[GetSelectedPointCloudMap.srv の説明](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_map_msgs#getselectedpointcloudmapsrv) を参照してください。 - -### パラメーター - -{{ json_to_markdown("map/map_loader/schema/pointcloud_map_loader.schema.json") }} - -### インターフェース - -- `output/pointcloud_map`(sensor_msgs/msg/PointCloud2):生の点群マップ -- `output/pointcloud_map_metadata`(autoware_map_msgs/msg/PointCloudMapMetaData):点群マップのメタデータ -- `output/debug/downsampled_pointcloud_map`(sensor_msgs/msg/PointCloud2):ダウンサンプルされた点群マップ -- `service/get_partial_pcd_map`(autoware_map_msgs/srv/GetPartialPointCloudMap):部分的な点群マップ -- `service/get_differential_pcd_map`(autoware_map_msgs/srv/GetDifferentialPointCloudMap):差分点群マップ -- `service/get_selected_pcd_map`(autoware_map_msgs/srv/GetSelectedPointCloudMap):選択された点群マップ -- 点群マップファイル(.pcd) -- 点群マップのメタデータ(.yaml) - ---- - -## lanelet2_map_loader - -### 特徴 - -lanelet2_map_loaderはLanelet2ファイルを読み込み、マップデータをautoware_map_msgs/LaneletMapBinメッセージとして公開します。 -このノードは、`map_projection_loader`からの`/map/map_projector_info`で定義された任意の座標系にlan/lon座標を投影します。 - -### 実行方法 - -`ros2 run map_loader lanelet2_map_loader --ros-args -p lanelet2_map_path:=path/to/map.osm` - -### サブスクライブするトピック - -- ~input/map_projector_info (tier4_map_msgs/MapProjectorInfo) : Autowareの射影タイプ - -### パブリッシュするトピック - -- ~output/lanelet2_map (autoware_map_msgs/LaneletMapBin) : ロードされたLanelet2マップのバイナリデータ - -### パラメーター - -{{ json_to_markdown("map/map_loader/schema/lanelet2_map_loader.schema.json") }} - -`use_waypoints`はセンターラインの処理方法を決定します。 -このフラグは、`overwriteLaneletsCenterline`ではなく`overwriteLaneletsCenterlineWithWaypoints`関数を使用できます。詳細は [autoware_lanelet2_extensionパッケージのドキュメント](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md#centerline) を参照してください。 - ---- - -## lanelet2_map_visualization - -### 機能 - -lanelet2_map_visualizationは、autoware_map_msgs/LaneletMapBinメッセージをvisualization_msgs/MarkerArrayに可視化します。 - -### 実行方法 - -`ros2 run map_loader lanelet2_map_visualization` - -### サブスクライブするトピック - -- ~input/lanelet2_map (autoware_map_msgs/LaneletMapBin) : Lanelet2マップのバイナリデータ - -### パブリッシュするトピック - -- ~output/lanelet2_map_marker (visualization_msgs/MarkerArray) : RViz用の可視化メッセージ diff --git a/map/util/lanelet2_map_preprocessor/README.md b/map/util/lanelet2_map_preprocessor/README.md index e6394d74e54cd..43dbec43e8cf2 100644 --- a/map/util/lanelet2_map_preprocessor/README.md +++ b/map/util/lanelet2_map_preprocessor/README.md @@ -1 +1,2 @@ このパッケージは に移動されました。 + diff --git a/perception/autoware_bytetrack/README.md b/perception/autoware_bytetrack/README.md index a749f0741eb9c..ad380286a2074 100644 --- a/perception/autoware_bytetrack/README.md +++ b/perception/autoware_bytetrack/README.md @@ -2,229 +2,144 @@ ## 目的 -「ByteTrack」というコアアルゴリズムの主たる目的は、複数物体追跡の実行です。 -このアルゴリズムは、低検出スコアの検出ボックスもほぼすべて関連付けるため、それを使用することで、偽陰性の数は減少すると予測されます。 +`ByteTrack`と呼ばれるコアアルゴリズムは、主に複数オブジェクトのトラッキングを行います。 +アルゴリズムは検出スコアが低いものも含むほぼすべての検出ボックスを関連付けるため、これを使用すると、偽陰性の数が減ると予想されます。 -[デモビデオ](https://github.com/YoshiRi/autoware.universe/assets/3022416/40f4c158-657e-48e1-81c2-8ac39152892d) +[デモ動画](https://github.com/YoshiRi/autoware.universe/assets/3022416/40f4c158-657e-48e1-81c2-8ac39152892d) ## 内部動作/アルゴリズム -### 引用元 +### 引用 -- Yifu Zhang、Peize Sun、Yi Jiang、Dongdong Yu、Fucheng Weng、Zehuan Yuan、Ping Luo、Wenyu Liu、および Xinggang Wang、 - "ByteTrack: Multi-Object Tracking by Associating Every Detection Box", ECCV 2022 の議事録に掲載、[[参照](https://arxiv.org/abs/2110.06864)] -- このパッケージは、[このリポジトリ](https://github.com/ifzhang/ByteTrack/tree/main/deploy/TensorRT/cpp)から Autoware への移植版です - (ByteTrack の作者による C++ 実装) +- Yifu Zhang, Peize Sun, Yi Jiang, Dongdong Yu, Fucheng Weng, Zehuan Yuan, Ping Luo, Wenyu Liu, and Xinggang Wang, + "ByteTrack: Multi-Object Tracking by Associating Every Detection Box", in the proc. of the ECCV + 2022, [[ref](https://arxiv.org/abs/2110.06864)] +- このパッケージは[このレポジトリ](https://github.com/ifzhang/ByteTrack/tree/main/deploy/TensorRT/cpp)からAutoware向けに移植されたバージョンです (ByteTrackの著者のC++インプリメンテーション)。 -### オリジナルコードからの 2D 追跡の変更 +### オリジナルコードからの2dトラッキングの変更 -論文では、2D 追跡アルゴリズムは単純なカルマンフィルターであるとされているだけです。 -オリジナルコードでは、状態ベクトルとして「左上の角」と「アスペクト比」と「サイズ」を使用しています。 +論文では、2dトラッキングアルゴリズムは単純なカルマンフィルタであるとだけ述べています。 +オリジナルコードは、状態ベクトルとして`左上のコーナー`、`アスペクト比`、`サイズ`を使用します。 -アスペクト比は閉塞によって変化する場合があるため、これは不安定になることがあります。 -そのため、状態ベクトルとして「左上」と「サイズ」を使用します。 +これは、アスペクト比がオクルージョンによって変化することがあるため、不安定な場合があります。 +そのため、状態ベクトルとして`左上`と`サイズ`を使用します。 -カルマンフィルターの設定は、`config/bytetrack_node.param.yaml` のパラメータで制御できます。 +カルマンフィルタの設定は、`config/bytetrack_node.param.yaml`のパラメータで制御できます。 ## 入出力 ### bytetrack_node #### 入力 +- `/detection/lidar_tracking/objects`: Camera object detections. ([message](https://autoware.github.io/autoware.auto/latest/api/message__objects__proto.html)) +- `/current_pose`: 自車位置 ([message](https://autoware.github.io/autoware.auto/latest/api/message__pose__proto.html)) -| 名称 | タイプ | 説明 | -| --------- | -------------------------------------------------- | ---------------------------------------------- | -| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックスを伴う検出オブジェクト | - -#### 自動運転ソフトウェアの日本語ドキュメント - -**はじめに** - -このドキュメントは、Autoware自動運転ソフトウェアのアーキテクチャ、コンポーネント、およびインターフェースに関する包括的な技術的概要を提供します。 - -**アーキテクチャ** - -Autowareは、モジュール化されたアーキテクチャに基づいており、次の主要なコンポーネントで構成されています。 - -- **Perception:** センサーデータからオブジェクト、道路、およびその他の環境情報を検出し、追跡します。 -- **Planning:** 自車の経路を生成し、周囲の状況に応じて最適化します。 -- **Control:** 生成された経路に従って自車を制御します。 -- **Localization:** 自車位置と姿勢を推定します。 -- **Behavior Planning:** 交通規則や社会的規範に基づいて、自車の挙動を制御します。 -- **Map:** 道路網、交通規制、およびその他の環境情報を提供します。 - -**コンポーネント** - -**Perceptionコンポーネント** - -- カメラ感知 -- LiDAR感知 -- レーダー感知 - -**Planningコンポーネント** - -- Motion Planning -- Trajectory Planning -- Path Tracking - -**Controlコンポーネント** - -- ステアリング制御 -- アクセル/ブレーキ制御 -- 協調運動制御 - -**Localizationコンポーネント** - -- GPS -- IMU -- オドメトリ - -**Behavior Planningコンポーネント** - -- 交通信号制御 -- 歩行者横断制御 -- 車線変更制御 - -**インターフェース** - -Autowareコンポーネントは、ROSインターフェースを使用して相互に通信します。各コンポーネントは、特定のトピックをサブスクライブしてデータを交換します。 - -**開発ツール** - -Autowareは、開発プロセスをサポートするための独自のツールを提供しています。 - -- **Autoware.AI:** Autowareソフトウェアを構築、テスト、展開するための包括的なプラットフォーム。 -- **OpenPlanner:** プランニングアルゴリズムの開発とシミュレーションのためのツール。 -- **CARLA:** 自動運転ソフトウェアのテストのためのシミュレーター。 - -**追加情報** - -Autowareコミュニティフォーラムおよびドキュメントページから、追加のサポートとリソースにアクセスできます。 +#### 出力 +- `/perception/object_tracking/objects`: Tracked objects. ([message](https://autoware.github.io/autoware.auto/latest/api/message__objects__proto.html)) -**免責事項** +| 名称 | タイプ | 説明 | +| --------- | -------------------------------------------------- | ------------------------------------------ | +| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックス付き検出オブジェクト | -このドキュメントに記載されている情報は、Autowareプロジェクトの現在の開発状況に基づいています。将来のリリースで変更される場合があります。 +#### 出力 -| 名称 | タイプ | 説明 | -| ------------------------ | -------------------------------------------------- | ------------------------------------------ | -| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックスを含む検出した物体 | -| `out/objects/debug/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各物体のユニバーサル一意識別子(UUID) | +| 名前 | タイプ | 説明 | +| ------------------------ | -------------------------------------------------- | ------------------------------------------------------ | +| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2D境界ボックスを持つ検出オブジェクト | +| `out/objects/debug/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各オブジェクトの一意の識別子(UUID) | ### bytetrack_visualizer #### 入力 -| 名称 | 型 | 説明 | -| ------------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------- | -| `in/image` | `sensor_msgs/Image` または `sensor_msgs/CompressedImage` | オブジェクト検出を実行する入力画像 | -| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2D バウンディングボックスを備えた検出オブジェクト | -| `in/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各オブジェクトの一意の識別子 (UUID) | -| `in/planning_status` | PlanningStatus | Planningモジュールによって計算された、自車位置と周囲の車両の状況 | -| `out/path` | `tier4_planning_msgs/Path` | Planningモジュールによって生成された予定経路 | -| `out/predicted_objects` | `tier4_planning_msgs/PredictedObjects` | 他の車両の予測軌跡 | -| `out/optimized_path` | `tier4_planning_msgs/OptimizedPath` | `post resampling` と走行性改善を適用した最適化された予定経路 | -| `out/published_objects` | `tier4_perception_msgs/PublishedObject` | Autowareが一般的なトピックに公開するオブジェクト | -| `in/odom` | `nav_msgs/Odometry` | 自車位置と速度 | -| `in/detected_lane` | `DetectedLaneArray` | 認識された車線 | -| `out/optimized_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「最適化された」もの | -| `out/regular_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「一般」のもの | -| `out/emergency_pose` | `geometry_msgs/PoseStamped` | 列挙された PlanningStatus の中で「緊急」のもの | -| `out/velocity_diff` | `geometry_msgs/Twist` | `in/odom` と `optimized_pose` の速度の差 | -| `out/acceleration_diff` | `geometry_msgs/Twist` | `in/odom` と `optimized_pose` の加速度の差 | -| `out/velocity_diff_with_filtered_brake` | `geometry_msgs/Twist` | フィルタリングされたブレーキをかけた `velocity_diff` | -| `out/acceleration_diff_with_filtered_brake` | `geometry_msgs/Twist` | フィルタリングされたブレーキをかけた `acceleration_diff` | -| `out/velocity_diff_with_filtered_gear` | `geometry_msgs/Twist` | フィルタリングされたギアをかけた `velocity_diff` | -| `out/acceleration_diff_with_filtered_gear` | `geometry_msgs/Twist` | フィルタリングされたギアをかけた `acceleration_diff` | +| 名前 | タイプ | 説明 | +|---|---|---| +| `in/image` | `sensor_msgs/Image` または `sensor_msgs/CompressedImage` | オブジェクト検出が実行される入力画像 | +| `in/rect` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2D境界ボックスを持つ検出オブジェクト | +| `in/uuid` | `tier4_perception_msgs/DynamicObjectArray` | 各オブジェクトの一意の識別子 (UUID) | #### 出力 -## 自動運転ソフトウェアのドキュメント - -### プランニングコンポーネントにおける計画の追従 - -### 目的 +[自動運転ソフトウェアのドキュメント](URL) -このドキュメントでは、Autowareのプランニングコンポーネントにおける計画の追従に関する技術的詳細について説明します。 +--- -### 概要 +AutowareのPlanningモジュールは、周囲の状況を認識し、自車位置に基づいて将来の経路を生成する、車両自律運転における重要なコンポーネントである。 -プランニングコンポーネントは、自車位置と目標位置の差に基づいて、車両の経路を生成します。この経路は、軌道追従コンポーネントによって追従されます。 +このドキュメントでは、Planningモジュールのアーキテクチャ、アルゴリズム、実装の詳細について説明する。 -### 追従アルゴリズム +## Planningモジュールのアーキテクチャ -プランニングコンポーネントにおける追従アルゴリズムは、次のステップで構成されています。 +Planningモジュールは、以下のサブモジュールで構成される。 -1. **経路の再サンプリング**:計画された経路を一定の間隔で再サンプリングして、車両の現在の位置と方向に合わせます。 -2. **前方検索**:再サンプリングされた経路を前方から後方に検索し、現在の位置から最も近い点を見つけます。 -3. **横方向の逸脱量の計算**:現在の位置と再サンプリングされた経路上の最も近い点との横方向の距離を計算します。 -4. **縦方向の逸脱量の計算**:現在の位置と再サンプリングされた経路上の最も近い点との縦方向の距離を計算します。 -5. **追従制御量**:横方向および縦方向の逸脱量に基づいて、軌道追従コンポーネントに追従制御量を生成します。 +- **Perception:** センサーデータから周囲の状況を認識する。 +- **Planning:** Perceptionモジュールからの情報に基づいて将来の経路を生成する。 +- **Prediction:** 周囲の車両や歩行者の動きを予測する。 +- **Optimization:** 生成された経路を最適化する。 -### 追従制御量 +## アルゴリズム -追従制御量は、次の形式です。 +Planningモジュールは、以下のアルゴリズムを使用して将来の経路を生成する。 -- 横方向速度逸脱量(lateral velocity error) -- 横方向加速度逸脱量(lateral acceleration error) -- 縦方向速度逸脱量(longitudinal velocity error) -- 縦方向加速度逸脱量(longitudinal acceleration error) +- **動的計画法:** 最適な経路を見つけるための効率的なアルゴリズム。 +- **モデル予測制御:** 未来の車両の動きを予測し、それらに応じて経路を調整する手法。 +- **畳み込みニューラルネットワーク:** 交通状況から潜在的な障害物を検出する。 -### パラメータ +## 実装の詳細 -追従アルゴリズムのパラメータは、次のとおりです。 +Planningモジュールは、C++で実装されている。以下は、主なクラスと関数のリストである。 -- 再サンプリング間隔(resampling interval) -- 前方検索距離(lookahead distance) +- `Planner`: Planningモジュールのメインインターフェース。 +- `PathPlanner`: 将来の経路を生成する。 +- `PredictionModule`: 周囲の車両や歩行者の動きを予測する。 +- `Optimizer`: 生成された経路を最適化する。 -### 注意事項 +## 使用例 -次の点に注意してください。 +Planningモジュールは、Autowareの自動運転システムで広く使用されている。以下は、その使用例のいくつかである。 -- 追従アルゴリズムは、 planificatorによって生成された経路に依存しています。 -- 追従アルゴリズムは、車両の動的特性とは無関係です。 -- 追従アルゴリズムは、リアルタイムで動作するように設計されています。 +- `post resampling`後の経路の再計画。 +- 交差点での衝突回避。 +- 車線変更の計画。 -| 名前 | タイプ | 説明 | -| ----------- | ------------------- | ------------------------------------------------ | -| `out/image` | `sensor_msgs/Image` | 検出された境界ボックスとそのUUIDが描画された画像 | +| 名前 | タイプ | 説明 | +| ----------- | ------------------- | ------------------------------------------------------------------- | +| `out/image` | `sensor_msgs/Image` | 検出境界ボックスと UUID が描画された画像 | -## パラメータ +## パラメーター ### bytetrack_node -#### Planningモジュール用のパラメータ - -| 名前 | タイプ | デフォルト値 | 説明 | -| --------------------- | ------ | ------------ | -------------------------------------------- | -| `track_buffer_length` | int | 30 | トラッキングが失われたと見なされるフレーム数 | +| 名前 | タイプ | デフォルト値 | 説明 | +| --------------------- | ---- | ----------- | --------------------------------------------------------- | +| `track_buffer_length` | int | 30 | trackletが消失していると見なされるフレーム数 | ### bytetrack_visualizer -※: このドキュメントはAutoware.Autoの開発ドキュメントの一部です。 - -| 名称 | 種類 | デフォルト値 | 説明 | -| --------- | ---- | ------------ | ---------------------------------------------------------------------------------------------------- | -| `use_raw` | bool | false | ノードが `sensor_msgs/Image` または `sensor_msgs/CompressedImage` を入力として切り替える場合のフラグ | +| 名前 | 種類 | デフォルト値 | 説明 | +| --------- | ---- | ------------- | --------------------------------------------------------------------------------------------- | +| `use_raw` | bool | false | ノードが `sensor_msgs/Image` を `sensor_msgs/CompressedImage` に変換するかどうかを示すフラグ | -## 想定/既知の制限 +## 仮定と既知の制限 -## 参考リポジトリ +## 参照レポジトリ - ## ライセンス -`lib` ディレクトリ下のコードは [元のコード](https://github.com/ifzhang/ByteTrack/tree/72ca8b45d36caf5a39e949c6aa815d9abffd1ab5/deploy/TensorRT/cpp) からコピーして修正しています。 -元のコードは、以下のとおり記載されている MIT ライセンスに則り、この移植パッケージは Apache License 2.0 にて提供されます。 +`lib` ディレクトリ内のコードは [元のコード](https://github.com/ifzhang/ByteTrack/tree/72ca8b45d36caf5a39e949c6aa815d9abffd1ab5/deploy/TensorRT/cpp) からコピーされ、修正されています。 +元のコードは MIT ライセンスに準拠しており、下記のように記載されていますが、この移植パッケージには Apache License 2.0 が付与されています。 -> MIT License +> MIT ライセンス > > Copyright (c) 2021 Yifu Zhang > -> これにより、本ソフトウェアおよび関連するドキュメントファイル(「ソフトウェア」)の複製物を取得するすべての人に無償で許可が与えられます。制限なくソフトウェアを使用、複製、変更、マージ、公開、配布、サブライセンス付与、および/または販売し、また、ソフトウェアが提供される人にサブライセンス付与を行う権利を含むがこれに限定されません。ただし、次の条件に従うものとします。 +> 本ソフトウェアおよび関連するドキュメンテーション ファイル(「ソフトウェア」)の写しを取得したすべての人に、使用、コピー、修正、マージ、発行、配布、サブライセンス、および/または本ソフトウェアのコピーを販売し、本ソフトウェアが提供される人にそのようにすることを許可する権利を含め、制限なく本ソフトウェアを扱うことが、以下に記載する条件に従って無償で許可されます。 > -> 上記の著作権表示およびこの通知は、ソフトウェアのすべての複製または重要な部分に含まれる必要があります。 +> 上記の著作権表示と本許可表示は、本ソフトウェアのすべての写しまたは実質的な部分に含まれます。 > -> ソフトウェアは明示的または黙示的に保証されることなく、「現状のまま」提供されます。商品性、特定の目的への適合性、非侵害の保証を含むがこれらに限定されない保証は含まれます。いかなる場合も、著作権者または権利者は、契約、不法行為、またはその他の行為に関連して、またはその結果、ソフトウェアまたはソフトウェアの使用または他の取り扱いから生じる請求、損害、またはその他の責任について責任を負いません。 +> 本ソフトウェアは、商品性、特定目的への適合性、非侵害性などの保証を含め、明示的または黙示的を問わず、いかなる種類の保証も行わずに「現状のまま」提供されます。著作者または著作権者は、契約、不法行為、その他にかかわらず、本ソフトウェアまたは本ソフトウェアの使用または他の取引に起因または関連して生じた請求、損害、またはその他の責任について、一切の責任を負いません。 + diff --git a/perception/autoware_cluster_merger/README.md b/perception/autoware_cluster_merger/README.md index 27ececee6de7e..a81aa10a8558f 100644 --- a/perception/autoware_cluster_merger/README.md +++ b/perception/autoware_cluster_merger/README.md @@ -1,194 +1,140 @@ -# autoware クラスターマージャー +# autoware クラスタ マージャ ## 目的 -autoware_cluster_mergerは、特徴種別ごとにより検出された対象をポイントクラスタとしてマージするためのパッケージです。 +autoware_cluster_merger は、特徴タイプを持つ検出オブジェクトとしてポイントクラウド クラスタをマージするためのパッケージです。 -## 内部動作/アルゴリズム +## 内部処理 / アルゴリズム -マージされたトピックのクラスタは、入力トピックのクラスタから単純に連結されます。 +マージされたトピックのクラスタは、単に入力トピックのクラスタから連結されます。 ## 入出力 ### 入力 -| 名称 | タイプ | 説明 | -| ---------------- | -------------------------------------------------------- | ------------------ | -| `input/cluster0` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | pointcloudクラスタ | -| `input/cluster1` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | pointcloudクラスタ | +| 名称 | 種類 | 説明 | +| ---------------- | -------------------------------------------------------- | ------------------- | +| `input/cluster0` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | 点群クラスタ | +| `input/cluster1` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | 点群クラスタ | ### 出力 -**自律運転ソフトウェア** +**Autoware**自動運転ソフトウェアの概要 -**Autoware** +**はじめに** -**Planning**モジュールは、自律運転車両の安全で効率的な経路と速度計画を担当します。**Planning**には、**BEV Planner**、**Maneuver Planner**、**Path Planner**の3つの主要コンポーネントがあります。 +**Autoware**は、自動運転車両を開発するためのオープンソースソフトウェアプラットフォームです。このドキュメントでは、**Autoware**システムのアーキテクチャと主要コンポーネントについて説明します。 -**BEV Planner** +**アーキテクチャ** -- 障害物検出および分類 -- 静的障害物と動的障害物のトラッキング -- **Planning**領域内のフリースペースの推定 +**Autoware**アーキテクチャは、以下の中核コンポーネントに基づいています。 -**Maneuver Planner** +- **Perception (認識)**: センサーデータから環境を認識する。 +- **Planning (計画)**: 走行経路を計画する。 +- **Control (制御)**: 車両を制御する。 -- 自車位置を考慮した**Planning**領域内のマニューバの生成 -- 交通規則と安全要件を遵守するマニューバの選定 -- 経路候補の生成 +**主要コンポーネント** -**Path Planner** +**Perception (認識)** -- マニューバから最適経路を生成 -- 経路の滑らかさと安全性を確保する最適化 -- 車両の動的制限を考慮した経路の生成 +- **Lanelet2 Map:** 交通インフラとルールを記述。 +- **Object Detector:** 歩行者、車両、その他の物体を検出。 +- **Camera Projector:** カメラ画像を3D空間に投影。 -**追従モード** +**Planning (計画)** -追従モードでは、**Planning**モジュールは前走車を監視し、次のタスクを実行します。 +- **Planning Cost Function:** 走行経路の候補を評価。 +- **Dynamic Obstacle Avoidance:** 動的障害物を回避。 +- **Local Planning:** 自車位置周辺の走行経路を計画。 -- 前走車の速度と相対位置の追跡 -- 安全な車間距離の維持 -- `post resampling`を使用して経路を更新し、前走車の挙動の変化に対応 +**Control (制御)** -**経路計画モード** +- **Model Predictive Control (MPC):** 車両の運動を最適化。 +- **Vehicle Interface:** 車両の各種機能と通信。 +- **Controller Parameters:** 制御パラメータの調整 -経路計画モードでは、**Planning**モジュールは、指定された目的地までの経路を生成します。このモードでは、次のタスクが実行されます。 +**その他コンポーネント** -- ナビゲーションデータからの経路候補の生成 -- 障害物や交通規制を考慮した経路の選択 -- 衝突の回避と車両の安全を確保する経路の最適化 +- **Sensor Fusion:** 複数のセンサーデータを統合。 +- **Localization:** 自車位置と姿勢の推定。 +- **Traffic Light Detector:** 信号機を検出。 -**エラー処理** +**データフロー** -**Planning**モジュールは、さまざまなエラーを検出して処理します。これらのエラーには以下が含まれます。 +**Autoware**アーキテクチャでは、データはPerception、Planning、Controlコンポーネント間で以下のように流れます。 -- 障害物との衝突 -- velocity逸脱量 -- acceleration逸脱量 -- など +1. センサーデータがPerceptionモジュールに送信されます。 +2. Perceptionモジュールは環境を認識し、結果をPlanningモジュールに送信します。 +3. Planningモジュールは走行経路を計画し、結果をControlモジュールに送信します。 +4. Controlモジュールは車両を制御します。 -| 名前 | タイプ | 説明 | -| ----------------- | -------------------------------------------------------- | -------------------- | -| `output/clusters` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | マージされたクラスタ | +**進捗状況と将来の計画** -## パラメータ - -| 名称 | タイプ | 説明 | デフォルト値 | -| :---------------- | :----- | :------------------------------ | :------------ | -| `output_frame_id` | 文字列 | 出力トピックのheader frame_id。 | **base_link** | - - - -## (Optional) Tuning +**Autoware**は現在活発に開発されており、絶えず改善されています。将来の計画には以下が含まれます。 - +**Autoware**コミュニティはオープンソースに誇りを持っています。コントリビューターは、新しい機能、バグフィックス、ドキュメントの改善を歓迎します。 -## (Optional) Collaborators +**リソース** - +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------------------------------------------ | ----------------------------------------------------------------- | +| `output/clusters` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | マージしたクラスタ | -## (Optional) TODOs - - - -## (Optional) Contributing - - - -## (Optional) Implementation details - - - -## (Optional) Dependencies - - - -## (Optional) Releases - - +## パラメータ ---- +| 名前 | タイプ | 説明 | デフォルト値 | +| :---------------- | :----- | :----------------------------------- | :------------ | +| `output_frame_id` | 文字列 | 出力トピックのヘッダ frame_id | base_link | -## 仮定 / 既知の制限 +## 前提条件と既知の限界 - -## (任意) エラーの検出と処理 +## (オプション) エラー検出と処理 - -## (任意) パフォーマンスの特性評価 +## (オプション) パフォーマンス特性 - -## (任意) レファレンス/外部リンク +## (オプション) 参照/外部リンク - -## (任意) 将来の拡張機能 / 未実装部分 +## (オプション) 将来の拡張/未実装部分 + diff --git a/perception/autoware_compare_map_segmentation/README.md b/perception/autoware_compare_map_segmentation/README.md index 338420c768b62..0f565317cc6b5 100644 --- a/perception/autoware_compare_map_segmentation/README.md +++ b/perception/autoware_compare_map_segmentation/README.md @@ -1,245 +1,315 @@ -# autoware_compare_map_segmentation +- Input pointcloud (`PointXYZIF` or `PointCloud2` type) +- Elevation map (`Image` type, 8bit PNG format) +- `height_diff_thresh` (float, default: 0.2) -## 目的 +#### Output +- Ground filtered (`PointXYZIF`, `PointCloud2` type) -`autoware_compare_map_segmentation` は、マップ情報(例:map_loaderインターフェイスからのpcd、標高マップ、または分割マップのポイントクラウド)を使用して入力ポイントクラウドから地上の点をフィルタリングするパッケージです。 +### Distance Based Compare Map Filter -## 動作/アルゴリズム +#### Input +- Input pointcloud (`PointXYZIF` or `PointCloud2` type) +- Map pointcloud (`PointCloud2` type) +- `search_radius` (float; default: 1.0) -### 標高マップ比較フィルタ +#### Output +- Ground filtered (`PointXYZIF`, `PointCloud2` type) -入力点のzを標高マップの値と比較します。高さの差は、隣接するセルのバイナリ統合によって計算されます。`height_diff_thresh`を下回る高さ差を持つ点を削除します。 +### Voxel Based Approximate Compare Map Filter -

- -

+#### Input +- Input pointcloud (`PointXYZIF` or `PointCloud2` type) +- Map pointcloud (`PointCloud2` type) +- `downsample_resolution` (float; default: 0.1) -### 距離ベースの比較マップフィルタ +#### Output +- Ground filtered (`PointXYZIF`, `PointCloud2` type) -このフィルタは、入力ポイントクラウドを`kdtree`の`nearestKSearch`関数を使用してマップポイントクラウドと比較し、マップポイントクラウドに近い点を削除します。マップポイントクラウドは、最初の時点で静的に一度にロードすることも、車両の走行中に動的にロードすることもできます。 +### Voxel Based Compare Map Filter -### ボクセルベース 近似比較マップフィルター +#### Input +- Input pointcloud (`PointXYZIF` or `PointCloud2` type) +- Map pointcloud (`PointCloud2` type) +- `voxel_resolution` (float; default: 0.2) +- `max_distance_in_voxel` (float; default: 0.2) -このフィルターはマップ点群を読み込みます。マップ点群は、最初に静的に読み込むこともできますし、車両の移動中に動的に読み込むこともできます。そして、マップ点群のボクセルグリッドを作成します。このフィルターは、VoxelGridクラスのgetCentroidIndexAt関数とgetGridCoordinates関数を組み合わせて使用し、ボクセルグリッド内にある入力点を見つけて削除します。 +#### Output +- Ground filtered (`PointXYZIF`, `PointCloud2` type) -### ボクセルベース 比較マップフィルター +### Voxel Distance based Compare Map Filter -このフィルターはマップ点群を読み込みます(最初に全マップを一度に静的に読み込むか、車両の移動中に動的に読み込みます)。そして、マップ点群をダウンサンプリングするためにVoxelGridを利用します。 +#### Input +- Input pointcloud (`PointXYZIF` or `PointCloud2` type) +- Map pointcloud (`PointCloud2` type) +- `voxel_resolution` (float; default: 0.1) +- `max_distance_in_voxel` (float; default: 0.2) +- `search_radius` (float; default: 1.0) -入力点群の各点について、このフィルターはVoxelGridクラスのgetCentroidIndexAt関数とgetGridCoordinates関数の組み合わせを使用して、ダウンサンプリングされたマップの点が、入力点の周りにあるかどうかを確認します。その点を含むまたはその点の近くにダウンサンプリングされたマップの点がある入力点は削除します。 +#### Output +- Ground filtered (`PointXYZIF`, `PointCloud2` type) -### ボクセル距離ベース 比較マップフィルター +## Usage -このフィルターは、distance_based_compare_map_filterとvoxel_based_approximate_compare_map_filterを組み合わせたものです。このフィルターはマップ点群を読み込みます。マップ点群は、最初に静的に読み込むこともできますし、車両の移動中に動的に読み込むこともできます。そして、マップ点群のボクセルグリッドとk-d木を作成します。このフィルターは、VoxelGridクラスのgetCentroidIndexAt関数とgetGridCoordinates関数を組み合わせて使用し、ボクセルグリッド内にある入力点を見つけて削除します。ボクセルグリッドに属していない点は、k-d木の中心探索のradiusSearch関数を使用してマップの点群と再び比較され、マップに十分近い場合は削除されます。 +### Compare Elevation Map Filter -## 入力/出力 +The filter can be used by adding the following lines to the launch file: -### 標高比較マップフィルター +```xml + + + + height_diff_thresh: 0.2 + +``` -#### 入力 +### Distance Based Compare Map Filter -| 名前 | タイプ | 説明 | -| ----------------------- | ------------------------------- | ---------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点 | -| `~/input/elevation_map` | `grid_map::msg::GridMap` | 標高マップ | +The filter can be used by adding the following lines to the launch file: -#### 出力 +```xml + + + + + search_radius: 1.0 + +``` -## AutowareにおけるPIDプランニング +### Voxel Based Approximate Compare Map Filter -### 概要 +The filter can be used by adding the following lines to the launch file: -このドキュメントは、AutowareにおけるPIDプランニングコンポーネント/モジュールについて説明します。このコンポーネントは、速度プロファイル生成と縦断/横断制御を担当します。 +```xml + + + + + downsample_resolution: 0.1 + +``` -### アーキテクチャ +### Voxel Based Compare Map Filter -PIDプランニングコンポーネントは、以下で構成されています。 +The filter can be used by adding the following lines to the launch file: -- **速度プランニング:** 目標速度プロファイルを生成します。 -- **縦断制御:** 速度プロファイルを追従しながら加速度を制御します。 -- **横断制御:** 目標速度および加速度を維持しながらステアリングホイールを制御します。 +```xml + + + + + voxel_resolution: 0.2 + max_distance_in_voxel: 0.2 + +``` -### 入力 +### Voxel Distance based Compare Map Filter -- 自車位置 -- 目標経路 -- 環境認識データ +The filter can be used by adding the following lines to the launch file: -### 出力 +```xml + + + + + voxel_resolution: 0.1 + max_distance_in_voxel: 0.2 + search_radius: 1.0 + +``` -- 目標速度プロファイル -- 加速度制御コマンド -- ステアリング制御コマンド +## Parameters -### PIDプランニングの仕組み +### Compare Elevation Map Filter -PIDプランニングは、目標速度プロファイルと、自車位置と目標経路の誤差に基づくフィードバック制御を使用して速度と加速度を制御します。 +- `height_diff_thresh` (float; default: 0.2): The height difference threshold for filtering points. -**速度プランニング:** +### Distance Based Compare Map Filter -- 目標経路上のジオレファレンスされた速度制限と湾曲半径を使用して目標速度プロファイルを生成します。 -- 加速度と速度逸脱量を最小化するように速度プロファイルを調整します。 +- `search_radius` (float; default: 1.0): The radius used to search for neighboring points in the map pointcloud. -**縦断制御:** +### Voxel Based Approximate Compare Map Filter -- PIDコントローラを使用して、目標速度プロファイルを追従するように加速度を制御します。 -- 加速度逸脱量と目標速度との誤差をフィードバックとして使用します。 +- `downsample_resolution` (float; default: 0.1): The resolution used to downsample the map pointcloud. -**横断制御:** +### Voxel Based Compare Map Filter -- PIDコントローラを使用して、目標速度と加速度を維持するようにステアリングホイールを制御します。 -- 横方向誤差と目標横断点との誤差をフィードバックとして使用します。 +- `voxel_resolution` (float; default: 0.2): The resolution used to create the voxel grid of the map pointcloud. +- `max_distance_in_voxel` (float; default: 0.2): The maximum distance between a point and the center of a voxel to be considered as part of the ground. -### パラメータの調整 +### Voxel Distance based Compare Map Filter -PIDプランニングの性能は、以下を含むパラメータによって調整できます。 +- `voxel_resolution` (float; default: 0.1): The resolution used to create the voxel grid of the map pointcloud. +- `max_distance_in_voxel` (float; default: 0.2): The maximum distance between a point and the center of a voxel to be considered as part of the ground. +- `search_radius` (float; default: 1.0): The radius used to search for neighboring points in the map pointcloud for points that do not belong to any voxel grid. -- PIDゲイン -- 安全マージン -- `post resampling`の周波数 +| 名前 | タイプ | 説明 | +| ----------------------- | ------------------------------- | ---------- | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点 | +| `~/input/elevation_map` | `grid_map::msg::GridMap` | 標高マップ | -これらのパラメータは、車両のダイナミクスとアプリケーションの要件に応じて調整する必要があります。 +## 自動運転ソフトウェアのドキュメント -| 名前 | 種別 | 説明 | -| ----------------- | ------------------------------- | ------------------------- | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリングされた点 群 | +#### 概要 -#### パラメーター +このドキュメントでは、Autoware向け自動運転ソフトウェアの概要、システムアーキテクチャ、コンポーネント、モジュールについて説明します。 -| 名前 | タイプ | 説明 | デフォルト値 | -| :------------------- | :------- | :------------------------------------------- | :----------- | -| `map_layer_name` | 文字列 | 標高マップレイヤー名 | elevation | -| `map_frame` | 浮動小数 | 標高マップサブスクライブ前のマップのframe_id | マップ | -| `height_diff_thresh` | 浮動小数 | この値より標高差が小さい点は削除 [m] | 0.15 | +#### システムアーキテクチャ -### 他のフィルタ +Autowareシステムアーキテクチャは、以下の中核モジュールで構成されています。 -#### 入力 +- **Perception**(認識): センサーからのデータを処理し、周囲の環境を認識します。 +- **Planning**(計画): 車両の経路と操作を計画します。 +- **Control**(制御): 計画に従って車両を制御します。 -| 名前 | タイプ | 説明 | -| ------------------------------- | ------------------------------- | -------------------------------------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | リファレンスポイント | -| `~/input/map` | `sensor_msgs::msg::PointCloud2` | マップ(静的マップをロードする場合) | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 自車位置(動的マップをロードする場合) | +#### コンポーネントとモジュール -#### 出力 +**Perception** -Autowareによる自動運転ソフトウェア文書の日本語訳 +- **Sensor Framework**(センサーフレームワーク): センサーデータの取り込み、処理、キャリブレーションを行います。 +- **Obstacle Detection**(障害物検出): レーザーレーダー、カメラ、レーダーデータから障害物を検出します。 +- **Lane Detection**(車線検出): 道路上の車線を検出します。 -**セーフティコンポーネント** +**Planning** -**Overview** -本セーフティコンポーネントは、Autowareの自動運転システムにおける安全上の機能を提供します。 -このコンポーネントは、リアルタイムで車両の動作を監視し、潜在的な危険を特定します。潜在的な危険が特定された場合、本コンポーネントはシステムの他のコンポーネントに警告を発し、衝突回避などの適切な対策を講じます。 +- **Path Planning**(経路計画): 目的地までの経路を計画します。 +- **Behavior Planning**(行動計画): 経路上の障害物やその他の車両を回避するための操作を計画します。 +- **Trajectory Planning**(軌道計画): 車両の軌道と速度を計画します。 -Autowareのセーフティコンポーネントは、以下のサブコンポーネントで構成されています。 +**Control** -- **モーションプランニング** -- **オブジェクト認識** -- **センサフュージョン** +- **Longitudinal Control**(縦方向制御): ブレーキとアクセルを制御し、速度と加速度を維持します。 +- **Lateral Control**(横方向制御): ステアリングを制御し、車両を目標軌道上に維持します。 -**モーションプランニング** -モーションプランニングサブコンポーネントは、車両の移動経路を生成します。 -この経路は、以下の情報に基づいて生成されます。 +#### データ処理パイプライン -- **自車位置** -- **目標位置** -- **車両の周囲環境(オブジェクト認識によって検出)** +Autowareのデータ処理パイプラインは以下のように構成されています。 -モーションプランニングサブコンポーネントは、以下のアルゴリズムを使用して経路を生成します。 +1. センサーデータの取り込みとキャリブレーション +2. 障害物、車線、その他のオブジェクトの認識 +3. 目的地と経路の計画 +4. 操作の計画(操舵角、加減速) +5. 車両制御(ステアリング、ブレーキ、アクセル) -- **DWA(動的ウィンドウアプローチ)** -- **EB(弾性バンドメソッド)** -- **PRM(確率的ロードマップ法)** +#### `post resampling` -**オブジェクト認識** -オブジェクト認識サブコンポーネントは、車両の周囲環境内のオブジェクトを検出します。 -このサブコンポーネントは、以下のセンサからのデータを使用してオブジェクトを検出します。 +`post resampling`は、Perceptionパイプラインの一部分であり、認識された障害物とオブジェクトの座標をリサンプリングして、現在の姿勢に一致させます。 -- **LiDAR** -- **カメラ** -- **レーダー** +#### 関連資料 -オブジェクト認識サブコンポーネントは、以下のアルゴリズムを使用してオブジェクトを検出します。 +- [Autowareドキュメント](https://autoware.org/documentation/) +- [Autoware GitHubレポジトリ](https://github.com/autowarefoundation/autoware.ai) -- **PCL(点群ライブラリ)** -- **オープンCV** -- **深度学習** +| 名称 | 種類 | 説明 | +| ---------------------- | ----------------------------------------- | ----------------------- | +| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタ済み点群 | -**センサフュージョン** -センサフュージョンサブコンポーネントは、さまざまなセンサからのデータを統合します。統合されたデータは、車両の周囲環境のより正確で完全な表現を提供します。センサフュージョンサブコンポーネントは、以下のアルゴリズムを使用してデータを統合します。 +#### パラメータ -- **カルマンフィルタ** -- **粒子フィルタ** -- **グラフ最適化** +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------- | :----- | :------------------------------------------------------------------------------- | :------------ | +| `map_layer_name` | 文字列 | 標高マップレイヤーの名称 | elevation | +| `map_frame` | float | 標高マップがサブスクライブされる前に一時的に使用されるマップのフレーム ID | map | +| `height_diff_thresh` | float | 高さの違いがこの値 [m] を下回っているポイントを削除 | 0.15 | -**セーフティチェック** -セーフティチェックサブコンポーネントは、車両の動作をリアルタイムで監視します。 -このサブコンポーネントは、以下のパラメータを監視します。 +### その他のフィルタ -- **速度** -- **加速度** -- **ヨー角速度** -- **制動圧** +#### 入力 -セーフティチェックサブコンポーネントは、以下の基準に基づいて潜在的な危険を特定します。 +| 名前 | 種類 | 説明 | +| ------------------------------------ | ------------------------------------ | ---------------------------------------------------- | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | レファレンスポイント | +| `~/input/map` | `sensor_msgs::msg::PointCloud2` | マップ(静的マップローディングの場合) | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 自車位置(動的マップローディングの場合) | -- **安全限界の逸脱** -- **異常動作** -- **予想外のイベント** +#### 出力 -**応答アクション** -潜在的な危険が特定されると、セーフティチェックサブコンポーネントは他のコンポーネントに警告を発し、以下の応答アクションを実行します。 +**自動運転ソフトウェア** -- **速度の低下** -- **方向転換** -- **制動** -- **衝突回避** +このドキュメントでは、Autoware自動運転ソフトウェアの設計とアーキテクチャについて説明します。 -**インターフェース** +### 概要 + +Autowareは、自動運転車のためのオープンソースソフトウェアスタックです。モジュール式のアーキテクチャにより、開発者はアプリケーション固有の機能を簡単に統合できます。 + +### アーキテクチャ -セーフティコンポーネントは、以下のインターフェースを他のコンポーネントと持っています。 +Autowareのアーキテクチャは、次のコンポーネントで構成されます。 -- **Planningコンポーネント** -- **コントロールコンポーネント** -- **ヒューマンマシンインターフェースコンポーネント** +- **Planning**モジュール:経路の生成と通行不可能領域の回避を担当します。 +- **Perception**モジュール:センサーデータから周囲環境を認識します。 +- **Localization**モジュール:自車位置を決定します。 +- **Control**モジュール:車両の制御を担当します。 -**パフォーマンス** +### Planningコンポーネント -セーフティコンポーネントは、他のコンポーネントを妨げずにリアルタイムで動作するように設計されています。 -このコンポーネントは、以下を含むさまざまな条件下でテストされており、確実にその機能を実行することが証明されています。 +Planningコンポーネントは、次のサブモジュールで構成されます。 -- **さまざまな道路状況** -- **さまざまな気象条件** -- **さまざまな交通状況** +- **Path Planning**:経路の生成を担当します。 +- **Motion Planning**:車両の動作の生成を担当します。 -**結論** +### Perceptionコンポーネント -Autowareのセーフティコンポーネントは、自動運転システムにおける安全上の要件を満たすために不可欠です。 -このコンポーネントは、リアルタイムで車両の動作を監視し、潜在的な危険を特定し、衝突回避などの適切な対策を講じます。 +Perceptionコンポーネントは、次のサブモジュールで構成されます。 -| 名前 | タイプ | 説明 | -| ----------------- | ------------------------------- | ---------------------- | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタされたポイント | +- **Camera**:カメラデータからオブジェクトを検出します。 +- **Lidar**:LiDARデータから点群を生成します。 +- **Radar**:レーダーデータからオブジェクトを検出します。 + +### Localizationコンポーネント + +Localizationコンポーネントは、次のサブモジュールで構成されます。 + +- **GPS**:衛星データから自車位置を推定します。 +- **IMU**:慣性データから自車位置を推定します。 + +### Controlコンポーネント + +Controlコンポーネントは、次のサブモジュールで構成されます。 + +- **Vehicle Control**:車両のステアリング、ブレーキ、アクセルを制御します。 +- **Motion Control**:車両の速度と加速度を制御します。 + +### データフロー + +Autowareのデータフローは次のとおりです。 + +1. Perceptionコンポーネントは、センサーデータから周囲環境を認識します。 +2. Localizationコンポーネントは、自車位置を決定します。 +3. Planningコンポーネントは、経路を生成して車両の動作を生成します。 +4. Controlコンポーネントは、車両を制御してPlanningコンポーネントの要求を実現します。 + +### 応用例 + +Autowareは、次のような幅広い応用事例で使用できます。 + +- **自動運転車** +- **自律移動ロボット** +- **ドローン** +- **AGV** + +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------------- | ----------- | +| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリング済み点群 | #### パラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -| ------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -| `use_dynamic_map_loading` | ブーリアン | マップ読み込みモードの選択、`true` は動的マップ読み込み、`false` は静的マップ読み込み、分割なしのマップポイントクラウドの場合に推奨 | true | -| `distance_threshold` | 浮動小数点数 | マップポイントと入力ポイントを比較するしきい値距離 [m] | 0.5 | -| `map_update_distance_threshold` | 浮動小数点数 | マップの更新が必要な場合の車両移動距離のしきい値(動的マップ読み込み時)[m] | 10.0 | -| `map_loader_radius` | 浮動小数点数 | 読み込む必要があるマップの半径(動的マップ読み込み時)[m] | 150.0 | -| `timer_interval_ms` | 整数 | マップの更新が必要かどうかを確認するためのタイマー間隔(動的マップ読み込み時)[ms] | 100 | -| `publish_debug_pcd` | ブーリアン | デバッグ用に`debug/downsampled_map/pointcloud`にボクセル化された更新マップをパブリッシュするかどうか。追加の計算コストが発生する可能性があります。 | false | -| `downsize_ratio_z_axis` | 倍数 | z軸の`voxel_leaf_size`と近傍点の距離しきい値を減らすための正の倍率 | 0.5 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :-------------------------- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :------------ | +| `use_dynamic_map_loading` | bool | マップの読み込みモード選択、`true` は動的マップの読み込み、`false` は静的マップの読み込み、分割なしのマップポイントクラウドに推奨 | true | +| `distance_threshold` | float | 入力ポイントとマップポイントを比較するための距離閾値 [m] | 0.5 | +| `map_update_distance_threshold` | float | マップの更新が必要になる車両の移動距離の閾値 (動的マップの読み込みで) [m] | 10.0 | +| `map_loader_radius` | float | 読み込む必要のあるマップの半径 (動的マップの読み込みで) [m] | 150.0 | +| `timer_interval_ms` | int | マップの更新が必要かをチェックするためのタイマー間隔 (動的マップの読み込みで) [ms] | 100 | +| `publish_debug_pcd` | bool | デバッグ用の `debug/downsampled_map/pointcloud` にボクセル化された更新マップを公開するかどうか。追加の計算コストが発生する可能性あり | false | +| `downsize_ratio_z_axis` | double | z 軸で `voxel_leaf_size` と近傍点距離閾値を減らす正の比率 | 0.5 | + +## Assumptions / Known limits -## 前提条件 / 制限事項 +## (Optional) エラー検出と処理 -## (任意)エラー検出と処理 +## (Optional) パフォーマンスの特性評価 -## (任意)性能特性 +## (Optional) リファレンス/外部リンク -## (任意)外部リンク/外部リファレンス +## (Optional) Future extensions / Unimplemented parts -## (任意)将来の拡張 / 未実装部分 diff --git a/perception/autoware_crosswalk_traffic_light_estimator/README.md b/perception/autoware_crosswalk_traffic_light_estimator/README.md index 52b891b051685..090728f9f15f9 100644 --- a/perception/autoware_crosswalk_traffic_light_estimator/README.md +++ b/perception/autoware_crosswalk_traffic_light_estimator/README.md @@ -1,154 +1,87 @@ -## 交差点信号推定モジュール +## 交差点信号推定器 ## 目的 -`crosswalk_traffic_light_estimator`モジュールは、HDマップと検出された車両信号から歩行者信号を推定します。 +`crosswalk_traffic_light_estimator` は HDMap と検出された車両信号から歩行者用信号を推定するモジュールです。 ## 入出力 ### 入力 - -| 名前 | 型 | 説明 | -| ------------------------------------ | ------------------------------------------------ | ---------- | -| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | -| `~/input/route` | `autoware_planning_msgs::msg::LaneletRoute` | route | -| `~/input/classified/traffic_signals` | `tier4_perception_msgs::msg::TrafficSignalArray` | 交通信号 | +- `HDMap` +- `DetectedVehicleTrafficLights` ### 出力 +- `crosswalk_traffic_light` -**自動運転ソフトウェア ドキュメント** - -**Planning コンポーネント** - -**目的** - -Planning コンポーネントは、周囲環境からのセンサーデータを使用して、自車位置を推定し、安全かつ効率的な経路を計画します。 - -**機能** - -- **周囲環境認識:** レーダー、カメラ、LiDAR データを使用して、車両、歩行者、障害物を検出します。 -- **自車位置推定:** GPS、IMU、輪速センサーを使用して、自車位置と姿勢を推定します。 -- **経路計画:** 安全で効率的な経路を生成します。 -- **制御指令生成:** 制御システムに速度、加速度、ステアリング角の指令を出力します。 - -**アルゴリズム** - -- \*\*'post resampling'` データ処理を使用して、センサーデータを適合させます。 -- **動的計画法**を使用して、最適な経路を検索します。 -- **モデル予測制御**を使用して、制御指令を生成します。 - -**安全機能** - -- **衝突検出:** 衝突の可能性を検出して、緊急停止を実行します。 -- **加速度と速度逸脱量監視:** 制御指令が安全な範囲内にあることを確認します。 -- **センサー障害監視:** センサーの障害を検出して、安全に停止または駐車します。 - -**Autoware との統合** - -この Planning コンポーネントは、Autoware プラットフォームと統合されています。Autoware と連携して、周囲環境の認識、自車位置の推定、経路計画を実行します。 - -| 名称 | タイプ | 説明 | -| -------------------------- | ------------------------------------------------------- | ---------------------------- | -| `~/output/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 推定歩行者用信号機を含む出力 | - -## パラメータ - -| 名前 | タイプ | 説明 | デフォルト値 | -| :---------------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| `use_last_detect_color` | `bool` | このパラメータが `true` の場合、このモジュールは、車両の信号が GREEN/AMBER として検出されるだけでなく、検出結果が GREEN/AMBER から UNKNOWN に変わっても歩行者の信号を RED として推定します。(検出結果が RED または AMBER を UNKNOWN に変えた場合、このモジュールは歩行者の信号を UNKNOWN として推定します)。このパラメータが `false` の場合、このモジュールは推定に最新の検出結果のみを使用します。(検出結果が GREEN/AMBER の場合のみ、このモジュールは歩行者の信号を RED として推定します。) | `true` | -| `last_detect_color_hold_time` | `double` | 検出された最後の色の保持時間のしきい値。 | `2.0` | +| 名前 | タイプ | 説明 | +| --- | --- | --- | +| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | +| `~/input/route` | `autoware_planning_msgs::msg::LaneletRoute` | ルート | +| `~/input/classified/traffic_signals` | `tier4_perception_msgs::msg::TrafficSignalArray` | 分類信号 | -## 内部構造 / アルゴリズム +### 出力 ---- +**自動運転ソフトウェアドキュメント** **Planningコンポーネント** -- **カーパスジェネレータ:** - - - 自己位置、障害物、および経路情報の観測値を使用して、経路を生成します。 - -- **経路評価器:** - - - 複数の経路の安全性、快適性、および実現可能性を評価します。 - -- **経路プランナー:** - - - 評価された経路から最適な経路を選択します。 - -- **操舵制御器:** +**概要** - - 自己位置と目標経路に応じて、操舵角を生成します。 +Planningコンポーネントは、自車位置や障害物などのセンサデータから、車両の経路計画と制御を行います。 -- **速度制御器:** - - - 加速度と速度を制御し、快適性と安全性を確保します。 - -- **安全監視器:** - - 危険な状況を監視し、必要に応じて緊急ブレーキや緊急回避操作をトリガーします。 - -**センサーモジュール** - -- **ライダー:** - - - 車両周辺の3D環境をマッピングします。 +**機能** -- **カメラ:** +* **経路計画:** 安全かつ快適な経路を生成します。 +* **衝突回避:** 障害物と衝突することを回避する回避行動を生成します。 +* **速度制御:** 速度を制限と障害物に応じて調整します。 +* **ステアリング制御:** 目標経路に従ってステアリング角を計算します。 - - 障害物検出、道路認識、および標識認識に使用されます。 +**アーキテクチャ** -- **慣性測定装置 (IMU):** +Planningコンポーネントは、以下のモジュールで構成されます。 - - 車両の加速度と角速度情報を提供します。 +* **経路生成モジュール** +* **衝突回避モジュール** +* **速度制御モジュール** +* **ステアリング制御モジュール** -- **GNSS 受信機:** - - 車両の絶対位置と姿勢情報を提供します。 +**依存関係** -**ロカリゼーションモジュール** +Planningコンポーネントは、以下のデータに依存します。 -- **自己位置推定器:** +* **センサデータ:** 自車位置、障害物、レーンマーカーなど +* **地図データ:** 道路ネットワーク、規制情報など - - センサーデータを統合して、自己位置を推定します。 +**パラメータ** -- **マッピングモジュール:** - - 環境認識に使用される高精細マップを生成します。 +Planningコンポーネントには、以下のパラメータを設定できます。 -**その他のモジュール** +* **安全マージン:** 障害物との安全距離 +* **加速限界:** 加速度の上限 +* **旋回半径:** 旋回可能な最小半径 -- **ヒューマンマシンインターフェイス (HMI):** +**推奨使用法** - - ユーザーと車両間のインタラクションを可能にします。 +Planningコンポーネントは、Autoware FCWやAutoware FDWなどの自动運転システムに組み込んで使用できます。 -- **通信モジュール:** - - 他車両やインフラストラクチャとの通信を処理します。 +**リファレンス** -**主パーセプションパイプライン** +* [Autoware GitHubリポジトリ](https://github.com/AutowareFoundation/autoware.ai) +* [Autoware ドキュメンテーション](https://autoware.docs.openrobotics.org/) -1. **センサーデータ取得:** センサーから生のデータを取得します。 -2. **前処理:** ノイズ除去、歪み補正など、データの前処理を行います。 -3. **3D マッピング:** ライダーとカメラデータを使用して、車両周辺の3D 環境を生成します。 -4. **障害物検出:** 3D マップから障害物を識別します。 -5. **自己位置推定:** IMU、GNSS、および障害物検出データを使用して、自己位置を推定します。 -6. **経路計画:** 障害物検出と自己位置推定結果を使用して、経路を計画します。 -7. **操舵制御:** 経路計画の結果を使用して、操舵角を生成します。 -8. **速度制御:** 加速度と速度を調整して、計画された経路をたどります。 -9. **安全監視:** 危険な状況を監視し、必要に応じて緊急ブレーキや回避操作をトリガーします。 +| 名前 | タイプ | 説明 | +| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | +| `~/output/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 歩行者の交通信号の推定値を出力 | -**主要な課題** +## パラメータ -- **リアルタイム処理:** センサーデータの処理と制御出力を生成するために、低遅延で高性能な処理が必要です。 -- **センシングとマッピングの不確実性:** センサーの制限や環境のダイナミックにより、センシングとマッピング情報に不確実性が生じます。 -- **経路計画の最適化:** 交通状況、障害物、および車両の動力学を考慮した、効率的で安全な経路を計画する必要があります。 -- **制御の安定性:** 予測不可能な障害物や滑りやすい路面での車両の安定性を確保する必要があります。 -- **安全性の検証:** 自動運転システムの安全性と信頼性を証明するための厳密な検証と検証が必要です。 +| 名称 | タイプ | 説明 | デフォルト値 | +| :---------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `use_last_detect_color` | `bool` | このパラメータが `true` の場合、このモジュールは、車両の信号が GREEN/AMBER として検出された場合だけでなく、検出結果が GREEN/AMBER から UNKNOWN に変化した場合も、歩行者の交通信号を RED と推定します。 (検出結果が RED または AMBER から UNKNOWN に変化した場合、このモジュールは歩行者の交通信号を UNKNOWN と推定します。) このパラメータが `false` の場合、このモジュールは推定に最新の検出結果のみを使用します。 (検出結果が GREEN/AMBER の場合のみ、このモジュールは歩行者の交通信号を RED と推定します。) | `true` | +| `last_detect_color_hold_time` | `double` | 最後に検出された色の保持時間しきい値。 | `2.0` | -**Autoware の設計原則** +## 内部機構 / アルゴリズム -- **モジュール性:** システムを自律的かつ再利用可能なコンポーネントに分解します。 -- **拡張性:** オープンソースのソフトウェアアーキテクチャにより、新しい機能やアルゴリズムの統合が容易になります。 -- **リアルタイム性:** 低遅延の処理を可能にする、最適化されたソフトウェア実装を使用します。 -- **安全性:** 冗長性、フォールトトレランス、および安全監視メカニズムを備えて、安全な運転を確保します。 -- **効率性:** コンピューティングとエネルギーリソースを効率的に使用します。 ```plantuml @@ -177,12 +110,12 @@ end ``` -歩行者と車両間の交通が信号機によって制御されている場合、歩行者が横断しないよう、歩行者信号を **RED** にする場合があります。以下の条件を満たしているとき: +## 歩行者と車両の通行が信号機で管理されている場合、歩行者が横断しないように、歩行者信号機を **赤** にすることがあります。その条件は次のとおりです。 -### Situation1 +### ケース 1 -- 横断歩道が **STRAIGHT** レーンレットと競合する -- レーンレットが **GREEN** または **AMBER** 信号を参照する (次の写真は **GREEN** の場合のみ) +- 歩道が **直進** レーンレットと交差する +- レーンレットが **緑** または **黄** の信号機を参照する (次の図は **緑** の場合のみを示します)
@@ -191,15 +124,16 @@ end
-### Situation2 +### ケース 2 -- 横断歩道が異なるターン方向のレーンレット (STRAIGHT と LEFT、LEFT と RIGHT、RIGHT と STRAIGHT) と競合する -- レーンレットが **GREEN** または **AMBER** 信号を参照する (次の写真は **GREEN** の場合のみ) +- 歩道が別の曲がり角のレーンレット (直進と左折、左折と右折、右折と直進) と交差する +- レーンレットが **緑** または **黄** の信号機を参照する (次の図は **緑** の場合のみを示します)
-## 仮定 / 既知の制限事項 +## 想定事項/既知の制約事項 + +## 将来の拡張機能/未実装の部分 -## 将来の拡張機能 / 未実装部分 diff --git a/perception/autoware_detected_object_feature_remover/README.md b/perception/autoware_detected_object_feature_remover/README.md index 3ef7c9aba8499..76a6956d64e63 100644 --- a/perception/autoware_detected_object_feature_remover/README.md +++ b/perception/autoware_detected_object_feature_remover/README.md @@ -1,153 +1,72 @@ -## autoware_detected_object_feature_remover +# autoware_detected_object_feature_remover ## 目的 -`autoware_detected_object_feature_remover` パッケージは、トピックの型を `DetectedObjectWithFeatureArray` から `DetectedObjects` に変換するためのものです。 +`autoware_detected_object_feature_remover`は、`DetectedObjectWithFeatureArray`トピックタイプを`DetectedObjects`に変換するパッケージです。 -## 内部動作 / アルゴリズム +## 動作原理/アルゴリズム ## 入出力 ### 入力 -- `/detected_objects_with_features` +| 名称 | タイプ | 説明 | +| --------- | ------------------------------------------------------------ | ----------------------------------- | +| `~/input` | `tier4_perception_msgs::msg::DetectedObjectWithFeatureArray` | 特徴フィールドを有する検出オブジェクト | ### 出力 -- `/detected_objects` +**自律走行ソフトウェア** -## パラメータ - -| 名前 | 説明 | 型 | デフォルト値 | -| ----------------------- | ------------------------------ | ---------------- | ------------ | -| `remove_probability` | 確率が低すぎる対象物を削除する | ブール値 | `false` | -| `remove_points` | 点数の低い対象物を削除する | ブール値 | `false` | -| `threshold_probability` | 確率のしきい値 | 倍精度浮動小数点 | `0.5` | -| `threshold_points` | 点数のしきい値 | 倍精度浮動小数点 | `10` | - -## インターフェース - -### サブスクライバー - -- **トピック:** `/detected_objects_with_features` -- **型:** `autoware_msgs::DetectedObjectWithFeatureArray` -- **説明:** 特徴を持つ検出されたオブジェクトの配列 - -### パブリッシャー - -- **トピック:** `/detected_objects` -- **型:** `autoware_msgs::DetectedObjects` -- **説明:** 検出されたオブジェクトの配列 - -## 使い方 - -このパッケージを使用するには、次の手順を実行します。 - -1. ROS ワークスペースで `catkin_make` を実行して、パッケージをビルドします。 -2. ノードを実行します。 - -```bash -rosrun autoware_detected_object_feature_remover autoware_detected_object_feature_remover -``` - -### パラメータの調整 - -パラメータは、`launch` ファイルまたは動的に ROS パラメータサーバーを使用して調整できます。 - -**launch ファイルを使用する場合:** - -```xml - - - - - - -``` - -**動的に ROS パラメータサーバーを使用する場合:** +**はじめに** -```bash -rosparam set /autoware_detected_object_feature_remover/remove_probability true -rosparam set /autoware_detected_object_feature_remover/threshold_probability 0.6 -``` +このドキュメントでは、Autowareが提供する自律走行ソフトウェアのアーキテクチャと機能について説明します。このソフトウェアは、自動運転車両の開発で使用するために設計されています。 -## 制限事項 +**アーキテクチャ** -- このパッケージは、`autoware_msgs::DetectedObjectWithFeature` メッセージのみを処理します。他のタイプのメッセージはサポートされていません。 -- 確率または点数がしきい値以下のオブジェクトはすべて削除されます。部分的にしきい値を満たすオブジェクトは保持されません。 +ソフトウェアはモジュール式のアーキテクチャに基づいており、各モジュールは特定の機能を担当します。主なモジュールを以下に示します。 -## トラブルシューティング +* **感知モジュール:** センサーデータから周囲の状況を認識します。 +* **Planningモジュール:** 自車の経路を計画します。 +* **制御モジュール:** 車両の運動を制御します。 -パッケージに問題がある場合は、次の手順を実行します。 +**主な機能** -1. ROS コンソールログをチェックして、エラーメッセージがないか確認します。 -2. パラメータが正しく設定されていることを確認します。 -3. 入力トピックが正しく発行されていることを確認します。 -4. 出力トピックが正しく受信されていることを確認します。 +ソフトウェアは、次のような主要な機能を備えています。 -| 名前 | タイプ | 説明 | -| --------- | ------------------------------------------------------------ | -------------------------- | -| `~/input` | `tier4_perception_msgs::msg::DetectedObjectWithFeatureArray` | 特徴を持つ検出オブジェクト | +* **オブジェクト検出:** 歩行者、車両、その他の危険物などの周囲のオブジェクトを検出します。 +* **経路計画:** Autowareは、自律走行車両の安全で効率的な経路を計画します。 +* **経路追従:** 計画された経路に従って車両を自動で走行させます。 +* **障害物回避:** 障害物を検出し、回避するための操作を自動で実行します。 -### 出力 - -### 自動運転ソフトウェアのドキュメント - -このドキュメントでは、自動運転ソフトウェアの概要と、その主要コンポーネントであるPerception、Planning、Controlの役割について説明します。 - -**Perceptionコンポーネント** - -Perceptionコンポーネントは、センサーデータから周囲環境に関する情報を抽出します。これには以下が含まれます。 - -- 物体検出(車両、歩行者、自転車など) -- フリースペースの検出(障害物のない領域) -- レーン検出 - -この情報を使用して、Perceptionコンポーネントは、自車位置に対する周囲環境の正確な認識を提供します。 - -**Planningコンポーネント** +**データフロー** -Planningコンポーネントは、認識された周囲環境情報に基づいて、車両の安全で効率的な経路を計画します。これには以下が含まれます。 +ソフトウェアのデータフローは次のとおりです。 -- グローバルパスプランニング(目的地までの高レベルの経路) -- ローカルパスプランニング(障害物回避を考慮した経路の微調整) +* センサーデータは、感知モジュールに送信されます。 +* 感知モジュールは、オブジェクト検出を実行し、結果をPlanningモジュールに送信します。 +* Planningモジュールは、経路を計画し、結果を制御モジュールに送信します。 +* 制御モジュールは、車両の運動を制御します。 -Planningコンポーネントは、制約の中で最適な経路を決定し、自車を目的地まで安全に誘導します。 +**追加機能** -**Controlコンポーネント** +ソフトウェアには、次のような追加機能も備わっています。 -Controlコンポーネントは、Planningコンポーネントが出力した経路に基づいて、車両を制御します。これには以下が含まれます。 +* **'post resampling'を使用したセンサー融合** +* **自車位置の推定** +* **レベリング制御** -- ステアリング制御 -- ブレーキ制御 -- スロットル制御 +**結論** -Controlコンポーネントは、車両の運動を制御し、計画された経路に従って自車を移動させます。 +Autowareの自律走行ソフトウェアは、自動運転車両の開発に不可欠なツールです。モジュール式のアーキテクチャと強力な機能を備えており、自律走行車両の安全で効率的な動作を確保できます。 -**Autowareソフトウェア** - -Autowareは、オープンソースの自動運転ソフトウェアプラットフォームです。Perception、Planning、Controlコンポーネントを含む、自動運転に必要な主要機能を提供します。 - -Autowareを使用すると、開発者はカスタマイズして特定の車両や環境に適応させることができ、自動運転機能を独自のアプリケーションに統合できます。 - -**パフォーマンス指標** - -自動運転ソフトウェアのパフォーマンスを評価するための重要な指標には以下が含まれます。 - -- **経路逸脱量:**計画された経路からの自車位置の逸脱量 -- **速度逸脱量:**計画された速度からの自車速度の逸脱量 -- **加速度逸脱量:**計画された加速度からの自車加速度の逸脱量 -- **post resampling**:計画された経路からの自車位置の最大逸脱量 - -これらの指標は、自動運転システムの安全、効率、正確さを評価するために使用されます。 - -| 名称 | タイプ | 説明 | -| ---------- | ------------------------------------------------ | ---------------- | -| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | +| 名称 | タイプ | 説明 | +| ---------- | ------------------------------------------------ | ---------- | +| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | 検出されたオブジェクト | ## パラメータ なし -## 想定/既知の制限事項 +## 想定事項 / 制約事項 + diff --git a/perception/autoware_detected_object_validation/README.md b/perception/autoware_detected_object_validation/README.md index ffe28f89a730f..9499caa1d0972 100644 --- a/perception/autoware_detected_object_validation/README.md +++ b/perception/autoware_detected_object_validation/README.md @@ -2,29 +2,30 @@ ## 目的 -このパッケージの目的は、DetectedObjects の明らかな誤検知を除去することです。 +このパッケージの目的は、検出されたオブジェクトの明白な誤検知を除去することです。 -## 参照/外部リンク +## リファレンス/外部リンク -- [障害物点群ベースのバリデータ](obstacle-pointcloud-based-validator-ja.md) -- [占有グリッドベースのバリデータ](occupancy-grid-based-validator-ja.md) -- [オブジェクトレーンレットフィルタ](object-lanelet-filter-ja.md) -- [オブジェクト位置フィルタ](object-position-filter-ja.md) +- [障害物点群ベースバリデータ](obstacle-pointcloud-based-validator.md) +- [占有グリッドベースバリデータ](occupancy-grid-based-validator.md) +- [オブジェクトレーンレットフィルタ](object-lanelet-filter.md) +- [オブジェクト位置フィルタ](object-position-filter.md) ### ノードパラメータ #### object_lanelet_filter -{{ json_to_markdown("perception/autoware_detected_object_validation/schema/object_lanelet_filter.schema.json", "ja") }} +{{ json_to_markdown("perception/autoware_detected_object_validation/schema/object_lanelet_filter.schema.json") }} #### object_position_filter -{{ json_to_markdown("perception/autoware_detected_object_validation/schema/object_position_filter.schema.json", "ja") }} +{{ json_to_markdown("perception/autoware_detected_object_validation/schema/object_position_filter.schema.json") }} #### obstacle_pointcloud_based_validator -{{ json_to_markdown("perception/autoware_detected_object_validation/schema/obstacle_pointcloud_based_validator.schema.json", "ja") }} +{{ json_to_markdown("perception/autoware_detected_object_validation/schema/obstacle_pointcloud_based_validator.schema.json") }} #### occupancy_grid_based_validator -{{ json_to_markdown("perception/autoware_detected_object_validation/schema/occupancy_grid_based_validator.schema.json", "ja") }} +{{ json_to_markdown("perception/autoware_detected_object_validation/schema/occupancy_grid_based_validator.schema.json") }} + diff --git a/perception/autoware_detection_by_tracker/README.md b/perception/autoware_detection_by_tracker/README.md index d1f3ba9488893..afc91936908db 100644 --- a/perception/autoware_detection_by_tracker/README.md +++ b/perception/autoware_detection_by_tracker/README.md @@ -1,128 +1,108 @@ # autoware_detection_by_tracker -## 用途 +## 目的 -このパッケージはトラッキングされたオブジェクトを検出モジュールにフィードバックし、安定してオブジェクトを検出し続けることを目的としています。 -![purpose](image/purpose.svg) +このパッケージは追跡されたオブジェクトを検出モジュールにフィードバックして、モジュールの安定性を保ち、オブジェクトを検出し続けます。 +![目的](image/purpose.svg) -Autowareの detection by tracker は、点群とトラッカーを含む未知のオブジェクトを入力として受け取ります。 -未知のオブジェクトは、検出され続けることができるようにトラッカーのサイズに合うように最適化されます。 +autoware_detection_by_trackerは、点群の集まりを含む未知のオブジェクトとトラッカーを入力として使用します。 +未知のオブジェクトはトラッカーの大きさに合わせて最適化され、検出され続けます。 -## 内部動作 / アルゴリズム +## 内部機構 / アルゴリズム -Autowareの detection by tracker は、点群とトラッカーを含む未知のオブジェクトを受け取ります。ここで未知のオブジェクトは、主にユークリッドクラスタリングを使用して形状適合されています。 -ユークリッドクラスタリングやその他の方法を使用した形状適合には、過分割と過分割という問題があります。 +autoware_detection_by_trackerは、点群とトラッカーを含む未知のオブジェクトを受け取ります。未知のオブジェクトは主にユークリッドクラスタリングを使用して形状に適合させられます。 +ユークリッドクラスタリングや他の手法を使用した形状適合には、低分割と高分割という問題があります。 [![segmentation_fail](image/segmentation_fail.png)](https://www.researchgate.net/figure/Examples-of-an-undersegmentation-error-top-and-an-oversegmentation-error-bottom-Each_fig1_304533062) -_[3]から改変]_ +[3]より引用 -未知のオブジェクトとトラッカーのオーバーラップだけを見るのは不十分です。過分割と過分割の対策を講じる必要があります。 +未知のオブジェクトとトラッカーの間の重複を単に確認するだけでは機能しません。低分割と高分割に対策を講じる必要があります。 -### 過分割に対処するためのポリシー +### 高分割に対処するためのポリシー -1. トラッカー内の未知のオブジェクトを単一のオブジェクトとしてマージします。 -2. トラッカー情報(角度やサイズなど)をリファレンス情報として使用して形状適合を行います。 +1. トラッカー内の未知のオブジェクトを1つのオブジェクトとしてマージする。 +2. トラッカーの角度やサイズなどの情報を参照情報として形状を調整する。 -### 過分割に対処するためのポリシー +### 低分割に対処するためのポリシー -1. トラッカーと未知のオブジェクトを比較し、リコールが大きく、適合率が小さいものを過分割オブジェクトと判断します。 -2. 過分割オブジェクトのクラスタを分割するために、小さなクラスタを作成するようにパラメータを反復処理します。 -3. パラメータを数回調整し、最も IoU が高いものを採用します。 +1. トラッカーと未知のオブジェクトを比較し、リコールが高く、精度が低くなるものを分割されていないオブジェクトとする。 +2. 分割されていないオブジェクトのクラスタを分割するためにパラメータを反復処理して小さなクラスタを作成する。 +3. パラメータを何度も調整し、IoUが最も高いものを採用する。 ## 入出力 ### 入力 -| 名称 | 型 | 説明 | -| ------------------------- | -------------------------------------------------------- | ------------------ | +| Name | Type | Description | +| --------------------- | -------------------------------------------------------- | ----------------- | | `~/input/initial_objects` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | 未知のオブジェクト | | `~/input/tracked_objects` | `tier4_perception_msgs::msg::TrackedObjects` | トラッカー | ### 出力 -**自己位置推定** +自動運転ソフトウェアに関するドキュメント +[Autoware](https://github.com/autowarefoundation/autoware.auto/wiki) -以下の方法は自己位置推定およびマッピングを処理します。 +**Planningコンポーネント/モジュール** -**Localization and Mapping (ローカライゼーションとマッピング)**: +Planningコンポーネントは、周囲環境を認識し、現在の走行状況に基づいて、車両の走行経路を計画します。 -- 現在の姿勢を推定および追跡します。 -- 環境マップを作成および更新します。 +**知覚モジュール** -**Planning (プランニング)** +* LiDARおよびカメラデータから周囲環境を検出し、オブジェクトを分類およびトラッキングします。 -- 安全で効率的な経路を計画します。 -- 速度、加速度、ステアリングコマンドを生成します。 +**地図モジュール** -**Behavior Planning (動作プランニング)** +* HDマップまたは勾配マップから、道路境界線、車線、交差点などの地図情報を提供します。 -- 衝突回避のための障害物認識と回避を行います。 -- 交通規則とエチケットに従います。 +**自車位置モジュール** -**Behavior Prediction (動作予測)** +* GPS、IMU、またはLiDARスラムを使用して、自車位置を決定します。 -- 歩行者、自転車、他の車両の動きを予測します。 -- 交差点、人混み、その他の複雑な状況での安全な行動を可能にします。 +**計画モジュール** -**Controller (コントローラ)** +* 知覚データ、地図情報、自車位置情報に基づいて、安全で効率的な走行経路を計画します。 -- 運転操作を実行します。 -- ブレーキ、アクセル、ステアリングの制御を管理します。 +**挙動生成** -**Perception (パーセプション)** +* 計画された走行経路に基づいて、アクセル、ブレーキ、ステアリングコマンドを生成します。 -- カメラ、レーダー、LiDARセンサーからのデータを処理します。 -- 物体、車線、信号などの周辺環境を認識および分類します。 +**その他のモジュール** -**センサー** +* **'post resampling'モジュール**:知覚データのノイズを除去します。 +* **衝突回避モジュール**:障害物との衝突を防止するための回避策を計算します。 +* **駐車支援モジュール**:車両の駐車を支援します。 -- レーダー、LiDAR、カメラなどのセンサーを使用します。 -- 検出距離、精度、視野などのセンサー特性を考慮します。 - -**データアグリゲーション** - -- 複数のセンサーからのデータを統合します。 -- `post resampling`を使用して時間同期された一貫したビューを作成します。 - -**データアソシエーション** - -- 異なるセンサーからの測定結果を同一の対象物に関連付けます。 -- KF(カルマンフィルタ)やHD(ハフ距離)などの手法を使用します。 - -**ステート推定** - -- Kalmanフィルタを使用し、センサー測定値から状態を推定します。 -- 速度逸脱量、加速度逸脱量などの状態変数を考慮します。 - -| 名前 | 種類 | 説明 | -| ---------- | ------------------------------------------------ | ------------ | -| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | オブジェクト | +| 名称 | 型 | 説明 | +| ---------- | ---------------------------------------------------- | ----------- | +| `~/output` | `autoware_perception_msgs::msg::DetectedObjects` | 検出物 | ## パラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -| --------------------------------- | ------ | ---------------------------------------------------------------- | ------------ | -| `tracker_ignore_label.UNKNOWN` | `bool` | ラベルが不明の場合は、ノードがトラッカーを無視するかどうか | `true` | -| `tracker_ignore_label.CAR` | `bool` | ラベルが CAR の場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.PEDESTRIAN` | `bool` | ラベルが歩行者の場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.BICYCLE` | `bool` | ラベルが自転車の場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.MOTORCYCLE` | `bool` | ラベルがオートバイの場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.BUS` | `bool` | ラベルがバスの場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.TRUCK` | `bool` | ラベルがトラックの場合は、ノードがトラッカーを無視するかどうか | `false` | -| `tracker_ignore_label.TRAILER` | `bool` | ラベルがトレーラーの場合は、ノードがトラッカーを無視するかどうか | `false` | +| 名前 | 型 | 説明 | デフォルト値 | +| --------------------------------- | ------ | --------------------------------------------------------------------------- | ------------- | +| `tracker_ignore_label.UNKNOWN` | `bool` | ラベルが不明の場合、ノードはトラッカーを無視します。 | `true` | +| `tracker_ignore_label.CAR` | `bool` | ラベルが CAR の場合、ノードはトラッカーを無視します。 | `false` | +| `tracker_ignore_label.PEDESTRIAN` | `bool` | ラベルが pedestrian の場合、ノードはトラッカーを無視します。 | `false` | +| `tracker_ignore_label.BICYCLE` | `bool` | ラベルが bicycle の場合、ノードはトラッカーを無視します。 | `false` | +| `tracker_ignore_label.MOTORCYCLE` | `bool` | ラベルが MOTORCYCLE の場合、ノードはトラッカーを無視します。 | `false` | +| `tracker_ignore_label.BUS` | `bool` | ラベルが bus の場合、ノードはトラッカーを無視します。 | `false` | +| `tracker_ignore_label.TRUCK` | `bool` | ラベルが truck の場合、ノードはトラッカーを無視します。 | `false` | +| `tracker_ignore_label.TRAILER` | `bool` | ラベルが TRAILER の場合、ノードはトラッカーを無視します。 | `false` | + +## 前提条件 / 既知の制限 -## 前提条件と既知の制限事項 +## (任意)障害の検出と処理 -## (省略可能) エラー検出と処理 +## (任意)パフォーマンス特性 -## (省略可能) 性能特性 +## (任意)参照/外部リンク -## (省略可能) 参照文献/外部リンク +[1] M. Himmelsbach, et al. "Tracking and classification of arbitrary objects with bottom-up/top-down detection." (2012). -[1] M. ヒメルスバッハら. "ボトムアップ/トップダウン検出を用いた任意物体の追跡と分類." (2012). +[2] Arya Senna Abdul Rachman, Arya. "3D-LIDAR Multi Object Tracking for Autonomous Driving: Multi-target Detection and Tracking under Urban Road Uncertainties." (2017). -[2] アリア・セナ・アブドゥル・ラクマン, アリア. "自動運転における 3D LIDAR マルチオブジェクトトラッキング: 都市道路の不確実性におけるマルチターゲットの検出および追跡." (2017). +[3] David Held, et al. "A Probabilistic Framework for Real-time 3D Segmentation using Spatial, Temporal, and Semantic Cues." (2016). -[3] デイビッド・ヘルドら. "空間的、時間的、セマンティックな手がかりを用いたリアルタイム 3D セグメンテーションのための確率的フレームワーク." (2016). +## (任意)今後の拡張 / 未実装部分 -## (省略可能) 将来の拡張機能/未実装部分 diff --git a/perception/autoware_elevation_map_loader/README.md b/perception/autoware_elevation_map_loader/README.md index 65adeb18f9bf8..9928a5c906c2e 100644 --- a/perception/autoware_elevation_map_loader/README.md +++ b/perception/autoware_elevation_map_loader/README.md @@ -2,15 +2,15 @@ ## 目的 -本パッケージは、autoware_compare_map_segmentation 向けに標高マップを提供します。 +このパッケージはautoware_compare_map_segmentation用の標高マップを提供します。 -## 内容 / アルゴリズム +## 内部動作/アルゴリズム -サブスクライブされた pointcloud_map と vector_map から標高マップを生成し、公開します。 +サブスクライブされたpointcloud_mapとvector_mapから標高マップを生成し、それをパブリッシュします。 生成された標高マップをローカルに保存し、次回からロードします。 -各セルの標高値は、一番低いクラスタのポイントの z 座標の平均値です。 -標高値がないセルは、隣接セルの値を使用して補完できます。 +各セルの標高値は、最も低いクラスターの点のzの平均値です。 +標高値のないセルは、近隣のセルの値を使用してペイントインできます。

@@ -20,179 +20,145 @@ ### 入力 -| 名前 | 型 | 説明 | -| ------------------------------- | ----------------------------------------------- | ------------------------------------------------ | -| `input/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | 点群マップ | -| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | (オプション) レーンレット2マップのバイナリデータ | -| `input/pointcloud_map_metadata` | `autoware_map_msgs::msg::PointCloudMapMetaData` | (オプション) 点群マップのメタデータ | +| 名前 | 型 | 説明 | +| ----------------------------- | -------------------------------------------- | ---------------------------------------- | +| `input/pointcloud_map` | `sensor_msgs::msg::PointCloud2` | 点群マップ | +| `input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | (オプション)lanelet2 マップのバイナリデータ | +| `input/pointcloud_map_metadata` | `autoware_map_msgs::msg::PointCloudMapMetaData` | (オプション)点群マップのメタデータ | ### 出力 ---- +**自動運転ソフトウェア・アーキテクチャ** -**自己位置推定** +このドキュメントでは、Autowareの自動運転ソフトウェアアーキテクチャの概要を示します。 -**概要** +**コンポーネント** -自己位置推定コンポーネントは、センサからの生のデータを処理し、GNSS/INSやV2Xによる制約付きで、推定自車位置と姿勢を出力します。 +Autowareは、以下を含むさまざまなコンポーネントで構成されています。 -**仕様** +* **Perception (認識)**: センサーデータからの障害物の検出と分類 +* **Localization (定位)**: 自車位置の推定 +* **Planning (経路計画)**: 自動運転の方針の生成 +* **Control (制御)**: 車両の加速、操舵、ブレーキの制御 +* **Behavior Planning (動作計画)**: 経路計画から具体的な車両動作の生成 +* **Decision Making (意思決定)**: 衝突回避や経路の再計画などの意思決定 -- **入力:** - - 生センサデータ(IMU、GNSS、V2X) -- **出力:** - - 推定自車位置(x、y、z) - - 推定自車姿勢(roll、pitch、yaw) - - 推定自車速度(vx、vy、vz) -- **アルゴリズム:** - - EKF (拡張カルマンフィルタ)ベースのFusionアルゴリズム +**データフロー** ---- +コンポーネント間のデータフローは、以下のような流れになっています。 -**経路計画** +1. Perceptionコンポーネントは、センサーデータを受け取り、障害物を検出して分類します。 +2. Localizationコンポーネントは、センサーデータと地図情報を使用して自車位置を推定します。 +3. Planningコンポーネントは、自車位置、障害物情報、地図情報を使用して、自動運転の方針を生成します。 +4. Behavior Planningコンポーネントは、経路計画から具体的な車両動作を生成します。 +5. Controlコンポーネントは、車両の加速、操舵、ブレーキを制御します。 -**概要** +**追加モジュール** -経路計画モジュールは、環境マップを利用して、開始点と目標点の間の最適経路を生成します。 +Autowareには、追加モジュールとして以下が含まれます。 -**仕様** +* **Visualization (視覚化)**: 自動運転の状態を視覚的に表示 +* **Recorder (レコーダー)**: 自動運転のデータを記録 +* **Simulator (シミュレータ)**: 自動運転のテストと開発のための環境 -- **入力:** - - 環境マップ - - 開始点と目標点 -- **出力:** - - 最適経路のシーケンス(ウェイポイント) -- **アルゴリズム:** - - 動的経路計画法(DWA) +**アーキテクチャの利点** ---- +Autowareのアーキテクチャには、以下のような利点があります。 -**動作計画** +* **モジュール方式:** 各コンポーネントは独立しており、別々に開発できます。 +* **スケーラビリティ:** コンポーネントを追加したり、置き換えたりすることで、システムの機能を拡大できます。 +* **再利用性:** コンポーネントは複数の自動運転システムで再利用できます。 +* **オープンソース:** Autowareはオープンソースであり、コミュニティによって開発および改善されています。 -**概要** - -動作計画Planningモジュールは、車両の経路を生成し、車両が安全かつ効率的に経路を追従できるように動作を決定します。 - -**仕様** - -- **入力:** - - 最適経路 - - 自車位置と姿勢 - - 環境情報(障害物、交通信号など) -- **出力:** - - 車両の速度とステアリング角のコマンド -- **アルゴリズム:** - - モデル予測制御(MPC) - - 後方サンプリング `post resampling`アルゴリズム - ---- - -**安全検証** - -**概要** - -安全検証コンポーネントは、動作計画出力が安全基準を満たしているかどうかを検証します。 - -**仕様** - -- **入力:** - - 動作計画出力 - - 環境情報 -- **出力:** - - 動作計画が安全かどうかのフラグ -- **アルゴリズム:** - - 障害物との衝突検出 - - 加速度逸脱量検出 - - 速度逸脱量検出 - -| 名称 | タイプ | 説明 | -| ---------------------------- | ------------------------------- | --------------------------------------------- | -| `output/elevation_map` | `grid_map_msgs::msg::GridMap` | 標高マップ | -| `output/elevation_map_cloud` | `sensor_msgs::msg::PointCloud2` | (オプション) 標高マップの値から生成された点群 | +| 名前 | タイプ | 説明 | +| ---------------------------- | ------------------------------- | -------------------------------------------------------------------- | +| `output/elevation_map` | `grid_map_msgs::msg::GridMap` | 標高マップ | +| `output/elevation_map_cloud` | `sensor_msgs::msg::PointCloud2` | (省略可能) 標高マップの値から生成された点群 | ### サービス -| Name | Type | Description | -| ------------------------------ | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `service/get_selected_pcd_map` | `autoware_map_msgs::srv::GetSelectedPointCloudMap` | (オプション) ポイントクラウドマップを要求するサービス。ポイントクラウドマップローダーがROS 2サービス経由で選択されたポイントクラウドマップを利用する場合、これを利用します。 | +| 名前 | タイプ | 説明 | +| -------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `service/get_selected_pcd_map` | `autoware_map_msgs::srv::GetSelectedPointCloudMap` | (オプション) Point Cloud Mapをリクエストするサービス。PointCloud MapローダーがROS2サービスを使用した選択されたPoint Cloud Mapの読み込みを使用する場合、これを使用します。 | ## パラメータ ### ノードパラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -| :-------------------------------- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| map_layer_name | std::string | 標高マップレイヤー名 | elevation | -| param_file_path | std::string | GridMap パラメーターの設定 | path_default | -| elevation_map_directory | std::string | 標高マップファイル (bag2) | path_default | -| map_frame | std::string | 標高マップファイルを読み込むときの map_frame | map | -| use_inpaint | bool | 空のセルを補完するかどうかによります | true | -| inpaint_radius | float | アルゴリズムによって考慮される、補完された各ポイントの半径 [m] | 0.3 | -| use_elevation_map_cloud_publisher | bool | `output/elevation_map_cloud` を公開するか | false | -| use_lane_filter | bool | ベクトルマップで標高マップをフィルタリングするかどうかによります | false | -| lane_margin | float | インペインティングマスクに含めるエリアの車線ポリゴンからの余裕距離 [m] (use_lane_filter=True の場合のみ使用) | 0.0 | -| use_sequential_load | bool | サービスによって点群マップを取得するかどうかによります | false | -| sequential_map_load_num | int | 一度にロードする点群マップの数 (use_sequential_load が True に設定されている場合のみ使用)。これはすべての点群マップセルの数を超えてはいけません | 1 | +| 名称 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| map_layer_name | std::string | 標高マップレイヤー名 | elevation | +| param_file_path | std::string | GridMapパラメータ設定 | path_default | +| elevation_map_directory | std::string | 標高マップファイル(bag2) | path_default | +| map_frame | std::string | elevation_mapファイル読み込み時のマップフレーム | map | +| use_inpaint | bool | 空セルの補完を行うかどうか | true | +| inpaint_radius | float | アルゴリズムで考慮される、補完する各ポイントの円形近傍の半径[m] | 0.3 | +| use_elevation_map_cloud_publisher | bool | `output/elevation_map_cloud`をパブリッシュするかどうか | false | +| use_lane_filter | bool | 標高マップをベクターマップでフィルタリングするかどうか | false | +| lane_margin | float | 補完マスクに含める領域のレーンポリゴンからのマージン距離[m]。use_lane_filter=Trueの場合にのみ使用します。 | 0.0 | +| use_sequential_load | bool | サービスから点群マップを取得するかどうか | false | +| sequential_map_load_num | int | 一度にロードする点群マップの数(use_sequential_loadがtrueに設定されている場合のみ使用します)。これは、すべての点群マップセルの数を超えてはなりません。 | 1 | -### GridMap のパラメータ +### グリッドマップパラメータ -パラメータは `config/elevation_map_parameters.yaml` で記述されています。 +パラメータは `config/elevation_map_parameters.yaml` に記載されています。 -#### 一般的なパラメータ +#### 一般パラメータ -| Name | Type | Description | Default value | -| :--------------------------------------------- | :--- | :--------------------------------------------------------------------------------------- | :------------ | -| pcl_grid_map_extraction/num_processing_threads | int | グリッドマップセルを処理するスレッド数。生の入力点群のフィルタリングは並列化されません。 | 12 | +| 名前 | 種類 | 説明 | デフォルト値 | +| :--------------------------------------------- | :--- | :--------------------------------------------------------------------------------------------------------------- | :------------ | +| pcl_grid_map_extraction/num_processing_threads | int | グリッドマップセルの処理スレッド数。生の入力点群のフィルタリングは並列化されません。 | 12 | -#### グリッドマップのパラメーター +#### グリッドマップパラメータ -参照: +参照: -生成されるグリッドマップのパラメーター。 +生成されるグリッドマップパラメータ。 -| 名前 | タイプ | 説明 | デフォルト値 | -| -------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------- | ------------ | -| pcl_grid_map_extraction/grid_map/min_num_points_per_cell | int | グリッドマップセルのいずれにも当てはまる点群内の最低ポイント数。そうでなければ、そのセルの標高はNaNに設定されます。 | 3 | -| pcl_grid_map_extraction/grid_map/resolution | float | グリッドマップの解像度。幅と長さは自動的に計算されます。 | 0.3 | -| pcl_grid_map_extraction/grid_map/height_type | int | セルの標高を決定するパラメータ `0: 各クラスタの平均値の中で最も小さい値`, `1: 最もポイント数の多いクラスタの平均値` | 1 | -| pcl_grid_map_extraction/grid_map/height_thresh | float | 最も小さいクラスタからの標高範囲 (height_type 1 のみ) | 1.0 | +| 名前 | 型 | 説明 | デフォルト値 | +| :--------------------------------------------------- | :---- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------ | +| pcl_grid_map_extraction/grid_map/min_num_points_per_cell | int | グリッドマップの任意のセルの範囲内に存在する必要があるポイントクラウド内の最小ポイント数。そうでない場合、セルの標高は NaN に設定されます。 | 3 | +| pcl_grid_map_extraction/grid_map/resolution | float | グリッドマップの分解能。幅と長さは自動的に計算されます。 | 0.3 | +| pcl_grid_map_extraction/grid_map/height_type | int | セルの標高を決定するパラメーター `0: 各クラスターの平均値の中で最も小さい値`、`1: 最も多くのポイントを持つクラスターの平均値` | 1 | +| pcl_grid_map_extraction/grid_map/height_thresh | float | 最小クラスターの標高範囲(height_type 1 の場合のみ) | 1.0 | -### 点群の前処理パラメータ +### 点群前処理パラメータ -#### リジッド変換パラメータ +#### リジッドボディ変換パラメータ -標高を計算する前に点群に適用されるリジッド変換。 +標高を計算する前に点群に適用されるリジッドボディ変換です。 -| 名前 | タイプ | 説明 | デフォルト値 | -| :-------------------------------------------------- | :----- | :----------------------------------------------------------------------------- | :----------- | -| pcl_grid_map_extraction/cloud_transform/translation | float | 標高を計算する前に、入力点群に対して適用される並進 (xyz)。 | 0.0 | -| pcl_grid_map_extraction/cloud_transform/rotation | float | 標高を計算する前に、入力点群に対して適用される回転 (固有回転、規則 X-Y'-Z'')。 | 0.0 | +| Name | Type | Description | Default value | +| :-------------------------------------------------- | :---- | :---------------------------------------------------------------------------------------------------------------------- | :------------ | +| pcl_grid_map_extraction/cloud_transform/translation | float | 入力点群に標高計算前に適用される、移動 (xyz)。 | 0.0 | +| pcl_grid_map_extraction/cloud_transform/rotation | float | 入力点群に標高計算前に適用される、回転 (固有回転、規約 X-Y'-Z'')。 | 0.0 | -#### クラスター抽出パラメータ +#### クラスタ抽出パラメータ -クラスターの抽出は、pclアルゴリズムに基づいています。詳細については、を参照してください。 +クラスタ抽出はpclアルゴリズムに基づいています。詳細はを参照してください。 -| 名称 | 型 | 説明 | デフォルト値 | -| -------------------------------------------------------------- | ---- | -------------------------------------------------------- | ------------ | -| `pcl_grid_map_extraction/cluster_extraction/cluster_tolerance` | 実数 | クラスタに属すると見なされるポイント間の距離 | 0.2 | -| `pcl_grid_map_extraction/cluster_extraction/min_num_points` | 整数 | クラスタが持つ必要のある最小ポイント数(以下では破棄) | 3 | -| `pcl_grid_map_extraction/cluster_extraction/max_num_points` | 整数 | クラスタが持つことができる最大ポイント数(以上では破棄) | 1000000 | +| 名前 | Type | 説明 | デフォルト値 | +| :----------------------------------------------------------- | :---- | :-------------------------------------------------------------------------------- | :------------ | +| pcl_grid_map_extraction/cluster_extraction/cluster_tolerance | float | クラスタの一部とみなされる、点間の距離。 | 0.2 | +| pcl_grid_map_extraction/cluster_extraction/min_num_points | int | クラスタに必要最低限の点数 (それより少ないと破棄される)。 | 3 | +| pcl_grid_map_extraction/cluster_extraction/max_num_points | int | クラスタに持つことのできる最大点数 (それより多いと破棄される)。 | 1000000 | -#### 外れ値除去パラメーター +#### 外れ値削除パラメータ -外れ値除去の詳細については、 を参照してください。 +詳細は を参照してください。 -| 名前 | タイプ | 説明 | デフォルト値 | -| ------------------------------------------------------------ | ------ | ---------------------------------------- | ------------ | -| `pcl_grid_map_extraction/outlier_removal/is_remove_outliers` | float | 統計的異常値除去を実行するかどうか | false | -| `pcl_grid_map_extraction/outlier_removal/mean_K` | float | 点の統計を推定するために解析する近傍の数 | 10 | -| `pcl_grid_map_extraction/outlier_removal/stddev_threshold` | float | 点が内点と見なされる標準偏差の数 | 1.0 | +| 名前 | 型 | 説明 | デフォルト値 | +| :----------------------------------------------------- | :---- | :---------------------------------------------------------------------------- | :------------ | +| `pcl_grid_map_extraction/outlier_removal/is_remove_outliers` | float | 統計的除去外れ値法を実行するかどうか | false | +| `pcl_grid_map_extraction/outlier_removal/mean_K` | float | 点の統計を推定するために分析する近傍の点の数 | 10 | +| `pcl_grid_map_extraction/outlier_removal/stddev_threshold` | float | 点が内点と見なされる標準偏差の数を指定します | 1.0 | #### サブサンプリングパラメータ ポイントクラウドのダウンサンプリングの詳細については、 を参照してください。 -| 名前 | タイプ | 説明 | デフォルト値 | -| :------------------------------------------------------- | :----- | :------------------------------------- | :----------- | -| pcl_grid_map_extraction/downsampling/is_downsample_cloud | bool | ダウンサンプリングを実施するかどうか。 | false | -| pcl_grid_map_extraction/downsampling/voxel_size | float | ボクセルサイズ(xyz)、メートル単位。 | 0.02 | +| 名前 | 型 | 説明 | デフォルト値 | +| :-------------------------------------------------------- | :---- | :---------------------------------------------------------- | :------------ | +| pcl_grid_map_extraction/downsampling/is_downsample_cloud | ブール | ダウンサンプリングを実行するかどうか | false | +| pcl_grid_map_extraction/downsampling/voxel_size | 浮動 | ボクセルサイズ (xyz) (メートル) | 0.02 | + diff --git a/perception/autoware_euclidean_cluster/README.md b/perception/autoware_euclidean_cluster/README.md index c7baa583cd0c9..8d448620e4f49 100644 --- a/perception/autoware_euclidean_cluster/README.md +++ b/perception/autoware_euclidean_cluster/README.md @@ -2,77 +2,87 @@ ## 目的 -autoware_euclidean_cluster は、オブジェクトを分類するために点群をより小さな部分にクラスタリングするパッケージです。 +autoware_euclidean_clusterは、点を小さな部分にクラスタリングしてオブジェクトを分類するためのパッケージです。 -このパッケージには、`euclidean_cluster` と `voxel_grid_based_euclidean_cluster` の 2 つのクラスタリング手法があります。 +このパッケージには2つのクラスタリング方式があります。`euclidean_cluster`と`voxel_grid_based_euclidean_cluster`です。 -## 仕組み / アルゴリズム +## 内部動作/アルゴリズム ### euclidean_cluster -`pcl::EuclideanClusterExtraction` を点群に適用します。詳細については、[公式ドキュメント](https://pcl.readthedocs.io/projects/tutorials/en/master/cluster_extraction.html) を参照してください。 +`pcl::EuclideanClusterExtraction`が点に適用されます。詳細は[公式ドキュメント](https://pcl.readthedocs.io/projects/tutorials/en/master/cluster_extraction.html)を参照してください。 ### voxel_grid_based_euclidean_cluster -1. ボクセルごとの重心は、`pcl::VoxelGrid` によって計算されます。 -2. 重心は `pcl::EuclideanClusterExtraction` によってクラスタリングされます。 -3. 入力点群は、クラスタリングされた重心を基にクラスタリングされます。 +1. 各ボクセルの重心は`pcl::VoxelGrid`によって計算されます。 +2. 重心は`pcl::EuclideanClusterExtraction`によってクラスタリングされます。 +3. 入力点はクラスタリングされた重心に基づいてクラスタリングされます。 ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ------- | ------------------------------- | -------- | -| `input` | `sensor_msgs::msg::PointCloud2` | 入力点群 | +| 名前 | タイプ | 説明 | +|---|---|---| +| `input` | `sensor_msgs::msg::PointCloud2` | 入力ポイントクラウド | ### 出力 -**自動運転ソフトウェア** +****Plannerの仕様** -**ドキュメント URL:** [ここにURLを入力] +**目的** -**Planningモジュール** +Plannerは、目的地の地点から現在の軌跡を生成します。 -**Planningモジュールの機能** +**インターフェース** -Planningモジュールには、以下の機能があります。 +* **入力** + * 自車位置 + * 地図 + * 目的地 + * `post resampling` の予測パス + * 障害物 +* **出力** + * 経路計画された轨跡 (最適な轨跡) -- 車両の経路計画 -- 車両の衝突回避 -- 車両の制御 +**処理フロー** -**Planningモジュールの入力** +1. 地図から経路を生成する。 +2. 経路を予測軌跡に分割する。 +3. 障害物を考慮して各セグメントを対応する車両ダイナミクスモデルに最適化する。 +4. 各最適化されたセグメントを元の経路に再統合する。 -Planningモジュールには、以下の入力があります。 +**Planningモジュール** -- 自車位置 -- 自車速度 -- 周囲環境の認識データ -- 交通規制情報 +Plannerは、以下を含む複数のモジュールで構成されています。 -**Planningモジュールの出力** +* **Path Planning:** グローバルな経路生成を担当。 +* **Behavior Planning:** 局所的な軌跡生成を担当。 +* **Motion Planning:** 実行可能な軌跡生成を担当。 +* **Trajectory Optimization:** 軌跡の最適化を担当。 -Planningモジュールの出力には、以下のものがあります。 +**Autowareとの統合** -- 車両の目標経路 -- 車両の加速度・旋回角率の目標値 +Plannerは、Autowareの他のコンポーネントと通信し、以下を行います。 -**Planningモジュールにおける技術的詳細** +* **Localization:** 自車位置を取得。 +* **Mapping:** 地図を取得。 +* **Object Detection:** 障害物を検出。 +* **Prediction:** 障害物の未来位置を予測。 -Planningモジュールは、以下の技術的詳細を備えています。 +**アルゴリズム** -- 経路計画アルゴリズム: ダイナミックウェイポイント法 -- 障害物回避アルゴリズム: 最適制御法 -- `post resampling`技術を使用したセンサデータの処理 -- velocity逸脱量とacceleration逸脱量の最小化 +Plannerは、以下を含むさまざまなアルゴリズムを使用しています。 -Planningモジュールは、Autowareソフトウェアスタックの一部です。 +* **A*:** 経路検索に使用。 +* **DWA:** `post resampling` の予測パスに使用。 +* **QP:** 軌跡最適化に使用。 +* **MPC:** 予測制御に使用。 -| 名 | タイプ | 説明 | -| ---------------- | -------------------------------------------------------- | ---------------------------------- | -| `output` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | クラスタ点群 | -| `debug/clusters` | `sensor_msgs::msg::PointCloud2` | 可視化のための着色済みクラスタ点群 | +| 名前 | 型 | 説明 | +| ---------------- | -------------------------------------------------------- | --------------------------------------- | +| `output` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | クラスターの点群 | +| `debug/clusters` | `sensor_msgs::msg::PointCloud2` | 可視化のための色付きクラスターの点群 | ## パラメータ @@ -80,67 +90,49 @@ Planningモジュールは、Autowareソフトウェアスタックの一部で #### euclidean_cluster -| 名称 | タイプ | 説明 | -| ------------------ | ---------- | ------------------------------------------------------------- | -| `use_height` | ブール | クラスタリングに point.z を使用 | -| `min_cluster_size` | 整数 | クラスターが有効と見なされるために必要な最小のポイント数 | -| `max_cluster_size` | 整数 | クラスターが有効と見なされるために必要な最大のポイント数 | -| `tolerance` | 浮動小数点 | L2 ユークリッド空間における尺度としての空間クラスター許容範囲 | +| 名前 | タイプ | 説明 | +|---|---|---| +| `use_height` | bool | `post resampling`されたクラスタリングに点のz座標を使用する | +| `min_cluster_size` | int | 有効とみなされるクラスタに含める必要がある最小点の数 | +| `max_cluster_size` | int | 有効とみなされるクラスタに含める必要がある最大点の数 | +| `tolerance` | float | L2ユークリッド空間での測定値としての空間クラスタ許容誤差 | #### voxel_grid_based_euclidean_cluster -このノードは、voxelグリッド法に基づくEuclideanクラスタリングを使用して、点群をクラスタリングします。このノードの主な目的は、障害物検出のパイプラインのために、点群を障害物クラスタにクラスタリングすることです。 - -**サブスクライブするトピック** - -- `/points_raw`: 入力点群 - -**パブリッシュするトピック** +将来的にサポートされるであろうPlanningコンポーネント/モジュール用のeuclideanクラスタリングアルゴリズムのvoxel-based実装です。 -- `/voxel_grid_based_euclidean_cluster/output`: クラスタリングされた点群 +| 名称 | 型 | 説明 | +| ----------------------------- | ----- | ------------------------------------------------------------------------------------- | +| `use_height` | ブール | `post resampling`用ポイントの`z`値を使用する | +| `min_cluster_size` | 整数 | クラスタで許容される最小ポイント数。これを下回るとクラスタは無効とみなされる | +| `max_cluster_size` | 整数 | クラスタで許容される最大ポイント数。これを超えるとクラスタは無効とみなされる | +| `tolerance` | 浮動小数 | クラスタの空間許容値(L2ユークリッド空間での測定値) | +| `voxel_leaf_size` | 浮動小数 | `x`軸と`y`軸のボクセルリーフサイズ | +| `min_points_number_per_voxel` | 整数 | ボクセルごとの最小ポイント数 | -**パラメータ** +## 仮定/既知の制限 -- **voxel_leaf_size:** クラスタリングに使用するボクセルサイズ[m] -- **euclidean_cluster_tolerance:** クラスタリングに使用するユークリッド距離公差[m] -- **min_cluster_size:** クラスタとして認識されるためにクラスタに含まれる必要のある最小ポイント数 -- **max_cluster_size:** 1つのクラスタに含まれることができる最大ポイント数 -- **post resampling:** 点群をサンプルするのかどうか (True/False) -- **sample_size:** サンプルするポイントの数。`post resampling` が True の場合にのみ使用されます。 -- **target_frame:** クラスタリングされた点群の目標フレーム。`current pose` または `sensor` のいずれか。 - -| 名称 | 型 | 説明 | -| ----------------------------- | ----- | ----------------------------------------------------- | -| `use_height` | bool | クラスタリングに point.z を使用する | -| `min_cluster_size` | int | 有効とみなされるためにクラスタが必要とする最小点の数 | -| `max_cluster_size` | int | 有効とみなされるためにクラスタが必要とする最大点の数 | -| `tolerance` | float | L2 ユークリッド空間の指標としての空間クラスタ許容誤差 | -| `voxel_leaf_size` | float | x と y のボクセルリーフサイズ | -| `min_points_number_per_voxel` | int | ボクセルに必要な最低点の数 | - -## 想定/既知の制限 - - -## (省略可) エラーの検出と処理 +## (省略可能) エラーの検出と処理 - -## (省略可) パフォーマンスの特性評価 +## (省略可能) パフォーマンス特性 - -## (省略可) リファレンス/外部リンク +## (省略可能) 参照/外部リンク - -## (省略可) 今後の拡張機能/未実装部分 +## (省略可能) 今後の拡張/未実装部分 + +`voxel_grid_based_euclidean_cluster`の`use_height`オプションは、まだ実装されていません。 -`voxel_grid_based_euclidean_cluster`の`use_height`オプションはまだ実装されていません。 diff --git a/perception/autoware_ground_segmentation/README.md b/perception/autoware_ground_segmentation/README.md index dc4d13baa1471..add3c26e43733 100644 --- a/perception/autoware_ground_segmentation/README.md +++ b/perception/autoware_ground_segmentation/README.md @@ -1,91 +1,78 @@ -# autoware_ground_segmentation +## autoware_ground_segmentation ## 目的 -`autoware_ground_segmentation`は、入力ポイントクラウドから地上の点を削除するノードです。 +`autoware_ground_segmentation`は、入力された点群から地上の点を取り除くノードです。 -## 内部処理 / アルゴリズム +## 仕組み / アルゴリズム -各地面セグメンテーションアルゴリズムの詳細な説明は、次のリンクを参照してください。 +各地面セグメンテーションアルゴリズムの詳細な説明は、以下のリンクを参照してください。 -| フィルタの名称 | 説明 | 詳細 | -| ---------------------- | ------------------------------------------------------------------- | -------------------------------------- | -| `ray_ground_filter` | 放射状に並んだ点の幾何学的関係に基づいて地面を取り除く方法 | [リンク](docs/ray-ground-filter.md) | -| `scan_ground_filter` | `ray_ground_filter`とほぼ同じ方法だが、パフォーマンスがわずかに向上 | [リンク](docs/scan-ground-filter.md) | -| `ransac_ground_filter` | 平面に対して地上の近似を行うことで地面を取り除く方法 | [リンク](docs/ransac-ground-filter.md) | +| フィルター名 | 説明 | 詳細 | +| -------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------ | +| ray_ground_filter | 放射上で直線上に並んだ点間の幾何学的関係に基づいて地面を除去する方法 | [リンク](docs/ray-ground-filter.md) | +| scan_ground_filter | `ray_ground_filter`とほぼ同じ方法だが、パフォーマンスをわずかに向上 | [リンク](docs/scan-ground-filter.md) | +| ransac_ground_filter | 地面を平面に近似することで地面を除去する方法 | [リンク](docs/ransac-ground-filter.md) | ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ----------------- | ------------------------------- | ---------------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点 | -| `~/input/indices` | `pcl_msgs::msg::Indices` | 基準インデックス | - -### 自動運転ソフトウェアドキュメント - -**Planning** コンポーネントは、**HAD Map** と**localization** による**current pose** 情報を使用して、周囲の環境を認識し、安全で快適な経路を決定します。 - -**Planning** コンポーネントには、次の主要モジュールが含まれます。 - -- **Trajectory Planner**:**HAD Map** と**localization** データを使用して、車両の安全で効率的な経路を生成します。 -- **Path Smoother**:**Trajectory Planner** によって生成された経路を滑らかにし、車両の快適性を向上させます。 -- **Speed Planner**:**Trajectory Planner** と**Path Smoother** によって生成された経路に基づいて、車両の速度プロファイルを決定します。 - -**Perception** コンポーネントは、**HAD Map** と**localization** 情報を組み合わせて、障害物やその他の車両などの周囲の環境を認識します。 - -**Perception** コンポーネントには、次の主要モジュールが含まれます。 - -- **Object Detector**: LiDAR、カメラ、レーダーから収集されたデータを処理して、物体や障害物を検出します。 -- **Obstacle Estimator**: 検出された物体の速度と加速度を推定します。 -- **Localizer**: 物体の位置と姿勢を**localization** 情報との関連付けを支援します。 - -**Control** コンポーネントは、**Planning** と**Perception** コンポーネントから提供される情報を使用して、車両を安全かつ効率的に制御します。 - -**Control** コンポーネントには、次の主要モジュールが含まれます: - -- **Lateral Control**: ステアリングを制御して、車両が**Trajectory Planner** によって生成された経路に沿って走行できるようにします。 -- **Longitudinal Control**: ブレーキとアクセルを制御して、車両の速度と加速度が**Speed Planner** によって決定されたプロファイルに従うようにします。 - -**HAD Map** は、高精度な地図データを提供し、**Planning** コンポーネントと**Perception** コンポーネントが周囲の環境を正確に認識できるようにします。 - -**Autoware** の**Localization** コンポーネントは、**HAD Map** を利用して、車両の**current pose** と姿勢を決定します。 - -**Autoware** の**Visualization** コンポーネントは、**Planning**、**Perception**、**Control** コンポーネントによって生成された情報をユーザーに表示します。 - -### 考慮事項 - -**Planning** コンポーネントは、次の考慮事項を考慮します。 - -- **Collision Avoidance**: 車両が障害物や他の車両と衝突しないようにします。 -- **Velocity Violation**: 車両の速度が許容範囲を超えないようにします。 -- **Acceleration Violation**: 車両の加速度が許容範囲を超えないようにします。 -- **Path 'post resampling'**: **Path Smoother** によって生成された経路が**Trajectory Planner** によって生成された経路を正確に表していることを確認します。 -- **Vehicle Dynamics**: 車両の運動特性を考慮して、安全で快適な走行を確保します。 - -| 名称 | 型 | 説明 | -| ----------------- | ------------------------------- | ------------------------ | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリングされた点群 | +| 名称 | 型 | 説明 | +| ----------------- | ------------------------------- | ----------------- | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | リファレンスポイント | +| `~/input/indices` | `pcl_msgs::msg::Indices` | リファレンスインデックス | + +### 出力 + +このセクションでは、Autoware.Auto Autonomous Valet Parking Planning / Motion Planning フレームワークのアーキテクチャについて説明します。 + +アーキテクチャは、次のコンポーネントで構成されています。 + +* **Plan Evaluator:** + * `post resampling`されたパスを評価し、点数を付けます。 + * 各パスには、スコアが関連付けられています。 +* **Trajectory Optimizer:** + * 特定の経路に対して、最適な制御入力を生成します。 + * 制御入力は、加速度と角速度として表されます。 +* **Path Planning:** + * 環境マップを使用して、パスを生成します。 + * パスの形状は、点と曲線で表現されます。 +* **Smoother:** + * パスを滑らかにし、車の動力学的制約を考慮に入れます。 +* **Collision Checker:** + * パスと環境との衝突を確認します。 + * 衝突が検出されると、パスは廃棄されます。 +* **Map:** + * 環境を表現します。 + * 地図には、道路、障害物、標識などの情報が含まれます。 +* **Current Pose:** + * 車の現在の位置と向きを表現します。 + * Current Poseは、Planning / Motion Planningの重要な入力です。 + +| Name | Type | Description | +| ----------------- | ------------------------------- | --------------- | +| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタされた点群 | ## パラメータ -### ノードのパラメータ +### ノードパラメータ -| 名前 | 型 | デフォルト値 | 説明 | -| -------------------- | ------ | ------------ | ------------------------------------------------ | -| `input_frame` | 文字列 | " " | 入力フレーム ID | -| `output_frame` | 文字列 | " " | 出力フレーム ID | -| `has_static_tf_only` | ブール | false | TF を一度だけリスンするフラグ | -| `max_queue_size` | 整数 | 5 | 入力/出力トピックの最大キューサイズ | -| `use_indices` | ブール | false | ポイントクラウドのインデックスを使用するフラグ | -| `latched_indices` | ブール | false | ポイントクラウドのインデックスをラッチするフラグ | -| `approximate_sync` | ブール | false | 近似同期オプションを使用するフラグ | +| 名前 | タイプ | デフォルト値 | 説明 | +| --------------------- | ------ | ------------- | -------------------------------------- | +| `input_frame` | 文字列 | " " | 入力フレーム ID | +| `output_frame` | 文字列 | " " | 出力フレーム ID | +| `has_static_tf_only` | ブール | false | TF を一度だけリッスンするフラグ | +| `max_queue_size` | 整数 | 5 | 入力/出力トピックの最大キューサイズ | +| `use_indices` | ブール | false | ポイントクラウドのインデックスを使用 | +| `latched_indices` | ブール | false | ポイントクラウドのインデックスをラッチ | +| `approximate_sync` | ブール | false | 近似同期オプションを使用 | -## 前提 / 制限事項 +## 仮定/既知の制限 -`autoware::pointcloud_preprocessor::Filter`は、[この問題](https://github.com/ros-perception/perception_pcl/issues/9)のため、pcl_perception [1]に基づいて実装されています。 +`autoware::pointcloud_preprocessor::Filter` は [この問題](https://github.com/ros-perception/perception_pcl/issues/9) のため、pcl_perception [1] に基づいて実装されています。 ## 参考文献/外部リンク [1] + diff --git a/perception/autoware_image_projection_based_fusion/README.md b/perception/autoware_image_projection_based_fusion/README.md index efc115f6c6da9..9994e05b3a25e 100644 --- a/perception/autoware_image_projection_based_fusion/README.md +++ b/perception/autoware_image_projection_based_fusion/README.md @@ -2,116 +2,62 @@ ## 目的 -`autoware_image_projection_based_fusion`は、イメージと3Dポイントクラウドまたは障害物(バウンディングボックス、クラスタ、またはセグメンテーション)から検出された障害物(バウンディングボックスまたはセグメンテーション)をフュージョンするためのパッケージです。 +`autoware_image_projection_based_fusion` は、画像と 3D 点群から検出された障害物(バウンディングボックスまたはセグメンテーション)をフュージョンするパッケージです。 -## 処理内容 / アルゴリズム +## 内部動作 / アルゴリズム ### 同期アルゴリズム #### マッチング -各カメラとLiDARのオフセットはそのシャッタータイミングによって設定されています。 -タイムスタンプにオフセットを適用した後、ポイントクラウドトピックのタイムスタンプとROIメッセージ間のインターバルがマッチングの閾値よりも小さい場合、2つのメッセージはマッチングされます。 +各カメラとライダー間のオフセットは、シャッタータイミングに基づいて設定されます。 +タイムスタンプにオフセットを適用した後、点群トピックのタイムスタンプと ROI メッセージ間のインターバルが一致しきい値未満の場合、2 つのメッセージは一致します。 ![roi_sync_image1](./docs/images/roi_sync_1.png) -Autoware.universeのTIER IV Robotaxiでの現在のデフォルト値は次のとおりです。 - -- input_offset_ms: [61.67、111.67、45.0、28.33、78.33、95.0] +TIER IV Robotaxi の autoware.universe の現在のデフォルト値は次のとおりです。 +- input_offset_ms: [61.67, 111.67, 45.0, 28.33, 78.33, 95.0] - match_threshold_ms: 30.0 #### フュージョンとタイマー ![roi_sync_image2](./docs/images/roi_sync_2.png) -メッセージのサブスクリプションステータスは「O」で示されます。 - -1. あるポイントクラウドメッセージが以下の条件を満たしてサブスクライブされる場合、 - -(a). a camera image is matched -(b). a timer starts counting to the pre-configured timeout value. - -2. if a camera image is matched, the timer resets. - -3. if the timer expires, the sign is reset to 'X' and the subscription will be terminated. - -### Communication - -#### Sensor independence - -The fusion module can works only with pointcloud data if image data is not available, or only with image data if pointcloud data is not available. - -#### No need to share coordinate frame - -The fusion module works on `post resampling` pointcloud and Bird's-eye-view (BEV) camera image. -The fusion module does not have to share the coordinate frame with the sensors, because each sensor has its own T(leader -> subject) transform. - -#### Sensor timing management - -Sensor timing is managed by the ROI sync module. -It is required for each Planning sensor to have its own topics for ROI and data. - -### Integration with Planning +メッセージのサブスクリプションステータスには「O」が付けられます。 -The fusion module has no strong dependency on the Planning module. -The Planning module can get all the necessary information from the fused messages. +1. 次の条件下で点群メッセージがサブスクライブされた場合: -## Installation +| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | +| :-----------------: | :--------: | :-------: | :-------: | :-------: | +| サブスクリプションステータス | | O | O | O | -source code directory: `autoware/autoware/core/autoware_image_projection_based_fusion` +roi メッセージが一致する場合、それらを結合し、ポイントクラウド メッセージのポストプロセスを行います。一致しない場合、一致した roi メッセージを結合してポイントクラウドをキャッシュします。 -## Usage +2.以下条件下でポイントクラウド メッセージをサブスクライブする場合: -### Required stack +| | 点群 | roiメッセージ1 | roiメッセージ2 | roiメッセージ3 | +| :--------------------: | :---------: | :-------------: | :-------------: | :-------------: | +| サブスクリプショステータス | | O | O | | -- ROS -- autoware_can_msgs -- autoware_perception_msgs -- autoware_planning_msgs -- cv_bridge -- octomap_ros +roi msg とマッチングできる場合は、それらを融合して点群をキャッシュします。 -### Example +3.以下の条件下で点群メッセージがサブスクライブされた場合: -tum_slayer_1/base_linkへ変換されたcamera1のCameraInfoと、fusion_imageのサブスクライバを起動します。 +| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | +| :--------------: | :--------: | :-------: | :-------: | :-------: | +| 登録ステータス | 参 | 参 | 参 | | -```bash -roslaunch autoware_image_projection_based_fusion fusion.launch image_topic:=/camera1/front_left/compressed image_info_frame_id:=/base_link output_topic:=/fusion_image fusion_node_name:=fused_image -``` - -| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | -| :--------------------------: | :--------: | :-------: | :-------: | :-------: | -| サブスクリプションステータス | | 有 | 有 | 有 | - -roi msgsにマッチング可能な場合はそれらを融合してポイントクラウドメッセージを処理します。 -それ以外の場合はマッチングしたroi msgsを融合してポイントクラウドをキャッシュします。 - -2.次の条件下でポイントクラウドメッセージにサブスクライブした場合: - -| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | -| :------: | :--------: | :-------: | :-------: | :-------: | -| 受信状態 | | O | O | | - -1. ROI メッセージが照合できる場合、それらを融合し、点群をキャッシュします。 +roi msg 3 が次の pointcloud メッセージの到着、またはタイムアウトが発生する前にサブスク ライブされた場合、一致したら融合を行い、一致しなかった場合は次の roi msg 3 を待ちます。 +roi msg 3 が次の pointcloud メッセージの到着、またはタイムアウトが発生する前にサブスク ライブされない場合、pointcloud メッセージをそのまま後処理します。 -2. 以下条件下で点群メッセージが購読された場合: - -| | pointcloud | roi msg 1 | roi msg 2 | roi msg 3 | -| :--------------------: | :--------: | :-------: | :-------: | :-------: | -| サブスクリプション状態 | ○ | ○ | ○ | - -roi msg 3 が次のポイントクラウドメッセージの受信またはタイムアウト前にサブスクライブされている場合は、一致した場合に融合し、そうでなければ次の roi msg 3 を待ちます。 - -roi msg 3 が次のポイントクラウドメッセージの受信またはタイムアウト前にサブスクライブされていない場合は、そのままポイントクラウドメッセージを事後処理します。 - -タイムアウトのしきい値は、事後処理時間に応じて設定する必要があります。 -たとえば、事後処理時間が約50ミリ秒の場合、タイムアウトのしきい値は50ミリ秒未満に設定する必要があり、全体の処理時間が100ミリ秒未満になるようにする必要があります。 -Autoware.universe での現在のデフォルト値:XX1: - timeout_ms: 50.0 +タイムアウトのしきい値は後処理時間に応じて設定する必要があります。 +たとえば、後処理時間が約 50 ミリ秒の場合は、タイムアウトのしきい値を 50 ミリ秒未満に設定して、全体の処理時間を 100 ミリ秒未満にする必要があります。 +autoware.universe での現在の XX1 のデフォルト値: - timeout_ms: 50.0 #### `build_only` オプション -`pointpainting_fusion` ノードには、ONNX ファイルから TensorRT エンジンファイルを構築するための `build_only` オプションがあります。 -Autoware Universe の `.param.yaml` ファイルのすべての ROS パラメータを移動させることが好まれますが、`build_only` オプションはプレタスクとしてビルドを実行するためのフラグとして使用される可能性があるため、今のところ `.param.yaml` ファイルには移動されていません。次のコマンドで実行できます。 +`pointpainting_fusion` ノードには、ONNX ファイルから TensorRT エンジン ファイルを構築する `build only` オプションがあります。Autoware Universe の `.param.yaml` ファイル内のすべての ROS パラメータを移動するのが望ましいですが、`build_only` オプションは現時点では `.param.yaml` ファイルには移動されていません。これは、タスクの前の段階としてビルドを実行するためのフラグとして使用される可能性があるためです。以下のコマンドで実行できます。 + ```bash ros2 launch autoware_image_projection_based_fusion pointpainting_fusion.launch.xml model_name:=pointpainting model_path:=/home/autoware/autoware_data/image_projection_based_fusion model_param_path:=$(ros2 pkg prefix autoware_image_projection_based_fusion --share)/config/pointpainting.param.yaml build_only:=true @@ -119,13 +65,14 @@ ros2 launch autoware_image_projection_based_fusion pointpainting_fusion.launch.x #### 制限事項 -rclcpp::TimerBase таймерは for ループを break できないため、roi メッセージを中間に融合するときに時間が切れた場合でも、すべてのメッセージが融合されるまでプログラムは実行されます。 +rclcpp::TimerBase タイマーは for ループを中断できません。そのため、真ん中で roi メッセージを融合するときに時間が切れても、すべてのメッセージが融合されるまでプログラムは実行されます。 + +### 各融合アルゴリズムの詳細については、次のリンクを参照してください -### 各融合アルゴリズムの詳細な説明は次のリンクにあります +| フュージョン名 | 説明 | 詳細 | +| ------------------------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------- | +| roi_cluster_fusion | 2Dオブジェクト検出器のROIによってクラスタの分類ラベルを上書きします。 | [link](./docs/roi-cluster-fusion.md) | +| roi_detected_object_fusion | 2Dオブジェクト検出器のROIによって検出されたオブジェクトの分類ラベルを上書きします。 | [link](./docs/roi-detected-object-fusion.md) | +| pointpainting_fusion | 2Dオブジェクト検出器のROIで点群にペイントし、3Dオブジェクト検出器に入力します。 | [link](./docs/pointpainting-fusion.md) | +| roi_pointcloud_fusion | 2Dオブジェクト検出器のROIと点群をマッチングして、未知のラベルのオブジェクトを検出します | [link](./docs/roi-pointcloud-fusion.md) | -| フュージョン名 | 説明 | 詳細 | -| ---------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------- | -| `roi_cluster_fusion` | 2Dオブジェクト検出器のROIから、クラスタの分類ラベルを上書き | [リンク](./docs/roi-cluster-fusion.md) | -| `roi_detected_object_fusion` | 2Dオブジェクト検出器のROIから、検出オブジェクトの分類ラベルを上書き | [リンク](./docs/roi-detected-object-fusion.md) | -| `pointpainting_fusion` | 2Dオブジェクト検出器のROIで点群にペイントし、3Dオブジェクト検出器にフィード | [リンク](./docs/pointpainting-fusion.md) | -| `roi_pointcloud_fusion` | 2Dオブジェクト検出器のROIと点群を照合し、ラベル不明のオブジェクトを検出 | [リンク](./docs/roi-pointcloud-fusion.md) | diff --git a/perception/autoware_lidar_apollo_instance_segmentation/README.md b/perception/autoware_lidar_apollo_instance_segmentation/README.md index b0d6319caafcd..fa110aafa66e5 100644 --- a/perception/autoware_lidar_apollo_instance_segmentation/README.md +++ b/perception/autoware_lidar_apollo_instance_segmentation/README.md @@ -1,134 +1,175 @@ -# autoware_lidar_apollo_instance_segmentation +**autoware_lidar_apollo_instance_segmentation** ![Peek 2020-04-07 00-17](https://user-images.githubusercontent.com/8327598/78574862-92507d80-7865-11ea-9a2d-56d3453bdb7a.gif) ## 目的 -このノードは、CNNに基づくモデルと障害物クラスタリング手法を使用して、障害物(例:自動車、トラック、自転車、歩行者)にLiDARセンサから取得した3D点群データをセグメント化します。 +このノードは、CNNベースのモデルと障害物クラスタリング方法に基づいて、LiDARセンサーからの3D点群データを、自動車、トラック、自転車、歩行者などの障害物にセグメントします。 ## 内部動作/アルゴリズム -Apolloの[元の設計](https://github.com/ApolloAuto/apollo/blob/r6.0.0/docs/specs/3d_obstacle_perception.md)を参照してください。 +Apolloによる[オリジナルデザイン](https://github.com/ApolloAuto/apollo/blob/r6.0.0/docs/specs/3d_obstacle_perception.md)を参照してください。 ## 入出力 ### 入力 - -- `/points_raw` (`PointCloud2`): センサから取得したLiDAR点群のトピック -- `/imu/data` (`Imu`): 車両の姿勢と角速度を更新するトピック -- `/vehicle/status/control_mode` (`UInt8`): 制御モード(オートドライブ、手動運転)のトピック -- `/had_map_available` (`Bool`): HDマップが利用可能な場合(True、False)のトピック +- `points2_apollo` (`SensorMeasurements`): LiDARポイントデータ +- `current pose` (`geometry_msgs/Pose`): 自車位置 +- `polygon` (`autoware_msgs/DynamicPolygonArray`): 交通規制情報(オプション) ### 出力 +- `detected_objects` (`autoware_msgs/DetectedObjectsArray`): 検出された障害物情報 + +### パラメータ + +`Voxel Grid Filter` +- `voxel_grid_size` (`double`): ボクセルグリッドサイズ [m] +- `voxel_grid_leaf_size` (`double`): ボクセルグリッドリーフサイズ [m] + +`Voxel Feature Extractor` +- `voxel_feature_extractor.use_height` (`bool`): 高さを利用するかどうか +- `voxel_feature_extractor.use_intensity` (`bool`): 強度を利用するかどうか +- `voxel_feature_extractor.use_normal` (`bool`): 法線を利用するかどうか +- `voxel_feature_extractor.use_shape` (`bool`): 形状を利用するかどうか +- `voxel_feature_extractor.use_semantic` (`bool`): セマンティックを利用するかどうか +- `voxel_feature_extractor.intensity_threshold` (`double`): 強度閾値 +- `voxel_feature_extractor.shape_threshold` (`double`): 形状閾値 +- `voxel_feature_extractor.semantic_threshold` (`double`): セマンティック閾値 + +`Frustum Point Nets` +- `frustum_pointnets.num_output_features` (`int`): 出力フィーチャーの数 +- `frustum_pointnets.use_auxiliary_loss` (`bool`): 補助損失を使用するかどうか +- `frustum_pointnets.use_center_loss` (`bool`): 中心損失を使用するかどうか +- `frustum_pointnets.use_size_loss` (`bool`): サイズ損失を使用するかどうか +- `frustum_pointnets.use_heading_loss` (`bool`): ヘディング損失を使用するかどうか +- `frustum_pointnets.use_semantic_loss` (`bool`): セマンティック損失を使用するかどうか +- `frustum_pointnets.use_rotation_loss` (`bool`): 回転損失を使用するかどうか +- `frustum_pointnets.use_translation_loss` (`bool`): 並進損失を使用するかどうか +- `frustum_pointnets.use_velocity_loss` (`bool`): 速度損失を使用するかどうか +- `frustum_pointnets.center_loss_weight` (`double`): センター損失の重み +- `frustum_pointnets.size_loss_weight` (`double`): サイズ損失の重み +- `frustum_pointnets.heading_loss_weight` (`double`): ヘディング損失の重み +- `frustum_pointnets.semantic_loss_weight` (`double`): セマンティック損失の重み +- `frustum_pointnets.rotation_loss_weight` (`double`): 回転損失の重み +- `frustum_pointnets.translation_loss_weight` (`double`): 並進損失の重み +- `frustum_pointnets.velocity_loss_weight` (`double`): 速度損失の重み + +`Clustering` +- `clustering.min_pts` (`int`): クラスタリングにおける最小点数 +- `clustering.max_pts` (`int`): クラスタリングにおける最大点数 +- `clustering.min_x` (`double`): クラスタリングにおける最小x座標 [m] +- `clustering.max_x` (`double`): クラスタリングにおける最大x座標 [m] +- `clustering.min_y` (`double`): クラスタリングにおける最小y座標 [m] +- `clustering.max_y` (`double`): クラスタリングにおける最大y座標 [m] +- `clustering.min_z` (`double`): クラスタリングにおける最小z座標 [m] +- `clustering.max_z` (`double`): クラスタリングにおける最大z座標 [m] + +`Center Filter` +- `center_filter.min_distance` (`double`): センターフィルターにおける最小距離 [m] +- `center_filter.max_distance` (`double`): センターフィルターにおける最大距離 [m] +- `center_filter.max_center_count` (`int`): センターフィルターにおける最大センター数 +- `center_filter.max_point_distance` (`double`): センターフィルターにおける最大ポイント距離 [m] +- `center_filter.max_point_count` (`int`): センターフィルターにおける最大ポイント数 + +### 補足情報 + +- このノードは、ベロダイナの16チャンネルデータを想定しています。`'post resampling'`の`'Field name'`を`'intensity'`に設定する必要があります。 + +| 名称 | タイプ | 説明 | +| ------------------ | ------------------------- | ---------------------------------- | +| `input/pointcloud` | `sensor_msgs/PointCloud2` | ライダーセンサーからの点群データ | -- `/apollo/perception/obstacles` (`ObjectArray`): 検出された障害物のトピック -- `/planning/predicted_objects` (`ObjectArray`): Planningコンポーネントで使用するため、予測軌跡を持つ障害物のトピック - -| 名称 | 型 | 説明 | -| ------------------ | ------------------------- | -------------------------------- | -| `input/pointcloud` | `sensor_msgs/PointCloud2` | レーザーセンサーからの点群データ | - -## 自動運転ソフトウェアのドキュメント - -### システムアーキテクチャ - -本システムは、以下のようなモジュールで構成されています。 - -**Planningモジュール** - -- 経路計画と制御 -- 'post resampling' -- 自車位置の推定 - -**Controlモジュール** - -- 速度と加速度の制御 -- 車両運動学の制御 +### 出力 -**Perceptionモジュール** +**はじめに** -- 車両と周辺環境の検出とトラッキング +このドキュメントは、Autowareの自動運転ソフトウェアにおけるplanningコンポーネン/モジュールのアーキテクチャの概要を提供します。 -**Localizationモジュール** +**コンポーネン/モジュール** -- 自車位置と姿勢の推定 +アーキテクチャは次のコンポーネン/モジュールで構成されています。 -### 要件 +- **reference_path_generator (RPG):** 自車位置を考慮して、目標経路を生成します。 +- **velocity_planner (VP):** 目標速度を生成します。 +- **adaptive_lateral_controller (ALC):** 横方向の制御を実行します。 +- **stationarity_checker (SC):** 静止した障害物を検出します。 +- **trajectory_follower (TF):** 目標経路と速度に従って、車両を制御します。 +- **mapping:** 環境に関する情報を提供します。 +- **localization:** 自車位置を推定します。 +- **perception:** 障害物や交通状況を検出します。 -**機能要件** +**アプローチ** -- 障害物を回避しながらの自律走行 -- 速度と加速度の制御 -- 路面状況への対応 +planningコンポーネン/モジュールは、次のアプローチを使用します。 -**非機能要件** +- **モデル予測制御 (MPC):** 未来の制御入力を計算します。 +- **確率的計画:** 不確実性を考慮します。 +- `post resampling`手法:** 感知データの不確実性を軽減します。 -- リアルタイム処理 -- 安全性と信頼性 -- Autowareとの互換性 +**実装** -### パフォーマンス基準 +このアーキテクチャは、ROS (Robot Operating System) で実装されています。 -**安全性** +**インターフェース** -- 障害物逸脱量:0.1m以内 -- 速度逸脱量:0.5m/s以内 -- 加速度逸脱量:0.2m/s2以内 +planningコンポーネン/モジュールは、次のインターフェースを介して他のモジュールと通信します。 -**効率性** +- **Topic:** ROSトピックを使用してデータの送受信を行います。 +- **Service:** ROSサービスを使用して、機能の呼び出しを行います。 -- 1秒あたりの演算時間:10ms未満 +**利点** -### インターフェース +このアーキテクチャには、次の利点があります。 -**入力** +- モジュール性が高い +- 再利用しやすい +- 拡張しやすい -- センサーデータ -- 自車位置 +**今後の展開** -**出力** +今後の展開として、以下の機能が計画されています。 -- 運転コマンド -- システム状態 +- 交通信号の制御 +- 車両間通信 +- センサーフュージョン -| 名称 | タイプ | 説明 | -| --------------------------- | -------------------------------------------------- | ------------------------------------------------------ | -| `output/labeled_clusters` | `tier4_perception_msgs/DetectedObjectsWithFeature` | ラベル付きの点群クラスタを持つ検出されたオブジェクト。 | -| `debug/instance_pointcloud` | `sensor_msgs/PointCloud2` | 視覚化用のセグメント化された点群。 | +| 名称 | タイプ | 説明 | +| ----------------------------- | ------------------------------------------------------ | --------------------------------------------------- | +| `output/labeled_clusters` | `tier4_perception_msgs/DetectedObjectsWithFeature` | ラベル付きのポイントクラウドクラスタを持った検出オブジェクト | +| `debug/instance_pointcloud` | `sensor_msgs/PointCloud2` | 視覚化用のセグメント分割されたポイントクラウド | ## パラメータ -### ノードパラメーター +### ノードパラメータ なし -### コアパラメーター +### コアパラメータ -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------------- | ------ | -------------------- | -------------------------------------------------------------------------- | -| `score_threshold` | double | 0.8 | 検出オブジェクトのスコアがこの値より低い場合、オブジェクトは無視されます。 | -| `range` | int | 60 | フィーチャマップの半分の長さ [m] | -| `width` | int | 640 | フィーチャマップのグリッド幅 | -| `height` | int | 640 | フィーチャマップのグリッド高さ | -| `engine_file` | string | "vls-128.engine" | CNNモデルのTensorRTエンジンファイルの名前 | -| `prototxt_file` | string | "vls-128.prototxt" | CNNモデルのprototxtファイルの名前 | -| `caffemodel_file` | string | "vls-128.caffemodel" | CNNモデルのcaffemodelファイルの名前 | -| `use_intensity_feature` | bool | true | ポイントクラウドの強度フィーチャを使用するフラグ | -| `use_constant_feature` | bool | false | ポイントクラウドの角度と距離のフィーチャを使用するフラグ | -| `target_frame` | string | "base_link" | ポイントクラウドデータはこのフレームに変換されます。 | -| `z_offset` | int | 2 | 標的フレームからのzオフセット [m] | -| `build_only` | bool | `false` | TensorRTエンジンファイルが構築された後にノードをシャットダウンします。 | +| 名称 | 種類 | デフォルト値 | 説明 | +| ---------------------- | ------ | -------------------- | --------------------------------------------------------------------------- | +| `score_threshold` | double | 0.8 | 検出オブジェクトのスコアがこの値よりも低い場合、オブジェクトは無視されます。 | +| `range` | int | 60 | フィーチャマップの片側の長さの半分。 [m] | +| `width` | int | 640 | フィーチャマップのグリッド幅。 | +| `height` | int | 640 | フィーチャマップのグリッド高さ。 | +| `engine_file` | string | "vls-128.engine" | CNNモデルのTensorRTエンジンファイルの名前。 | +| `prototxt_file` | string | "vls-128.prototxt" | CNNモデルのprototxtファイルの名前。 | +| `caffemodel_file` | string | "vls-128.caffemodel" | CNNモデルのcaffemodelファイルの名前。 | +| `use_intensity_feature` | bool | true | 点群の距離特徴を使用するフラグ。 | +| `use_constant_feature` | bool | false | 点群の距離と距離の特徴を使用するフラグ。 | +| `target_frame` | string | "base_link" | 点群データはこのフレームに変換されます。 | +| `z_offset` | int | 2 | ターゲットフレームからのzオフセット。 [m] | +| `build_only` | bool | `false` | TensorRTエンジンファイルのビルド後にノードをシャットダウンする。 | -## 前提条件 / 制限事項 +## 想定 / 既知の制限 -CNNモデル用のトレーニングコードはありません。 +CNN モデル用のトレーニング コードはありません。 ### 注意 -このパッケージは3つの外部コードを使用しています。 -トレーニング済みファイルはアポロによって提供されます。ビルド時にトレーニング済みファイルは自動的にダウンロードされます。 +このパッケージは、3 つの外部コードを使用しています。トレーニングされたファイルはアポロによって提供されており、ビルド時に自動的にダウンロードされます。 -元のURL +元の URL - VLP-16: @@ -137,9 +178,10 @@ CNNモデル用のトレーニングコードはありません。 - VLS-128: -サポートされているライダーはvelodyne 16、64、128ですが、velodyne 32や他のライダーも高い精度で使用できます。 +サポートされているライダーは Velodyne 16、64、128 です。ただし、Velodyne 32 やその他のライダーも高い精度で使用できます。 + +1. [アポロ 3D 障害物知覚の説明](https://github.com/ApolloAuto/apollo/blob/r7.0.0/docs/specs/3d_obstacle_perception.md) -1. [アポロ3D障害物検知の説明](https://github.com/ApolloAuto/apollo/blob/r7.0.0/docs/specs/3d_obstacle_perception.md) ```txt /****************************************************************************** @@ -159,8 +201,9 @@ CNNモデル用のトレーニングコードはありません。 *****************************************************************************/ ``` -2. [tensorRTWrapper](https://github.com/lewes6369/tensorRTWrapper) : - lib ディレクトリ内で使用されます。 +2. [tensorRTWrapper](https://github.com/lewes6369/tensorRTWrapper): + libディレクトリで使用します。 + ```txt MIT License @@ -186,31 +229,31 @@ CNNモデル用のトレーニングコードはありません。 SOFTWARE. ``` -### 3. autoware_perception の説明 - -[GitHub](https://github.com/k0suke-murakami/autoware_perception/tree/feature/integration_baidu_seg/lidar_apollo_cnn_seg_detect) - -```txt -/* -* Copyright 2018-2019 Autoware Foundation. All rights reserved. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ -``` - -### 特別謝辞 - -- [Apolloプロジェクト](https://github.com/ApolloAuto/apollo) +3. [autoware_perception 説明](https://github.com/k0suke-murakami/autoware_perception/tree/feature/integration_baidu_seg/lidar_apollo_cnn_seg_detect) + + + ```txt + /* + * Copyright 2018-2019 Autoware Foundation. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + ``` + +### 特別御礼 + +- [Apollo Project](https://github.com/ApolloAuto/apollo) - [lewes6369](https://github.com/lewes6369) -- [Autoware財団](https://github.com/autowarefoundation/autoware) -- [竹内 康輔](https://github.com/kosuke55) (TIER IV) +- [Autoware Foundation](https://github.com/autowarefoundation/autoware) +- [竹内浩介](https://github.com/kosuke55) (TIER IV) + diff --git a/perception/autoware_lidar_centerpoint/README.md b/perception/autoware_lidar_centerpoint/README.md index 5d8ec3d7f0744..e44826bf87aeb 100644 --- a/perception/autoware_lidar_centerpoint/README.md +++ b/perception/autoware_lidar_centerpoint/README.md @@ -1,152 +1,157 @@ -# autoware_lidar_centerpoint +## autoware_lidar_centerpoint ## 目的 -autoware_lidar_centerpointは、動的3Dオブジェクトを検出するためのパッケージです。 +autoware_lidar_centerpoint は、3 次元の動的物体検出を行うためのパッケージです。 -## 内部処理やアルゴリズム +## 動作原理 / アルゴリズム -この実装では、TensorRTによる推論にPointPillarsベースのネットワークを使用しているCenterPoint [1]が使用されています。 +この実装では、CenterPoint [1] は PointPillars ベース [2] のネットワークを使用して TensorRT で推論を行います。 -このモデルは、を使用してトレーニングされました。 +モデルのトレーニングには を使用しました。 ## 入出力 ### 入力 -- LiDAR点群 +| 名称 | タイプ | 説明 | +| -------------------- | ------------------------------- | ----------------- | +| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 入力点群 | ### 出力 -- クラスID -- Bounding Box -- 速度ベクトル -- 加速度ベクトル +**自動運転ソフトウェアに関するドキュメント** -| 名称 | タイプ | 説明 | -| -------------------- | ------------------------------- | -------------------- | -| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 入力ポイントクラウド | +このドキュメントは、自動運転ソフトウェアの仕組みとコンポーネントについて説明します。 -### 出力 +**コンポーネン** + +自動運転ソフトウェアは、以下を含むいくつかの主要なコンポーネントで構成されています。 + +- ** percepción (知覚)**: 周囲環境を検出し、物体を認識します。 +- **Planing ( planificación)**: 車両の経路を計画し、障害物を回避します。 +- **Control (制御)**: 車両を安全に走行させます。 + +**サブコンポーネント** + +各コンポーネントはさらに、以下のサブコンポーネントに分類できます。 -**計画(Planning)コンポーネントの評価シナリオ** +**Percepción (知覚)** -**目的:** -本シナリオ群は、自動運転ソフトウェアの計画コンポーネントの機能と性能を評価することを目的としています。 +- カメラとレーダーを使用したセンサーフュージョン +- 物体検出とトラッキング +- 道路マーカーと信号認識 -**シナリオ:** +**Planing ( planificación)**: -1. **回避(回避距離):** 車両が障害物を回避するときの、各Planningアルゴリズムの性能を評価します。 -2. **停止線(停止位置):** 車両が停止線で停止するときの、Planningアルゴリズムの精度を評価します。 -3. **駐車(最終位置):** 車両が駐車スペースに駐車するときの、Planningアルゴリズムの堅牢性を評価します。 -4. **車線逸脱(逸脱量):** 車両が車線から逸脱するときの、Planningアルゴリズムの応答性を評価します。 -5. **速度逸脱(逸脱量):** 車両が設定された速度を逸脱するときの、Planningアルゴリズムの安定性を評価します。 -6. **加速度逸脱(逸脱量):** 車両が設定された加速度を逸脱するときの、Planningアルゴリズムの滑らかさを評価します。 -7. **急カーブ(最小曲率半径):** 車両が急カーブを走行するときの、Planningアルゴリズムの安全性と快適性を評価します。 -8. **勾配(勾配角度):** 車両が勾配を走行するときの、Planningアルゴリズムの適切さと堅牢性を評価します。 -9. **周囲車両予測(TTC):** 車両が周囲車両と遭遇するときの、Planningアルゴリズムの予測性能と応答時間を評価します。 -10. **ディスタンスセンシング(距離):** 車両が障害物や他の車両との距離を測定するときの、Planningアルゴリズムの精度と信頼性を評価します。 +- パス計画と軌道生成 +- 障害物回避と安全確認 +- ' post resampling' -**評価指標:** +**Control (制御)**: -- 各シナリオにおける目標ポイント(回避距離、停止位置、駐車位置など)からの偏差 -- 'post resampling'前のPlanning出力と'post resampling'後のPlanning出力との間の軌跡の滑らかさ -- 車両の自車位置とPlanningが生成する軌跡との間の誤差 -- 計画された速度と加速度と、実際の速度と加速度との間の偏差 -- 計画された軌跡の曲率半径と、実際の軌跡の曲率半径との間の偏差 -- 車両周囲の障害物や他の車両を回避するために必要な回避時間 -- 車両が障害物や他の車両と衝突する可能性のある衝突時間(TTC) +- 車両ダイナミクス制御 +- ブレーキとアクセル制御 +- ステアリング制御 -Autoware Planningコンポーネントの性能評価には、これらのシナリオが利用できます。 +**統合** -| 名前 | タイプ | 説明 | +各コンポーネントとサブコンポーネントは、緊密に統合して自動運転システムが機能します。知覚コンポーネントは情報を収集し、Planingコンポーネントは経路を計画し、制御コンポーネントは車両の走行を制御します。 + +**Autoware** + +Autowareは、オープンソースの自動運転ソフトウェアプラットフォームです。このプラットフォームは、自動運転システムを開発するためのモジュールコレクションを提供します。 + +| 名前 | タイプ | 説明 | | -------------------------- | ------------------------------------------------ | -------------------- | -| `~/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | -| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクルタイム (msg) | -| `debug/processing_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 処理時間 (ms) | +| `~/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出されたオブジェクト | +| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクルタイム (msg) | +| `debug/processing_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 処理時間 (ms) | ## パラメータ ### MLモデルパラメータ -これらのパラメータはONNXファイルに関連付けられており、トレーニングフェーズ中に定義済みです。このパラメータを変更する際は、ONNXファイルも変更してください。また、ONNXファイルを更新する際は、必ずこれらの値を確認してください。 +これらのパラメータはONNXファイルに関連づけられており、学習フェーズ中に事前定義されます。このパラメータを変更するときは、ONNXファイルも必ず変更してください。また、ONNXファイルを更新する際には、常にこれらの値を確認することを忘れないでください。 -| 名称 | タイプ | デフォルト値 | 説明 | +| 名前 | タイプ | デフォルト値 | 説明 | | -------------------------------------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------- | -| `model_params.class_names` | list[string] | ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] | モデル出力のクラス名のリスト | -| `model_params.point_feature_size` | int | `4` | 点群内の各ポイントのフィーチャ数 | -| `model_params.max_voxel_size` | int | `40000` | ボクセルの最大数 | -| `model_params.point_cloud_range` | list[double] | [-76.8, -76.8, -4.0, 76.8, 76.8, 6.0] | 検出範囲 [min_x, min_y, min_z, max_x, max_y, max_z] [m] | -| `model_params.voxel_size` | list[double] | [0.32, 0.32, 10.0] | 各ボクセルのサイズ [x, y, z] [m] | -| `model_params.downsample_factor` | int | `1` | 座標のダウンサンプル係数 | -| `model_params.encoder_in_feature_size` | int | `9` | エンコーダへの入力フィーチャ数 | -| `model_params.has_variance` | bool | `false` | モデルが各バウンディングボックスの姿勢分散と姿勢を出力する場合 `true` | -| `model_params.has_twist` | bool | `false` | モデルが各バウンディングボックスの速度と姿勢を出力する場合 `true` | - -### コア・パラメータ - -| 名前 | タイプ | デフォルト値 | 説明 | -| ------------------------------------------------ | -------------- | ------------------------- | ----------------------------------------------------------------- | -| `encoder_onnx_path` | 文字列 | `""` | VoxelFeatureEncoder ONNX ファイルへのパス | -| `encoder_engine_path` | 文字列 | `""` | VoxelFeatureEncoder TensorRT Engine ファイルへのパス | -| `head_onnx_path` | 文字列 | `""` | DetectionHead ONNX ファイルへのパス | -| `head_engine_path` | 文字列 | `""` | DetectionHead TensorRT Engine ファイルへのパス | -| `build_only` | ブール | `false` | TensorRT エンジンファイルが作成されたらノードをシャットダウンする | -| `trt_precision` | 文字列 | `fp16` | TensorRT 推論の精度: `fp32` または `fp16` | -| `post_process_params.score_threshold` | double | `0.4` | スコアが閾値未満の検出オブジェクトは無視される | -| `post_process_params.yaw_norm_thresholds` | doubleのリスト | [0.3, 0.3, 0.3, 0.3, 0.0] | Yaw ノルムの距離閾値の配列 [rad] | -| `post_process_params.iou_nms_target_class_names` | 文字列のリスト | - | IoU ベースの非最大抑制のターゲットクラス | -| `post_process_params.iou_nms_search_distance_2d` | double | - | 2 つ以上のオブジェクトが値よりも遠い場合、NMS は適用されない | -| `post_process_params.iou_nms_threshold` | double | - | IoU ベースの非最大抑制の IoU 閾値 | -| `post_process_params.has_twist` | ブール | false | モデルが出力値を捻じっているかどうかを示す | -| `densification_params.world_frame_id` | 文字列 | `map` | マルチフレーム点群を統合するワールドフレーム ID | -| `densification_params.num_past_frames` | 整数 | `1` | 現在フレームと統合する過去フレームの数 | +| `model_params.class_names` | string配列 | ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] | モデル出力のクラス名リスト | +| `model_params.point_feature_size` | int | `4` | 点群内の1点あたりの特徴量の数 | +| `model_params.max_voxel_size` | int | `40000` | 最大ボクセル数 | +| `model_params.point_cloud_range` | double配列 | [-76.8, -76.8, -4.0, 76.8, 76.8, 6.0] | 検出範囲 [min_x, min_y, min_z, max_x, max_y, max_z] [m] | +| `model_params.voxel_size` | double配列 | [0.32, 0.32, 10.0] | ボクセルごとのサイズ [x, y, z] [m] | +| `model_params.downsample_factor` | int | `1` | 座標のダウンサンプル係数 | +| `model_params.encoder_in_feature_size` | int | `9` | エンコーダーへの入力特徴量の数 | +| `model_params.has_variance` | bool | `false` | モデルが各バウンディングボックスの姿勢の分散と姿勢の出力を含む場合に真 | +| `model_params.has_twist` | bool | `false` | モデルが各バウンディングボックスの速度と姿勢の出力を含む場合に真 | + +### 主要パラメータ + +| 名前 | タイプ | デフォルト値 | 説明 | +| ------------------------------------------------ | ------------ | ------------ | ------------------------------------------------------------ | +| `encoder_onnx_path` | 文字列 | `""` | VoxelFeatureEncoder ONNX ファイルへのパス | +| `encoder_engine_path` | 文字列 | `""` | VoxelFeatureEncoder TensorRT エンジンのファイルへのパス | +| `head_onnx_path` | 文字列 | `""` | DetectionHead ONNX ファイルへのパス | +| `head_engine_path` | 文字列 | `""` | DetectionHead TensorRT Engine のファイルへのパス | +| `build_only` | ブール | `false` | TensorRT エンジンのファイルが作成された後にノードをシャットダウンする | +| `trt_precision` | 文字列 | `fp16` | TensorRT 推論の精度: `fp32` または `fp16` | +| `post_process_params.score_threshold` | double | `0.4` | スコアがしきい値より小さい検出されたオブジェクトは無視される | +| `post_process_params.yaw_norm_thresholds` | リスト[double] | `[0.3, 0.3, 0.3, 0.3, 0.0]` | ヤオのノルムの距離しきい値の配列[rad] | +| `post_process_params.iou_nms_target_class_names` | リスト[文字列] | - | IoU ベースの非最大抑制のターゲットクラス | +| `post_process_params.iou_nms_search_distance_2d` | double | - | 2 つのオブジェクトがこの値より離れている場合、NMS は適用されません | +| `post_process_params.iou_nms_threshold` | double | - | IoU ベースの非最大抑制の IoU しきい値 | +| `post_process_params.has_twist` | ブール | `false` | モデルが出力値を示すかどうか | +| `densification_params.world_frame_id` | 文字列 | `map` | 複数フレームの点群を融合する世界フレームの ID | +| `densification_params.num_past_frames` | 整数 | `1` | 現在のフレームと融合する過去のフレームの数 | ### `build_only` オプション -`autoware_lidar_centerpoint` ノードには、ONNX ファイルから TensorRT エンジンファイルを構築するための `build_only` オプションがあります。 -Autoware Universe の `.param.yaml` ファイル内のすべての ROS パラメータを移動することが好ましいですが、`build_only` オプションは現時点では `.param.yaml` ファイルに移動されていません。これは、構築をプリタスクとして実行するためのフラグとして使用されることがあるためです。次のコマンドで実行できます。 +`autoware_lidar_centerpoint` ノードには、ONNX ファイルから TensorRT エンジンファイルを構築するための `build_only` オプションがあります。 Autoware ユニバースの `.param.yaml` ファイル内のすべての ROS パラメータを移動することを推奨しますが、`build_only` オプションは、構築を事前タスクとして実行するフラグとして使用できるため、現時点では `.param.yaml` ファイルに移動されていません。次のコマンドで実行できます。 + ```bash ros2 launch autoware_lidar_centerpoint lidar_centerpoint.launch.xml model_name:=centerpoint_tiny model_path:=/home/autoware/autoware_data/lidar_centerpoint model_param_path:=$(ros2 pkg prefix autoware_lidar_centerpoint --share)/config/centerpoint_tiny.param.yaml build_only:=true ``` -## 仮定/既知の制限 +## 前提条件 / 制限事項 -- `object.existence_probability` は DNN 分類信頼度の値であり、確率ではありません。 +- `object.existence_probability` には DNN の分類信頼度の値が格納されており、確率ではありません。 -## トレーニング済みモデル +## 学習済みモデル -以下のリンクをクリックして、トレーニング済みモデルの onnx 形式をダウンロードできます。 +以下のリンクをクリックして、学習済みモデルの onnx 形式をダウンロードできます。 - Centerpoint: [pts_voxel_encoder_centerpoint.onnx](https://awf.ml.dev.web.auto/perception/models/centerpoint/v2/pts_voxel_encoder_centerpoint.onnx), [pts_backbone_neck_head_centerpoint.onnx](https://awf.ml.dev.web.auto/perception/models/centerpoint/v2/pts_backbone_neck_head_centerpoint.onnx) - Centerpoint tiny: [pts_voxel_encoder_centerpoint_tiny.onnx](https://awf.ml.dev.web.auto/perception/models/centerpoint/v2/pts_voxel_encoder_centerpoint_tiny.onnx), [pts_backbone_neck_head_centerpoint_tiny.onnx](https://awf.ml.dev.web.auto/perception/models/centerpoint/v2/pts_backbone_neck_head_centerpoint_tiny.onnx) -`Centerpoint`は、`nuScenes`(約28,000個のライダーフレーム)[8]とTIER IVの内部データベース(約11,000個のライダーフレーム)で60エポックトレーニングしました。 -`Centerpoint tiny`は、`Argoverse 2`(約110,000個のライダーフレーム)[9]とTIER IVの内部データベース(約11,000個のライダーフレーム)で20エポックトレーニングしました。 +`Centerpoint` は `nuScenes` (~28,000 lidar フレーム) [8] と TIER IV の内部データベース (~11,000 lidar フレーム) で 60 エポック学習されました。 +`Centerpoint tiny` は `Argoverse 2` (~110,000 lidar フレーム) [9] と TIER IV の内部データベース (~11,000 lidar フレーム) で 20 エポック学習されました。 -## CenterPointモデルのトレーニングとAutowareへの展開 +## CenterPoint モデルの学習と Autoware へのデプロイ ### 概要 -このガイドでは、**mmdetection3d**リポジトリを使用してCenterPointモデルをトレーニングし、Autoware内にシームレスに展開する方法について説明します。 +このガイドでは、**mmdetection3d** リポジトリを使用して CenterPoint モデルを学習し、Autoware へシームレスにデプロイする方法について説明します。 ### インストール #### 前提条件のインストール -**ステップ1.** [公式ウェブサイト](https://mmpretrain.readthedocs.io/en/latest/get_started.html)からMinicondaをダウンロードしてインストールします。 +**ステップ 1.** [公式サイト](https://mmpretrain.readthedocs.io/en/latest/get_started.html) から Miniconda をダウンロードしてインストールします。 + +**ステップ 2.** Conda 仮想環境を作成してアクティベートします。 -**ステップ2.** conda仮想環境を作成してアクティブにします ```bash conda create --name train-centerpoint python=3.8 -y conda activate train-centerpoint ``` -**ステップ 3.** PyTorch をインストール +**ステップ 3.** PyTorch のインストール + +PyTorch がすでにインストールされていて、CUDA 11.6 と互換性があることを確認してください。これは、最新の Autoware の要件です。 -PyTorch がインストール済みで、Autoware の要件である CUDA 11.6 に対応していることを確認してください。 ```bash conda install pytorch==1.13.1 torchvision==0.14.1 pytorch-cuda=11.6 -c pytorch -c nvidia @@ -154,7 +159,8 @@ conda install pytorch==1.13.1 torchvision==0.14.1 pytorch-cuda=11.6 -c pytorch - #### mmdetection3dのインストール -**ステップ 1.** MIMを使用してMMEngine、MMCV、MMDetectionをインストールします。 +**ステップ 1.** MIMを使用してMMEngine、MMCV、MMDetectionをインストールする + ```bash pip install -U openmim @@ -163,11 +169,12 @@ mim install 'mmcv>=2.0.0rc4' mim install 'mmdet>=3.0.0rc5, <3.3.0' ``` -**手順 2.** mmdetection3d フォークリポジトリのインストール +**ステップ 2.** mmdetection3d の分岐リポジトリのインストール + +mmdetection3d リポジトリのフォークにいくつかの有益な機能強化を導入しました。 +特に、オリジナルの論文との互換性を維持するために、PointPillar z ボクセル特徴量入力をオプションにしました。 +さらに、機能を追加するために PyTorch から ONNX へのコンバータと T4 形式リーダーを統合しました。 -mmdetection3d リポジトリをフォークし、いくつかの貴重な機能強化を加えました。 -特に、PointPillar z ボクセルの特徴量の入力を省略できるようにし、元の論文との互換性を保ちました。 -さらに、追加機能として PyTorch から ONNX へのコンバーターと T4 形式のリーダーを統合しました。 ```bash git clone https://github.com/autowarefoundation/mmdetection3d.git @@ -175,11 +182,12 @@ cd mmdetection3d pip install -v -e . ``` -#### Dockerを使ってトレーニングレポジトリを使用する +#### Dockerを使用してTraining Repositoryを使用する -また、Dockerを使用してmmdetection3dレポジトリを実行できます。mmdetection3dレポジトリとその依存関係を含むDockerイメージを作成するためのDockerfileを提供しています。 +または、Dockerを使用してmmdetection3dリポジトリを実行することもできます。Dockerfileを使用してmmdetection3dリポジトリとその依存関係を持つDockerイメージを構築します。 + +mmdetection3dリポジトリのforkをクローンします -mmdetection3dレポジトリのフォークをクローンする ```bash git clone https://github.com/autowarefoundation/mmdetection3d.git @@ -187,12 +195,14 @@ git clone https://github.com/autowarefoundation/mmdetection3d.git 以下のコマンドを実行して Docker イメージを構築します。 + ```bash cd mmdetection3d docker build -t mmdetection3d -f docker/Dockerfile . ``` -Dockerコンテナを実行する: +Dockerコンテナを実行します: + ```bash docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmdetection3d/data mmdetection3d @@ -200,44 +210,50 @@ docker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmdetection3d/data mmdete ### NuScenes データセットをトレーニング用に準備する -**手順 1.** [公式サイト](https://www.nuscenes.org/download) から NuScenes データセットをダウンロードし、任意のフォルダに解凍します。 +**手順 1.** [公式サイト](https://www.nuscenes.org/download) から NuScenes データセットをダウンロードし、任意のフォルダに展開します。 + +**注意:** NuScenes データセットは大きく、ディスク容量を多く必要とします。ダウンロードする前に十分な容量があることを確認してください。 -**注:** NuScenes データセットは大きく、大量のディスク容量が必要です。処理に取りかかる前に、十分な容量が確保されていることを確認してください。 +**手順 2.** データセットフォルダへのシンボリックリンクを作成する -**手順 2.** データセットフォルダにシンボリックリンクを作成する ```bash ln -s /path/to/nuscenes/dataset/ /path/to/mmdetection3d/data/nuscenes/ ``` -**ステップ 3.** NuScenesデータを実行して準備: +**ステップ 3.** NuScenesデータを準備します。次のコマンドを実行します。 + ```bash cd mmdetection3d python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes ``` -### NuScenes データセットによる CenterPoint のトレーニング +### NuScenes データセットを使用した CenterPoint のトレーニング -#### 設定ファイルの用意 +#### Config ファイルの準備 -NuScenes データセットを使用して CenterPoint モデルをトレーニングする方法を説明する設定ファイルは、`mmdetection3d/projects/AutowareCenterPoint/configs` にあります。この設定ファイルは、[mmdetection3D のこの centerpoint 設定ファイル](https://github.com/autowarefoundation/mmdetection3d/blob/5c0613be29bd2e51771ec5e046d89ba3089887c7/configs/centerpoint/centerpoint_pillar02_second_secfpn_head-circlenms_8xb4-cyclic-20e_nus-3d.py) から派生したバージョンです。 -このカスタム設定では、**use_voxel_center_z パラメーター**が **False** に設定されており、ボクセルの中心点の z 座標が無効になっています。これにより、元の論文の仕様に沿っており、モデルを Autoware と互換性を持たせます。さらに、フィルターのサイズは **[32, 32]** に設定されています。 +CenterPoint モデルを NuScenes データセットでトレーニングするための設定を記載した設定ファイルは、`mmdetection3d/projects/AutowareCenterPoint/configs` に位置しています。この設定ファイルは、[この mmdetection3D からの CenterPoint 設定ファイル](https://github.com/autowarefoundation/mmdetection3d/blob/5c0613be29bd2e51771ec5e046d89ba3089887c7/configs/centerpoint/centerpoint_pillar02_second_secfpn_head-circlenms_8xb4-cyclic-20e_nus-3d.py) の派生バージョンです。 +このカスタム設定では、**use_voxel_center_z パラメータ** が **False** に設定され、ボクセル中心の z 座標が無効になり、元の論文の仕様に沿ってモデルが Autoware と互換性を持つようになります。さらに、フィルタサイズは **[32, 32]** に設定されます。 -CenterPoint モデルは、設定ファイル内のさまざまなパラメーターを変更することで、特定の要件に合わせて調整できます。これには、前処理操作、トレーニング、テスト、モデルアーキテクチャ、データセット、オプティマイザー、学習率スケジューラーなどに関連する調整が含まれます。 +CenterPoint モデルは、設定ファイル内のさまざまなパラメーターを変更することで、特定の要件に合わせて調整できます。 +これには、前処理操作、トレーニング、テスト、モデルアーキテクチャ、データセット、オプティマイザー、学習率スケジューラなどに関連する調整が含まれます。 #### トレーニングの開始 + ```bash python tools/train.py projects/AutowareCenterPoint/configs/centerpoint_custom.py --work-dir ./work_dirs/centerpoint_custom ``` -#### 学習モデルの評価 +#### トレーニング済みモデルの評価 -評価目的で、車両からキャプチャしたサンプル・データセットが含まれています。このデータセットは、以下のLiDARセンサーで構成されています。 -1 x Velodyne VLS128、4 x Velodyne VLP16、1 x Robosense RS Bpearl。このデータセットは600のLiDARフレームを含んでおり、5つの異なるクラス、6905台の車、3951人の歩行者、75人の自転車乗り、162台のバス、326台のトラックの3Dアノテーションが含まれています。サンプル・データセットでは、フレームは2秒ごとに2フレームずつアノテーションされます。このデータセットは、モデルの学習、評価、微調整など、幅広い目的に使用できます。T4フォーマットで構成されています。 +評価用に、以下を含む車両から取得したサンプルデータセットを用意しました。 +LiDARセンサー:1 x ベロダイン VLS128、4 x ベロダイン VLP16、1 x ロボセンス RS Bpearl +このデータセットには 600 個の LiDAR フレームが含まれ、5 つの異なるクラス、6905 台の乗用車、3951 人の歩行者、75 人の自転車利用者、162 台のバス、326 台のトラックの 3D アノテーションが含まれています。サンプルデータセットでは、フレームは 1 秒間に 2 フレームとしてアノテーションされています。このデータセットは、モデルのトレーニング、評価、微調整など、さまざまな目的に使用できます。T4 フォーマットで構成されています。 + +##### サンプルデータセットのダウンロード -##### サンプル・データセットのダウンロード ```bash wget https://autoware-files.s3.us-west-2.amazonaws.com/dataset/lidar_detection_sample_dataset.tar.gz @@ -247,37 +263,41 @@ tar -xvf lidar_detection_sample_dataset.tar.gz ln -s /PATH/TO/DATASET/ /PATH/TO/mmdetection3d/data/tier4_dataset/ ``` -##### データセットの準備と、トレーニングされたモデルの評価 +##### データセットの準備とトレーニング済みモデルの評価 + +トレーニング、評価、テスト用の`.pkl`ファイルを作成します。 -トレーニング、評価、テスト用の `.pkl` ファイルを作成します。 +データセットはT4Datasetの仕様に従ってフォーマットされ、バージョンの1つとして「sample_dataset」が指定されました。 -データセットは T4Dataset 仕様に従ってフォーマットされており、「sample_dataset」をそのバージョンの 1 つとして指定します。 ```bash python tools/create_data.py T4Dataset --root-path data/sample_dataset/ --out-dir data/sample_dataset/ --extra-tag T4Dataset --version sample_dataset --annotation-hz 2 ``` -評価を実行する +***評価の実行*** + ```bash python tools/test.py projects/AutowareCenterPoint/configs/centerpoint_custom_test.py /PATH/OF/THE/CHECKPOINT --task lidar_det ``` -サンプルデータセットとトレーニングデータセットの間のセンサーモダリティのばらつきにより、評価の結果が比較的低くなる可能性があります。モデルのトレーニングパラメータはもともと、車両上部に単一のLiDARセンサーを搭載したNuScenesデータセットに合わせて調整されています。一方、提供されたサンプルデータセットは、車両のベースリンクの位置に配置された連結ポイントクラウドで構成されています。 +評価結果が低くなる可能性があります。サンプルデータセットとトレーニングデータセット間のセンサー方式が異なるためです。モデルのトレーニングパラメータは元々、車両の上部に1つのLiDARセンサーを使用するNuScenesデータセット用に調整されています。一方、提供されるサンプルデータセットには、車両のベースリンク位置に配置された連結された点群が含まれています。 ### AutowareへのCenterPointモデルのデプロイ -#### CenterPoint PyTorchモデルをONNX形式に変換する +#### PyTorch製のCenterPointモデルをONNXフォーマットに変換する + +`autoware_lidar_centerpoint`実装では、ボクセルエンコーダとCenterPointモデルのバックボーン/ネック/ヘッドの2つのONNXモデルが必要で、前処理処理などのネットワークの他の側面は外部で実装されます。`mmdetection3d`リポジトリのフォークでは、CenterPointモデルをAutoware互換のONNXフォーマットに変換するスクリプトを含められています。`mmdetection3d/projects/AutowareCenterPoint`ファイルで見つけることができます。 -autoware_lidar_centerpointの実装では、ONNXモデルを2つ入力として必要とします。ボクセルエンコーダーとCenterPointモデルのバックボーン・ネック・ヘッドなど、ネットワークの他の側面は外部的に実装されています。mmdetection3dリポジトリのフォークの下で、CenterPointモデルをAutoware互換のONNX形式に変換するスクリプトを用意しました。これは `mmdetection3d/projects/AutowareCenterPoint` ファイルにあります。 ```bash python projects/AutowareCenterPoint/centerpoint_onnx_converter.py --cfg projects/AutowareCenterPoint/configs/centerpoint_custom.py --ckpt work_dirs/centerpoint_custom/YOUR_BEST_MODEL.pth --work-dir ./work_dirs/onnx_models ``` -#### カスタムモデルの設定ファイルを生成 +#### カスタムモデルの設定ファイルを作成 + +autoware_lidar_centerpointノードの設定ファイルディレクトリに、**centerpoint_custom.param.yaml**という新しい設定ファイルを作成します。設定ファイルのパラメータ(point_cloud_range、point_feature_size、voxel_sizeなど)をトレーニング設定ファイルに合わせて設定します。 -autoware_lidar_centerpointノードの設定ファイルディレクトリ内に**centerpoint_custom.param.yaml**という新しい設定ファイルを作成する。トレーニング設定ファイルに従ってpoint_cloud_range、point_feature_size、voxel_sizeなどの設定ファイルのパラメータを設定する。 ```yaml /**: @@ -299,52 +319,53 @@ autoware_lidar_centerpointノードの設定ファイルディレクトリ内に #### lidar_centerpoint ノードの起動 + ```bash cd /YOUR/AUTOWARE/PATH/Autoware source install/setup.bash ros2 launch autoware_lidar_centerpoint lidar_centerpoint.launch.xml model_name:=centerpoint_custom model_path:=/PATH/TO/ONNX/FILE/ ``` -### 変更履歴 +### Changelog #### v1 (2022/07/06) -| 名称 | URL | 説明 | -| ------------------ | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| `centerpoint` | [pts_voxel_encoder][v1-encoder-centerpoint]
[pts_backbone_neck_head][v1-head-centerpoint] | このパッケージの実装の制限のため、1 つの変更があります。`PillarFeatureNet` の `num_filters=[32, 32]` | -| `centerpoint_tiny` | [pts_voxel_encoder][v1-encoder-centerpoint-tiny]
[pts_backbone_neck_head][v1-head-centerpoint-tiny] | `v0`の`default`と同じモデル | +| 名前 | URL | 説明 | +| --------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `centerpoint` | [pts_voxel_encoder][v1-encoder-centerpoint]
[pts_backbone_neck_head][v1-head-centerpoint] | このパッケージの実装上の制限のため、1つの変更があります。`PillarFeatureNet`の`num_filters=[32, 32]` | +| `centerpoint_tiny` | [pts_voxel_encoder][v1-encoder-centerpoint-tiny]
[pts_backbone_neck_head][v1-head-centerpoint-tiny] | `v0`の`default`と同じモデル | -以下の変更はこの[構成](https://github.com/tianweiy/CenterPoint/blob/v0.2/configs/waymo/pp/waymo_centerpoint_pp_two_pfn_stride1_3x.py)と比較されています。 +これらの変更は次の構成と比較されています: [この構成](https://github.com/tianweiy/CenterPoint/blob/v0.2/configs/waymo/pp/waymo_centerpoint_pp_two_pfn_stride1_3x.py)。 #### v0 (2021/12/03) -| 名前 | URL | 説明 | -| --------- | -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| `default` | [pts_voxel_encoder][v0-encoder-default]
[pts_backbone_neck_head][v0-head-default] | オリジナルのCenterPointアーキテクチャから変更が2つある(`PillarFeatureNet`の`num_filters=[32]`と`RPN`の`ds_layer_strides=[2, 2, 2]`) | +| 名称 | URL | 説明 | +| --------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `default` | [pts_voxel_encoder][v0-encoder-default]
[pts_backbone_neck_head][v0-head-default] | オリジナルのCenterPointアーキテクチャから2つ変更があります。`num_filters=[32]`の`PillarFeatureNet`と`ds_layer_strides=[2, 2, 2]`の`RPN` | -## (省略可能) エラー検出と処理 +## (省略可能) エラーの検出と処理 - -## (省略可能) パフォーマンス特性評価 +## (省略可能) パフォーマンスの特性 - -## 参照/外部リンク +## 参考文献/外部リンク [1] Yin, Tianwei, Xingyi Zhou, and Philipp Krähenbühl. "Center-based 3d object detection and tracking." arXiv preprint arXiv:2006.11275 (2020). @@ -364,13 +385,13 @@ ros2 launch autoware_lidar_centerpoint lidar_centerpoint.launch.xml model_name: [9] -## (省略可能) 今後の拡張/未実装部分 +## (省略可能) 今後の拡張機能 / 未実装部分 - [v0-encoder-default]: https://awf.ml.dev.web.auto/perception/models/pts_voxel_encoder_default.onnx @@ -380,55 +401,9 @@ ros2 launch autoware_lidar_centerpoint lidar_centerpoint.launch.xml model_name: [v1-encoder-centerpoint-tiny]: https://awf.ml.dev.web.auto/perception/models/centerpoint/v1/pts_voxel_encoder_centerpoint_tiny.onnx [v1-head-centerpoint-tiny]: https://awf.ml.dev.web.auto/perception/models/centerpoint/v1/pts_backbone_neck_head_centerpoint_tiny.onnx -## 謝辞: deepen.ai の 3D アノテーションツールに関する貢献 - -## 法的情報 - -_nuScenesデータセットは、クリエイティブコモンズ帰属-非営利-継承同様条件4.0国際公共ライセンス下で非商用利用のために公開されています。 -追加利用規約はで確認できます。 -商用ライセンスについてのお問い合わせはまでご連絡ください。_ - -## 自動運転ソフトウェアのアーキテクチャ - -Autowareのアーキテクチャは、主に以下のようなコンポーネントから構成されます。 - -**ハードウェア層** - -- センサー(カメラ、レーダー、LiDARなど) -- タスクを実行するためのコンピューティングリソース - -**ソフトウェア層** - -- Perception - - 物体検出およびセグメンテーション - - 車線検出 - - 道路区画検出 -- Fusion - - さまざまなセンサーからのデータを統合して、周囲のより包括的なモデルを生成 -- Localization - - 車両の自車位置を求める -- Planning - - 安全で効率的な経路を生成 - - 道路上の障害物を回避 -- Control - - 車両の運動を制御 - - 加速、減速、ステアリングを担当 - -**Human-Machine Interface(HMI)** - -- ドライバーとの対話のためのインターフェイス -- 車両の現在のステータスと、ソフトウェアが作成した計画に関する информацию表示 - -### コンポーネント間のインタラクション - -コンポーネントは、次の順序でインタラクトします。 +## Acknowledgment: deepen.aiの3Dアノテーションツールへの貢献 -1. Perceptionモジュールは、センサーからのデータを処理して、周囲に関する情報を出力します。 -2. Fusionモジュールは、Perceptionモジュールからのデータと、内部マップ、および自己位置推定情報などの他の情報源を組み合わせて、周囲の統一されたモデルを作成します。 -3. Planningモジュールは、Fusionモジュールからの周囲モデルを使用して、安全で効率的な経路を生成します。 -4. Controlモジュールは、Planningモジュールからの経路を「post resampling」して、車両の運動を制御するための低レベルの制御コマンドを生成します。 -5. HMIは、車両の現在のステータスと、ソフトウェアが作成した計画に関する情報を表示します。 +## 法的通知 -このインタラクションにより、Autowareは周囲を感知し、安全で効率的な経路を生成し、車両を制御することができ、自動運転の実現に不可欠です。 +_nuScenesデータセットは、クリエイティブ・コモンズの帰属-非営利-継承4.0国際一般公開ライセンスに基づき、非営利目的での利用を目的として全般に公開されています。追加の利用条件はに掲載されています。商用ライセンスについてのお問い合わせはまでお問い合わせください。_ -このドキュメントでは、Autowareのアーキテクチャの詳細について説明します。また、コンポーネントのインタラクションと、それらが自動運転システム全体にどのように寄与するかについても説明します。 diff --git a/perception/autoware_lidar_transfusion/README.md b/perception/autoware_lidar_transfusion/README.md index cd424cc642267..71dc13f66091b 100644 --- a/perception/autoware_lidar_transfusion/README.md +++ b/perception/autoware_lidar_transfusion/README.md @@ -1,12 +1,14 @@ -# autoware_lidar_transfusion +## 自動運転ソフトウェアに関するドキュメント + +## autoware_lidar_transfusion ## 目的 -`autoware_lidar_transfusion`パッケージは、LiDARデータ(x, y, z、強度)に基づく3Dオブジェクト検出に使用されます。 +`autoware_lidar_transfusion`パッケージは、LiDARデータ(x、y、z、強度)に基づく3D物体検出に使用されます。 -## 内部動作/アルゴリズム +## 内部の仕組み/アルゴリズム -実装は[1]のTransFusionの作業に基づいています。データ処理とネットワーク推論にはTensorRTライブラリを使用しています。 +実装はTransFusion [1]の取り組みに基づいています。TensorRTライブラリを使用してデータ処理とネットワーク推論を実行します。 モデルはを使用してトレーニングしました。 @@ -14,122 +16,60 @@ ### 入力 -| 名称 | タイプ | 説明 | -| -------------------- | ------------------------------- | ---------- | -| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 入力点群。 | +| 名前 | タイプ | 説明 | +| -------------------- | ------------------------------- | ----------------- | +| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | 入力された点群. | ### 出力 -**自己位置推定モジュール** - -**目的:** - -- センサーからのセンサデータから自己位置を推定する。 -- Planningモジュールに自己位置を提供する。 - -**入力:** - -- IMUデータ -- GNSSデータ -- オドメトリデータ -- カメラ画像(オプション) - -**出力:** - -- 自車位置 -- 自己位置の不確かさ - -**アルゴリズム:** - -自己位置推定モジュールは、次のステップで動作します。 - -1. IMU、GNSS、オドメトリデータの統合。 -2. カメラ画像(使用可能な場合)を使用した自己位置の強化。 -3. エKFまたはPFを使用して自己位置と不確かさを推定する。 - -**障害検出モジュール** - -**目的:** - -- センサーからのデータを処理し、エゴカーの周囲の障害物を検出する。 -- Planningモジュールに障害物の情報を提供する。 - -**入力:** - -- レーダーデータ -- カメラ画像 -- LIDARデータ +**自動運転ソフトウェア向けのAutoware** -**出力:** +**はじめに** -- 障害物の位置と形状 -- 障害物の速度と加速度 +Autowareは、オープンソースの自動運転ソフトウェアプラットフォームです。センシング、Planning、制御機能を含む、自動運転に必要なコンポーネントを提供します。 -**アルゴリズム:** +**Planningコンポーネント** -障害検出モジュールは、次のアルゴリズムを使用して障害物を検出します。 +* **経路計画**:目的地までの経路を生成します。 +* **動作計画**:経路上の障害物や他の交通参加者を回避する動作を生成します。 +* **'Post Resampling'**:Planning結果をセンサーデータの更新に合わせて適応します。 -- **点群処理:** LIDARデータを使用して点群を作成します。 -- **クラスタリング:** 点群をクラスタ(障害物)にグループ化します。 -- **分類:** カメラ画像とレーダーデータを使用して、クラスタを障害物として分類します。 +**Perceptionコンポーネント** -**Planningモジュール** +* **レーダー**:車両や歩行者の検出に使用されます。 +* **ライダー**:車両や障害物の3D形状を検出します。 +* **カメラ**:交通標識や車線マーキングの認識に使用されます。 -**目的:** +**制御コンポーネント** -- 自車位置と障害物の情報に基づき、経路を計画し、次のような制御コマンドを生成する。 -- ステアリング角 -- アクセル/ブレーキコマンド +* **運転制御**:車両の加速、制動、ステアリングを制御します。 +* **車両安定制御**:車両の安定性を維持します。 -**入力:** +**ナビゲーションコンポーネント** -- 自車位置 -- 障害物の情報 -- 地図データ +* **自車位置推定**:車両の現在位置と姿勢を推定します。 +* **地図**:周囲環境の正確な表現を提供します。 -**出力:** +**ツール** -- 制御コマンド +* **開発シミュレータ**:自動運転システムのテストと開発に使用されます。 +* **デバッグインターフェース**:システムの動作を監視し、デバッグに使用されます。 -**アルゴリズム:** +**ライセンス** -Planningモジュールは、次のアルゴリズムを使用して経路を計画し、制御コマンドを生成します。 +AutowareはApacheライセンスバージョン2.0でライセンスされています。 -- **空間探索法:** 次の目的地までの可能な経路を探索します。 -- **コスト関数:** 各経路のコストを計算し、障害物逸脱量、速度逸脱量、加速度逸脱量を考慮します。 -- **最適化アルゴリズム:** コストが最小となる経路を選択します。 -- \*\*'post resampling'` による経路の平滑化。 - -**制御モジュール** - -**目的:** - -- Planningモジュールから生成された制御コマンドを実行する。 -- ステアリングシステムと動力伝達システムを制御する。 - -**入力:** - -- 制御コマンド - -**出力:** - -- 車両の運動(ステアリング角、速度、加速度) - -**アルゴリズム:** - -制御モジュールは、PID制御器または状態フィードバックコントローラを使用して制御コマンドを実行します。 - -| 名称 | タイプ | 説明 | -| -------------------------------------- | ------------------------------------------------ | ------------------------- | -| `/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出されたオブジェクト | -| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクル時間 (ms) | +| 名 | 型 | 説明 | +| -------------------------------------- | ------------------------------------------------ | --------------------------- | +| `~/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 検出されたオブジェクト | +| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | サイクル時間 (ms) | | `debug/pipeline_latency_ms` | `tier4_debug_msgs::msg::Float64Stamped` | パイプライン遅延時間 (ms) | -| `debug/processing_time/preprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 前処理時間 (ms) | -| `debug/processing_time/inference_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 推論時間 (ms) | -| `debug/processing_time/postprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 後処理時間 (ms) | -| `debug/processing_time/total_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 総処理時間 (ms) | +| `debug/processing_time/preprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 前処理 (ms) | +| `debug/processing_time/inference_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 推論時間 (ms) | +| `debug/processing_time/postprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | post resampling処理時間 (ms) | +| `debug/processing_time/total_ms` | `tier4_debug_msgs::msg::Float64Stamped` | 処理時間合計 (ms) | -## パラメーター +## パラメータ ### TransFusionノード @@ -145,8 +85,9 @@ Planningモジュールは、次のアルゴリズムを使用して経路を計 ### `build_only`オプション -`autoware_lidar_transfusion`ノードには、ONNXファイルからTensorRTエンジンファイルを構築するための`build_only`オプションがあります。 -Autoware Universeの`.param.yaml`ファイルにすべてのROSパラメータを移動することが望ましいですが、`build_only`オプションは現在`.param.yaml`ファイルに移動されていません。これは、ビルドを事前タスクとして実行するためのフラグとして使用される可能性があるためです。次のコマンドで実行できます。 +`autoware_lidar_transfusion`ノードには、ONNXファイルからTensorRTエンジンファイルを作成するための`build_only`オプションがあります。 +Autoware Universeの`.param.yaml`ファイル内のROSパラメータをすべて移動することが望ましいものの、`build_only`オプションは、ビルドを事前タスクとして実行するためのフラグとして使用できる可能性があるため、現時点では`.param.yaml`ファイルには移動されていません。次のコマンドで実行できます。 + ```bash ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml build_only:=true @@ -154,15 +95,17 @@ ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml build_only:= ### `log_level` オプション -`autoware_lidar_transfusion` のデフォルトのログ重要度レベルは `info` です。デバッグの目的では、開発者は `log_level` パラメータを使用して重要度のレベルを下げることができます: +`autoware_lidar_transfusion` のデフォルトのログ出力重大度は `info` です。デバッグの目的で、開発者は `log_level` パラメータを使用して重大度を下げることができます。 + ```bash ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml log_level:=debug ``` -## 仮定 / 公知の制限 +## 仮定 / 制限事項 + +このライブラリは、生クラウドデータ(バイト)で動作します。入力点群メッセージには次の形式があることが想定されています: -このライブラリは、生のクラウドデータ (バイト) で動作します。入力ポイントクラウドメッセージのフォーマットは次のとおりであると想定されます。 ```python [ @@ -173,46 +116,47 @@ ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml log_level:=d ] ``` -この入力には、他のフィールドが含まれる場合もあります。表示されている形式は必要な最小限です。 -デバッグの目的で、次のシンプルなコマンドを使用してポイントクラウド・トピックを検証することができます。 +この入力に別のフィールドが含まれる場合があります。表示される形式が最低限必要です。 +デバッグの目的のために、シンプルなコマンドを使用してポイントクラウドのトピックを検証できます。 + ```bash ros2 topic echo --field fields ``` -## 学習済みモデル +## トレーニングされたモデル -以下のリンクをクリックすると、学習済みモデルのonnx形式をダウンロードできます。 +下のリンクをクリックして、トレーニングされたモデルのonnx形式をダウンロードできます。 - TransFusion: [transfusion.onnx](https://awf.ml.dev.web.auto/perception/models/transfusion/t4xx1_90m/v2/transfusion.onnx) -このモデルは、TIER IV社内データベース(約 11,000 個のLiDARフレーム)で 50 エポックの学習を行いました。 +このモデルは50エポックにわたってTIER IVの社内データベース(約11k個のLiDARフレーム)でトレーニングされました。 -### 更新履歴 +### Changelog -## (任意) エラー検出と処理 +## (オプション)エラーの検出と処理 - -## (任意) パフォーマンス特性評価 +## (オプション)性能特性 - -## 参考文献/外部リンク +## 参考資料/外部リンク [1] Xuyang Bai, Zeyu Hu, Xinge Zhu, Qingqiu Huang, Yilun Chen, Hongbo Fu and Chiew-Lan Tai. "TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers." arXiv preprint arXiv:2203.11496 (2022). @@ -224,11 +168,12 @@ ros2 topic echo --field fields [5] -## (任意) 将来の拡張機能/未実装部分 +## (オプション)今後の拡張 / 未実装の部分 - + diff --git a/perception/autoware_map_based_prediction/README.md b/perception/autoware_map_based_prediction/README.md index d63cf36846871..2174391b345a8 100644 --- a/perception/autoware_map_based_prediction/README.md +++ b/perception/autoware_map_based_prediction/README.md @@ -1,18 +1,18 @@ -## map_based_prediction +# map_based_prediction -## 機能 +## 役割 -`map_based_prediction`モジュールは、地図の形状と周囲環境に応じて、他の車両や歩行者の未来の経路(とその確率)を予測します。 +`map_based_prediction`は、地図の形状と周囲の環境に応じて、他の車両や歩行者の将来の経路(とそれらの確率)を予測するモジュールです。 ## 仮定 -- 標的障礙物に関する以下の情報が必要 - - ラベル(人物、自動車などのタイプ) - - 現在の時間でのオブジェクトの位置と、将来の時間の予測位置 -- 周囲環境に関する以下の情報が必要 +- ターゲット障害物に関する次の情報が必要です。 + - ラベル(人物、車などのタイプ) + - 現在の時点でのオブジェクトの位置と将来の時点での予測位置 +- 周囲の環境に関する次の情報が必要です。 - Lanelet2形式の道路網情報 -## 内部動作 / アルゴリズム +## 内部構造 / アルゴリズム ### フローチャート @@ -22,322 +22,275 @@ ### 道路利用者の経路予測 -#### 古いオブジェクト履歴の削除 +#### 古いオブジェクトの履歴削除 -オブジェクトの位置、速度、時刻などの情報を格納したオブジェクトのタイムシリーズデータを格納して、車両の経路を決定し、数時間の車線変更を検出します。 +オブジェクトの経路を決定し、レーン変更を一定時間検出するために、オブジェクトの時間系列データを格納します。オブジェクトデータには、オブジェクトの位置、速度、および時間の情報が含まれます。 -#### 現在のレーンの取得とオブジェクト履歴の更新 +#### 現在のレーンレットの取得とオブジェクト履歴の更新 -各標的オブジェクトに対して、以下の条件を満たす1つ以上のレーンレットを検索し、ObjectDataに格納します。 +各対象オブジェクトに対して、次の条件を満たす1つまたは複数のレーンレットを検索し、それらをObjectDataに格納します。 -- オブジェクトの重心はレーンレット内に存在する必要があります。 +- オブジェクトの重心はレーンレット内になければなりません。 - レーンレットの中心線には2つ以上の点が必要です。 -- レーンレットとオブジェクトの方向の角度差は、パラメータで指定されたしきい値以内である必要があります。 - - 角度の反転は許可され、条件は`diff_yaw < threshold or diff_yaw > pi - threshold`です。 -- レーンレットは、過去の履歴に記録されたレーンレットから到達可能である必要があります。 +- レーンレットとオブジェクトの方向の角度差は、パラメータで指定されたしきい値内になければなりません。 + - 角度の反転が許可され、条件は `diff_yaw < threshold or diff_yaw > pi - threshold` です。 +- レーンレットは、過去の履歴に記録されたレーンレットから到達可能でなければなりません。 -#### 予測された基準経路の取得 +#### 予測リファレンスパスの取得 -- 基準経路の取得: - - 関連付けられたレーンレットからオブジェクトの基準経路を作成します。 -- オブジェクト機動の予測: +- リファレンスパスの取得: + - 関連するレーンレットからオブジェクトのリファレンスパスを作成します。 +- オブジェクトの操作の予測: - オブジェクトの予測経路を生成します。 - - オブジェクトの履歴と最初のステップで取得した基準経路に基づいて、`Lane Follow`、`Left Lane Change`、`Right Lane Change`のそれぞれの機動に確率を割り当てます。 - - 車線変更の決定は、2つのドメインに基づいています。 - - 幾何学的ドメイン:オブジェクトの重心とレーンの左/右境界との横方向距離 - - 時間ドメイン:オブジェクトが左/右境界に到達するまでの推定時間マージン + - 過去の履歴と最初のステップで取得したリファレンスパスに基づいて、`Lane Follow`、`Left Lane Change`、および`Right Lane Change`の各操作に確率を割り当てます。 + - レーン変更の決定は、次の2つのドメインに基づいています。 + - 幾何学的ドメイン:オブジェクトの重心とレーンの左右の境界との間の横方向の距離。 + - 時間ドメイン:オブジェクトが左右の境界に到達するまでの推定時間の余裕。 左車線変更検出の条件は次のとおりです。 -- 左車線境界までの距離が右車線境界までの距離よりも小さいか確認します。 -- 左車線境界までの距離が`dist_threshold_to_bound_`よりも小さいか確認します。 -- 横方向速度方向が左車線境界に向かっていないか確認します。 -- 左車線境界に到達するまでの時間が`time_threshold_to_bound_`よりも小さいか確認します。 +- 左車線境界までの距離が右車線境界までの距離よりも小さいことを確認します。 +- 左車線境界までの距離が `dist_threshold_to_bound_` より小さいことを確認します。 +- 横方向の速度方向が左車線境界に向かってであることを確認します。 +- 左車線境界に到達するまでの時間が `time_threshold_to_bound_` より短いことを確認します。 -車線変更のロジックは、以下の図に示されています。パラメータの調整方法の例は、後で説明します。 +レーン変更のロジックは、以下の図で示します。パラメータの調整方法の例を後で説明します。 -![車線変更検出](./media/lane_change_detection.drawio.svg) +![レーン変更検出](./media/lane_change_detection.drawio.svg) -- **オブジェクト確率の計算:** - - 上記で得られた経路確率は、オブジェクトの自車位置と角度に基づいて計算されます。 -- **スムーズな動作のための予測経路の微調整:** - - 生成された予測経路は、車両のダイナミクスを考慮するために再計算されます。 - - 経路は、横方向/縦方向の運動に対して 4 次/5 次スプラインで実装された最小ジャーク軌道で計算されます。 +- 物体確率の計算: + - 上記で得られた経路確率は、物体の現在の位置と角度に基づいて計算されます。 +- 滑らかな移動のための予測経路の調整: + - 生成された予測経路は、車両の動力学を考慮して再計算されます。 + - 経路は、横・縦動に4次/5次スプラインを実装した最小ジャーク軌跡で計算されます。 -### 車線変更検出ロジックの調整 +### 車線変更検出ロジックのチューニング -現在、車線変更検出を調整するためのパラメータは 3 つあります。 +現在、車線変更検出をチューニングするためのパラメータを3つ提供しています: -- `dist_threshold_to_bound_`: 車線変更車両が許容される車線境界からの最大距離 -- `time_threshold_to_bound_`: 車線変更車両が境界に到達できる最大時間 +- `dist_threshold_to_bound_`: 車線変更車両が車線境界線から離れて走行できる最大の距離 +- `time_threshold_to_bound_`: 車線変更車両が境界線に達するまで許容される最大の時間 - `cutoff_freq_of_velocity_lpf_`: 横方向速度のローパスフィルタのカットオフ周波数 -これらのパラメータは、以下の表に示すように ROS パラメータで変更できます。 +以下のテーブルでロスパラメータ内のこれらのパラメータを変更できます。 -| 設定名 | デフォルト値 | -| ---------------------------------------- | ------------ | -| `レーン変更検出の距離閾値` | `1.0` [m] | -| `レーン変更検出の時間閾値` | `5.0` [s] | -| `レーン変更検出用速度のカットオフ周波数` | `0.1` [Hz] | +| パラメータ名 | デフォルト値 | +| ----------------------------------------------------- | ------------ | +| `車線変更検出の距離しきい値` | `1.0` [m] | +| `車線変更検出の時間しきい値` | `5.0` [s] | +| `車線変更検出の速度のカットオフ周波数` | `0.1` [Hz] | #### しきい値パラメータの調整 -次の 2 つのパラメータを増やすと、車線変更推定の速度が低下し、安定します。 +この2つのパラメータを大きくすると、車線変更推定が遅くなり安定します。 -通常は `time_threshold_for_lane_change_detection` のみを調整することを推奨します。車線変更の判断において、より重要な要素だからです。 +通常、車線変更の決定に重要な要因であるため、`time_threshold_for_lane_change_detection` のみを調整することをお勧めします。 -#### 横方向速度の計算の調整 +#### 横速度計算の調整 -横方向速度の計算も車線変更判断において非常に重要な要素です。時間領域判断で使用されるからです。 +横速度の計算も、時間領域での決定に使用されるため、車線変更の決定において非常に重要な要因です。 -車線境界線に達する予測時間は、次の式で計算されます。 +車線境界に到達する予測時間は次のように計算されます。 $$ t_{predicted} = \dfrac{d_{lat}}{v_{lat}} $$ -ここで $d_{lat}$ と $v_{lat}$ は、それぞれ車線境界線までの横方向距離と横方向速度を表します。 +ここで、`d_lat` と `v_lat` はそれぞれ車線境界までの横方向距離と横方向速度を表します。 -横方向速度に対するローパスフィルタのカットオフ周波数を下げると、車線変更判断が安定しますが遅くなります。設定は非常に慎重ですが、車線変更判断を早くしたい場合はこのパラメータを大きくできます。 +横方向速度のローパスフィルタのカットオフ周波数を下げると、車線変更の決定はより安定しますが遅くなります。弊社ではこの設定を非常に慎重に行っていますので、車線変更の決定をより速くしたい場合はこのパラメータを増やすことができます。 -参考までに、横方向速度の計算方法を示します。 +さらに詳しく説明すると、横方向速度の計算方法を以下に示します。 -| 横速度計算手法 | 式 | 説明 | -| --------------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [**適用**済み] 横距離のタイムデリバティブ | $\dfrac{\Delta d_{lat}}{\Delta t}$ | 現在、この手法は曲がりくねった道路に対処するために使用されています。この時間微分は容易にノイズを生じるため、低域通過フィルターも使用して速度を滑らかにしています。 | -| [適用なし] オブジェクトの速度の横方向への投影 | $v_{obj} \sin(\theta)$ | 通常、オブジェクトの速度は横距離のタイムデリバティブよりもノイズが少なくなります。ただし、車線とオブジェクトの方向のヨー角差 $\theta$ が時々不連続になるため、この手法を採用しませんでした。 | +| 横方向速度計算手法 | 数式 | 説明 | +|---|---|---| +| [**採用中**] 横方向距離の時間微分 | $\dfrac{\Delta d_{lat}}{\Delta t}$ | 現在、この手法で曲がりくねった道路に対処しています。この時間微分はノイズが発生しやすいため、ローパスフィルタを使用して速度を平滑化しています。 | +| [非採用] 車両方向へのオブジェクト速度投影 | $v_{obj} \sin(\theta)$ | 通常、オブジェクトの速度は横方向距離の時間微分よりもノイズが少なくなります。しかし、レーンとオブジェクトの方向間のヨー差$\theta$が時々不連続になるため、この手法を採用しませんでした。 | -現在、ローパスフィルターを使用した高階メソッドで横速度を算出しています。 +現時点では、ローパスフィルタによる上位手法を用いて横方向速度を計算しています。 ### パス生成 -パス生成はフレネフレームで生成されます。パスは、次の手順で生成されます。 +パス生成はフレネ座標系で生成されます。パスは次の手順で生成します。 -1. 基準パスのフレネフレームを取得します。 -2. オブジェクトの自車位置とオブジェクトの未来位置のフレネフレームを生成します。 -3. フレネフレームの各縦横座標でパスを最適化します。(開始条件と終了条件に五次多項式を当てはめます。) +1. 基準パスのフレネ座標系を取得します。 +2. オブジェクトの現在位置と終了位置のフレネ座標系を生成します。 +3. フレネ座標系の各縦方向および横方向座標におけるパスを最適化します。(スタート条件と終了条件に 5 次多項式を適用します。) 4. パスをグローバル座標に変換します。 -詳細については、論文 [2] を参照してください。 +詳細は論文 [2] を参照してください。 -#### 横方向パス形状の調整 +#### 横方向パスの形状調整 -`lateral_control_time_horizon` パラメータは、横方向パス形状の調整に使用します。このパラメータは、基準パスに到達する時間を計算するために使用されます。値が小さいほど、基準パスに素早く到達するようにパスが生成されます。(ほとんどは車線の真ん中です。) +`lateral_control_time_horizon` パラメータは、横方向パスの形状調整をサポートします。このパラメータは、基準パスに到達する時間を計算するために使用されます。値が小さいほど、基準パスに素早く到達するためのパスが生成されます。(主に車線のセンター。) -#### 横加速度制約を使用して予測パスを刈り取る(車両障害物に対して) +#### 横方向加速度制約による予測パスの剪定(車両障害物向け) -生成された車両パスに最大横加速度制約を適用することができます。このチェックは、カーブを走行するときに車両が横加速度のしきい値 `max_lateral_accel` を超えずに予測パスを実行できるかどうかを確認します。それが不可能な場合は、車両が減速時に適宜 `min_acceleration_before_curve` の減速度でカーブを走行して制約を満たすことができるかどうかを確認します。それでも不可能な場合は、パスは削除されます。 +生成された車両パスに最大横方向加速度の制約を適用することができます。このチェックは、車両が曲線を通過するときに横方向加速度しきい値 `max_lateral_accel` を超えずに予測パスを実行できるかどうかを確認します。実行不可能な場合は、車両が `min_acceleration_before_curve` の減速で曲線を通過するためにタイムリーに減速できるかどうかを確認します。それでも不可能な場合は、パスは削除されます。 -現在、横加速度制約を調整するためのパラメータを3つ用意しています。 +現在、横方向加速度制約を調整するための 3 つのパラメータを提供しています。 -- `check_lateral_acceleration_constraints_`: 制約チェックを有効にします。 -- `max_lateral_accel_`: 予測パスに対して許容される最大横加速度(絶対値)。 -- `min_acceleration_before_curve_`: 車両がカーブに到達する前に理論的に使用される最小加速度(負にする必要があります)。 +- `check_lateral_acceleration_constraints_`:制約チェックを有効にする。 +- `max_lateral_accel_`:予測パスにおける最大許容横方向加速度(絶対値)。 +- `min_acceleration_before_curve_`:車両が曲線を通過する前に減速するために理論上使用する最小加速度(負の値にする必要があります)。 -Rosparam で以下の表に示すパラメータを変更できます。 +次の表の rosparam でこれらのパラメータを変更できます。 -| パラメータ名 | デフォルト値 | -| ---------------------------------------- | -------------- | +| パラメータ名 | デフォルト値 | +| ---------------- | ---------- | | `check_lateral_acceleration_constraints` | `false` [bool] | -| `max_lateral_accel` | `2.0` [m/s^2] | -| `min_acceleration_before_curve` | `-2.0` [m/s^2] | +| `max_lateral_accel` | `2.0` [m/s^2] | +| `min_acceleration_before_curve` | `-2.0` [m/s^2] | -## 自動車加速度を使用した経路予測(障害車両用) +## 車両加速度を使用した経路予測(車両障害物用) -デフォルトでは、`map_based_prediction`モジュールは現在の障害物の速度を使用して予測経路長を計算します。ただし、障害物の現在の加速度を使用して予測経路長を計算することもできます。 +デフォルトでは、`map_based_prediction`モジュールは、現在の障害物の速度を使用して、予測パス長を計算します。ただし、障害物の現在の加速度を使用して、予測パス長を計算することもできます。 ### 減衰加速度モデル -このモジュールは車両の経路を検出後数秒先まで予測しようとするため、現在の車両の加速度を一定とみなすことは現実的ではありません(車両が検出後`prediction_time_horizon`秒間加速し続けるとは想定されていません)。代わりに、減衰加速度モデルが使用されます。減衰加速度モデルでは、車両の加速度は次のようにモデル化されます。 +このモジュールは車両の経路を未来の何秒か予測しようと試みるため、現在の車両加速度を一定と見なすことは現実的ではありません(検出後、車両が`prediction_time_horizon`秒間加速し続けることは想定されていません)。代わりに、減衰加速度モデルが使用されます。減衰加速度モデルを使用すると、車両の加速度は次のようにモデル化されます。 -$\ a(t) = a\_{t0} \cdot e^{-\lambda \cdot t} $ +$a(t) = a\_{t0} \cdot e^{-\lambda \cdot t}$ -ここで$\ a\_{t0} $は検出時の車両加速度で、$\ \lambda $は減衰定数$\ \lambda = \ln(2) / hl $、$\ hl $は指数関数半減期です。 +ここで、$a\_{t0}$は検出時刻$t0$における車両加速度、$\lambda$は減衰定数$\lambda = \ln(2) / hl$、$\hl$は指数関数半減期です。 -さらに、時間の経過に対する$\ a(t) $の積分により、速度$\ v(t) $および距離$\ x(t) $の式が得られます。 +さらに、時間に対する$a(t)$の積分により、速度を表す式$v(t)$と距離を表す式$x(t)$が得られます。 -$\ v(t) = v*{t0} + a*{t0} \* (1/\lambda) \cdot (1 - e^{-\lambda \cdot t}) $ +$v(t) = v*{t0} + a*{t0} \* (1/\lambda) \cdot (1 - e^{-\lambda \cdot t})$ および -$\ x(t) = x*{t0} + (v*{t0} + a*{t0} \* (1/\lambda)) \cdot t + a*{t0}(1/λ^2)(e^{-\lambda \cdot t} - 1) $ +$x(t) = x*{t0} + (v*{t0} + a*{t0} \* (1/\lambda)) \cdot t + a*{t0}(1/λ^2)(e^{-\lambda \cdot t} - 1)$ -このモデルでは、予測経路長に対する障害物が検出された瞬間の加速度の影響は減少しますが、それでも考慮されます。この機能はまた、障害物が道路の制限速度(調整可能な係数で乗算)を超えて加速しない可能性も考慮します。 +このモデルでは、検出された車両の瞬時加速度が予測パス長に及ぼす影響は減少しますが、それでも考慮されます。この機能では、障害物が道路の制限速度(調整可能な係数で乗算)を超えて加速しない可能性も考慮されます。 -現在、経路予測における障害物加速度の使用を調整するためのパラメータを3つ提供しています。 +現在、経路予測に障害物加速度を使用するための調整可能なパラメーターを3つ提供しています。 -- `use_vehicle_acceleration`: この機能を有効にします。 -- `acceleration_exponential_half_life`: 減衰加速度モデルは、現在の車両加速度がこの時間後には半分になると想定します。 -- `speed_limit_multiplier`: 障害車両 प्रकारの最大予測速度を、そのレーンレットの法定速度制限にこの値を乗算したものに設定します。この値は1.0以上にする必要があります。 +- `use_vehicle_acceleration`: 機能を有効にします。 +- `acceleration_exponential_half_life`: 減衰加速度モデルは、現在の車両加速度が数秒後に半分になると想定しています。 +- `speed_limit_multiplier`: 車両タイプの障害物の最大予測速度は、車線の速度制限にこの値を乗じた値として設定します。この値は少なくとも1.0以上である必要があります。 -次の表の`rosparam`でこれらのパラメータを変更できます。 +以下の表で、`rosparam`でこれらのパラメーターを変更できます。 -| パラメータ名 | デフォルト値 | -| ------------------------------------ | -------------- | -| `use_vehicle_acceleration` | `false` [bool] | -| `acceleration_exponential_half_life` | `2.5` [s] | -| `speed_limit_multiplier` | `1.5` [] | +| パラメータ名 | デフォルト値 | +|---|---| +| `use_vehicle_acceleration` | `false` [bool] | +| `acceleration_exponential_half_life` | `2.5` [s] | +| `speed_limit_multiplier` | `1.5` [] | -### 横断歩道利用者の経路予測 +### 横断歩道ユーザーの経路予測 -このモジュールは、**歩行者**と**自転車**を横断歩道を使用するオブジェクトとして扱い、オブジェクトが横断歩道を通過する意図を持っていると仮定し、マップと推定したオブジェクトの速度に基づいて予測パスを出力します。オブジェクトが少なくとも次のいずれかの条件を満たす場合です。 +このモジュールは、**歩行者**と**自転車**を横断歩道を使用するオブジェクトとして扱い、そのオブジェクトが横断歩道を渡る意図を持ち、少なくとも以下の条件の 1 つを満たす場合、地図と推定オブジェクト速度に基づいて予測経路を出力します。 -- 横断歩道に向かって移動する -- 横断歩道の近くで停止する +- 横断歩道に向かって移動 +- 横断歩道の近くで停止

-`prediction_time_horizon` 内に到達可能な横断歩道エントリ ポイントがあり、オブジェクトが上記の条件を満たしている場合、このモジュールは横断歩道エントリ ポイントを経由して反対側を通過する追加の予測パスを出力します。 +オブジェクトが `prediction_time_horizon` 内の到達可能な横断歩道エントリポイントがあり、上記の条件を満たしている場合、このモジュールは横断歩道エントリポイントを介して反対側を渡る追加の予測経路を出力します。 -このモジュールは、対応する信号情報も考慮に入れます。 -赤信号が表示されている場合、対象オブジェクトは横断しないと仮定します。 -さらに、対象オブジェクトが青信号に対して停止 (移動していない) している場合、対象オブジェクトは横断しないと仮定します。この予測は、信号が青で、オブジェクトが横断する意図がある場合、オブジェクトは移動するはずだという仮定に基づいています。 +このモジュールは、対応する信号機情報を考慮に入れます。赤信号が表示されている場合、対象オブジェクトは横断しないと想定します。さらに、対象オブジェクトが青信号に対して停止(移動しない)している場合、対象オブジェクトも横断しないと想定します。この予測は、信号が青で対象オブジェクトが横断することを意図している場合、オブジェクトは移動する必要があるという仮定に基づいています。
-対象オブジェクトが道路または横断歩道内にある場合、このモジュールは横断歩道の出口点に到達するための 1 つまたは 2 つの追加予測パスを出力します。予測パスの数は、オブジェクトが移動しているかどうかに依存します。オブジェクトが移動している場合、このモジュールはオブジェクトの移動方向に存在する出口点に向けた 1 つの予測パスを出力します。一方、オブジェクトが停止している場合、オブジェクトがどちらの出口点に行こうとしているかを推測することは不可能であるため、このモジュールは両側の出口点に向けた 2 つの予測パスを出力します。 +対象オブジェクトが道路または横断歩道内にある場合、このモジュールは横断歩道の出口に到達する 1 つまたは 2 つの追加の予測経路を出力します。予測経路の数は、オブジェクトが移動しているかどうかに依存します。オブジェクトが移動している場合、このモジュールはオブジェクトの移動方向にある出口に向けた 1 つの予測経路を出力します。一方、オブジェクトが停止している場合、オブジェクトがどちらの出口に向かうか推測することは不可能なので、このモジュールは両側の出口に向けた 2 つの予測経路を出力します。
-## 入出力 +## 入力と出力 ### 入力 -| 名称 | 型 | 説明 | -| -------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------ | -| `~/perception/object_recognition/tracking/objects` | `autoware_perception_msgs::msg::TrackedObjects` | 予測パスを持たない追跡オブジェクト。 | -| `~/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | Lanelet2 Mapのバイナリデータ。 | -| `~/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 対応する信号機の再配列された情報。 | +| 名称 | タイプ | 説明 | +| -------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------------------------------- | +| `~/perception/object_recognition/tracking/objects` | `autoware_perception_msgs::msg::TrackedObjects` | 予測経路のない追跡対象 | +| `~/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | Lanelet2 Mapのバイナリデータ | +| `~/perception/traffic_light_recognition/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 該当する信号に関する再構成情報 | -### 自動運転ソフトウェアに関するドキュメント +### 出力 -#### 目次 +**自動運転ソフトウェアのドキュメント** -- [はじめに](#はじめに) -- [Planning(計画)](#planning) - - [Planning Framework(計画フレームワーク)](#planning-framework) - - [Central Planner(セントラルプランナー)](#central-planner) -- [Control(制御)](#control) -- [Perception(認知)](#perception) - - [Object Recognition(物体認識)](#object-recognition) - - [Detection(検出)](#detection) -- [Simulation(シミュレーション)](#simulation) - - [Simulation Test Framework(シミュレーションテストフレームワーク)](#simulation-test-framework) -- [評価](#評価) - - [Metrics and Benchmarks(メトリクスとベンチマーク)](#metrics-and-benchmarks) -- [Deployment(展開)](#deployment) - - [Autoware Deployment Process(Autoware展開プロセス)](#autoware-deployment-process) - - [Continuous Integration and Continuous Delivery(継続的インテグレーションと継続的デリバリー)](#continuous-integration-and-continuous-delivery) -- [メンテナンス](#メンテナンス) - - [Updating Autoware(Autowareのアップデート)](#updating-autoware) - - [Troubleshooting(トラブルシューティング)](#troubleshooting) +**システムアーキテクチャ** -#### はじめに +Autowareは、モジュール式のアーキテクチャに基づくオープンソースの自動運転ソフトウェアスタックです。各モジュールは、特定の機能を担当します。 -このドキュメントは、Autowareの自動運転ソフトウェアに関する包括的なガイダンスを提供します。このソフトウェアは、自動運転車両の開発と展開のためのオープンソースのプラットフォームです。このドキュメントでは、ソフトウェアのアーキテクチャ、コンポーネント、デプロイメントプロセスについて説明します。 +**Planningコンポーネント** -#### Planning(計画) +* **Planningモジュール**:センサーデータから環境を解釈し、自車位置に基づいて経路を生成します。 +* **PathSmootherモジュール**:経路を滑らかにし、車両の動的特性を考慮します。 +* **BehaviorPlanerモジュール**:経路に沿って安全な軌跡を生成します。 +* **TrajectoryOptimizerモジュール**:軌跡を最適化して、車両の動的特性と環境の制約を考慮します。 -**Planning Framework(計画フレームワーク)** +**Controlコンポーネント** -Planning Frameworkは、自動運転車両の経路計画を担当します。障害物回避、車線維持、信号対応などのタスクを処理します。 +* **MotionPlannerモジュール**:軌跡に基づいて、車両の速度と操舵角を制御します。 +* **Localizationモジュール**:センサーデータを使用して、自車位置と姿勢を推定します。 +* **Perceptionモジュール**:センサーデータから周囲の環境を認識します。 -**Central Planner(セントラルプランナー)** +**センシングコンポーネント** -Central Plannerは、Planning Frameworkの中核コンポーネントです。車両の周囲環境を認識し、安全で効率的な経路を生成します。 +* **センサーインターフェースモジュール**:センサーデータを受け取り、他のコンポーネントに提供します。 +* **PreProcessingモジュール**:'post resampling'処理などのセンサーデータの事前処理を実行します。 -#### Control(制御) +**インターフェース** -Controlコンポーネントは、Planningコンポーネントによって生成された経路に従って車両を制御します。エンジン、ブレーキ、ステアリングなどのアクチュエータを操作します。 +* **ROSインターフェース**:モジュール間および外部システムとの通信に使用されます。 +* **CANインターフェース**:車両ハードウェアとの通信に使用されます。 -#### Perception(認知) +**評価** -**Object Recognition(物体認識)** +Autowareは、現実世界のテスト環境とシミュレーション環境の両方で評価されています。結果は、以下で報告されています。 -Object Recognitionコンポーネントは、車両の周囲環境にある物体、歩行者、車両を認識します。カメラとLiDARセンサーのデータを処理します。 +* [Autowareの評価レポート](https://git.autoware.ai/autoware/autoware.ai/blob/master/docs/evaluation_reports/evaluation_report.md) -**Detection(検出)** - -Detectionコンポーネントは、認識された物体の位置と速度を推定します。時系列データと確率的推定手法を使用して、堅牢かつ正確な検出を行います。 - -#### Simulation(シミュレーション) - -**Simulation Test Framework(シミュレーションテストフレームワーク)** - -Simulation Test Frameworkは、自動運転システムの開発とテストのためのシミュレーション環境を提供します。現実的なシナリオを作成することで、安全性と信頼性を確保できます。 - -#### 評価 - -**Metrics and Benchmarks(メトリクスとベンチマーク)** - -評価コンポーネントは、自動運転システムのパフォーマンスを評価するためのメトリクスとベンチマークを提供します。安全度、効率性、快適性などの指標を測定します。 - -#### Deployment(展開) - -**Autoware Deployment Process(Autoware展開プロセス)** - -Autoware Deployment Processは、Autowareシステムを実際の車両に展開するための段階的なガイドラインを提供します。ソフトウェアのインストール、設定、統合をカバーします。 - -**Continuous Integration and Continuous Delivery(継続的インテグレーションと継続的デリバリー)** - -継続的インテグレーションと継続的デリバリー(CI/CD)のプロセスを使用して、新機能や更新を自動的にビルド、テスト、展開します。これにより、展開プロセスの効率と信頼性が向上します。 - -#### メンテナンス - -**Updating Autoware(Autowareのアップデート)** - -Autowareのアップデートにより、最新の機能、バグ修正、セキュリティパッチにアクセスできます。新しいリリースのダウンロードとインストールの手順を提供します。 - -**Troubleshooting(トラブルシューティング)** - -Troubleshootingガイドには、一般的な問題の解決手順が記載されています。診断、ログ分析、デバッグの手順を提供します。 - -| 名称 | 型 | 説明 | -| ---------------------------- | ------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| `~/input/objects` | `autoware_perception_msgs::msg::TrackedObjects` | 検知物体。デフォルトは `/perception/object_recognition/tracking/objects` に設定されている | -| `~/output/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 予測経路付き検知物体 | -| `~/objects_path_markers` | `visualization_msgs::msg::MarkerArray` | 可視化用のマーカー | -| `~/debug/processing_time_ms` | `std_msgs::msg::Float64` | このモジュールの処理時間 | -| `~/debug/cyclic_time_ms` | `std_msgs::msg::Float64` | このモジュールの周期時間 | +| 名前 | 型 | 説明 | +| ---------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------ | +| `~/input/objects` | `autoware_perception_msgs::msg::TrackedObjects` | 追跡オブジェクト。デフォルトは `/perception/object_recognition/tracking/objects` に設定されます | +| `~/output/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 予測パスを持つ追跡オブジェクト | +| `~/objects_path_markers` | `visualization_msgs::msg::MarkerArray` | 視覚化用のマーカー | +| `~/debug/processing_time_ms` | `std_msgs::msg::Float64` | このモジュールの処理時間 | +| `~/debug/cyclic_time_ms` | `std_msgs::msg::Float64` | このモジュールのサイクリック時間 | ## パラメータ -| パラメータ | 単位 | タイプ | 説明 | -| ---------------------------------------------------------------- | -------- | ------ | --------------------------------------------------------------------------------------------- | -| `enable_delay_compensation` | [-] | bool | 物体の位置に対する時間遅延補正を有効にするためのフラグ | -| `prediction_time_horizon` | [秒] | double | 予測 경로의 예측 시간 지속 기간 | -| `lateral_control_time_horizon` | [秒] | double | 예측 경로가 기준 경로(대부분 차선 중심)에 도달하는 시간 지속 기간 | -| `prediction_sampling_delta_time` | [秒] | double | 예측 경로에서 포인트의 샘플링 시간 | -| `min_velocity_for_map_based_prediction` | [m/s] | double | 이 값보다 높은 속도의 물체에 지도 기반 예측 적용 | -| `min_crosswalk_user_velocity` | [m/s] | double | 보행자의 속도를 계산할 때 사용되는 최소 속도 | -| `max_crosswalk_user_delta_yaw_threshold_for_lanelet` | [라디안] | double | 보행자와 차로 간의 최대 요우 각도 차이를 보행자 경로 예측에 사용 | -| `dist_threshold_for_searching_lanelet` | [m] | double | 물체가 속하는 차로를 검색하는 데 사용되는 각도 임계값 | -| `delta_yaw_threshold_for_searching_lanelet` | [라디안] | double | 물체가 속하는 차로를 검색하는 데 사용되는 각도 임계값 | -| `sigma_lateral_offset` | [m] | double | 물체의 측면 위치에 대한 표준 편차 | -| `sigma_yaw_angle_deg` | [도] | double | 물체의 요우 각도에 대한 표준 편차 | -| `object_buffer_time_length` | [초] | double | 물체의 정보를 저장하는 객체 이력의 시간 범위 | -| `history_time_length` | [초] | double | 예측에 사용되는 객체 정보의 시간 범위 | -| `prediction_time_horizon_rate_for_validate_shoulder_lane_length` | [-] | double | 예측 경로 길이가 차선 길이를 초과하면 예측 경로 비활성화. 이 매개변수는 예측 경로 길이를 제어 | - -## 前提条件/既知の制限 +| パラメータ | 単位 | タイプ | 説明 | +| ---------------------------------------------------------------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `enable_delay_compensation` | [-] | bool | オブジェクトの位置時間の遅延補正を有効にするフラグ | +| `prediction_time_horizon` | [s] | double | 予測パスの予測時間間隔 | +| `lateral_control_time_horizon` | [s] | double | 予測パスがリファレンスパス(主に車線のセンター)に到達するまでの時間間隔 | +| `prediction_sampling_delta_time` | [s] | double | 予測パス内の時点のサンプリング時間 | +| `min_velocity_for_map_based_prediction` | [m/s] | double | この値よりも速度の高いオブジェクトにマップベースの予測を適用する | +| `min_crosswalk_user_velocity` | [m/s] | double | 横断歩道利用者の速度を計算するときに使用する最小速度 | +| `max_crosswalk_user_delta_yaw_threshold_for_lanelet` | [rad] | double | 横断歩道利用者のパス予測で使用する横断歩道利用者と車線との最大ヨー角差 | +| `dist_threshold_for_searching_lanelet` | [m] | double | オブジェクトが属する車線を検索するときに使用する角度のしきい値 | +| `delta_yaw_threshold_for_searching_lanelet` | [rad] | double | オブジェクトが属する車線を検索するときに使用する角度のしきい値 | +| `sigma_lateral_offset` | [m] | double | オブジェクトの横方向位置の標準偏差 | +| `sigma_yaw_angle_deg` | [deg] | double | オブジェクトのヨー角の標準偏差 | +| `object_buffer_time_length` | [s] | double | オブジェクトの履歴情報を格納する時間間隔 | +| `history_time_length` | [s] | double | 予測に使用されるオブジェクト情報の時間間隔 | +| `prediction_time_horizon_rate_for_validate_shoulder_lane_length` | [-] | double | 予測されたパスの長さが車線長の範囲を超えた場合に予測パスを無効にする。このパラメータは予測されたパスの長さを制御する + +## 仮定/既知の制限 - 乗用車、バス、トラックのオブジェクトタイプについて - - オブジェクトの予測経路は道路構造に従います。 - - オブジェクトが道路上にない場合、予測経路は直線予測によって生成されます。 - - レーンレット上にいるが、道路と異なる方向に移動しているオブジェクトの場合、予測経路は単純に直線です。 - - 予測経路で車両のダイナミクスが適切に考慮されない可能性があります。 -- 人とオートバイのオブジェクトタイプについて - - 予測経路は「横断歩道付近」以外のすべての状況で、単純な直線で生成されます。 + - オブジェクトの予測経路は道路構造に従う。 + - 道路上にいないオブジェクトの場合、予測経路は直線予測によって生成される。 + - レーンレット上にいるが道路と異なる方向に移動しているオブジェクトの場合、予測経路は直線のみである。 + - 予測経路では車両の動特性が適切に考慮されていない可能性がある。 +- 人と二輪車のオブジェクトタイプについて + - 「横断歩道付近」以外は、あらゆる状況で予測経路は直線のみで生成される。 - すべての障害物について - - 加速度情報の不足により、予測では車両の運動が等速と想定されています。 + - 加速度情報の欠如により、予測では車両の運動が一定速度であると仮定される。 ## 参考資料 1. M. Werling, J. Ziegler, S. Kammel, and S. Thrun, “Optimal trajectory generation for dynamic street scenario in a frenet frame,” IEEE International Conference on Robotics and Automation, Anchorage, Alaska, USA, May 2010. 2. A. Houenou, P. Bonnifait, V. Cherfaoui, and Wen Yao, “Vehicle trajectory prediction based on motion model and maneuver recognition,” in 2013 IEEE/RSJ International Conference on Intelligent Robots and Systems. IEEE, nov 2013, pp. 4363-4369. + diff --git a/perception/autoware_multi_object_tracker/README.md b/perception/autoware_multi_object_tracker/README.md index e0acefc731d79..08a67fd0f4f45 100644 --- a/perception/autoware_multi_object_tracker/README.md +++ b/perception/autoware_multi_object_tracker/README.md @@ -2,9 +2,9 @@ ## 目的 -検出の結果を時系列で処理します。主な目的はIDを付与し、速度を推定することです。 +検出結果は時系列で処理されます。主な目的はIDの付与と速度の推定です。 -## 内部処理/アルゴリズム +## 内部動作/アルゴリズム このマルチオブジェクトトラッカーは、データ関連付けとEKFで構成されています。 @@ -12,17 +12,17 @@ ### データ関連付け -データ関連付けは、最小コスト最大フロー問題と呼ばれる最大スコアマッチングを実行します。 -このパッケージでは、mussp[1]がソルバーとして使用されています。 -さらに、観測値をトレーサーに関連付ける際に、データ関連付けには、BEVからのオブジェクトの領域、マハラノビス距離、および最大距離などのゲートがあります。クラスラベルによって異なります。 +データ関連付けは、最小コスト最大フロー問題と呼ばれる、最大スコアマッチングを実行します。 +このパッケージでは、mussp[1]をソルバーとして使用します。 +さらに、観測結果をトレーサーに関連付ける場合、クラスラベルに応じて、BEVのオブジェクト領域、マハラノビス距離、最大距離などのゲートがデータ関連付けに設けられます。 ### EKFトラッカー -歩行者、自転車(オートバイ)、乗用車、および不明に対するモデルがあります。 -歩行者または自転車トラッカーは、それぞれ対応するEKFモデルと同時に実行され、歩行者トラッキングと自転車トラッキング間の遷移を可能にします。 -トラックやバスなどの大型車両については、乗用車と区別が困難で、安定していないため、乗用車と大型車両に別のモデルを用意しています。そのため、乗用車と大型車両に別々のモデルを用意し、これらをそれぞれのEKFモデルと同時に実行して安定性を確保しています。 +歩行者、自転車(オートバイ)、自動車、未知のモデルが利用できます。 +歩行者または自転車トラッカーは、歩行者の追跡と自転車の追跡の間の移行を可能にするために、それぞれのEKFモデルと同時に実行されます。 +トラックやバスなどの大型車両については、乗用車と区別が難しく、安定しないため、乗用車と大型車両のモデルを分けています。そのため、乗用車と大型車両に別々のモデルを用意し、それらのモデルをそれぞれのEKFモデルと同時に実行して安定性を確保しています。 - -## (オプション) パフォーマンスの特性評価 +## (任意) パフォーマンスの特性評価 -### muSSPの評価 +### muSSP の評価 -当社の実績によると、muSSPは行列サイズが100を超えると通常の[SSP](src/data_association/successive_shortest_path)よりも高速になります。 +評価によると、muSSP はマトリックスサイズが 100 を超える場合、通常の [SSP](src/data_association/successive_shortest_path) より高速です。 -95%スパースityで変化する行列サイズの実行時間。実際のデータでは、スパースityは多くの場合95%前後にあります。 +95% のスパース性でさまざまなマトリックスサイズでの実行時間。実際のデータでは、スパース性は多くの場合 95% 前後でした。 ![mussp_evaluation1](image/mussp_evaluation1.png) -行列サイズ100でスパースityを変化させた場合の実行時間。 +マトリックスサイズ 100 でスパース性を変えたときの作業時間。 ![mussp_evaluation2](image/mussp_evaluation2.png) -## (オプション) 参考文献/外部リンク +## (任意) 参考文献 / 外部リンク このパッケージは外部コードを使用しています。 -| 名称 | ライセンス | オリジナルリポジトリ | -| --------------------------------------------------------- | --------------------------------------------------------- | ------------------------------------ | +| 名前 | ライセンス | 元のリポジトリ | +| ---------------------------------------------------------- | --------------------------------------------------------- | ------------------------------------------------------------- | | [muSSP](src/data_association/mu_successive_shortest_path) | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | | -[1] C. Wang, Y. Wang, Y. Wang, C.-t. Wu, and G. Yu, “muSSP: 高速汎用的最小コストフローアルゴリズム” NeurIPS, 2019 +[1] Wang, C.、Wang, Y.、Wang, Y.、Wu, C.-t.、および Yu, G.、 “muSSP: 多物体追跡のための効率的な最小費用フローアルゴリズム” NeurIPS, 2019 -## (任意) 今後の拡張/未実装部分 +## (オプション) 今後の拡張 / 未実装部分 - + diff --git a/perception/autoware_object_merger/README.md b/perception/autoware_object_merger/README.md index 4c9a2361e2145..14cff5ff55e9d 100644 --- a/perception/autoware_object_merger/README.md +++ b/perception/autoware_object_merger/README.md @@ -1,68 +1,56 @@ -## 物体マージャー +# object_merger ## 目的 -`object_merger` は、データアソシエーションにより 2 つの方法から検出されたオブジェクトをマージするためのパッケージです。 +object_mergerは、データ関連付けにより2つの方式から検出されたオブジェクトをマージするためのパッケージです。 -## 内部処理 / アルゴリズム +## 内部動作/アルゴリズム -連続最短経路アルゴリズムを使用して、データアソシエーション問題(最小コストフロー問題)を解決します。コストは 2 つのオブジェクト間の距離によって計算され、ゲート関数が最大距離、最大面積、最小面積の制約を課してコストをリセットするために適用されます。 +データ関連付け問題(最小コストフロー問題)を解くために、相次ぐ最短経路アルゴリズムが使用されます。コストは2つのオブジェクト間の距離によって計算され、ゲート関数がコストをリセットするために適用され、最大距離、最大領域、最小領域が考慮されます。 ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| --------------- | ------------------------------------------------ | -------- | -| `input/object0` | `autoware_perception_msgs::msg::DetectedObjects` | 検出対象 | -| `input/object1` | `autoware_perception_msgs::msg::DetectedObjects` | 検出対象 | +| 名称 | タイプ | 説明 | +| --------------- | ------------------------------------------------ | ----------- | +| `input/object0` | `autoware_perception_msgs::msg::DetectedObjects` | 検出対象物 | +| `input/object1` | `autoware_perception_msgs::msg::DetectedObjects` | 検出対象物 | ### 出力 -`Autoware` 自動運転ソフトウェアに関するドキュメント +Autowareで自動運転ソフトウェアの開発とデバッグを行うためのドキュメントです。次のモジュールを含んでいます。 -**Planningコンポーネント** +**Perceptionモジュール:** +- カメラとLiDARのデータから周囲の環境を認識します。 -**Sensor Fusion** +**Planningモジュール:** +- 車両の経路計画と制御を行います。 -- **SBF (ステレオベースフロー)** +**Controlモジュール:** +- 加減速とステアリングを制御します。 - - ステレオカメラからの深度とオプティカルフローを融合して、3D点群を生成 +各モジュールの使用方法とデバッグ方法について説明します。 -- **VLP16 LIDAR** +**デバッグガイド:** +- ログファイルを使用してデバッグします。 +- 可視化ツールを使用してデータを確認します。 - - 点群データを生成し、`post resampling`を使用して、3D空間内の障害物を検出 +**Autowareのアーキテクチャ:** +- Autowareのアーキテクチャの概要を説明します。 -- **RADAR** - - 車両、歩行者、その他の静止または動いている物体を検出 +**用語集:** +- 技術に関する用語を定義します。 -**Global Planning** +**主な情報源:** +- Autowareのドキュメンテーションとリポジトリへのリンクを示します。 -- **Elastic Band** アルゴリズムを使用して、出発点から目的地までのパスを生成 -- 交通ルールや道路標識を考慮して、パスを最適化 +**[Autowareのドキュメンテーション](https://www.autoware.org/documentation/)** +**[AutowareのGitHubリポジトリ](https://github.com/autowarefoundation/autoware.ai)** -**Local Planning** - -- **DWA (動的窓アプローチ)** アルゴリズムを使用して、自車位置を中心とした局所パスを生成 -- Planningモジュールが現在、障害物の回避、速度制御、パス追跡を実施中 - -**Control** - -- **MPC (モデル予測制御)** アルゴリズムを使用して、ステアリング、加速、ブレーキを制御 -- 制御動作を最適化して、安全かつ効率的な走行を実現 - -**Performance Monitoring** - -- **Path Evaluation** - - パスの妥当性と障害物との距離を評価 -- **Velocity and Acceleration Violation Detection** - - 速度逸脱量と加速逸脱量を検出し、異常な挙動を監視 -- **System Monitoring** - - システムのパフォーマンスを監視し、障害や異常を検出 - -| 名前 | タイプ | 説明 | -| --------------- | ------------------------------------------------ | -------------- | -| `output/object` | `autoware_perception_msgs::msg::DetectedObjects` | 修正された物体 | +| 名前 | 型 | 説明 | +| --------------- | ------------------------------------------------- | ---------- | +| `output/object` | `autoware_perception_msgs::msg::DetectedObjects` | オブジェクトを修正する | ## パラメータ @@ -72,54 +60,55 @@ ## ヒント -- **誤検知:** クラスタリング手法によって検出された未知のオブジェクトは、急停止のリスクが高まり、Planningモジュールを妨げる場合があります。MLベースの検出器がオブジェクトを見逃すことがまれな場合は、object_merger のパラメータを調整して、Perceptionモジュールが未知のオブジェクトを無視するようにできます。 - - 大きな車両に近い未知のオブジェクトを削除したい場合: - - **HIGH** `distance_threshold_list`を利用する - - ただし、計算負荷が高くなります - - **LOW** `precision_threshold_to_judge_overlapped`を利用する - - **LOW** `generalized_iou_threshold`を利用する - - ただし、この2つのパラメータは、既知のオブジェクトに近いオブジェクトを見逃すリスクを高めます。 +- クラスタリング手法によって検出された誤検出の未知物体は、急停止のリスクを高め、Planningモジュールに影響を与えることがあります。MLベースの検出器がオブジェクトを見逃すことが稀にある場合、object_mergerのパラメータを調整して認識モジュールに未知のオブジェクトを無視させることができます。 + - 大型車両の近くにある未知のオブジェクトを削除する場合、 + - `distance_threshold_list`をHIGHにする + - ただし、これにより計算負荷が高くなります + - `precision_threshold_to_judge_overlapped`をLOWにする + - `generalized_iou_threshold`をLOWにする + - ただし、これら2つのパラメータは、既知のオブジェクトの近くにあるオブジェクトを見落とすリスクを高めます。 -## 想定/既知の制限 +## 仮定/既知の制限 - -## (省略可能) エラー検出と処理 +## (任意) エラー検出と処理 - -## (省略可能) パフォーマンスの特性評価 +## (任意) パフォーマンス特性 - -## (省略可能) 参考文献/外部リンク +## (任意) 参照/外部リンク - -## (省略可能) 今後の拡張/未実装の部分 +## (任意) 今後の拡張/未実装部分 + +データアソシエーションアルゴリズムはmulti_object_trackerと同じでしたが、multi_object_trackerのアルゴリズムはすでに更新されています。 -データアソシエーションアルゴリズムは multi_object_tracker と同じでしたが、multi_object_tracker のアルゴリズムはすでに更新されています。 diff --git a/perception/autoware_object_range_splitter/README.md b/perception/autoware_object_range_splitter/README.md index 9f19548bd48f3..0015e7e7dc453 100644 --- a/perception/autoware_object_range_splitter/README.md +++ b/perception/autoware_object_range_splitter/README.md @@ -2,35 +2,35 @@ ## 目的 -`autoware_object_range_splitter`は、検出されたオブジェクトを起点からの距離で2つのメッセージに分割するためのパッケージです。 +`autoware_object_range_splitter`は、検出されたオブジェクトを始点からの距離によって2つのメッセージに分割するパッケージです。 -## 内部処理/アルゴリズム +## 仕組み / アルゴリズム - -## 入出力 +## 入力 / 出力 ### 入力 -| 名称 | 種別 | 説明 | +| 名称 | 型 | 説明 | | -------------- | ------------------------------------------------ | ---------------- | | `input/object` | `autoware_perception_msgs::msg::DetectedObjects` | 検出オブジェクト | @@ -38,113 +38,82 @@ **自動運転ソフトウェア** -**仕様** +[Autoware](https://www.autoware.ai/) は、自動車の自動運転を可能にするオープンソースソフトウェアプラットフォームです。本ドキュメントでは、Autoware の Planning コンポーネント/モジュールが生成する `post resampling` 出力を説明します。 -**Planning コンポーネント** +`post resampling` 出力は、Autoware の Planning コンポーネント/モジュールによって生成され、自車位置や経路計画などの情報を提供します。この出力を利用することで、自動運転システムは最新の状況を把握し、最適な動作を決定できます。 -**概要** +`post resampling` 出力の内容は次のとおりです。 -Planning コンポーネントは、現在の状況や高レベルの目標に基づいて、車両の将来の経路を計画します。 +- **自車位置:** Autoware の Planning コンポーネント/モジュールは、センサデータを利用して自車位置を特定します。`post resampling` 出力には、自車位置に関する次の情報が含まれます。 + - グローバル座標系における位置 + - ローカル座標系における位置 + - 姿勢 (ヨー角、ピッチ角、ロール角) +- **経路計画:** Autoware の Planning コンポーネント/モジュールは、現在の状況に基づいて経路を計画します。`post resampling` 出力には、経路計画に関する次の情報が含まれます。 + - 経路上のウェイポイント + - 経路の曲率と勾配 + - 速度制限 +- **障害物:** Autoware の Planning コンポーネント/モジュールは、周囲の障害物を検出します。`post resampling` 出力には、障害物に関する次の情報が含まれます。 + - 障害物の位置とサイズ + - 障害物のタイプ (車両、歩行者、自転車など) + - 障害物の速度と加速度 -**機能** +`post resampling` 出力は、自動運転システムが安全かつ効率的に動作するために不可欠な情報です。この出力を利用することで、自動運転システムは周囲の状況を把握し、最適な動作を決定できます。 -- 安全で衝突を回避する経路の生成 -- 交通規則の遵守 -- 車両の制約(速度、加速度など)を考慮した経路生成 -- 動的障害物(歩行者、車両など)への対応 -- 高レベルの目標(目的地、レーンキープなど)への追従 -- 予測可能な経路生成 - -**実装** - -Planning コンポーネントは、Autoware の **Planning モジュール** によって実装されています。このモジュールは、以下を実行します。 - -- センサデータの処理と解析 -- 自車位置の推定 -- 環境のモデリング -- 経路の探索と最適化 -- 経路の可視化 - -**安全性** - -Planning コンポーネントは、次の特徴により安全な動作を確保します。 - -- 複数のセンサからのデータフュージョン -- 予測可能な経路生成 -- 冗長性の確保 -- 逸脱量の制限(速度逸脱量、加速度逸脱量など) - -**性能** - -Planning コンポーネントは、以下のようなパフォーマンス目標を達成するように設計されています。 - -- 低遅延の経路生成 -- `post resampling` 後の経路の正確さ -- さまざまな運転シナリオへの適応性 - -**依存関係** - -Planning コンポーネントは、以下のコンポーネントに依存しています。 - -_センシングコンポーネント_ - -- ローカライゼーションコンポーネント\* -- コントロールコンポーネント\* - -| 名称 | 型 | 説明 | -| --------------------------- | ------------------------------------------------ | ---------------------- | -| `output/long_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | 長距離検出オブジェクト | -| `output/short_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | 短距離検出オブジェクト | +| 名前 | タイプ | 説明 | +| ---------------------------- | --------------------------------------------------- | ----------------------------------- | +| `output/long_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | 長距離検出オブジェクト | +| `output/short_range_object` | `autoware_perception_msgs::msg::DetectedObjects` | 短距離検出オブジェクト | ## パラメータ {{ json_to_markdown("perception/autoware_object_range_splitter/schema/object_range_splitter.schema.json") }} -## 想定 / 既知の制限 +## 仮定 / 既知の制限事項 - -## (オプション) エラーの検出と処理 +## (オプション) エラー検出と処理 - -## (オプション) パフォーマンス特性評価 +## (オプション) パフォーマンス特性 - -## (オプション) 参考文献 / 外部リンク +## (オプション) 参考文献/外部リンク - -## (オプション) 将来の拡張機能 / 未実装部分 +## (オプション) 将来の拡張/未実装部分 - + diff --git a/perception/autoware_object_velocity_splitter/README.md b/perception/autoware_object_velocity_splitter/README.md index 2b03aa5f83787..eb0615706e396 100644 --- a/perception/autoware_object_velocity_splitter/README.md +++ b/perception/autoware_object_velocity_splitter/README.md @@ -1,9 +1,8 @@ # autoware_object_velocity_splitter -このパッケージには、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl)用のオブジェクトフィルタモジュールが含まれています。 -このパッケージは、オブジェクトの速度によって DetectedObjects を2つのメッセージに分割できます。 +このパッケージには、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl)用のオブジェクトフィルタモジュールが含まれています。このパッケージでは、オブジェクトの速度でDetectedObjectsを2つのメッセージに分割できます。 -## インターフェース +## インターフェイス ### 入力 @@ -22,4 +21,5 @@ - `velocity_threshold` (double) [m/s] - デフォルトパラメータは3.0 -このパラメータはオブジェクトを分割するための速度しきい値です +このパラメータは、オブジェクトを分割するための速度しきい値です + diff --git a/perception/autoware_occupancy_grid_map_outlier_filter/README.md b/perception/autoware_occupancy_grid_map_outlier_filter/README.md index c05d667699e41..1d4b916fc0e97 100644 --- a/perception/autoware_occupancy_grid_map_outlier_filter/README.md +++ b/perception/autoware_occupancy_grid_map_outlier_filter/README.md @@ -1,19 +1,20 @@ +```markdown # autoware_occupancy_grid_map_outlier_filter ## 目的 -このノードは、オキュパンシグリッドマップに基づく外れ点フィルタです。 -オキュパンシグリッドマップの実装方法によっては、オキュパンシグリッドマップは時間内の占有確率を表しているため、時系列の外れ点フィルタと呼ぶことができます。 +このノードは、占有グリッドマップに基づく外れ値フィルタです。 +占有グリッドマップの実装によっては、占有グリッドマップは時間系列における占有確率を表すため、時間系列の外れ値フィルタと呼ぶことができます。 -## 仕組み / アルゴリズム +## 処理/アルゴリズム -1. オキュパンシグリッドマップを使用して、点群を占有確率が低いものと高いものとに分けます。 +1. 占有グリッドマップを使用して、点群を占有確率が低いものと占有確率が高いものに分けます。 -2. 占有確率が低い点群は必ずしも外れ点ではありません。特に、動いている物体の最上部は占有確率が低くなる傾向があります。そのため、`use_radius_search_2d_filter` が true の場合は、占有確率が低いと判断された点群に半径検索 2d 外れ点フィルタを適用します。 - 1. 各低占有確率点について、半径 (`radius_search_2d_filter/search_radius`) と点群の数から外れ点を特定します。この場合、参照される点群は低占有確率点だけでなく、高占有確率点を含むすべての点群です。 - 2. 点群の数は、`radius_search_2d_filter/min_points_and_distance_ratio` とベースリンクからの距離によって乗算できます。ただし、点群の最小と最大の数は制限されています。 +2. 占有確率が低い点群は必ずしも外れ値ではありません。特に、動いている物体の頂部は、占有確率が低くなる傾向にあります。したがって、`use_radius_search_2d_filter`がtrueの場合、占有確率が低いと判断された点群に半径検索2次元外れ値フィルタを適用します。 + 1. 占有確率が低い各点について、半径(`radius_search_2d_filter/search_radius`)と点群の個数から外れ値を決定します。この場合、参照される点群は占有確率が低い点だけでなく、占有確率が高い点をすべて含む点群です。 + 2. 点群の数は、`radius_search_2d_filter/min_points_and_distance_ratio`とベースリンクからの距離を乗算できます。ただし、点群の最小数と最大数は制限されています。 -次のビデオはサンプルです。黄色は高占有確率、緑は外れ点ではない低占有確率、赤は外れ点です。1 つ目のビデオの 0:15 と 1:16 付近で鳥が道路を渡りますが、外れ点と見なされています。 +以下のビデオはサンプルです。黄色い点は占有確率が高い、緑色の点は外れ値ではない占有確率が低い、赤い点は外れ値です。最初のビデオの約0:15と1:16では、鳥が道路を横断していますが、外れ値とみなされています。 - [movie1](https://www.youtube.com/watch?v=hEVv0LaTpP8) - [movie2](https://www.youtube.com/watch?v=VaHs1CdLcD0) @@ -23,87 +24,74 @@ ## 入出力 ### 入力 +``` -| 名前 | タイプ | 説明 | -| ---------------------------- | ------------------------- | -------------------------------------------- | -| `~/input/pointcloud` | `sensor_msgs/PointCloud2` | 地面を除去した障害物点群 | -| `~/input/occupancy_grid_map` | `nav_msgs/OccupancyGrid` | 障害物存在確率を占有確率マップに示したマップ | +| 名前 | タイプ | 説明 | +| --- | --- | --- | +| `~/input/pointcloud` | `sensor_msgs/PointCloud2` | 地面を除去した障害物点群 | +| `~/input/occupancy_grid_map` | `nav_msgs/OccupancyGrid` | 障害物の存在確率が確率占有度マップになっているマップ | ### 出力 -**自動運転ソフトウェア** +**自動運転ソフトウェアのアーキテクチャ** -**目次** +自動運転ソフトウェアシステムは、以下のモジュールで構成されています。 -- システムアーキテクチャ -- 知覚コンポーネント -- 計画モジュール -- 制御モジュール -- 評価方法 +- **Perception モジュール** + - センサーからのデータを処理して、周囲環境の認識を行います。 -**システムアーキテクチャ** +- **Localization モジュール** + - 車体の位置と姿勢を推定します。 -Autowareのシステムアーキテクチャは、次の主要コンポーネントで構成されています。 +- **Planning モジュール** + - 経路計画と障害物回避を行います。 -- **知覚コンポーネント:** センサーデータを処理して、周囲の環境を認識します。 -- **計画モジュール:** 知覚された環境に基づき、走行経路と制御コマンドを生成します。 -- **制御モジュール:** 計画モジュールから生成されたコマンドに基づいて、車両を制御します。 +- **Control モジュール** + - 車体のステアリング、アクセル、ブレーキを操作します。 -**知覚コンポーネント** +- **Monitoring モジュール** + - システムの全体的な状態を監視します。 -知覚コンポーネントは、次のタスクを実行します。 +**データフロー** -- **物体検出:** 車両、歩行者、障害物を検出します。 -- **車線検出:** 車線を検出します。 -- **自由空間検出:** 車両が移動できる空間を検出します。 +データは、以下の流れでモジュール間で受け渡されます。 -**計画モジュール** +1. センサーからのデータは `Perception` モジュールに送られます。 +2. `Perception` モジュールは、認識した物体や路面状況を `Localization` モジュールに提供します。 +3. `Localization` モジュールは、`post resampling` によって自車位置を推定します。 +4. `Planning` モジュールは、自車位置と周囲環境の情報をもとに経路計画を行います。 +5. `Planning` モジュールは、目標速度とステアリング角度を `Control` モジュールに提供します。 +6. `Control` モジュールは、目標速度に合わせてアクセルとブレーキを操作し、ステアリング角度に合わせて車体を旋回させます。 +7. `Monitoring` モジュールは、モジュール間の通信やシステムの異常を監視します。 -計画モジュールは、以下のタスクを実行します。 +**Autoware のアーキテクチャ** -- **経路計画:** 安全で効率的な走行経路を生成します。 -- **運動計画:** 車両の速度と加速度を制御します。 -- **軌跡生成:** 車両が経路に従うための詳細な軌跡を生成します。 +Autoware は、オープンソースの自動運転ソフトウェアスタックで、次のようなモジュールで構成されています。 -**制御モジュール** +- `Perception`: `pointgrey_camera`, `rslidar_pointcloud` +- `Localization`: `ndt`, `gnss` +- `Planning`: `trajectory`, `lattice`, `waypoint_follower` +- `Control`: `twist_controller`, `mpc_controller` +- `Monitoring`: `system_monitor`, `vehicle_monitor` -制御モジュールは、以下のタスクを実行します。 +| 名称 | 型 | 説明 | +| ------------------------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `~/output/pointcloud` | `sensor_msgs/PointCloud2` | 外れ値を除去した点群 | +| `~/output/debug/outlier/pointcloud` | `sensor_msgs/PointCloud2` | 外れ値として除去された点群 | +| `~/output/debug/low_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 占有グリッドマップで占有確率が低い点群(ただし、外れ値ではない) | +| `~/output/debug/high_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 占有グリッドマップで占有確率が高い点群 | -- **ステアリング制御:** 車両の方向を制御します。 -- **スロットル制御:** 車両の速度を制御します。 -- **ブレーキ制御:** 車両を停止します。 +## パラメーター -**評価方法** - -Autowareの性能は、シミュレーションと実車テストの両方を使用して評価されます。評価メトリクスには以下が含まれます。 - -- **経路逸脱量:** 計画された経路からの車両の偏差 -- **速度逸脱量:** 計画された速度からの車両の偏差 -- **加速度逸脱量:** 計画された加速度からの車両の偏差 -- **衝突回数:** シミュレーションまたは実車テスト中の車両の衝突数 - -**追加のドキュメント** - -- [Autowareの開発ガイド](https://github.com/autowarefoundation/autoware/blob/master/docs/development_guide.md) -- [Autowareの技術ドキュメント](https://github.com/autowarefoundation/autoware/blob/master/docs/technical_docs.md) - -| 名称 | タイプ | 説明 | -| ------------------------------------------- | ------------------------- | ------------------------------------------------------------------ | -| `~/output/pointcloud` | `sensor_msgs/PointCloud2` | 異常値が除去された点群 | -| `~/output/debug/outlier/pointcloud` | `sensor_msgs/PointCloud2` | 異常値として削除された点群 | -| `~/output/debug/low_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 点群マップ内の占有確率が低い点群(ただし、異常値とは見なされない) | -| `~/output/debug/high_confidence/pointcloud` | `sensor_msgs/PointCloud2` | 点群マップ内の占有確率が高い点群 trajectory | - -## パラメータ - -{{ json_to_markdown("perception/occupancy_grid_map_outlier_filter/schema/occupancy_grid_map_outlier_filter_ja.schema.json") }} +{{ json_to_markdown("perception/occupancy_grid_map_outlier_filter/schema/occupancy_grid_map_outlier_filter.schema.json") }} ## 想定/既知の制限 -## (任意)エラー検知と処理 +## (省略可能) エラー検出と処理 + +## (省略可能) パフォーマンス特性 -## (任意)パフォーマンス特性評価 +## (省略可能) 参照/外部リンク -## (任意)リファレンス/外部リンク +## (省略可能) 将来の拡張/未実装部分 -## (任意)将来の拡張/未実装部分 diff --git a/perception/autoware_probabilistic_occupancy_grid_map/README.md b/perception/autoware_probabilistic_occupancy_grid_map/README.md index 292c210a131e2..cc95afec82176 100644 --- a/perception/autoware_probabilistic_occupancy_grid_map/README.md +++ b/perception/autoware_probabilistic_occupancy_grid_map/README.md @@ -5,17 +5,17 @@ このパッケージは、障害物の確率をオキュパンシーグリッドマップとして出力します。 ![pointcloud_based_occupancy_grid_map_sample_image](./image/pointcloud_based_occupancy_grid_map_sample_image.gif) -## リファレンス/外部リンク +## 参照/外部リンク -- [ポイントクラウドライダー型オキュパンシーグリッドマップ](pointcloud-based-occupancy-grid-map.md) -- [レーザースキャンライダー型オキュパンシーグリッドマップ](laserscan-based-occupancy-grid-map.md) +- [ポイントクラウドベースのオキュパンシーグリッドマップ](pointcloud-based-occupancy-grid-map.md) +- [レーザースキャンベースのオキュパンシーグリッドマップ](laserscan-based-occupancy-grid-map.md) - [グリッドマップフュージョン](synchronized_grid_map_fusion.md) ## 設定 -オキュパンシーグリッドマップは `map_frame` で生成され、グリッドの向きは固定されています。 +オキュパンシーグリッドマップは`map_frame`上に生成され、グリッドの向きは固定されています。 -センサー原点とグリッドマップ原点をそれぞれ意味する `scan_origin_frame` と `gridmap_origin_frame` の選択が必要になる場合があります。特に、メインの LiDAR センサーフレーム(サンプル車両の場合、`velodyne_top`)を `scan_origin_frame` に設定すると、より優れたパフォーマンスが得られます。 +`scan_origin_frame`と`gridmap_origin_frame`を選択する必要があります。これらはそれぞれセンサー原点とグリッドマップ原点です。特に、メインLiDARセンサーフレーム(サンプルビークルでは`velodyne_top`)を`scan_origin_frame`として設定すると、パフォーマンスが向上します。 ![image_for_frame_parameter_visualization](./image/gridmap_frame_settings.drawio.svg) @@ -28,45 +28,21 @@ {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/pointcloud_based_occupancy_grid_map.schema.json") }} {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json") }} -### 入力ポイントクラウドのダウンサンプリング(オプション) +### 入力ポイントクラウドをダウンサンプリング(オプション) -`downsample_input_pointcloud` を `true` に設定すると、入力ポイントクラウドはダウンサンプリングされ、次のトピックも使用されます。この機能は現在、ポイントクラウドライダー型オキュパンシーグリッドマップでのみ使用できます。 +`downsample_input_pointcloud`を`true`に設定すると、入力ポイントクラウドがダウンサンプリングされ、以下のトピックも使用されます。この機能は現在、ポイントクラウドベースのオキュパンシーグリッドマップ用のみです。 - pointcloud_based_occupancy_grid_map method + ```yaml # downsampled raw and obstacle pointcloud /perception/occupancy_grid_map/obstacle/downsample/pointcloud /perception/occupancy_grid_map/raw/downsample/pointcloud ``` -## マルチLiDARポイントクラウドベースのポイントクラウド - -`multi_lidar_pointcloud_based_point_cloud`モジュールは、複数のLiDARスキャナーからのポイントクラウドデータを統合して、高品質で濃密なポイントクラウドを作成します。このポイントクラウドは、他のPlanningコンポーネントに使用され、自車位置における周辺環境の正確な表現を提供します。 - -### 特徴 - -- 複数のLiDARからのポイントクラウドデータを統合 -- LiDARの視差を補正して、より正確なポイントクラウドを生成 -- ノイズや異常値を除去して、高品質なポイントクラウドを生成 -- `post resampling`を使用して、ポイントクラウドの密度のばらつきを削減 - -### 使用法 - -`multi_lidar_pointcloud_based_point_cloud`モジュールを使用するには、次の手順に従います。 +- multi_lidar_pointcloud_based_point_cloud -1. モジュールの必要なパラメーターを設定します。 -2. モジュールをAutowareのPlanningパイプラインに接続します。 -3. モジュールを実行します。 - -### 出力 - -`multi_lidar_pointcloud_based_point_cloud`モジュールは、次の出力を生成します。 - -- 高品質で濃密なポイントクラウド -- 各LiDARの点の距離逸脱量 -- 各LiDARの点の速度逸脱量 -- 各LiDARの点の加速度逸脱量 ```yaml # downsampled raw and obstacle pointcloud @@ -76,16 +52,18 @@ ### テスト -このパッケージは `gtest` を使用するユニットテストを提供します。 -以下のコマンドでテストを実行できます。 +このパッケージは `gtest` を使用したユニットテストを提供します。 +次のコマンドでテストを実行できます。 + ```bash colcon test --packages-select autoware_probabilistic_occupancy_grid_map --event-handlers console_direct+ ``` -テスト内容: +**テストは次の内容を含みます。** - コスト値変換関数のユニットテスト - ユーティリティ関数のユニットテスト -- オキュパンシグリッドマップ結合関数のユニットテスト +- オキュパンシグリッドマップ融合関数のユニットテスト - ポイントクラウドベースオキュパンシグリッドマップの入出力テスト + diff --git a/perception/autoware_radar_crossing_objects_noise_filter/README.md b/perception/autoware_radar_crossing_objects_noise_filter/README.md index 76903192184c3..cf845bc762734 100644 --- a/perception/autoware_radar_crossing_objects_noise_filter/README.md +++ b/perception/autoware_radar_crossing_objects_noise_filter/README.md @@ -1,35 +1,42 @@ -## autoware_radar_crossing_objects_noise_filter +# autoware_radar_crossing_objects_noise_filter -このパッケージは、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl) に対するレーダーノイズフィルタモジュールを提供します。このパッケージは、自車と交差するノイズオブジェクトを除去できます。 +このパッケージには、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl) のレーダーノイズフィルタモジュールが含まれます。 +このパッケージは、自車と交差するノイズオブジェクトをフィルタリングできます。 ## 設計 ### 背景 -このパッケージは、自車から交差するノイズオブジェクトを除去することを目的としています。これらのオブジェクトがノイズである理由は次のとおりです。 +このパッケージは、自車と交差するノイズオブジェクトをフィルタすることを目的としています。 +これらのオブジェクトがノイズである理由は次のとおりです。 -- 1. ドップラー速度を持つオブジェクトは、垂直速度を持つオブジェクトよりも信頼できます。 +- 1. ドップラー速度を持つ物体は、鉛直速度を持つ物体よりも信頼できます。 -レーダーは、ドップラー速度としてオブジェクトの速度情報を取得できますが、垂直速度をドップラー速度から直接取得することはできません。一部のレーダーは、推定によってドップラー速度だけでなく垂直速度を持つオブジェクトを出力できます。垂直速度の推定が不十分な場合、ノイズオブジェクトが出力されます。言い換えると、上記の状況は、自車から見たときに垂直方向のひねりがあるオブジェクトがノイズオブジェクトになりやすいということです。 +レーダーはオブジェクトの速度情報をドップラー速度として取得できますが、ドップラー速度に対する鉛直速度を直接取得することはできません。 +一部のレーダーは、推定によってドップラー速度だけでなく鉛直速度も出力できます。 +鉛直速度の推定が不十分な場合、ノイズオブジェクトが出力されます。 +言い換えると、自車から見て鉛直方向のひねりを持つオブジェクトはノイズオブジェクトになりやすいということです。 -例を次の図に示します。静止したオブジェクトの速度推定が失敗し、自車の真の前方を通過するゴーストオブジェクトが発生します。 +例を下の図に示します。速度の推定が静止オブジェクトで失敗し、自車の前面にゴーストオブジェクトが交差してしまいます。 ![vertical_velocity_objects](docs/vertical_velocity_objects.png) -- 2. 自車の旋回はレーダーからの出力を影響します。 +- 2. 自車の旋回はレーダーの出力に影響します。 -自車が旋回すると、オブジェクトレベルで出力を生成するレーダーは、[radar_tracks_msgs_converter](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_tracks_msgs_converter) が自車ひねりで補正する場合でも、オブジェクトのひねりを正しく推定できないことがあります。そのため、レーダーによって検出されたオブジェクトがベースリンクから見て円運動している場合、速度が正しく推定されず、オブジェクトが静止している可能性があります。 +自車が旋回すると、オブジェクトレベルで出力を生成するレーダーは、[radar_tracks_msgs_converter](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_tracks_msgs_converter) が自車ひねりで補償を行っていても、オブジェクトのひねりを正しく推定できない場合があります。 +したがって、レーダーによって検出されるオブジェクトがベースリンクに対して円運動をしている場合、速度が正しく推定されていない可能性が高く、そのオブジェクトは静止オブジェクトである可能性があります。 -例を次の図に示します。自車が右折すると、周囲のオブジェクトは左回りの円運動をします。 +例を下の図に示します。自車が右折すると、周囲のオブジェクトは左回りの円運動をします。 ![turning_around](docs/turning_around.png) ### アルゴリズム -自車と交差するオブジェクトを除去するために、このパッケージは次のアルゴリズムを使用してオブジェクトを除去します。 +自車と交差するオブジェクトをフィルタリングするために、このパッケージは次のアルゴリズムでオブジェクトをフィルタリングします。 ![algorithm](docs/radar_crossing_objects_noise_filter.drawio.svg) + ```cpp // If velocity of an object is rather than the velocity_threshold, // and crossing_yaw is near to vertical @@ -48,25 +55,26 @@ ### 入力 - `~/input/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - レーダー検出オブジェクト + - 入力レーダーオブジェクト ### 出力 - `~/output/noise_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - ノイズオブジェクト - `~/output/filtered_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - フィルタリングされたオブジェクト + - フィルタリングオブジェクト -### パラメーター +### パラメータ - `angle_threshold` (double) [rad] - - デフォルトパラメーターは1.0472です。 + - デフォルトパラメータは1.0472です。 -このパラメーターは、フィルタリングする角度のしきい値です。0 < `angle_threshold` < pi / 2という条件があります。交差角がこのパラメーターより大きい場合、ノイズオブジェクトの候補となります。言い換えると、このパラメーターより小さい場合は、フィルタリングされたオブジェクトです。 -このパラメーターを小さく設定すると、より多くのオブジェクトがノイズと見なされます。詳細については、アルゴリズムの章を参照してください。 +このパラメータはフィルタリングする角度の閾値であり、0 < `angle_threshold` < pi / 2の条件があります。交差角がこのパラメータより大きい場合、ノイズオブジェクトの候補となります。言い換えると、このパラメータより小さい場合はフィルタリングされたオブジェクトです。 +このパラメータを小さく設定すると、より多くのオブジェクトがノイズと見なされます。詳細はアルゴリズムの章を参照してください。 - `velocity_threshold` (double) [m/s] - - デフォルトパラメーターは3.0です。 + - デフォルトパラメータは3.0です。 + +このパラメータは、フィルタリングする速度の閾値です。オブジェクトの速度がこのパラメータより大きい場合、ノイズオブジェクトの候補となります。言い換えると、オブジェクトの速度がこのパラメータより小さい場合はフィルタリングされたオブジェクトです。 +このパラメータを小さく設定すると、より多くのオブジェクトがノイズと見なされます。詳細はアルゴリズムの章を参照してください。 -このパラメーターは、フィルタリングする速度のしきい値です。オブジェクトの速度がこのパラメーターより大きい場合、ノイズオブジェクトの候補となります。言い換えると、オブジェクトの速度がこのパラメーターより小さい場合は、フィルタリングされたオブジェクトです。 -このパラメーターを小さく設定すると、より多くのオブジェクトがノイズと見なされます。詳細については、アルゴリズムの章を参照してください。 diff --git a/perception/autoware_radar_fusion_to_detected_object/README.md b/perception/autoware_radar_fusion_to_detected_object/README.md index 68ab6fb422e30..78de58a9d90f5 100644 --- a/perception/autoware_radar_fusion_to_detected_object/README.md +++ b/perception/autoware_radar_fusion_to_detected_object/README.md @@ -1,11 +1,11 @@ # `autoware_radar_fusion_to_detected_object` -このパッケージには、レーダー検出オブジェクトと 3D 検出オブジェクトをセンサーフュージョするモジュールが含まれます。 +このパッケージは、レーダー検出オブジェクトと 3D 検出オブジェクトのセンサフュージョンモジュールを含んでいます。 -フュージョンノードは以下のことができます。 +フュージョンノードは次のことができます。 -- レーダーデータが正常にマッチした場合、3D 検出に速度を付加します。追跡モジュールは、速度情報を活用することで追跡結果を向上し、Planning モジュールはアダプティブクルーズコントロールなどのアクションを実行するために速度情報を使用します。 -- 対応するレーダー検出が見つかった場合、信頼度の低い 3D 検出を改善します。 +- レーダーデータを正常にマッチングした場合に、3D 検出に速度を付加します。トラッキングモジュールはこの速度情報を使用してトラッキング結果を向上させ、プランニングモジュールはこの情報を使用して適応型クルーズコントロールなどのアクションを実行します。 +- 対応するレーダー検出が見つかったときに、低信頼性の 3D 検出を向上させます。 ![process_low_confidence](docs/radar_fusion_to_detected_object_6.drawio.svg) @@ -13,98 +13,95 @@ ### 背景 -このパッケージは LiDAR ベースの 3D 検出結果とレーダーデータをフュージョンします。 -LiDAR ベースの 3D 検出は、オブジェクトの位置とサイズを高精度で推定できますが、オブジェクトの速度は推定できません。 -レーダーデータは、オブジェクトのドップラー速度を推定できますが、オブジェクトの位置とサイズを高精度で推定できません。 -このフュージョンパッケージの目的は、これらの特性データをフュージョンし、オブジェクトの位置、サイズ、速度を高精度で推定することです。 +このパッケージは、LiDAR ベースの 3D 検出出力とレーダーデータを融合するものです。 +LiDAR ベースの 3D 検出は、オブジェクトの位置とサイズを高精度で推定できますが、オブジェクトの速度を推定できません。 +レーダーデータはオブジェクトのドップラー速度を推定できますが、オブジェクトの位置とサイズを高精度で推定できません。 +このフュージョンパッケージは、これらの特性データを融合し、オブジェクトの位置、サイズ、速度を高精度で推定することを目的としています。 ### アルゴリズム -コアアルゴリズムに関するドキュメントは [こちら](docs/algorithm.md) です。 +コアアルゴリズムのドキュメントは [こちら](docs/algorithm.md) にあります。 -## コアアルゴリズムのインターフェース +## コアアルゴリズムのインターフェイス コアアルゴリズムのパラメータは `core_params` として設定できます。 -### センサーフュージョンのパラメータ +### センサフュージョン用パラメータ -- `bounding_box_margin`(double、[m]) +- `bounding_box_margin` (double) [m] - デフォルトパラメータは 2.0 です。 -このパラメータは、2D バードビューバウンディングボックスを各辺に延ばす距離です。 -このパラメータは、拡張されたボックス内に含まれるレーダー重心を検索するためのしきい値として使用されます。 +このパラメータは、2D バードビューバウンディングボックスを各辺で拡張するための距離です。 +このパラメータは、拡張されたボックス内にあるレーダー重心を検出するためのしきい値として使用されます。 -- `split_threshold_velocity`(double、[m/s]) +- `split_threshold_velocity` (double) [m/s] - デフォルトパラメータは 5.0 です。 -このパラメータは、レーダー情報から 2 つのオブジェクトに分割することを決定するオブジェクトの速度しきい値です。 -この機能は現在実装されていませんのでご注意ください。 +このパラメータは、レーダー情報から 2 つのオブジェクトに分割するかどうかを決定するためのオブジェクトの速度しきい値です。 +この機能は現在実装されていません。 -- `threshold_yaw_diff`(double、[rad]) +- `threshold_yaw_diff` (double) [rad] - デフォルトパラメータは 0.35 です。 -このパラメータはヨーの向きのしきい値です。 -LiDAR ベースの検出オブジェクトとレーダー速度のヨーの差がこのしきい値を下回る場合、レーダー情報が出力オブジェクトに追加されます。 +このパラメータは、ヨー方向のしきい値です。 +LiDAR ベースの検出オブジェクトとレーダー速度のヨー度の差が大きい場合、レーダー情報は出力オブジェクトに付加されます。 -### 速度推定の重みパラメータ +### 速度推定用の重みパラメータ -これらの重みパラメータを調整するには、詳細については [ドキュメント](docs/algorithm.md) を参照してください。 +これらの重みパラメータを調整するには、[ドキュメント](docs/algorithm.md) を詳しく参照してください。 -- `velocity_weight_average`(double) +- `velocity_weight_average` (double) - デフォルトパラメータは 0.0 です。 -このパラメータは速度推定におけるレーダーデータの平均のねじれ係数です。 +このパラメータは、速度推定におけるレーダーデータの平均ツイストの係数です。 -- `velocity_weight_median`(double) +- `velocity_weight_median` (double) - デフォルトパラメータは 0.0 です。 -**速度推定におけるレーダーデータの中央値のツイスト係数** +このパラメータは、速度推定におけるレーダーデータのメディアンねじれのねじれ係数です。 - `velocity_weight_min_distance` (double) - - デフォルトパラメータは 1.0 です。 +- デフォルトのパラメータは 1.0 です。 -**速度推定におけるバウンディングボックスの中心に最も近いレーダーデータのツイスト係数** +このパラメータは、速度推定においてバウンディングボックスの中心付近にあるレーダーデータのねじれ係数です。 - `velocity_weight_target_value_average` (double) - - デフォルトパラメータは 0.0 です。 +- デフォルトのパラメータは 0.0 です。 -**速度推定におけるターゲット値の加重平均のツイスト係数** -レーダーポイントクラウドを使用している場合、ターゲット値は振幅です。レーダーオブジェクトを使用している場合、ターゲット値は確率です。 +このパラメータは、速度推定におけるターゲット値加重平均のねじれ係数です。レーダーポイントクラウドを使用している場合、ターゲット値は振幅です。レーダーオブジェクトを使用している場合、ターゲット値は確率です。 - `velocity_weight_target_value_top` (double) - - デフォルトパラメータは 0.0 です。 +- デフォルトのパラメータは 0.0 です。 -**速度推定におけるトップターゲット値レーダーデータのツイスト係数** -レーダーポイントクラウドを使用している場合、ターゲット値は振幅です。レーダーオブジェクトを使用している場合、ターゲット値は確率です。 +このパラメータは、速度推定における最上位ターゲット値レーダーデータのねじれ係数です。レーダーポイントクラウドを使用している場合、ターゲット値は振幅です。レーダーオブジェクトを使用している場合、ターゲット値は確率です。 -### 固定オブジェクト情報の\*\*パラメータ +### 固定オブジェクト情報の parámetros - `convert_doppler_to_twist` (bool) - - デフォルトパラメータは false です。 + - デフォルトのパラメータは false です。 -**検出されたオブジェクトのヨー情報を使用して、ドップラー速度をツイストに変換するフラグ** +このパラメータは、検出されたオブジェクトのヨー情報を用いてドップラー速度のねじれに変換するかのフラグです。 - `threshold_probability` (float) - - デフォルトパラメータは 0.4 です。 + - デフォルトのパラメータは 0.4 です。 -**出力オブジェクトをフィルタリングするためのしきい値** -出力オブジェクトの確率がこのパラメータよりも低く、出力オブジェクトにレーダーポイント/オブジェクトがない場合、オブジェクトを削除します。 +このパラメータは、出力オブジェクトをフィルタするためのしきい値です。出力オブジェクトの確率がこのパラメータよりも低く、出力オブジェクトにレーダーポイント/オブジェクトがない場合、そのオブジェクトを削除します。 - `compensate_probability` (bool) - - デフォルトパラメータは false です。 + - デフォルトのパラメータは false です。 -**確率補償を使用するフラグ** -このパラメータが true の場合、オブジェクトの確率をしきい値確率に補償します。 +このパラメータは、確率補正を使用するかのフラグです。このパラメータが true の場合、オブジェクトの確率をしきい値確率で補正します。 -## **`autoware_radar_object_fusion_to_detected_object`** のインターフェイス +## `autoware_radar_object_fusion_to_detected_object` のインターフェース -レーダーオブジェクトと検出されたオブジェクトとのセンサーフュージョン +レーダーオブジェクトと検出されたオブジェクトによるセンサーフュージョン。 - 計算コストは O(nm) です。 - n: レーダーオブジェクトの数。 - - m: 3D 検出からのオブジェクトの数。 + - m: 3 次元物体検出のオブジェクトの数。 + +### 起動方法 -### 実行方法 ```sh ros2 launch autoware_radar_fusion_to_detected_object radar_object_to_detected_object.launch.xml @@ -113,27 +110,29 @@ ros2 launch autoware_radar_fusion_to_detected_object radar_object_to_detected_ob ### 入力 - `~/input/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - 3Dで認識されたオブジェクト + - 3D検出オブジェクト + - `~/input/radar_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - レーダーオブジェクト。フレームIDは`~/input/objects`と同じである必要がある + - レーダーオブジェクト。frame_idは`~/input/objects`と同じである必要があることに注意 ### 出力 - `~/output/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - ツイスト付き3D認識オブジェクト + - ねじれを持った3D検出オブジェクト + - `~/debug/low_confidence_objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - 信頼度が低いため`~/output/objects`として出力されない3D認識オブジェクト + - 信頼度の低さにより`~/output/objects`として出力されない3D検出オブジェクト ### パラメータ コアアルゴリズムのパラメータは`node_params`として設定できます。 - `update_rate_hz` (double) [hz] - - デフォルトパラメータは20.0です + - デフォルトパラメータは20.0です。 + +このパラメータは`onTimer`関数の更新レートです。このパラメータは入力トピックのフレームレートと同じである必要があります。 -このパラメータは`onTimer`関数の更新率です。 -このパラメータは入力トピックのフレームレートと同じである必要があります。 +## radar_scan_fusion_to_detected_objectのインターフェイス(未定) -## radar_scan_fusion_to_detected_objectインターフェイス(未定) +実装中 -未実装 diff --git a/perception/autoware_radar_object_clustering/README.md b/perception/autoware_radar_object_clustering/README.md index e39ca463c2120..6966d8d16e795 100644 --- a/perception/autoware_radar_object_clustering/README.md +++ b/perception/autoware_radar_object_clustering/README.md @@ -1,9 +1,9 @@ # `autoware_radar_object_clustering` -このパッケージには、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl) 入力用のレーダオブジェクトのクラスタリングが含まれています。 +このパッケージは、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl) 入力向けのレーダーオブジェクトクラスタリングを含んでいます。 -このパッケージは、[radar_tracks_msgs_converter](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_tracks_msgs_converter)によってレーダトラックから変換され、ノイズフィルタによって処理されるレーダDetectedObjectsから、クラスタ化されたオブジェクトを作成できます。 -言い換えれば、このパッケージは、1つのオブジェクトからの複数のレーダ検出を1つに結合して、クラスとサイズを調整できます。 +このパッケージは、[radar_tracks_msgs_converter](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_tracks_msgs_converter) によって RadarTracks から変換され、ノイズフィルタによって処理された DetectedObjects からクラスタリングされたオブジェクトを作成できます。 +つまり、このパッケージは、1 つのオブジェクトからの複数のレーダー検出を 1 つに結合して、クラスとサイズを調整できます。 ![radar_clustering](docs/radar_clustering.drawio.svg) @@ -11,51 +11,51 @@ ### 背景 -オブジェクト出力を搭載したレーダでは、特にトラックやトレーラーなどの大型車両では、1つのオブジェクトから複数の検出結果が得られる場合があります。 -その複数の検出結果は、追跡モジュール内のオブジェクトの分離を引き起こします。 -そのため、このパッケージによって複数の検出結果は事前に1つのオブジェクトにクラスタリングされます。 +オブジェクト出力を備えたレーダーでは、特に大型車 (トラックやトレーラー) では、1 つのオブジェクトから複数の検出結果が得られる場合があります。 +その複数の検出結果は、追跡モジュールでオブジェクトが分離される原因となります。 +そこで、このパッケージによって、複数の検出結果が事前に 1 つのオブジェクトにクラスタリングされます。 ### アルゴリズム -- 1. `base_link`からの距離でソート +- 1. `base_link` からの距離でソート -まず、DetectedObjects内のオブジェクトの順序に依存して結果が変化するのを防ぐために、入力オブジェクトは`base_link`からの距離によってソートされます。 -さらに、遮蔽を考慮して近接順序でマッチングを適用するために、オブジェクトはあらかじめ距離の短い順にソートされます。 +最初に、DetectedObjects 内のオブジェクトの順番による結果の変更を防ぐために、入力オブジェクトは `base_link` からの距離でソートされます。 +さらに、閉塞を考慮して近さ順にマッチングを適用するために、オブジェクトは距離の短い順にソートされます。 - 2. クラスタリング -2つのレーダオブジェクトが近く、2つのレーダオブジェクト間のヨー角方向と速度が類似している場合(これらのある程度の程度はパラメータによって定義されます)、それらはクラスタリングされます。 -レーダの特性がこのマッチングのパラメータに影響を与えることに注意してください。 -例えば、レンジ距離または角度の分解能が低く、速度の精度が高い場合、`distance_threshold`パラメータは大きくし、速度の類似性を強く重視したマッチングを設定する必要があります。 +2 つのレーダーオブジェクトが近く、2 つのレーダーオブジェクト間の進行方向と速度が類似している (この程度はパラメータによって定義されます) 場合、それらはクラスタリングされます。 +このマッチングのパラメータはレーダーの特性に影響を受けることに注意してください。 +たとえば、距離レンジまたは角度の分解能が低く、速度の精度が高い場合、`distance_threshold` パラメータを大きくし、速度の類似性に強く注目したマッチングを設定する必要があります。 ![clustering](docs/clustering.drawio.svg) -すべてのレーダオブジェクトのグループ化後、複数のレーダオブジェクトがグループ化されている場合、新しいクラスタ化されたオブジェクトの運動学はその平均から計算され、ラベルと形状はその中で最大の信頼度をもつレーダオブジェクトのその情報から計算されます。 +すべてのレーダーオブジェクトのグループ化後、複数のレーダーオブジェクトがグループ化されている場合、新しいクラスタリングされたオブジェクトの運動学はその平均から、新しいクラスタリングされたオブジェクトのラベルと形状はレーダーオブジェクト内の最上位の自信から計算されます。 -- 3. 固定されたラベルの訂正 +- 3. 固定ラベル修正 -レーダ出力からのラベル情報が十分に正確でない場合、`is_fixed_label`パラメータを`true`に設定することをお勧めします。 -このパラメータが真の場合、クラスタ化されたオブジェクトのラベルは、`fixed_label`パラメータによって設定されたラベルで上書きされます。 -このパッケージがレーダによる遠くのダイナミックオブジェクト検出のために使用される場合、このパラメータは`VEHICLE`に設定することをお勧めします。 +レーダー出力からのラベル情報が不正確な場合は、`is_fixed_label` パラメータを `true` に設定することをお勧めします。 +パラメータが `true` の場合、クラスタリングされたオブジェクトのラベルは `fixed_label` パラメータで設定されたラベルで上書きされます。 +このパッケージをレーダーを使った遠くの動的オブジェクト検出に使用する場合、パラメータは `VEHICLE` に設定することをお勧めします。 -- 4. 固定されたサイズの訂正 +- 4. 固定サイズ修正 -レーダ出力からのサイズ情報が十分に正確でない場合、`is_fixed_size`パラメータを`true`に設定することをお勧めします。 -このパラメータが真の場合、クラスタ化されたオブジェクトのサイズは、`size_x`、`size_y`、および`size_z`パラメータによって設定された値で上書きされます。 -このパッケージをレーダによる遠くのダイナミックオブジェクト検出に使用する場合は、このパラメータを車両の平均サイズに近い値に設定することをお勧めします。 -[multi_objects_tracker](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_multi_object_tracker)に使用するために、サイズパラメータは`min_area_matrix`パラメータを超過する必要があることに注意してください。 +レーダー出力からのサイズ情報が不正確な場合は、`is_fixed_size` パラメータを `true` に設定することをお勧めします。 +パラメータが `true` の場合、クラスタリングされたオブジェクトのサイズは `size_x`、`size_y`、および `size_z` パラメータで設定されたラベルで上書きされます。 +このパッケージをレーダーを使った遠くの動的オブジェクト検出に使用する場合、パラメータは車両の平均サイズに近い `size_x`、`size_y`、`size_z` に設定することをお勧めします。 +[multi_objects_tracker](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_multi_object_tracker) で使用するには、サイズパラメータは `min_area_matrix` パラメータを超える必要があります。 ### 制限事項 -現在、クラスタ化されたオブジェクトのサイズの推定は実装されていません。 -したがって、`is_fixed_size`パラメータを`true`に設定し、サイズパラメータを車両の平均サイズに近い値に設定することをお勧めします。 +現時点では、クラスタリングされたオブジェクトのサイズの推定は実装されていません。 +そのため、`is_fixed_size` パラメータを `true` に設定し、サイズパラメータを車両の平均サイズに近い値に設定することをお勧めします。 -## インターフェース +## インターフェイス ### 入力 - `~/input/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) - - レーダオブジェクト + - レーダーオブジェクト ### 出力 @@ -64,18 +64,18 @@ ### パラメータ -- `angle_threshold` (ダブル型) [rad] - - デフォルトのパラメータは 0.174 です。 -- `distance_threshold` (ダブル型) [m] - - デフォルトのパラメータは 4.0 です。 -- `velocity_threshold` (ダブル型) [m/s] - - デフォルトのパラメータは 2.0 です。 +- `angle_threshold` (double) [rad] + - デフォルト値は0.174です。 +- `distance_threshold` (double) [m] + - デフォルト値は4.0です。 +- `velocity_threshold` (double) [m/s] + - デフォルト値は2.0です。 -これらのパラメータは、"クラスタリング"処理でレーダー検出が 1 つのオブジェクトから来るかどうかを判定するための角度、距離、速度のしきい値です。このアルゴリズムの詳細は、アルゴリズムのセクションに記載されています。 -2 つのオブジェクトからの角度/距離/速度の差がすべてしきい値より小さい場合、2 つのオブジェクトは 1 つのクラスター化されたオブジェクトにマージされます。 -これらのパラメータが大きいほど、より多くのオブジェクトが 1 つのクラスター化されたオブジェクトにマージされます。 +これらのパラメータは、アルゴリズムセクションに詳細に記載されている「クラスタリング」処理において、レーダー検出が1つのオブジェクトから来ており、角度、距離、速度の差がしきい値よりも小さい場合、2つのオブジェクトは1つのクラスタリングされたオブジェクトにマージされます。 +これらのパラメータが大きいほど、より多くのオブジェクトが1つのクラスタリングされたオブジェクトにマージされます。 + +これらは以下のように`isSameObject`関数で使用されます。 -これらは以下のような `isSameObject` 関数で使用されます。 ```cpp @@ -103,16 +103,16 @@ bool RadarObjectClusteringNode::isSameObject( ``` - `is_fixed_label` (bool) - - デフォルトパラメータはfalseです。 + - デフォルトパラメータはFalseです。 - `fixed_label` (string) - デフォルトパラメータは"UNKNOWN"です。 `is_fixed_label`は固定ラベルを使用するフラグです。 -trueの場合、クラスタされたオブジェクトのラベルは`fixed_label`パラメータで設定されたラベルで上書きされます。 -レーダーオブジェクトにラベル情報がない場合は、固定ラベルを使用することをお勧めします。 +Trueの場合、クラスタ化されたオブジェクトのラベルは`fixed_label`パラメータで設定されたラベルで上書きされます。 +レーダーオブジェクトにラベル情報がない場合は、固定ラベルを使用することを推奨します。 - `is_fixed_size` (bool) - - デフォルトパラメータはfalseです。 + - デフォルトパラメータはFalseです。 - `size_x` (double) [m] - デフォルトパラメータは4.0です。 - `size_y` (double) [m] @@ -120,5 +120,6 @@ trueの場合、クラスタされたオブジェクトのラベルは`fixed_lab - `size_z` (double) [m] - デフォルトパラメータは1.5です。 -`is_fixed_size`は固定サイズのパラメータを使用するフラグです。 -trueの場合、クラスタされたオブジェクトのサイズは`size_x`, `size_y`, `size_z`パラメータで設定されたラベルで上書きされます。 +`is_fixed_size`は固定サイズのフラグです。 +Trueの場合、クラスタ化されたオブジェクトの大きさは、`size_x`、`size_y`、`size_z`パラメータで設定されたラベルで上書きされます。 + diff --git a/perception/autoware_radar_object_tracker/README.md b/perception/autoware_radar_object_tracker/README.md index 749724b343fc7..73a7051ecb73e 100644 --- a/perception/autoware_radar_object_tracker/README.md +++ b/perception/autoware_radar_object_tracker/README.md @@ -1,122 +1,137 @@ -# `autoware_radar_object_tracker` +## `autoware_radar_object_tracker` ## 目的 -このパッケージはレーダーオブジェクト追跡ノードを提供し、検出されたオブジェクトのシーケンスを処理してオブジェクトに一貫性のあるIDを割り当て、その速度を推定します。 +このパッケージは、検出されたオブジェクトのシーケンスを処理して、それらに一貫した ID を割り当て、速度を見積もるレーダーオブジェクト追跡ノードを提供します。 -## 内部処理 / アルゴリズム +## 内部動作 / アルゴリズム -このレーダーオブジェクト追跡器は、データ関連付けアルゴリズムと追跡アルゴリズムの組み合わせです。 +このレーダーオブジェクトトラッカーは、データ関連付けと追跡アルゴリズムの組み合わせです。 - + ### データ関連付け -データ関連付けアルゴリズムは、検出されたオブジェクトを既存の軌道と照合します。 +データ関連付けアルゴリズムは、検出されたオブジェクトと既存の軌跡を照合します。 -### 追跡モデル +### トラッカーモデル -このパッケージで使用される追跡モデルは、検出されたオブジェクトのクラスによって異なります。詳細については、[models.md](models.md) を参照してください。 +このパッケージで使用されるトラッカーモデルは、検出されたオブジェクトのクラスによって異なります。 +詳細については [models.md](models.md) をご覧ください。 - + -## 入出力 +## 入力 / 出力 ### 入力 -| 名前 | 型 | 説明 | -| ------------- | ------------------------------------------------ | ---------- | -| `~/input` | `autoware_perception_msgs::msg::DetectedObjects` | 検出物体 | -| `/vector/map` | `autoware_map_msgs::msg::LaneletMapBin` | 地図データ | +| 名前 | 型 | 説明 | +| ------------------ | -------------------------------------------------- | ------------------------------ | +| `~/input` | `autoware_perception_msgs::msg::DetectedObjects` | 検出されたオブジェクト | +| `/vector/map` | `autoware_map_msgs::msg::LaneletMapBin` | マップデータ | ### 出力 -このドキュメントは、**Autoware** ソフトウェアの Planning モジュールの技術仕様を記述しています。Planning モジュールは、自車のパスを生成し、目標速度を決定する責任を負います。 +**Autoware自律運転ソフトウェアのPlanningモジュール** -### 機能 +**概要** -Planning モジュールは、次のような機能を提供します。 +Planningモジュールは、Autoware自律運転ソフトウェアの主要コンポーネントです。モジュールは、自車位置と周囲環境に関する情報を分析し、安全かつ効率的な経路を生成します。このモジュールは、以下の機能を実行します。 -- 感知データからの動的障害物の検出 -- 自車位置に基づく周囲環境のマップ構築 -- 目標速度とステアリングの計算 +* 地図データを解析し、周囲環境に関する情報を抽出します。 +* 自車位置をリアルタイムで追跡します。 +* 周囲の車両、歩行者、障害物などの他の交通参加者を検出します。 +* 自律走行車に最適な経路を生成します。 +* 障害物を回避するための回避策を計画します。 -### Planning アーキテクチャ +**技術的詳細** -Planning モジュールは、以下のコンポーネントで構成されています。 +Planningモジュールは、以下を含むさまざまな技術に基づいています。 -- **Perception:** ダイナミック障害物を検出します。 -- **Map:** 自車位置に基づいて周囲環境のマップを構築します。 -- **Motion Planning:** 目標速度と軌跡を計算します。 -- **Speed Planning:** 目標速度を決定します。 -- **Decision Making:** 感知データとマップ情報を統合し、パスを生成します。 +* 地図マッチング +* ローカリゼーション +* オブジェクト検出 +* パス計画 +* 'post resampling' -### Planning パイプライン +**インターフェイス** -Planning パイプラインは、以下の手順で構成されています。 +Planningモジュールは、他のAutowareコンポーネントと以下のインターフェイスを使用して通信します。 -1. **Perception 更新:** ダイナミック障害物が検出されます。 -2. **Map 更新:** 自車位置に基づいてマップが構築されます。 -3. **目標速度計算:** 目標速度が決定されます。 -4. **軌跡生成:** 障害物を回避する軌跡が生成されます。 -5. **パス生成:** 軌跡からパスが生成されます。 +* **Map Module:** 地図データ +* **Localization Module:** 自車位置 +* **Perception Module:** オブジェクト検出結果 +* **Control Module:** 経路生成コマンド -| 名前 | タイプ | 説明 | -| ---------- | ----------------------------------------------- | -------- | -| `~/output` | `autoware_perception_msgs::msg::TrackedObjects` | 追跡対象 | +**実装** -## パラメータ +Planningモジュールは、C++とPythonで実装されています。 -### ノードパラメータ +**ドキュメンテーション** -| 名前 | タイプ | デフォルト値 | 説明 | -| ------------------------------------ | ------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------ | -| `publish_rate` | double | 10.0 | 出力メッセージをパブリッシュするレート | -| `world_frame_id` | string | "map" | ワールド座標系のフレームID | -| `enable_delay_compensation` | bool | false | ディレイ補正を有効にするかどうか。`True`に設定すると、出力トピックは`publish_rate`でタイマーによりパブリッシュされます。 | -| `tracking_config_directory` | string | "./config/tracking/" | トラッキング設定ファイルを含むディレクトリ | -| `enable_logging` | bool | false | ロギングを有効にするかどうか | -| `logging_file_path` | string | "/tmp/association_log.json" | ログを書き込むファイルのパス | -| `tracker_lifetime` | double | 1.0 | トラッカーの有効期間(秒) | -| `use_distance_based_noise_filtering` | bool | true | 距離ベースのフィルタリングを使用するかどうか | -| `minimum_range_threshold` | double | 70.0 | フィルタリングの最小距離しきい値(メートル) | -| `use_map_based_noise_filtering` | bool | true | マップベースのフィルタリングを使用するかどうか | -| `max_distance_from_lane` | double | 5.0 | フィルタリングのためのレーンからの最大距離(メートル) | -| `max_angle_diff_from_lane` | double | 0.785398 | フィルタリングのためのレーンからの最大角度差(ラジアン) | -| `max_lateral_velocity` | double | 5.0 | フィルタリングのための最大側方速度(m/s) | -| `can_assign_matrix` | array | | データアソシエーションアルゴリズムで使用される整数配列 | -| `max_dist_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | -| `max_area_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | -| `min_area_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | -| `max_rad_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | -| `min_iou_matrix` | array | | データアソシエーションアルゴリズムで使用されるdouble配列 | +Planningモジュールの詳細なドキュメンテーションは、次の場所でご覧いただけます。 -## トラッカーのパラメータ +[ドキュメンテーションURL] -このパッケージは現在、以下のトラッカーをサポートしています。 +| 名前 | タイプ | 説明 | +|---|---|---| +| `~/output` | `autoware_perception_msgs::msg::TrackedObjects` | 検出されたオブジェクト | + +## パラメーター + +### Node パラメーター + +| 名称 | 型 | デフォルト値 | 説明 | +| ----------------------------------- | ------ | --------------------------- | --------------------------------------------------------------------------------------------------------------- | +| `publish_rate` | double | 10.0 | 出力メッセージをパブリッシュするレート | +| `world_frame_id` | string | "map" | 世界座標系のフレーム ID | +| `enable_delay_compensation` | bool | false | 遅延補正を有効にするかどうか。`true`に設定すると、出力トピックは`publish_rate`でタイマーによってパブリッシュされます。 | +| `tracking_config_directory` | string | "./config/tracking/" | トラッキング設定ファイルを含むディレクトリ | +| `enable_logging` | bool | false | ロギングを有効にするかどうか | +| `logging_file_path` | string | "/tmp/association_log.json" | ログを書き込むファイルへのパス | +| `tracker_lifetime` | double | 1.0 | トラッカーの有効期間(秒) | +| `use_distance_based_noise_filtering` | bool | true | 距離ベースのフィルタリングを使用するかどうか | +| `minimum_range_threshold` | double | 70.0 | フィルタリングの最小距離しきい値(メートル) | +| `use_map_based_noise_filtering` | bool | true | マップベースのフィルタリングを使用するかどうか | +| `max_distance_from_lane` | double | 5.0 | フィルタリングのレーンからの最大距離(メートル) | +| `max_angle_diff_from_lane` | double | 0.785398 | フィルタリングのレーンからの最大角度差(ラジアン) | +| `max_lateral_velocity` | double | 5.0 | フィルタリングの最大横方向速度(m/s) | +| `can_assign_matrix` | array | | データ関連付けアルゴリズムで使用される整数の配列 | +| `max_dist_matrix` | array | | データ関連付けアルゴリズムで使用される倍精度の配列 | +| `max_area_matrix` | array | | データ関連付けアルゴリズムで使用される倍精度の配列 | +| `min_area_matrix` | array | | データ関連付けアルゴリズムで使用される倍精度の配列 | +| `max_rad_matrix` | array | | データ関連付けアルゴリズムで使用される倍精度の配列 | +| `min_iou_matrix` | array | | データ関連付けアルゴリズムで使用される倍精度の配列 | + +[models.md](models.md) で詳細をご覧ください。 + +### トラッカーパラメータ + +現在、このパッケージでは以下のトラッカーをサポートしています。 - `linear_motion_tracker` - `constant_turn_rate_motion_tracker` -それぞれのトラッカーの初期設定は [./config/tracking/](./config/tracking/) で定義されており、[models.md](models.md) に記載されています。 +各トラッカーのデフォルト設定は [./config/tracking/](./config/tracking/) で定義され、[models.md](models.md) で説明しています。 + +## 仮定/既知の制限 -## 仮定と既知の限界 + - +## (オプション) エラーの検出と処理 -## (省略可) エラーの検出と処理 + - +## (オプション) パフォーマンスの特性評価 -## (省略可) パフォーマンスの評価 + - +## (オプション) リファレンス/外部リンク -## (省略可) 参照/外部リンク + - +## (オプション) 将来の拡張/実装されていない部分 -## (省略可) 将来の拡張機能/未実装部分 + - diff --git a/perception/autoware_radar_tracks_msgs_converter/README.md b/perception/autoware_radar_tracks_msgs_converter/README.md index 413e0f85910d1..ba7a7adf630f5 100644 --- a/perception/autoware_radar_tracks_msgs_converter/README.md +++ b/perception/autoware_radar_tracks_msgs_converter/README.md @@ -1,88 +1,86 @@ -## radar_tracks_msgs_converter +# radar_tracks_msgs_converter -このパッケージは、[radar_msgs/msg/RadarTracks](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTracks.msg) から [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.msg) および [autoware_perception_msgs/msg/TrackedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/TrackedObject.msg) へと変換します。 +このパッケージは、[radar_msgs/msg/RadarTracks](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTracks.msg) から [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.msg) および [autoware_perception_msgs/msg/TrackedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/TrackedObject.msg) に変換します。 - 計算コストは O(n) です。 - - n: レーダーオブジェクトの個数 + - n: レーダーオブジェクトの数 ## 設計 ### 背景 -Autoware はレーダーオブジェクト入力データとして [radar_msgs/msg/RadarTracks.msg](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTracks.msg) を使用します。 -レーダーオブジェクトデータを Autoware perception モジュールで簡単に使用するために、`radar_tracks_msgs_converter` はメッセージタイプを `radar_msgs/msg/RadarTracks.msg` から `autoware_perception_msgs/msg/DetectedObject` へと変換します。 -さらに、多くの検出モジュールは `base_link` フレームをベースとしていると想定しているため、`radar_tracks_msgs_converter` は `frame_id` を変換する機能を提供します。 +Autoware では、レーダーオブジェクトの入力データとして [radar_msgs/msg/RadarTracks.msg](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTracks.msg) を使用しています。 +レーダーオブジェクトデータを Autoware の認識モジュールで簡単に使用できるようにするために、`radar_tracks_msgs_converter` はメッセージタイプを `radar_msgs/msg/RadarTracks.msg` から `autoware_perception_msgs/msg/DetectedObject` に変換します。 +さらに、多くの検出モジュールが base_link フレームを前提としているため、`radar_tracks_msgs_converter` はフレーム ID を変換する機能を提供します。 ### 注意 -`Radar_tracks_msgs_converter` はラベルを `radar_msgs/msg/RadarTrack.msg` から Autoware ラベルへと変換します。 +`Radar_tracks_msgs_converter` は、`radar_msgs/msg/RadarTrack.msg` のラベルを Autoware ラベルに変換します。 ラベル ID は以下のように定義されています。 | | レーダートラック | Autoware | -| ---------- | ---------------- | -------- | -| UNKNOWN | 32000 | 0 | -| CAR | 32001 | 1 | -| TRUCK | 32002 | 2 | -| BUS | 32003 | 3 | -| TRAILER | 32004 | 4 | -| MOTORCYCLE | 32005 | 5 | -| BICYCLE | 32006 | 6 | -| PEDESTRIAN | 32007 | 7 | +| ---------- | ---------- | -------- | +| UNKNOWN | 32000 | 0 | +| CAR | 32001 | 1 | +| TRUCK | 32002 | 2 | +| BUS | 32003 | 3 | +| TRAILER | 32004 | 4 | +| MOTORCYCLE | 32005 | 5 | +| BICYCLE | 32006 | 6 | +| PEDESTRIAN | 32007 | 7 | -追加のベンダー固有分類は、32000 から [radar_msgs/msg/RadarTrack.msg](https://github.com/ros-perception/radar_msgs/blob/ros2/msg/RadarTrack.msg) で許可されています。 -Autoware オブジェクト ラベルは [ObjectClassification](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/ObjectClassification.msg) で定義されています。 +### インターフェイス -## インターフェイス - -### 入力 +#### 入力 - `~/input/radar_objects` (`radar_msgs/msg/RadarTracks.msg`) - - レーダー入力トピック + - 入力レーダーのトピック - `~/input/odometry` (`nav_msgs/msg/Odometry.msg`) - - 自車オドメトリー トピック + - 自車位置トピック -### 出力 +#### 出力 - `~/output/radar_detected_objects` (`autoware_perception_msgs/msg/DetectedObject.idl`) - - Autoware メッセージに変換された DetectedObject トピック。 - - レーダーセンサーフュージョン検出とレーダー検出に使用されます。 + - DetectedObject トピックを Autoware メッセージに変換したもの。 + - レーダーセンサーフュージョン検出とレーダー検出で使用されます。 - `~/output/radar_tracked_objects` (`autoware_perception_msgs/msg/TrackedObject.idl`) - - Autoware メッセージに変換された TrackedObject トピック。 - - 追跡レイヤーのセンサーフュージョンに使用されます。 + - TrackedObject トピックを Autoware メッセージに変換したもの。 + - トラッキングレイヤーセンサーフュージョンで使用されます。 -### パラメーター +#### パラメータ -#### パラメーター概要 +#### パラメータの概要 {{ json_to_markdown("perception/autoware_radar_tracks_msgs_converter/schema/radar_tracks_msgs_converter.schema.json") }} -#### パラメーターの説明 +#### パラメータの説明 -- `update_rate_hz` (倍) [hz] - - デフォルト パラメーターは 20.0 です。 +- `update_rate_hz` (double) [hz] + - デフォルトパラメータは 20.0。 -このパラメーターは `onTimer` 関数の更新レートです。 -このパラメーターは入力トピックのフレームレートと同じにする必要があります。 +このパラメータは `onTimer` 関数の更新レートです。 +このパラメータは、入力トピックのフレームレートと同じにする必要があります。 -- `new_frame_id` (文字列) - - デフォルト パラメーターは "base_link" です。 +- `new_frame_id` (string) + - デフォルトパラメータは "base_link"。 -このパラメーターは出力トピックのヘッダー `frame_id` です。 +このパラメータは、出力トピックのヘッダー `frame_id` です。 -- `use_twist_compensation` (boolean) - - デフォルト パラメーターは "true" です。 +- `use_twist_compensation` (bool) + - デフォルトパラメータは "true"。 -このパラメーターは自車のツイストの直線運動に対する補正を使用するフラグです。 -パラメーターが `true` の場合、出力对象的トピックのツイストは自車の直線運動によって補正されます。 +このパラメータは、自車位置のひずみに対する補正を使用するかどうかを示すフラグです。 +このパラメータが true の場合、出力オブジェクトのトピックのひずみは、自車位置の直線運動によって補正されます。 -- `use_twist_yaw_compensation` (boolean) - - デフォルト パラメーターは "false" です。 +- `use_twist_yaw_compensation` (bool) + - デフォルトパラメータは "false"。 -このパラメーターは自車のツイストのヨー回転に対する補正を使用するフラグです。 -パラメーターが `true` の場合、自車のヨー運動もエゴモーション補正の対象となります。 +このパラメータは、自車位置のひずみに対する補正を偏揺運動に使用するかどうかのフラグです。 +このパラメータが true の場合、自車運動補正は自車位置の偏揺運動も考慮します。 - `static_object_speed_threshold` (float) [m/s] - - デフォルトのパラメーターは 1.0 です。 + - デフォルトパラメータは 1.0。 + +このパラメータは、フラグ `is_stationary` を決定するためのしきい値です。 +速度がこのパラメータよりも低い場合、DetectedObject のフラグ `is_stationary` は `true` に設定され、静止オブジェクトとして扱われます。 -このパラメーターはフラグ `is_stationary` を決定するしきい値です。 -速度がこのパラメーターよりも低い場合、DetectedObject のフラグ `is_stationary` は `true` に設定され、静的オブジェクトとして扱われます。 diff --git a/perception/autoware_shape_estimation/README.md b/perception/autoware_shape_estimation/README.md index 922ff29c18b24..5ab8a4a7e0b6e 100644 --- a/perception/autoware_shape_estimation/README.md +++ b/perception/autoware_shape_estimation/README.md @@ -2,7 +2,7 @@ ## 目的 -このノードは、ポイントクラスタがラベルに従ってフィットする、洗練されたオブジェクトシェイプ(バウンディングボックス、円柱、凸包)を計算します。 +このノードは、ラベルに従ってポイントクラウドクラスタが合う洗練されたオブジェクト形状(バウンディングボックス、円筒、凸包)を計算します。 ## 内部動作/アルゴリズム @@ -10,10 +10,10 @@ - バウンディングボックス - - L字シェイプフィッティング: 詳細については以下の文献を参照してください - - MLベースのシェイプフィッティング: 詳細については、以下のMLベースのシェイプフィッティングの実装のセクションを参照してください + - L字型フィッティング:詳細は以下のリファレンスを参照してください + - MLベースの形状フィッティング:詳細は以下のMLベースの形状フィッティング実装セクションを参照してください -- 円柱 +- 円筒 `cv::minEnclosingCircle` @@ -25,97 +25,70 @@ ### 入力 -| 名称 | タイプ | 説明 | -| ------- | -------------------------------------------------------- | ---------------------------------------- | -| `input` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | ラベル付きクラスタによる検出オブジェクト | +| 名称 | タイプ | 説明 | +| ------- | -------------------------------------------------------- | ------------------------------------- | +| `input` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | ラベル済みクラスタを持つ検出对象 | ### 出力 +Autowareでは、Planningコンポーネントが、センサー入力から生成された周囲環境の認識結果を使用して、車両の経路と速度プロフィールを決定します。Planningコンポーネントは、次のサブモジュールで構成されます。 -**自動運転ソフトウェアのドキュメント** +- **Motion Planner:**障害物を避けながら、現在の位置から目標地点への経路を生成します。 +- **Behavior Planner:**経路に沿って車両の速度と加速度を決定します。 +- **Trajectory Generator:**モーションプランとビヘイビアプランの出力を基に、車両の軌跡**post resampling**を生成します。 -**要約** - -このドキュメントでは、Autowareの自己位置推定コンポーネントの計画モジュールについての詳細な技術情報を提供します。このモジュールは、自己位置推定Planningのロジックを担当し、Planningモジュールによって生成された軌道計画に基づいて、車両の運動を制御します。 - -**自己位置推定 Planningモジュール** - -自己位置推定Planningモジュールは、次のタスクを実行します。 - -- 自車位置の追従 -- 軌道計画のpost resampling -- 計画された軌道の修正 -- 計画された軌道の速度逸脱量と加速度逸脱量の計算 - -**自車位置追従** - -自車位置追従サブモジュールは、センサーデータを使用して自己位置を推定し、追従します。このサブモジュールは、Extended Kalman Filter(EKF)を使用して、GPS、IMU、車輪速度などのセンサーデータのフュージョンを行います。 - -**軌道計画のpost resampling** - -軌道計画のpost resamplingサブモジュールは、Planningモジュールから生成された軌道計画に再サンプリングを行います。これにより、軌道計画が車両の現在の運動状態に適合します。 - -**計画された軌道の修正** - -計画された軌道の修正サブモジュールは、障害物やその他の環境要因に応じて、計画された軌道を修正します。このサブモジュールは、制約条件ベースの最適化を使用して、安全で効率的な軌道を作成します。 - -**計画された軌道の速度逸脱量と加速度逸脱量の計算** - -計画された軌道の速度逸脱量と加速度逸脱量の計算サブモジュールは、計画された軌道に対して、現在の車両の速度と加速度を比較して、逸脱量を計算します。これらの逸脱量は、車両の制御システムにフィードバックされ、車両の動作を計画された軌道に近づけるために使用されます。 - -**結論** - -Autowareの自己位置推定Planningモジュールは、自己位置の追従、軌道計画のpost resampling、計画された軌道の修正、計画された軌道の速度逸脱量と加速度逸脱量の計算を含む、自己位置推定Planningの重要なコンポーネントです。このモジュールは、車両の安全で効率的な動作を確実にします。 - -| 名前 | タイプ | 説明 | -| ---------------- | ------------------------------------------------ | ------------------------------------------ | -| `output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 洗練された形状を持つ検出されたオブジェクト | +| 名称 | タイプ | 説明 | +| ---------------- | --------------------------------------------------------- | ------------------------------------- | +| `output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | 洗練された形状を備えた検出された対象 | ## パラメータ {{ json_to_markdown("perception/autoware_shape_estimation/schema/shape_estimation.schema.json") }} -## MLベースの形状実装 +## MLベース形状実装 -このモデルは、ポイントクラウドと物体ラベル(カメラの検出/Apolloインスタンスセグメンテーションによって提供)を入力として、物体の3Dバウンディングボックスを出力します。 +モデルはポイントクラウドとオブジェクトラベル(カメラ検出/Apolloインスタンスセグメンテーションによって提供される)を入力として、オブジェクトの3Dバウンディングボックスを出力します。 -MLベースの形状推定アルゴリズムは、バックボーンとしてPointNetモデルを使用して、物体の3Dバウンディングボックスを推定します。このモデルは、車両ラベル(車、トラック、バス、トレーラー)を持つNuScenesデータセットでトレーニングされています。 +MLベース形状推定アルゴリズムは、PointNetモデルをバックボーンとして使用してオブジェクトの3Dバウンディングボックスを推定します。モデルは、ヌシーンズデータセットの車両ラベル(車、トラック、バス、トレーラー)でトレーニングされます。 -実装されたモデルは、入力ポイントクラウドを正規空間に変換するためにSTN(空間変換ネットワーク)と結合され、PointNetを使用して物体の3Dバウンディングボックスを予測します。*RGB-Dデータからの3D物体検出用のFrustum PointNets*論文のバウンディングボックス推定部分が参考として使用されました。 +実装されたモデルは、入力ポイントクラウドを正規空間に変換するためのSTN(空間変換ネットワーク)と、オブジェクトの3Dバウンディングボックスを予測するためのPointNetと連結されています。バウンディングボックス推定の部分は「RGB-Dデータからの3Dオブジェクト検出のためのFrustum PointNets」論文を参考にしています。 -このモデルは、各オブジェクトに対して以下の出力を予測します。 +モデルは、各オブジェクトに対して次の出力を予測します。 - オブジェクト中心のx、y、z座標 -- オブジェクトの進行方向角の分類結果(角度分類には12のビンを使用 - 各ビンは30度) -- オブジェクトの進行方向角の残差 +- オブジェクトの進行方向角度の分類結果(角度の分類に12ビンを使用 - それぞれ30度) +- オブジェクトの進行方向角度の残差 - オブジェクトサイズの分類結果 - オブジェクトサイズの残差 -### MLベースの形状推定モデルのトレーニング +### MLベース形状推定モデルのトレーニング -モデルをトレーニングするには、正解の3Dバウンディングボックスアノテーションが必要です。3D物体検出アルゴリズムのトレーニングにmmdetection3dリポジトリを使用する場合、これらの正解アノテーションは保存され、データ拡張に使用されます。これらのアノテーションは、形状推定モデルを効果的にトレーニングするための不可欠なデータセットとして使用されます。 +モデルをトレーニングするには、3Dバウンディングボックスのグラウンドトゥルースアノテーションが必要です。mmdetection3dリポジトリを使用して3Dオブジェクト検出アルゴリズムをトレーニングする場合、これらのグラウンドトゥルースアノテーションは保存され、データ拡張に使用されます。これらのアノテーションは、形状推定モデルを効果的にトレーニングするための不可欠なデータセットとして使用されます。 ### データセットの準備 -#### MMDetection3Dの必須コンポーネントをインストールする +#### MMDetection3Dの前提条件のインストール + +**ステップ1.** [公式サイト](https://mmpretrain.readthedocs.io/en/latest/get_started.html)からMinicondaをダウンロードしてインストールします。 -**ステップ 1.** [公式ウェブサイト](https://mmpretrain.readthedocs.io/en/latest/get_started.html)からMinicondaをダウンロードしてインストールします。 +**ステップ2.** conda仮想環境を作成し、アクティベートします。 -**ステップ 2.** conda仮想環境を作成してアクティブにする ```bash conda create --name train-shape-estimation python=3.8 -y conda activate train-shape-estimation ``` -**手順 3.** PyTorch をインストールする +**ステップ 3.** PyTorch をインストール + ```bash conda install pytorch torchvision -c pytorch ``` -#### mmdetection3d のインストール +#### mmdetection3dのインストール + +**手順1.** MIMを使用してMMEngine、MMCV、MMDetectionをインストールする -**手順 1.** MIM を使用して MMEngine、MMCV、および MMDetection をインストールする ```bash pip install -U openmim @@ -124,7 +97,8 @@ mim install 'mmcv>=2.0.0rc4' mim install 'mmdet>=3.0.0rc5, <3.3.0' ``` -**ステップ2.** AutowareのMMDetection3Dフォークをインストールする +**ステップ 2.** Autoware の MMDetection3D フォークをインストール + ```bash git clone https://github.com/autowarefoundation/mmdetection3d.git @@ -132,32 +106,38 @@ cd mmdetection3d pip install -v -e . ``` -#### NuScenesデータセットの準備 +#### NuScenes データセットの準備 + +**ステップ 1.** [公式ウェブサイト](https://www.nuscenes.org/download) から NuScenes データセットをダウンロードし、任意のフォルダに解凍します。 -**ステップ 1**. [公式ウェブサイト](https://www.nuscenes.org/download)からNuScenesデータセットをダウンロードして、選択したフォルダーに展開します。 +**注意:** NuScenes データセットは大きく、大量のディスク容量が必要です。追加する前に、使用可能な記憶容量が十分にあることを確認してください。 -**注意:** NuScenesデータセットは大きく、かなりのディスク容量が必要です。続ける前に十分なストレージがあることを確認してください。 +**ステップ 2.** データセットフォルダへのシンボリックリンクを作成する -**ステップ 2**. データセットフォルダーへのシンボリックリンクを作成します ```bash ln -s /path/to/nuscenes/dataset/ /path/to/mmdetection3d/data/nuscenes/ ``` -**ステップ3.** 次のコマンドを実行してNuScenesデータを準備: +**ステップ3.** 次を実行して、**NuScenes**データを準備します: + ```bash cd mmdetection3d python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --only-gt-database True ``` -#### クローニング バウンディング ボックス エスティメータ モデル +#### クローン バウンディング ボックス エスティメーター モデル + + + ```bash git clone https://github.com/autowarefoundation/bbox_estimator.git ``` -#### データセットをトレーニングセットと検証セットに分割する +#### データセットをトレーニングと検証のセットに分割する + ```bash @@ -165,9 +145,10 @@ cd bbox_estimator python3 utils/split_dbinfos.py --dataset_path /path/to/mmdetection3d/data/nuscenes --classes 'car' 'truck' 'bus' 'trailer' --train_ratio 0.8 ``` -### モデルの学習と展開 +### モデルのトレーニングと展開 + +#### モデルのトレーニング -#### モデルの学習 ```bash # Detailed training options can be found in the training script @@ -175,50 +156,24 @@ python3 utils/split_dbinfos.py --dataset_path /path/to/mmdetection3d/data/nuscen python3 train.py --dataset_path /path/to/mmdetection3d/data/nuscenes ``` -#### モデルの展開 - -Autoware.Autoのパイプラインの `planning` モジュールでは、予測モデルを展開して使用します。このモデルは、他のモーションプランニングモジュールへの入力として、走行中の障害物の軌跡を予測します。 - -この予測モデルには、さまざまな手法があります。代表的な手法としては、カルマンフィルタ、自己回帰和分移動平均(ARIMA)、隠れマルコフモデル(HMM)などがあります。 - -使用する手法の選択は、予測タスクの特性によって異なります。たとえば、交通流予測にはARIMAが適していますが、歩行者の振る舞いを予測するにはHMMがより適しています。 - -この予測モデルは、トレーニングデータセットを使用してトレーニングされます。このデータセットには、障害物の位置、速度、加速度に関する情報が含まれます。トレーニング後、モデルは新しい入力に対して障害物の軌跡を予測するために使用されます。 - -予測された軌跡は、他のモーションプランニングモジュールによって、衝突を防ぐための安全な経路を計画するために使用されます。 - -### モデルの評価 - -予測モデルの性能は、次のような指標を使用して評価できます。 +#### モデル展開 -- **平均絶対誤差(MAE)**: 障害物軌跡の予測値と実際の値との差の平均 -- **平均二乗誤差(MSE)**: 予測値と実際の値との二乗差の平均 -- **相関関係**: 予測値と実際の値との間の相関関係 - -### モデルの展開 - -トレーニングされた予測モデルは、Autoware.Autoパイプラインの `planning` モジュールに展開できます。これは、次の手順で行えます。 - -1. モデルをYAML形式で保存します。 -2. YAMLファイルをパイプラインに読み込みます。 -3. パイプラインを起動します。 - -展開後、予測モデルはリアルタイムで障害物の軌跡を予測するために使用されます。この情報は、他のモーションプランニングモジュールによって安全な経路を計画するために使用されます。 ```bash # Convert the trained model to ONNX format python3 onnx_converter.py --weight_path /path/to/best_checkpoint.pth --output_path /path/to/output.onnx ``` -`model_path`パラメータにONNXモデルの出力を`shape_estimation`ノードの起動ファイルで指定します。 +`shape_estimation` ノード起動ファイルの `model_path` パラメータに ONNX モデルの出力パスを指定してください。 -## 想定/既知の制限 +## 想定事項/既知の制限 未定 -## 参考資料/外部リンク +## 用語/外部リンク + +論文に基づいた L 形フィッティングの実装: -論文内のL字型フィッティングの実装: ```bibtex @conference{Zhang-2017-26536, @@ -231,50 +186,53 @@ keywords = {autonomous driving, laser scanner, perception, segmentation}, } ``` -**RGB-Dデータからの3D物体検出のためのFrustum PointNets** +**RGB-Dデータからの3Dオブジェクト検出のためのFrustum PointNets** -## はじめに - -このドキュメントでは、RGB-Dデータから3D物体検出を行うためのFrustum PointNets手法について説明します。具体的には、次のようなトピックを扱います。 - -- Frustum PointNetsの手法の概要 -- AutowareにおけるFrustum PointNetsの統合 -- パフォーマンスの評価 +``` +## Autoware.Autoで Frustum PointNets を使用して 3D オブジェクトを検出する -## 手法 +### 概要 -Frustum PointNetsは、RGB-Dデータから3D物体を検出するための2段階の手法です。 +このドキュメントでは、Autoware.Auto で Frustum PointNets を使用して 3D オブジェクトを検出する方法について説明します。Frustum PointNets は、点群データから 3D オブジェクトを検出するための最先端の手法です。 -### 第1段階:フラストム生成 +### アーキテクチャ -最初の段階では、RGB入力から3Dフラストムを生成します。フラストムとは、自車位置から見通せる空間の錐台形の近似です。フラストムは、点群データの3D空間内の空間的制約を提供します。 +Frustum PointNets アーキテクチャは、以下のコンポーネントで構成されています。 -### 第2段階:3D物体検出 +- **PointNet++ バックボーン:** 入力点群を処理し、特徴量を抽出します。 +- **フラストム プロジェクション:** 点群を前方カメラの視野 (`フラストム`) に投影します。 +- **フラストム ポイントネット:** 投影された点群から 3D オブジェクト候補を検出します。 +- **後処理:** 非極大値抑制 (`post resampling`) を使用して、重複する候補を削除します。 -第2段階では、生成されたフラストム内の点群データを使用して、3D物体検出を行います。Frustum PointNetsアーキテクチャは、3D空間内の点群データを処理するように設計されており、物体のサイズ、形状、向きを推定できます。 +### パイプライン -## Autowareへの統合 +3D オブジェクト検出パイプラインは、次のステップで構成されています。 -Frustum PointNets手法は、Autowareフレームワークに統合されています。統合されたモジュールは、次のような機能を提供します。 +1. **点群の前処理:** 点群をノイズ除去および正規化します。 +2. **フラストム生成:** 前方カメラの視点からフラストムを生成します。 +3. **Frustum PointNets:** フラストムに Frustum PointNets を適用して、3D オブジェクト候補を検出します。 +4. **後処理:** 重複する候補を削除します。 +5. **3D バウンディングボックスの生成:** 検出されたオブジェクト候補に 3D バウンディングボックスを割り当てます。 -- RGB-Dデータからのフラストム生成 -- Frustum PointNetsネットワークによる3D物体検出 -- 検出された物体の3Dバウンディングボックスの出力 +### パラメータ -## パフォーマンス +Frustum PointNets のパラメータは、`config/perception/detection/frustum_pointnets.yaml` ファイルで設定できます。重要なパラメータを以下に示します。 -Autowareに統合されたFrustum PointNetsモジュールの性能は、大規模なデータセットで評価されています。評価結果は、この手法がRGB-Dデータからの3D物体検出において、高い精度と効率性を示していることを示しています。 +- **num_classes:** 検出するオブジェクトクラスの数 +- **num_proposal:** 生成するオブジェクト候補の最大数 +- **voxel_size:** ポイントクラウドのボクセル化に使用されるサイズ +- **post_resampling_NMS:** 非極大値抑制の閾値 -## Planningへの影響 +### 結果 -Frustum PointNetsモジュールは、Planningコンポーネントに次の影響を与えます。 +Frustum PointNets は、Autoware.Auto で 3D オブジェクトを検出するための効率的かつ正確な手法です。この手法を使用すると、高精度な 3D バウンディングボックスを生成できます。 -- **障害物検出の向上:**より正確な3D物体検出により、Planningコンポーネントは周辺環境をより正確に認識できます。 -- **軌道の改善:**より正確な障害物検出により、Planningコンポーネントは、衝突を回避しながら、より効率的な軌道を計算できます。 +### その他のリソース -## 結論 +- [Frustum PointNets 論文](https://arxiv.org/abs/1704.06056) +- [Autoware.Auto プルリクエスト](https://github.com/autowarefoundation/autoware.auto/pull/2434) +``` -Frustum PointNetsは、RGB-Dデータからの3D物体検出に高い精度を実現する強力な手法です。Autowareフレームワークに統合することにより、Planningコンポーネントの障害物検出と軌道計算の能力を向上させることができます。 ````bibtex @inproceedings{qi2018frustum, @@ -287,3 +245,4 @@ year={2018} ```` + diff --git a/perception/autoware_simple_object_merger/README.md b/perception/autoware_simple_object_merger/README.md index 980562b0bc082..cc33d92b9a0c4 100644 --- a/perception/autoware_simple_object_merger/README.md +++ b/perception/autoware_simple_object_merger/README.md @@ -1,61 +1,63 @@ -## autoware_simple_object_merger +# autoware_simple_object_merger -このパッケージは、低計算コストで複数のトピックの [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.msg) をマージすることができます。 +このパッケージは、[autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.msg) の複数のトピックを、低計算コストでマージできます。 ## 設計 ### 背景 -[Object_merger](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/object_merger) は主に DetectedObjects のマージ処理に使用されます。`Object_merger` には 2 つの特性があります。1 つ目は、`object_merger` はハンガリアンアルゴリズムなどのデータ関連付けアルゴリズムを使用してマッチングの問題を解決しますが、計算コストが必要になります。2 つ目は、`object_merger` は 2 つだけの DetectedObjects トピックを処理でき、1 つのノードで 2 つを超えるトピックを処理できません。現時点で 6 つの DetectedObjects トピックをマージするには、6 つの `object_merger` ノードが必要になります。 +[Object_merger](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/object_merger) は主に DetectedObjects マージ処理に使用されます。`Object_merger` には 2 つの特性があります。第 1 に、`object_merger` はハンガリー法などのデータアソシエーションアルゴリズムを使用してマッチング問題を解決しますが、計算コストが必要です。第 2 に、`object_merger` は 2 つの DetectedObjects トピックのみを処理でき、1 つのノードで 2 つ以上のトピックを処理することはできません。現在、6 つの DetectedObjects トピックをマージするには、6 つの `object_merger` ノードが必要です。 -したがって、`autoware_simple_object_merger` は複数の DetectedObjects を低計算コストでマージすることを目的としています。このパッケージは、計算コストを削減するためにデータ関連付けアルゴリズムを使用せず、大量のノードを立ち上げることなく、1 つのノードで 2 つを超えるトピックを処理できます。 +そのため、`autoware_simple_object_merger` は、複数の DetectedObjects を低計算コストでマージすることを目的としています。 +このパッケージはデータアソシエーションアルゴリズムを使用しないため、計算コストを削減し、多数のノードが起動するのを防ぐために、1 つのノードで 2 つ以上のトピックを処理できます。 ### ユースケース - 複数のレーダー検出 -`autoware_simple_object_merger` は複数のレーダー検出に使用できます。複数のレーダートピックから 1 つのトピックにそれらをまとめることで、レーダーを使用した遠距離検出のパイプラインを簡略化できます。 +`autoware_simple_object_merger` は、複数のレーダー検出に使用できます。複数のレーダーのトピックから 1 つのトピックにまとめることで、レーダーによる遠距離検出のパイプラインを簡略化できます。 -### 制約事項 +### 制限事項 -- センサーデータのドロップと遅延 +- センサーデータの欠損と遅延 -初期化時にすべてのトピックデータが受信されるまで、マージされたオブジェクトはパブリッシュされません。さらに、センサーデータのドロップと遅延に対処するために、このパッケージにはタイムアウトを判断するパラメータがあります。トピックのデータの最新時刻がタイムアウトパラメータよりも古い場合、出力オブジェクトにマージされません。現時点では、このパッケージの仕様上、最初はすべてのトピックデータを受信し、その後データがドロップした場合、タイムアウトと判断されたオブジェクトを含まないマージされたオブジェクトがパブリッシュされます。このタイムアウトパラメータは、センサーの周期時間によって決定する必要があります。 +マージされたオブジェクトは、初期化時にすべてのトピックデータが受信されるまで発行されません。さらに、センサーデータの欠損と遅延に対処するために、このパッケージにはタイムアウトを判定するパラメータがあります。トピックのデータの最新の時間が、タイムアウトパラメータより古くなると、出力オブジェクトとマージされません。現時点では、このパッケージの仕様では、すべてのトピックデータが最初に受信され、その後データが欠損し、タイムアウトとして判断されたオブジェクトのないマージされたオブジェクトが発行されます。このタイムアウトパラメータは、センサーサイクル時間によって決定する必要があります。 - 後処理 -このパッケージにはマッチング処理がないため、入力オブジェクトによってはオブジェクトが重複します。そのため、出力オブジェクトは後処理を使用する場合にのみ使用できます。現時点で、[クラスタ処理](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_object_clustering) を後処理として使用できます。 +このパッケージにはマッチング処理がないため、入力オブジェクトによっては重複するオブジェクトが発生します。そのため、後処理を使用する場合にのみ出力オブジェクトを使用できます。現時点では、[クラスタリング処理](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_object_clustering) を後処理として使用できます。 ## インターフェイス ### 入力 -入力トピックは `input_topics` (List[string]) のパラメータによって定義されます。入力トピックの型は `std::vector` です。 +入力トピックは、`input_topics`(List[文字列])のパラメータによって定義されます。入力トピックのタイプは `std::vector` です。 ### 出力 -- `~/output/objects` (`autoware_perception_msgs/msg/DetectedObjects.msg`) +- `~/output/objects`(`autoware_perception_msgs/msg/DetectedObjects.msg`) - 入力トピックから結合されたマージされたオブジェクト。 ### パラメータ -- `update_rate_hz` (double) [hz] +- `update_rate_hz`(double)[Hz] - デフォルトパラメータ: 20.0 このパラメータは `onTimer` 関数の更新レートです。 -このパラメータは、入力トピックのフレームレートと同じにする必要があります。 +このパラメータは入力トピックのフレームレートと同じにする必要があります。 -- `new_frame_id` (string) +- `new_frame_id`(文字列) - デフォルトパラメータ: "base_link" -このパラメータは、出力トピックのヘッダーの frame_id です。 -出力トピックが Planningモジュールに使用される場合は、"base_link" に設定する必要があります。 +このパラメータは、出力トピックのヘッダーフレーム ID です。 +出力トピックを Perception モジュールに使用する場合、"base_link" に設定する必要があります。 -- `timeout_threshold` (double) [秒] +- `timeout_threshold`(double)[s] - デフォルトパラメータ: 0.1 -このパラメータは、タイムアウト判定のしきい値です。 -`input_topics` の最初のトピックと入力トピックの時差がこのパラメータを超えると、トピックのオブジェクトは出力オブジェクトにマージされません。 +このパラメータは、タイムアウトの判断のためのしきい値です。 +`input_topics` の最初のトピックと入力トピックとの時間差がこのパラメータを超過すると、トピックのオブジェクトは出力オブジェクトにマージされません。 + ```cpp for (size_t i = 0; i < input_topic_size; i++) { @@ -67,11 +69,12 @@ } ``` -- `input_topics`(リスト[文字列]) - - デフォルトパラメータ: "[]" +- `input_topics` (List[string]) + - 初期設定パラメータ: "[]" + +このパラメータは入力トピックの名前です。 +たとえば、このパッケージがレーダーオブジェクトに使用されるとき、 -このパラメータは、入力トピックの名前です。 -たとえば、このパッケージをレーダーオブジェクトに使用する場合、 ```yaml input_topics: @@ -85,5 +88,6 @@ input_topics: ] ``` -config yaml ファイル内で設定できます。 -現時点では、時間差は `input_topics` の最初のトピックと入力トピック間のヘッダー時間で計算されるため、検出する最も重要なオブジェクトは `input_topics` リストの最初の部分に設定する必要があります。 +config yaml ファイルで設定できます。 +現時点では、時間差は `input_topics` の最初のトピックと入力トピック間のヘッダ時刻によって計算されるため、検出する最も重要なオブジェクトは `input_topics` リストの最初に設定する必要があります。 + diff --git a/perception/autoware_tensorrt_classifier/README.md b/perception/autoware_tensorrt_classifier/README.md index 48c3065cb57ae..a54c5f36809f1 100644 --- a/perception/autoware_tensorrt_classifier/README.md +++ b/perception/autoware_tensorrt_classifier/README.md @@ -1,5 +1,6 @@ -# 高効率動的バッチ推論のための TensorRT Classification +## TensorRT分類:効率的な動的バッチ処理推論用 ## 目的 -このパッケージは TensorRT を利用して任意のカテゴリの分類を実施し、高効率・高速推論を実現します。具体的には、組み込みプラットフォームの効率的な推論のための前処理を最適化します。さらに、GPU と DLA での動的バッチ推論をサポートします。 +このパッケージは、TensorRTを使用して任意の分類を行い、効率的で高速な推論を実行します。特に、組み込みプラットフォームでの効率的な推論用に前処理を最適化します。さらに、GPUとDLAでの動的バッチ処理推論に対応しています。 + diff --git a/perception/autoware_tensorrt_common/README.md b/perception/autoware_tensorrt_common/README.md index 1608ec4370b49..6dc372512b8bb 100644 --- a/perception/autoware_tensorrt_common/README.md +++ b/perception/autoware_tensorrt_common/README.md @@ -2,5 +2,6 @@ ## 目的 -このパッケージには、TensorRT に関連する共通関数のライブラリが含まれています。 -このパッケージには、TensorRT エンジンの処理や、量子化に使用される較正アルゴリズムの関数が含まれます。 +このパッケージはTensorRTに関連する共通関数のライブラリを含みます。 +このパッケージには、TensorRTエンジンおよび量子化に使用されるキャリブレーションアルゴリズムを処理する関数が含まれます。 + diff --git a/perception/autoware_tensorrt_yolox/README.md b/perception/autoware_tensorrt_yolox/README.md index 04f6affb0df2b..a0f1bb59e5419 100644 --- a/perception/autoware_tensorrt_yolox/README.md +++ b/perception/autoware_tensorrt_yolox/README.md @@ -2,143 +2,153 @@ ## 目的 -このパッケージは、[YOLOX](https://github.com/Megvii-BaseDetection/YOLOX) モデルに基づく、マルチヘッダー構造で、車、トラック、自転車、歩行者などの対象のオブジェクトを検出し、車、トラック、バス、歩行者、建屋、植生、道路、歩道などの対象のオブジェクトをセグメントします。 +このパッケージは、[YOLOX](https://github.com/Megvii-BaseDetection/YOLOX)モデルを利用して、画像上の標的物体(車、トラック、自転車、歩行者など)を検出し、車、トラック、バス、歩行者、建物、植物、道路、歩道などの標的物体をセグメント化します。 -## 内部動作 / アルゴリズム +## 内部の仕組み/アルゴリズム -### 引用 +### 要約 -鄭 Ge、劉 鬆涛、王 鋒、李 則明、孫 健、「YOLOX: 2021 年に YOLO シリーズを超える」、arXiv プレプリント arXiv:2107.08430、2021 [[ref](https://arxiv.org/abs/2107.08430)] +Zheng Ge, Songtao Liu, Feng Wang, Zeming Li, Jian Sun, "YOLOX: Exceeding YOLO Series in 2021", arXiv preprint arXiv:2107.08430, 2021 [[ref](https://arxiv.org/abs/2107.08430)] -## 入力 / 出力 +## 入力/出力 ### 入力 -| 名称 | 型 | 説明 | -| ---------- | ------------------- | -------- | +| 名前 | 型 | 説明 | +|----------|--------------------|--| | `in/image` | `sensor_msgs/Image` | 入力画像 | ### 出力 -**自動運転ソフトウェアドキュメント** +**Autoware** 自动運転ソフトウェアに関するドキュメント -Autowareは、オープンソース自動運転ソフトウェアスタックです。このドキュメントでは、Autowareのさまざまなコンポーネントとモジュールについて説明します。 +**はじめに** -**Planningコンポーネント** +このドキュメントでは、Autowareの自動運転ソフトウェアのアーキテクチャ、設計、実装について説明します。Autowareは、オープンソースの自動運転ソフトウェアスタックであり、車載コンピュータ上で動作するように設計されています。 -- **Path Planning:** 目的地までの経路を生成します。 -- **Speed Planning:** 経路上の最適速度プロファイルを作成します。 -- **Trajectory Planning:** 経路と速度プロファイルを組み合わせた、車両の軌跡を生成します。 +**用語** -**Perceptionコンポーネント** +* **Planning**:経路計画と運動計画を担当するコンポーネント/モジュール。 +* **Localization**:自車位置と姿勢を推定するコンポーネント/モジュール。 +* **Control**:車両の運動を制御するコンポーネント/モジュール。 +* **Perception**:周囲環境を検出し、認識するコンポーネント/モジュール。 -- **Localization:** 自車位置と周囲環境の地図を特定します。 -- **Object Detection:** 周囲の車両、歩行者、障害物を検出します。 -- **Obstacle Tracking:** 時間とともに動いている物体を追跡します。 +**システムアーキテクチャ** -**Controlコンポーネント** +Autowareのシステムアーキテクチャは、次の主要コンポーネントで構成されています。 -- **Longitudinal Control:** 車両の速度を制御します。 -- **Lateral Control:** 車両の向きを制御します。 -- **Model Predictive Control (MPC):** 車両の挙動を予測し、最適な制御入力を決定します。 +* **Sensor Manager**:センサーデータの管理を行うコンポーネント。 +* **Perception Pipeline**:物体検出、レーン検出、セマンティックセグメンテーションなど、さまざまな認識タスクを実行するモジュール群。 +* **Localization**:自己位置推定アルゴリズムを実行するモジュール。 +* **Planning**:経路計画と運動計画を実行するモジュール群。 +* **Control**:車両の速度、ステアリング、ブレーキを制御するモジュール群。 +* **Supervisor**:システム全体を監視して、各コンポーネントの健全性を確保するコンポーネント。 -**Drivingポリシー** +**システム設計** -- **Lane Keeping Assist:** 車両が車線内を維持するのに役立ちます。 -- **Adaptive Cruise Control:** 前方車両との安全な間隔を維持します。 -- **Collision Avoidance:** 衝突の可能性を検出し、回避策を実行します。 +Autowareは、モジュール性、再利用性、拡張性を考慮して設計されています。各コンポーネントは独立していて、必要に応じて簡単に交換または拡張できます。そのため、Autowareはさまざまな車両プラットフォームやセンサー構成に簡単に適応できます。 -**安全機能** +**システム実装** -- **Velocity Violation Check:** `post resampling`による速度逸脱量を確認します。 -- **Acceleration Violation Check:** 加速度逸脱量を確認します。 -- **Obstacle Proximity Check:** 障害物との近接性を監視します。 +Autowareは、C++とPythonで実装されています。モジュラー設計により、Autowareはさまざまなハードウェアプラットフォームで効率的に動作します。Autowareは、ROS(Robot Operating System)に基づいており、センサーデータの共有、モジュール間の通信、デバッグの容易さを実現しています。 -| 名称 | タイプ | 説明 | -| ---------------- | -------------------------------------------------- | -------------------------------------------------------------------- | -| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックス付きの検出オブジェクト | -| `out/image` | `sensor_msgs/Image` | 視覚化のための2Dバウンディングボックス付きのイメージ | -| `out/mask` | `sensor_msgs/Image` | セマンティックセグメンテーションマスク | -| `out/color_mask` | `sensor_msgs/Image` | 視覚化のためのセマンティックセグメンテーションマスクの色付けイメージ | +**機能** + +Autowareは、次の主要機能を提供します。 + +* **パスプランニング**:障害物や道路標識を考慮した経路の生成。 +* **モーションプランニング**:経路をたどるための車両の運動軌道の生成。 +* **自車位置推定**:センサーデータに基づく自車位置と姿勢の推定。 +* **障害物検出**:周囲の車両、歩行者、物体などの障害物の検出。 +* **レーン検出**:道路のレーン境界線の検出。 +* **セマンティックセグメンテーション**:周囲の環境をさまざまなセマンティッククラス(道路、歩行者、建物など)にセグメント化。 + +**使用法** + +Autowareは、自動運転車両の開発、テスト、展開に使用できます。Autowareは、研究機関、自動車メーカー、スタートアップ企業で広く利用されています。 + +**リソース** + +* Autoware公式ウェブサイト:https://autoware.ai/ +* Autowareドキュメンテーション:https://docs.autoware.ai/ +* Autowareコミュニティフォーラム:https://forum.autoware.ai/ + +| 名称 | タイプ | 説明 | +| ---------------- | -------------------------------------------------- | ------------------------------------------------------------------- | +| `out/objects` | `tier4_perception_msgs/DetectedObjectsWithFeature` | 2Dバウンディングボックスを備えた検出オブジェクト | +| `out/image` | `sensor_msgs/Image` | 可視化のための2Dバウンディングボックスを備えた画像 | +| `out/mask` | `sensor_msgs/Image` | セマンティックセグメンテーションマスク | +| `out/color_mask` | `sensor_msgs/Image` | 可視化のためのセマンティックセグメンテーションマスクの色付け画像 | ## パラメータ {{ json_to_markdown("perception/autoware_tensorrt_yolox/schema/yolox_s_plus_opt.schema.json") }} {{ json_to_markdown("perception/autoware_tensorrt_yolox/schema/yolox_tiny.schema.json") }} -## 前提条件/既知の制限 +## 想定/既知の制限事項 -検出された 2D バウンディングボックス(例: `out/objects`)に含まれるラベルは、次のいずれかになります。 +検出された2Dバウンディングボックス(つまり `out/objects`)に含まれるラベルは次のいずれかになります。 - CAR -- PEDESTRIAN("PERSON" も "PEDESTRIAN" として分類されます。) +- PEDESTRIAN(「PERSON」も「PEDESTRIAN」に分類されます) - BUS - TRUCK - BICYCLE - MOTORCYCLE -他のラベル(大文字小文字の区別はしない)が `label_file` パラメータで指定されたファイルに含まれる場合、それらは `UNKNOWN` としてラベル付けされ、検出された四角形は視覚化結果(`out/image`)に描画されます。 - -セマンティックセグメンテーションマスクは、各ピクセルが次のクラスのいずれかのインデックスであるグレースケール画像です。 - -| インデックス | シマンティック名 | -| ------------ | ---------------- | -| 0 | 道路 | -| 1 | 建物 | -| 2 | 壁 | -| 3 | 障害物 | -| 4 | 交通信号 | -| 5 | 交通標識 | -| 6 | 歩行者 | -| 7 | 車両 | -| 8 | 自転車 | -| 9 | 道路 | -| 10 | 歩道 | -| 11 | 道路ペイント | -| 12 | 側石 | -| 13 | 交差点(その他) | -| 14 | 草木 | -| 15 | 空 | - -## Onnxモデル - -Ansibleスクリプトによって準備段階の環境でサンプルモデル(`yolox-tiny.onnx`)がダウンロードされます。ダウンロードされない場合は、[成果物の手動ダウンロード](https://github.com/autowarefoundation/autoware/tree/main/ansible/roles/artifacts)に従ってください。 - -オブジェクト検出推論後の一般的な後処理の1つである非最大値抑制(NMS)を高速化するために、通常のYOLOX(tiny)ネットワークの後には`EfficientNMS_TRT`モジュールが組み込まれています。 - -`EfficientNMS_TRT`モジュールには`score_threshold`と`nms_threshold`の固定値が含まれているため、ユーザーがこのモジュールを含むONNXモデルを指定した場合、これらのパラメーターは無視されます。 - -このパッケージは、`EfficientNMS_TRT`を組み込んだONNXと[公式のYOLOXリポジトリから公開されているモデル](https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime#download-onnx-models)(「プレーン」モデルと呼ぶ)の両方を許可します。 - -`yolox-tiny.onnx`に加えて、`yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls`という名前のカスタムモデルを利用することもできます。 - -このモデルはYOLOX-sをベースとしたマルチヘッダー構造モデルであり、`yolox-tiny`とほぼ同等の実行速度でより正確な検出を実行するように調整されています。 - -このモデルでより良い結果を得るには、`precision:=int8`、`calibration_algorithm:=Entropy`、`clip_value:=6.0`などの特定の実行引数を使用することをお勧めします。 - -ユーザーは`launch/yolox_sPlus_opt.launch.xml`を参照して、このモデルを使用する方法を確認できます。 - -検出結果に加えて、このモデルはポイントクラウドのフィルタリングに使用できる画像セマンティックセグメンテーション結果も出力します。 - -すべてのモデルは、TensorRT形式に自動的に変換されます。 - -変換後のファイルは、指定されたONNXファイルと同じディレクトリに`engine`ファイル名拡張子で保存され、次回の実行から再利用されます。 - -変換プロセスには時間がかかる場合があります(**通常10〜20分**)。また、変換が完了するまでは推論プロセスがブロックされるため、検出結果が公開されるまでに時間がかかります(**トピックリストに表示されるまで**)。 - -### パッケージで許容されるモデルの生成 - -PyTorchの`pth`フォーマットで保存されたユーザー独自のモデルをONNXに変換するには、公式リポジトリで提供されているコンバーターを利用できます。 - -便宜上、手順のみ以下に示します。 - -詳細については、[公式ドキュメント](https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime#convert-your-model-to-onnx)を参照してください。 +`label_file`パラメータで指定されたファイルに他のラベル(大文字小文字を区別しない)が含まれている場合、それらは `UNKNOWN`としてラベル付けされますが、検出された長方形は(`out/image`)の可視化結果に描画されます。 + +意味セグメンテーションマスクは、各ピクセルが次のクラスのインデックスであるグレースケール画像です。 + +| index | sematic name | +| ----- | ----------- | +| 0 | 道路 | +| 1 | 建物 | +| 2 | 壁 | +| 3 | 障害物 | +| 4 | 信号 | +| 5 | 交通標識 | +| 6 | 歩行者 | +| 7 | 車両 | +| 8 | 自転車 | +| 9 | 道路 | +| 10 | 歩道 | +| 11 | 路面標示 | +| 12 | 縁石 | +| 13 | その他の横断歩道 | +| 14 | 植生 | +| 15 | 空 | + +## ONNX モデル + +Ansible スクリプトで環境準備段階でサンプルモデル (`yolox-tiny.onnx`) がダウンロードされます。ダウンロードされていない場合は、[アーティファクトの手動ダウンロード](https://github.com/autowarefoundation/autoware/tree/main/ansible/roles/artifacts) に従ってください。 +オブジェクト検出推論後の一般的な後処理の 1 つである非最大抑制 (NMS) を高速化するために、通常の YOLOX (tiny) ネットワークの後に `EfficientNMS_TRT` モジュールが追加されています。 +`EfficientNMS_TRT` モジュールには `score_threshold` と `nms_threshold` の固定値が含まれているため、ユーザーがこのモジュールを含む ONNX モデルを指定すると、これらのパラメーターは無視されます。 + +このパッケージは、`EfficientNMS_TRT` が追加された ONNX と [公式 YOLOX リポジトリで公開されているモデル](https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime#download-onnx-models)(「プレーン」モデルと呼ばれます)の両方を許可します。 + +`yolox-tiny.onnx` に加えて、`yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls` というカスタムモデルも用意されています。 +このモデルは YOLOX-s をベースにしたマルチヘッダー構造モデルであり、`yolox-tiny` と同等の実行速度でより正確な検出を実行するように調整されています。 +このモデルでより良い結果を得るために、`precision:=int8`、`calibration_algorithm:=Entropy`、`clip_value:=6.0` などの特定の実行引数の使用をお勧めします。 +このモデルの使用方法については、`launch/yolox_sPlus_opt.launch.xml` を参照してください。 +このモデルは検出結果だけでなく、点群フィルタリング用の画像セマンティックセグメンテーション結果も出力します。 + +すべてのモデルは自動的に TensorRT 形式に変換されます。 +これらの変換されたファイルは、指定された ONNX ファイルと同じディレクトリに `engine` ファイル名拡張子で保存され、次回以降の実行から再利用されます。 +変換プロセスには時間がかかる場合があります(**通常 10 ~ 20 分**)。推論プロセスは変換が完了するまでブロックされるため、検出結果が公開されるまで(**トピックリストに表示されるまで**)しばらく時間がかかります。 + +### パッケージで許容されるモデルの作成 + +PyTorch の `pth` 形式で保存された独自のモデルを ONNX に変換するには、公式リポジトリによって提供されるコンバーターを利用できます。 +便宜上、以下では手順のみを説明します。 +詳細については [公式ドキュメント](https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime#convert-your-model-to-onnx) を参照してください。 #### プレーンモデルの場合 -1. 依存関係をインストール +1. 依存関係をインストールする + ```shell git clone git@github.com:Megvii-BaseDetection/YOLOX.git @@ -146,7 +156,8 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ python3 setup.py develop --user ``` -2. pth を ONNX に変換する +## 2. pth を ONNX に変換する + ```shell python3 tools/export_onnx.py \ @@ -155,10 +166,11 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ -c YOUR_YOLOX.pth ``` -#### EfficientNMS_TRT埋め込みモデル向け +#### EfficientNMS_TRT組み込みモデル向け 1. 依存関係のインストール + ```shell git clone git@github.com:Megvii-BaseDetection/YOLOX.git cd YOLOX @@ -168,6 +180,7 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ 2. pth を ONNX に変換する + ```shell python3 tools/export_onnx.py \ --output-name YOUR_YOLOX.onnx \ @@ -176,7 +189,8 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ --decode_in_inference ``` -3. YOLOX の最後に `EfficientNMS_TRT` を埋め込む +3. YOLOXの最後に`EfficientNMS_TRT`を組み込みます + ```shell yolox_onnx_modifier YOUR_YOLOX.onnx -o YOUR_YOLOX_WITH_NMS.onnx @@ -184,13 +198,13 @@ PyTorchの`pth`フォーマットで保存されたユーザー独自のモデ ## ラベルファイル -env準備プロセスの際に、サンプルラベルファイル(`label.txt`という名前)とセマンティックセグメンテーションカラーマップファイル(`semseg_color_map.csv`という名前)も自動的にダウンロードされます -(**注:** このファイルはCOCOデータセット(例:公式YOLOXリポジトリのモデル)のラベルを出力するモデルとは互換性がありません)。 +サンプルラベルファイル(`label.txt`)、セマンティックセグメンテーションカラーマップファイル(`semseg_color_map.csv`)は、環境準備プロセス中に自動的にダウンロードされます(**注意:** このファイルは COCO データセット用のラベルを出力するモデル(例:公式 YOLOX リポジトリのモデル)と互換性がありません)。 -このファイルは、クラスインデックス(YOLOXネットワークから出力される整数)とクラスラベル(理解を容易にする文字列)との対応を表します。このパッケージは、このファイルの順序に従って、クラスID(0から増加)をラベルにマッピングします。 +このファイルは、クラスインデックス(YOLOX ネットワークから出力される整数)とクラスラベル(理解しやすい文字列)間の対応を表しています。このパッケージは、このファイルの順番に従って、クラス ID(0 から増加)とラベルをマッピングします。 ## 参照リポジトリ - - - + diff --git a/perception/autoware_tracking_object_merger/README.md b/perception/autoware_tracking_object_merger/README.md index 478e02cd37b76..f82359656dfed 100644 --- a/perception/autoware_tracking_object_merger/README.md +++ b/perception/autoware_tracking_object_merger/README.md @@ -1,70 +1,70 @@ -# トラッキングオブジェクトマージャー +# 追跡オブジェクトのマージ ## 目的 -このパッケージは、異なるセンサーの2つのトラッキングオブジェクトをマージしようとします。 +このパッケージは、異なるセンサーから 2 つの追跡オブジェクトをマージします。 -## 内部処理/アルゴリズム +## 仕組み / アルゴリズム -異なるセンサーのトラッキングオブジェクトをマージすることは、データ関連付けと状態フュージョンのアルゴリズムの組み合わせです。 +異なるセンサーからの追跡オブジェクトのマージは、データアソシエーションと状態融合アルゴリズムの組み合わせです。 -詳細なプロセスは、マージャーポリシーによって異なります。 +詳細なプロセスはマージポリシーによって異なります。 ### decorative_tracker_merger -`decorative_tracker_merger`では、ドミナントなトラッキングオブジェクトとサブトラッキングオブジェクトがあると仮定します。 -`decorative`という名前は、サブトラッキングオブジェクトがメインオブジェクトを補完するために使用されることを意味します。 +``decorative_tracker_merger``では、支配的な追跡オブジェクトと従属的な追跡オブジェクトがあることを想定しています。 ``decorative``という名前は、従属的な追跡オブジェクトがメインのオブジェクトを補完するために使用されることを意味します。 -通常、ドミナントなトラッキングオブジェクトはLiDARから、サブトラッキングオブジェクトはレーダーまたはカメラから取得されます。 +通常、支配的な追跡オブジェクトは LiDAR から、従属的な追跡オブジェクトはレーダーまたはカメラからです。 -以下に処理パイプラインを示します。 +処理パイプラインを以下に示します。 ![decorative_tracker_merger](./image/decorative_tracker_merger.drawio.svg) -#### タイムシンク +#### 時間同期 -サブオブジェクト(レーダーまたはカメラ)は、ドミナントオブジェクト(LiDAR)よりも高い頻度で取得されることがよくあります。したがって、サブオブジェクトの時間をドミナントオブジェクトに同期させる必要があります。 +従属オブジェクト(レーダーまたはカメラ)は、一般に支配オブジェクト(LiDAR)よりも頻度が高いです。そのため、従属オブジェクトの時間を支配オブジェクトに同期させる必要があります。 -![タイムシンク](image/time_sync.drawio.svg) +![time sync](image/time_sync.drawio.svg) -#### データ関連付け +#### データアソシエーション -データ関連付けでは、以下のルールを使用して2つのトラッキングオブジェクトが同じオブジェクトかどうかを判別します。 +データアソシエーションでは、以下のルールを使用して 2 つの追跡オブジェクトが同一のオブジェクトであるかどうかを判断します。 - ゲーティング - - `distance gate`: 2つのトラッキングオブジェクト間の距離 - - `angle gate`: 2つのトラッキングオブジェクト間の角度 - - `mahalanobis_distance_gate`: 2つのトラッキングオブジェクト間のマハラノビス距離 - - `min_iou_gate`: 2つのトラッキングオブジェクト間の最小IoU - - `max_velocity_gate`: 2つのトラッキングオブジェクト間の最大速度差 + - ``distance gate``: 2 つの追跡オブジェクト間の距離 + - ``angle gate``: 2 つの追跡オブジェクト間の角度 + - ``mahalanobis_distance_gate``: 2 つの追跡オブジェクト間のマハラノビス距離 + - ``min_iou_gate``: 2 つの追跡オブジェクト間の最小 IoU + - ``max_velocity_gate``: 2 つの追跡オブジェクト間の最大速度差 - スコア - - マッチングで使用されるスコアは、2つのトラッキングオブジェクト間の距離と同等です + - マッチングで使用されるスコアは、2 つの追跡オブジェクト間の距離と同等です -#### トラックレット更新 +#### トラックレットの更新 -サブトラッキングオブジェクトはドミナントトラッキングオブジェクトにマージされます。 +従属的な追跡オブジェクトは支配的な追跡オブジェクトにマージされます。 -トラックレットの入力センサー状態に応じて、異なるルールでトラックレット状態を更新します。 +トラックレットの入力センサーの状態に応じて、異なるルールでトラックレットの状態を更新します。 -| ステート/優先度 | 1番目 | 2番目 | 3番目 | -| -------------------------- | -------- | -------- | -------- | -| キネマティクス(速度以外) | LiDAR | レーダー | カメラ | -| 前方速度 | レーダー | LiDAR | カメラ | -| オブジェクト分類 | カメラ | LiDAR | レーダー | +| 状態\優先度 | 1つ目 | 2つ目 | 3つ目 | +| -------------------------- | ------ | ----- | ------ | +| 運動学(速度除外) | LiDAR | レーダー | カメラ | +| 前進速度 | レーダー | LiDAR | カメラ | +| オブジェクト分類 | カメラ | LiDAR | レーダー -#### トラックレットマネジメント +#### トラックレット管理 -トラックレットの管理には`existence_probability`を使用します。 +トラックレット管理には`existence_probability`を使用しています。 -- 新しいトラックレットを作成するときは、`existence_probability`を$p_{sensor}$値に設定します。 -- 特定のセンサーでの各更新で、`existence_probability`を$p_{sensor}$値に設定します。 -- トラックレットが特定のセンサーでの更新がない場合は、`existence_probability`を`decay_rate`だけ減らします。 -- `existence_probability`が`publish_probability_threshold`より大きく、前回の更新からの時間が`max_dt`より小さい場合は、オブジェクトをパブリッシュできます。 -- `existence_probability`が`remove_probability_threshold`より小さく、前回の更新からの時間が`max_dt`より大きい場合は、オブジェクトは削除されます。 +- 新しいトラックレットを作成する場合、`existence_probability`を$p_{sensor}$値に設定します。 +- 特定のセンサーで各更新が実行されると、`existence_probability`を$p_{sensor}$値に設定します。 +- トラックレットが特定のセンサーを使用して更新されない場合、`decay_rate`で`existence_probability`を減らします。 +- `existence_probability`が`publish_probability_threshold`より大きく、最後の更新からの時間が`max_dt`より小さい場合は、オブジェクトを公開できます。 +- `existence_probability`が`remove_probability_threshold`より小さい場合や、最後の更新からの時間が`max_dt`より大きい場合は、オブジェクトは削除されます。 ![tracklet_management](./image/tracklet_management.drawio.svg) -これらのパラメーターは`config/decorative_tracker_merger.param.yaml`で設定できます。 +これらのパラメータは`config/decorative_tracker_merger.param.yaml`で設定できます。 + ```yaml tracker_state_parameter: @@ -77,38 +77,39 @@ tracker_state_parameter: max_dt: 1.0 ``` -#### 入力/パラメータ +#### インプット/パラメーター -| トピック名 | メッセージタイプ | 説明 | -| ------------------------------- | ------------------------------------------ | ---------------------------------------------------------------------- | -| `~input/main_object` | `autoware_perception_msgs::TrackedObjects` | 主要な追跡対象。この主要な対象のスタンプで出力がパブリッシュされます。 | -| `~input/sub_object` | `autoware_perception_msgs::TrackedObjects` | サブ追跡対象。 | -| `output/object` | `autoware_perception_msgs::TrackedObjects` | マージされた追跡対象。 | -| `debug/interpolated_sub_object` | `autoware_perception_msgs::TrackedObjects` | 補間されたサブ追跡対象。 | +| トピック名 | メッセージタイプ | 説明 | +| ------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------- | +| `~input/main_object` | `autoware_perception_msgs::TrackedObjects` | 主要な追跡オブジェクト。出力はこの主要オブジェクトのスタンプと共に公開されます。 | +| `~input/sub_object` | `autoware_perception_msgs::TrackedObjects` | サブ追跡オブジェクト。 | +| `output/object` | `autoware_perception_msgs::TrackedObjects` | マージされた追跡オブジェクト。 | +| `debug/interpolated_sub_object` | `autoware_perception_msgs::TrackedObjects` | 補間されたサブ追跡オブジェクト。 | デフォルトパラメータは [config/decorative_tracker_merger.param.yaml](./config/decorative_tracker_merger.param.yaml) に設定されています。 -| パラメーター名 | 説明 | デフォルト値 | -| ------------------------- | ---------------------------------------------------------------------------------------------------- | ------------ | -| `base_link_frame_id` | ベースリンクフレームID。追跡対象の変換に使用されます。 | "base_link" | -| `time_sync_threshold` | 時間同期しきい値。2つの追跡対象の差が小さければ、それらは同一対象とみなされます。 | 0.05 | -| `sub_object_timeout_sec` | サブオブジェクトタイムアウト。サブオブジェクトがこの時間更新されなければ、存在しないとみなされます。 | 0.5 | -| `main_sensor_type` | メインセンサータイプ。主な追跡対象を判別するために使用します。 | "lidar" | -| `sub_sensor_type` | サブセンサータイプ。サブ追跡対象を判別するために使用します。 | "radar" | -| `tracker_state_parameter` | トラッカー状態パラメーター。トラッキングに使用されます。 | | +| パラメータ名 | 説明 | デフォルト値 | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | +| `base_link_frame_id` | base link フレーム ID。これは追跡オブジェクトを変換するために使用されます。 | "base_link" | +| `time_sync_threshold` | タイム同期しきい値。2 つの追跡オブジェクト間の時間差がこの値よりも小さい場合、それらの 2 つの追跡オブジェクトは同じオブジェクトであるとみなされます。 | 0.05 | +| `sub_object_timeout_sec` | サブオブジェクトのタイムアウト。サブオブジェクトがこの時間更新されない場合、このオブジェクトは存在しないとみなされます。 | 0.5 | +| `main_sensor_type` | メインセンサーの種別。主に使用される追跡オブジェクトを決定するために使用されます。 | "lidar" | +| `sub_sensor_type` | サブセンサーの種別。サブ追跡オブジェクトを決定するために使用されます。 | "radar" | +| `tracker_state_parameter` | 追跡器の状態パラメータ。これは軌跡を管理するために使用されます。 | | -- `tracker_state_parameter` の詳細については、[Tracklet Management](#tracklet-management) で説明しています。 +- `tracker_state_parameter` の詳細は [トラックレット管理] (#tracklet-management) に記載されています -#### 調整 +#### チューニング -[Tracklet Management](#tracklet-management) で説明したように、この Tracker Merger は通常、両方の入力トラッキングオブジェクトを維持します。 +[トラックレット管理] (#tracklet-management) で説明されているように、この Tracker Merger は、両方の入力追跡対象を維持する傾向にあります。 -誤検出のトラッキングオブジェクトが多い場合、 +複数の誤検知の追跡対象がある場合は、次の操作を行います: -- そのセンサの `default__existence_probability` を下げる -- `decay_rate` を上げる -- 信頼できるトラッキングオブジェクトのみを公開するために `publish_probability_threshold` を上げる +- そのセンサの `default__existence_probability` を下げる。 +- `decay_rate` を上げる。 +- 信頼できる追跡対象のみを公開するために、`publish_probability_threshold` を上げる。 ### equivalent_tracker_merger -これは今後の予定です。 +これは将来の作業です。 + diff --git a/perception/autoware_traffic_light_arbiter/README.md b/perception/autoware_traffic_light_arbiter/README.md index 35f05a731047f..231363650e387 100644 --- a/perception/autoware_traffic_light_arbiter/README.md +++ b/perception/autoware_traffic_light_arbiter/README.md @@ -2,89 +2,59 @@ ## 目的 -このパッケージは、認識コンポーネントや外部(例:V2X)のコンポーネントから受信した交通信号を、信頼度ベースまたは外部優先ベースのアプローチを使用して結合します。 +このパッケージは認識と外部 (例: V2X) コンポーネントから交通信号を受信し、信頼性ベースまたは外部優先ベースのアプローチを使用してそれらを組み合わせます。 ## TrafficLightArbiter -画像認識と外部(例:V2X)システムからの交通信号状態をマージし、Planningコンポーネントに提供するノードです。 +画像認識と外部 (例: V2X) システムからの交通信号/状態をマージして、Planningコンポーネントに提供するノードです。 -### Signal Match Validator +### 信号マッチバリデーター -`enable_signal_matching` が true に設定されている場合、このノードは認識信号と外部信号の一致を検証します。 -以下の表は、認識信号(列)の特定の色が外部信号(行)の色と交差したときに、どのような色の組み合わせで一致のプロセスがアウトプットを決定するかを概説しています。各セルは、認識信号の特定の色(列)と外部信号の色(行)が交差したときの結果を表しています。 +`enable_signal_matching` が true に設定されている場合、このノードは認識信号と外部信号間のマッチを検証します。 +以下の表は、認識信号の特定の色 (列) が外部信号の色 (行) と交差した場合の組み合わせに基づいてマッチングプロセスが出力を決定する方法の概要を示しています。各セルは、認識信号で特定の色 (列) と外部信号で特定の色 (行) が交差した場合の結果を表します。 -| 外部知覚 | 赤信号 | 黄信号 | 緑信号 | 未知 | 受信なし | -| -------- | ------ | ------ | ------ | ---- | -------- | -| 赤信号 | 赤信号 | 未知 | 未知 | 未知 | 未知 | -| 黄信号 | 未知 | 黄信号 | 未知 | 未知 | 未知 | -| 緑信号 | 未知 | 未知 | 緑信号 | 未知 | 未知 | -| 未知 | 未知 | 未知 | 未知 | 未知 | 未知 | -| 受信なし | 未知 | 未知 | 未知 | 未知 | 未知 | +| 外部認識 | 赤 | 黄 | 青 | 不明 | 受信せず | +| -------------------- | ------- | ------- | ------- | ------- | ------------ | +| 赤 | 赤 | 不明 | 不明 | 不明 | 不明 | +| 黄 | 不明 | 黄 | 不明 | 不明 | 不明 | +| 青 | 不明 | 不明 | 青 | 不明 | 不明 | +| 不明 | 不明 | 不明 | 不明 | 不明 | 不明 | +| 受信せず | 不明 | 不明 | 不明 | 不明 | 不明 | -### 入力/出力 +### 入力 / 出力 #### 入力 -| 名称 | タイプ | 説明 | -| -------------------------------- | ----------------------------------------------------- | -------------------------------------------- | -| ~/sub/vector_map | autoware_map_msgs::msg::LaneletMapBin | 有効な信号 ID を取得するためのベクターマップ | -| ~/sub/perception_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 画像認識パイプラインからの信号 | -| ~/sub/external_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 外部システムからの信号 | +| 名前 | タイプ | 説明 | +| -------------------------------- | ----------------------------------------------------- | -------------------------------------------------------- | +| ~/sub/vector_map | autoware_map_msgs::msg::LaneletMapBin | 有効な信号 ID を取得するためのベクターマップ。 | +| ~/sub/perception_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 画像認識パイプラインからの信号。 | +| ~/sub/external_traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 外部システムからの信号。 | -#### 出力 +#### 成果物 -autoware ナビゲーションモジュールは、以下を含む自動運転ソフトウェアの主要コンポーネントです。 +Autowareの出力は、以下の形式で提供されます。 -- Planning -- Perception -- Control +- **リアルタイムの経路** : 自車位置と目標経路の間の差分をリアルタイムに提供します。 +- **経路の`post resampling`** : `Planning`モジュールで定期的に再サンプルされた経路の差分を提供します。 +- **経路の最適化** : `Planning`モジュールで最適化された経路の完全な差分を提供します。 +- **衝突予測** : 障害物と自車位置との間の衝突の可能性を予測します。 +- **ブレーキ制御** : 自車を安全に停止させるためのブレーキ制御コマンドを提供します。 +- **ステアリング制御** : 経路に従って自車を安全に操舵するためのステアリング制御コマンドを提供します。 +- **加減速制御** : 経路に従って自車を安全に加減速するための加減速制御コマンドを提供します。 -各モジュールは、センサーデータと周辺環境の情報を処理し、車両の動作を決定するために相互作用します。 - -#### Planningモジュール - -Planningモジュールは、車両の経路と速度計画を作成します。センサーデータ、地図データ、自車位置に基づいて、モジュールは以下を行います。 - -- 衝突回避パス計画 -- 交通規則遵守 -- 速度制御 - -#### Perceptionモジュール - -Perceptionモジュールは、周囲環境を解釈します。センサーデータを使用して、モジュールは以下を行います。 - -- 物体検出と分類 -- 路面状況認識 -- 静止物と動的物体の識別 - -#### Controlモジュール - -Controlモジュールは、Planningモジュールからのコマンドに基づいて、車両を操作します。モジュールは、以下の制御入力を生成します。 - -- ステアリング制御 -- 加速度/減速度制御 -- 変速制御 - -#### その他の重要なコンポーネント - -Planning、Perception、Controlモジュールの他に、autowareには以下のような重要なコンポーネントも含まれます。 - -- **Decision Making**:車両の動作を決定する高レベルコントローラー -- **Localization**:車両の位置を特定するシステム -- **Sensor Fusion**:さまざまなセンサーからのデータを統合するモジュール -- **Communication**:他の車両、インフラストラクチャ、交通機関の管理システムとのデータをやり取りするインターフェイス - -| 名前 | タイプ | 説明 | -| --------------------- | ----------------------------------------------------- | ------------------------ | -| ~/pub/traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | 統合された信号機の状態。 | +| 名前 | 種別 | 説明 | +| -------------------- | --------------------------------------------------- | ------------------------------ | +| ~/pub/traffic_signals | autoware_perception_msgs::msg::TrafficLightGroupArray | マージされた信号状態 | ## パラメータ ### コアパラメータ -| 名称 | 型 | デフォルト値 | 説明 | -| --------------------------- | ------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------ | -| `external_time_tolerance` | double | 5.0 | 外部メッセージがマージに有効と見なされる秒数 | -| `perception_time_tolerance` | double | 1.0 | Perceptionメッセージがマージに有効と見なされる秒数 | -| `external_priority` | bool | false | 外部のシグナルがPerceptionベースのシグナルより優先されるかどうか。falseの場合、マージは基準として信頼性を使用する | -| `enable_signal_matching` | bool | false | Perceptionシグナルと外部シグナルの一致を検証するかどうか。trueに設定した場合、色が一致していることを確認し、一致する場合のみ公開する | +| 名前 | タイプ | デフォルト値 | 説明 | +| --------------------------- | ------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `external_time_tolerance` | double | 5.0 | 外部メッセージのマージ時に有効とみなされる時間 (秒) | +| `perception_time_tolerance` | double | 1.0 | 知覚メッセージのマージ時に有効とみなされる時間 (秒) | +| `external_priority` | bool | false | 外部信号が知覚ベースの信号より優先されるかどうか。false の場合、マージでは信頼度が基準として使用されます | +| `enable_signal_matching` | bool | false | 知覚信号と外部信号の一致を検証するかどうか。trueに設定すると、色が一致することを確認し、一致する場合のみパブリッシュします。 | + diff --git a/perception/autoware_traffic_light_classifier/README.md b/perception/autoware_traffic_light_classifier/README.md index f13bc7517580f..5a09292145b11 100644 --- a/perception/autoware_traffic_light_classifier/README.md +++ b/perception/autoware_traffic_light_classifier/README.md @@ -2,251 +2,218 @@ ## 目的 -traffic_light_classifierは、交通信号機の周囲をトリミングした画像を使用して、交通信号機ラベルを分類するパッケージです。このパッケージには、`cnn_classifier`と`hsv_classifier`という2つの分類モデルがあります。 +traffic_light_classifierは、交通信号機周辺の切り抜き画像を使用して交通信号機のラベルを分類するパッケージです。このパッケージには、以下の2つの分類器モデルがあります。`cnn_classifier`と`hsv_classifier` ## 内部動作/アルゴリズム ### cnn_classifier 交通信号機のラベルは、EfficientNet-b1またはMobileNet-v2によって分類されます。 -完全に、日本の交通信号の83400(トレーニング用58600、評価用14800、テスト用10000)TIER IV社内イメージを使用して微調整しました。 -モデルの情報は次のとおりです。 - -## 自動運転ソフトウェアのドキュメント - -**Planning コンポーネント** - -**モジュール** - -- **Local Planning** - - 自車位置の追跡 - - 障害物検出 - - 経路生成 - - 'post resampling' 軌跡生成 -- **Behavior Planning** - - 経路追従制御 - - 速度計画 - - 車線維持 -- **Path Planning** - - ダイナミック経路生成 - - 障害物回避 - -**センシングコンポーネント** - -- **LiDAR** - - 3D نقطه群データの取得 - - 障害物検出 -- **カメラ** - - 視覚データの取得 - - レーンマーカー検出 - - 交通標識認識 -- **IMU (慣性計測装置)** - - 加速度や角速度の測定 - - 自車位置の推定 - -**制御コンポーネント** - -- **Longitudinal Controller** - - 車両速度の制御 - - 加速度逸脱量を最小化 -- **Lateral Controller** - - 車両ヨーの制御 - - 車線逸脱量を最小化 - -**Autoware** - -Autoware は自動運転ソフトウェアのオープンソースプラットフォームです。主要なモジュールには以下が含まれます。 - -- **Perception** - - センサーデータの処理と融合 - - 障害物認識と分類 -- **Fusion** - - ローカライゼーション、マッピング、トラッキング - - 環境の動的モデルの構築 -- **Control** - - 車両の制御とガイダンス - - PATH と BEHAVIOR Planner の実装 - -**評価方法** - -- **シミュレーションパフォーマンス** - - レーン逸脱量、クラッシュ回避数 -- **実世界パフォーマンス** - - テスト走行における速度逸脱量、加減速逸脱量 -- **主要性能指標 (KPI)** - - 時間あたりの走行距離 - - 介入率 +ティアフォー社内の日本国内交通信号機の画像83,400枚(58,600枚をトレーニング用、14,800枚を評価用、10,000枚をテスト用)を使用して微調整を行いました。 +各モデルの情報は次のとおりです。 + +| 名称 | 入力サイズ | テスト精度 | +| --------------- | ---------- | ------------- | +| EfficientNet-b1 | 128 x 128 | 99.76% | +| MobileNet-v2 | 224 x 224 | 99.81% | ### hsv_classifier -信号機の色(緑、黄、赤)はHSVモデルで分類します。 +信号機の色(緑、黄、赤)の分類はHSVモデルで行われます。 ### ラベルについて -メッセージタイプは、[ウィーン条約](https://ja.wikipedia.org/wiki/%E3%83%AF%E3%82%A4%E3%83%B3%E5%90%88%E7%B4%84%E7%B4%A0%E9%81%93%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E8%B7%AF%E4%BA%A4%E8%A8%80%E3%81%B8%E3%81%AE%E9%95%B7%E7%B5%90%E3%81%A8%E7%94%BB%E5%93%81%E3%81%AE%E5%90%88%E7%B4%84%E7%B4%A0%E9%81%93)で提案されている統一された道路標識に準拠するように設計されています。このアイデアは[Autoware.Auto](https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/16)でも提案されています。 +メッセージのタイプは、[ビエンナ条約](https://en.wikipedia.org/wiki/Vienna_Convention_on_Road_Signs_and_Signals#Traffic_lights)で提案された統一道路標識に準拠するように設計されています。このアイデアは[Autoware.Auto](https://gitlab.com/autowarefoundation/autoware.auto/autoware_auto_msgs/-/merge_requests/16)でも提案されています。 -ノードが受信するラベルの命名規則があります。信号機1つは、カンマで区切られた次の文字列で表されます。`color1-shape1, color2-shape2` . +ノードが受け取るラベルの命名規則があります。1つの信号機は、コンマで区切られた次の文字列で表されます。`color1-shape1, color2-shape2`。 -例えば、単純な赤と赤十字の信号機ラベルは "red-circle, red-cross" と表現する必要があります。 +たとえば、シンプルな赤と赤十字の信号機のラベルは「red-circle, red-cross」と表現する必要があります。 -これらの色と形状は、以下の通りメッセージに割り当てられます: +これらの色と形状はメッセージに次のように割り当てられます。 ![TrafficLightDataStructure.jpg](./image/TrafficLightDataStructure.jpg) ## 入出力 ### 入力 -| Name | Type | Description | -| --------------- | -------------------------------------------------- | ----------- | -| `~/input/image` | `sensor_msgs::msg::Image` | 入力画像 | -| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | 信号機のroi | +| 名前 | タイプ | 説明 | +| -------------------- | -------------------------------------------------- | --------------- | +| `~/input/image` | `sensor_msgs::msg::Image` | 入力画像 | +| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | 交通信号のRoI | ### 出力 -このドキュメントは、[Autoware](https://github.com/autowarefoundation/autoware.auto/blob/master/docs/en/planning_with_mpc/planning_with_mpc.md)のPlanningコンポーネントにおけるModel Predictive Control (MPC)のアルゴリズムの概要を説明します。 - -#### Planningのアルゴリズム - -Planningは、複数のPlanningモジュールで構成されています。 - -- **TrajectoryGenerator** プランニング可能な軌道を生成します。 -- **Planner** 軌道の評価および最適化を実施します。 - -#### モデル予測制御 (MPC) - -MPCは、Planningで使用される最適化アルゴリズムです。MPCでは、現在の状態からの一連の制御入力を計算し、将来のシステム挙動を最適化します。 - -MPCのアルゴリズムは次の手順で行われます: - -1. **問題の設定:** プランニングモジュールから、自車位置、障害物、目標状態などの情報を取得します。 -2. **コスト関数の設定:** 目標状態への追従、衝突回避、経路逸脱などの目的を反映するコスト関数を定義します。 -3. **最適化:** コスト関数の最小化を目的とする最適化問題を解きます。 -4. **制御入力の生成:** 最適化の結果から、最初の制御入力を生成します。 -5. **計画の再計算:** 制御入力が適用されると、自車位置が変化します。MPCは、変化した自車位置に基づいて計画を再計算します。 +障害物回避モジュールは、Autoware.Auto の Planning コンポーネントの一部です。障害物を検出して回避経路を生成し、それを Planning コンポーネントに引き渡します。 -#### PlanningにおけるMPC +**機能:** -Planningでは、MPCを使用して、以下のタスクを実行します: +* センサデータから障害物を検出 +* 障害物特性(種類、形状、サイズ、速度)を推定 +* 自車位置と障害物位置から回避経路を生成 +* 回避経路を最適化(安全性、滑らかさ、実行可能性) -- **経路追従:** 目標経路に沿った軌道を生成します。 -- **障害物回避:** 障害物を回避するための軌道を生成します。 -- **速度制御:** 目標速度を維持するための制御入力を計算します。 +**アーキテクチャ:** -MPCのPlanningにおける主要な利点は、他の車両や障害物などの障害物を考慮して、将来のシステム挙動を予測できることです。これにより、Planningはリアルタイムで安全かつ効率的な軌道を作成できます。 +* **感知モジュール:** 障害物を検出し、特性を抽出します。 +* **計画モジュール:** 回避経路を生成し、最適化します。 -#### 実装の詳細 +**インターフェース:** -MPCのAutowareにおける実装では、以下を使用しています: +* **入力:** + * センサデータ(レーダー、LiDAR) + * 自車位置 +* **出力:** + * 回避経路 -- **コスト関数:** 位置逸脱量、速度逸脱量、加速度逸脱量の最小化 -- **最適化器:** 'post resampling`を備えたquadprog -- **制御入力:** ステアリング角、加速度 +**主なアルゴリズム:** -#### 参考資料 +* **'post resampling' ベースの障害物検出** +* **拡張カルマンフィルタ**を使用した障害物特性推定 +* **動的計画法**を使用した回避経路生成 +* **微分進化**を使用した回避経路最適化 -- [Autoware Foundation Planning](https://github.com/autowarefoundation/autoware.auto/tree/master/ros/autoware/core/planning_with_mpc) -- [Model Predictive Control Theory and Design](https://link.springer.com/book/10.1007/978-0-89838-330-2) - -| 名前 | 種類 | 説明 | -| -------------------------- | ----------------------------------------------- | -------------- | -| `~/output/traffic_signals` | `tier4_perception_msgs::msg::TrafficLightArray` | 分類済み信号 | -| `~/output/debug/image` | `sensor_msgs::msg::Image` | デバッグ用画像 | +| 名前 | タイプ | 説明 | +| ------------------------- | --------------------------------------------- | ------------------------------------ | +| `~/output/traffic_signals` | `tier4_perception_msgs::msg::TrafficLightArray` | 分類された信号 | +| `~/output/debug/image` | `sensor_msgs::msg::Image` | デバッグ用画像 | ## パラメータ ### ノードパラメータ -| 名前 | タイプ | 説明 | -| --------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `classifier_type` | int | 値が `1` の場合、cnn_classifier が使用されます。 | -| `data_path` | str | packages データおよびアーティファクトのディレクトリパス | -| `backlight_threshold` | float | 強度がこの値を超えた場合、対応する RoI で UNKNOWN で上書きします。この値がはるかに大きい場合、ノードは過酷な逆光状況でのみ上書きするということに注意してください。したがって、この機能を使用しない場合は、この値を `1.0` に設定してください。この値は `[0.0, 1.0]` にできます。上書きされた信号の信頼性は `0.0` に設定されます。 | +| 名称 | タイプ | 説明 | +| --------------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `classifier_type` | int | 値が `1` の場合、cnn_classifier が使用されます | +| `data_path` | str | パッケージデータとアーティファクトディレクトリのパス | +| `backlight_threshold` | float | 強度がこれを超えた場合、それに対応する RoI に UNKNOWN が上書きされます。この値が著しく大きい場合、ノードは強い逆光時のみ上書きを行います。したがって、この機能を使用したくない場合は、この値を `1.0` に設定してください。値は `[0.0, 1.0]` です。上書きされる信号の信頼性は `0.0` に設定されます。 | ### コアパラメータ -#### cnn_classifier +#### cnn分類器 -| 名称 | タイプ | 説明 | -| ----------------------- | --------------- | -------------------------------- | -| `classifier_label_path` | str | モデルファイルのパス | -| `classifier_model_path` | str | ラベルファイルのパス | -| `classifier_precision` | str | TensorRT精度、`fp16`または`int8` | -| `classifier_mean` | vector\ | 3チャネル入力画像の平均 | -| `classifier_std` | vector\ | 3チャネル入力画像の標準偏差 | -| `apply_softmax` | bool | ソフトマックスを適用するかどうか | +| 名前 | 種類 | 説明 | +| ----------------------- | --------------- | ------------------------------------ | +| `classifier_label_path` | 文字列 | モデルファイルへのパス | +| `classifier_model_path` | 文字列 | ラベルファイルへのパス | +| `classifier_precision` | 文字列 | TensorRT精度の`fp16`または`int8` | +| `classifier_mean` | 倍精度浮動小数点型ベクトル | 3チャンネル入力画像の平均 | +| `classifier_std` | 倍精度浮動小数点型ベクトル | 3チャンネル入力画像の標準偏差 | +| `apply_softmax` | 論理値 | ソフトマックスを適用するか | #### hsv_classifier -## HSV カラーベース分類器 +| 名前 | 型 | 説明 | +| ------------ | --- | ---------------------------------------------- | +| `green_min_h` | int | 緑色の最小色相 | +| `green_min_s` | int | 緑色の最小彩度 | +| `green_min_v` | int | 緑色の最小値(輝度) | +| `green_max_h` | int | 緑色の最大色相 | +| `green_max_s` | int | 緑色の最大彩度 | +| `green_max_v` | int | 緑色の最大値(輝度) | +| `yellow_min_h` | int | 黄色の最小色相 | +| `yellow_min_s` | int | 黄色の最小彩度 | +| `yellow_min_v` | int | 黄色の最小値(輝度) | +| `yellow_max_h` | int | 黄色の最大色相 | +| `yellow_max_s` | int | 黄色の最大彩度 | +| `yellow_max_v` | int | 黄色の最大値(輝度) | +| `red_min_h` | int | 赤色の最小色相 | +| `red_min_s` | int | 赤色の最小彩度 | +| `red_min_v` | int | 赤色の最小値(輝度) | +| `red_max_h` | int | 赤色の最大色相 | +| `red_max_s` | int | 赤色の最大彩度 | +| `red_max_v` | int | 赤色の最大値(輝度) | + +## 信号機分類器モデルのトレーニング + +### 概要 + +このガイドでは、**[mmlab/mmpretrain](https://github.com/open-mmlab/mmpretrain)** リポジトリを使用して信号機分類器モデルをトレーニングし、**[mmlab/mmdeploy](https://github.com/open-mmlab/mmdeploy)**を使用して展開するための詳細な手順を説明します。独自のデータセットを使用してカスタム信号機分類器モデルを作成する場合は、以下の手順に従ってください。 -このコンポーネントは、Hue, Saturation, Value(HSV)カラー空間を使用して障害物を分類します。これにより、セグメンテーションのフィルタリングや、Planningコンポーネントに対する追加的な入力として使用できます。 +### データ準備 -### 入出力 +#### サンプルデータセットを使用する -**入力:** +Autowareは、信号機分類のトレーニング手順を説明するサンプルデータセットを提供しています。このデータセットは、赤、緑、黄色の3つのラベルに分類された1045枚の画像で構成されています。このサンプルデータセットを使用するには、**[リンク](https://autoware-files.s3.us-west-2.amazonaws.com/dataset/traffic_light_sample_dataset.tar.gz)**からダウンロードし、任意の指定されたフォルダに解凍してください。 -- `PointCloud`: 障害物のPointCloudデータ -- `CameraInfo`: カメラの内部および外部パラメータ +#### カスタムデータセットを使用する -**出力:** +信号機分類器をトレーニングするには、各サブフォルダが異なるクラスを表すように構造化されたサブフォルダ形式を使用します。以下は、データセット構造の例です。 +``` +└─── dataset + └─── class1 + └─── img1.jpg + └─── img2.jpg + └─── class2 + └─── img1.jpg + └─── img2.jpg + └─── class3 + └─── img1.jpg + └─── img2.jpg +``` +``` +└─── dataset + └─── red + └─── img1.jpg + └─── img2.jpg + └─── green + └─── img1.jpg + └─── img2.jpg + └─── yellow + └─── img1.jpg + └─── img2.jpg +``` -- `ClassifiedPointCloud`: HSV色相に基づいて分類された障害物のPointCloudデータ +### Model Training -### パラメータ +To train a traffic light classifier model, follow these steps: -| パラメータ | 説明 | デフォルト値 | -| ------------------------------------------------------------------- | ---- | ------------ | -| `hue_threshold`: HSV色相の閾値 (度) | 30 | -| `saturation_threshold`: HSV彩度の閾値 | 0.1 | -| `value_threshold`: HSV明度の閾値 | 0.1 | -| `post resampling`: ポストリサンプリングフィルターを使用するかどうか | True | +1. Clone the **[mmlab/mmpretrain](https://github.com/open-mmlab/mmpretrain)** repository. +2. Install the required dependencies. +3. Prepare the training dataset by following the instructions in [Using Sample Dataset](#use-sample-dataset) or [Using Your Custom Dataset](#use-your-custom-dataset). +4. Specify the following training parameters in the provided `config` files: + - Dataset path + - Output directory + - Number of epochs + - Batch size + - Learning rate +5. Train the model using the following command: +``` +mmtrain config.py [--options] [args...] +``` -### アルゴリズム +### Model Deployment -このコンポーネントは、各点のHSV色相、彩度、明度を計算し、指定されたしきい値と比較します。指定されたしきい値を超える点は、障害物として分類されます。 +To deploy the trained model using **[mmdeploy](https://github.com/open-mmlab/mmdeploy)**, follow these steps: -### 注意事項 +1. Clone the **[mmlab/mmdeploy](https://github.com/open-mmlab/mmdeploy)** repository. +2. Install the required dependencies. +3. Convert the trained model to a deployable format using `mmdeploy`: +``` +mmdeploy model convert --config config.yml --model model.pth --output output.bin +``` +4. Integrate the deployed model into your `Planning` component/module. -- この分類器は単一のカメラからのデータだけを使用することに注意してください。より堅牢な障害物検出を行うには、複数のカメラからのデータを使用する必要があります。 -- パラメータは特定のシーンやライティング条件に応じて調整する必要があります。 -- この分類器は、距離情報を使用しません。そのため、障害物が自車位置に近いか遠いかを区別できません。 +### Post-processing for Traffic Light Detection -| 名 | 型 | 説明 | -| -------------- | --- | -------------- | -| `green_min_h` | int | 緑色の最小色相 | -| `green_min_s` | int | 緑色の最小彩度 | -| `green_min_v` | int | 緑色の最小明度 | -| `green_max_h` | int | 緑色の最大色相 | -| `green_max_s` | int | 緑色の最大彩度 | -| `green_max_v` | int | 緑色の最大明度 | -| `yellow_min_h` | int | 黄色の最小色相 | -| `yellow_min_s` | int | 黄色の最小彩度 | -| `yellow_min_v` | int | 黄色の最小明度 | -| `yellow_max_h` | int | 黄色の最大色相 | -| `yellow_max_s` | int | 黄色の最大彩度 | -| `yellow_max_v` | int | 黄色の最大明度 | -| `red_min_h` | int | 赤色の最小色相 | -| `red_min_s` | int | 赤色の最小彩度 | -| `red_min_v` | int | 赤色の最小明度 | -| `red_max_h` | int | 赤色の最大色相 | -| `red_max_s` | int | 赤色の最大彩度 | -| `red_max_v` | int | 赤色の最大明度 | +The model will return class probabilities. To determine the detected traffic light color from these probabilities, the following steps are carried out: -## 交通信号機分類器モデルのトレーニング +1. Use a predefined threshold (usually 0.5) to determine the most likely class. +2. If the most likely class is 'red', 'green', or 'yellow', that color is considered the detected color. +3. If the most likely class is 'other', the detected color is considered unknown. -### 概要 +### Validation -このガイドでは、**[mmlab/mmpretrain](https://github.com/open-mmlab/mmpretrain)** リポジトリを使用して交通信号機分類器モデルをトレーニングし、**[mmlab/mmdeploy](https://github.com/open-mmlab/mmdeploy)** を使用して展開する方法に関する詳細な手順を説明します。独自のデータセットを使用して独自の交通信号機分類器モデルを作成する場合は、以下に示す手順に従ってください。 +To evaluate the performance of the trained model, use a validation dataset that is not part of the training set. The validation dataset should contain a representative sample of the types of traffic lights that the model will encounter in real-world scenarios. Calculate the accuracy of the model by comparing the predicted traffic light colors to the ground truth labels. -### データの準備 +### Additional Information -#### サンプルデータセットの使用 +- If you encounter any issues during the training or deployment process, please refer to the documentation on the **[mmlab/mmpretrain](https://github.com/open-mmlab/mmpretrain)** and **[mmlab/mmdeploy](https://github.com/open-mmlab/mmdeploy)** repositories. +- For further guidance on integrating the deployed model, consult the Autoware documentation or seek assistance from the Autoware community. -Autoware は交通信号機の分類のためのトレーニング手順を示すサンプルデータセットを提供しています。このデータセットは、赤、緑、黄色のラベルに分類された 1045 枚の画像で構成されています。このサンプルデータセットを使用するには、**[リンク](https://autoware-files.s3.us-west-2.amazonaws.com/dataset/traffic_light_sample_dataset.tar.gz)** からダウンロードして、選択した指定フォルダーに解凍してください。 +### 変更履歴 -#### カスタムデータセットの使用 +- 2023-03-13: リリース -交通信号機分類器をトレーニングするには、各サブフォルダーが異なるクラスを表す、構造化されたサブフォルダー形式を採用します。以下に示すのは、データセット構造の例です。 ```python DATASET_ROOT @@ -281,28 +248,29 @@ DATASET_ROOT #### 前提条件 - +**手順 1.** 公式ウェブサイトから Miniconda をダウンロードしてインストールする ([こちら](https://mmpretrain.readthedocs.io/en/latest/get_started.html)) -**ステップ 1.** [公式ウェブサイト](https://mmpretrain.readthedocs.io/en/latest/get_started.html)からMinicondaをダウンロードしてインストールします。 +**手順 2.** conda 仮想環境を作成してアクティベートする -**ステップ 2.** conda仮想環境を作成してアクティベートします ```bash conda create --name tl-classifier python=3.8 -y conda activate tl-classifier ``` -**手順 3.** PyTorchのインストール +**ステップ 3.** PyTorch のインストール + +PyTorch をインストールしてください。CUDA 11.6 と互換性のあるバージョンである必要があります。これは、現在の Autoware の必要条件です。 -CUDA 11.6と互換性のあるPyTorchをインストールしてください。これは、現在のAutowareの要件です。 ```bash conda install pytorch==1.13.1 torchvision==0.14.1 pytorch-cuda=11.6 -c pytorch -c nvidia ``` -#### mmlab/mmpretrain のインストール +#### mmlab/mmpretrainをインストールする + +**ステップ1.** mmpretrainをソースからインストールする -**手順 1.** mmpretrain をソースからインストール ```bash cd ~/ @@ -313,20 +281,22 @@ pip install -U openmim && mim install -e . ### トレーニング -MMPretrainは構成ファイルによって制御されるトレーニングスクリプトを提供します。 -継承デザインパターンを利用することで、構成ファイルとしてPythonファイルを使用してトレーニングスクリプトを簡単に調整できます。 +MMPretrain には、コンフィギュレーションファイルによって制御されるトレーニングスクリプトが用意されています。 +継承設計パターンを利用すると、Python ファイルをコンフィギュレーションファイルとして使用して、トレーニングスクリプトを簡単にカスタマイズできます。 -この例では、MobileNetV2モデルを使ったトレーニングステップを示しますが、EfficientNetV2、EfficientNetV3、ResNetなど、別の分類モデルを使用する柔軟性があります。 +この例では、MobileNetV2 モデルでトレーニング手順を紹介しますが、EfficientNetV2、EfficientNetV3、ResNet などの他の分類モデルを使用することもできます。 -#### 構成ファイルの作成 +#### コンフィギュレーションファイルの作成 + +`configs` フォルダー内に、好みのモデルのコンフィギュレーションファイルを生成します。 -`configs`フォルダ内で使用するモデルの構成ファイルを作成します。 ```bash touch ~/mmpretrain/configs/mobilenet_v2/mobilenet-v2_8xb32_custom.py ``` -好みのテキストエディターでコンフィグレーションファイルを開き、提供されたコンテンツのコピーを作成してください。データセットのパスに合わせて **data_root** 変数を調整します。モデル、データセット、スケジューラーのコンフィグレーションパラメーターは、好みに合わせてカスタマイズできます。 +テキストエディタでお好みの設定ファイルを開き、提供されたコンテンツのコピーを作成します。**data_root** バリアブルをデータセットのパスに変更します。モデル、データセット、スケジューラの設定パラメータはお好みのものに変更してカスタマイズできます。 + ```python # Inherit model, schedule and default_runtime from base model @@ -415,22 +385,24 @@ test_evaluator = val_evaluator ``` -#### トレーニングの開始 +#### トレーニングを開始する + ```bash cd ~/mmpretrain python tools/train.py configs/mobilenet_v2/mobilenet-v2_8xb32_custom.py ``` -トレーニングログと重みは、`work_dirs/mobilenet-v2_8xb32_custom` フォルダに保存されます。 +トレーニングログと重みは `work_dirs/mobilenet-v2_8xb32_custom` フォルダに保存されます。 -### PyTorchモデルからONNXモデルへの変換 +### PyTorchモデルからONNXモデルへ変換 #### mmdeployのインストール -「mmdeploy」ツールセットは、トレーニングされたモデルをさまざまなターゲットデバイスにデプロイするように設計されています。 +'mmdeploy' ツールセットは、トレーニング済みモデルをさまざまなターゲットデバイスに展開するために設計されています。 その機能により、PyTorchモデルをONNX形式にシームレスに変換できます。 + ```bash # Activate your conda environment conda activate tl-classifier @@ -452,7 +424,8 @@ cd ~/ git clone -b main https://github.com/open-mmlab/mmdeploy.git ``` -#### PyTorchモデルをONNXモデルに変換する +#### PyTorchモデルからONNXモデルへの変換 + ```bash cd ~/mmdeploy @@ -468,57 +441,57 @@ python tools/deploy.py \ --work-dir mmdeploy_model/mobilenet_v2 ``` -## ONNXモデル変換 - -変換されたONNXモデルは、`mmdeploy/mmdeploy_model/mobilenet_v2`フォルダに保存されます。 +変換後の ONNX モデルは `mmdeploy/mmdeploy_model/mobilenet_v2` フォルダに保存されます。 -ONNXモデルを入手したら、起動ファイルで定義されているパラメータ(例:`model_file_path`、`label_file_path`、`input_h`、`input_w`など)を更新します。[tier4_perception_msgs::msg::TrafficLightElement](https://github.com/tier4/tier4_autoware_msgs/blob/tier4/universe/tier4_perception_msgs/msg/traffic_light/TrafficLightElement.msg)で定義されているラベルのみサポートすることに注意してください。 +onnx モデルを入手したら、起動ファイル (例: `model_file_path`, `label_file_path`, `input_h`, `input_w` ) で定義されたパラメータを更新します。 +[tier4_perception_msgs::msg::TrafficLightElement](https://github.com/tier4/tier4_autoware_msgs/blob/tier4/universe/tier4_perception_msgs/msg/traffic_light/TrafficLightElement.msg) で定義されているラベルのみサポートすることに注意してください。 -## 仮定/既知の制限 +## 仮定 / 既知の制限 - -## (オプション) エラー検出および処理 +## (オプション) エラーの検出と処理 - ## (オプション) パフォーマンス特性 - -## 参照/外部リンク +## リファレンス/外部リンク -[1] M. Sandler、A. Howard、M. Zhu、A. Zhmoginov、L. Chen、「MobileNetV2:逆残差と線形ボトルネック」、2018 IEEE/CVFコンピュータビジョンアンドパターン認識会議、ソルトレイクシティ、ユタ州、2018年、pp。 4510-4520、doi:10.1109/CVPR.2018.00474。 +[1] M. Sandler, A. Howard, M. Zhu, A. Zhmoginov and L. Chen, "MobileNetV2: Inverted Residuals and Linear Bottlenecks," 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition, Salt Lake City, UT, 2018, pp. 4510-4520, doi: 10.1109/CVPR.2018.00474. -[2] タン、ミングシン、クオック・レ。「EfficientNet:畳み込みニューラルネットワークのモデルスケーリングを再考する」。機械学習に関する国際会議。PMLR、2019年。 +[2] Tan, Mingxing, and Quoc Le. "EfficientNet: Rethinking model scaling for convolutional neural networks." International conference on machine learning. PMLR, 2019. -## (オプション) 将来の拡張/未実装部分 +## (オプション) 将来の拡張 / 未実装部分 - + diff --git a/perception/autoware_traffic_light_fine_detector/README.md b/perception/autoware_traffic_light_fine_detector/README.md index ea1a20ade4cd1..544a542c7a367 100644 --- a/perception/autoware_traffic_light_fine_detector/README.md +++ b/perception/autoware_traffic_light_fine_detector/README.md @@ -1,95 +1,103 @@ +--- + # traffic_light_fine_detector ## 目的 -YoloX-sを利用した交通信号灯検出用パッケージです。 +YoloX-sを使用した信号機検出パッケージです。 ## トレーニング情報 -### 事前トレーニングされたモデル +### 事前トレーニング済みモデル -このモデルは [YOLOX](https://github.com/Megvii-BaseDetection/YOLOX) をベースにしており、事前トレーニングされたモデルは [こちら](https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth) からダウンロードできます。 +モデルは[YOLOX](https://github.com/Megvii-BaseDetection/YOLOX)に基づいており、事前トレーニング済みモデルは[ここから](https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth)ダウンロードできます。 ### トレーニングデータ -このモデルは、日本における TIER IV の約 17,000 枚の内部交通信号灯画像でファインチューニングが行われました。 +このモデルは約17,000枚の日本の信号機画像で微調整されています。 -### トレーニング済みの ONNX モデル +### トレーニングされたOnnxモデル -以下の手順を使用して ONNX ファイルをダウンロードできます。詳細については [autoware-documentation](https://github.com/autowarefoundation/autoware-documentation/blob/main/docs/models/index.md) を参照してください。 +この手順に従ってONNXファイルを使用できます。詳しくは[autoware-documentation](https://github.com/autowarefoundation/autoware-documentation/blob/main/docs/models/index.md)をご覧ください。 -## 内部仕様 / アルゴリズム +## 仕組み / アルゴリズム -カメラ画像と `map_based_detection` ノードによって検出されたグローバル ROI アレイに基づき、CNN ベースの検出方法によって非常に正確な交通信号灯検出が可能になります。 +カメラ画像とmap_based_detectionノードによって検出されたグローバルROIアレイに基づき、CNNベースの検出方法によって非常に正確な信号機の検出が実現します。 ## 入出力 ### 入力 -| 名前 | 型 | 説明 | -| --------------- | -------------------------------------------------- | ------------------------------------------------------- | -| `~/input/image` | `sensor_msgs/Image` | フルサイズカメラ画像 | -| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | map_based_detectorで検出されたROIの配列 | -| `~/expect/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | オフセットのないmap_based_detectorで検出されたROIの配列 | +| 名前 | タイプ | 説明 | +| --------------- | -------------------------------------------------- | ------------------------------------------------------------------- | +| `~/input/image` | `sensor_msgs/Image` | フルサイズのカメラ画像 | +| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `map_based_detector` によって検出された ROI の配列 | +| `~/expect/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | オフセットのない `map_based_detector` によって検出された ROI の配列 | ### 出力 -**自動運転ソフトウェア** +**用途** + +このドキュメントは、AutowareのPlan/Control スタックの技術的な詳細を記載しています。 -**概要** +**ターゲット読者** -このドキュメントでは、AutowareのPlanningコンポーネント/モジュールの動作について説明します。Planningは、Perceptionから受信した認識データを処理し、将来の経路を計画します。 +AutowareのPlan/Controlスタックの設計、運用、またはメンテナンスに関わる技術者。 -**動作** +**ドキュメント構造** -Planningコンポーネントは、次のステップに従って動作します。 +このドキュメントは、以下のセクションで構成されています。 -1. **認識データの受信:** Perceptionコンポーネントから、障害物、走行可能な領域、交通標識などの認識データを受信します。 -2. **ローカルパス計画:** 受信した認識データを使用して、自車位置周辺のローカルパスを生成します。 -3. **グローバルパス計画:** ローカルパスをグローバルパスに拡張し、目的地までの中長期的な経路を作成します。 -4. **再サンプル:** 生成されたパスを調整し、'post resampling'を実行して滑らかで実行可能なパスにします。 -5. **Planningの決定:** velocity逸脱量、acceleration逸脱量、操舵角など、Planningの決定を計算します。 -6. **Controlへの送信:** 計算されたPlanningの決定をControlコンポーネントに送信します。 +* **概要** +* **Planコンポーネント** + * トラジェクトリ生成 + * 障害物検出 + * 経路計画 +* **Controlコンポーネント** + * Motion Planning + * Vehicle Kinematics +* **統合** +* **使用のヒント** +* **既知の問題** -**機能** +**ライセンス** -Planningコンポーネントには、次の機能があります。 +このドキュメントは、Apache 2.0ライセンスの条件に基づいてライセンスされています。 -- 障害物回避のためのリアルタイムパス計画 -- 交通規則の遵守 -- 速度と加速度の最適化 -- 複数のパスオプションの生成 -- 高速道路と都市部の両方での動作 +**免責事項** -| 名 | 型 | 説明 | -| --------------------- | -------------------------------------------------- | ------------------ | -| `~/output/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | 検出された正確な枠 | +このドキュメントの情報は、「現状のまま」提供されており、いかなる種類の保証もありません。 + +| 名称 | タイプ | 説明 | +| --------------------- | -------------------------------------------------- | ---------------------------- | +| `~/output/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | 検出した正確なroi | | `~/debug/exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | 推論にかかった時間 | ## パラメータ ### コアパラメータ -| 名称 | 種類 | デフォルト値 | 説明 | -| ---------------------------- | ------ | ------------ | ---------------------------------------------------------------- | -| `fine_detector_score_thresh` | double | 0.3 | オブジェクトスコアがこの値未満の場合、オブジェクトは無視されます | -| `fine_detector_nms_thresh` | double | 0.65 | Non-Maximum Suppressionを実行するためのIoU閾値 | +| 名称 | 型 | デフォルト値 | 説明 | +|---|---|---|---| +| `fine_detector_score_thresh` | double | 0.3 | オブジェクトスコアがこの値より低い場合、オブジェクトは無視されます。 | +| `fine_detector_nms_thresh` | double | 0.65 | Non-Maximum Suppressionを実行するためのIoUしきい値 | ### ノードパラメータ -| 名前 | 型 | 初期値 | 説明 | -| -------------------------- | ------ | --------------------------- | -------------------------------------------------------- | -| `data_path` | 文字列 | "$(env HOME)/autoware_data" | パッケージのデータとアーティファクトのディレクトリパス | -| `fine_detector_model_path` | 文字列 | "" | Yoloモデルのonnxファイル名 | -| `fine_detector_label_path` | 文字列 | "" | 検出されたオブジェクトのラベル名を記載したラベルファイル | -| `fine_detector_precision` | 文字列 | "fp32" | 推論モード: "fp32", "fp16" | -| `approximate_sync` | ブール | false | 近似同期ポリシーを使用するかどうかを指定するフラグ | -| `gpu_id` | 整数 | 0 | CUDA GPUデバイスを選択するためのID | +| Name | Type | Default Value | Description | +| ---------------------------- | ------- | --------------------------- | --------------------------------------------------------------------- | +| `data_path` | string | "$(env HOME)/autoware_data" | パッケージのデータとアーティファクトのディレクトリパス | +| `fine_detector_model_path` | string | "" | YOLOモデルのonnxファイル名 | +| `fine_detector_label_path` | string | "" | 検出されたオブジェクトに書かれたラベル名を持つラベルファイル | +| `fine_detector_precision` | string | "fp32" | 推論モード: "fp32", "fp16" | +| `approximate_sync` | bool | false | 近似同期ポリシーを使用するかどうかフラグ | +| `gpu_id` | integer | 0 | CUDA GPUデバイスを選択するためのID | -## 仮定 / 既知の制限 +## 前提条件/既知の制約 ## 参照リポジトリ YOLOX GitHub リポジトリ - + diff --git a/perception/autoware_traffic_light_map_based_detector/README.md b/perception/autoware_traffic_light_map_based_detector/README.md index af0483d71e961..1489e79a41a5b 100644 --- a/perception/autoware_traffic_light_map_based_detector/README.md +++ b/perception/autoware_traffic_light_map_based_detector/README.md @@ -1,42 +1,42 @@ -# `autoware_traffic_light_map_based_detector` パッケージ +# `autoware_traffic_light_map_based_detector`パッケージ ## 概要 -`autoware_traffic_light_map_based_detector` は、HDマップに基づいて画像内に交通信号が表示される位置を計算します。 +`autoware_traffic_light_map_based_detector`は、HDマップに基づいて画像内に交通信号が表示される場所を計算します。 -キャリブレーションと振動の誤差をパラメータとして入力できます。誤差に応じて検出された領域のサイズが変化します。 +補正および振動の誤差をパラメータとして入力できると、検出された関心領域の大きさは誤差に応じて変化します。 ![traffic_light_map_based_detector_result](./docs/traffic_light_map_based_detector_result.svg) -ノードがルート情報を取得する場合、そのルート上の交通信号のみを対象にします。 -ノードがルート情報を取得しない場合、半径200メートル以内の交通信号で、交通信号とカメラ間の角度が40度未満のもののみを対象にします。 +このノードがルート情報を取得すると、ルート上の交通信号のみを対象にします。ルート情報を受信しない場合は、半径200m以内、かつ交通信号とカメラ間の角度が40度未満の範囲を対象にします。 ## 入力トピック -| 名称 | タイプ | 説明 | -| -------------------- | ------------------------------------- | -------------------------- | -| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクタマップ | -| `~input/camera_info` | sensor_msgs::CameraInfo | ターゲットカメラパラメータ | -| `~input/route` | autoware_planning_msgs::LaneletRoute | オプション: ルート | +| 名称 | 型 | 説明 | +|---|---|---| +| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクトルマップ | +| `~input/camera_info` | `sensor_msgs::CameraInfo` | ターゲットカメラパラメータ | +| `~input/route` | `autoware_planning_msgs::LaneletRoute` | オプション: ルート | ## 出力トピック -| 名前 | 型 | 説明 | -| ---------------- | ------------------------------------------- | ---------------------------------------- | -| `~output/rois` | tier4_perception_msgs::TrafficLightRoiArray | カメラ情報に対応する画像中の信号機の位置 | -| `~expect/rois` | tier4_perception_msgs::TrafficLightRoiArray | オフセットなしで画像内の信号機の位置 | -| `~debug/markers` | visualization_msgs::MarkerArray | デバッグ用の可視化 | +| 名称 | 型 | 説明 | +|---|---|---| +| `~output/rois` | tier4_perception_msgs::TrafficLightRoiArray | カメラ情報に対応する画像内の信号機の位置 | +| `~expect/rois` | tier4_perception_msgs::TrafficLightRoiArray | オフセットなしの画像内の信号機の位置 | +| `~debug/markers` | visualization_msgs::MarkerArray | デバッグ用のビジュアライゼーション | ## ノードパラメータ -| パラメータ | 型 | 説明 | -| ---------------------- | ------ | ----------------------------------------------------------------------------------- | -| `max_vibration_pitch` | double | ピッチ方向の最大誤差。-5~+5の場合、10になります。 | -| `max_vibration_yaw` | double | ヨー方向の最大誤差。-5~+5の場合、10になります。 | -| `max_vibration_height` | double | 高さ方向の最大誤差。-5~+5の場合、10になります。 | -| `max_vibration_width` | double | 幅方向の最大誤差。-5~+5の場合、10になります。 | -| `max_vibration_depth` | double | 奥行き方向の最大誤差。-5~+5の場合、10になります。 | -| `max_detection_range` | double | メートル単位の最大検出範囲。正数でなければなりません | -| `min_timestamp_offset` | double | 対応するtfを検索するときの最小タイムスタンプオフセット | -| `max_timestamp_offset` | double | 対応するtfを検索するときの最大タイムスタンプオフセット | -| `timestamp_sample_len` | double | `min_timestamp_offset`と`max_timestamp_offset`の間の`'post resampling'`のサンプル長 | +| パラメータ | 型 | 説明 | +| ------------------------------ | ------ | ------------------------------------------------------------------- | +| `max_vibration_pitch` | double | ピッチ方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_yaw` | double | ヨー方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_height` | double | 高さ方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_width` | double | 幅方向の最大誤差。-5~+5の場合、10になります。 | +| `max_vibration_depth` | double | 深さ方向の最大誤差。-5~+5の場合、10になります。 | +| `max_detection_range` | double | メートルで表した最大検出範囲。正の値である必要があります | +| `min_timestamp_offset` | double | 対応するtfを検索する際の最小タイムスタンプオフセット | +| `max_timestamp_offset` | double | 対応するtfを検索する際の最大タイムスタンプオフセット | +| `timestamp_sample_len` | double | `min_timestamp_offset`と`max_timestamp_offset`間のサンプリング長 | + diff --git a/perception/autoware_traffic_light_multi_camera_fusion/README.md b/perception/autoware_traffic_light_multi_camera_fusion/README.md index e74f933006a96..5ff813bb943d3 100644 --- a/perception/autoware_traffic_light_multi_camera_fusion/README.md +++ b/perception/autoware_traffic_light_multi_camera_fusion/README.md @@ -1,267 +1,36 @@ -## `traffic_light_multi_camera_fusion` パッケージ +# `traffic_light_multi_camera_fusion` パッケージ -### 概要 +## 概要 -`traffic_light_multi_camera_fusion` は、以下の 2 つのタスクにまとめられる、交通信号の融合を行います。 +`traffic_light_multi_camera_fusion` は、次のように要約できる交通信号のフュージョンを実行します。 -1. 多眼カメラ融合: 別々のカメラで検出された単一の交通信号で行われます。 -2. グループ融合: 同一群内の交通信号で行われます。これには、lanelet2 マップで定義された同じ規制要素 ID を共有する信号が含まれます。 +1. **多重カメラフュージョン:** 異なるカメラによって検出された単一の交通信号に対して実行されます。 +2. **グループフュージョン:** 同じグループ内の交通信号に対して実行されます。グループとは、lanelet2 マップで定義された同じ規制要素 ID を共有する信号です。 -### 入力トピック +## 入力トピック -各カメラについて、以下の 3 つのトピックがサブスクライブされます: +各カメラには、次の 3 つのトピックがサブスクライブされています。 -| 名称 | 種類 | 説明 | -| -------------------------------------- | ------------------------------------------------ | -------------------------------------------------- | -| `~//camera_info` | `sensor_msgs::CameraInfo` | `traffic_light_map_based_detector`からのカメラ情報 | -| `~//rois` | `tier4_perception_msgs::TrafficLightRoiArray` | `traffic_light_fine_detector`からの検出ROI | -| `~//traffic_signals` | `tier4_perception_msgs::TrafficLightSignalArray` | `traffic_light_classifier`からの分類結果 | +| 名称 | 型 | 説明 | +| ------------------------------------- | --------------------------------------------------- | ---------------------------------------------------- | +| `~//camera_info` | sensor_msgs::CameraInfo | traffic_light_map_based_detectorのカメラ情報 | +| `~//rois` | tier4_perception_msgs::TrafficLightRoiArray | traffic_light_fine_detectorの検出ROI | +| `~//traffic_signals` | tier4_perception_msgs::TrafficLightSignalArray | traffic_light_classifierの分類結果 | -これらのトピックを手動で設定する必要はありません。`camera_namespaces` パラメータを提供するだけで、ノードは `` を自動的に抽出し、サブスクライバーを作成します。 +これらのトピックを手動で設定する必要はありません。`camera_namespaces`パラメータを提供するだけで、ノードは自動的に``を抽出し、サブスクライバーを作成します。 ## 出力トピック -| 名 | タイプ | 説明 | -| -------------------------- | ------------------------------------------------- | ------------------ | -| `~/output/traffic_signals` | autoware_perception_msgs::TrafficLightSignalArray | 交通信号の融合結果 | +| 名前 | タイプ | 説明 | +| -------------------------- | ------------------------------------------------- | ---------------------------------- | +| `~/output/traffic_signals` | autoware_perception_msgs::TrafficLightSignalArray | 交通信号フュージョン結果 | ## ノードパラメータ ---- +| パラメータ | タイプ | 説明 | +| ---------------------- | --------------- | --------------------------------------------------- | +| `camera_namespaces` | vector\ | 融合するカメラの名前空間 | +| `message_lifespan` | double | 融合の最大タイムスタンプスパン | +| `approximate_sync` | bool | 近似同期モードで動作するかどうか | +| `perform_group_fusion` | bool | グループ融合を実行するかどうか | -### Dynamic obstacles trajectory predictor (Dynamic tracker) - -- Name: `~dynamic_tracker/tracking_time_window` - - - Type: Float - - Default value: 4.0 - - Description: オブスタクルを追跡するための時間窓 (秒) - -- Name: `~dynamic_tracker/min_time_gap` - - - Type: Float - - Default value: 1.0 - - Description: Dynamic Planning によって生成される経路上で、オブジェクトが追跡されるために必要な最小のタイムギャップ (秒) - -- Name: `~dynamic_tracker/max_time_gap` - - - Type: Float - - Default value: 2.0 - - Description: Dynamic Planning によって生成される経路上で、オブジェクトが追跡されるために必要な最大タイムギャップ (秒) - -- Name: `~dynamic_tracker/acceleration_v2` - - - Type: Float - - Default value: 2.0 - - Description: オブジェクトの加速度の最大値 (m/s^2) - -- Name: `~dynamic_tracker/longitudinal_jerk_v2` - - - Type: Float - - Default value: 4.0 - - Description: オブジェクトの縦方向ジャークの最大値 (m/s^3) - -- Name: `~dynamic_tracker/lateral_jerk_v2` - - - Type: Float - - Default value: 8.0 - - Description: オブジェクトの横方向ジャークの最大値 (m/s^3) - -- Name: `~dynamic_tracker/use_v_and_a` - - - Type: Bool - - Default value: False - - Description: 速度と加速度を予測に使用するかどうか - -- Name: `~dynamic_tracker/consider_turning_radius` - - - Type: Bool - - Default value: True - - Description: 予測の際、オブジェクトの旋回半径を考慮するかどうか - -- Name: `~dynamic_tracker/max_obstacle_age` - - - Type: Float - - Default value: 1.0 - - Description: オブジェクトが追跡されるために必要な最大年齢 (秒) - -- Name: `~dynamic_tracker/pcd_post_resampling` - - - Type: Bool - - Default value: False - - Description: `post resampling`後に点群を使用するかどうか - -- Name: `~dynamic_tracker/estimate_past_pose` - - - Type: Bool - - Default value: True - - Description: オブジェクトの過去の位置を推定するかどうか - -- Name: `~dynamic_tracker/acceleration_lin_deceleration_v2` - - Type: Float - - Default value: 2.0 - - Description: オブジェクトの直線減速度の最大値 (m/s^2) - -### Obstacle slice planner - -- Name: `~obstacle_slice_planner/enable_rollout_detection` - - - Type: Bool - - Default value: True - - Description: ロールアウト検出を有効にするかどうか - -- Name: `~obstacle_slice_planner/rollout_detection_min_lane_idx` - - - Type: Int - - Default value: 1 - - Description: レーンインデックスの最小値。これ未満のレーンのオブジェクトはロールアウト検出の対象外 - -- Name: `~obstacle_slice_planner/rollout_detection_max_lane_idx` - - - Type: Int - - Default value: 2 - - Description: レーンインデックスの最大値。これ以上のレーンのオブジェクトはロールアウト検出の対象外 - -- Name: `~obstacle_slice_planner/rollout_detection_min_ego_v` - - - Type: Float - - Default value: 0.1 - - Description: ロールアウト検出に使用する、自車速度の最小値 (m/s) - -- Name: `~obstacle_slice_planner/rollout_detection_min_v_diff` - - - Type: Float - - Default value: 0.5 - - Description: ロールアウト検出に使用する、自車と対象オブジェクトの速度差の最小値 (m/s) - -- Name: `~obstacle_slice_planner/rollout_detection_horizontal_distance` - - - Type: Float - - Default value: 15.0 - - Description: ロールアウト検出に使用する、自車と対象オブジェクトの水平距離の最大値 (m) - -- Name: `~obstacle_slice_planner/rollout_detection_time_offset` - - - Type: Float - - Default value: 3.0 - - Description: ロールアウト検出に使用する、タイムオフセットの最大値 (秒) - -- Name: `~obstacle_slice_planner/rollout_detection_speed_limit` - - - Type: Float - - Default value: 20.0 - - Description: ロールアウト検出に使用する、道路の速度制限 (m/s) - -- Name: `~obstacle_slice_planner/rollout_detection_lateral_interval` - - - Type: Float - - Default value: 2.0 - - Description: ロールアウト検出に使用する、横方向のインターバル (m) - -- Name: `~obstacle_slice_planner/rollout_detection_grid_resolution` - - - Type: Float - - Default value: 1.0 - - Description: ロールアウト検出に使用する、グリッド解像度 (m) - -- Name: `~obstacle_slice_planner/rollout_detection_overlap_threshold` - - - Type: Float - - Default value: 0.5 - - Description: ロールアウト検出に使用する、オブジェクトの重なり量のしきい値 - -- Name: `~obstacle_slice_planner/rollout_detection_angle_diff_threshold` - - - Type: Float - - Default value: 20.0 - - Description: ロールアウト検出に使用する、オブジェクトの方向角差のしきい値 (deg) - -- Name: `~obstacle_slice_planner/candidate_index_list` - - - Type: IntList - - Default value: [] - - Description: 候補となるスライスインデックスのリスト - -- Name: `~obstacle_slice_planner/candidate_pose_list` - - Type: PoseArray - - Default value: [] - - Description: 候補となる自車位置のリスト - -### Motion planner - -- Name: `~motion_planner/sample_interval` - - - Type: Float - - Default value: 0.5 - - Description: サンプリングの間隔 (秒) - -- Name: `~motion_planner/max_sample_number` - - - Type: Int - - Default value: 1000 - - Description: 最大サンプリング数 - -- Name: `~motion_planner/max_calc_time` - - - Type: Float - - Default value: 0.1 - - Description: Motion Planning の最大計算時間 (秒) - -- Name: `~motion_planner/speed_limit` - - - Type: Float - - Default value: 20.0 - - Description: 経路生成時の速度制限 (m/s) - -- Name: `~motion_planner/max_acceleration` - - - Type: Float - - Default value: 2.0 - - Description: 経路生成時の最大加速度 (m/s^2) - -- Name: `~motion_planner/max_lateral_jerk` - - - Type: Float - - Default value: 4.0 - - Description: 経路生成時の最大横方向ジャーク (m/s^3) - -- Name: `~motion_planner/max_lateral_acceleration` - - - Type: Float - - Default value: 2.0 - - Description: 経路生成時の最大横方向加速度 (m/s^2) - -- Name: `~motion_planner/target_speed` - - - Type: Float - - Default value: 10.0 - - Description: Motion Planning のターゲット速度 (m/s) - -- Name: `~motion_planner/min_speed` - - - Type: Float - - Default value: 2.0 - - Description: Motion Planning の最小速度 (m/s) - -- Name: `~motion_planner/enable_smoothed_path` - - - Type: Bool - - Default value: True - - Description: Smooth Path Planning を有効にするかどうか - -- Name: `~motion_planner/smoothed_path_epsilon` - - - Type: Float - - Default value: 0.1 - - Description: Smooth Path Planning のイプシロン値 - -- Name: `~motion_planner/curvature_threshold` - - Type: Float - - Default value - -| パラメータ | 型 | 説明 | -| ---------------------- | -------------- | ------------------------------------ | -| `camera_namespaces` | vector | 融合されるカメラのネームスペース | -| `message_lifespan` | double | 融合されるタイムスタンプの最大スパン | -| `approximate_sync` | bool | 近似同期モードで動作するかどうか | -| `perform_group_fusion` | bool | グループ融合を実行するかどうか | diff --git a/perception/autoware_traffic_light_occlusion_predictor/README.md b/perception/autoware_traffic_light_occlusion_predictor/README.md index 5d30e9e4a17d8..777331f1b89fc 100644 --- a/perception/autoware_traffic_light_occlusion_predictor/README.md +++ b/perception/autoware_traffic_light_occlusion_predictor/README.md @@ -1,36 +1,37 @@ -# Autowareの`autoware_traffic_light_occlusion_predictor`パッケージ +# `autoware_traffic_light_occlusion_predictor` パッケージ ## 概要 -`autoware_traffic_light_occlusion_predictor`は、検出された信号機領域(ROI)を受信し、点群を使用して各領域の閉塞率を計算します。 +`autoware_traffic_light_occlusion_predictor` は検出された交通信号機の ROI を受信し、各 ROI と点群とのオクルージョン率を計算します。 -各信号機ROIに対して、数百個のピクセルが選択され、3D空間に投影されます。次に、カメラの視点から、点群によって遮られている投影ピクセルの数がカウントされ、ROIの閉塞率を計算するために使用されます。次の画像に示すように、赤いピクセルは遮られ、閉塞率は赤いピクセルの数全体のピクセル数で割ったものです。 +各交通信号機の ROI に対して、数百のピクセルが選択され、3D 空間へ投影されます。その後、カメラの視点から、点群によってオクルージョンされる投影ピクセルの数がカウントされ、ROI のオクルージョン率の計算に使用されます。次の画像に示すように、赤いピクセルはオクルージョンされ、オクルージョン率は赤いピクセルの数をピクセル合計数で割ったものです。 ![image](images/occlusion.png) -点群が受信されない場合、またはすべての点群がカメラ画像と非常に大きなタイムスタンプの違いがある場合、各ROIの閉塞率は0に設定されます。 +点群が受信されなかった場合、またはすべての点群がカメラ画像と非常に大きなスタンプの違いがある場合、各 ROI のオクルージョン率は 0 に設定されます。 ## 入力トピック -| 名前 | タイプ | 説明 | -| -------------------- | ------------------------------------------------ | ------------------------ | -| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | vector map | -| `~/input/rois` | `autoware_perception_msgs::TrafficLightRoiArray` | traffic light detections | -| `~input/camera_info` | `sensor_msgs::CameraInfo` | target camera parameter | -| `~/input/cloud` | `sensor_msgs::PointCloud2` | LiDAR point cloud | +| 名称 | 型 | 説明 | +| -------------------- | ---------------------------------------------- | ------------------------ | +| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | +| `~/input/rois` | `autoware_perception_msgs::TrafficLightRoiArray` | 交通信号の検出 | +| `~input/camera_info` | `sensor_msgs::CameraInfo` | カメラパラメータ | +| `~/input/cloud` | `sensor_msgs::PointCloud2` | LiDAR の点群データ | ## 出力トピック -| 名称 | タイプ | 説明 | -| -------------------- | ---------------------------------------------------- | ------------- | -| `~/output/occlusion` | autoware_perception_msgs::TrafficLightOcclusionArray | 各ROIの遮蔽率 | +| Name | Type | Description | +| -------------------- | --------------------------------------------------- | ---------------------------- | +| `~/output/occlusion` | autoware_perception_msgs::TrafficLightOcclusionArray | 各ROIの被覆率 | ## ノードパラメーター -| パラメータ | 型 | 説明 | -| ------------------------------------ | ------ | --------------------------------------------- | -| `azimuth_occlusion_resolution_deg` | double | LiDARポイントクラ​​ウドの方位分解能 (度) | -| `elevation_occlusion_resolution_deg` | double | LiDARポイントクラ​​ウドの仰角分解能 (度) | -| `max_valid_pt_dist` | double | この距離内のポイントは計算に使用される | -| `max_image_cloud_delay` | double | LiDARポイントクラ​​ウドとカメラ画像の最大遅延 | -| `max_wait_t` | double | LiDARポイントクラ​​ウドを待機する最大時間 | +| パラメータ | タイプ | 説明 | +| ------------------------------------ | ------ | ----------------------------------------------------------- | +| `azimuth_occlusion_resolution_deg` | double | LiDAR点群のアジマス分解能(度) | +| `elevation_occlusion_resolution_deg` | double | LiDAR点群の仰角分解能(度) | +| `max_valid_pt_dist` | double | この距離内での点は計算に使用されます | +| `max_image_cloud_delay` | double | LiDAR点群とカメラ画像の最大遅延 | +| `max_wait_t` | double | LiDAR点群を待つ最大時間 | + diff --git a/perception/autoware_traffic_light_visualization/README.md b/perception/autoware_traffic_light_visualization/README.md index 9399170adcb89..b35283fdd5758 100644 --- a/perception/autoware_traffic_light_visualization/README.md +++ b/perception/autoware_traffic_light_visualization/README.md @@ -2,14 +2,14 @@ ## 目的 -`autoware_traffic_light_visualization`は、2つの可視化ノードを含むパッケージです。 +`autoware_traffic_light_visualization`は、2つの視覚化ノードを含むパッケージです。 -- **traffic_light_map_visualizer**は、rviz上で交通信号の色状態と位置をマーカーとして表示するノードです。 -- **traffic_light_roi_visualizer**は、下の図に示すように、交通信号認識ノードの結果(交通信号の状態、位置、分類確率)を入力画像に描き、パブリッシュするノードです。 +- **traffic_light_map_visualizer**は、rviz上のマーカーとして、信号の色状態や位置を表示するノードです。 +- **traffic_light_roi_visualizer**は、以下の図に示すように、入力画像に信号認識ノード(信号状態、位置、識別確率)の結果を描画し、公開するノードです。 -![交通信号ROI可視化](./images/roi-visualization.png) +![信号ROI視覚化](./images/roi-visualization.png) -## 内部動作 / アルゴリズム +## 仕組み / アルゴリズム ## 入出力 @@ -17,150 +17,162 @@ #### 入力 -| 名前 | タイプ | 説明 | -| -------------------- | ---------------------------------------------------- | -------------- | -| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightGroupArray` | 信号機の状態 | -| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | +| 名称 | 種類 | 説明 | +|---|---|---| +| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightGroupArray` | 信号状態 | +| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | -#### 出力 - -**自動運転ソフトウェア** - -**概要** +**自動運転ソフトウェアドキュメント(日本語訳)** -このドキュメントでは、自律走行車両の開発に採用される自動運転ソフトウェアアーキテクチャについて説明します。このアーキテクチャは、業界標準であるAutowareをベースに設計されており、Perception(知覚)、Planning(プランニング)、Control(制御)の3つの主要コンポーネントで構成されています。 +#### 1. Planningモジュール -**アーキテクチャ** +**目的:** 安全かつ効率的な経路を計画する。 -**1. Perception** +**サブモジュール:** -Perceptionコンポーネントは、センサーデータ(カメラ、レーダー、LiDARなど)を使用して、車両の周囲環境を検出し、解釈します。このデータから、以下の情報が生成されます。 +- **Path Planning (経路計画):** 目的地への経路を生成する。 +- **Behavior Planning (行動計画):** 経路上での車両の挙動を決定する。 +- **Trajectory Generator (軌道生成):** 車両の運動軌跡を計算する。 -- オブジェクト検出(車両、歩行者、障害物) -- 車両の周辺認識(自車位置、車線、交通標識) -- 環境マッピング +#### 2. Localizationモジュール -**2. Planning** +**目的:** 自車位置と姿勢を正確に推定する。 -Planningコンポーネントは、Perceptionコンポーネントによって生成された情報を基に、車両の経路を計画します。この経路は、以下の制約を考慮して生成されます。 +**サブモジュール:** -- 交通規則 -- 速度制限 -- 障害物回避 -- ドライバの意図(例:ウインカーからの入力) +- **Sensor Fusion:** GNSS、IMU、LiDARなどの複数のセンサーから情報を融合する。 +- **Mapping:** 環境マップを構築し、自車位置を推定する。 +- **State Estimation:** 自車位置と姿勢の確率的推定を生成する。 -**3. Control** +#### 3. Perceptionモジュール -Controlコンポーネントは、Planningコンポーネントによって生成された経路に基づいて、車両を制御します。これには以下の機能が含まれます。 +**目的:** 周囲環境を認識し、物体や障害物を特定する。 -- ステアリング角制御 -- スロットル制御 -- ブレーキ制御 +**サブモジュール:** -**リアルタイム処理** +- **Object Detection:** 車両、歩行者、障害物などの物体を検出する。 +- **Free Space Estimation:** 走行可能な領域を特定する。 +- **Lane Detection:** 車線を検出し、自車位置の把握を改善する。 -このアーキテクチャは、リアルタイムで処理されます。つまり、ソフトウェアはセンサーデータを受け取り、環境を認識し、経路を計画し、車両を制御するために継続的に実行されます。 +#### 4. Controlモジュール -**エラー処理** +**目的:** 車両の動きを制御し、安全で快適な走行を実現する。 -このアーキテクチャには、以下のエラー処理メカニズムが含まれています。 +**サブモジュール:** -- センサーデータの冗長性(複数のセンサーを使用) -- Planningの冗長性(複数のPlanningアルゴリズムを使用) -- Controlの冗長性(複数のアクチュエータを使用) +- **Longitudinal Control:** 加速と減速を制御する。 +- **Lateral Control:** ヨーレートとステアリングを制御する。 +- **Controller Tuning**: 制御パラメータを調整する。 -**テストと検証** +#### 5. その他のコンポーネント -このアーキテクチャのテストと検証は、以下の方法で行われます。 +**Communication:** 他車両やインフラストラクチャとの通信を処理する。 +**Decision Making:** 運転状況を評価し、適切な行動を決定する。 +**Diagnostics:** システムの健全性を監視し、エラーを検出する。 +**Visualization:** センサーデータと計算結果を視覚化する。 -- シミュレーション -- 屋外試験(公道上のテスト) -- `post resampling`の解析 +#### 6. 主要技術 -**業界における関連性** +- **SLAM (Simultaneous Localization and Mapping)**: 位置推定とマッピングを同時に行う。 +- **'post resampling'** パティクルフィルター: より正確な推定を可能にする。 +- **AI (Artificial Intelligence)**: 物体検出や経路計画に使用される。 +- **ROS (Robot Operating System)**: モジュールの統合に使用される。 -このアーキテクチャは、自律走行車両の業界で広く採用されています。そのモジュール性と拡張性が、さまざまな車両タイプや運転シナリオに対応することを可能にします。 +#### 7. Autoware (オープンソース自動運転ソフトウェア) -**用語集** +**特徴:** -- Perception:車両の周囲環境の認識と解釈 -- Planning:車両の経路計画 -- Control:車両の制御とアクチュエーション -- `post resampling`:シミュレーションデータを使用して、実際に収集されたデータのテストを行う手法 -- velocity逸脱量:速度逸脱の量 -- acceleration逸脱量:加速度逸脱の量 +- 自動運転機能の開発と展開を簡素化するプラットフォーム。 +- Planning、Localization、Perception、Controlなどのコンポーネントを含む。 +- コミュニティ主導で開発されており、活発な開発が行われている。 -| 名称 | タイプ | 説明 | -| ------------------------ | -------------------------------------- | ------------------------------------ | -| `~/output/traffic_light` | `visualization_msgs::msg::MarkerArray` | 信号機のステータスを示すマーカー配列 | +| Name | Type | Description | +| ------------------------ | -------------------------------------- | ---------------------------------------------------- | +| `~/output/traffic_light` | `visualization_msgs::msg::MarkerArray` | マーカーアレイが信号の状態を示します | ### traffic_light_roi_visualizer #### 入力 -| 名目 | タイプ | 説明 | -| --------------------------------- | -------------------------------------------------- | --------------------------------------------------------- | -| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightArray` | 信号状態 | -| `~/input/image` | `sensor_msgs::msg::Image` | 知覚カメラでキャプチャした画像 | -| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `traffic_light_fine_detector` によって検出された ROI | -| `~/input/rough/rois` (オプション) | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `traffic_light_map_based_detector` によって検出された ROI | +| 名前 | タイプ | 説明 | +| ----------------------------- | -------------------------------------------------- | -------------------------------------------------------- | +| `~/input/tl_state` | `tier4_perception_msgs::msg::TrafficLightArray` | 信号の状態 | +| `~/input/image` | `sensor_msgs::msg::Image` | 検知カメラで取得した画像 | +| `~/input/rois` | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `traffic_light_fine_detector` で検知された ROI | +| `~/input/rough/rois` (オプション) | `tier4_perception_msgs::msg::TrafficLightRoiArray` | `traffic_light_map_based_detector` で検知された ROI | #### 出力 -**自動運転ソフトウェアに関するドキュメント** - -本ドキュメントは、AutowareのBehavior Planningコンポーネントの設計概要を示しています。 - -**概要** +説明: +このドキュメントは、自動運転ソフトウェアAutowareのPlanningコンポーネントに関する設計仕様を記載しています。 -Behavior Planningコンポーネントは、他のモジュールから提供された情報に基づいて、自律走行車の安全かつ効率的な経路を計画します。このコンポーネントは、次の主要なタスクを実行します。 +**目的** +Planningコンポーネントの目的は、自律走行車両の経路と速度を計画することです。Planningコンポーネントは、次のタスクを実行します。 -- 目標軌道の生成 -- 経路追従の計画 -- 障害物の回避 -- 安全性の評価 +- 自車位置の追跡 +- 周囲環境の感知 +- 障害物の検出と予測 +- 経路計画 +- 速度計画 **設計** +Planningコンポーネントは、以下で構成されています。 -Behavior Planningコンポーネントは、以下のモジュールで構成されています。 +- **Perceptionモジュール:** 周囲環境を認識します。 +- **Localizationモジュール:** 自車位置を追跡します。 +- **Predictionモジュール:** 障害物を検出し、予測します。 +- **RoutePlanningモジュール:** 経路を計画します。 +- **SpeedPlanningモジュール:** 速度を計画します。 -- **Goal Planningモジュール:** 目標軌道の生成を担当します。 -- **Path Planningモジュール:** 経路追従の計画を担当します。 -- **Obstacle Avoidanceモジュール:** 障害物の回避を担当します。 -- **Safety Assessmentモジュール:** 安全性の評価を担当します。 +**入出力** -**動作** +**入力:** +- Perceptionモジュールからの感知データ +- Localizationモジュールからの自車位置データ +- 障害物検出と予測モジュールからの予測データ -Behavior Planningコンポーネントは、以下の順序で動作します。 +**出力:** +- RoutePlanningモジュールから計画された経路 +- SpeedPlanningモジュールから計画された速度 +- Planningコンポーネントの状態と診断情報 -1. **目標軌道の生成:** Goal Planningモジュールは、自車位置と目標の位置に基づいて目標軌道を生成します。 -2. **経路追従の計画:** Path Planningモジュールは、目標軌道に従って、障害物や他の交通参加者を考慮した経路を計画します。 -3. **障害物の回避:** Obstacle Avoidanceモジュールは、経路上の障害物を検出し、それらを回避する経路変更を計画します。 -4. **安全性の評価:** Safety Assessmentモジュールは、計画された経路の安全性を評価し、速度逸脱量や加速度逸脱量が適切な範囲内であることを確認します。 +**機能** +Planningコンポーネントは、以下を含む数多くの機能を実行します。 -**インターフェース** - -Behavior Planningコンポーネントは、他のAutowareコンポーネントと以下のインターフェースで通信します。 +- **リアルタイム経路計画:** Planningコンポーネントは、リアルタイムで経路を計画します。 +- **障害物回避:** Planningコンポーネントは、障害物を回避する経路を計画します。 +- **交通信号制御:** Planningコンポーネントは、交通信号機の制御情報を考慮して経路を計画します。 +- **速度制御:** Planningコンポーネントは、安全かつ効率的な速度を計画します。 +- **バックアップ機能:** Planningコンポーネントは、障害が発生した場合のバックアップ機能を提供します。 -- **Perceptionモジュール:** 障害物や他の交通参加者に関する情報を提供します。 -- **Localizationモジュール:** 自車位置に関する情報を提供します。 -- **Controlモジュール:** 生成された経路を実行します。 +**インターフェース** +Planningコンポーネントは、以下のような他のAutowareコンポーネントとインターフェースします。 -**検証** +- Perceptionモジュール +- Localizationモジュール +- Controlモジュール -Behavior Planningコンポーネントは、シミュレーションと実車テストの両方で検証されています。このコンポーネントは、さまざまな運転状況において、安全かつ効率的に動作することが実証されています。 +**要件** +Planningコンポーネントは、以下の要件を満たす必要があります。 -**今後の改善** +- **リアルタイム処理:** Planningコンポーネントは、リアルタイムで処理を実行する必要があります。 +- **精度:** Planningコンポーネントは、高精度の経路と速度を計画する必要があります。 +- **堅牢性:** Planningコンポーネントは、さまざまな運転状況で堅牢に動作する必要があります。 +- **拡張性:** Planningコンポーネントは、新しい機能やアルゴリズムを簡単に統合できるように拡張可能である必要があります。 -Behavior Planningコンポーネントは、継続的に改善されています。今後の改善には、次のようなものが含まれます。 +**評価** +Planningコンポーネントは、以下のようなメトリクスを使用して評価されます。 -- 計画の品質の向上 -- 計算効率の向上 -- 安全性に関する評価能力の向上 +- 経路計画の正確性 +- 障害物回避の成功率 +- 交通信号制御への準拠率 +- 速度計画の効率性 +- バックアップ機能の信頼性 +- `post resampling`の速度 -| Name | Type | Description | -| ---------------- | ------------------------- | --------------- | -| `~/output/image` | `sensor_msgs::msg::Image` | ROI付き出力画像 | +| 名前 | タイプ | 説明 | +|--------------------|----------------------------|---------------------| +| `~/output/image` | `sensor_msgs::msg::Image` | ROI付き出力画像 | ## パラメータ @@ -174,12 +186,13 @@ Behavior Planningコンポーネントは、継続的に改善されています {{json_to_markdown("perception/autoware_traffic_light_visualization/schema/traffic_light_visualization.schema.json")}} -## 仮定/既知の制限 +## 前提条件/既知の制限 + +## (オプション) エラー検出と処理 -## (任意) エラー検知と処理 +## (オプション) パフォーマンス特性 -## (任意) パフォーマンス特性 +## (オプション) 参照/外部リンク -## (任意) 参照/外部リンク +## (オプション) 将来の拡張/未実装部分 -## (任意) 将来の拡張/未実装部分 diff --git a/perception/perception_utils/README.md b/perception/perception_utils/README.md index 6b877e2b05683..379511ce79663 100644 --- a/perception/perception_utils/README.md +++ b/perception/perception_utils/README.md @@ -2,4 +2,5 @@ ## 目的 -このパッケージには、知覚モジュール全体で役立つ一般的な関数のライブラリが含まれています。 +このパッケージには、知覚モジュール全体で役立つ共通関数のライブラリが含まれています。 + diff --git a/planning/README.md b/planning/README.md index 367a0608d81cc..b9913731821f2 100644 --- a/planning/README.md +++ b/planning/README.md @@ -1,49 +1,58 @@ -# Planning コンポーネント +## Planningコンポーネント -## 概要 +## はじめに -Autoware.Universe Planning モジュールは、広範なオープンソース自動運転ソフトウェアスタックにおける最先端のコンポーネントです。これらのモジュールは自動車両のナビゲーションにおいて重要な役割を果たし、ルートプランニング、動的障害物回避、さまざまな交通状況へのリアルタイム適応を巧みに処理します。 +Autoware.Universe Planningモジュールは、広範なオープンソース自動運転ソフトウェアスタックの最先端コンポーネントです。これらのモジュールは、自律走行のナビゲーションにおいて重要な役割を果たし、ルート計画、動的障害物回避、さまざまな交通状況へのリアルタイム適応を巧みに処理します。 -- Planning コンポーネントの高レベル概念については、[Planning コンポーネント設計ドキュメント](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/)を参照してください。 -- Planning コンポーネントが他のコンポーネントとどのように連携するかを理解するには、[Planning コンポーネントのインターフェイスドキュメント](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/planning/)を参照してください。 -- [ノードダイアグラム](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/node-diagram/)は、Planning モジュールを含む Autoware.Universe のすべてのモジュールの相互作用、入力、出力を図示しています。 +- Planningコンポーネントのハイレベルな概念については、[Planning Component Design Document](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/)を参照してください。 +- Planningコンポーネントが他のコンポーネントとどのように相互作用するかを理解するには、[Planning Component Interface Document](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/planning/)を参照してください。 +- [Node Diagram](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/node-diagram/)は、Planningモジュールを含め、Autoware.Universe内のすべてのモジュールの相互作用、入力、出力を示しています。 -## Planning モジュール +## Planningモジュール -Planning コンポーネントの **モジュール** は、ソフトウェアのプランニングシステムを共同で形成するさまざまなコンポーネントを指します。これらのモジュールは、自動車両のプランニングに必要なさまざまな機能をカバーしています。Autoware の Planning モジュールはモジュール化されており、ユーザーは構成を変更することでどの機能を有効にするかをカスタマイズできます。このモジュール設計により、自動車両での運用におけるさまざまなシナリオと要件に柔軟に適応できます。 +Planningコンポーネントの**モジュール**は、ソフトウェアの計画システムを共同で形成するさまざまなコンポーネントを表します。これらのモジュールは、自律走行計画に必要な機能の範囲をカバーしています。AutowareのPlanningモジュールはモジュール化されており、ユーザーは構成を変更することで有効にする機能をカスタマイズできます。このモジュール設計により、自律走行におけるさまざまなシナリオや要件に柔軟に対応できます。 -### Planning モジュールの有効化または無効化 +### Planningモジュールの有効化と無効化 -モジュールの有効化と無効化には、キー構成ファイルと起動ファイルの設定を管理することが必要です。 +モジュールの有効化と無効化には、主要な構成ファイルと起動ファイルの設定を管理することが含まれます。 -### 構成のキーファイル +### 構成用のキーファイル -`default_preset.yaml`ファイルはプライマリ構成ファイルとして機能し、そこで Planning モジュールを無効化または有効化できます。さらに、ユーザーはさまざまなモーションプランナー間でモーションプランナーの種類を設定することもできます。たとえば: +`default_preset.yaml`ファイルはプライマリ構成ファイルとして機能し、計画モジュールを無効化または有効化できます。さらに、ユーザーはさまざまなMotion PlannerでMotion Plannerのタイプを設定することもできます。たとえば: -- `launch_avoidance_module`: Avoidance モジュールを有効にする場合は `true` に設定し、無効にする場合は `false` に設定します。 -- `motion\_stop\_planner\_type`: `default` を `obstacle\_stop\_planner` または `obstacle\_cruise\_planner` のいずれかに設定します。 +- `launch_avoidance_module`: `true`に設定して回避モジュールを有効にするか、`false`に設定して無効にします。 +- `motion_stop_planner_type`: `default`を`obstacle_stop_planner`または`obstacle_cruise_planner`に設定します。 !!! note - `default_preset.yaml` を表示するには [ここ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/preset/default_preset.yaml)をクリックします。 + `default_preset.yaml`を表示するには[ここ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/preset/default_preset.yaml)をクリックしてください。 + +[起動ファイル](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving)は、動作パスプランナーのノードが実行されているときに構成を適用するために、`default_preset.yaml`で定義された設定を参照します。たとえば、`tier4_planning_launch/launch/scenario_planning/lane_driving/config/avoidance/conf/default_conf.yaml`の`avoidance.enable_module`パラメーターは、以下のように設定されます: + +``` +avoidance: + enable_module: ${launch_avoidance_module} +``` + +これにより、`default_preset.yaml`の`launch_avoidance_module`設定が、回避モジュールが有効化または無効化されるかどうかを決定するようになります。 -[起動ファイル](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving) は、`default_preset.yaml` で定義された設定を参照して、動作経路プランナーのノードが実行されているときに構成を適用します。 ```xml ``` -launch_avoidance_module から `default_preset.yaml` に対応。 + соответствует `default_preset.yaml` の `launch_avoidance_module` に対応します。 + +### パラメーター設定 -### パラメータ設定 +構成可能なパラメーターは複数あり、ユーザーは[こちら](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning)で変更するオプションがあります。ただし、パラメーターの設定がすべて `rqt_reconfigure` から調整できるわけではありません。変更内容が有効になるようにするには、パラメーターを変更してから Autoware を再起動してください。さらに、各パラメーターの詳細情報は、Planning タブにある対応するドキュメントに記載されています。 -設定可能なパラメータが数多く用意されており、ユーザーは [こちら](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning) で変更できます。すべてのモジュールが `rqt_reconfigure` を介して調整できるわけではないことに注意してください。変更を有効にするには、パラメータを変更してから Autoware を再起動します。さらに、各パラメータの詳細情報は、プランニングタブの下にある対応するドキュメントに記載されています。 +### Autoware にカスタムモジュールを統合するためのステップバイステップガイド -### Autoware へのカスタムモジュールの統合: 段階的なガイド +このガイドでは、カスタムモジュールを Autoware に統合するための手順を説明します。 -このガイドでは、カスタムモジュールを Autoware に統合する手順について説明します。 +- モジュールを `default_preset.yaml` ファイルに追加します。例: -- デフォルトパラメータ `default_preset.yaml` ファイルにモジュールを追加します。例: ```yaml - arg: @@ -51,7 +60,8 @@ launch_avoidance_module から `default_preset.yaml` に対応。 default: "true" ``` -- モジュールを [launcher](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning) に統合します。例: [behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml) +- [ランチャー](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning)にモジュールを組み込みます。例えば、[behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml)で: + ```xml @@ -63,8 +73,9 @@ launch_avoidance_module から `default_preset.yaml` に対応。 /> ``` -- 適用可能な場合、パラメータフォルダを適切な既存のパラメータフォルダ内に配置します。たとえば、次のような[交差点モジュールのパラメータ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml)は[behavior_velocity_planner](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner)内にあります。 -- [tier4_planning_component.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/components/tier4_planning_component.launch.xml)に、パラメータのパスを挿入します。たとえば、次のような`behavior_velocity_planner_intersection_module_param_path`を使用します。 +- 該当する場合、パラメータフォルダを適切な既存のパラメータフォルダ内に配置します。たとえば、[インターセクションモジュールのパラメータ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml)は[behavior_velocity_planner](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner)内にあります。 +- [tier4_planning_component.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/components/tier4_planning_component.launch.xml)にパラメータのパスを挿入します。たとえば、`behavior_velocity_planner_intersection_module_param_path`が使用されます。 + ```xml @@ -72,44 +83,46 @@ launch_avoidance_module から `default_preset.yaml` に対応。 - 対応するランチャー内でパラメータパスの変数を定義します。たとえば、[behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/04aa54bf5fb0c88e70198ca74b9ac343cc3457bf/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml#L191) + ```xml ``` -!!! 注意 +!!! note - 追加したい特定のモジュールに応じて、関連ファイルと手順が異なる場合があります。このガイドは、一般的な概要を提供し、出発点として機能します。これらの手順をモジュールの詳細に合わせて調整することが重要です。 + 追加したい特定のモジュールに応じて、関連ファイルと手順が異なる場合があります。このガイドでは、一般的な概要と出発点を提供しています。これらの手順をモジュールの特異性に適応することが重要です。 -## コミュニティ主導の取り組みに参加する +## コミュニティ主導の取り組みへの参加 -Autoware はコミュニティコラボレーションを重視しています。大小を問わず、すべての貢献は私たちにとって貴重です。バグの報告、改善の提案、新しいアイデアの提供、その他考えられることなど、すべてを歓迎します。 +Autowareはコミュニティの協力を重視しています。大小を問わず、すべての貢献は私たちにとって貴重です。バグの報告、改善の提案、新しいアイデアの提供など、他に考え付くものが何でもあります - 私たちはすべてを歓迎します。 -### 貢献の仕方 +### 貢献する方法 -貢献する準備はできていますか?素晴らしい!まず、[貢献ガイドライン](https://autowarefoundation.github.io/autoware-documentation/main/contributing/) にアクセスして、参加に必要なすべての情報を入手してください。これには、バグレポートの提出、機能強化の提案、コードベースへの貢献に関する手順が含まれます。 +貢献する準備はできましたか?素晴らしい!始めに、[貢献ガイドライン](https://autowarefoundation.github.io/autoware-documentation/main/contributing/) にアクセスしてください。そこには、飛び込むために必要な情報がすべて記載されています。これには、バグレポートの送信、機能強化の提案、さらにはコードベースへの貢献に関する指示が含まれます。 -### Planning & Control ワーキンググループミーティングに参加する +### Planning & Controlワーキンググループミーティングへの参加 -Planning & Control ワーキンググループは、コミュニティの不可欠な部分です。私たちは 2 週間ごとに会合して、現在の進捗状況、今後の課題について話し合い、新しいアイデアについてブレインストーミングを行います。これらのミーティングは、私たちの議論や意思決定プロセスに直接貢献する素晴らしい機会です。 +Planning & Controlワーキンググループは、私たちのコミュニティの不可欠な部分です。私たちは2週間ごとに会合して、現在の進捗状況、今後の課題について話し合い、新しいアイデアをブレインストーミングしています。これらのミーティングは、私たちの議論と意思決定プロセスに直接貢献する素晴らしい機会です。 ミーティングの詳細: -- **頻度:** 2 週間ごと -- **曜日:** 木曜日 -- **時間:** 午前 8 時 UTC(午後 5 時 JST) -- **議題:** 現在の進捗状況を議論し、今後の開発を計画します。過去のミーティングの議事録は [こちら](https://github.com/orgs/autowarefoundation/discussions?discussions_q=is%3Aopen+label%3Ameeting%3Aplanning-control-wg+) で確認できます。 +- **頻度**:2週間ごと +- **曜日**:木曜日 +- **時間**:08:00 AM UTC (05:00 PM JST) +- **議題**:現在の進捗を話し合い、今後の開発を計画する。過去のミーティングの議事録はこちら[こちら](https://github.com/orgs/autowarefoundation/discussions?discussions_q=is%3Aopen+label%3Ameeting%3Aplanning-control-wg+)で確認およびコメントできます。 -私たちのミーティングに参加することに興味がありますか?ぜひ参加してください!参加方法の詳細については、次のリンクをご覧ください。[ワーキンググループに参加する方法](https://github.com/autowarefoundation/autoware-projects/wiki/Autoware-Planning-Control-Working-Group#how-to-participate-in-the-working-group)。 +私たちの会議に参加することに興味がありますか?大歓迎です!参加方法の詳細については、次のリンクをご覧ください:[ワーキンググループに参加する方法](https://github.com/autowarefoundation/autoware-projects/wiki/Autoware-Planning-Control-Working-Group#how-to-participate-in-the-working-group)。 ### 引用 -時々、Autoware の Planning Component に特化した論文を公開しています。これらの出版物を閲覧し、あなたの仕事に役立つ貴重な洞察を得ることをお勧めします。それらが役に立ち、プロジェクトで私たちの方法論やアルゴリズムの一部を組み込んだ場合、私たちの論文を引用していただけると非常に助かります。このサポートにより、より広い視聴者にリーチし、この分野への貢献を続けることができます。 +場合によっては、AutowareのPlanningコンポーネントに固有の論文を発行します。これらの出版物を調べて、あなたの仕事に貴重な洞察を得ていただくことをお勧めします。それらが有用であり、プロジェクトに私たちの方法論やアルゴリズムのうちのいずれかを組み込む場合は、私たちの論文を引用していただけると非常に役立ちます。このサポートにより、私たちはより多くの聴衆にリーチし、この分野への貢献を続けることができます。 -Planning Component の [Motion Velocity Smoother](./autoware_velocity_smoother/README.md) モジュールでジャーク制約速度計画アルゴリズムを使用する場合は、関連する論文を引用していただけるようお願いします。 +**Planning**コンポーネントの[**Motion Velocity Smoother**](./autoware_velocity_smoother/README.md)モジュールでJerk Constrained Velocity Planningアルゴリズムを使用する場合は、関連する論文を引用するようお願いいたします。 -Y. 清水、T. 堀部、F. 渡辺、加藤正樹、"[自律移動体のジャーク制約速度計画: 線形計画法アプローチ](https://arxiv.org/abs/2202.10029)"、2022 年国際ロボット工学および自動化会議 (ICRA) +**Y. Shimizu, T. Horibe, F. Watanabe, S. Kato, "[Jerk Constrained Velocity Planning for an Autonomous Vehicle: Linear Programming Approach](https://arxiv.org/abs/2202.10029)", 2022 International Conference on Robotics and Automation (ICRA)** + ```tex @inproceedings{shimizu2022, @@ -120,3 +133,4 @@ Y. 清水、T. 堀部、F. 渡辺、加藤正樹、"[自律移動体のジャー pages={5814-5820}, doi={10.1109/ICRA46639.2022.9812155}} ``` + diff --git a/planning/autoware_costmap_generator/README.md b/planning/autoware_costmap_generator/README.md index 0bbad5dd79649..21fbb1854acb7 100644 --- a/planning/autoware_costmap_generator/README.md +++ b/planning/autoware_costmap_generator/README.md @@ -2,61 +2,62 @@ ## costmap_generator_node -このノードは`PointCloud`と/または`DynamicObjectArray`を読み込み、`OccupancyGrid`と`GridMap`を作成します。`VectorMap(Lanelet2)`はオプションです。 +このノードは`PointCloud`や`DynamicObjectArray`を読み込み、`OccupancyGrid`と`GridMap`を作成します。`VectorMap(Lanelet2)`はオプションです。 ### 入力トピック -| 名称 | タイプ | 説明 | -| ------------------------- | -------------------------------------------- | ------------------------------------------------------------ | -| `~input/objects` | `autoware_perception_msgs::PredictedObjects` | 障害物エリアの予測オブジェクト | -| `~input/points_no_ground` | `sensor_msgs::PointCloud2` | オブジェクトとして検出できない障害物エリアの地上除去ポイント | -| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | 走行可能エリアのベクターマップ | -| `~input/scenario` | `tier4_planning_msgs::Scenario` | ノードの有効化に使用するアクティブ化するシナリオ | +| 名称 | タイプ | 説明 | +| ------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------- | +| `~input/objects` | `autoware_perception_msgs::PredictedObjects` | obstacles エリアの予測オブジェクト | +| `~input/points_no_ground` | `sensor_msgs::PointCloud2` | 物体として検出できない障害物エリアの地表除去済みポイント | +| `~input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | 走行可能なエリアのベクターマップ | +| `~input/scenario` | `tier4_planning_msgs::Scenario` | ノードをアクティベートするアクティブ化対象のシナリオ | ### 出力トピック -| 名前 | タイプ | 説明 | -| ------------------------ | ----------------------- | ---------------------------------------------------------- | -| `~output/grid_map` | grid_map_msgs::GridMap | costmapをGridMapとして表したもの、値の範囲は0.0から1.0 | -| `~output/occupancy_grid` | nav_msgs::OccupancyGrid | costmapをOccupancyGridとして表したもの、値の範囲は0から100 | +| 名称 | 種類 | 説明 | +| ------------------------ | ----------------------- | -------------------------------------------------- | +| `~output/grid_map` | grid_map_msgs::GridMap | GridMapとしてのコストマップ、値は0.0から1.0 | +| `~output/occupancy_grid` | nav_msgs::OccupancyGrid | OccupancyGridとしてのコストマップ、値は0から100 | -### 出力 TF +### 出力TF なし -### 実行方法 - -1. 環境をセットアップするには、コマンド `source install/setup.bash` を実行します。 - -2. ノードを実行するには、`ros2 launch costmap_generator costmap_generator.launch.xml` を実行します。 - -### パラメータ - -| 名前 | タイプ | 説明 | -| ---------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------- | -| `update_rate` | double | タイマーの更新レート | -| `activate_by_scenario` | bool | true の場合、シナリオ(パーキング)によってアクティブ化します。それ以外の場合は、車両がパーキングロット内にある場合にアクティブ化します。 | -| `use_objects` | bool | `~input/objects` を使用するかどうかのフラグ | -| `use_points` | bool | `~input/points_no_ground` を使用するかどうかのフラグ | -| `use_wayarea` | bool | `~input/vector_map` の `wayarea` を使用するかどうかのフラグ | -| `use_parkinglot` | bool | `~input/vector_map` の `parkinglot` を使用するかどうかのフラグ | -| `costmap_frame` | string | 作成された Costmap の座標系 | -| `vehicle_frame` | string | 車両の座標系 | -| `map_frame` | string | マップの座標系 | -| `grid_min_value` | double | Gridmap の最小コスト | -| `grid_max_value` | double | Gridmap の最大コスト | -| `grid_resolution` | double | Gridmap の解像度 | -| `grid_length_x` | int | Gridmap の x 方向のサイズ | -| `grid_length_y` | int | Gridmap の y 方向のサイズ | -| `grid_position_x` | int | 座標系から x 方向へのオフセット | -| `grid_position_y` | int | 座標系から y 方向へのオフセット | -| `maximum_lidar_height_thres` | double | 点群データの最大高さしきい値 | -| `minimum_lidar_height_thres` | double | 点群データの最小高さしきい値 | -| `expand_rectangle_size` | double | オブジェクトの矩形をこの値で拡大します | -| `size_of_expansion_kernel` | int | オブジェクトの Costmap に対するぼかし効果のカーネルサイズ | +### 起動方法 + +1. 環境をセットアップするにはコマンド `source install/setup.bash` を実行します + +2. ノードを起動するには `ros2 launch costmap_generator costmap_generator.launch.xml` を実行します + +### パラメーター + +| Name | Type | Description | +| ---------------------------- | ------ | ---------------------------------------------------------------------------------------------- | +| `update_rate` | double | タイマーの更新レート | +| `activate_by_scenario` | bool | trueの場合、シナリオ「駐車」でアクティベート。そうでない場合、駐車エリア内の車両でアクティベート | +| `use_objects` | bool | `~input/objects`を使用するかどうか | +| `use_points` | bool | `~input/points_no_ground`を使用するかどうか | +| `use_wayarea` | bool | `~input/vector_map`の`wayarea`を使用するかどうか | +| `use_parkinglot` | bool | `~input/vector_map`の`parkinglot`を使用するかどうか | +| `costmap_frame` | string | 生成されたCostmapの座標 | +| `vehicle_frame` | string | 車両の座標 | +| `map_frame` | string | 地図の座標 | +| `grid_min_value` | double | Gridmapの最小コスト | +| `grid_max_value` | double | Gridmapの最大コスト | +| `grid_resolution` | double | Gridmapの解像度 | +| `grid_length_x` | int | Gridmapのx方向の長さ | +| `grid_length_y` | int | Gridmapのy方向の長さ | +| `grid_position_x` | int | x方向の座標からのオフセット | +| `grid_position_y` | int | y方向の座標からのオフセット | +| `maximum_lidar_height_thres` | double | 点群データの最大高さ閾値(vehicle_frameに対して相対的) | +| `minimum_lidar_height_thres` | double | 点群データの最小高さ閾値(vehicle_frameに対して相対的) | +| `expand_rectangle_size` | double | オブジェクトの矩形をこの値で拡張 | +| `size_of_expansion_kernel` | int | オブジェクトのCostmapにぼかし効果をかけるためのカーネルサイズ | ### フローチャート + ```plantuml @startuml title onTimer @@ -90,3 +91,4 @@ endif stop @enduml ``` + diff --git a/planning/autoware_external_velocity_limit_selector/README.md b/planning/autoware_external_velocity_limit_selector/README.md index 1dd5e318dd806..0115250e4ef6c 100644 --- a/planning/autoware_external_velocity_limit_selector/README.md +++ b/planning/autoware_external_velocity_limit_selector/README.md @@ -1,321 +1,92 @@ -## 外部速度制限セレクタ +# 外部速度制限セレクター ## 目的 -`external_velocity_limit_selector_node` は、外部速度制限の一貫性を保つノードです。このモジュールは、次のメッセージをサブスクライブします。 +`external_velocity_limit_selector_node`は外部速度制限の一貫性を保つノードです。このモジュールは次のものをサブスクライブします。 -1. **API** が送信した速度制限コマンド -2. **Autoware 内部モジュール** が送信した速度制限コマンド +1. **API**によって送信される速度制限コマンド +2. **Autoware内部モジュール**によって送信される速度制限コマンド -VelocityLimit.msg には、**最大速度**だけでなく、減速時の **加速度/ジャーク制約** に関する情報も含まれます。`external_velocity_limit_selector_node` は、API と Autoware 内部モジュールから送信されたすべての減速ポイントと最大速度を保護する **最も厳しい速度制限** を計算するために、最も低い速度制限と最も高いジャーク制約を統合します。 +VelocityLimit.msgには、**最大速度**だけでなく、減速時の**加速度/ジャーク制約**に関する情報も含まれています。`external_velocity_limit_selector_node`は、APIおよびAutoware内部モジュールによって送信されたすべての減速ポイントと最大速度を保護する**最も厳しい速度制限**を計算するために、最も低い速度制限と最も高いジャーク制約を統合します。 -![セレクタアルゴリズム](./image/external_velocity_limit_selector.png) +![セレクターアルゴリズム](./image/external_velocity_limit_selector.png) -## 内部動作 / アルゴリズム +## 内部動作/アルゴリズム WIP - - -## 入力 - -``` -#!cpp - // API から受信した速度制限 - VelocityLimit api_limit; - - // planner から受信した速度制限 - VelocityLimit planner_limit; - - // current pose - geometry_msgs::PoseStamped current_pose; -``` - -| 名称 | タイプ | 説明 | -| --------------------------------------------------- | ---------------------------------------------- | -------------------------------------------------- | -| `~input/velocity_limit_from_api` | tier4_planning_msgs::VelocityLimit | APIからの速度制限 | -| `~input/velocity_limit_from_internal` | tier4_planning_msgs::VelocityLimit | Autoware内部モジュールからの速度制限 | -| `~input/velocity_limit_clear_command_from_internal` | tier4_planning_msgs::VelocityLimitClearCommand | Autoware内部モジュールからの速度制限クリアコマンド | +| 名前 | タイプ | 説明 | +| --------------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| `~input/velocity_limit_from_api` | tier4_planning_msgs::VelocityLimit | APIからの速度制限 | +| `~input/velocity_limit_from_internal` | tier4_planning_msgs::VelocityLimit | Autoware内部モジュールからの速度制限 | +| `~input/velocity_limit_clear_command_from_internal` | tier4_planning_msgs::VelocityLimitClearCommand | 内部からの速度制限クリアコマンド | ## 出力 -**Global Path Plan** - -- グローバルパス計画 - -**Local Trajectory Plan** - -- ローカルトラジェクトリピュラン - -**Planning** - -- Planning - -**Map Matching** - -- マップマッチング - -**Autoware API** - -- Autoware API - -**Behavior Planning** - -- 行動計画 - -**Motion Planning** - -- モーション計画 - -**Control** - -- 制御 - -**Perception** - -- 知覚 - -**Vehicle Dynamics** - -- 車両運動力学 - -**Sensor** - -- センサー - -**Localization** - -- ローカライズ - -**Post Processing** - -- ポスト処理 - -**Planning** - -- Planning - -**Plotting** - -- プロッティング - -**Best Trajectory Search** - -- 最適トラジェクトリサーチ - -**Clustering** - -- クラスタリング - -**Clustering Parameters** - -- クラスタリングパラメータ - -**Post-resampling** - -- `post-resampling` - -**Downsampling** - -- ダウンサンプリング - -**Interpolation** - -- 補間 +| 名前 | タイプ | 説明 | +| ---------------------- | ---------------------------------- | ------------------------------------------------- | +| `~output/max_velocity` | `tier4_planning_msgs::VelocityLimit` | 最も厳しい速度制限に関する現在の情報 | -**Velocity Violation Threshold** +## パラメーター -- 速度逸脱量閾値 +| パラメータ | タイプ | 説明 | +| ----------------- | ------ | ------------------------------------------ | +| `max_velocity` | double | デフォルト最大速度 [m/s] | +| `normal.min_acc` | double | 最小加速度 [m/ss] | +| `normal.max_acc` | double | 最大加速度 [m/ss] | +| `normal.min_jerk` | double | 最小ジャーク [m/sss] | +| `normal.max_jerk` | double | 最大ジャーク [m/sss] | +| `limit.min_acc` | double | 遵守する最小加速度 [m/ss] | +| `limit.max_acc` | double | 遵守する最大加速度 [m/ss] | +| `limit.min_jerk` | double | 遵守する最小ジャーク [m/sss] | +| `limit.max_jerk` | double | 遵守する最大ジャーク [m/sss] | -**Acceleration Violation Threshold** +## 前提条件 / 制限事項 -- 加速度逸脱量閾値 - -**Jerk Violation Threshold** - -- ジャーク逸脱量閾値 - -**Snap Violation Threshold** - -- スナップ逸脱量閾値 - -**Path Smoothing** - -- パススムージング - -**Uniform B-Spline Smoothing** - -- Uniform B-Splineスムーージング - -**LSF Smoothing** - -- LSFスムージング - -**Self-Motion Smoothing** - -- 自車運動スムージング - -**Generate Trajectory** - -- トラジェクトリ生成 - -**Generate Path** - -- パス生成 - -**Generate Sim Trajectories** - -- シミュレーション用トラジェクトリ生成 - -**Publish Drive Trajectory** - -- 駆動用トラジェクトリ発行 - -**Publish Planning Visualization** - -- Planningビジュアライゼーション発行 - -**Publish Trajectory** - -- トラジェクトリ発行 - -**Publishing** - -- 発行 - -**Publish Pose** - -- 自車位置発行 - -**Publish Stop Trajectory** - -- 停止用トラジェクトリ発行 - -**Publish Turn Signal** - -- 方向指示器発行 - -**Publish Vehicle State** - -- 車両状態発行 - -**Subscribe Map** - -- マップ購読 - -**Subscribe Pose** - -- 自車位置購読 - -**Subscribe Stop Sign** - -- 停止標識購読 - -**Subscription** - -- 購読 - -**Target Planning** - -- ターゲットPlanning - -**Trajectory Converter** - -- トラジェクトリコンバータ - -**Trajectory Optimization** - -- トラジェクトリ最適化 - -**Twist2D** - -- Twist2D - -**Vehicle Model** - -- 車両モデル - -| 名前 | 型 | 説明 | -| ---------------------- | ---------------------------------- | -------------------------------------------- | -| `~output/max_velocity` | tier4_planning_msgs::VelocityLimit | 自車位置における最も厳格な速度制限の最新情報 | - -## パラメータ - -| パラメーター | タイプ | 説明 | -| ----------------- | ------ | -------------------------------- | -| `max_velocity` | double | デフォルト最大速度 [m/s] | -| `normal.min_acc` | double | 最小加速度 [m/ss] | -| `normal.max_acc` | double | 最大加速度 [m/ss] | -| `normal.min_jerk` | double | 最小ジャーク [m/sss] | -| `normal.max_jerk` | double | 最大ジャーク [m/sss] | -| `limit.min_acc` | double | 守られるべき最小加速度 [m/ss] | -| `limit.max_acc` | double | 守られるべき最大加速度 [m/ss] | -| `limit.min_jerk` | double | 守られるべき最小ジャーク [m/sss] | -| `limit.max_jerk` | double | 守られるべき最大ジャーク [m/sss] | - -## 仮定 / 既知の制限事項 - - -## (オプション) エラー検出と処理 +## (省略可) エラー検出と処理 - -## (オプション) パフォーマンス特性 +## (省略可) パフォーマンス特性 - -## (オプション) 参考文献 / 外部リンク +## (省略可) 参考文献 / 外部リンク - -## (オプション) 将来の拡張 / 未実装部分 +## (省略可) 将来の拡張 / 未実装部分 - + diff --git a/planning/autoware_freespace_planner/README.md b/planning/autoware_freespace_planner/README.md index 59c3502a023a6..c54893714f932 100644 --- a/planning/autoware_freespace_planner/README.md +++ b/planning/autoware_freespace_planner/README.md @@ -1,27 +1,27 @@ -## Autoware_freespace_planner +# `autoware_freespace_planner` -## freespace_planner_node +## `freespace_planner_node` -`freespace_planner_node`は、静的/動的障害物のある空間でトラジェクトリを計画するグローバルパスプランナノードです。このノードは現在、`freespace_planning_algorithms`パッケージのハイブリッドA\*検索アルゴリズムに基づいています。rrt\*などの他のアルゴリズムも追加され、将来的には選択可能になります。 +`freespace_planner_node` は、静的/動的障害物のある空間内での経路を計画するグローバルパスプランナーノードです。このノードは現在、`freespace_planning_algorithms` パッケージのハイブリッド A\* 検索アルゴリズムに基づいています。rrt\* などの他のアルゴリズムも追加され、将来選択できるようになります。 -**注意** -トラジェクトリ追従の制約により、出力トラジェクトリは単一方向のパスのみを含むように分割されます。つまり、出力トラジェクトリは前進と後進の両方のトラジェクトリを同時に含みません。 +**注記** +軌跡追従の制約により、出力軌跡は一方向のパスのみを含めるように分割されます。言い換えると、出力軌跡には、前方と後方の軌跡が同時に含まれません。 ### 入力トピック -| 名称 | タイプ | 説明 | -| ----------------------- | ----------------------------- | ---------------------------------------------------------- | -| `~input/route` | autoware_planning_msgs::Route | ルートとゴールポーズ | -| `~input/occupancy_grid` | nav_msgs::OccupancyGrid | 走行可能な領域のコストマップ | -| `~input/odometry` | nav_msgs::Odometry | 車両速度(車両の停止状態をチェックするために使用する) | -| `~input/scenario` | tier4_planning_msgs::Scenario | ノードをアクティベートするためのアクティベートするシナリオ | +| 名前 | 型 | 説明 | +| ----------------------- | ----------------------------- | -------------------------------------------------------- | +| `~input/route` | autoware_planning_msgs::Route | ルートと目標位置 | +| `~input/occupancy_grid` | nav_msgs::OccupancyGrid | 走行可能な領域のコストマップ | +| `~input/odometry` | nav_msgs::Odometry | 車両速度(車両停止のチェック用) | +| `~input/scenario` | tier4_planning_msgs::Scenario | アクティブにするシナリオ(ノードの起動用) | ### 出力トピック -| 名称 | タイプ | 説明 | -| -------------------- | ---------------------------------- | ------------------------------------------ | -| `~output/trajectory` | autoware_planning_msgs::Trajectory | 追従する軌道 | -| `is_completed` | bool (rosパラメータとして実装) | すべての分割された軌道が公開されたかどうか | +| 名前 | 型 | 説明 | +| -------------------- | ---------------------------------- | --------------------------------------------------- | +| `~output/trajectory` | autoware_planning_msgs::Trajectory | 走行すべき軌跡 | +| `is_completed` | bool (rosparamとして実装) | すべての分割された軌跡がパブリッシュされたかどうか | ### 出力TF @@ -29,75 +29,76 @@ ### 起動方法 -1. `freespace_planner.launch` にリマッピング情報を書き込むか、`roslaunch` を実行するときに引数を追加します。 +1. `freespace_planner.launch` にリマッピング情報を記載するか、`roslaunch` 実行時に引数を追加する 2. `roslaunch freespace_planner freespace_planner.launch` -### パラメータ +### パラメーター {{json_to_markdown("planning/autoware_freespace_planner/schema/freespace_planner.schema.json")}} -#### ノードパラメータ - -| パラメータ | 型 | 説明 | -| ---------------------------- | -------------- | ---------------------------------------------------------------------- | -| `planning_algorithms` | 文字列 | ノードで使用されるアルゴリズム | -| `vehicle_shape_margin_m` | 浮動小数 | 計画アルゴリズムのコリジョンマージン | -| `update_rate` | 倍精度浮動小数 | タイマーの更新レート | -| `waypoints_velocity` | 倍精度浮動小数 | 出力軌道の速度(現時点では定速のみをサポート) | -| `th_arrived_distance_m` | 倍精度浮動小数 | 車両が軌道のエンドポイントに到着したかどうかをチェックするしきい値距離 | -| `th_stopped_time_sec` | 倍精度浮動小数 | 車両が停止しているかどうかをチェックするしきい値時間 | -| `th_stopped_velocity_mps` | 倍精度浮動小数 | 車両が停止しているかどうかをチェックするしきい値速度 | -| `th_course_out_distance_m` | 倍精度浮動小数 | 車両がコースから外れたかどうかをチェックするしきい値距離 | -| `th_obstacle_time_sec` | 倍精度浮動小数 | 障害物が軌道上にあるかどうかをチェックするしきい値時間 | -| `vehicle_shape_margin_m` | 倍精度浮動小数 | 車両マージン | -| `replan_when_obstacle_found` | ブール | 障害物が軌道上で見つかったときに再計画するかどうか | -| `replan_when_course_out` | ブール | 車両がコースから外れたときに再計画するかどうか | - -#### Planner の共通パラメータ - -| パラメータ | 種類 | 説明 | -| ------------------------- | ---- | ---------------------------------------- | -| `time_limit` | 数値 | Planning の時間制限 | -| `maximum_turning_ratio` | 数値 | 使用可能な実際の旋回範囲に対する最大比 | -| `turning_steps` | 数値 | 旋回範囲内の旋回ステップ数 | -| `theta_size` | 数値 | 角度の離散化の数 | -| `lateral_goal_range` | 数値 | 横位置の目標範囲 | -| `longitudinal_goal_range` | 数値 | 縦位置の目標範囲 | -| `angle_goal_range` | 数値 | 角度の目標範囲 | -| `curve_weight` | 数値 | 曲線操作に対する追加コスト係数 | -| `reverse_weight` | 数値 | バック動作に対する追加コスト係数 | -| `direction_change_weight` | 数値 | 方向変更に対する追加コスト係数 | -| `obstacle_threshold` | 数値 | 特定のグリッドを障害物と見なすための閾値 | - -#### A\* 探索パラメータ - -| パラメーター | タイプ | 説明 | -| --------------------------- | ------ | ---------------------------------------------------- | -| `search_method` | 文字列 | 検索方法、スタートからゴールへまたはその逆方向 | -| `only_behind_solutions` | ブール | ソリューションをゴールの後ろに制限するかどうか | -| `use_back` | ブール | 後方軌道を使用するかどうか | -| `adapt_expansion_distance` | ブール | 環境に基づいて展開距離を適応する場合 | -| `expansion_distance` | double | ノード遷移の展開距離 | -| `near_goal_distance` | double | ゴール近傍距離のしきい値 | -| `distance_heuristic_weight` | double | ノードのコストを推定するためのヒューリスティック重み | -| `smoothness_weight` | double | 曲率の変化に対するコストファクター | -| `obstacle_distance_weight` | double | 障害物までの距離に対するコストファクター | -| `goal_lat_distance_weight` | double | ゴールからの横方向距離に対するコストファクター | - -#### RRT\*探索パラメータ +#### ノードパラメーター + +| パラメータ | タイプ | 説明 | +| ---------------------------- | ------ | ------------------------------------------------------------------------------- | +| `planning_algorithms` | 文字列 | ノードで使用されるアルゴリズム | +| `vehicle_shape_margin_m` | 浮動小数点 | Planningアルゴリズムでの衝突マージン | +| `update_rate` | 倍精度浮動小数点数 | タイマーの更新レート | +| `waypoints_velocity` | 倍精度浮動小数点数 | 出力軌跡の速度(現在、定速度のみサポートされています) | +| `th_arrived_distance_m` | 倍精度浮動小数点数 | 車両が軌跡の終点に到着したかどうかを確認するための閾値距離 | +| `th_stopped_time_sec` | 倍精度浮動小数点数 | 車両が停止しているかどうかを確認するための閾値時間 | +| `th_stopped_velocity_mps` | 倍精度浮動小数点数 | 車両が停止しているかどうかを確認するための閾値速度 | +| `th_course_out_distance_m` | 倍精度浮動小数点数 | 車両がコースアウトしているかどうかを確認するための閾値距離 | +| `th_obstacle_time_sec` | 倍精度浮動小数点数 | 軌跡上に障害物があるかどうかを確認するための閾値時間 | +| `vehicle_shape_margin_m` | 倍精度浮動小数点数 | 車両の余裕 | +| `replan_when_obstacle_found` | ブール | 軌跡上に障害物が見つかったときに再計画するか | +| `replan_when_course_out` | ブール | 車両がコースアウトしたときに再計画するか | + +#### Planner共通パラメータ + +| パラメータ | タイプ | 説明 | +| ------------------------- | ------ | ----------------------------------------------- | +| `time_limit` | double | Planningの時間制限 | +| `maximum_turning_ratio` | double | カーブに実際に使う最大範囲比 | +| `turning_steps` | double | カーブ範囲内のターンステップ数 | +| `theta_size` | double | 角度の離散化の数 | +| `lateral_goal_range` | double | 横方向位置のゴール範囲 | +| `longitudinal_goal_range` | double | 縦方向位置のゴール範囲 | +| `angle_goal_range` | double | 角度のゴール範囲 | +| `curve_weight` | double | カーブするアクションに対する追加コスト係数 | +| `reverse_weight` | double | 後退するアクションに対する追加コスト係数 | +| `direction_change_weight` | double | 進行方向の切り替えに対する追加コスト係数 | +| `obstacle_threshold` | double | グリッドを障害物とみなすしきい値 | + +#### A\* サーチパラメータ + +| パラメータ | 型 | 説明 | +| --------------------------- | ------ | ------------------------------------------------------ | +| `search_method` | 文字列 | 検索方式(スタートからゴール、またはその逆) | +| `only_behind_solutions` | ブール値 | 解をゴールの背後限定するかどうか | +| `use_back` | ブール値 | 後方軌跡を使用するかどうか | +| `adapt_expansion_distance` | ブール値 | trueの場合、環境に基づいて展開距離を調整する | +| `expansion_distance` | 2倍精度浮動小数点型 | ノード遷移の展開長さ | +| `near_goal_distance` | 2倍精度浮動小数点型 | ゴール近接距離しきい値 | +| `distance_heuristic_weight` | 2倍精度浮動小数点型 | ノードコストを推定するためのヒューリスティック重み | +| `smoothness_weight` | 2倍精度浮動小数点型 | 曲率変化のコストファクター | +| `obstacle_distance_weight` | 2倍精度浮動小数点型 | 障害物までの距離のコストファクター | +| `goal_lat_distance_weight` | 2倍精度浮動小数点型 | ゴールからの横方向距離のコストファクター | + +#### RRT\* の探索パラメータ -| パラメーター | 型 | 説明 | -| ----------------------- | ------ | ------------------------------------------------------------------------------------ | -| `max planning time` | double | 最大計画時間 [msec] (`enable_update` が `true` の場合にのみ使用) | -| `enable_update` | bool | `max_planning time` が経過するまで実現可能なソリューションが見つかった後の更新の有無 | -| `use_informed_sampling` | bool | Informed RRT\*(Gammell et al.)の使用 | -| `neighbor_radius` | double | RRT\*アルゴリズムの近傍半径 | -| `margin` | double | RRT\*アルゴリズムにおけるパスの衝突チェックで確保される安全マージン | +| パラメータ | タイプ | 説明 | +| ----------------------- | ------ | ---------------------------------------------------------------------------- | +| `max planning time` | double | 最大プランニング時間 [msec] (`enable_update` が`true`に設定されている場合のみ使用) | +| `enable_update` | bool | feasibleなソリューションが見つかるまで、`max_planning time` が経過するまで更新するかどうか | +| `use_informed_sampling` | bool | 情報に基づく RRT* (Gammell et al. による) を使用する | +| `neighbor_radius` | double | RRT* アルゴリズムの近傍半径 | +| `margin` | double | RRT* アルゴリズムの経路の衝突チェックで確保される安全マージン | ### フローチャート + ```plantuml @startuml title onTimer @@ -136,3 +137,4 @@ endif stop @enduml ``` + diff --git a/planning/autoware_freespace_planning_algorithms/README.md b/planning/autoware_freespace_planning_algorithms/README.md index 3adca3b2e7459..98398dc2d5584 100644 --- a/planning/autoware_freespace_planning_algorithms/README.md +++ b/planning/autoware_freespace_planning_algorithms/README.md @@ -1,88 +1,92 @@ -# フリースペースのパスプランニングアルゴリズム +# フリースペース計画アルゴリズム ## 役割 -このパッケージはフリースペースにおけるパスプランニングアルゴリズムの開発用です。 +このパッケージは、フリースペースにおける経路計画アルゴリズムを開発するためのものです。 -### 実装されたアルゴリズム +### 実装されているアルゴリズム -- Hybrid A\*とRRT\*(RRTとinformed RRT\*を含む) +- ハイブリッドA\*およびRRT\*(RRTおよびinformed RRT\*を含む) -informed-RRT\*の実装に関する詳細は、[rrtstar.md](rrtstar.md)を参照してください。 +informed-RRT\*の実装に関する注意については、[rrtstar.md](rrtstar.md)を参照してください。 -注: RRT\*については、RRT\*で実行可能な解が見つかった後に更新するかどうかを選択できます。 -そうしない場合、アルゴリズムはバニラRRTと同じになります(リワイヤリング手順は違います)。 -更新する場合は、実行可能な解が見つかった後のサンプリングが「informed」であるかどうかを選択できます。 -これを真に設定すると、アルゴリズムは「2014年のGammellらによるinformed RRT\*」と同じになります。 +注: RRT\*について、RRT\*で実現可能なソリューションが見つかった後の更新を実行するかどうを選択できます。 +そうしない場合、アルゴリズムはバニラRRTと同じになります(正確には再配線手順のためですが)。 +更新を選択した場合、実現可能なソリューションが見つかった後のサンプリングが「情報を与えられる」かどうかというオプションがあります。 +Trueに設定すると、アルゴリズムは「Gammell et al. 2014のinformed RRT\*」と同等になります。 ## アルゴリズムの選択 -アルゴリズムの速度と結果の解の品質にはトレードオフがあります。 -アルゴリズムを(高品質解/低速)から(低品質解/高速)の範囲で並べると、次のようになります。 -A\* -> informed RRT\* -> RRT。ほとんどの場合において、informed RRT\*は、同じ計算時間バジェットでRRT\*よりも解の品質が優れています。そのため、RRT\*は比較で省略されています。 +アルゴリズムの速度と結果のソリューションの品質の間にトレードオフがあります。 +アルゴリズムを(高品質のソリューション/低速)->(低品質のソリューション/高速)の範囲で並べると、 +A\* -> informed RRT\* -> RRTになります。ほとんどの場合、informed RRT\*は同じ計算時間予算が与えられたときにソリューションの品質がRRT\*よりも優れていることに注意してください。そのため、RRT\*は比較から除外されています。 -選択基準は次のとおりです。 +選択基準としては以下のようなものがあります。 -- 障害物の形状が複雑な場合: -> RRTとRRT\*を回避します。結果のパスが乱雑になる可能性があります。 -- 目標位置がスタートから遠い場合: -> A\*を回避します。グリッドの離散化に基づいているため、時間がかかりすぎます。 +- 障害物の形状が複雑な場合: -> RRTおよびRRT\*は避けます。結果として得られる経路は乱雑になる可能性があります。 +- 目標位置がスタートから遠い場合: -> A\*は避けます。グリッドの離散化に基づいているため、時間がかかりすぎます。 -## 新規アルゴリズムの実装ガイド +## 新しいアルゴリズムを実装するためのガイド -- このパッケージ内のすべてのプランニングアルゴリズムクラスは、`AbstractPlanningAlgorithm`クラスを継承する必要があります。必要に応じて、仮想関数をオーバーライドしてください。 -- すべてのアルゴリズムは`nav_msgs::OccupancyGrid`タイプのコストマップを使用する必要があります。 - したがって、`AbstractPlanningAlgorithm`クラスは主に、コストマップを使用した衝突チェック、グリッドベースのインデックス作成、コストマップに関連する座標変換を実装します。 -- すべてのアルゴリズムは、`PlannerCommonParam`タイプの構造とアルゴリズム固有タイプの構造の両方をコンストラクタの入力として受け取る必要があります。たとえば、`AstarSearch`クラスのコンストラクタは、`PlannerCommonParam`と`AstarParam`の両方を受け取ります。 +- このパッケージ内のすべての計画アルゴリズムクラスは`AbstractPlanningAlgorithm`クラスを継承する必要があります。必要に応じて、仮想関数をオーバーライドしてください。 +- すべてのアルゴリズムは`nav_msgs::OccupancyGrid`型のcostmapを使用する必要があります。 +そのため、`AbstractPlanningAlgorithm`クラスは主に、costmapを使用した衝突チェック、グリッドベースのインデックス付け、costmapに関連する座標変換を実装しています。 +- すべてのアルゴリズムは、`PlannerCommonParam`型の構造体とアルゴリズム固有の型の構造体の両方をコンストラクターの入力として使用する必要があります。たとえば、`AstarSearch`クラスのコンストラクターは`PlannerCommonParam`と`AstarParam`の両方を取得します。 ## スタンドアロンテストと可視化の実行 -パッケージをros-testでビルドし、テストを実行します。 +ros-testでパッケージをビルドし、テストを実行する: + ```sh colcon build --packages-select autoware_freespace_planning_algorithms colcon test --packages-select autoware_freespace_planning_algorithms ``` -テストでは、シミュレーション結果は `/tmp/fpalgos-{アルゴリズムタイプ}-case{シナリオ番号}` に Rosbag として格納されます。 -[test/debug_plot.py](test/debug_plot.py) を使用してこれらの結果ファイルをロードすることで、以下に示す図のように、経路と障害物を視覚化するプロットを作成できます。作成された図は `/tmp` に再度保存されます。 +## テストの実行 + +テストでは、シミュレーション結果は `rosbag` として `/tmp/fpalgos-{algorithm_type}-case{scenario_number}` に格納されます。 +[test/debug_plot.py](test/debug_plot.py) を使用してこれらの結果ファイルを読み込むことで、以下の図に示すようにパスと障害物の視覚化プロットを作成できます。作成された図は `tmp` に保存されます。 -### A\* (単曲率ケース) +### A\*(単一曲率ケース) ![サンプル出力図](figs/summary-astar_single.png) -### 200msec の時間予算のある情報ベース RRT\* +### `post resampling` 付き情報取得 RRT\*(200msec のタイムバジェット) ![サンプル出力図](figs/summary-rrtstar_informed_update.png) -### 更新のない RRT\* (RRT とほぼ同じ) +### `post resampling` なし RRT\*(RRT とほぼ同じ) ![サンプル出力図](figs/summary-rrtstar_fastest.png) -それぞれ、黒いセル、緑色のボックス、赤色のボックスは、障害物、開始コンフィギュレーション、目標コンフィギュレーションを示しています。 -青いボックスのシーケンスはソリューションパスを示しています。 +黒のセル、緑のボックス、赤のボックスはそれぞれ、障害物、スタート構成、ゴール構成を示しています。 +青のボックスのシーケンスは、ソリューションパスを示しています。 ## Python モジュールへの拡張(A\* のみサポート) -Python モジュールへの拡張の実装があります。 -以下を設定することで、Python 経由で A\* 検索を試すことができます: +Python モジュールへの拡張機能実装があります。 +次のように設定することで、Python 経由で A\* の探索を試すことができます。 -- パラメーター +- パラメータ - コストマップ - 自車位置 - ゴール位置 -すると、次のものを入手できます: +次に、次の情報を入手できます。 - 成功または失敗 -- 探索された軌跡 +- 検索された軌跡 サンプルコードは [scripts/example/example.py](scripts/example/example.py) です。 -このパッケージを事前にビルドして、セットアップシェルのスクリプトをソースする必要があることに注意してください。 +このパッケージをビルドし、事前のセットアップシェルスクリプトをソース指定する必要があることに注意してください。 -## ライセンスの通知 +## ライセンスの注意事項 -ファイル `src/reeds_shepp.cpp` および `include/astar_search/reeds_shepp.h` +ファイル `src/reeds_shepp.cpp` と `include/astar_search/reeds_shepp.h` は [pyReedsShepp](https://github.com/ghliu/pyReedsShepp) から取得されています。 -`pyReedsShepp` の実装も [ompl](https://github.com/ompl/ompl) のコードを大いに基にしていることに注意してください。 -`pyReedsShepp` と `ompl` はどちらも 3 項 BSD ライセンスで配布されています。 +`pyReedsShepp` の実装は [ompl](https://github.com/ompl/ompl) のコードにも大きく依存しています。 +`pyReedsShepp` および `ompl` はどちらも 3 項 BSD ライセンスに基づいて配布されています。 + diff --git a/planning/autoware_mission_planner/README.md b/planning/autoware_mission_planner/README.md index 3c3f942a17f06..b39e908d4ff7f 100644 --- a/planning/autoware_mission_planner/README.md +++ b/planning/autoware_mission_planner/README.md @@ -2,133 +2,98 @@ ## 目的 -`Mission Planner` は、所与のチェックポイントにしたがって目標位置まで自車位置から移動するための経路を算出します。 -経路は、静的な地図上の車線のシーケンスで構成されています。 -動的な物体(歩行者や他の車両など)や動的な地図情報(一部の車線を塞ぐ道路工事など)は、経路計画時に考慮されません。 -したがって、出力トピックは、目標位置またはチェックポイントが与えられた場合にのみ発行され、新しい目標位置またはチェックポイントが与えられるまでラッチされます。 +`Mission Planner` は、指定されたチェックポイントに従って現在の自車位置からゴール位置に移動する経路を計算します。経路は静的マップ上の連続したレーンのシーケンスから作成されます。経路計画時に、歩行者や他の車両などの動的オブジェクト、道路工事に伴う一部のレーンのブロックなどの動的マップ情報は考慮されません。したがって、新しいゴール位置またはチェックポイントが与えられるまで、出力トピックはゴール位置またはチェックポイントが与えられた場合にのみパブリッシュされ、ラッチされます。 -コア実装は、地図フォーマットに依存しません。任意の計画アルゴリズムをプラグインモジュールとして追加できます。 -現在の Autoware.universe では、Lanelet2 地図フォーマットのプラグインのみがサポートされています。 +コア実装はマップ形式に依存しません。プラグインモジュールとして任意の計画アルゴリズムを追加できます。現在の Autoware.universe では、Lanelet2 マップ形式のプラグインのみがサポートされています。 -このパッケージは、MRM のルートも管理します。 `route_selector` ノードは `mission_planner` インターフェイスを複製し、通常の MRM と MRM のそれぞれに提供します。 -現在の MRM 操作ステータスに応じて、経路要求と計画結果を配信します。 +このパッケージは MRM のルートも管理します。`route_selector` ノードは `mission_planner` インターフェースを複製し、それぞれ通常時と MRM 用に提供します。現在の MRM 動作状態に応じて、ルート要求と計画結果を配信します。 ![architecture](./media/architecture.drawio.svg) -## インターフェイス +## インターフェース -### パラメーター +### パラメータ -| 名称 | 型 | 説明 | -| ---------------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------- | -| `map_frame` | 文字列 | マップのフレーム名 | -| `arrival_check_angle_deg` | double | ゴール点検の角度閾値 | -| `arrival_check_distance` | double | ゴール点検の距離閾値 | -| `arrival_check_duration` | double | ゴール点検の期間閾値 | -| `goal_angle_threshold` | double | ゴールの承認のための目標ポーズの最大角度 | -| `enable_correct_goal_pose` | ブーリアン | 最も近いレーンレットの向きに従ってゴールポーズを修正するかどうか | -| `reroute_time_threshold` | double | 現在速度での経路変更ポイントまでの時間がこの閾値よりも大きい場合、経路変更が可能となる | -| `minimum_reroute_length` | double | 新しい経路を発行するための最小長 | -| `consider_no_drivable_lanes` | ブーリアン | 計画に走行不可のレーンレットを考慮するかどうかのフラグ | -| `allow_reroute_in_autonomous_mode` | ブーリアン | 自律運転モードでの経路変更を許可するフラグ。falseの場合は経路変更は失敗し、trueの場合は安全な経路変更のみが許可される | +| 名称 | 型 | 説明 | +| ---------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| `map_frame` | 文字列 | 地図のフレーム名 | +| `arrival_check_angle_deg` | 数値 | ゴール判定の角度閾値 | +| `arrival_check_distance` | 数値 | ゴール判定の距離閾値 | +| `arrival_check_duration` | 数値 | ゴール判定の期間閾値 | +| `goal_angle_threshold` | 数値 | ゴール承認のためのゴール姿勢の最大角度 | +| `enable_correct_goal_pose` | ブール | 最も近いレーンレットの方向に従ってゴール姿勢を補正するための有効化 | +| `reroute_time_threshold` | 数値 | 現在速度で迂回ポイントまでの時間がこの閾値を超えた場合、迂回が可能となる | +| `minimum_reroute_length` | 数値 | 新しい経路をパブリッシュするための最小長 | +| `consider_no_drivable_lanes` | ブール | 計画で `no_drivable_lanes` を考慮するかどうかフラグ | +| `allow_reroute_in_autonomous_mode` | ブール | 自律運転モードでの迂回の許可を表すフラグ。False の場合、迂回は失敗します。True の場合、安全な迂回のみが許可されます | ### サービス -- **Planning (生成器)** - - 経路生成 - - 自車位置予測 - - 障害物予測 -- **Sensor Fusion (センサーフュージョン)** - - センサーデータの融合 - - オプティカルフローによる自車位置推定 -- **ObjDet (物体検出)** - - 前方および周囲の物体検出 - - 2D/3D物体検出 -- **CanBus (CANバス)** - - 車両ステータスの読み書き - - ステアリング角と速度制御 -- **ROS通信 (ROS通信)** - - 他のAutowareノードとの通信 -- **Localization (局在化)** - - IMU/GNSS/カメラによる自車位置推定 - - SLAMによるマップ構築と局在化 - -| Name | Type | Description | -| ------------------------------------------------------------------- | ---------------------------------------- | ------------------------------------------------ | -| `/planning/mission_planning/mission_planner/clear_route` | tier4_planning_msgs/srv/ClearRoute | ルートクリア要求 | -| `/planning/mission_planning/mission_planner/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うルート要求 | -| `/planning/mission_planning/mission_planner/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うルート要求 | -| `/planning/mission_planning/route_selector/main/clear_route` | tier4_planning_msgs/srv/ClearRoute | メインルートクリア要求 | -| `/planning/mission_planning/route_selector/main/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うメインルート要求 | -| `/planning/mission_planning/route_selector/main/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うメインルート要求 | -| `/planning/mission_planning/route_selector/mrm/clear_route` | tier4_planning_msgs/srv/ClearRoute | MRMルートクリア要求 | -| `/planning/mission_planning/route_selector/mrm/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | レーンレットウェイポイントを伴うMRMルート要求 | -| `/planning/mission_planning/route_selector/mrm/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | 座標ベースのウェイポイントを伴うMRMルート要求 | +| 名前 | タイプ | 説明 | +| ------------------------------------------------------------------------- | ---------------------------------------- | ------------------------------------------------------------ | +| `/planning/mission_planning/mission_planner/clear_route` | tier4_planning_msgs/srv/ClearRoute | Routeのクリアを要求 | +| `/planning/mission_planning/mission_planner/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | Lanelet waypointを使用したRouteを要求 | +| `/planning/mission_planning/mission_planner/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | pose waypointを使用したRouteを要求 | +| `/planning/mission_planning/route_selector/main/clear_route` | tier4_planning_msgs/srv/ClearRoute | main Routeのクリアを要求 | +| `/planning/mission_planning/route_selector/main/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | Lanelet waypointを使用したmain Routeを要求 | +| `/planning/mission_planning/route_selector/main/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | pose waypointを使用したmain Routeを要求 | +| `/planning/mission_planning/route_selector/mrm/clear_route` | tier4_planning_msgs/srv/ClearRoute | MRM Routeのクリアを要求 | +| `/planning/mission_planning/route_selector/mrm/set_waypoint_route` | tier4_planning_msgs/srv/SetWaypointRoute | Lanelet waypointを使用したMRM Routeを要求 | +| `/planning/mission_planning/route_selector/mrm/set_lanelet_route` | tier4_planning_msgs/srv/SetLaneletRoute | pose waypointを使用したMRM Routeを要求 | ### サブスクリプション -- `/current_pose` : ドライブ中に更新される`自車位置` -- `/planning/local_path` : Autoware Planningが計算した局所パス -- `/control/curvature` : Autoware Controlが計算した曲率 -- `/control/acceleration` : Autoware Controlが計算した加速度 -- `/control/deceleration` : Autoware Controlが計算した減速度 -- `/control/jerk` : Autoware Controlが計算したジャーク -- `/control/steering_angle` : Autoware Controlが計算した操舵角 -- `/carla/ego_vehicle/odometry` : CARLAエミュレータによって提供されるオドメトリデータ -- `/carla/ego_vehicle/sensor/camera/rgb/front/image` : CARLAエミュレータによって提供されるフロントRGBカメラの画像 -- `/carla/ego_vehicle/sensor/lidar/top/front/point_cloud` : CARLAエミュレータによって提供されるフロントLiDARの点群 - -| 名前 | 種類 | 説明 | -| ---------------------------- | ----------------------------------------- | ------------------------ | -| `input/vector_map` | autoware_map_msgs/msg/LaneletMapBin | Lanelet2のベクトルマップ | -| `input/modified_goal` | geometry_msgs/PoseWithUuidStamped | 修正されたゴールの姿勢 | -| `input/operation_mode_state` | autoware_adapi_v1_msgs/OperationModeState | 操作モードの状態 | +| 名前 | タイプ | 説明 | +| ---------------------------- | ----------------------------------------- | ---------------------- | +| `input/vector_map` | autoware_map_msgs/msg/LaneletMapBin | Lanelet2 のベクターマップ | +| `input/modified_goal` | geometry_msgs/PoseWithUuidStamped | 変更された目標の姿勢 | +| `input/operation_mode_state` | autoware_adapi_v1_msgs/OperationModeState | 操作モードの状態 | ### 資料 -- [Autoware tutorial: Introduction](https://arxiv.org/abs/2002.07901) -- [Open Robotics: Autoware.Auto](https://arxiv.org/abs/2204.09611) -- [Experimental validation of the Autoware.Auto planning module in simulated scenarios](https://arxiv.org/abs/2204.10510) - -| 名称 | タイプ | 説明 | -| ------------------------------------------------------ | ----------------------------------- | ------------------------------ | -| `/planning/mission_planning/state` | tier4_planning_msgs/msg/RouteState | ルートの状態 | -| `/planning/mission_planning/route` | autoware_planning_msgs/LaneletRoute | ルート | -| `/planning/mission_planning/route_selector/main/state` | tier4_planning_msgs/msg/RouteState | メインルートの状態 | -| `/planning/mission_planning/route_selector/main/route` | autoware_planning_msgs/LaneletRoute | メインルート | -| `/planning/mission_planning/route_selector/mrm/state` | tier4_planning_msgs/msg/RouteState | MRMルートの状態 | -| `/planning/mission_planning/route_selector/mrm/route` | autoware_planning_msgs/LaneletRoute | MRMルート | -| `~/debug/route_marker` | visualization_msgs/msg/MarkerArray | デバッグ用のルートマーカー | -| `~/debug/goal_footprint` | visualization_msgs/msg/MarkerArray | デバッグ用の目標フットプリント | +| 名称 | タイプ | 説明 | +| ------------------------------------------------------- | -------------------------------------- | ---------------------------------------- | +| `/planning/mission_planning/state` | tier4_planning_msgs/msg/RouteState | ルートステート | +| `/planning/mission_planning/route` | autoware_planning_msgs/LaneletRoute | ルート | +| `/planning/mission_planning/route_selector/main/state` | tier4_planning_msgs/msg/RouteState | メインルートステート | +| `/planning/mission_planning/route_selector/main/route` | autoware_planning_msgs/LaneletRoute | メインルート | +| `/planning/mission_planning/route_selector/mrm/state` | tier4_planning_msgs/msg/RouteState | MRMルートステート | +| `/planning/mission_planning/route_selector/mrm/route` | autoware_planning_msgs/LaneletRoute | MRMルート | +| `~/debug/route_marker` | visualization_msgs/msg/MarkerArray | ルートマーカー(デバッグ用) | +| `~/debug/goal_footprint` | visualization_msgs/msg/MarkerArray | ゴールフットプリント(デバッグ用) | ## ルートセクション ![route_sections](./media/route_sections.svg) -タイプが `autoware_planning_msgs/LaneletSegment` のルートセクションは、レーンを変更可能な複数のレーンをまとめた道路の「スライス」です。ルートの最小単位は `autoware_planning_msgs/LaneletPrimitive` であることに注意してください。この単位は、ベクターマップ内のレーンの固有 ID とそのタイプを持ちます。したがって、ルートメッセージにはレーンの幾何学的情報を含みません。これは、Planningモジュールのメッセージがマップデータ構造に依存しないようにするためです。 +ルートセクションは `autoware_planning_msgs/LaneletSegment` 型であり、レーン変更可能なレーンを束ねた道路の「区切り」です。 +ルートの最小単位は `autoware_planning_msgs/LaneletPrimitive` であることに注意してください。これは、ベクトルマップとタイプのレーンの一意の ID を持っています。 +したがって、ルートメッセージにはレーンに関する幾何情報が含まれていません。これは、計画モジュールのメッセージにマップデータ構造への依存関係を持たせたくないと考えたからです。 -ルートセクションの ROS メッセージには、各ルートセクションに対して次の 3 つの要素が含まれます。 +ルートセクションの ROS メッセージは、各ルートセクションに対して次の 3 つの要素を含みます。 -- `preferred_primitive`: 目標に向かう車線の追従優先レーン。 -- `primitives`: 優先レーンを含む同じ方向のすべての近接レーン。 +- `preferred_primitive`: 目的地に向かって進む優先レーン。 +- `primitives`: 優先レーンを含む同じ方向のすべての隣接レーン。 -## ゴール検証 +## 目標の検証 -Mission Planner は、与えられたゴールポーズを検証してルートを作成するための制御メカニズムを備えています。ゴールポーズのレーンのゴールポーズ角度とゴールポーズのヨーが `goal_angle_threshold` パラメータより大きい場合、ゴールは拒否されます。もう 1 つの制御メカニズムは、車両の寸法に基づいてゴールポーズのフットプリントを作成し、このフットプリントがレーンの内側にあるかどうかを確認することです。ゴールのフットプリントがレーンを超えると、ゴールは拒否されます。 +ミッションプランナーには、与えられた目標の姿勢を検証し、ルートを作成する制御メカニズムがあります。目標の姿勢の角度が目標の姿勢レーンのレットと目標の姿勢ヨーの角度との間で `goal_angle_threshold` パラメーターを超えると、目標は拒否されます。 +もう 1 つの制御メカニズムは、車両の寸法に応じて目標姿勢のフットプリントを作成し、このフットプリントがレーンのレット内にあるかどうかを確認することです。目標のフットプリントがレーンのレットを超えると、目標は拒否されます。 -次の画像は、ゴールポーズ検証のサンプルケースです。 +以下の図は、目標姿勢の検証のケースの例です。 ![goal_footprints](./media/goal_footprints.svg) ## 実装 -### Mission Planner +### ミッションプランナー -2 つのコールバック(ゴールとチェックポイント)がルートプランニングのトリガーです。 -レーンのルートを計画するルーティンググラフは、それらのコールバックの前に作成する必要があり、このルーティンググラフはベクターマップコールバックで作成されます。 +2 つのコールバック(目標とチェックポイント)は、ルート計画のトリガーです。 +レーニンググラフは、Lanelet2 でルートを計画する前に作成する必要があります。このレーニンググラフは、ベクトルマップのコールバックで作成されます。 `plan route` の詳細については、次のセクションで説明します。 + ```plantuml @startuml title goal callback @@ -153,7 +118,8 @@ stop ### ルートプランナー -`plan route`は、自車位置と目標位置を含むチェックポイントで実行されます。 +`plan route` は自車位置と目標位置を含むチェックポイントを使用して実行されます。 + ```plantuml @startuml @@ -184,54 +150,59 @@ stop @enduml ``` -`各チェックポイント間のパスを計画` はまず、スタートとゴールの自車位置に最も近い車線を計算します。 -次に、Lanelet2 のルーティンググラフがスタートとゴールの自車位置から最短経路を計画します。 +### 各チェックポイント間の経路計画 +`plan path between each check points`は最初に始点および終点のポーズにもっとも近いレーンを計算します。 +次に、Lanelet2のルーティンググラフが、始点および終点のポーズから最短経路を計画します。 -`ルート車線を初期化` はルートハンドラーを初期化し、`route_lanelets` を計算します。 -`route_lanelets` はすべてルートセクションに登録され、車線変更を計画するときに使用される、計画されたパスの車線に隣接する車線です。 -`route_lanelets` を計算するには、 +### ルートレーンレットの初期化 +`initialize route lanelets`は、ルートハンドラーを初期化し、`route_lanelets`を計算します。 +`route_lanelets`はすべてルートセクションに登録され、レーンの変更計画時に使用される、計画された経路のレーンレットの隣のレーンレットです。 +`route_lanelets`を計算するには、 -1. 車線変更可能な計画されたパスに対するすべての隣接車線 (右と左) が `route_lanelets` として記憶されます。 -2. 車線変更できない計画されたパスに対するすべての隣接車線 (右と左) が `candidate_lanelets` として記憶されます。 -3. 各 `candidate_lanelets` の前後車線が `route_lanelets` である場合、`candidate_lanelet` は `route_lanelets` として登録されます。 - - これは、`candidate_lanelet` (隣接車線) が車線変更できない場合でも、`candidate_lanelet` の前後車線が `route_lanelets` であれば車線変更せずに `candidate_lanelet` を通過できるためです。 +1. レーン変更可能な計画された経路に対するすべての近隣(右および左)レーンが`route_lanelets`として記憶されます。 +2. レーン変更不可能な計画された経路に対するすべての近隣(右および左)レーンが`candidate_lanelets`として記憶されます。 +3. 各`candidate_lanelets`の次のレーンレットと前のレーンレットが`route_lanelets`の場合、`candidate_lanelet`は`route_lanelets`として登録されます + - これは、`candidate_lanelet`(隣接レーン)がレーン変更可能ではない場合でも、`candidate_lanelet`の次のレーンレットと前のレーンレットが`route_lanelets`である場合、レーンを変更せずに`candidate_lanelet`を通過できるためです。 -`優先車線を取得` はルートハンドラーを使用して `route_lanelets` から `preferred_primitive` を抽出します。 +### 優先レーンレットの取得 +`get preferred lanelets`は、ルートハンドラーを使用して`route_lanelets`から`preferred_primitive`を抽出し`ます。 -`ルートセクションの作成` はルートハンドラーを使用して各ルートセクションの `route_lanelets` から `primitives` を抽出し、ルートセクションを作成します。 +### ルートセクションの作成 +`create route sections`は、ルートハンドラーを使用して各ルートセクションの`primitives`を`route_lanelets`から抽出し、ルートセクションを作成します。 ### 再ルーティング -ここで再ルーティングとは、走行中にルートを変更することを意味します。ルートの設定とは異なり、車両からルート変更地点までの一定の距離を維持する必要があります。 -自車が自動運転状態ではない場合、安全確認プロセスはスキップされます。 +ここで再ルーティングとは、走行中にルートを変更することを意味します。ルート設定とは異なり、車両からルート変更ポイントまでの一定の距離を維持する必要があります。 +電動車が自動運転状態にない場合、安全チェックプロセスはスキップされます。 ![rerouting_safety](./media/rerouting_safety.svg) -そして、再ルーティングが必要となるユースケースは 3 つあります。 +再ルーティングが必要なユースケースは3つあります。 -- ルート変更 API -- 緊急ルート -- ゴール変更 +- ルート変更API +- エマージェンシールート +- ゴール修正 -#### ルート変更 API +#### ルート変更API -走行中に目的地を変更したり、分岐ループルートを走行したりするときに使用されます。車両が MRM ルートで走行している場合、このインターフェイスによる通常の再ルーティングは許可されません。 +走行中に目的地を変更する場合や、分岐ループルートを走行する場合に使用されます。車両がMRMルートを走行している場合、このインターフェイスによる通常の再ルーティングは許可されません。 -#### 緊急ルート +#### エマージェンシールート -MRM が路肩に停車するためのインターフェイスです。できるだけ早く停止する必要があるため、再ルーティングが必要です。MRM ルートは通常ルートよりも優先されます。また、MRM ルートがクリアされた場合は、再ルーティング安全確認でも通常ルートに戻ろうとします。 +MRMが路肩に停車するためのインターフェイス。できるだけ早く停止する必要があるため、再ルーティングが必要です。MRMルートは通常のルートよりも優先されます。MRMルートがクリアされた場合、再ルーティングの安全チェックを使用して、通常のルートに戻ろうとします。 -##### ゴール変更 +##### ゴール修正 -これは、プランニングコンポーネントによる停車、駐車車両の回避などのためのゴール変更です。修正されたゴールが計算されたルートの外にある場合、再ルーティングが必要です。このゴール変更は、車両が実際に目的地に近づくと、周辺環境とパスの安全性を確認して実行されます。また、この変更は通常ルートと mrm ルートの両方に対して許可されます。 -ここで生成された新しいルートは AD API に送信されるため、アプリケーションからも参照できます。ただし、ここでの仕様は今後変更される可能性があることに注意してください。 +これは、計画コンポーネントによる停車、駐車車両の回避などのゴール変更です。変更されたゴールが計算されたルートの外にある場合、再ルーティングが必要です。このゴール修正は、車両が実際に目的地に近づくにつれてローカル環境とパスの安全性をチェックすることで実行されます。この修正はnormal_routeとmrm_routeの両方に対して許可されます。 +ここで生成された新しいルートはAD APIに送信され、アプリケーションから参照することもできます。ただし、ここでの仕様は今後変更される可能性があることに注意してください。 -#### 再ルーティングの制約 +#### 再ルーティングの制限事項 -- 再ルーティングの安全判断は、軌跡または制御のレベルでは保証されません。したがって、安全のために再ルーティング変更までの距離は十分に長くなければなりません。 -- `modified_goal` の有効性は、それが誤った車線に配置されていない、安全に再ルーティングできるなど、behavior_path_planner によって保証される必要があります。 +- 再ルーティングの安全判断は、軌跡や制御のレベルでは保証されていません。そのため、再ルーティングの変更に対する距離は、安全性を確保するために十分である必要があります。 +- `modified_goal`の妥当性は、behavior_path_plannerによって保証される必要があります(たとえば、誤ったレーンに配置されていないこと、安全に再ルーティングできることなど)。 -## 制限 +## 制限事項 -- 動的オブジェクト (例: 歩行者や他の車両) や動的マップ情報 (例: 一部の車線を塞ぐ道路工事) はルート計画中に考慮されません。 +- ルート計画中には、動的なオブジェクト(歩行者やその他の車両)や動的な地図情報(一部のレーンを塞ぐ道路工事など)は考慮されません。 - ループルートはサポートされていません。 + diff --git a/planning/autoware_objects_of_interest_marker_interface/README.md b/planning/autoware_objects_of_interest_marker_interface/README.md index 1bc828b4cfdba..1be814f0250a5 100644 --- a/planning/autoware_objects_of_interest_marker_interface/README.md +++ b/planning/autoware_objects_of_interest_marker_interface/README.md @@ -1,15 +1,16 @@ -# Objects Of Interest Marker Interface +# 関心領域オブジェクトのマーカインタフェース !!! warning - 計画中 + 建設中 ## 目的 -## 内部動作 / アルゴリズム +## 動作中のメカニズム / アルゴリズム -## 入力 / 出力 +## 入出力 -## 仮定 / わかっている制限事項 +## 仮定 / 想定される制限 + +## 今後の拡張 / 未実装の部分 -## 将来の拡張 / 未実装の部分 diff --git a/planning/autoware_obstacle_cruise_planner/README.md b/planning/autoware_obstacle_cruise_planner/README.md index 69f1696240431..ef888195929b9 100644 --- a/planning/autoware_obstacle_cruise_planner/README.md +++ b/planning/autoware_obstacle_cruise_planner/README.md @@ -1,46 +1,45 @@ -# 障害物巡航プランナー +# 障害物クルーズプランナー ## 概要 -`autoware_obstacle_cruise_planner` パッケージには、以下のモジュールが含まれています。 +`autoware_obstacle_cruise_planner`パッケージには、次のモジュールがあります。 - 停止プランニング - - 進行経路の近くに静止した障害物がある場合に停止します。 -- 巡航プランニング - - 自車の前にある動的な障害物を巡航します。 + - 静的障害物が軌道の付近にあるとき停止します。 +- クルーズプランニング + - 自車の前にある動的障害物にクルージングします。 - 減速プランニング - - 進行経路の近くに静止した障害物や動的な障害物がある場合に減速します。 + - 静的/動的障害物が軌道の付近にあるとき減速します。 ## インターフェース ### 入力トピック -| 名称 | 種類 | 説明 | -| -------------------- | -------------------------------------------- | ---------------- | -| `~/input/trajectory` | `autoware_planning_msgs::Trajectory` | 入力軌道 | -| `~/input/objects` | `autoware_perception_msgs::PredictedObjects` | 動的オブジェクト | -| `~/input/odometry` | `nav_msgs::msg::Odometry` | 自車オドメトリ | +| 名前 | 型 | 説明 | +| -------------------- | ------------------------------------------- | -------- | +| `~/input/trajectory` | autoware_planning_msgs::Trajectory | 入力軌道 | +| `~/input/objects` | autoware_perception_msgs::PredictedObjects | 動的物体 | +| `~/input/odometry` | nav_msgs::msg::Odometry | 自車オドメトリ | ### 出力トピック -| 名前 | 型 | 説明 | -| ------------------------------- | ---------------------------------------------- | ------------------------ | -| `~/output/trajectory` | autoware_planning_msgs::Trajectory | 出力軌跡 | -| `~/output/velocity_limit` | tier4_planning_msgs::VelocityLimit | 巡行時の速度制限 | +| 名称 | タイプ | 説明 | +| ------------------------------------ | ---------------------------------------------- | -------------------------------- | +| `~/output/trajectory` | autoware_planning_msgs::Trajectory | 出力軌跡 | +| `~/output/velocity_limit` | tier4_planning_msgs::VelocityLimit | クルーズ速度の速度制限 | | `~/output/clear_velocity_limit` | tier4_planning_msgs::VelocityLimitClearCommand | 速度制限のクリアコマンド | -| `~/output/stop_reasons` | tier4_planning_msgs::StopReasonArray | 車両を停止させる理由 | ## 設計 -以下の機能の設計がここに定義されています。 +以下の機能の設計を定義します。 -- 障害物対策 +- 障害物に対する振る舞い決定 - 停止計画 - クルーズ計画 - 減速計画 -クルーズ計画と停止計画のデータ構造は次のとおりです。 -このプランナーデータは最初に作成され、その後、計画アルゴリズムに送信されます。 +クルーズ計画および停止計画用のデータ構造は次のとおりです。このプランナーのデータは最初に作成され、次に計画アルゴリズムに送信されます。 + ```cpp struct PlannerData @@ -54,6 +53,7 @@ struct PlannerData }; ``` + ```cpp struct Obstacle { @@ -69,156 +69,158 @@ struct Obstacle }; ``` -### 障害物に対する動作決定 +### 障害物に対する挙動の決定 -巡航、停止、減速の障害物は、自車位置と速度に基づいてこの順序で選択されます。 -自車の前方にない障害物は無視されます。 +走行、停止、減速のための障害物は、それらの位置と速度に基づいてこの順序で選択されます。 +エゴの前方以外の障害物は無視されます。 ![determine_cruise_stop_slow_down](./media/determine_cruise_stop_slow_down.drawio.svg) -#### 巡航車両の決定 +#### 走行車両の決定 -次の条件を満たす障害物は、巡航障害物として決定されます。 +以下の条件を満たす障害物は、走行のための障害物として決定されます。 -- 物体から自車の軌道までの横方向距離が`behavior_determination.cruise.max_lat_margin`未満であること。 +- オブジェクトとエゴの軌道の側方距離が`behavior_determination.cruise.max_lat_margin`より小さい。 -- 物体タイプが`common.cruise_obstacle_type.*`に従って巡航用であること。 -- 物体は自車の軌道を横断していない(\*1)。 -- 物体が軌道内にある場合。 - - 物体タイプが`common.cruise_obstacle_type.inside.*`に従って巡航内部用であること。 - - 物体速度が`behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop`を超えていること。 -- 物体が軌道外にある場合。 - - 物体タイプが`common.cruise_obstacle_type.outside.*`に従って巡航外部用であること。 - - 物体速度が`behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold`を超えていること。 - - 最も信頼性の高い予測経路が自車の軌道と衝突すること。 - - その衝突期間が`behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold`を超えていること。 +- オブジェクトのタイプが`common.cruise_obstacle_type.*`に従って走行用である。 +- オブジェクトがエゴの軌道を横断していない(\ * 1)。 +- オブジェクトが軌道の内側にある場合。 + - オブジェクトのタイプが`common.cruise_obstacle_type.inside.*`に従って軌道内走行である。 + - オブジェクトの速度が`behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop`よりも大きい。 +- オブジェクトが軌道の外側にある場合。 + - オブジェクトのタイプが`common.cruise_obstacle_type.outside.*`に従って軌道外走行である。 + - オブジェクトの速度が`behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold`よりも大きい。 + - 最も確信できる予測経路がエゴの軌道と衝突する。 + - その衝突の期間が`behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold`より長い。 -| パラメータ | 型 | 説明 | -| ------------------------------------------------------------------------------------ | ------ | ------------------------------------------------------ | -| `common.cruise_obstacle_type.inside.unknown` | bool | クルーズに対して、不明なオブジェクトを考慮するフラグ | -| `common.cruise_obstacle_type.inside.car` | bool | クルーズに対して、乗用車オブジェクトを考慮するフラグ | -| `common.cruise_obstacle_type.inside.truck` | bool | クルーズに対して、トラックオブジェクトを考慮するフラグ | -| ... | bool | ... | -| `common.cruise_obstacle_type.outside.unknown` | bool | クルーズに対して、不明なオブジェクトを考慮するフラグ | -| `common.cruise_obstacle_type.outside.car` | bool | クルーズに対して、乗用車オブジェクトを考慮するフラグ | -| `common.cruise_obstacle_type.outside.truck` | bool | クルーズに対して、トラックオブジェクトを考慮するフラグ | -| ... | bool | ... | -| `behavior_determination.cruise.max_lat_margin` | double | クルーズ障害物の最大横方向マージン | -| `behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop` | double | 軌道内のクルーズ障害物の最大障害物速度 | -| `behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold` | double | 軌道外のクルーズ障害物の最大障害物速度 | -| `behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold` | double | 自車と障害物が衝突する最大重複時間 | +| パラメーター | タイプ | 説明 | +| ------------------------------------------------------------------------------------ | ------ | ---------------------------------------------------------------------- | +| `common.cruise_obstacle_type.inside.unknown` | ブール | クルージングにおける不明物体の考慮フラグ | +| `common.cruise_obstacle_type.inside.car` | ブール | クルージングにおける乗用車の考慮フラグ | +| `common.cruise_obstacle_type.inside.truck` | ブール | クルージングにおけるトラックの考慮フラグ | +| ... | ブール | ... | +| `common.cruise_obstacle_type.outside.unknown` | ブール | クルージングにおける不明物体の考慮フラグ | +| `common.cruise_obstacle_type.outside.car` | ブール | クルージングにおける乗用車の考慮フラグ | +| `common.cruise_obstacle_type.outside.truck` | ブール | クルージングにおけるトラックの考慮フラグ | +| ... | ブール | ... | +| `behavior_determination.cruise.max_lat_margin` | double | クルージング障害物に対する最大横マージン | +| `behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop` | double | 軌跡内のクルージング障害物の最大障害物速度 | +| `behavior_determination.cruise.outside_obstacle.obstacle_velocity_threshold` | double | 軌跡外のクルージング障害物の最大障害物速度 | +| `behavior_determination.cruise.outside_obstacle.ego_obstacle_overlap_time_threshold` | double | 自車と障害物との衝突最大重複時間 | -##### エゴ車の車線へ割り込んでくる可能性のある車両への譲歩 +##### 自車線に割り込む可能性がある他の車に対して譲る -他車線の車両がエゴ車の現在の車線に割り込んでくる可能性がある場合、それらの車両の後ろで譲歩(巡航)することもできます。 +隣接車線上の車両が自車の現在の自車位置に割り込む可能性がある場合、その後の車両(クルーズ)に譲ることもできます。 -以下の条件を満たす障害物は、譲歩(巡航)の障害物として判断されます。 +次の条件を満たす障害物は、譲る(クルーズ)障害物と判断されます。 -- 物体タイプが `common.cruise_obstacle_type.*` に従って巡航用であり、速度が `behavior_determination.cruise.yield.stopped_obstacle_velocity_threshold` より大きい。 -- 物体がエゴ車の軌跡を横断していない(\*1)。 -- 移動中の障害物の前に `common.cruise_obstacle_type.*` タイプの別の停止障害物がある。 -- 両方の障害物間の横方向距離(エゴ車の軌跡を基準とする)が `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` 未満である。 -- 移動中および停止中の障害物は両方、エゴ車の軌跡からそれぞれ横方向距離で `behavior_determination.cruise.yield.lat_distance_threshold` と `behavior_determination.cruise.yield.lat_distance_threshold` + `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` 内にある。 +- オブジェクトタイプは `common.cruise_obstacle_type.*` に従ってクルーズしていて、`behavior_determination.cruise.yield.stopped_obstacle_velocity_threshold` より高速で動いている。 +- オブジェクトは自車の軌道と交差していない(\*1)。 +- 移動障害物の前に `common.cruise_obstacle_type.*` タイプの別のオブジェクトが停止している。 +- 障害物同士の横方向距離(自車の軌跡を基準に)が `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` 未満である。 +- 移動障害物と停止障害物の両方が、自車の軌道から横方向距離 `behavior_determination.cruise.yield.lat_distance_threshold` および `behavior_determination.cruise.yield.lat_distance_threshold` + `behavior_determination.cruise.yield.max_lat_dist_between_obstacles` 内にある。 -上記の条件を満たしている場合、エゴ車は移動障害物の後ろを巡航し、停止障害物を避けるためにエゴ車の車線に割り込んでくるのを譲歩します。 +上記条件が満たされると、自車は移動障害物の後にクルーズし、停止障害物を避けるために自車線に割り込めるよう譲ります。 -#### 停止車両の特定 +#### 停止車両を判定する -巡航用ではない障害物の中で、以下の条件を満たす障害物は停止用の障害物として特定されます。 +クルーズ対象でない障害物の中で、次の条件を満たす障害物は停止障害物と判断されます。 -- 物体タイプが `common.stop_obstacle_type.*` に従って停止用である。 -- 物体からエゴ車の軌跡への横方向距離が `behavior_determination.stop.max_lat_margin` 未満である。 -- エゴ車の軌跡に沿った物体速度が `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` より小さい。 -- 物体は - - エゴ車の軌跡を横断していない(\*1) - - 速度が `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` 未満 - - 衝突時刻マージンが十分に大きい(\*2)。 +- オブジェクトタイプは `common.stop_obstacle_type.*` に従って停止している。 +- オブジェクトから自車の軌道までの横方向距離が `behavior_determination.stop.max_lat_margin` より小さい。 +- 自車の軌道方向のオブジェクト速度が `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` より小さい。 +- オブジェクト + - 自車の軌道と交差していない(\*1) + - 速度が `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` 未満である + - 十分な衝突時間マージンがある(\*2)。 -| パラメーター | 型 | 説明 | -| ------------------------------------------------------------------------ | ------ | ---------------------------------------- | -| `common.stop_obstacle_type.unknown` | ブール | 停止時の未知の障害物として考慮するフラグ | -| `common.stop_obstacle_type.car` | ブール | 停止時の不明な障害物として考慮するフラグ | -| `common.stop_obstacle_type.truck` | ブール | 停止時の不明な障害物として考慮するフラグ | -| ... | ブール | ... | -| `behavior_determination.stop.max_lat_margin` | double | 停止障害物の最大横方向マージン | -| `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` | double | 無視する最大横断障害物速度 | -| `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` | double | 停止時の最大障害物速度 | +| パラメータ | 型 | 説明 | +|------------------------------------------------------------------------|------|-----------------------------------------------------------------------| +| `common.stop_obstacle_type.unknown` | bool | 停止対象に不明物体を考慮するかどうかのフラグ | +| `common.stop_obstacle_type.car` | bool | 停止対象に車を考慮するかどうかのフラグ | +| `common.stop_obstacle_type.truck` | bool | 停止対象にトラックを考慮するかどうかのフラグ | +| ... | bool | ... | +| `behavior_determination.stop.max_lat_margin` | double| 停止障害物に対する最大横方向マージン | +| `behavior_determination.crossing_obstacle.obstacle_velocity_threshold` | double| 無視する最大の横断障害物速度 | +| `behavior_determination.obstacle_velocity_threshold_from_stop_to_cruise` | double| 停止に対する障害物の最大速度 | -#### 減速対象車両の特定 +#### 減速車種の判定 -巡航および停止の妨げにならない障害物の中で、以下条件を満たす障害物が減速対象の障害物として特定されます。 +巡航および停止対象ではない障害物の中で、以下の条件を満たす障害物は減速対象障害物と判定されます。 -- オブジェクトタイプが `common.slow_down_obstacle_type.*` に従って減速対象である。 -- オブジェクトから自車軌跡までの横方向距離が `behavior_determination.slow_down.max_lat_margin` 未満である。 +- オブジェクトタイプが `common.slow_down_obstacle_type.*` に従って減速用である。 +- オブジェクトから自車軌跡までの側方距離が `behavior_determination.slow_down.max_lat_margin` 未満である。 -| パラメータ | 型 | 説明 | -| ------------------------------------------------- | ------ | ---------------------------------------- | -| `common.slow_down_obstacle_type.unknown` | bool | 不明なオブジェクトを減速で考慮するフラグ | -| `common.slow_down_obstacle_type.car` | bool | 不明なオブジェクトを減速で考慮するフラグ | -| `common.slow_down_obstacle_type.truck` | bool | 不明なオブジェクトを減速で考慮するフラグ | -| ... | bool | ... | -| `behavior_determination.slow_down.max_lat_margin` | double | 減速障害物の最大横マージン | +| パラメーター | タイプ | 説明 | +|---|---|---| +| `common.slow_down_obstacle_type.unknown` | ブール | 減速する対象として不明なオブジェクトを考慮するかどうかのフラグ | +| `common.slow_down_obstacle_type.car` | ブール | 減速する対象として車を考慮するかどうかのフラグ | +| `common.slow_down_obstacle_type.truck` | ブール | 減速する対象としてトラックを考慮するかどうかのフラグ | +| ... | ブール | ... | +| `behavior_determination.slow_down.max_lat_margin` | ダブル | 減速障害物の最大横方向マージン | -#### メモ +#### 注意 -##### \*1: 交差障害物 +##### \*1: 障害物の横断 -交差障害物は、自己車両の軌道に対するヨー角が `behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold` より小さい物体である。 +障害物の横断は、走行軌跡に対する障害物のヨー角が「`behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold`」よりも小さいオブジェクトです。 -| Parameter | Type | Description | -| ------------------------------------------------------------------------ | ------ | ---------------------------------------------------------------------------------------------- | -| `behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold` | double | 自車軌跡に対する障害物の最大角度。この角度を超えると障害物が軌跡を横切っていると判断する [rad] | +| パラメータ | Type | 説明 | +| ------------------------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------ | +| `behavior_determination.crossing_obstacle.obstacle_traj_angle_threshold` | double | 自車の経路に対して、障害物が経路を横切っていると判定するための最大角度 [rad] | -##### \*2: 충돌 시간 여유 부족 +##### \*2: 十分な衝突時間マージン -우리는 자차가 일정한 속도로 이동하고 장애물이 예측 경로로 이동하는 경우 충돌 영역과 그 시간을 예측합니다. -그런 다음 충돌 영역 내에 자차가 진입할 시간과 장애물이 충돌 영역 내에 진입하는 시간의 차이인 충돌 시간 여유를 계산합니다. -이 여유 시간이 `behavior_determination.stop.crossing_obstacle.collision_time_margin`보다 작으면 여유가 부족합니다. +定速度運動を行う自車と、予測された経路上の障害物による衝突領域とその時間を予測します. +次に、自車が衝突領域内に到達する時間と、障害物が衝突領域内に到達する時間の差である衝突時間マージンを計算します. +この時間マージンが `behavior_determination.stop.crossing_obstacle.collision_time_margin` より小さい場合、マージンは不十分です. -| パラメータ | タイプ | 説明 | -| --------------------------------------------------------------------- | ------ | ------------------------------------ | -| `behavior_determination.stop.crossing_obstacle.collision_time_margin` | double | 自車と障害物との最大衝突時間マージン | +| パラメーター | 型 | 説明 | +| --------------------------------------------------------------------- | ---- | ------------------------------------------------------- | +| `behavior_determination.stop.crossing_obstacle.collision_time_margin` | double | 自車と障害物の最大衝突時間マージン | -### Stop Planning +### 停止Planning -| パラメータ | 型 | 説明 | -| -------------------------------------- | ------ | ---------------------------------------------------- | -| `common.min_strong_accel` | double | 自車の停止に必要な最小加速度 [m/ss] | -| `common.safe_distance_margin` | double | 障害物との安全距離 [m] | -| `common.terminal_safe_distance_margin` | double | 安全距離の範囲を超えない、障害物との最終安全距離 [m] | +| パラメータ | 型 | 説明 | +| -------------------------------------- | ------ | ----------------------------------------------------------------------------------------- | +| `common.min_strong_accel` | double | 自車の停止に必要な最小加速度 [m/ss] | +| `common.safe_distance_margin` | double | 障害物との停止距離 [m] | +| `common.terminal_safe_distance_margin` | double | 障害物との terminal 距離 (安全距離の範囲を超えることはできない) [m] | -停止計画の役割は、静止車両物体または動的/静止非車両物体と安全な距離を保つことです。 +停止計画の役割は、静的な車両物体または動的/静的な車両以外の物体を安全な距離に保つことです。 -停止計画は、障害物との距離を保つために停止点を軌道に挿入するだけです。安全距離は `common.safe_distance_margin` としてパラメータ化されます。軌道の最後に停止し、停止点に障害物が存在する場合、安全距離は `terminal_safe_distance_margin` になります。 +停止計画は、単に障害物との距離を保つために停止点を軌道に挿入するだけです。 +安全距離は `common.safe_distance_margin` としてパラメータ化されています。 +軌道の最後に停止し、障害物が同じ地点にある場合、安全距離は `terminal_safe_distance_margin` になります。 -停止点を挿入すると、自車が停止点の前で停止するために必要な加速度が計算されます。加速度が `common.min_strong_accel` より小さい場合、このパッケージは緊急時の急ブレーキを想定していないため、停止計画はキャンセルされます。 +停止点を挿入するとき、停止点の前で停止するために必要な車両の加速度が計算されます。 +加速度が `common.min_strong_accel` よりも小さい場合、このパッケージは緊急時に強く急ブレーキをかけることを想定していないため、停止計画はキャンセルされます。 -### クルーズプランニング +### クルーズ計画 -| パラメータ | 型 | 説明 | -| ----------------------------- | ------ | ---------------------------------- | -| `common.safe_distance_margin` | double | 定速走行時の障害物との最小距離 [m] | +| パラメータ | 型 | 説明 | +| ----------------------------- | ------ | ---------------------------------------------- | +| `common.safe_distance_margin` | double | 巡航時に障害物との間の最小距離 [m] | -**クルーズプランニング** +クルーズプランニングの役割は、スムースな速度遷移で動的車両オブジェクトとの安全な車間距離を維持することです。 +これには車両追従だけでなく、割り込みや割り出し車両に対する反応も含まれます。 -クルーズプランニングの役割は、滑らかな速度遷移により動的な車両オブジェクトとの安全車間距離を維持することです。これには、先行車両の追従だけでなく、割り込み・割り出し車両への対応も含まれます。 - -安全車間距離は、次の方程式による責任感応型安全(RSS)に基づいて動的に計算されます。 +安全な車間距離は、以下の式によって責任感応型安全 (RSS) に基づいて動的に計算されます。 $$ d_{rss} = v_{ego} t_{idling} + \frac{1}{2} a_{ego} t_{idling}^2 + \frac{v_{ego}^2}{2 a_{ego}} - \frac{v_{obstacle}^2}{2 a_{obstacle}}, $$ -ここで、$d_{rss}$ は計算された安全車間距離、$t_{idling}$ は先行車両の減速を自己車両が検出するまでのアイドリング時間、$v_{ego}$ は自己車両の現在の速度、$v_{obstacle}$ は先行障害物の現在の速度、$a_{ego}$ は自己車両の加速度、$a_{obstacle}$ は障害物の加速度と仮定します。 -これらの値は以下のとおりにパラメータ化されます。自己車両の最小加速度などの他の一般的な値は `common.param.yaml` で定義されています。 +ここで、$d_{rss}$ は計算された安全な車間距離、$t_{idling}$ は自車が前の車両の減速を検出するためのアイドリング時間、$v_{ego}$ は自車の現在の速度、$v_{obstacle}$ は前の障害物の現在の速度、$a_{ego}$ は自車の加速度、$a_{obstacle}$ は障害物の加速度であると仮定しています。 +これらの値は次のようにパラメータ化されています。自車の最小加速度などの他の共通の値は `common.param.yaml` で定義されています。 -| パラメータ | タイプ | 説明 | -| --------------------------------- | ------ | ---------------------------------------------------------- | -| `common.idling_time` | double | 前走車の減速開始を自己車両が検出するまでのアイドル時間 [s] | -| `common.min_ego_accel_for_rss` | double | RSS時の自己車両の加速度 [m/ss] | -| `common.min_object_accel_for_rss` | double | RSS時の前方の障害物の加速度 [m/ss] | +| パラメータ | タイプ | 説明 | +| ----------------------------------- | ------ | --------------------------------------------------------------------------------------------------------- | +| `common.idling_time` | double | 前方車両が減速を開始してから自車が認識するまでの猶予時間 [秒] | +| `common.min_ego_accel_for_rss` | double | RSSにおける自車の加速度 [m/秒^2] | +| `common.min_object_accel_for_rss` | double | RSSにおける前方障害物の加速度 [m/秒^2] | -詳細な定式は以下のとおりです。 +詳細な数式は以下の通りです。 $$ \begin{align} @@ -231,91 +233,51 @@ v_{target} & = max(v_{ego} + v_{add}, v_{min, cruise}) \end{align} $$ -| 変数 | 説明 | -| ----------------- | ----------------------------------- | -| `d` | 障害物までの実際の距離 | +| 変数 | 説明 | +| ----------------- | --------------------------------------- | +| `d` | 障害物までの実際の距離 | | `d_{rss}` | RSSに基づく障害物までの理想的な距離 | -| `v_{min, cruise}` | `min_cruise_target_vel` | -| `w_{acc}` | `output_ratio_during_accel` | -| `lpf(val)` | `val`にローパスフィルタを適用 | -| `pid(val)` | `val`にPIDを適用 | - -### 減速計画 - -Autowareの減速計画では、障害物やその他の危険な状況を回避するために、減速または停止する経路を計画します。 - -**コンポーネント** - -- **Planningコンポーネント:** 障害物を検出し、減速計画を計算します。 -- **Executionコンポーネント:** 減速計画を実行し、車両を所定の速度まで減速します。 - -**アルゴリズム** - -減速計画アルゴリズムは次の手順で動作します。 - -1. **障害物の検出:** Planningコンポーネントは、ライダーセンサーやカメラからのデータを使用して障害物を検出します。 -2. **危険性の評価:** 障害物との衝突の可能性と、その重症度を評価します。 -3. **最適な減速計画の計算:** 障害物との衝突を回避しながら、所定の速度まで減速するための最適な計画を計算します。 -4. **減速計画の実行:** Executionコンポーネントは、ブレーキやスロットルを制御して減速計画を実行します。 - -**パラメータ** - -減速計画アルゴリズムは、次のパラメータで構成できます。 - -- **最小減速距離:** 障害物との衝突を回避するために必要とされる最小減速距離 -- **最大減速率:** 車両が減速できる最大減速率 -- **目標速度:** 障害物との衝突を回避するために減速する目標速度 - -**制限事項** - -減速計画アルゴリズムには次のような制限があります。 - -- **センサーの制限:** 障害物の検出は、ライダーセンサーやカメラの能力に依存します。 -- **計算コスト:** 減速計画の計算は、大量の計算リソースを必要とする場合があります。 -- **環境の動的性:** 減速計画は、周囲環境の変化を考慮しません。 - -**アプリケーション** - -減速計画は、次のような自動運転アプリケーションに使用できます。 - -- **衝突回避:** 障害物との衝突を回避します。 -- **渋滞への対応:** 渋滞で安全な速度を維持します。 -- **停止交差点での停止:** 交差点で安全に停止します。 - -| パラメーター | タイプ | 説明 | -| -------------------------------------------------------------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `slow_down.labels` | vector(文字列) | 障害物のラベルに基づいた減速動作をカスタマイズするためのラベルのベクトル。各ラベルは、減速の適用時に異なる扱いを受ける障害物のタイプを表します。使用可能なラベルは次のとおりです(「default」(必須)、「unknown」、「car」、「truck」、「bus」、「trailer」、「motorcycle」、「bicycle」または「pedestrian」) | -| `slow_down.default.static.min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.static.max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.static.min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.static.max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が静止または移動していないと見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.moving.min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.moving.max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.moving.min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | -| `slow_down.default.moving.max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: 検出された障害物のラベルが `slow_down.labels` のいずれとも一致せず、障害物が移動していると見なされた場合に、このデフォルト値が使用されます | -| `(オプション) slow_down."ラベル".(static & moving).min_lat_velocity` | double | 減速速度を線形に計算するための最小速度 [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | -| `(オプション) slow_down."ラベル".(static & moving).max_lat_velocity` | double | 減速速度を線形に計算するための最大速度 [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | -| `(オプション) slow_down."ラベル".(static & moving).min_lat_margin` | double | 減速速度を線形に計算するための最小横方向のマージン [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | -| `(オプション) slow_down."ラベル".(static & moving).max_lat_margin` | double | 減速速度を線形に計算するための最大横方向のマージン [m]。注: `slow_down.labels` で指定された障害物のみを使用します。`static` と `moving` の値が必要です | - -減速プランニングの役割は、障害物に近い軌跡のポイントに減速速度を挿入することです。障害物の種類(「slow_down.labels」を参照)に応じてパラメーターをカスタマイズすることができ、障害物が歩行者、自転車、車などであるかによって減速の動作を調整できます。各障害物タイプには「static」と「moving」のパラメーターセットがあり、障害物タイプとその動きに合わせて自己車両の減速レスポンスをカスタマイズできます。障害物が移動していると判断された場合、対応する「moving」パラメーターセットを使用して車両の減速を計算しますが、そうでない場合は「static」パラメーターを使用します。静的な「static」と移動中の「moving」の分離は、たとえば、視界を遮る可能性のある停止車両や、突然ドアを開ける可能性のある停止車両を追い越すときに大幅に減速するなど、自己車両の減速動作をカスタマイズするのに役立ちます。 - -障害物の合計速度が「moving_object_speed_threshold」パラメーター未満の場合、障害物は「static」に分類されます。さらに、ヒステリシスに基づくアプローチを使用してチャタリングを回避します。これには、「moving_object_hysteresis_range」パラメーター範囲および障害物の前の状態(「moving」または「static」)を使用して、障害物が移動しているかどうかを判断します。言い換えれば、障害物が以前に「static」として分類されていた場合、合計速度が「moving_object_speed_threshold」+「moving_object_hysteresis_range」より大きくならない限り、その分類は「moving」に変更されません。同様に、以前に「moving」として分類された障害物は、速度が「moving_object_speed_threshold」-「moving_object_hysteresis_range」より低くならない限り「static」に変更されません。 - -自己の軌跡に対する障害物上で自己の位置に最も近い点が計算されます。次に、減速速度は次のようにポイントと軌跡間の距離との線形補間によって計算されます。 +| `v_{min, cruise}` | `min_cruise_target_vel` | +| `w_{acc}` | `output_ratio_during_accel` | +| `lpf(val)` | `val`にローパスフィルタを適用 | +| `pid(val)` | `val`にPIDを適用 | + +### 減速プランニング + +| パラメーター | 型 | 説明 | +| ---------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `slow_down.labels` | ベクトル(文字列) | 障害物ラベルベースの減速挙動をカスタマイズするためのラベルのベクトル。各ラベルは、減速を適用する際に異なる方法で処理される障害物の種類を表します。使用可能なラベルは ("default" (必須)、「unknown」、「car」、「truck」、「bus」、「trailer」、「motorcycle」、「bicycle」 または 「pedestrian」) | +| `slow_down.default.static.min_lat_velocity` | double | 減速速度を線形計算するための最小速度 [m]。注: この既定値は、検出された障害物ラベルが `slow_down.labels` のどれとも一致せず、障害物が静的または移動していないと見なされる場合に使用されます。 | +| `slow_down.default.static.max_lat_velocity` | double | 減速速度を線形計算するための最大速度 [m]。注: この既定値は、検出された障害物ラベルが `slow_down.labels` のどれとも一致せず、障害物が静的または移動していないと見なされる場合に使用されます。 | +| `slow_down.default.static.min_lat_margin` | double | 減速速度を線形計算するための最小横断マージン [m]。注: この既定値は、検出された障害物ラベルが `slow_down.labels` のどれとも一致せず、障害物が静的または移動していないと見なされる場合に使用されます。 | +| `slow_down.default.static.max_lat_margin` | double | 減速速度を線形計算するための最大横断マージン [m]。注: この既定値は、検出された障害物ラベルが `slow_down.labels` のどれとも一致せず、障害物が静的または移動していないと見なされる場合に使用されます。 | +| `slow_down.default.moving.min_lat_velocity` | double | 減速速度を線形計算するための最小速度 [m]。注: この既定値は、検出された障害物ラベルが `slow_down.labels` のどれとも一致せず、障害物が移動していると見なされる場合に使用されます。 | +| `slow_down.default.moving.max_lat_velocity` | double | 減速速度を線形計算するための最大速度 [m]。注: この既定値は、検出された障害物ラベルが `slow_down.labels` のどれとも一致せず、障害物が移動していると見なされる場合に使用されます。 | +| `slow_down.default.moving.min_lat_margin` | double | 減速速度を線形計算するための最小横断マージン [m]。注: この既定値は、検出された障害物ラベルが `slow_down.labels` のどれとも一致せず、障害物が移動していると見なされる場合に使用されます。 | +| `slow_down.default.moving.max_lat_margin` | double | 減速速度を線形計算するための最大横断マージン [m]。注: この既定値は、検出された障害物ラベルが `slow_down.labels` のどれとも一致せず、障害物が移動していると見なされる場合に使用されます。 | +| (任意) `slow_down."label" .(static & moving).min_lat_velocity` | double | 減速速度を線形計算するための最小速度 [m]。注: `slow_down.labels `で指定された障害物にのみ使用します。`static` と `moving` の値が必要です。 | +| (任意) `slow_down."label" .(static & moving).max_lat_velocity` | double | 減速速度を線形計算するための最大速度 [m]。注: `slow_down.labels `で指定された障害物にのみ使用します。`static` と `moving` の値が必要です。 | +| (任意) `slow_down."label" .(static & moving).min_lat_margin` | double | 減速速度を線形計算するための最小横断マージン [m]。注: `slow_down.labels `で指定された障害物にのみ使用します。`static` と `moving` の値が必要です。 | +| (任意) `slow_down."label" .(static & moving).max_lat_margin` | double | 減速速度を線形計算するための最大横断マージン [m]。注: `slow_down.labels `で指定された障害物にのみ使用します。`static` と `moving` の値が必要です。 | + +スローダウン計画の役割は、障害物に軌跡点が近い軌道に減速速度を挿入することです。パラメータは障害物の種類(`slow_down.labels`を参照)に応じてカスタマイズでき、障害物が歩行者、自転車、自動車などに応じて減速動作を調整できます。各種類の障害物には`static`と`moving`のパラメータ設定があり、それによって障害物の種類と運動状態に応じた自車の減速反応をカスタマイズできます。障害物が運動していると判断された場合、対応する`moving`パラメータを使用して車両の減速を計算します。それ以外の場合は、`static`パラメータを使用します。`static`と`moving`の分離は、たとえば、閉塞を引き起こしたり突然ドアを開けたりする可能性のある停止した車両を追い越すときにさらに著しく減速するなど、自車の減速動作をカスタマイズするために役立ちます。 + +障害物が`static`に分類されるのは、その全速度が`moving_object_speed_threshold`パラメータ未満の場合です。さらに、チャタリングを避けるために履歴を利用したアプローチが使用され、障害物の過去の状態(`moving`または`static`)と`moving_object_hysteresis_range`パラメータ範囲を使用して、障害物が運動しているかどうかを判断します。つまり、障害物が以前に`static`に分類された場合、その全速度が`moving_object_speed_threshold` + `moving_object_hysteresis_range`を超えない限り、その分類は`moving`に変更されません。同様に、以前に`moving`として分類された障害物は、速度が`moving_object_speed_threshold` - `moving_object_hysteresis_range`未満の場合にのみ`static`に変更されます。 + +自車の軌跡に最も近い障害物上の点が計算されます。次に、点と軌跡との距離を使用して、減速速度は次のとおり線形補間によって計算されます。 ![slow_down_velocity_calculation](./media/slow_down_velocity_calculation.svg) -| 変数 | 説明 | -| ---------- | ------------------------------------------------- | -| `v_{out}` | 減速の計算速度 | -| `v_{min}` | `slow_down.min_lat_velocity` | -| `v_{max}` | `slow_down.max_lat_velocity` | -| `l_{min}` | `slow_down.min_lat_margin` | -| `l_{max}` | `slow_down.max_lat_margin` | +| 変数 | 説明 | +| ---------- | -------------------------------------------- | +| `v_{out}` | 低速化の計算速度 | +| `v_{min}` | `slow_down.min_lat_velocity` | +| `v_{max}` | `slow_down.max_lat_velocity` | +| `l_{min}` | `slow_down.min_lat_margin` | +| `l_{max}` | `slow_down.max_lat_margin` | | `l'_{max}` | `behavior_determination.slow_down.max_lat_margin` | -計算された速度は、障害物が「behavior_determination.slow_down.max_lat_margin」のある領域内にある軌跡に挿入されます。 +障害物が`behavior_determination.slow_down.max_lat_margin`の範囲内にある場合、計算された速度が経路に挿入されます。 ![slow_down_planning](./media/slow_down_planning.drawio.svg) @@ -323,10 +285,12 @@ Autowareの減速計画では、障害物やその他の危険な状況を回避 ### フローチャート -連続的な機能は、以下のように「autoware_obstacle_cruise_planner」で構成されます。 +連続する関数は次のように`autoware_obstacle_cruise_planner`で構成されます。 + +停止および巡行計画用としてさまざまなアルゴリズムが実装され、そのうち 1 つがユースケースに応じて指定されます。 + +コアアルゴリズムの実装である`generateTrajectory`が、指定されたアルゴリズムに従います。 -停止およびクルーズプランニング用のさまざまなアルゴリズムが実装され、ユースケースに応じてそのうちの1つが指定されます。 -コアアルゴリズム実装「generateTrajectory」は、指定されたアルゴリズムに依存します。 ```plantuml @startuml @@ -368,85 +332,84 @@ stop @enduml ``` -### クルーズプランナ用のアルゴリズム選択 +### クルーズプランナーのアルゴリズム選択 -現在は、PIDベースのプランナのみがサポートされています。 -各プランナについては以下で説明します。 +現在、PIDベースのプランナーのみがサポートされています。 +各プランナーについては以下で説明します。 -| パラメータ | タイプ | 説明 | -| ------------------------ | ------ | -------------------------------------------------- | -| `common.planning_method` | string | CruiseとStop計画アルゴリズム。「pid_base」から選択 | +| パラメータ | タイプ | 説明 | +| ------------------------ | ------ | ------------------------------------------------------------ | +| `common.planning_method` | 文字列 | "pid_base"から選択される、クルーズと停止の計画アルゴリズム | -### PIDベースプランナ +### PIDベースのプランナー -#### 停止プランニング +#### 停車プランニング -`pid_based_planner`名前空間で、 +`pid_based_planner` 名前空間で、 -| パラメーター | タイプ | 説明 | -| ------------------------------------------------- | ------ | ---------------------------------------------------- | -| `obstacle_velocity_threshold_from_cruise_to_stop` | double | 定速走行から停止へと移行する際の障害物速度閾値 [m/s] | +| パラメータ | タイプ | 説明 | +| ------------------------------------------------- | ------ | ------------------------------------------------------------ | +| `obstacle_velocity_threshold_from_cruise_to_stop` | double | obstacle velocity threshold to be stopped from cruised [m/s] | -停止プランニングでは、障害物を1つだけ対象にします。 +停止Planningでは、障害物の1つだけが対象となります。 -対象となる障害物候補から、速度が `obstacle_velocity_threshold_from_cruise_to_stop` 未満で、軌道上で自車に最も近い障害物を選択します。自車と障害物の間隔を `common.safe_distance_margin` 分確保した停止地点が挿入されます。 +障害物候補の中で、速度が「`obstacle_velocity_threshold_from_cruise_to_stop`」未満で、軌跡上においてエゴカーに最も近い障害物です。エゴカーと障害物の間に「`common.safe_distance_margin`」の距離を保ちながら停止点が挿入されます。 -停止プランニングの設計で説明したように、強い加速度を必要とする停止プランニング(`common.min_strong_accel` 未満)はキャンセルされますのでご注意ください。 +停止Planningの設計で説明したとおり、強い加速度(「`common.min_strong_accel`」未満)が必要な停止Planningはキャンセルされますのでご注意ください。 -#### クルーズプランニング +#### Cruise Planning -`pid_based_planner` 名前空間では、 +「`pid_based_planner`」のネームスペースで -| パラメータ | 型 | 説明 | -| --------------------------- | ------ | ------------------------------------------------------------------------ | -| `kp` | double | PID制御のPゲイン [-] | -| `ki` | double | PID制御のIゲイン [-] | -| `kd` | double | PID制御のDゲイン [-] | -| `output_ratio_during_accel` | double | 加速時に、先行車両を追従するために、出力速度にこの係数を乗算します。 [-] | -| `vel_to_acc_weight` | double | 目標加速度は目標速度 \* `vel_to_acc_weight` です。 [-] | -| `min_cruise_target_vel` | double | 定速走行中の最低目標速度 [m/s] | +| パラメータ | タイプ | 説明 | +| --------------------------- | ------ | -------------------------------------------------------------------------------------------------------- | +| `kp` | double | PID制御のpゲイン [-] | +| `ki` | double | PID制御のiゲイン [-] | +| `kd` | double | PID制御のdゲイン [-] | +| `output_ratio_during_accel` | double | 前方車両を追従するときの、加速中の出力速度にこの比率を乗算します。 [-] | +| `vel_to_acc_weight` | double | ターゲット加速度はターゲット速度 \* `vel_to_acc_weight` [-] | +| `min_cruise_target_vel` | double | クルーズ中の最小ターゲット速度 [m/s] | -安全距離を確保するために、目標速度と加速度が計算され、外部速度制限として速度平滑化パッケージ (`motion_velocity_smoother` が初期値) に送信されます。 -目標速度と加速度はそれぞれ、基準安全距離と実際の距離の誤差に従って PID コントローラで計算されます。 +安全距離を維持するために、目標速度と目標加速度が計算され、外部速度制限として速度スムージングパッケージ(デフォルトで `motion_velocity_smoother`)に送信されます。 +目標速度と目標加速度はそれぞれ、参照安全距離と実際の距離の差に基づいてPIDコントローラを使用して計算されます。 -### 最適化ベース計画 +### 最適化ベースのプランナー -作成中 +準備中 -## マイナー関数 +## マイナー機能 -### 挙動モジュールの停止ポイントの優先順位 +### 行動モジュールの停止点の優先順位 -横断歩道で歩行している歩行者に対して停止する場合、挙動モジュールは横断歩道の前に軌道に 0 速度を挿入します。 -`autoware_obstacle_cruise_planner` の停止計画も機能しますが、`autoware_obstacle_cruise_planner` で定義された安全距離が挙動モジュールの安全距離よりも長くなる可能性があるため、エゴは挙動モジュールの停止ポイントに到達しない場合があります。 -挙動モジュールと `autoware_obstacle_cruise_planner` 間の停止ポイントの非整合を解決するために、`common.min_behavior_stop_margin` が定義されています。 -先に説明した横断歩道の場合は、`autoware_obstacle_cruise_planner` は、エゴと障害物の間に少なくとも `common.min_behavior_stop_margin` の距離で停止ポイントを挿入します。 +横断歩道を歩いている歩行者のために停止するとき、動作モジュールは横断歩道の手前に軌道にゼロ速度を入力します。 +また、`autoware_obstacle_cruise_planner` の停止計画も機能し、`autoware_obstacle_cruise_planner` で定義された安全距離は動作モジュールの安全距離よりも長くなる可能性があるため、エゴが動作モジュールの停止点に到達しない場合があります。 +動作モジュールと `autoware_obstacle_cruise_planner` の停止点が不整合になる問題を解決するために、`common.min_behavior_stop_margin` が定義されます。 +上記のような横断歩道の場合は、`autoware_obstacle_cruise_planner` が、エゴと障害物の間に少なくとも距離 `common.min_behavior_stop_margin` の停止点を挿入します。 -| パラメータ | 型 | 説明 | -| --------------------------------- | ---- | -------------------------------------------------------------------- | -| `common.min_behavior_stop_margin` | 数値 | ビヘイビアモジュールが有効な状態で停止した場合の最小停止マージン [m] | +| パラメータ | タイプ | 説明 | +| --------------------------------- | ------ | ---------------------------------------------------------------------- | +| `common.min_behavior_stop_margin` | double | Behaviorモジュールが有効になっているときの停止時の最小停止余裕距離 [m] | -### ターゲット障害物内の最も近い停止障害物を保持する機能 +### ターゲット障害物内の最も近い停止障害物を保持する関数 -ターゲット障害物内の最も近い停止障害物を保持するために、`checkConsistency` 関数において、その障害物がターゲット障害物から消去されたかどうかを確認します。 +ターゲット障害物内の最も近い停止障害物を保持するため、`checkConsistency` 関数でターゲット障害物から消失したかどうかを確認します。 +以前の最も近い停止障害物がリストから削除された場合、`stop_obstacle_hold_time_threshold` 秒間リストに保持します。 +新しい停止障害物が出現して以前の最も近い障害物がリストから削除された場合、ターゲット障害物に再び追加しないことに注意してください。 -前回の最も近い停止障害物がリストから削除された場合、`stop_obstacle_hold_time_threshold` 秒間リスト内に保持します。 - -新しい停止障害物が現れて以前の最も近い障害物がリストから削除された場合、その障害物をターゲット障害物に再び追加しないことに注意してください。 - -| パラメータ | タイプ | 説明 | -| ---------------------------------------------------------- | ------ | -------------------------------------- | -| `behavior_determination.stop_obstacle_hold_time_threshold` | double | 最近接停止障害物を保持する最大時間 [s] | +| パラメータ | 型 | 説明 | +| -------------------------------------------------------- | ------ | --------------------------------------------------- | +| `behavior_determination.stop_obstacle_hold_time_threshold` | double | 最も近い停止障害物を保持する最大時間 [s] | ## デバッグ方法 -デバッグ方法は[こちら](docs/debug.md)を参照のこと。 +デバッグの手順については、[こちら](docs/debug.md)を参照してください。 ## 既知の制限事項 - 共通 - - 障害物の位置や速度推定に遅れがあると、自車が減速を維持しながら前方の車両に接近することがあります。 - - 現在の実装では静的・動的障害物の予測オブジェクトのメッセージのみを使用し、ポイントクラウドは使用しません。したがって、オブジェクト認識が失われると、自車は消失した障害物に対処できません。 - - 現在、障害物の車線変更の予測パスでは障害物クルーズプランナーの精度を確保できません。したがって、`rough_detection_area`は小さい値に設定します。 -- PIDベースプランナー - - アルゴリズムは、自車が指定された目標速度を実現するかどうかが、速度スムージングパッケージ(既定では`motion_velocity_smoother`)に大きく依存します。速度スムージングパッケージを更新した場合は、車両の挙動を可能な限り注意してください。 + - 障害物の姿勢または速度の推定に遅延があると、自車は減速を維持したまま前方の車両に接近する場合があります。 + - 現在の実装では、静的/動的障害物に対して予測されたオブジェクトメッセージのみを使用しており、点群は使用しません。したがって、オブジェクト認識が失われると、自車は消失した障害物に対処できなくなります。 + - 障害物の車線変更に対する現在の予測パスは、`obstacle_cruise_planner`には精度が十分ではありません。そのため、`rough_detection_area`を小さな値に設定しています。 +- PIDベースのプランナー + - アルゴリズムは、自車が指定された目標速度に達するかどうかを決定する速度スムージングパッケージ (`motion_velocity_smoother`がデフォルト)に強く依存します。速度スムージングパッケージを更新する場合は、車両の挙動をできるだけ注意深く確認してください。 + diff --git a/planning/autoware_obstacle_stop_planner/README.md b/planning/autoware_obstacle_stop_planner/README.md index 905143a7becc0..13ff97d084086 100644 --- a/planning/autoware_obstacle_stop_planner/README.md +++ b/planning/autoware_obstacle_stop_planner/README.md @@ -1,58 +1,58 @@ -# 障害物停止計画 +# 障害物停止プランナー ## 概要 -`obstacle_stop_planner` には次のモジュールがあります。 +`obstacle_stop_planner`には次のモジュールがあります。 -- 障害物停止計画 - - 静的な点群が経路にある場合に、軌跡に停止点を入れます。 -- 減速計画 - - 点群が経路近くにある場合に、軌跡に減速区間を入れます。 -- アダプティブクルーズコントロール (ACC) - - 動的な点群が経路にある場合に、軌跡に目標速度を組み込みます。 +- 障害物停止プランナー + - 走行軌跡上に静的な点群がある場合、軌跡に停止点を入力します。 +- 減速プランナー + - 走行軌跡付近に点群がある場合、軌跡に減速区間を入力します。 +- アダプティブ・クルーズ・コントロール(ACC) + - 走行軌跡上に動的な点群がある場合、軌跡に目標速度を入力します。 ### 入力トピック -| 名称 | タイプ | 説明 | -| --------------------------- | -------------------------------------------- | -------------- | -| `~/input/pointcloud` | `sensor_msgs::PointCloud2` | 障害物点群 | -| `~/input/trajectory` | `autoware_planning_msgs::Trajectory` | 経路 | -| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | -| `~/input/odometry` | `nav_msgs::Odometry` | 車両速度 | -| `~/input/dynamic_objects` | `autoware_perception_msgs::PredictedObjects` | 動的物体 | -| `~/input/expand_stop_range` | `tier4_planning_msgs::msg::ExpandStopRange` | 停止範囲の拡張 | +| 名前 | 種類 | 説明 | +|---|---|---| +| `~/input/pointcloud` | sensor_msgs::PointCloud2 | 障害物の点群 | +| `~/input/trajectory` | autoware_planning_msgs::Trajectory | 軌道 | +| `~/input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクターマップ | +| `~/input/odometry` | nav_msgs::Odometry | 車両速度 | +| `~/input/dynamic_objects` | autoware_perception_msgs::PredictedObjects | 動的物体 | +| `~/input/expand_stop_range` | tier4_planning_msgs::msg::ExpandStopRange | 停止範囲の拡張 | ### 出力トピック -| 名称 | タイプ | 説明 | -| ---------------------- | ------------------------------------ | -------------------- | -| `~output/trajectory` | autoware_planning_msgs::Trajectory | 走行軌跡 | -| `~output/stop_reasons` | tier4_planning_msgs::StopReasonArray | 停止を引き起こす理由 | +| 名称 | タイプ | 説明 | +| -------------------------- | -------------------------------------- | ------------------------------------------- | +| `~output/trajectory` | `autoware_planning_msgs::Trajectory` | 従うべき軌跡 | +| `~output/stop_reasons` | `tier4_planning_msgs::StopReasonArray` | 車両が停止する理由 | ### 共通パラメータ -{{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/common.schema.json") | ja-markdown }} +{{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/common.schema.json", "ja") }} -| パラメータ | 型 | 説明 | -| -------------------------------------- | ------ | ------------------------------------------------------------------------------------------------ | -| `enable_slow_down` | bool | 低速化プランナを有効にする [-] | -| `max_velocity` | double | 最大速度 [m/s] | -| `chattering_threshold` | double | 障害物が消滅しても、停止判定を一定時間続ける [s](チャタリング防止) | -| `enable_z_axis_obstacle_filtering` | bool | z軸(高さ)方向の障害物をフィルタする [-] | -| `z_axis_filtering_buffer` | double | z軸フィルタのための追加バッファ [m] | -| `use_predicted_objects` | bool | 衝突検出と減速検出に予測オブジェクトを使用する [-] | -| `predicted_object_filtering_threshold` | double | 予測オブジェクトをフィルタするための閾値 [有効なのはpublish_obstacle_polygon trueの場合のみ] [m] | -| `publish_obstacle_polygon` | bool | use_predicted_objectsがtrueの場合、ノードが衝突ポリゴンを公開する [-] | +| パラメータ | 型 | 説明 | +| -------------------------------------- | ------ | -------------------------------------------------------------------------------------------- | +| `enable_slow_down` | bool | slow down Planner [-] を有効にする | +| `max_velocity` | double | 最大速度 [m/s] | +| `chattering_threshold` | double | 障害物が消えても、停止判定は `chattering_threshold` [s] の間継続する | +| `enable_z_axis_obstacle_filtering` | bool | Z 軸(高さ)の障害物をフィルタリングする [-] | +| `z_axis_filtering_buffer` | double | Z 軸フィルタ用追加バッファ [m] | +| `use_predicted_objects` | bool | 衝突や減速検出に予測オブジェクトを使用するかどうか [-] | +| `predicted_object_filtering_threshold` | double | 予測オブジェクトをフィルタリングするためのしきい値(`publish_obstacle_polygon true` のみ有効) [m] | +| `publish_obstacle_polygon` | bool | `use_predicted_objects` が true の場合、ノードは衝突ポリゴンを発行する [-] | ## 障害物停止プランナー ### 役割 -このモジュールは、障害物に一定のマージンを持たせ、停止点を障害物の前に挿入します。通常、マージンは `baselink_to_front` と `max_longitudinal_margin` の合計です。`baselink_to_front` は `baselink`(後輪軸の中心)と車の前面との距離です。検出エリアは、次に示すように処理済みの軌跡に沿って生成されます(このモジュールは自己位置の後ろの軌跡をカットオフし、計算コストを削減するために軌跡ポイントを間引きします)。 +このモジュールは障害物の前にマージンを設けて停車地点を挿入します。通常の場合、マージンは `baselink_to_front` と `max_longitudinal_margin` の合計です。 `baselink_to_front` は、リアアクスルの中心である `baselink` と車の前面との距離を意味します。検出領域は、処理された経路に沿って、次のように生成されます。(このモジュールは、自車位置の後の入力経路を切り取り、計算コストを削減するために経路ポイントをデシメートします。)
![example](./docs/collision_parameters.svg){width=1000} -
障害物停止プランナーのパラメーター
+
障害物停止プランナーのパラメータ
@@ -60,24 +60,24 @@
障害物停止プランナーのターゲット
-他のモジュールによって `max_longitudinal_margin` 内に別の停止点が挿入されている場合は、マージンは `baselink_to_front` と `min_longitudinal_margin` の合計になります。この機能は、不自然な位置での停止を防ぐために存在します(たとえば、歩行者が横断する横断歩道の停止線から、不自然に離れたところで自己停止します)。 +他のモジュールが既に `max_longitudinal_margin` 以内に別の停止地点を挿入している場合、マージンは `baselink_to_front` と `min_longitudinal_margin` の合計になります。この機能は、不自然な位置で停止しないようにするために存在します。(例えば、歩行者が横断している横断歩道の停止線から、この機能がないと自車が不自然に遠く離れて停止します。)
![example](./docs/min_longitudinal_margin.svg){width=1000} -
最小縦方向マージン
+
最小縦断マージン
-このモジュールは、検出エリア内の障害物ポイントクラウドを検索します。ポイントクラウドが見つかると、`Adaptive Cruise Controller` モジュールが動作し始めます。`Adaptive Cruise Controller` モジュールがターゲット速度を挿入しない場合にのみ、停止点が軌跡に挿入されます。停止点は、速度が 0 のポイントを意味します。 +このモジュールは、検出領域内の障害物ポイントクラウドを検索します。ポイントクラウドが見つかった場合、`アダプティブクルーズコントローラー(Adaptive Cruise Controller)`モジュールが動作を開始します。`アダプティブクルーズコントローラー(Adaptive Cruise Controller)`モジュールがターゲット速度を挿入しない場合のみ、停止地点が経路に挿入されます。停止地点とは、速度が 0 のポイントを意味します。 -### 再起動防止 +### 再始動防止 -車両の制御性能が悪い場合、車両が動き始めると停止するまでに X メートル(例: 0.5 メートル)が必要となるため、車両は、近くの停止点に接近するために動き始めると厳守すべき停止位置を超過します(例: 0.3 メートル離れています)。 +車体の制御性能が悪いため、一旦車が動き出すと停止に X メートル(例:0.5 メートル)必要になると、近い停止地点に近づくために動き始めて(例:0.3 メートル先)、厳守すべき停止位置を過ぎてしまいます。 -このモジュールには、これらの冗長な再起動を防ぐために `hold_stop_margin_distance` パラメーターがあります。車両がモジュールの停止点から `hold_stop_margin_distance` メートル以内で停止した場合、モジュールは車両がすでにモジュールの停止点で停止していると判断し、他の要因で車両が停止しても停止を維持することを計画します。 +このモジュールには、`hold_stop_margin_distance` パラメータがあり、このような無駄な再始動を防止します。車両がモジュールの停止地点から `hold_stop_margin_distance` メートル以内で停止した場合、モジュールは車両がモジュールの停止地点ですでに停止していると判断し、車両が他の要因で停止した場合でも現在の位置での停止を維持することを計画します。
![example](./docs/restart_prevention.svg){width=1000} -
パラメーター
+
パラメータ
@@ -90,27 +90,28 @@
hold_stop_margin_distance の内側
-{{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/obstacle_stop_planner.schema.json", "ja") }} +{{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/obstacle_stop_planner.schema.json") }} #### 停止位置 -| パラメータ | データ型 | 説明 | -| ------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------- | -| `max_longitudinal_margin` | double | 障害物と本車両前面とのマージン [m] | -| `max_longitudinal_margin_behind_goal` | double | 停止点がゴールの後ろにある場合の障害物と本車両前面とのマージン [m] | -| `min_longitudinal_margin` | double | `max_longitudinal_margin` 内に障害物がある場合、モジュールは停止マージンの値を `min_longitudinal_margin` [m] に設定します | -| `hold_stop_margin_distance` | double | 再起動防止のパラメータ(上のセクションを参照) [m] | +| パラメーター | 型 | 説明 | +| ------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------- | +| `max_longitudinal_margin` | 倍精度 | 障害物と自車前面のマージン [m] | +| `max_longitudinal_margin_behind_goal` | 倍精度 | 停止点が目標の後ろにあるときの障害物と自車前面のマージン [m] | +| `min_longitudinal_margin` | 倍精度 | `max_longitudinal_margin` 内に障害物が存在する場合、このモジュールはマージンを_停止マージン_の値として `min_longitudinal_margin` [m] に設定 | +| `hold_stop_margin_distance` | 倍精度 | 再始動防止のパラメーター(上記のセクションを参照) [m] | #### 障害物検出領域 -| パラメータ | 型 | 説明 | -| -------------------------------------- | ------ | ---------------------------------------------------------- | -| `lateral_margin` | double | 障害物検知領域の車輪軌跡からの横マージン [m] | -| `step_length` | double | 点群検索範囲のステップ長 [m] | -| `enable_stop_behind_goal_for_obstacle` | bool | 障害物検出のためにゴールレーンを超えてトラジェクトリを延長 | +| パラメーター | タイプ | 説明 | +| ------------------------------ | ------ | ------------------------------------------------------------------------------------------- | +| `lateral_margin` | double | 衝突障害物検出領域としての車両のフットプリントからの横方向マージン [m] | +| `step_length` | double | ポイントクラウド検索範囲のステップ長 [m] | +| `enable_stop_behind_goal_for_obstacle` | bool | 障害物検出のための目標車線の後に軌道を延長する有効化 | ### フローチャート + ```plantuml @startuml title insertStopPoint @@ -142,59 +143,60 @@ stop @enduml ``` -## スローダウン プランナー +## スローダウンプランナー ### 役割 -このモジュールは、前進マージンと後進マージンを使用して障害物前に減速区間を挿入します。前進マージンは `baselink_to_front` と `longitudinal_forward_margin` の合計であり、後退マージンは `baselink_to_front` と `longitudinal_backward_margin` の合計です。自車は減速区間に減速速度を維持します。速度は次の式で計算されます。 +このモジュールは、障害物手前に、前進マージンと後進マージンを設けた減速セクションを挿入します。前進マージンは `baselink_to_front` と `longitudinal_forward_margin` の合計であり、後進マージンは `baselink_to_front` と `longitudinal_backward_margin` の合計です。自車は減速セクションで減速速度を維持します。速度は次の式で計算されます。 $v_{target} = v_{min} + \frac{l_{ld} - l_{vw}/2}{l_{margin}} (v_{max} - v_{min} )$ -- $v_{target}$ : 減速目標速度 [m/s] -- $v_{min}$ : `min_slow_down_velocity` [m/s] -- $v_{max}$ : `max_slow_down_velocity` [m/s] -- $l_{ld}$ : 障害物と自車フットプリント間の横断偏差 [m] -- $l_{margin}$ : `lateral_margin` [m] -- $l_{vw}$ : 自車フットプリントの幅 [m] +- $v_{target}$: スローダウン目標速度 [m/s] +- $v_{min}$: `min_slow_down_velocity` [m/s] +- $v_{max}$: `max_slow_down_velocity` [m/s] +- $l_{ld}$: 障害物と自車フットプリント間の横方向偏差 [m] +- $l_{margin}$: `lateral_margin` [m] +- $l_{vw}$: 自車フットプリントの幅 [m] -上記の式は、ポイントクラウドの横断偏差が小さいほど、減速区間の速度が低くなることを意味します。 +この式は、点群の横方向偏差が小さいほど減速セクションの速度が低くなることを意味します。
- ![例](./docs/slow_down_parameters.svg){width=1000} -
減速プランナーのパラメータ
+ ![example](./docs/slow_down_parameters.svg){width=1000} +
スローダウンプランナーのパラメーター
- ![例](./docs/slow_down_target.svg){width=1000} -
減速プランナーの目標
+ ![example](./docs/slow_down_target.svg){width=1000} +
スローダウンプランナーのターゲット
-### パラメータ +### パラメーター {{ json_to_markdown("planning/autoware_obstacle_stop_planner/schema/adaptive_cruise_control.schema.json") }} -#### 減速区間 +#### スローダウンセクション -| パラメーター | 型 | 説明 | -| ------------------------------ | ------ | -------------------------------- | -| `longitudinal_forward_margin` | double | 自車前面と障害物間のマージン [m] | -| `longitudinal_backward_margin` | double | 自車後面と障害物間のマージン [m] | +| パラメーター | タイプ | 説明 | +|---|---|---| +| `longitudinal_forward_margin` | double | オブジェクトと自車前面との余裕距離 [m] | +| `longitudinal_backward_margin` | double | オブジェクトと自車背面との余裕距離 [m] | -#### 障害物検知領域 +#### 障害物検出領域 -| パラメータ | タイプ | 説明 | -| ---------------- | ------ | -------------------------------------------------------------- | -| `lateral_margin` | double | 減速障害検出エリアの車両フットプリントからの横方向マージン [m] | +| パラメータ | タイプ | 説明 | +|---|---|---| +| `lateral_margin` | double | 減速障害物検出エリアにおける車体のフットプリントからの横方向のマージン [m] | -#### 減速目標速度 +#### ターゲット速度の減速 -| パラメータ名 | 型 | 説明 | -| ------------------------ | ------ | ------------------ | -| `max_slow_down_velocity` | double | 最大減速速度 [m/s] | -| `min_slow_down_velocity` | double | 最小減速速度 [m/s] | +| パラメータ | 型 | 説明 | +| ------------------------ | ------ | --------------------------- | +| `max_slow_down_velocity` | double | 最大減速速度 [m/s] | +| `min_slow_down_velocity` | double | 最小減速速度 [m/s] | ### フローチャート + ```plantuml @startuml title insertDecelerationPoint @@ -221,47 +223,48 @@ stop @enduml ``` -## アダプティブ・クルーズ・コントローラー +## Adaptive Cruise Controller ### 役割 -`Adaptive Cruise Controller`モジュールは、軌道上に動的点群がある場合、軌道内の最大速度を組み込みます。最大速度の値は、自車速度、点群速度(=前走車速度)、および点群までの距離(=前走車までの距離)によって異なります。 +`Adaptive Cruise Controller`モジュールは、経路上に動的な点群がある場合に、経路における最高速度を埋め込みます。最高速度の値は、自車速度、点群速度(=前方車の速度)、点群までの距離(=前方車までの距離)によって異なります。 -| パラメータ | 型 | 説明 | +| パラメータ | 型 | 説明 | | ---------------------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------- | -| `adaptive_cruise_control.use_object_to_estimate_vel` | bool | 物体の速度を推定するために動的な物体を使用するかどうか(osp.use_predicted_objectsがfalseの場合にのみ有効) | -| `adaptive_cruise_control.use_pcl_to_estimate_vel` | bool | 物体の速度を推定するために生の点群を使用するかどうか(osp.use_predicted_objectsがfalseの場合にのみ有効) | -| `adaptive_cruise_control.consider_obj_velocity` | bool | 追従走行時に目標速度を計算するために車両の速度を考慮するかどうか | -| `adaptive_cruise_control.obstacle_velocity_thresh_to_start_acc` | double | 前方障害物の速度がこの値を超えると追従走行を開始する [m/s] | -| `adaptive_cruise_control.obstacle_velocity_thresh_to_stop_acc` | double | 前方障害物の速度がこの値を下回るとACCを停止する [m/s] | -| `adaptive_cruise_control.emergency_stop_acceleration` | double | 緊急停止時の想定最小加速度(減速度)[m/ss] | -| `adaptive_cruise_control.emergency_stop_idling_time` | double | 緊急停止を開始するための想定停止時間 [s] | -| `adaptive_cruise_control.min_dist_stop` | double | 緊急停止の最小距離 [m] | -| `adaptive_cruise_control.obstacle_emergency_stop_acceleration` | double | 緊急停止時の想定最小加速度(減速度)[m/ss] | -| `adaptive_cruise_control.max_standard_acceleration` | double | 追従走行時の想定最大加速度 [m/ss] | -| `adaptive_cruise_control.min_standard_acceleration` | double | 追従走行時の想定最小加速度(減速度)[m/ss] | -| `adaptive_cruise_control.standard_idling_time` | double | 追従走行時に物体に対して反応する想定停止時間 [s] | -| `adaptive_cruise_control.min_dist_standard` | double | 追従走行時の最小距離 [m] | -| `adaptive_cruise_control.obstacle_min_standard_acceleration` | double | 前方障害物の想定最小加速度 [m/ss] | -| `adaptive_cruise_control.margin_rate_to_change_vel` | double | 目標速度を挿入するための余裕距離率 [-] | -| `adaptive_cruise_control.use_time_compensation_to_calc_distance` | bool | 前方車両との距離を計算するために時間補正を使用する | -| `adaptive_cruise_control.p_coefficient_positive` | double | PID制御における係数P(target_dist - current_dist >=0の場合に使用)[-] | -| `adaptive_cruise_control.p_coefficient_negative` | double | PID制御における係数P(target_dist - current_dist <0の場合に使用)[-] | -| `adaptive_cruise_control.d_coefficient_positive` | double | PID制御における係数D(delta_dist >=0の場合に使用)[-] | -| `adaptive_cruise_control.d_coefficient_negative` | double | PID制御における係数D(delta_dist <0の場合に使用)[-] | -| `adaptive_cruise_control.object_polygon_length_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の長さを延長する距離 [m] | -| `adaptive_cruise_control.object_polygon_width_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の幅を延長する距離 [m] | -| `adaptive_cruise_control.valid_estimated_vel_diff_time` | double | 点群を使用した速度推定で連続したポイントとして扱われる最大時間差 [s] | -| `adaptive_cruise_control.valid_vel_que_time` | double | 点群を使用した速度推定で使用される情報の時間幅 [s] | -| `adaptive_cruise_control.valid_estimated_vel_max` | double | 点群を使用した速度推定で有効な速度推定結果の最大値 [m/s] | -| `adaptive_cruise_control.valid_estimated_vel_min` | double | 点群を使用した速度推定で有効な速度推定結果の最小値 [m/s] | -| `adaptive_cruise_control.thresh_vel_to_stop` | double | ACCにより計算された最大速度がこの速度よりも低い場合、停止線を埋め込む [m/s] | -| `adaptive_cruise_control.lowpass_gain_of_upper_velocity` | double | 目標速度のローパスゲイン | -| `adaptive_cruise_control.use_rough_velocity_estimation:` | bool | 速度推定に失敗した場合にラフに速度を推定する(osp.use_predicted_objectsがfalseの場合にのみ有効) | -| `adaptive_cruise_control.rough_velocity_rate` | double | ラフな速度推定では、前方の車両の速度は自車位置の現在の速度 * この値として推定される | +| `adaptive_cruise_control.use_object_to_estimate_vel` | bool | ダイナミックオブジェクトを使用してオブジェクト速度を見積もるか否か(`osp.use_predicted_objects` が false の場合のみ有効) | +| `adaptive_cruise_control.use_pcl_to_estimate_vel` | bool | 生の点群を使用してオブジェクト速度を見積もるか否か(`osp.use_predicted_objects` が `false` の場合のみ有効) | +| `adaptive_cruise_control.consider_obj_velocity` | bool | 適応型クルーズ制御で対象速度を計算する際に、先行車両の速度を考慮するか否か | +| `adaptive_cruise_control.obstacle_velocity_thresh_to_start_acc` | double | 先行障害物の速度がこの値を超えたときに適応型クルーズ制御を開始 [m/s] | +| `adaptive_cruise_control.obstacle_velocity_thresh_to_stop_acc` | double | 先行障害物の速度がこの値を下回ったときに acc を停止する [m/s] | +| `adaptive_cruise_control.emergency_stop_acceleration` | double | 緊急停止での想定最小加速度(減速度)[m/ss] | +| `adaptive_cruise_control.emergency_stop_idling_time` | double | 緊急停止を開始する想定アイドリング時間 [s] | +| `adaptive_cruise_control.min_dist_stop` | double | 緊急停止の最小距離 [m] | +| `adaptive_cruise_control.obstacle_emergency_stop_acceleration` | double | 緊急停止での想定最小加速度(減速度)[m/ss] | +| `adaptive_cruise_control.max_standard_acceleration` | double | アクティブクルーズ制御での想定最大加速度 [m/ss] | +| `adaptive_cruise_control.min_standard_acceleration` | double | アクティブクルーズ制御での想定最小加速度(減速度)[m/ss] | +| `adaptive_cruise_control.standard_idling_time` | double | アクティブクルーズ制御でオブジェクトに応答する想定アイドリング時間 [s] | +| `adaptive_cruise_control.min_dist_standard` | double | アクティブクルーズ制御の最小距離 [m] | +| `adaptive_cruise_control.obstacle_min_standard_acceleration` | double | 先行障害物の想定最小加速度 [m/ss] | +| `adaptive_cruise_control.margin_rate_to_change_vel` | double | ターゲット速度を挿入するマージン距離のレート [-] | +| `adaptive_cruise_control.use_time_compensation_to_calc_distance` | bool | 先行車両までの距離を計算するために時間補正を使用する | +| `adaptive_cruise_control.p_coefficient_positive` | double | PID 制御における係数 P (target_dist - `current_dist` が 0 以上の場合に使用) [-] | +| `adaptive_cruise_control.p_coefficient_negative` | double | PID 制御における係数 P (target_dist - `current_dist` が 0 未満の場合に使用) [-] | +| `adaptive_cruise_control.d_coefficient_positive` | double | PID 制御における係数 D (`delta_dist` が 0 以上の場合に使用) [-] | +| `adaptive_cruise_control.d_coefficient_negative` | double | PID 制御における係数 D (`delta_dist` が 0 未満の場合に使用) [-] | +| `adaptive_cruise_control.object_polygon_length_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の長さを拡張する距離 [m] | +| `adaptive_cruise_control.object_polygon_width_margin` | double | 点群オブジェクトマッチングでオブジェクトの多角形の幅を拡張する距離 [m] | +| `adaptive_cruise_control.valid_estimated_vel_diff_time` | double | 点群を使用して速度を推定するときに、連続データとみなされる最大時間差 [s] | +| `adaptive_cruise_control.valid_vel_que_time` | double | 点群を使用して速度を推定するときに、速度推定に使用される情報の時間幅 [s] | +| `adaptive_cruise_control.valid_estimated_vel_max` | double | 点群を使用して速度を推定した結果の有効な最大値 [m/s] | +| `adaptive_cruise_control.valid_estimated_vel_min` | double | 点群を使用して速度を推定した結果の有効な最小値 [m/s] | +| `adaptive_cruise_control.thresh_vel_to_stop` | double | ACC によって計算された最大速度がこの速度よりも遅ければ停止線を埋め込む [m/s] | +| `adaptive_cruise_control.lowpass_gain_of_upper_velocity` | double | ターゲット速度のローパスゲイン | +| `adaptive_cruise_control.use_rough_velocity_estimation:` | bool | 速度推定が失敗した場合に大まかな推定速度を使用する(`osp.use_predicted_objects` が false の場合のみ有効) | +| `adaptive_cruise_control.rough_velocity_rate` | double | 大まかな速度推定では、先行車両の速度は自己現在の速度 \* この値と推定されます | ### フローチャート + ```plantuml @startuml title insertTargetVelocity() @@ -315,75 +318,64 @@ stop @enduml ``` -**自動運転ソフトウェア** - -**内容** - -**目標車両点の算出** +**障害物停止プランナーの詳細** -(\*1) 目標車両点は、経路に沿った自己位置からの最近傍障害物点群として算出されます。 +(\*1) 目標車両の点は、軌跡上の自己位置からの最も近い障害物点群として計算されます。 -(\*2) 速度推定のソースは、以下の ROS パラメータで変更できます。 +(\*2) 速度推定のソースは、次のROSパラメータによって変更できます。 - `adaptive_cruise_control.use_object_to_estimate_vel` - `adaptive_cruise_control.use_pcl_to_estimate_vel` -**目標車両点の速度推定** +このモジュールは、目標点が障害物停止プランナーモジュールの検出エリア内にある場合にのみ機能します。 -このモジュールは、「障害物停止プランナー」モジュールの検出領域内に目標点が検出された場合にのみ動作します。 +このモジュールの最初の処理は、目標車両の点の速度を推定することです。速度推定では、動的物体の速度情報または前のステップからの目標車両の点の移動距離を使用します。動的オブジェクト情報は基本であり、知覚障害が発生した場合に備えて、移動距離推定がバックアップとして使用されます。 +目標車両の点が動的オブジェクトのバウンディングボックス内に幾何学的に含まれている場合、動的オブジェクトの速度が目標点の速度として使用されます。 +そうでなければ、目標点の速度は、前のステップからの目標点の移動距離から計算されます。つまり、**(現在の位置 - 前の位置)/dt**です。この移動距離ベースの推定は、目標点が最初に検出されたとき(主に割り込み時に発生)に失敗することに注意してください。推定の安定性を向上させるために、いくつかのステップの計算結果の mediana(中央値)が使用されます。 -このモジュールの最初の処理は、目標車両点の速度を推定することです。速度推定には、動的オブジェクトの速度情報または前のステップからの目標車両点の移動距離を使用します。 +計算された速度がしきい値範囲内にある場合、目標点の速度として使用されます。 -動的オブジェクト情報は一次的なものであり、移動距離推定は知覚障害時のバックアップとして使用されます。 +推定が成功し、推定された速度が`obstacle_stop_velocity_thresh_*`の値を超えた場合にのみ、自己位置からの点群との距離が計算されます。モード遷移でのチャタリングを防ぐために、**`obstacle_velocity_thresh_to_start_acc`**は適応巡航を開始するためのしきい値に使用され、**`obstacle_velocity_thresh_to_stop_acc`**は適応巡航を停止するためのしきい値に使用されます。計算された距離の値が緊急停止パラメータによって計算された緊急距離$d\_{emergency}$を超えた場合、挿入する目標速度が計算されます。 -目標車両点が動的オブジェクトの境界ボックスに幾何学的に含まれている場合、動的オブジェクトの速度が目標点速度として使用されます。 - -それ以外の場合は、目標点速度は、前のステップからの目標点の移動距離によって計算されます。つまり、`(current_position - previous_position) / dt` です。この移動距離ベースの推定は、目標点が最初に検出されたときに失敗することに注意してください(主に割り込み状況で発生します)。推定の安定性を向上させるために、複数のステップの計算結果のメディアンが使用されています。 - -計算された速度がしきい値範囲内であれば、目標点速度として使用されます。 - -**目標車両点への追従** - -推定が成功し、推定速度が `obstacle_stop_velocity_thresh_*` の値を超えた場合のみ、自己位置から点群までの距離が計算されます。モード遷移時のチャタリングを防ぐために、`obstacle_velocity_thresh_to_start_acc` はアダプティブクルーズを開始するためのしきい値として使用され、`obstacle_velocity_thresh_to_stop_acc` はアダプティブクルーズを停止するためのしきい値として使用されます。計算された距離値が、緊急停止パラメータによって計算された緊急距離 $d\_{emergency}$ を超えると、挿入する目標速度が計算されます。 - -緊急距離 $d\_{emergency}$ は次のように計算されます。 +緊急距離$d\_{emergency}$は次のように計算されます。 $d_{emergency} = d_{margin_{emergency}} + t_{idling_{emergency}} \cdot v_{ego} + (-\frac{v_{ego}^2}{2 \cdot a_{ego_ {emergency}}}) - (-\frac{v_{obj}^2}{2 \cdot a_{obj_{emergency}}})$ -- $d_{margin_{emergency}}$ は、障害物点群に対する最小マージンです。$d_{margin_{emergency}}$ の値は、パラメータ `min_dist_stop` に依存します。 -- $t_{idling_{emergency}}$ は、想定されるアイドリング時間です。$t_{idling_{emergency}}$ の値は、パラメータ `emergency_stop_idling_time` に依存します。 -- $v_{ego}$ は、自己車両の現在の速度です。 -- $a_{ego_{_{emergency}}}$ は、自己車両の最小加速度(最大減速)です。$a_{ego_{_ - {emergency}}}$ の値は、パラメータ `emergency_stop_acceleration` に依存します。 -- $v_{obj}$ は、障害物点群の現在の速度です。 -- $a_{obj_{_{emergency}}}$ は、障害物点群の想定される最小加速度です。$a_{obj_{_ - {emergency}}}$ の値は、パラメータ `obstacle_emergency_stop_acceleration` に依存します。 -- \*上記の $X_{_{emergency}}$ パラメータは、緊急時のみ使用されます。 +- $d_{margin_{emergency}}$は、障害物点群に対する最小余白です。$d_{margin_{emergency}}$の値はパラメータ`min_dist_stop`に依存します。 +- $t_{idling_{emergency}}$は、想定されるアイドリング時間です。$t_{idling_{emergency}}$の値はパラメータ`emergency_stop_idling_time`に依存します。 +- $v_{ego}$は、自車の現在の速度です。 +- $a_{ego_{_{emergency}}}$は、自車の最小加速度(最大減速度)です。$a_{ego_{_ + {emergency}}}$の値はパラメータ`emergency_stop_acceleration`に依存します。 +- $v_{obj}$は、障害物点群の現在の速度です。 +- $a_{obj_{_{emergency}}}$は、障害物点群の想定される最小加速度です。$a_{obj_{_ + {emergency}}}$の値はパラメータ`obstacle_emergency_stop_acceleration`に依存します。 +- \*上記の`X_{_{emergency}}`パラメータは、緊急時のみ使用されます。 -目標速度は、障害物点群から自己車両までの距離を計算された標準距離 $d\_{standard}$ に維持するように決定されます。したがって、障害物点群までの距離が標準距離よりも長い場合、目標速度は現在の速度よりも高くなり、その逆も同様です。距離を維持するために、PID 制御器が使用されます。 +目標速度は、障害物点群と自車の距離を次の式で計算される標準距離$d\_{standard}$に維持するように決定されます。したがって、障害物点群との距離が標準距離より大きい場合、目標速度は現在の速度よりも大きくなり、その逆に動作します。距離を維持するために、PIDコントローラーが使用されます。 $d_{standard} = d_{margin_{standard}} + t_{idling_{standard}} \cdot v_{ego} + (-\frac{v_{ego}^2}{2 \cdot a_{ego_ {standard}}}) - (-\frac{v_{obj}^2}{2 \cdot a_{obj_{standard}}})$ -- $d_{margin_{standard}}$ は、障害物点群に対する最小マージンです。$d_{margin_{standard}}$ の値は、パラメータ `min_dist_stop` に依存します。 -- $t_{idling_{standard}}$ は、想定されるアイドリング時間です。$t_{idling_{standard}}$ の値は、パラメータ `standard_stop_idling_time` に依存します。 +- $d_{margin_{standard}}$は、障害物点群に対する最小余白です。$d_{margin_{standard}}$の値はパラメータ`min_dist_stop`に依存します。 +- $t_{idling_{standard}}$は、想定されるアイドリング時間です。$t_{idling_{standard}}$の値はパラメータ`standard_stop_idling_time`に依存します。 - $a_{ego_{_{標準}}}$ は自車の最小加速度(最大減速度)です。$a_{ego_{_ - {標準}}}$ の値はパラメーター `min_standard_acceleration` に依存します。 -- $v_{obj}$ は障害物の点群の現在の速度です。 -- $a_{obj_{_{標準}}}$ は障害物の点群の想定される最小加速度です。$a_{obj_{_ - {標準}}}$ の値はパラメーター `obstacle_min_standard_acceleration` に依存します。 -- \*上記の $X_{_{標準}}$ パラメーターは非緊急状態でのみ使用されます。 + {標準}}}$ の値はパラメータ `min_standard_acceleration` に依存します +- $v_{obj}$ は障害物点群の現在の速度です。 +- $a_{obj_{_{標準}}}$ は障害物点群の想定最小加速度です。$a_{obj_{_ + {標準}}}$ の値はパラメータ `obstacle_min_standard_acceleration` に依存します +- \*上記の $X_{_{標準}}$ パラメータは緊急時を除き使用されます。 ![adaptive_cruise](./docs/adaptive_cruise.drawio.svg) -ターゲット速度が `thresh_vel_to_stop` の値を超えた場合、ターゲット速度が軌道に埋め込まれます。 +目標速度が `thresh_vel_to_stop` の値を超えた場合、目標速度は軌道に埋め込まれます。 + +## 既知の制限 -## 制限事項 +- `Adaptive Cruise Controller` モジュールで埋め込まれた目標速度に従って移動するかどうかは、Velocity Planningモジュールに大きく依存します。Velocity Planningモジュールが更新された場合、可能な限り車両の挙動に注意を払い、常にオーバーライドの準備をしてください。 -- `自適巡航制御` モジュールにより埋め込まれた目標速度に従って車が動くかどうかは、速度計画モジュールに大きく依存しています。速度計画モジュールが更新された場合は、可能な限り車両の挙動に注意し、常にオーバーライドの準備をしてください。 +- `Adaptive Cruise Controller` の速度推定アルゴリズムは、オブジェクトトラッキングモジュールに依存しています。オブジェクトトラッキングに失敗するか、トラッキング結果が正しくない場合、車両が危険な挙動をする可能性があることに注意してください。 -- `自適巡航制御` の速度推定アルゴリズムは、オブジェクト追跡モジュールに依存しています。オブジェクト追跡が失敗したり、追跡結果が誤っている場合、車両が危険な挙動をする可能性があることに注意してください。 +- 後退走行には機能しませんが、入力の経路をそのまま公開します。後退時に障害物に対して停止したい場合は [obstacle_cruise_planner](../autoware_obstacle_cruise_planner/README.md) を使用してください。 -- 後退走行では動作しませんが、入力されたパスをそのまま公開します。後退走行時に障害物に対して停止したい場合は、[obstacle_cruise_planner](../autoware_obstacle_cruise_planner/README.md) を使用してください。 diff --git a/planning/autoware_path_optimizer/README.md b/planning/autoware_path_optimizer/README.md index cfc7447f8a4e0..6a43ed622ded5 100644 --- a/planning/autoware_path_optimizer/README.md +++ b/planning/autoware_path_optimizer/README.md @@ -1,17 +1,17 @@ -# パスオプティマイザ +# 経路最適化 ## 目的 -このパッケージは、入力パスと走行可能エリアに基づいて、運転可能な運動学的可能性のある経路と衝突のない経路を生成します。 -このモジュールでは、経路の位置と姿勢のみが更新され、速度は入力パス内の速度を引き継ぎます。 +このパッケージは、入力の経路と走行可能な領域に基づいて、運動学的に走行可能で衝突のない軌道を生成します。 +このモジュールでは軌道の位置と姿勢のみが更新され、速度は単に入力のパスから引き継がれます。 -## 特徴 +## 機能 -このパッケージは、以下のことができます。 +このパッケージは次のことができます。 -- 経路を可能な限り走行可能エリア内に収める - - 注: 回避すべき静止障害物は走行可能エリアから削除できます。 -- 計画されたフットプリントが走行可能エリア外になる前に停止点を挿入する +- 軌道を可能な限り走行可能な領域内に収める + - 注:避けるべき静止障害物は走行可能な領域から削除できます。 +- 計画されたフットプリントが走行可能な領域の外に出る前に停止点を挿入する 速度は入力パスから引き継がれることに注意してください。 @@ -19,84 +19,43 @@ ### 入力 -| 名前 | タイプ | 説明 | -| ------------------ | ------------------------------- | ------------------------------ | -| `~/input/path` | autoware_planning_msgs/msg/Path | 参照パスと対応する走行可能領域 | -| `~/input/odometry` | nav_msgs/msg/Odometry | 自車の現在の速度 | +| 名称 | タイプ | 説明 | +| ------------------ | ------------------------------- | ---------------------------------------------- | +| `~/input/path` | autoware_planning_msgs/msg/Path | 参照パスと対応する走行可能領域 | +| `~/input/odometry` | nav_msgs/msg/Odometry | 自車の現在の速度 | ### 出力 -**自動運転ソフトウェア** +自動運転システムは、プランニング、Perception、制御という3つの主要なコンポーネントで構成されています。プランニングコンポーネントは、センサーから得られたデータを処理し、周囲の環境を理解します。この情報を使用して、安全で効率的な経路を計画します。パーセプションコンポーネントは、カメラ、レーダー、LiDARなどのセンサーからデータを集め、周囲の環境に関する理解を向上させます。制御コンポーネントは、ステアリング、加速、ブレーキなどの車両の運動を制御します。 -## 計画(Planning)コンポーネント +Autowareは、これらのコンポーネントをシームレスに統合する完全なAutowareスタックです。Autowareは、センサーデータの収集から制御コマンドの生成まで、自動運転システムを開発するための包括的なフレームワークを提供します。 -**動作** +Autowareの主要な機能を次に示します。 -計画コンポーネントは、センサーからのデータに基づき、自律車両の走行経路を決定します。以下の要素を考慮します。 +* **Perception:** カメラ、レーダー、LiDARなどのセンサーからデータを集めます。 +* **Planning:** 安全で効率的な経路を計画します。 +* **Control:** ステアリング、加速、ブレーキなどの車両の運動を制御します。 +* **Mapping:** 地図情報を生成して、自車位置を正確に特定します。 +* **Localization:** 車両の位置と姿勢を推定します。 +* **Scenario Planning:** 特定の交通状況に対する安全な反応を計画します。 +* **Decision Making:** PerceptionとPlanningのデータを処理して、車両の動作を決定します。 +* **Path Planning:** 車両がたどる経路を計画します。 +* **Motion Planning:** 車両の運動を計画します。 +* **Behavior Planning:** 車両の動作を計画します。 +* **Vehicle Dynamics:** 車両の運動を制御します。 +* **Safety:** 自動運転システムの安全性を確保します。 +* **Simulation:** 自動運転システムの開発とテストのためのシミュレーション環境を提供します。 -- 環境マップ -- 自車位置 -- 障害物 -- 交通規則 +Autowareは、オープンソースで、BSD 3条ライセンスに基づいて利用できます。 Autowareの詳細については、[Autowareのドキュメント](https://www.autoware.ai/documents)を参照してください。 -計画コンポーネントは、次のような判断を行います。 - -- 走行する経路 -- 目的地への速度と加速度の調整 -- 障害物の回避 -- 交通規制への遵守 - -## 経路検索アルゴリズム - -計画コンポーネントは、次の経路検索アルゴリズムを使用します。 - -- _Dijkstra法_ -- *A*法 - -## 経路最適化 - -計画コンポーネントは、以下の基準に基づいて経路を最適化します。 - -- 走行距離 -- 所要時間 -- 燃料消費 -- 安全性 - -## 障害物回避 - -計画コンポーネントは、以下の方法で障害物を回避します。 - -- 障害物検知 -- 最小の『速度逸脱量』と『加速度逸脱量』が発生する動作の算出 -- 安全な経路への再計画 - -## 交通規制への遵守 - -計画コンポーネントは、交通規制を遵守するように動作します。 - -- 速度制限の遵守 -- 停止線の遵守 -- 信号機の遵守 - -**Autowareでの実装** - -Autowareの計画コンポーネントは、ROSベースのアーキテクチャで実装されています。主要なノードは次のとおりです。 - -- Trajectory Planner -- Local Planner -- Behavior Planner - -**追加資料** - -- [Autoware 計画コンポーネントドキュメント](https://autoware.gitbooks.io/autoware.ai/content/wiki/planning.html) - -| 名称 | 種類 | 説明 | -| --------------------- | ------------------------------------- | ------------------------------------ | -| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | 走行可能で衝突のない最適化された経路 | +| 名称 | タイプ | 説明 | +| --------------------- | ------------------------------------- | -------------------------------------------------------------- | +| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | 運転可能で衝突しない最適化された軌跡 | ## フローチャート -機能のフローチャートについては、以下で説明します。 +各機能のフローチャートについて説明します。 + ```plantuml @startuml @@ -140,7 +99,8 @@ stop ### createPlannerData -以下のデータがプランニング用に作成されます。 +プランニング用の次のデータを作成します。 + ```cpp struct PlannerData @@ -157,33 +117,34 @@ struct PlannerData }; ``` -### replanの確認 +### replan確認 -以下の条件のいずれかが満たされた場合、軌道の最適化が実行されます。それ以外は、最新の入力パスの速度を使用して、以前に最適化された軌道を適用します。 +以下の条件のいずれかが満たされた場合、軌道最適化が実行されます。 +それ以外の場合は、以前に最適化された軌跡が最新の入力パスからの速度の更新を使用して使用されます。 max_path_shape_around_ego_lat_dist -- エゴが1サイクルで`replan.max_ego_moving_dist`を超えて移動する場合(デフォルト:3.0 [m]) - - これは、シミュレーションでエゴの姿勢が再び設定された場合に使用されます。 -- 目標姿勢と見なされる軌道の終点が1サイクルで`replan.max_goal_moving_dist`を超えて移動する場合(デフォルト:15.0 [ms]) - - 目標姿勢が再び設定された場合、Planningはリセットする必要があります。 -- 時間の経過(デフォルト:1.0 [s]) - - 最適化は少しの間スキップされます。なぜなら、最適化は時々重いからです。 -- 入力パスが1サイクルで横方向に`replan.max_path_shape_around_ego_lat_dist`を超えて変更する場合(デフォルト:2.0) +- エゴが1サイクルで`replan.max_ego_moving_dist`より長く移動します(デフォルト:3.0 [m])。 + - これはシミュレーションでエゴのポーズが再び設定された場合の処理です。 +- ゴールポーズと見なされる軌道の終点が、1サイクルで`replan.max_goal_moving_dist`より大きく移動します(デフォルト:15.0 [ms])。 + - ゴールポーズが再び設定された場合、プランニングをリセットする必要があります。 +- 時間の経過(デフォルト:1.0 [s])。 + - 最適化が重い場合があるため、最適化はしばらくスキップされます。 +- 入力パスが1サイクルで`replan.max_path_shape_around_ego_lat_dist`より大きく横方向に変更される(デフォルト:2.0)。 -### getModelPredictiveTrajectoryの取得 +### getModelPredictiveTrajectory -このモジュールは、軌道を運動学的に実現可能かつ衝突のないものにします。 -フレネ座標系で車両の姿勢を定義し、最適化によって追従誤差を最小化します。 -この最適化では、車両の運動特性と道路境界や障害物との衝突チェックが考慮されます。 -計算コストを削減するために、最適化は全体の軌道より短い軌道(デフォルト:50 [m])に適用され、最後に残りの軌道と最適化された軌道を連結します。 +このモジュールは、軌跡を運動学的に実現可能で衝突なしにします。 +フレネ座標系で車両のポーズを定義し、最適化によって追従誤差を最小化します。 +この最適化は車両運動学と道路境界と障害物との衝突判定を考慮します。 +計算コストを削減するために、最適化は全軌跡よりも短い軌跡(デフォルト:50 [m])に適用され、残った軌跡は最後に最適化された軌跡に連結されます。 -車両の真前の軌道はあまり変更しないようにする必要があります。そうすることでステアリングホイールが安定します。 -したがって、車両の前面に以前生成された軌道を適用します。 +エゴのすぐ前の軌跡は大きく変更されてはならないため、ステアリングホイールが安定します。 +そのため、エゴの前の以前に生成された軌跡を使用します。 -車両上に設置され、軌道の真上に位置しようとする最適化の中心は、車両の縦軸に沿って調整できます。 -このパラメータ`mpt.kinematics.optimization center offset`は、後輪の中心から最適化の中心までの正負の距離として定義されます。 -次の図にいくつかの例を示します。参照軌道(緑色)が同じ場合でも、最適化の中心によって車両形状の軌跡が異なることがわかります。 +軌跡上に正確に位置しようとする車両の中心での最適化は、車両の垂直軸に沿って調整できます。 +このパラメータ`mpt.kinematics.optimization center offset`は、後輪の中心から最適化の中心までの距離として定義されます。 +次の図はいくつかの例を示しており、基準軌跡(緑の軌跡)が同じ場合でも、最適化の中心によって車両形状の軌跡が異なることが示されています。 ![mpt_optimization_offset](./media/mpt_optimization_offset.svg) @@ -191,91 +152,91 @@ max_path_shape_around_ego_lat_dist ### applyInputVelocity -速度は、最適化された軌跡に、行動パスの速度から割り当てます。 -最適化された軌跡とパスの形状は異なるため、パスに対する最も近い各軌跡点が検索され、速度はゼロ次ホールドで補間されます。 +速度は、動作パスの速度から最適化された軌跡に割り当てられます。 +最適化された軌跡とパスの形状は異なるため、パスへの各軌跡点の最近点が検索され、速度はゼロ次ホールドで補間されます。 ### insertZeroVelocityOutsideDrivableArea -最適化された軌道は速度計画には短すぎるため、走行可能性を考慮して最適化された軌道と行動パスを連結することで軌道を延長します。 -生成された軌道は走行可能領域内にあるかどうかがチェックされ、走行可能領域外にある場合は、走行可能領域内の軌道を出力するか、行動パスまたは以前に生成された軌道を適用します。 +最適化された軌跡は速度計画には短いため、走行可能性を考慮して最適化された軌跡と動作パスを連結して軌跡を延長します。 +生成された軌跡は走行可能領域内かどうかがチェックされ、走行可能領域外の場合は、動作パスまたは以前に生成された軌跡を使用して走行可能領域内の軌跡を出力します。 -上記のように、行動パスは2つのパスに分割されます。1つは最適化用、もう1つは残りの部分です。最初のパスが最適化された軌道になり、2番目のパスは単に変換されます。走行可能領域内の軌道は次のように計算されます。 +上記のとおり、動作パスは2つのパスに分割されます。1つは最適化用、もう1つは残りの部分です。最初のパスは最適化された軌跡になり、2番目のパスは単に軌跡に変換されます。次に、走行可能領域内の軌跡は次のように計算されます。 -- 最適化された軌道が**走行可能領域内**で、残りの軌道が走行可能領域内/外にある場合 - - 出力軌道はその2つの軌道の連結になります。 - - この場合、残りの軌道が走行可能領域内にあるか外にあるかは考慮しません。一般的に走行可能領域外にあるため(特に狭い道で)ですが、後続のモジュールにできるだけ長い軌道を渡したいと考えています。 -- 最適化された軌道が**走行可能領域外**で、残りの軌道が走行可能領域内/外にある場合 - - 以前生成された軌跡が**記憶されている**場合は、 - - 出力軌道は、以前に生成された軌道になり、走行可能領域外に出た最初にゼロ速度が挿入されます。 - - 以前生成された軌跡が**記憶されていない**場合は、 - - 出力軌道は、行動パスから変換された軌道のうち、走行可能領域外に出た最初にゼロ速度が挿入された部分になります。 +- 最適化された軌跡が**走行可能領域内**にあり、残りの軌跡が走行可能領域内/外にある場合、 + - 出力軌跡はそれらの2つの軌跡の連結になります。 + - この場合、残りの軌跡が走行可能領域内か外かは気にしません。通常、走行可能領域外にあるため(特に狭い道路上)。ただし、できる限り長い軌跡を後のモジュールに渡す必要があります。 +- 最適化された軌跡が**走行可能領域外**にあり、残りの軌跡が走行可能領域内/外にある場合、 + - 且つ、以前生成された軌跡が**メモリ化されている**場合、 + - 出力軌跡は以前生成された軌跡になり、走行可能領域外に最初に移動するポイントにゼロ速度が挿入されます。 + - 且つ、以前生成された軌跡が**メモリ化されてない**場合、 + - 出力軌跡は動作パスから変換されたばかりの軌跡の一部になり、走行可能領域外に最初に移動するポイントにゼロ速度が挿入されます。 -最適化の失敗は、最適化された軌道が走行可能領域外である場合と同じように処理されます。出力軌道は、次のサイクルの以前生成された軌跡として記憶されます。 +最適化の失敗は、最適化された軌跡が走行可能領域外にある場合と同じように処理されます。 +出力軌跡は、次のサイクル用に以前に生成された軌跡としてメモリ化されます。 -_理由_ +_論理的根拠_ -最適化したトラジェクトリが、最適化後に運転可能領域内に収まっているかどうかを確認する必要があります。 +したがって、最適化後に最適化された軌跡が走行可能領域内にあることを確認する必要があります。 -## 制限事項 +## 制限 -- 計算コストが高くなる場合があります。 -- 線形化などの近似により、一部の狭い道路はプランナーによって走行できません。 -- `behavior_path_planner` と `path_optimizer` のプランニングの役割が明確に定義されていません。どちらも障害物を回避できます。 +- 計算コストが時々高くなる。 +- 線形化などの近似のために、狭い道路ではプランナによる走行ができない。 +- `behavior_path_planner` と `path_optimizer` のプランニングの役割が明確に定義されていない。どちらも障害物を回避できる。 -## 他の手法との比較 +## 他手法との比較 -運動学的実現可能性と衝突回避を満たすトラジェクトリ計画の問題には、解決が困難な 2 つの主な特性があります。1 つは非凸性、もう 1 つは高次元です。 -これらの特性に基づいて、一般的なプランニング手法の利点と欠点を調査します。最適化ベース、サンプリングベース、学習ベースの手法です。 +運動学的な実現可能性と衝突回避を満たす軌跡計画問題は、解くのが困難にする主な特性が 2 つあります。つまり、非凸性と高次元です。 +これらの特性に基づいて、代表的な計画手法(最適化ベース、サンプリングベース、ラーニングベース)の長所と短所を調査しました。 ### 最適化ベースの手法 -- 長所: 勾配降下を活用することで、高次元に対して比較的高速です。 -- 短所: 非凸問題では、多くの場合局所最小値に収束します。 +- 長所: 勾配降下を利用することで高次元に対して比較的高速 +- 短所: 非凸問題では局所最適解に収束しやすい ### サンプリングベースの手法 -- 長所: グローバル最適化を実現します。 -- 短所: 特に複雑なケースでは計算コストが高くなります。 +- 長所: グローバル最適化を実現 +- 短所: 特に複雑なケースでは計算コストが高い -### 学習ベースの手法 +### ラーニングベースの手法 -- まだ研究中 +- まだ調査中 -これらの利点と欠点に基づいて、まず最適化ベースのプランナーを選択しました。 -局所最小値に収束する欠点がありますが、問題をほぼ元の非凸問題と同じ凸問題に近似するための前処理によって、適切な解を得ることができます。 +このような長所/短所に基づき、最初に最適化ベースのプランナを選択しました。 +局所最適解に収束するという短所がありますが、問題を元の非凸問題にほぼ等しい凸問題に近似するための前処理により、良好な解を得ることができます。 -## パラメーターの調整方法 +## パラメータの調整方法 -### 狭い道路での運転可能性 +### 狭い道路での走行性 - `mpt.clearance.soft_clearance_from_road` を変更する - - このパラメーターは、トラジェクトリと道路の境界との間隔をどの程度確保する必要があるかを指定します。 - - 最適化のためのモデル誤差により、衝突回避などの制約は完全に満たされません。 - - このパラメーターを大きくすることで、狭い道路走行の問題が解決される場合があります。 12180 + - このパラメータは、軌跡と道路境界の間にどの程度の余裕を持たせるかを表します。 + - 最適化のモデル誤差により、衝突回避などの制約は完全に満たされていません。 + - このパラメータを大きくすることで、狭い道路走行の課題が解決できる場合があります。12180 - `mpt.kinematics.optimization_center_offset` を変更する - - - このパラメーターによってベースリンクから前方へオフセットされた車両の位置が、基準経路を追従しようとします。 - -- フットプリントを一連の円を使用して近似する方法を変更または調整する。 - - [こちら](https://autowarefoundation.github.io/autoware.universe/main/planning/path_optimizer/docs/mpt/#collision-free) を参照してください。 + - 車両上のこのパラメータでベースリンクから前方にオフセットされた点は、参照パスを追従しようとします。 +- set of circles でフットプリントを近似する方法を変更または調整する。 + - [こちら](https://autowarefoundation.github.io/autoware.universe/main/planning/path_optimizer/docs/mpt/#collision-free) を参照 - 調整とは、円の半径の比率を変更することを意味します。 ### 計算時間 -- 検討中 +- 準備中 ### ロバスト性 -- MPT の前後のトラジェクトリがロバストでないかどうかを確認する - - MPT の前のトラジェクトリがロバストでない場合 - - MPT の後のトラジェクトリがロバストでない場合 - - `mpt.weight.steer_input_weight` または `mpt.weight.steer_rate_weight` を大きくする。これらは、トラジェクトリに沿ったステアリングホイールの安定性を表します。 +- MPT の前後の軌跡がロバストでないかどうかを確認します。 + - MPT の前の軌跡がロバストでない場合 + - MPT の後の軌跡がロバストでない場合 + - `mpt.weight.steer_input_weight` または `mpt.weight.steer_rate_weight` を大きくします。これらは軌跡に沿ったステアリングホイールの安定性を表します。 ### その他のオプション -- `option.enable_calculation_time_info` は、各関数の計算時間と合計計算時間をターミナルで表示できるようにします。 -- `option.enable_outside_drivable_area_stop` は、生成された経路点が走行可能エリアの外に出る直前に停止できるようにします。 +- `option.enable_calculation_time_info` は、各機能の計算時間と端末上の合計計算時間を表示します。 +- `option.enable_outside_drivable_area_stop` は、生成された軌跡点が走行可能エリアの外に出る直前で停止します。 ## デバッグ方法 -デバッグ方法は [こちら](docs/debug.md) に記載されています。 +デバッグ方法は [ここ](docs/debug.md) で参照できます。 + diff --git a/planning/autoware_path_smoother/README.md b/planning/autoware_path_smoother/README.md index a0df122dd1f0a..3692a2b430685 100644 --- a/planning/autoware_path_smoother/README.md +++ b/planning/autoware_path_smoother/README.md @@ -2,10 +2,11 @@ ## 目的 -このパッケージには、パスや軌跡を滑らかにするコードが含まれています。 +このパッケージは、パスまたは軌道のスムージングのためのコードを含んでいます。 ## 機能 -### エラスティックバンド +### Elastic Band + +Elastic Bandの詳細については [こちら](docs/eb.md) でご覧いただけます。 -エラスティックバンドの詳細については、[こちら](docs/eb.md)を参照してください。 diff --git a/planning/autoware_planning_test_manager/README.md b/planning/autoware_planning_test_manager/README.md index 0b28d47c3a6c3..277890e9ab10d 100644 --- a/planning/autoware_planning_test_manager/README.md +++ b/planning/autoware_planning_test_manager/README.md @@ -1,27 +1,28 @@ -# Autoware Planningテストマネージャ +# Autoware Planning Test Manager ## 背景 -異常な経路や大幅に乖離した自車位置などの例外的な入力がPlanningモジュール内の各ノードに与えられると、ノードはそのような入力を処理できない場合があり、クラッシュすることがあります。その結果、ノードのクラッシュをデバッグするには、時間がかかる場合があります。例えば、空の軌道が入力として与えられ、実装時に予想されていなかった場合、変更の統合時、シナリオテスト時、またはシステムが実際の車両で動作している間に、ノードは対処されていない例外的な入力によってクラッシュする可能性があります。 +プランニングモジュールの各ノードでは、異常な経路や自車位置が大きく逸脱するなど、想定外の入力が与えられると、ノードはそのような入力に対応できずにクラッシュする可能性があります。その結果、ノードクラッシュのデバッグには時間がかかる場合があります。たとえば、空の軌跡が入力として与えられ、実装時にそれが予想されていなかった場合、PRマージ時、シナリオテスト時、またはシステムが実際の車両で実行中に、処理されない例外入力によりノードがクラッシュする可能性があります。 ## 目的 -例外的な入力を受信したときにノードが正しく動作することを保証するためのテストを実装するためのユーティリティを提供することが目的です。このユーティリティを利用して例外的な入力のテストを実装することにより、PRをマージする前に例外的な入力の対策を要求することで、システムを実際に実行したときにのみ発見されるバグを減らすことが目的です。 +例外的な入力が受信されたときにノードが正しく動作することを保証するテストを実装するためのユーティリティを提供することです。このユーティリティを利用して例外的な入力のテストを実装することで、PRマージ前に例外的な入力に対する対策を要求することで、システムを実際に実行するときにのみ発見されるバグを削減することを目的としています。 ## 機能 ### 通常動作の確認 -テスト対象ノードについて、ノードが正しく動作し、後続のノードに必要なメッセージをパブリッシュすることを確認します。これを行うには、test_nodeに必要なメッセージをパブリッシュし、ノードの出力が出力されていることを確認します。 +テスト対象ノードに対して、ノードが正しく動作し、後続のノードに必要なメッセージを公開していることを確認します。これを行うには、test_node が必要なメッセージを公開し、ノードの出力が公開されていることを確認します。 -### 特殊な入力のロバスト性確認 +### 特殊入力に対する堅牢性の確認 -通常動作を確認した後、例外的な入力が与えられたときにテスト対象ノードがクラッシュしないことを確認します。これを行うには、test_nodeから例外的な入力を提供し、ノードがクラッシュしないことを確認します。 +正常動作を確認した後、テスト対象ノードが例外的な入力を与えられてもクラッシュしないことを確認します。これを行うには、test_node から例外的な入力を提供し、ノードがクラッシュしないことを確認します。 -(WIP) +(未完了) ## 使用方法 + ```cpp TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) @@ -68,25 +69,26 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) } ``` -## 実装されたテスト +## 実施中のテスト -| ノード | テスト名 | 例外的入力 | 出力 | 例外的な入力パターン | -| --------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | -------------- | ----------------------------------------------------------------------------- | -| autoware_planning_validator | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| velocity_smoother | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| obstacle_cruise_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| obstacle_stop_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| obstacle_velocity_limiter | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| path_optimizer | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを含むパス | -| scenario_selector | NodeTestWithExceptionTrajectoryLaneDrivingMode NodeTestWithExceptionTrajectoryParkingMode | trajectory | scenario | LANEDRIVING および PARKING シナリオの空、単一ポイント、重複ポイントを含むパス | -| freespace_planner | NodeTestWithExceptionRoute | route | trajectory | 空のルート | -| behavior_path_planner | NodeTestWithExceptionRoute NodeTestWithOffTrackEgoPose | route | route odometry | 空のルート オフレーン自己位置 | -| behavior_velocity_planner | NodeTestWithExceptionPathWithLaneID | path_with_lane_id | path | 空のパス | +| ノード | テスト名 | 特殊入力 | 出力 | 特殊入力パターン | +| --------------------------- | ----------------------------------------------------------------------------------------- | --------- | ------------ | ------------------------------------------------------------------------------------- | +| autoware_planning_validator | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを持つパス | +| velocity_smoother | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを持つパス | +| obstacle_cruise_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを持つパス | +| obstacle_stop_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを持つパス | +| obstacle_velocity_limiter | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを持つパス | +| path_optimizer | NodeTestWithExceptionTrajectory | trajectory | trajectory | 空、単一ポイント、重複ポイントを持つパス | +| scenario_selector | NodeTestWithExceptionTrajectoryLaneDrivingMode NodeTestWithExceptionTrajectoryParkingMode | trajectory | scenario | 空、単一ポイント、重複ポイントを持つパス(シナリオ:LANEDRIVINGとPARKING) | +| freespace_planner | NodeTestWithExceptionRoute | route | trajectory | 空のルート | +| behavior_path_planner | NodeTestWithExceptionRoute NodeTestWithOffTrackEgoPose | route | route odometry | 空のルート、オフレーン自車位置 | +| behavior_velocity_planner | NodeTestWithExceptionPathWithLaneID | path_with_l | path | 空のパス | -## 重要な注意事項 +## 重要な注意点 -テストの実行中、ノードを起動すると、パラメータはパッケージ内のパラメータファイルからロードされます。そのため、パラメータを追加する場合は、ノード起動時にパラメータファイルからパラメータを取得する場合にパラメータが不足してノードが起動できなくなるのを防ぐため、対象のノードパッケージ内のパラメータファイルに必要なパラメータを追加する必要があります。 +テストの実行中にノードを起動すると、パラメーターは各パッケージ内のパラメーターファイルから読み込まれます。そのため、パラメーターを追加する場合、ノード起動時にパラメーターファイルからパラメーターを取得できない場合にノードが起動できなくなることを防ぐため、対象のノードパッケージ内のパラメーターファイルに必要なパラメーターを追加する必要があります。 ## 今後の拡張 / 未実装部分 -(WIP) +(未定) + diff --git a/planning/autoware_planning_topic_converter/README.md b/planning/autoware_planning_topic_converter/README.md index 8b1e6497d7bec..e0329fdac9aba 100644 --- a/planning/autoware_planning_topic_converter/README.md +++ b/planning/autoware_planning_topic_converter/README.md @@ -1,14 +1,15 @@ -## Planningトピックコンバータ +# Planning Topic Converter ## 目的 -このパッケージは、``で定義されている型間のトピック型変換を行うツールを提供します。 +このパッケージは、で定義されている型間でのトピックの型の変換を提供します。 -## 内部動作/アルゴリズム +## 機能 / アルゴリズム ### 使用例 -このパッケージ内のツールは、合成可能なROS 2コンポーネントノードとして提供されるので、既存のプロセスにスポーンしたり、起動ファイルから起動したり、コマンドラインから呼び出すことができます。 +このパッケージのツールは構成可能な ROS 2 コンポーネントノードとして提供されるため、既存のプロセスにスポーンしたり、起動ファイルから開始したり、コマンドラインから呼び出したりできます。 + ```xml @@ -24,11 +25,12 @@ ## パラメータ -| 名前 | 種別 | 説明 | -| :------------- | :----- | :------------- | -| `input_topic` | 文字列 | 入力トピック名 | -| `output_topic` | 文字列 | 出力トピック名 | +| 名称 | タイプ | 説明 | +| :------------- | :----- | :----------------- | +| `input_topic` | 文字列 | 入力トピック名。 | +| `output_topic` | 文字列 | 出力トピック名。 | + +## 仮定/既知の制限事項 -## 想定条件/既知の限界 +## 今後の拡張/未実装部分 -## 将来的に拡張予定の部分/未実装の部分 diff --git a/planning/autoware_planning_validator/README.md b/planning/autoware_planning_validator/README.md index 8d9b3697d784a..af0e89c633ec8 100644 --- a/planning/autoware_planning_validator/README.md +++ b/planning/autoware_planning_validator/README.md @@ -1,94 +1,88 @@ -## Planning Validator +# プランニングバリデータ -`autoware_planning_validator` は、パブリッシュされる前に軌道が有効であることを確認するモジュールです。有効化のステータスは `/diagnostics` と `/validation_status` トピックで確認できます。無効な軌道が検出された場合、`autoware_planning_validator` は選択されたオプションに従って軌道を処理します: "0. 軌道そのままパブリッシュ", "1. 軌道のパブリッシュを停止", "2. 最後に検証された軌道をパブリッシュ". +`autoware_planning_validator` は軌跡を公開する前にその有効性をチェックするモジュールです。バリデーションのステータスは `/diagnostics` と `/validation_status` トピックで確認できます。無効な軌跡が検出された場合、`autoware_planning_validator` は選択されたオプションに従って軌跡を処理します: "0. 軌跡をそのまま公開する", "1. 軌跡の公開を停止する", "2. 最後にバリデーションされた軌跡を公開する"。 ![autoware_planning_validator](./image/planning_validator.drawio.svg) -## サポートしている機能 +## 対応機能 -軌道検証でサポートしている機能は次の通りで、パラメータでしきい値を設定できます。 +軌跡のバリデーションで以下のような機能に対応しており、閾値をパラメータによって設定できます: -- **無効なフィールド** : 例: 無限大、NaN -- **軌道ポイント間隔** : 軌道ポイントの間隔が大きすぎる場合無効 -- **曲率** : 与えられた車両の運動特性上実行不可能なほど軌道に急カーブがある場合無効 -- **相対角度** : 軌道ポイントのシーケンスでヨー角が急激に変化した場合無効 -- **側方加速度** : 予想される側方加速度/減速度が大きすぎる場合無効 -- **縦方向加速度/減速度** : 軌道ポイントの加速度/減速度が大きすぎる場合無効 -- **ステアリング角度** : 軌道曲率から推定される予想ステアリング値が大きすぎる場合無効 -- **ステアリング角速度** : 予想ステアリング角速度値が大きすぎる場合無効 -- **速度偏差** : 計画速度が自車速度からかけ離れている場合無効 -- **距離偏差** : 自車が軌道から離れすぎている場合無効 -- **縦方向距離偏差** : 軌道が自車から縦方向に離れすぎている場合無効 -- **前方軌道長** : 与えられた減速度内で停止するため軌道長が十分でない場合無効 +- **無効なフィールド**: Inf、Nan など +- **軌跡ポイントの間隔**: 軌跡ポイント間の距離が大きすぎる場合は無効 +- **曲率**: 与えられた車両運動学的に実現不可能な鋭いターンを含む場合は無効 +- **相対角**: 軌跡ポイントのシーケンスでヨー角が急激に変化する場合は無効 +- **横加速度**: 期待される横加速度/減速度が大きすぎる場合は無効 +- **縦加速度/減速度**: 軌跡ポイントにおける加速度/減速度が大きすぎる場合は無効 +- **操舵角**: 軌跡の曲率から推定される期待される操舵値が大きすぎる場合は無効 +- **操舵角速度**: 期待される操舵速度値が大きすぎる場合に無効 +- **速度偏差**: プランニング速度がエゴ速度からかけ離れている場合に無効 +- **距離偏差**: エゴが軌跡から離れすぎている場合に無効 +- **縦距離偏差**: 軌跡がエゴから縦方向に離れすぎている場合に無効 +- **前方軌跡長**: 与えられた減速度内で停止するために軌跡の長さが十分でない場合に無効 -次の機能は実装される予定です。 +以下の機能は実装予定です。 -- **(TODO) TTC 計算** : 軌道上の予想時間交通距離が短すぎる場合無効 +- **(TODO) TTC 計算**: 期待される衝突時間 (TTC) が軌跡上で短すぎると無効 -## 出力/入出力 +## 入/出力 -### 出力 - -`autoware_planning_validator` は次の出力を出力します: - -- **/diagnostics** : このモジュールの診断ステータスに関する情報 -- **/validation_status** : 軌道の検証ステータス +### 入 -### 入出力 +`autoware_planning_validator` は以下の入力を受け取ります: -`autoware_planning_validator` は次の入力を取ります: - -| 名称 | タイプ | 説明 | -| -------------------- | --------------------------------- | -------------------------------- | -| `~/input/kinematics` | nav_msgs/Odometry | 自車位置と速度 | -| `~/input/trajectory` | autoware_planning_msgs/Trajectory | 本ノードで検証するターゲット軌跡 | +| 名前 | タイプ | 説明 | +| -------------------- | --------------------------------- | ---------------------------------------------- | +| `~/input/kinematics` | nav_msgs/Odometry | 自車位置および速度 | +| `~/input/trajectory` | autoware_planning_msgs/Trajectory | このノードで検証するターゲットの軌跡 | ### 出力 -次のものを出力します。 +以下の出力を生成します。 -| 名称 | タイプ | 説明 | -| ---------------------------- | ------------------------------------------ | --------------------------------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs/Trajectory | 検証済みの走行軌跡 | -| `~/output/validation_status` | planning_validator/PlanningValidatorStatus | バリデータのステータスで、走行軌跡が有効/無効の理由を通知します | -| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告する診断 | +| 名前 | 型 | 説明 | +|---|---|---| +| `~/output/trajectory` | autoware_planning_msgs/Trajectory | 妥当な軌跡 | +| `~/output/validation_status` | planning_validator/PlanningValidatorStatus | 軌跡が有効/無効である理由を伝える validator のステータス | +| `/diagnostics` | diagnostic_msgs/DiagnosticStatus | エラーを報告する診断 | ## パラメータ -`autoware_planning_validator` には、以下のパラメータを設定できます。 +`autoware_planning_validator` に対して以下のパラメータを設定することができます。 ### システムパラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -| ---------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -| `invalid_trajectory_handling_type` | int | 無効な経路が見つかった場合の処理を設定します。
0: 無効でも経路を公開する
1: 経路の公開を停止する
2: 最後に検証済の経路を公開する。 | 0 | -| `publish_diag` | bool | 連続した無効な経路の数がこの閾値を超えると、DiagがERRORに設定されます。(例: threshold = 1の場合、たとえ経路が無効でも、次の経路が有効であればDiagはERRORになりません。) | true | -| `diag_error_count_threshold` | int | trueの場合、診断メッセージが公開されます。 | true | -| `display_on_terminal` | bool | エラーメッセージをターミナルに表示する | true | +| Name | Type | Description | Default value | +| :--------------------------------- | :--- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `invalid_trajectory_handling_type` | int | 無効なトラекトリ検出時の動作を設定します。
0: 無効な場合でもトラекトリを公開する、
1: トラекトリの公開を停止する、
2: 最後に検証されたトラекトリを公開する | 0 | +| `publish_diag` | bool | 無効なトラекトリの連続数がこのしきい値を超えると、DiagはERRORに設定されます。(例:しきい値=1の場合、トラекトリが無効であっても、次のトラекトリが有効な場合、DiagはERRORになりません。) | true | +| `diag_error_count_threshold` | int | trueの場合、診断メッセージが公開されます。 | true | +| `display_on_terminal` | bool | エラーメッセージを端末に表示します。 | true | ### アルゴリズムパラメータ -#### スレッショルド +#### しきい値 -インデックスが以下の閾値を超えた場合、入力軌跡は無効として検出されます。 +次のしきい値を超えた場合は、入力された軌跡は無効と検出されます。 -| 名前 | タイプ | 説明 | デフォルト値 | -| -------------------------------------------- | ------ | ------------------------------------------------------------------------ | ------------ | -| `thresholds.interval` | 数値 | 2つの近隣の経路ポイント間の距離の無効しきい値 [`m`] | 100.0 | -| `thresholds.relative_angle` | 数値 | 2つの近隣の経路ポイント間の相対角度の無効しきい値 [`rad`] | 2.0 | -| `thresholds.curvature` | 数値 | 各経路ポイントの曲率の無効しきい値 [`1/m`] | 1.0 | -| `thresholds.lateral_acc` | 数値 | 各経路ポイントの横加速度の無効しきい値 [`m/ss`] | 9.8 | -| `thresholds.longitudinal_max_acc` | 数値 | 各経路ポイントの最大縦加速度の無効しきい値 [`m/ss`] | 9.8 | -| `thresholds.longitudinal_min_acc` | 数値 | 各経路ポイントの最小縦減速度の無効しきい値 [`m/ss`] | -9.8 | -| `thresholds.steering` | 数値 | 各経路ポイントの操舵角の無効しきい値 [`rad`] | 1.414 | -| `thresholds.steering_rate` | 数値 | 各経路ポイントの操舵角速度の無効しきい値 [`rad/s`] | 10.0 | -| `thresholds.velocity_deviation` | 数値 | エゴの速度とエゴに最も近い経路ポイント間の速度偏差の無効しきい値 [`m/s`] | 100.0 | -| `thresholds.distance_deviation` | 数値 | エゴの位置とエゴに最も近い経路ポイント間の距離偏差の無効しきい値 [`m`] | 100.0 | -| `parameters.longitudinal_distance_deviation` | 数値 | エゴの位置と経路間の縦方向距離偏差の無効しきい値 [`m`] | 2.0 | +| 名称 | 型 | 説明 | デフォルト値 | +| :------------------------------------------- | :------------------ | :---------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `thresholds.interval` | 数値 | 2つの近接した軌道ポイント間の距離の無効閾値 [m] | 100.0 | +| `thresholds.relative_angle` | 数値 | 2つの近接した軌道ポイント間の相対角度の無効閾値 [rad] | 2.0 | +| `thresholds.curvature` | 数値 | 各軌道ポイントにおける曲率の無効閾値 [1/m] | 1.0 | +| `thresholds.lateral_acc` | 数値 | 各軌道ポイントにおける横加速度の無効閾値 [m/ss] | 9.8 | +| `thresholds.longitudinal_max_acc` | 数値 | 各軌道ポイントにおける最大の縦加速度の無効閾値 [m/ss] | 9.8 | +| `thresholds.longitudinal_min_acc` | 数値 | 各軌道ポイントにおける最小の縦減速度の無効閾値 [m/ss] | -9.8 | +| `thresholds.steering` | 数値 | 各軌道ポイントにおける操舵角の無効閾値 [rad] | 1.414 | +| `thresholds.steering_rate` | 数値 | 各軌道ポイントにおける操舵角速度の無効閾値 [rad/s] | 10.0 | +| `thresholds.velocity_deviation` | 数値 | 自車速度と自車位置から最も近い軌道ポイント間の速度偏差の無効閾値 [m/s] | 100.0 | +| `thresholds.distance_deviation` | 数値 | 自車位置と自車位置から最も近い軌道ポイント間の距離偏差の無効閾値 [m] | 100.0 | +| `parameters.longitudinal_distance_deviation` | 数値 | 自車位置と軌道間の縦距離偏差の無効閾値 [m] | 2.0 | #### パラメータ -しきい値の計算などに使用されるパラメータ +しきい値の計算に使用するパラメータなど。 + +| `parameters.forward_trajectory_length_acceleration` | double | この値は必要な軌道長を計算するために使用されます。 | -5.0 | +| `parameters.forward_trajectory_length_margin` | double | 自車が軌道の終端点をわずかに超えてもエラーが発生しないよう、必要な軌道長のマージン。 | 2.0 | -| `parameters.forward_trajectory_length_acceleration` | double | この値は、必要な軌道長の算出に使用されます。 | -5.0 | -| `parameters.forward_trajectory_length_margin` | double | 自車が軌道の終点をわずかに過ぎてもエラーが発生しないようにするための、必要な軌道長の余白。 | 2.0 | diff --git a/planning/autoware_remaining_distance_time_calculator/README.md b/planning/autoware_remaining_distance_time_calculator/README.md index 75ec356b1c942..d89123a9acb86 100644 --- a/planning/autoware_remaining_distance_time_calculator/README.md +++ b/planning/autoware_remaining_distance_time_calculator/README.md @@ -1,39 +1,40 @@ -## 残り距離と時間計算 +## 残距離と残り時間計算機能 ### 役割 -このパッケージは、ミッションの残り距離と所要時間の計算を提供することを目的としています。 +このパッケージは、ミッションの残距離と残り時間の計算を提供することを目的としています。 ### 起動とタイミング -- Autowareのミッションでルートが計画されると、計算が起動されます。 -- 計算は`update_rate`パラメータに基づいて適時トリガーされます。 +- Autowareのミッションに対するルートが計画されると計算が起動します。 +- 計算は`update_rate`パラメータに基づいて適時にトリガーされます。 ### モジュールパラメータ -| 名称 | 型 | デフォルト値 | 説明 | -| ------------- | ------ | ------------ | ----------------------------- | -| `update_rate` | double | 10.0 | タイマーコールバック周期 [Hz] | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------- | ------ | ------------- | --------------------------- | +| `update_rate` | double | 10.0 | タイマークールバック周期 [Hz] | ### 内部動作 -#### 距離残計算 +#### 残り距離の計算 -- 距離残計算は、`lanelet2`ルーティングAPIを使用して現在の自車位置と目標位置の間の最短残経路を取得することによって行われます。 -- 距離残は、現在の車線と目標車線を除いた残最短経路の2D長さを合計することによって計算されます。 - - 現在の車線では、距離は現在の車両位置からその車線の終点までの距離で計算されます。 - - 目標車線では、距離は車線の開始位置からその車線内の目標位置までの距離で計算されます。 -- 車線が1つだけ残っているとき、距離は現在の自車位置と目標位置の間の2D距離を取得することによって計算されます。 -- ノードプロセスが終了しないように、現在の車線、目標車線、またはルーティンググラフが無効な場合を処理するためのチェックが追加されます。 - - そのようなケースでは、最後の有効な距離残と時間が保持されます。 +- 残り距離の計算は、現在の車両姿勢とゴール姿勢の間の最短経路の残りを `lanelet2` ルーティング API を使用して求めることで行われます。 +- 残り距離は、残り最短経路の 2D 長を合計することで計算されますが、現在のレーンのレットとゴールのレーンのレットは除きます。 + - 現在のレーンのレットでは、距離は現在の車両位置からそのレーンのレットの終わりまで計算されます。 + - ゴールのレーンのレットでは、距離はそのレーンのレット内でのレーンのレットの開始位置からゴール姿勢まで計算されます。 +- 残りレーンのレットが 1 つしかない場合は、距離は現在の車両姿勢とゴール姿勢の 2D 距離を取得することで計算されます。 +- ノードプロセスが終了しないように、現在のレーンのレット、ゴールのレーンのレット、またはルーティンググラフが有効でない場合を処理するためのチェックが追加されました。 + - このような場合、最後に有効な残り距離と時間が維持されます。 -#### 時間残計算 +#### 残り時間の計算 -- 時間残は現在、最大速度制限を取得することによって、単純な運動方程式に依存しています。 -- 距離残は、距離残を最大速度制限で割ることによって計算されます。 -- 時間残計算には、最大速度制限が0より大きいことを確認するためのチェックが追加されます。これにより、ゼロによる除算や負の時間値の取得が防止されます。 +- 現在の残り時間は、最大速度制限を取得する単純な運動方程式によって決まります。 +- 残り距離は、残り距離を最大速度制限で割ることで計算されます。 +- 最大速度制限がゼロより大きいことを確認するためのチェックが残り時間の計算に追加されました。これによって、ゼロで除算したり、負の時間の値を取得したりすることが防止されます。 ### 今後の作業 -- 残最短経路を検索するために定期的にグラフを探索するのではなく、より効率的な方法で距離残を計算します。 -- より正確な時間残計算のために、より高度なモーションモデルに取り組みます。 +- グラフを定期的に検索して残り最短経路を求める以外の、残り距離計算のより効率的な方法を見つける。 +- より正確な残り時間の計算のために、より高度な運動モデルを採用する。 + diff --git a/planning/autoware_route_handler/README.md b/planning/autoware_route_handler/README.md index 95d4dd90ae5d2..f6548b70df729 100644 --- a/planning/autoware_route_handler/README.md +++ b/planning/autoware_route_handler/README.md @@ -1,18 +1,19 @@ -# ルーハンドラ +# route handler -`route_handler` は、レイレットマップで走行経路を計算するためのライブラリです。 +`route_handler`はレーンレットマップで運転ルートを計算するためのライブラリです。 -## ユニットテスト +## 単体テスト -ユニットテストは `autoware_test_utils` パッケージに依存します。 -`autoware_test_utils` は、ユニットテストの作成を簡素化するいくつかの共通関数を提供するライブラリです。 +単体テストは`autoware_test_utils`パッケージに依存しています。 +`autoware_test_utils`は単体テストの作成を簡素化するためにいくつかの一般的な関数を提供するライブラリです。 ![route_handler_test](./images/route_handler_test.svg) -既定では、テストを作成するために経路ファイルが必要です。以下は、ユニットテストで使用される経路を示しています。 +デフォルトでは、テストを作成するためにrouteファイルが必要です。以下は単体テストで使用されるルートを示しています。 -### レーンチェンジテスト経路 +### レーンチェンジテストルート ![lane_change_test_route](./images/lane_change_test_route.svg) -- この経路は `autoware_test_utils\test_map` から取得できるマップに基づいています。 +- ルートは`autoware_test_utils\test_map`から取得できるマップに基づいています。 + diff --git a/planning/autoware_rtc_interface/README.md b/planning/autoware_rtc_interface/README.md index 86e4e3fd50fa3..2e17c0b83df96 100644 --- a/planning/autoware_rtc_interface/README.md +++ b/planning/autoware_rtc_interface/README.md @@ -1,13 +1,14 @@ -# RTCインタフェース +# RTCインターフェース ## 目的 -RTCインタフェースは、ビヘイビアプランニングモジュールの決定ステータスを公開し、自動運転システム外部からの実行コマンドを受け取るインターフェースです。 +RTCインターフェースは、挙動計画モジュールの決定状況をパブリッシュし、外部の自律運転システムから実行コマンドを受信するためのインターフェースです。 ## 内部動作/アルゴリズム ### 使用例 + ```c++ // Generate instance (in this example, "intersection" is selected) autoware::rtc_interface::RTCInterface rtc_interface(node, "intersection"); @@ -50,6 +51,7 @@ rtc_interface.removeCooperateStatus(uuid); ### RTCInterface (コンストラクター) + ```c++ autoware::rtc_interface::RTCInterface(rclcpp::Node & node, const std::string & name); ``` @@ -60,10 +62,10 @@ autoware::rtc_interface::RTCInterface(rclcpp::Node & node, const std::string & n #### 入力 -- `node` : このインターフェースを呼び出すノード -- `name` : 協調ステータスの配列のトピック名と協調コマンドのサービス名 - - 協調ステータスの配列のトピック名 : `~/{name}/cooperate_status` - - 協調コマンドのサービス名 : `~/{name}/cooperate_commands` +- `node` : このインターフェイスを呼び出すノード +- `name` : cooperative(協調走行)ステータスアレイのトピック名と cooperative コマンドサービスの名前 + - cooperative ステータスアレイのトピック名 : `~/{name}/cooperate_status` + - cooperative コマンドサービスの名前 : `~/{name}/cooperate_commands` #### 出力 @@ -71,17 +73,18 @@ autoware::rtc_interface::RTCInterface(rclcpp::Node & node, const std::string & n ### publishCooperateStatus + ```c++ autoware::rtc_interface::publishCooperateStatus(const rclcpp::Time & stamp) ``` #### 説明 -登録された協調状態を公開します。 +登録された協力状況を公開します。 #### 入力 -- `stamp` : タイムスタンプ +- `stamp`: タイムスタンプ #### 出力 @@ -89,22 +92,23 @@ autoware::rtc_interface::publishCooperateStatus(const rclcpp::Time & stamp) ### updateCooperateStatus + ```c++ autoware::rtc_interface::updateCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid, const bool safe, const double start_distance, const double finish_distance, const rclcpp::Time & stamp) ``` -#### 概要 +#### 説明 -`uuid` に対応する連携状態を更新します。 -`uuid` に対応する連携状態が未登録の場合は、新しい連携状態を追加します。 +`uuid`に対応する協調ステータスを更新します。 +`uuid`に対応する協調ステータスがまだ登録されていない場合は、新しい協調ステータスを追加します。 #### 入力 -- `uuid` : リクエストするモジュールの UUID -- `safe` : リクエストするモジュールの安全状態 -- `start_distance` : 自車位置から開始オブジェクトまでの距離 -- `finish_distance` : 自車位置から終了オブジェクトまでの距離 -- `stamp` : タイムスタンプ +- `uuid`:要求モジュールのUUID +- `safe`:要求モジュールの安全ステータス +- `start_distance`:自車位置から開始オブジェクトまでの距離 +- `finish_distance`:自車位置から終了オブジェクトまでの距離 +- `stamp`:タイムスタンプ #### 出力 @@ -112,17 +116,18 @@ autoware::rtc_interface::updateCooperateStatus(const unique_identifier_msgs::msg ### removeCooperateStatus + ```c++ autoware::rtc_interface::removeCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid) ``` #### 説明 -登録済みステータスから `uuid` に相当する協調ステータスを削除する。 +登録されたステータスから、`uuid`に対応する協調ステータスを削除します。 #### 入力 -- `uuid` : 有効期限切れモジュールの UUID +- `uuid` : 無効になったモジュールのUUID #### 出力 @@ -130,13 +135,14 @@ autoware::rtc_interface::removeCooperateStatus(const unique_identifier_msgs::msg ### clearCooperateStatus + ```c++ autoware::rtc_interface::clearCooperateStatus() ``` -#### 概要 +#### 説明 -すべての協調ステータスを削除します。 +すべての共同作業ステータスを削除します。 #### 入力 @@ -148,6 +154,7 @@ autoware::rtc_interface::clearCooperateStatus() ### isActivated + ```c++ autoware::rtc_interface::isActivated(const unique_identifier_msgs::msg::UUID & uuid) ``` @@ -158,36 +165,39 @@ autoware::rtc_interface::isActivated(const unique_identifier_msgs::msg::UUID & u #### 入力 -- `uuid` : モジュールを確認するための UUID +- `uuid` : チェックするモジュールの UUID #### 出力 -自動モードが有効な場合は、安全ステータスに基づいて返します。 -それ以外の場合は、受信コマンドが `ACTIVATED` の場合、`true` を返します。 -それ以外の場合は、`false` を返します。 +自動モードが有効な場合、セーフティステータスに基づいて返します。 +それ以外は、受信コマンドが `ACTIVATED` である場合は `true` を返します。 +それ以外の場合は `false` を返します。 ### isRegistered + ```c++ autoware::rtc_interface::isRegistered(const unique_identifier_msgs::msg::UUID & uuid) ``` -#### 概要 +#### 説明 -`uuid`が登録されている場合に`true`を返します。 +`uuid` が登録されている場合に `true` を返します。 #### 入力 -- `uuid` : モジュールチェック用UUID +- `uuid` : モジュールの確認用 UUID #### 出力 -`uuid`が登録されている場合に`true`を返します。登録されていない場合は`false`を返します。 +`uuid` が登録されている場合は `true` を返します。 +登録されていない場合は `false` を返します。 ## デバッグツール -RTCインターフェース用の[RTC Replayer](https://autowarefoundation.github.io/autoware_tools/main/planning/autoware_rtc_replayer/)というデバッグツールがあります。 +RTC インターフェイスには、[RTC Replayer](https://autowarefoundation.github.io/autoware_tools/main/planning/autoware_rtc_replayer/) というデバッグツールがあります。 + +## 仮定/既知の制限事項 -## 想定/既知の制限 +## 今後の拡張/未実装の部分 -## 将来の拡張/未実装の部分 diff --git a/planning/autoware_scenario_selector/README.md b/planning/autoware_scenario_selector/README.md index 493fe2d488a01..fd96754793a53 100644 --- a/planning/autoware_scenario_selector/README.md +++ b/planning/autoware_scenario_selector/README.md @@ -2,42 +2,43 @@ ## scenario_selector_node -`scenario_selector_node`は、各シナリオの経路を切り替えるノードです。 +`scenario_selector_node`は、各シナリオから軌道を切り替えるノードです。 ### 入力トピック -| 名称 | タイプ | 説明 | -| -------------------------------- | --------------------------------------- | ------------------------------------------------------ | -| `~input/lane_driving/trajectory` | `autoware_planning_msgs::Trajectory` | LaneDriving シナリオの軌道 | -| `~input/parking/trajectory` | `autoware_planning_msgs::Trajectory` | Parking シナリオの軌道 | -| `~input/lanelet_map` | `autoware_map_msgs::msg::LaneletMapBin` | | -| `~input/route` | `autoware_planning_msgs::LaneletRoute` | ルートと目標位置 | -| `~input/odometry` | `nav_msgs::Odometry` | 車両が停止しているかどうかを確認するため | -| `is_parking_completed` | ブール型(ROS のパラメータとして実装) | Parking の分割された軌跡がすべて公開されているかどうか | +| 名前 | タイプ | 説明 | +| -------------------------------- | ---------------------------------- | -------------------------------------------- | +| `~input/lane_driving/trajectory` | `autoware_planning_msgs::Trajectory` | LaneDriving シナリオの軌跡 | +| `~input/parking/trajectory` | `autoware_planning_msgs::Trajectory` | Parking シナリオの軌跡 | +| `~input/lanelet_map` | `autoware_map_msgs::msg::LaneletMapBin` | | +| `~input/route` | `autoware_planning_msgs::LaneletRoute` | 経路とゴール (`goal pose`) | +| `~input/odometry` | `nav_msgs::Odometry` | 車両が停車しているかどうかを確認する | +| `is_parking_completed` | bool(rosparam として実装) | Parkingのすべての分割軌跡が公開されているか | -### 出力トピック +### Outputトピック -| 名前 | タイプ | 説明 | -| -------------------- | ---------------------------------- | ------------------------------------ | -| `~output/scenario` | tier4_planning_msgs::Scenario | 自車位置とアクティブ化されるシナリオ | -| `~output/trajectory` | autoware_planning_msgs::Trajectory | 通過する軌跡 | +| 名称 | タイプ | 説明 | +| -------------------- | ------------------------------------ | -------------------------------------------- | +| `~output/scenario` | tier4_planning_msgs::Scenario | 現在のシナリオと活性化するシナリオ | +| `~output/trajectory` | autoware_planning_msgs::Trajectory | 追従する軌道 | -### 出力TFs +### Output TFs なし ### 起動方法 -1. `scenario_selector.launch`でリマッピング情報を書き込むか、`roslaunch`を実行するときに引数を追加してください。 +1. `scenario_selector.launch` にリマッピング情報を書き込むか、`roslaunch` を実行時に引数を追加する 2. `roslaunch autoware_scenario_selector scenario_selector.launch` - - 1つのシナリオのみを使用する場合は、`roslaunch autoware_scenario_selector dummy_scenario_selector_{シナリオ名}.launch` + - 1 つのシナリオのみを使用する場合は、`roslaunch autoware_scenario_selector dummy_scenario_selector_{scenario_name}.launch` -### パラメータ +### パラメーター {{ json_to_markdown("planning/autoware_scenario_selector/schema/scenario_selector.schema.json") }} ### フローチャート + ```plantuml @startuml title onTimer @@ -70,6 +71,7 @@ stop @enduml ``` + ```plantuml @startuml title Scenario Transition @@ -113,3 +115,4 @@ endif stop @enduml ``` + diff --git a/planning/autoware_static_centerline_generator/README.md b/planning/autoware_static_centerline_generator/README.md index 1adc568a22658..2add2043309b0 100644 --- a/planning/autoware_static_centerline_generator/README.md +++ b/planning/autoware_static_centerline_generator/README.md @@ -1,81 +1,84 @@ -# 静的センターライン生成器 +# スタティックセンターラインジェネレーター ## 目的 -このパッケージは、走行可能な領域内にパスフットプリントを収めたセンターラインを静的に計算します。 +このパッケージは、運転可能領域内のパスフットプリントを満たすセンターラインを静的に計算します。 -狭い道路での走行では、車線の左右の境界線の中間線であるデフォルトのセンターラインは、しばしばパスフットプリントを走行可能領域の外に出してしまいます。パスフットプリントを走行可能領域内に収めるために、[autoware_path_optimizerパッケージ](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/autoware_path_optimizer/)によるオンラインパス形状最適化を使用します。 +狭い道路の運転では、レーンの右側と左側の境界線の間の真ん中の線であるデフォルトのセンターラインは、しばしば運転可能領域の外側のパスフットプリントを引き起こします。運転可能領域内のパスフットプリントを作るために、[オートウェアパスオプティマイザーパッケージ](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/autoware_path_optimizer/)によるオンラインパスシェイプ最適化を使用します。 -オンラインパス形状最適化の代わりに、静的センターライン最適化を導入します。この静的センターライン最適化により、次の利点があります。 +オンラインパスシェイプ最適化の代わりに、スタティックセンターライン最適化を導入します。このスタティックセンターライン最適化により、次のような利点が得られます。 -- 最適化されたセンターライン形状を事前に確認できます。 - - デフォルトのAutowareでは、車両がそこを走行するまでパス形状は決定されません。 - - これにより、オフラインパス形状評価が可能になります。 -- パスフットプリントが走行可能領域内にあるため、重く不安定なパス最適化を計算する必要がありません。 +- 最適化されたセンターラインの形状を事前に見ることができます。 + - デフォルトのオートウェアでは、車両がそこを走行するまでパスの形状は決定されません。 + - これにより、オフラインパスの形状評価が可能になります。 +- パスのフットプリントはすでに運転可能領域内にあるため、重くて不安定になる可能性のあるパスの最適化を計算する必要がありません。 -## ユースケース +## 使用例 -センターライン最適化と通信するためのインターフェイスが2つあります。 +センターラインオプティマイザーと通信するためのインターフェースは 2 つあります。 -### ベクトルマップビルダーインターフェイス +### ベクトルマップビルダーインターフェース -注: Vector Map Builderのこの機能はリリースされていません。しばらくお待ちください。 -現在、この機能に関するベクターマップビルダーの操作に関するドキュメントはありません。 +注意: ベクトルマップビルダーのこの機能はまだリリースされていません。しばらくお待ちください。 +現時点では、この機能のベクトルマップビルダーの操作に関するドキュメントはありません。 -最適化されたセンターラインは、ベクターマップビルダーの操作から生成できます。 +最適化されたセンターラインは、ベクトルマップビルダーの操作から生成できます。 -次のコマンドで``を指定して実行できます。 +`` を指定して次のコマンドで、 + +- パス計画サーバ +- パス計画サーバとベクトルマップビルダーを接続する HTTP サーバ + +を実行できます。 -```bash -# path planning server -rosrun autoware_path_optimizer path_optimizer_node --api_path /autoware_path_optimizer/path_optimizer -# http server to connect path planning server and Vector Map Builder -rosrun autoware_path_optimizer center_line_generator_node -``` ```sh ros2 launch autoware_static_centerline_generator run_planning_server.launch.xml vehicle_model:= ``` -FYI、HTTPサーバのポートIDはデフォルトで4010です。 +FYI、ポート ID はデフォルトで 4010 です。 -### コマンドラインインターフェイス +### コマンド ライン インターフェイス -最適化されたcenterlineは、コマンドラインインターフェイスから指定することで生成できます。 +最適化された中央線は、コマンド ライン インターフェイスから次を指定することで生成できます。 - `` -- ``(必須ではありません) +- `` (省略可) - `` - `` - `` + ```sh ros2 launch autoware_static_centerline_generator static_centerline_generator.launch.xml run_backgrond:=false lanelet2_input_file_path:= lanelet2_output_file_path:= start_lanelet_id:= end_lanelet_id:= vehicle_model:= ``` -既定の最適化されたセンターラインを含む出力マップパスの場所は `/tmp/lanelet2_map.osm` です。出力マップパスを変更したい場合は、`` を指定することでパスを再マップできます。 +最適化されたセンターラインの場所を含むデフォルトの出力マップパスは`/tmp/lanelet2_map.osm`です。 +出力マップパスを変更したい場合は、``を指定することでパスを再マップできます。 -## 可視化 +## ビジュアライゼーション -パスプランニングサーバを起動すると、rviz も次のように起動します。 +パスプランニングサーバーを起動すると、rvizも同時に次のように起動されます。 ![rviz](./media/rviz.png) -- 黄色のフットプリントは osm マップファイルからのオリジナルのフットプリントです。 - - FYI: フットプリントはセンターラインと車輌のサイズに基づいて生成されます。 -- 赤色のフットプリントは最適化されたフットプリントです。 +- 黄色いフットプリントはosmマップファイルからのオリジナルです。 + - FYI: フットプリントはセンターラインと車両のサイズに基づいて生成されます。 +- 赤いフットプリントは最適化されたものです。 - 灰色領域は走行可能な領域です。 -- 黄色のフットプリントは走行可能領域の外側にあるのに対し、赤いフットプリントは走行可能領域の内側にあることがわかります。 +- 黄色いフットプリントが外側にあるのに対して、赤いフットプリントは走行可能な領域内にあることがわかります。 -### セーフティに欠けるフットプリント +### 安全でないフットプリント -場合によっては、最適化されたセンターラインのフットプリントが車線の境界線に近くなります。`unsafe footprints` マーカーを使って、それらがどの程度近いかを確認することができます。 +場合によっては、最適化されたセンターラインフットプリントが車線の境界線に近づくことがあります。 +次の「安全でないフットプリント」マーカーを使用して、その距離を確認できます。 -フットプリントの色は境界線からの距離によって決まり、テキストはこの距離を表します。 +フットプリントの色はその境界線からの距離によって異なり、テキストはその距離を表します。 ![rviz](./media/unsafe_footprints.png) -既定では、フットプリントの色は次のようになります。 +デフォルトでは、フットプリントの色は次のとおりです。 + +- 距離が0.1 [m]未満の場合: 赤色 +- 距離が0.2 [m]未満の場合: 緑色 +- 距離が0.3 [m]未満の場合: 青色 -- 距離が 0.1 [m] 未満の場合: 赤 -- 距離が 0.2 [m] 未満の場合: 緑 -- 距離が 0.3 [m] 未満の場合: 青 diff --git a/planning/autoware_surround_obstacle_checker/README.md b/planning/autoware_surround_obstacle_checker/README.md index 8e6ac4aac1cea..8b2b99ca886ec 100644 --- a/planning/autoware_surround_obstacle_checker/README.md +++ b/planning/autoware_surround_obstacle_checker/README.md @@ -1,13 +1,14 @@ -## 周辺障害物チェッカー +# サラウンドオプスタクルチェッカー ## 目的 -このモジュールは必要なデータ(自車位置、障害物など)をサブスクライブし、停止条件のいずれかが満たされた場合は停止するためにゼロ速度制限を発行します。 +このモジュールは、必須データ(自車位置、障害物など)をサブスクライブし、停止条件のいずれかが満たされた場合に停止するようにゼロ速度制限を発行します。 ## 内部処理/アルゴリズム ### フローチャート + ```plantuml @startuml @@ -34,142 +35,120 @@ else endif -:Publish stop reason; - stop @enduml ``` -```markdown
### アルゴリズム -### データチェック +### データの確認 -`surround_obstacle_checker` がラウンドポイントクラウド、ダイナミックオブジェクト、および現在の速度データを一切受信していないことを確認します。 +`surround_obstacle_checker` に、地表 pointcloud、動的物体、現在の速度データを受信していないことを確認する。 -### 最近方の物体の距離を取得する +### 最近の物体との距離の取得 -自車と最近方の物体間の距離を計算します。 -この関数では、自車のポリゴンとポイントクラウド内のすべての点とダイナミックオブジェクトのポリゴンとの間の最小距離を計算します。 +自己車両と最も近い物体の間の距離を計算する。 +この関数では、自己車両の多角形と、pointcloud 内のすべての点と、動的物体の多角形との間の最短距離を計算する。 -### 停止要求 +### 停止要件 -以下の条件がすべて満たされた場合、停止を計画します。 +以下の条件をすべて満たしている場合、停止の計画を行う。 -- 自車が停止していること -- 以下のいずれかの条件を満たしていること - 1. 最近方の障害物までの距離が以下の条件を満たしていること - - 状態が `State::PASS` の場合、距離が `surround_check_distance` 未満であること - - 状態が `State::STOP` の場合、距離が `surround_check_recover_distance` 未満であること - 2. 1 の条件を満たさない場合、1 の条件を満たしてから経過した時間が `state_clear_time` 未満であること +- 自己車両が停止している +- 以下のいずれかの条件を満たす + 1. 最も近い障害物との距離が以下の条件を満たす + - 状態が `State::PASS` の場合、距離が `surround_check_distance` 未満である + - 状態が `State::STOP` の場合、距離が `surround_check_recover_distance` 未満である + 2. 1 の条件を満たさない場合、1 の条件を満たしてから経過した時間が `state_clear_time` 未満である ### 状態 -チャタリングを防ぐため、`surround_obstacle_checker` は 2 つの状態を管理します。 -停止条件のセクションで述べたように、状態に応じて周辺障害物を見つけるためのしきい値を変更することでチャタリングを防ぎます。 +チャタリングを防ぐため、`surround_obstacle_checker` は 2 つ状態を管理する。 +停止条件のセクションで述べたように、状態に応じて周囲の障害物を見つけるための閾値を変更することでチャタリングを防ぐ。 -- `State::PASS` : 停止計画を解除する +- `State::PASS` :停止計画が解除される - `State::STOP` :停止計画中 ## 入出力 ### 入力 -``` -| 名前 | 種類 | 説明 | -| ---------------------------------------------- | ------------------------------------------------- | -------------------------------------- | -| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避すべき障害物の点群 | -| `/perception/object_recognition/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 動的オブジェクト | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 現在のひねり | -| `/tf` | `tf2_msgs::msg::TFMessage` | TF | -| `/tf_static` | `tf2_msgs::msg::TFMessage` | 静的TF | +| 名前 | タイプ | 説明 | +| ------------------------------------------- | ----------------------------------------------- | ---------------------------------------------------------- | +| `/perception/obstacle_segmentation/pointcloud` | `sensor_msgs::msg::PointCloud2` | 自車が停止または回避すべき障害物の点群 | +| `/perception/object_recognition/objects` | `autoware_perception_msgs::msg::PredictedObjects` | 動的物体 | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 現在のひねり | +| `/tf` | `tf2_msgs::msg::TFMessage` | TF | +| `/tf_static` | `tf2_msgs::msg::TFMessage` | TF(静的) | ### 出力 -### 自動運転ソフトウェア - -このドキュメントでは、自動運転ソフトウェアのアーキテクチャとコンポーネントについて説明します。 - -### アーキテクチャ +**自動運転ソフトウェア** -自動運転ソフトウェアのアーキテクチャは、3つの主要モジュールで構成されています。 +### 概要 -- **Perceptionモジュール:**センサーデータを処理し、周囲環境の認識を行います。 -- **Planningモジュール:**認識結果に基づき、走行経路を計画します。 -- **Controlモジュール:**計画された経路に従って、車両を制御します。 +このドキュメントでは、Autowareのソフトウェアアーキテクチャについて説明します。Autowareは、自動運転車両用のオープンソースのソフトウェアプラットフォームです。 -### Planningモジュール +### システムアーキテクチャ -Planningモジュールは、以下の機能を担当します。 +Autowareのシステムアーキテクチャは、次のコンポーネントで構成されています。 -- **経路計画:**目的地までの安全で効率的な経路の作成 -- **速度計画:**経路上の適切な速度の設定 -- **逸脱量制御:**速度逸脱量と加速度逸脱量の監視と調整 +- **Planning (計画)**: 車両の経路と行動を計画するモジュール。 +- **Perception (認識)**: 車両の周囲の環境を認識するモジュール。 +- **Control (制御)**: 車両の挙動を制御するモジュール。 +- **Localization (局所化)**: 車両の自車位置と姿勢を推定するモジュール。 -### Perceptionモジュール +これらのコンポーネントは、ROS(Robot Operating System)と呼ばれる通信インフラストラクチャを介して通信します。 -Perceptionモジュールは、以下の機能を担当します。 +### データフロー -- **物体検出:**LiDAR、カメラ、レーダーセンサーからのデータを処理して、物体(車両、歩行者、障害物など)を検出 -- **分類:**検出された物体のタイプ(車、トラック、歩行者など)を分類 -- **自車位置の推定:**車両の現在の位置と姿勢の推定 -- **周囲地図の構築:**周囲環境の静的および動的な地図の作成 +Autowareのデータフローは次のとおりです。 -### Controlモジュール +1. **Perceptionモジュール**は、センサデータから車両の周囲の環境を認識します。 +2. **Planningモジュール**は、認識された環境情報を基に、車両の経路と行動を計画します。 +3. **Controlモジュール**は、Planningモジュールから生成された経路と行動を受け取り、車両の挙動を制御します。 +4. **Localizationモジュール**は、車両の自車位置と姿勢を推定し、この情報を他のモジュールに提供します。 -Controlモジュールは、以下の機能を担当します。 +### `post resampling` -- **ステアリング制御:**計画された経路に従ってステアリング角を制御 -- **アクセル/ブレーキ制御:**速度計画に基づき、アクセルとブレーキを制御 -- `post resampling`:リアルタイムセンサーデータによるフィードバックに基づいて、制御を動的に調整 +`post resampling`は、Planningモジュールによって生成された経路が、車両の挙動に適するように調整されるプロセスです。これにより、車両の挙動がより滑らかで、安全になります。 -### アーキテクチャの詳細 +### その他 -各モジュール間の相互作用は、以下のようになります。 +Autowareのソフトウェアは、C++とPythonで実装されています。このソフトウェアは、Linuxオペレーティングシステムで動作します。 -1. Perceptionモジュールは、物体検出結果と自車位置をPlanningモジュールに提供します。 -2. Planningモジュールは、Perceptionモジュールの入力に基づいて、経路と速度計画を作成します。 -3. Planningモジュールは、経路と速度計画をControlモジュールに送信します。 -4. Controlモジュールは、Planningモジュールの計画に従って車両を制御します。 -5. Controlモジュールは、Perceptionモジュールが提供するリアルタイムセンサーデータに基づいて、フィードバックをPlanningモジュールに提供します。 -6. Perceptionモジュールは、リアルタイムセンサーデータに基づいて、自身の認識結果を更新します。 - -### Autoware Stac - -Autoware Stacは、オープンソース自動運転ソフトウェアスタックであり、ここで説明したアーキテクチャに基づいています。Autoware Stacは、Perception、Planning、Controlモジュールを提供し、自動運転車の開発を簡素化します。 - -| 名前 | 型 | 説明 | -| --------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------- | -| `~/output/velocity_limit_clear_command` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | -| `~/output/max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | -| `~/output/no_start_reason` | `diagnostic_msgs::msg::DiagnosticStatus` | スタート不可理由 | -| `~/output/stop_reasons` | `tier4_planning_msgs::msg::StopReasonArray` | 停止理由 | -| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | -| `~/debug/footprint` | `geometry_msgs::msg::PolygonStamped` | 自車ベースフットプリント(可視化用) | -| `~/debug/footprint_offset` | `geometry_msgs::msg::PolygonStamped` | `surround_check_distance`オフセット付き自車フットプリント(可視化用) | -| `~/debug/footprint_recover_offset` | `geometry_msgs::msg::PolygonStamped` | `surround_check_recover_distance`オフセット付き自車フットプリント(可視化用) | +| 名称 | 種類 | 説明 | +| --------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| `~/output/velocity_limit_clear_command` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | +| `~/output/max_velocity` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | +| `~/output/no_start_reason` | `diagnostic_msgs::msg::DiagnosticStatus` | 開始不可理由 | +| `~/debug/marker` | `visualization_msgs::msg::MarkerArray` | 可視化用マーカー | +| `~/debug/footprint` | `geometry_msgs::msg::PolygonStamped` | 自車位置のベースフットプリント(可視化用) | +| `~/debug/footprint_offset` | `geometry_msgs::msg::PolygonStamped` | `surround_check_distance` オフセット付きの自車位置フットプリント(可視化用) | +| `~/debug/footprint_recover_offset` | `geometry_msgs::msg::PolygonStamped` | `surround_check_recover_distance` オフセット付きの自車位置フットプリント(可視化用) | ## パラメータ {{ json_to_markdown("planning/autoware_surround_obstacle_checker/schema/surround_obstacle_checker.schema.json") }} -| 名前 | タイプ | 説明 | デフォルト値 | -| :----------------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------- | -| `enable_check` | `bool` | 対象オブジェクトを障害物チェックのターゲットに含めてよいかどうかを示します。 | オブジェクト: `true`、点群: `false` | -| `surround_check_front_distance` | `bool` | この前方距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | -| `surround_check_side_distance` | `double` | この側面距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | -| `surround_check_back_distance` | `double` | この後方距離内にオブジェクトまたは点群がある場合は、"exist-surrounding-obstacle"ステータスに遷移します。[m] | 0.5 | -| `surround_check_hysteresis_distance` | `double` | `surround_check_xxx_distance`プラスこの追加距離内にオブジェクトが存在しない場合、"non-surrounding-obstacle"ステータスに遷移します。[m] | 0.3 | -| `state_clear_time` | `double` | 停止状態を解除するためのしきい値[s] | 2.0 | -| `stop_state_ego_speed` | `double` | 自己車両が停止したかどうかをチェックするためのしきい値[m/s] | 0.1 | -| `stop_state_entry_duration_time` | `double` | 自己車両が停止したかどうかをチェックするためのしきい値[s] | 0.1 | -| `publish_debug_footprints` | `bool` | オフセットあり/なしで車両のフットプリントを公開します。 | `true` | +| 名前 | 型 | 説明 | 初期値 | +| :-------------------------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------- | +| `enable_check` | `bool` | チェック対象の障害物に各オブジェクトが考慮されるかどうかを示します。 | オブジェクトは `true`; 点群は `false` | +| `surround_check_front_distance` | `bool` | この前方距離内にオブジェクトまたは点群がある場合、「周囲障害物あり」状態に移行します [m]。 | 0.5 | +| `surround_check_side_distance` | `double` | この側方距離内にオブジェクトまたは点群がある場合、「周囲障害物あり」状態に移行します [m]。 | 0.5 | +| `surround_check_back_distance` | `double` | この後方距離内にオブジェクトまたは点群がある場合、「周囲障害物あり」状態に移行します [m]。 | 0.5 | +| `surround_check_hysteresis_distance` | `double` | オブジェクトが `surround_check_xxx_distance` とこの追加距離の合計内に存在しない場合、「周囲障害物なし」状態に移行します [m]。 | 0.3 | +| `state_clear_time` | `double` | 停止状態を解除する閾値 [s] | 2.0 | +| `stop_state_ego_speed` | `double` | 自車の停止をチェックする閾値 [m/s] | 0.1 | +| `stop_state_entry_duration_time` | `double` | 自車の停止をチェックする閾値 [s] | 0.1 | +| `publish_debug_footprints` | `bool` | オフセット付き/なしの車両フットプリントをパブリッシュします。 | `true` | -## 想定事項/既知の制限事項 +## 前提条件 / 制限事項 停止計画を実行するには、障害物の点群データを取得する必要があります。 -したがって、障害物が死角にある場合は停止計画を実行しません。 +したがって、障害物が死角にある場合は停止計画を行いません。 + diff --git a/planning/autoware_velocity_smoother/README.md b/planning/autoware_velocity_smoother/README.md index ce175ba51f08c..2add7713ca9a7 100644 --- a/planning/autoware_velocity_smoother/README.md +++ b/planning/autoware_velocity_smoother/README.md @@ -1,412 +1,299 @@ -## 速度スムージング +# Velocity Smoother ## 目的 -`autoware_velocity_smoother` は、基準軌道の要望速度プロファイルを出力します。 -このモジュールは、速度、加速度、ジャークの限界内で、速度の最大化と乗り心地の両方を達成する速度プロファイルを計画します。 -加速とジャークの限界により速度プロファイルの滑らかさが保証されるため、このモジュールを `autoware_velocity_smoother` と呼びます。 +`autoware_velocity_smoother`は、基準経路上の目標速度プロフィールを出力します。 +このモジュールは速度、加速度、ジャークの制約内で速度プロフィールを計画し、速度の最大化と乗り心地の両方を向上します。加速とジャークの制約は速度プロフィールの滑らかさを意味するため、このモジュールを`autoware_velocity_smoother`と呼びます。 -## 仕組み / アルゴリズム +## 内部動作/アルゴリズム ### フローチャート ![motion_velocity_smoother_flow](./media/motion_velocity_smoother_flow.drawio.svg) -#### 軌道抽出 +#### 経路の抽出 -車両の後輪軸中心に最も近い基準軌道上の点を基準に、`extract_behind_dist` 後方と `extract_ahead_dist` 前方の間の基準パスを抽出します。 +車両の後輪車軸中心に最も近い参考経路上の点に対して、`extract_behind_dist`の背後と`extract_ahead_dist`の前方の間の参考経路を抽出します。 #### 外部速度制限の適用 -`autoware_velocity_smoother` 外部からの速度制限を入力として適用します。 -外部速度制限は、マップと基準軌道にすでに設定されている速度制限とは異なることに注意してください。 -外部速度は、パラメータとして設定された減速とジャークの制約で速度制限に達することができる位置に適用されます。 +`autoware_velocity_smoother`の外部から入力された速度制限を適用します。 +外部速度制限は、マップと参考経路にすでに設定されている速度制限とは異なることに注意してください。 +外部速度は、パラメータとして設定した減速度とジャーク制約で速度制限に到達できる位置に適用されます。 #### 停止接近速度の適用 -停止点付近に速度制限を適用します。 -この関数は、障害物に接近したり、停止の精度を向上させるために使用されます。 +停止点付近の速度制限を適用します。 +この機能は、障害物に接近したり、停止の精度を向上させたりするために使用されます。 #### 横加速度制限の適用 カーブで減速するための速度制限を適用します。 -基準軌道の曲率と最大横加速度 `max_lateral_accel` から速度制限を計算します。 -速度制限は `min_curve_velocity` を下回らないように設定されています。 +参考経路の曲率と最大横加速度`max_lateral_accel`から速度制限を計算します。速度制限は`min_curve_velocity`を下回らないように設定されます。 -注: `nominal.jerk` より大きな減速を要求する速度制限は適用されません。つまり、自分の目の前に急カーブが計画されていても、減速は行われません。 +注: `nominal.jerk`を超える速度制限は適用されません。つまり、目の前に急カーブが計画されていても減速は行われません。 -#### ステアリング レート制限の適用 +#### ステアリング速度制限の適用 -軌跡点の所望ステアリング角度を計算し、ステアリング レート制限を適用します。 (`steering_angle_rate` > `max_steering_angle_rate`) の場合、軌跡点の速度を許容可能な速度まで低下させます。 +経路ポイントの目標ステアリング角を計算し、ステアリング速度制限を適用します。 (`steering_angle_rate` > `max_steering_angle_rate`)の場合、経路ポイントの速度を許容可能な速度まで下げます。 -#### 軌道の再サンプリング +#### 経路の再サンプリング -基準軌道上の点を指定された時間間隔で再サンプリングします。 -軌道の長さの範囲は `min_trajectory_length` と `max_trajectory_length` の間で設定され、2 点間の距離は `min_trajectory_interval_distance` より長いことに注意してください。 -現在の速度で移動する距離まで `resample_time` ごとに密にサンプリングし、それ以降は疎にサンプリングします。 -速度に応じてサンプリングすることで、低速では細かく、高速では粗くサンプリングされるため、計算負荷と精度が向上します。 +指定された時間間隔で基準経路上の点をリサンプリングします。 +経路長の範囲は`min_trajectory_length`と`max_trajectory_length`の間に設定され、2点間の距離は`min_trajectory_interval_distance`より長くなります。 +現在の速度で`resample_time`の間に移動する距離まで密にサンプリングし、その後は疎らにサンプリングします。速度に応じてサンプリングすることで、低速では細かく、高速では粗くサンプリングするため、計算負荷と精度が両立します。 #### 初期状態の計算 -速度計画の初期値を計算します。 -状況に応じた初期値が次の表のように計算されます。 +速度計画のための初期値を計算します。 +次の表に示すように、状況に応じて初期値が計算されます。 -| シチュエーション | 初期速度 | 初期加速度 | -| ------------------------ | ---------------- | ------------------ | -| 第1計算 | 自車速度 | 0.0 | -| エンゲージ | `エンゲージ速度` | `エンゲージ加速度` | -| 計画速度と自車速度の逸脱 | 自車速度 | 前回の計画値 | -| ノーマル | 前回の計画値 | 前回の計画値 | +| 状況 | 初期速度 | 初期加速度 | +| -------------------------------------------------------- | ------------------ | ---------------------- | +| 初期計算 | 自車速度 | 0.0 | +| エンゲージ | `engage_velocity` | `engage_acceleration` | +| 計画速度と自車速度の乖離 | 自車速度 | 直前の計画値 | +| 通常 | 直前の計画値 | 直前の計画値 | -#### 滑らかな速度 +#### Smooth velocity 速度を計画します。 -速度計画のアルゴリズムは `JerkFiltered`, `L2` および `Linf` から選択され、起動ファイルに設定します。 +速度計画のアルゴリズムは、'JerkFiltered'、'L2'、'Linf' から選択され、ローンチファイルに設定されます。 これらのアルゴリズムでは、最適化のソルバーとして OSQP[1] を使用します。 ##### JerkFiltered -速度の 2 乗と速度制限逸脱量、加速度制限逸脱量、ジャーク制限逸脱量の 2 乗の合計を最小化します。 +速度の2乗のマイナスと、速度制限、加速度制限、ジャーク制限の違反の2乗の和を最小化します。 ##### L2 -速度の 2 乗、擬似ジャーク[2]の 2 乗、速度制限逸脱量および加速度制限逸脱量の 2 乗の合計を最小化します。 +速度の2乗のマイナス、擬似的なジャーク[2]の2乗、速度制限と加速度制限の違反の2乗の和を最小化します。 ##### Linf -速度の 2 乗、擬似ジャーク[2] の絶対値の最大値および速度制限逸脱量と加速度制限逸脱量の 2 乗の合計を最小化します。 +速度の2乗のマイナス、擬似的なジャーク[2]の絶対値の最大値、速度制限と加速度制限の違反の2乗の和を最小化します。 -#### 後処理 +#### Post process -計画速度の後処理を実行します。 +計画された速度のポストプロセスを実行します。 -- 停止地点より前の速度を 0 に設定します。 -- `max_velocity` という config で指定された最大速度を設定します。 -- 自車位置より後の速度を設定します。 -- 軌道を再サンプリングします(`'post resampling'`)。 -- デバッグデータを出力します。 +- 停止地点の前の速度をゼロに設定 +- `max_velocity` という名前の構成に与えられた最大速度を設定 +- 自車位置の後ろの速度を設定 +- 軌道の再サンプリング('post resampling') +- デバッグデータを出力 -最適化後、最適化された軌道を次のノードに渡す前に `'post resampling'` と呼ばれる再サンプリングを実行します。最適化に必要なパス間隔が次のモジュールのパス間隔と異なる場合があるため、`'post resampling'` はこのギャップを埋めます。したがって、`'post resampling'` では、パラメータを決定するために後続モジュールのパス仕様を確認する必要があります。最適化アルゴリズムの計算負荷が高く、最初の再サンプリングにおいてパス間隔が後続モジュールのパス仕様よりも疎な場合、`'post resampling'` は軌道を濃密に再サンプリングします。一方で、最適化アルゴリズムの計算負荷が小さく、最初の再サンプリングにおいてパス間隔が後続モジュールのパス仕様よりも密な場合、パスは後続モジュールの仕様に従って疎に再サンプリングされます。 +最適化後、最適化された軌跡を次のノードに渡す前に「'post resampling'」と呼ばれる再サンプリングを実行します。最適化に必要なパス間隔が次のモジュールのパス間隔と異なる場合があるため、「'post resampling'」はこのギャップを埋めるのに役立ちます。したがって、「'post resampling'」では、パラメータを決定するために、次のモジュールのパス仕様を確認する必要があります。最初の再サンプリング時に最適化アルゴリズムの計算負荷が高く、パスの間隔が次のモジュールのパス仕様よりも疎である場合、「'post resampling'」は軌道を密に再サンプリングします。一方で、最適化アルゴリズムの計算負荷が小さく、1回目の再サンプリング時にパスの間隔が次のモジュールのパス仕様よりも密である場合、パスは次のモジュールの仕様に従ってまばらに再サンプリングされます。 ## 入出力 ### 入力 -| 名称 | 種別 | 説明 | -| ------------------------------------------ | ----------------------------------- | ------------------ | -| `~/input/trajectory` (\*) | `autoware_planning_msgs/Trajectory` | 基準走行軌跡 | -| `/planning/scenario_planning/max_velocity` | `std_msgs/Float32` | 外部速度制限 [m/s] | -| `/localization/kinematic_state` | `nav_msgs/Odometry` | 自車位置 | -| `/tf` (\*) | `tf2_msgs/TFMessage` | TF | -| `/tf_static` (\*) | `tf2_msgs/TFMessage` | TF static | +| 名前 | タイプ | 説明 | +| ------------------------------------------ | ----------------------------------- | ----------------------------------------- | +| `~/input/trajectory` | `autoware_planning_msgs/Trajectory` | 参照軌道 | +| `/planning/scenario_planning/max_velocity` | `std_msgs/Float32` | 外部速度制限 [m/s] | +| `/localization/kinematic_state` | `nav_msgs/Odometry` | 自車位置 | +| `/tf` | `tf2_msgs/TFMessage` | TF | +| `/tf_static` | `tf2_msgs/TFMessage` | TF (静止) | -## 自動運転ソフトウェアに関するドキュメント - -このドキュメントでは、Autowareの自動運転ソフトウェアの設計と実装について説明します。このソフトウェアは、Planningモジュール、Controlモジュール、Perceptionモジュールで構成されています。 - -### Planningモジュール - -Planningモジュールは、自動運転車両の経路計画を行います。以下のような機能があります。 - -- マップデータに基づく経路の生成 -- 障害物回避 -- 交通ルール遵守 - -### Controlモジュール - -Controlモジュールは、車両の制御を行います。以下のような機能があります。 - -- ステアリング制御 -- 加速制御 -- ブレーキ制御 - -### Perceptionモジュール - -Perceptionモジュールは、車両周囲の環境を認識します。以下のような機能があります。 - -- LiDARデータの処理 -- カメラ画像の処理 -- レーダーデータの処理 - -### システムアーキテクチャ - -Autowareのシステムアーキテクチャは以下のような階層構造になっています。 - -- **Perception層:** Perceptionモジュールが含まれます。 -- **Planning層:** Planningモジュールが含まれます。 -- **Control層:** Controlモジュールが含まれます。 - -### データフロー +### 出力 +``` +**はじめに** -システム内のデータフローは以下のような流れで行われます。 +このドキュメントは、Autoware プラットフォームの動的計画コンポーネントの概要を提供します。動的計画コンポーネントは、Perception (知覚) モジュールから受け取ったオブジェクトに関する情報を使用して、周辺環境内の車両の安全かつ効率的な移動を計画します。 -1. Perceptionモジュールは、周囲環境に関するデータを収集します。 -2. Planningモジュールは、Perceptionモジュールから収集したデータに基づく経路を生成します。 -3. Controlモジュールは、Planningモジュールから生成された経路に基づいて車両を制御します。 +**コンポーネントの概要** -### 安全性機能 +動的計画コンポーネントは、以下のサブコンポーネントで構成されています。 -Autowareには、以下のような安全性機能を備えています。 +* **TrajectoryGenerator (軌跡生成器):** 現在の速度と目標速度を使用して、車両の動作空間内の安全かつ実行可能な軌跡を生成します。 +* **PathPlanner (経路計画器):** 周辺環境の地図情報を使用して、軌跡を実行可能な経路に変換します。 +* **MotionPlanner (運動計画器):** 経路を、車両の運動学的な制約に従った詳細な制御コマンドに変換します。 +* **ObstaclePredictor (障害物予測器):** 知覚モジュールから提供された予測を使用して、周囲のオブジェクトの将来の動きを予測します。 -- **障害物回避:** 障害物を検出し、自動的に回避します。 -- **衝突回避:** 車両との衝突を検出し、回避します。 -- **速度制限遵守:** 道路の速度制限を遵守します。 +**ワークフロー** -### パフォーマンス評価 +動的計画コンポーネントのワークフローは次のとおりです。 -Autowareのパフォーマンスは、以下のような指標に基づいて評価されます。 +1. Perception モジュールが周囲のオブジェクトに関する情報を提供します。 +2. ObstaclePredictor が、提供された情報を基に周囲のオブジェクトの将来の動きを予測します。 +3. TrajectoryGenerator が、自車位置、速度、目標速度などの情報を使用して、車両の動作空間内の安全で実行可能な軌跡を生成します。 +4. PathPlanner が、地図情報を使用して軌跡を実行可能な経路に変換します。 +5. MotionPlanner が、経路を車両の運動学的な制約に従った詳細な制御コマンドに変換します。 -- **平均到達時間:** 目的地に到着するまでの平均時間 -- **走行距離:** 走行距離 -- **post resampling**障害物逸脱量 -- **post resampling**速度逸脱量 -- **post resampling**加速度逸脱量 +**'post resampling`の考慮事項** -### 自車位置の推定 +`post resampling` 手法を使用する場合、動的計画コンポーネントは、パーティクルフィルタの出力を考慮に入れて予測を行います。このアプローチにより、動的計画コンポーネントは、環境内の不確実性をより適切に処理できます。 -Autowareでは、以下のような方法で自車位置を推定しています。 +**結論** -- GPS -- IMU -- オドメーター +動的計画コンポーネントは、Autoware プラットフォームの重要な部分です。車両の周囲環境を認識し、その中で安全かつ効率的に移動するための計画を立てます。このコンポーネントは、自己運転車の開発にとって不可欠です。 +``` -| 名前 | 型 | 説明 | -| -------------------------------------------------- | ----------------------------------- | --------------------------------------------------------------------------------- | -| `~/output/trajectory` | `autoware_planning_msgs/Trajectory` | 変更された経路 | -| `/planning/scenario_planning/current_max_velocity` | `std_msgs/Float32` | 現在の外部速度制限 [m/s] | -| `~/closest_velocity` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画速度 (デバッグ用) | -| `~/closest_acceleration` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画加速度 (デバッグ用) | -| `~/closest_jerk` | `std_msgs/Float32` | 自車ベースリンクに最も近い計画ジャーク (デバッグ用) | -| `~/debug/trajectory_raw` | `autoware_planning_msgs/Trajectory` | 抽出された経路 (デバッグ用) | -| `~/debug/trajectory_external_velocity_limited` | `autoware_planning_msgs/Trajectory` | 外部速度制限経路 (デバッグ用) | -| `~/debug/trajectory_lateral_acc_filtered` | `autoware_planning_msgs/Trajectory` | 横加速度制限経路 (デバッグ用) | -| `~/debug/trajectory_steering_rate_limited` | `autoware_planning_msgs/Trajectory` | ステアリング角速度制限経路 (デバッグ用) | -| `~/debug/trajectory_time_resampled` | `autoware_planning_msgs/Trajectory` | `post resampling`された経路 (デバッグ用) | -| `~/distance_to_stopline` | `std_msgs/Float32` | 自車位置から停止線までの距離 (最大 50 m) (デバッグ用) | -| `~/stop_speed_exceeded` | `std_msgs/Bool` | 最大速度が 0 の地点における計画速度がしきい値を超えている場合に `true` を公開する | +| 名称 | タイプ | 説明 | +| ---------------------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| `~/output/trajectory` | `autoware_planning_msgs/Trajectory` | 変更された軌跡 | +| `/planning/scenario_planning/current_max_velocity` | `std_msgs/Float32` | 現在の外部速度制限 [m/s] | +| `~/closest_velocity` | `std_msgs/Float32` | エゴ基準座標系に近い計画された速度(デバッグ用) | +| `~/closest_acceleration` | `std_msgs/Float32` | エゴ基準座標系に近い計画された加速度(デバッグ用) | +| `~/closest_jerk` | `std_msgs/Float32` | エゴ基準座標系に近い計画されたジャーク(デバッグ用) | +| `~/debug/trajectory_raw` | `autoware_planning_msgs/Trajectory` | 抽出された軌跡(デバッグ用) | +| `~/debug/trajectory_external_velocity_limited` | `autoware_planning_msgs/Trajectory` | 外部速度制限の軌跡(デバッグ用) | +| `~/debug/trajectory_lateral_acc_filtered` | `autoware_planning_msgs/Trajectory` | 横加速度制限の軌跡(デバッグ用) | +| `~/debug/trajectory_steering_rate_limited` | `autoware_planning_msgs/Trajectory` | ステアリング角速度制限の軌跡(デバッグ用) | +| `~/debug/trajectory_time_resampled` | `autoware_planning_msgs/Trajectory` | 時間再サンプリングされた軌跡(デバッグ用) | +| `~/distance_to_stopline` | `std_msgs/Float32` | 自車位置からの停止線までの距離(最大50m)(デバッグ用) | +| `~/stop_speed_exceeded` | `std_msgs/Bool` | 最大速度がゼロのポイントにおける計画速度が閾値を超えると `true` を発行 | ## パラメータ ### 制約パラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -| -------------- | -------- | ----------------------------- | ------------ | -| `max_velocity` | `double` | 最大速度制限 [m/s] | 20.0 | -| `max_accel` | `double` | 最大加速度制限 [m/ss] | 1.0 | -| `min_decel` | `double` | 最小減速度制限 [m/ss] | -0.5 | -| `stop_decel` | `double` | 停止点での停止減速度値 [m/ss] | 0.0 | -| `max_jerk` | `double` | 最大ジャーク制限 [m/sss] | 1.0 | -| `min_jerk` | `double` | 最小ジャーク制限 [m/sss] | -0.5 | +| 名前 | 型 | 説明 | デフォルト値 | +| :------------- | :------- | :--------------------------------------------- | :------------ | +| `max_velocity` | `double` | 最大速度制限 [m/s] | 20.0 | +| `max_accel` | `double` | 最大加速度制限 [m/ss] | 1.0 | +| `min_decel` | `double` | 最小減速度制限 [m/ss] | -0.5 | +| `stop_decel` | `double` | 停止位置での停止減速度値 [m/ss] | 0.0 | +| `max_jerk` | `double` | 最大ジャーク制限 [m/sss] | 1.0 | +| `min_jerk` | `double` | 最小ジャーク制限 [m/sss] | -0.5 | ### 外部速度制限パラメータ -| 名称 | 型 | 説明 | デフォルト値 | -| :----------------------------------------- | :------- | :------------------------------------- | :----------- | -| `margin_to_insert_external_velocity_limit` | `double` | 外部速度制限を挿入するマージン距離 [m] | 0.3 | +| 名前 | 型 | 説明 | デフォルト値 | +| :----------------------------------------- | :------- | :------------------------------------------------------ | :------------ | +| `margin_to_insert_external_velocity_limit` | `double` | 外部の速度制限を挿入するマージン距離 [m] | 0.3 | ### カーブパラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -| :------------------------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| `enable_lateral_acc_limit` | `bool` | 横方向加速度フィルタのオンとオフを切り替える。実行時に動的に切り替えることができる。 | true | -| `max_lateral_accel` | `double` | 最大横方向加速度限界 [m/ss] | 0.5 | -| `min_curve_velocity` | `double` | 横方向加速度限界での最小速度 [m/ss] | 2.74 | -| `decel_distance_before_curve` | `double` | 横方向加速度限界のためにカーブの前で減速する距離 [m] | 3.5 | -| `decel_distance_after_curve` | `double` | 横方向加速度限界のためにカーブの後で減速する距離 [m] | 2.0 | -| `min_decel_for_lateral_acc_lim_filter` | `double` | 横方向加速度フィルタによる急ブレーキを避ける減速限界 [m/ss]。強い制限は、障害物回避などによる急カーブ出現に対する減速応答を低下させる。 | -2.5 | - -### 結合と再計画パラメータ - -| 名前 | タイプ | 説明 | デフォルト値 | -| :----------------------------- | :------- | :-------------------------------------------------------------------------------------------------- | :----------- | -| `replan_vel_deviation` | `double` | 初期速度を再計画する速度逸脱量 [m/s] | 5.53 | -| `engage_velocity` | `double` | エンゲージ速度閾値 [m/s](軌跡速度がこの値より大きい場合、エンゲージ車両速度にこの速度を使用) | 0.25 | -| `engage_acceleration` | `double` | エンゲージ時使用する加速度 [m/ss] | 0.1 | -| `engage_exit_ratio` | `double` | 速度が engage_exit_ratio x engage_velocity を超えた場合、エンゲージシーケンスを通常の速度計画に戻す | 0.5 | -| `stop_dist_to_prohibit_engage` | `double` | 停止点がこの距離にある場合、車両が移動しないように速度を 0 に設定する [m] | 0.5 | +| 名前 | 型 | 説明 | デフォルト値 | +| :------------------------------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `enable_lateral_acc_limit` | `bool` | Lateral Acceleration フィルタをオン/オフするため。ランタイム時に動的に切り替えることができる。 | true | +| `max_lateral_accel` | `double` | 最大横加速度限度 [m/ss] | 0.5 | +| `min_curve_velocity` | `double` | 横加速度限度における最小速度 [m/ss] | 2.74 | +| `decel_distance_before_curve` | `double` | 横加速度限度のためにカーブ手前で減速する距離 [m] | 3.5 | +| `decel_distance_after_curve` | `double` | 横加速度限度のためにカーブ後に減速する距離 [m] | 2.0 | +| `min_decel_for_lateral_acc_lim_filter` | `double` | 横加速度フィルタによる急ブレーキを避けるために減速を制限 [m/ss]。強い制限は、障害物回避などによる急カーブの出現に対する減速応答を劣化させる。 | -2.5 | + +### Engage および Replan のパラメーター + +| 名前 | 型 | 説明 | デフォルト値 | +| :----------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| `replan_vel_deviation` | `double` | 再計画初期速度の速度偏差 [m/s] | 5.53 | +| `engage_velocity` | `double` | エンゲージ速度しきい値 [m/s] (軌道速度がこの値より高い場合、この速度を車両速度エンゲージに使用) | 0.25 | +| `engage_acceleration` | `double` | エンゲージ加速度 [m/ss] (エンゲージ中にこの加速度を使用) | 0.1 | +| `engage_exit_ratio` | `double` | velocity が engage_exit_ratio x engage_velocity を超えた場合、エンゲージシーケンスから通常の速度プランニングに切り替える。 | 0.5 | +| `stop_dist_to_prohibit_engage` | `double` | 停止点がこの距離内にある場合、速度は 0 に設定され、車両が移動しないようにする [m] | 0.5 | ### 停止速度パラメータ -| 名 | タイプ | 説明 | デフォルト値 | -| :------------------ | :------- | :-------------------------------------------------------------------------------------- | :----------- | -| `stopping_velocity` | `double` | v=0 点に達する前にターゲット速度をこの値に変更します [m/s] | 2.778 | -| `stopping_distance` | `double` | `stopping_velocity` の距離 [m]。0 は `stopping_velocity` が適用されないことを表します。 | 0.0 | - -### 抽出パラメータ - -| 名前 | 型 | 説明 | デフォルト値 | -| :-------------------- | :------- | :-------------------------------------------- | :----------- | -| `extract_ahead_dist` | `double` | Planningに使用される前方軌跡距離 [m] | 200.0 | -| `extract_behind_dist` | `double` | Planningに使用される後方軌跡距離 [m] | 5.0 | -| `delta_yaw_threshold` | `double` | 自車位置と軌跡位置間の許容差変位角 [ラジアン] | 1.0472 | - -### 再サンプルパラメータ - -| 名前 | タイプ | 説明 | デフォルト値 | -| :----------------------------- | :------- | :------------------------------------------------------- | :----------- | -| `max_trajectory_length` | `double` | 軌道の再サンプリングのための最大長 [m] | 200.0 | -| `min_trajectory_length` | `double` | 軌道の再サンプリングのための最小長 [m] | 30.0 | -| `resample_time` | `double` | 再サンプリングの全体の時間 [s] | 10.0 | -| `dense_dt` | `double` | 緻密なサンプリングのための再サンプリングの時間間隔 [s] | 0.1 | -| `dense_min_interval_distance` | `double` | 緻密なサンプリングのための最小ポイント間距離 [m] | 0.1 | -| `sparse_dt` | `double` | まばらなサンプリングのための再サンプリングの時間間隔 [s] | 0.5 | -| `sparse_min_interval_distance` | `double` | まばらなサンプリングのための最小ポイント間距離 [m] | 4.0 | - -### 'post resampling'用の再サンプリングパラメーター - -| 名称 | タイプ | 説明 | デフォルト値 | -| ----------------------------------- | -------- | ------------------------------------------ | ------------ | -| `post_max_trajectory_length` | `double` | 再サンプリングの最大軌道長 [m] | 300.0 | -| `post_min_trajectory_length` | `double` | 再サンプリングの最小軌道長 [m] | 30.0 | -| `post_resample_time` | `double` | 密サンプリングの合計再サンプリング時間 [s] | 10.0 | -| `post_dense_dt` | `double` | 密サンプリングの再サンプリング時間間隔 [s] | 0.1 | -| `post_dense_min_interval_distance` | `double` | 密サンプリングの最小ポイント間隔 [m] | 0.1 | -| `post_sparse_dt` | `double` | 疎サンプリングの再サンプリング時間間隔 [s] | 0.1 | -| `post_sparse_min_interval_distance` | `double` | 疎サンプリングの最小ポイント間隔 [m] | 1.0 | - -### ステアリング角変化率パラメータの制限 - -``` - -``` - -| 名称 | タイプ | 説明 | デフォルト値 | -| :------------------------------- | :------- | :---------------------------------------------------------------------------------------- | :----------- | -| `enable_steering_rate_limit` | `bool` | ステアリング速度フィルタのオン/オフを切り替えます。ランタイム時に動的に切り替えられます。 | true | -| `max_steering_angle_rate` | `double` | 最大ステアリング角度速度 [degree/s] | 40.0 | -| `resample_ds` | `double` | Trajectory `post resampling` ポイント間の距離 [m] | 0.1 | -| `curvature_threshold` | `double` | 曲率 > `curvature_threshold` の場合、`steeringRateLimit` がトリガされます [1/m] | 0.02 | -| `curvature_calculation_distance` | `double` | 曲率計算中のポイントの距離 [m] | 1.0 | +| 名前 | 型 | 説明 | デフォルト値 | +| :------------------ | :------- | :------------------------------------------------------------------------------------ | :------------ | +| `stopping_velocity` | `double` | 速度が0になる前に、ターゲット速度をこの値に変更する [m/s] | 2.778 | +| `stopping_distance` | `double` | `stopping_velocity` の距離 [m]。0 の場合、`stopping_velocity` は適用されません。 | 0.0 | + +### 抽出パラメーター + +| 名前 | タイプ | 説明 | 初期値 | +| :---------------------- | :--------- | :------------------------------------------------------------- | :-------- | +| `extract_ahead_dist` | `double` | Planningで使用する前方軌跡距離 [m] | 200.0 | +| `extract_behind_dist` | `double` | Planningで使用する後方軌跡距離 [m] | 5.0 | +| `delta_yaw_threshold` | `double` | 自車位置と軌跡位置の許可されるYaw角差 [radian] | 1.0472 | + +### 再サンプリングパラメータ + +| 名前 | 型 | 説明 | 既定値 | +| :----------------------------- | :------- | :----------------------------------------------------- | :------------ | +| `max_trajectory_length` | `double` | 再サンプリングの最大軌跡長 [m] | 200.0 | +| `min_trajectory_length` | `double` | 再サンプリングの最小軌跡長 [m] | 30.0 | +| `resample_time` | `double` | 再サンプリングの合計時間 [s] | 10.0 | +| `dense_dt` | `double` | 高密再サンプリングの再サンプリング間隔時間 [s] | 0.1 | +| `dense_min_interval_distance` | `double` | 高密再サンプリングの最小ポイント間隔距離 [m] | 0.1 | +| `sparse_dt` | `double` | 疎再サンプリングの再サンプリング間隔時間 [s] | 0.5 | +| `sparse_min_interval_distance` | `double` | 疎再サンプリングの最小ポイント間隔距離 [m] | 4.0 | + +### 'post resampling'のための再サンプリングパラメーター + +| 名称 | 種類 | 説明 | デフォルト値 | +| :------------------------------------ | :------- | :---------------------------------------------------- | :------------ | +| `post_max_trajectory_length` | `double` | 再サンプリング用の軌道の最大長 [m] | 300.0 | +| `post_min_trajectory_length` | `double` | 再サンプリング用の軌道の最小長 [m] | 30.0 | +| `post_resample_time` | `double` | 高密度サンプリング用の再サンプリング総時間 [s] | 10.0 | +| `post_dense_dt` | `double` | 高密度サンプリング用の再サンプリング時間間隔 [s] | 0.1 | +| `post_dense_min_interval_distance` | `double` | 高密度サンプリング用の最小ポイント間隔長 [m] | 0.1 | +| `post_sparse_dt` | `double` | 希薄サンプリング用の再サンプリング時間間隔 [s] | 0.1 | +| `post_sparse_min_interval_distance` | `double` | 希薄サンプリング用の最小ポイント間隔長 [m] | 1.0 | + +### ステアリング角速度制限パラメータ + +- `estimation.angle_rate_limiter.enabled` (bool): Steering angle rate limiterの有効化/無効化 +- `estimation.angle_rate_limiter.max_angle_rate` (double): 制限する最大のステアリング角速度 [rad/s] + +| 名称 | タイプ | 説明 | デフォルト値 | +| :------------------------------- | :------- | :------------------------------------------------------------------------------------ | :------------ | +| `enable_steering_rate_limit` | `bool` | ステアリングレートフィルターのオン/オフを切り替えます。ランタイム時に動的に切り替えることができます。 | true | +| `max_steering_angle_rate` | `double` | 最大操舵角速度 [度/秒] | 40.0 | +| `resample_ds` | `double` | 軌跡点間の距離 [m] | 0.1 | +| `curvature_threshold` | `double` | 曲率 > 曲率閾値の場合、ステアリングレートリミットがトリガされます [1/m] | 0.02 | +| `curvature_calculation_distance` | `double` | 曲率を計算する際のポイント間の距離 [m] | 1.0 | ### 最適化用の重み #### JerkFiltered -| 名称 | 型 | 説明 | デフォルト値 | -| :-------------- | :------- | :--------------------------------- | :----------- | -| `jerk_weight` | `double` | ジャークの「滑らかさ」コストの重み | 10.0 | -| `over_v_weight` | `double` | 「速度制限逸脱」コストの重み | 100000.0 | -| `over_a_weight` | `double` | 「加速度逸脱量」コストの重み | 5000.0 | -| `over_j_weight` | `double` | 「ジャーク逸脱量」コストの重み | 1000.0 | - -#### L2 - -**Planning** - -- トラジェクトリプランナーの最適化 -- 制約の追加によってトラジェクトリプランニングの安定化 -- クロスロードでの渋滞時の挙動の改善 -- Scalingレイヤーでの速度、加速度の逸脱量に関するチェックの追加 - -**Localization** +| 名前 | 型 | 説明 | デフォルト値 | +| :-------------- | :------- | :------------------------------------ | :------------ | +| `jerk_weight` | `double` | ジャークの「滑らかさ」コストの重み | 10.0 | +| `over_v_weight` | `double` | 速度制限超過のコストの重み | 100000.0 | +| `over_a_weight` | `double` | 加速度制限超過のコストの重み | 5000.0 | +| `over_j_weight` | `double` | ジャーク制限超過のコストの重み | 1000.0 | -- ランタイムのパフォーマンスと精度を向上させるための改善 -- ランタイムの更新によってIMUのバイアス推定の精度を高める -- 障害物検知の性能を向上させるため、点群データを活用した道路のセグメンテーションの改善 +#### レベル2 -**perception** +- **Definition**: ドライバは依然としてコントローラーの操作を行い、他の操作も大部分を担うが、自動化システムが特定の運転タスク(例:車線内走行)を支援する。 -- 深層学習モデルを更新する -- 物体検出の精度を向上させるために、データセットの拡張 -- 『post resampling』におけるデータの品質向上 +**Key Features**: +- 高度のセンシングシステム +- 制御機能(例:サステナビリティやハンドル操作) +- 車線維持アシスト +- 自動緊急ブレーキ -**Control** - -- 車両の挙動をよりスムーズにする、ステアリング制御の改善 -- 加速度、ヨー変化率に関する制御の改善 -- Autowareのコントローラーのドメイン固有言語であるCLARAtyで、コントローラーの再実装 - -**reality sensors** - -- LiDARのノイズ低減のために、データ処理パイプラインの最適化 -- カメラの露出制御の改善による、夜間や低照度条件における画像の品質向上 -- センサーキャリブレーションに関するパイプラインの改善 - -**visualization** - -- 可視化ツールのアップグレードによる、より正確で情報が豊富な可視化 -- データの取得と処理の効率を高めるキャッシュメカニズムの追加 - -**core utils** - -- シミュレーションとテスト用に、独自のデータ駆動型テストフレームワークの導入 -- より効率的な『post resampling』のための、ポイントクラウドライブラリの最適化 - -**self-driving** - -- 自車位置推定の向上による、全体的なパフォーマンスの向上 -- パラメータの最適化による、様々な運転シナリオにおけるRobust性を向上 -- Autowareのアーキテクチャのモジュール化と拡張性向上 - -| 名前 | 型 | 説明 | デフォルト値 | -| :------------------- | :------- | :----------------------------- | :----------- | -| `pseudo_jerk_weight` | `double` | 「スムーズさ」コストの重み | 100.0 | -| `over_v_weight` | `double` | 「速度制限超過」コストの重み | 100000.0 | -| `over_a_weight` | `double` | 「加速度制限超過」コストの重み | 1000.0 | +| 名称 | タイプ | 説明 | 初期値 | +| :------------------- | :------- | :------------------------------------------------------ | :------------ | +| `pseudo_jerk_weight` | `double` | 「滑らかさ」コストの重み | 100.0 | +| `over_v_weight` | `double` | 「速度制限超過」コストの重み | 100000.0 | +| `over_a_weight` | `double` | 「加速度制限超過」コストの重み | 1000.0 | #### Linf -**概要** - -Linfは、経路計画における障害物回避に用いられる Planning モジュールです。本モジュールは、自己位置と目標値に基づき、障害物を回避する経路を計画します。 - -**入力** - -- 自車位置 -- 目標位置 -- 周囲の障害物情報 - -**処理** - -1. **障害物マージ:** 周辺の障害物情報をマージして、障害物マップを作成します。 -2. **経路生成:** 障害物マップに基づき、障害物を回避する経路を生成します。 -3. **'post resampling':** 生成された経路をリサンプルして、滑らかな経路にします。 - -**出力** - -- 障害物回避経路 - -**制約事項** - -- **速度逸脱量:** 本モジュールは、速度逸脱量を考慮しません。 -- **加速度逸脱量:** 本モジュールは、加速度逸脱量を考慮しません。 -- **予測:** 本モジュールは、障害物の予測移動を考慮しません。 - -**依存関係** - -- **障害物検出モジュール:** 障害物マップの作成に使用されます。 -- **経路生成モジュール:** 障害物回避経路の生成に使用されます。 - -**Autowareにおける用途** - -Autowareでは、Linfモジュールは、障害物回避Planningにおける重要なコンポーネントです。本モジュールは、障害物マップから安全で効率的な経路を計算し、自動運転車両に安全なナビゲーションを提供します。 - -| 名前 | タイプ | 説明 | デフォルト値 | -| -------------------- | -------- | -------------------------------- | ------------ | -| `pseudo_jerk_weight` | `double` | 「スムーズ性」コストの重み | 100.0 | -| `over_v_weight` | `double` | 「速度制限逸脱量」コストの重み | 100000.0 | -| `over_a_weight` | `double` | 「加速度制限逸脱量」コストの重み | 1000.0 | +| 名前 | タイプ | 説明 | デフォルト値 | +|---|---|---|---| +| `pseudo_jerk_weight` | `double` | 「滑らかさ」コストの重み | 100.0 | +| `over_v_weight` | `double` | 「速度制限超過」コストの重み | 100000.0 | +| `over_a_weight` | `double` | 「加速度制限超過」コストの重み | 1000.0 | ### その他 -| 名称 | 型 | 説明 | デフォルト値 | -| :---------------------------- | :------- | :----------------------------------------------------------------------- | :----------- | -| `over_stop_velocity_warn_thr` | `double` | 停止点における最適化速度が入力速度を超えていると判断するための閾値 [m/s] | 1.389 | +| 名前 | 型 | 説明 | デフォルト値 | +| :---------------------------- | :------- | :---------------------------------------------------------------------------------------------------| :------------ | +| `over_stop_velocity_warn_thr` | `double` | 停止点での最適化速度が入力速度を超過していると判断するためのしきい値 [m/s] | 1.389 | -## 仮定 / 既知の限界 +## 想定事項 / 制限事項 -- 参照軌道上での速度制限または停止点が適切に設定されていると仮定する -- 指定された減速およびジャークの制約により参照経路に設定された速度制限が達成できない場合は、速度、加速度、ジャークの逸脱を可能な限り抑えつつ減速する +- 速度制限または停止点が基準軌道の適切な位置に設定されていることを想定する +- 基準経路内で設定された速度制限が、減速度とジャークの指定された制約により達成できない場合は、速度、加速度、ジャークの逸脱を抑えられる範囲で、抑制を行い減速する - 逸脱の重要度は設定ファイルで設定する -## (オプション) エラー検出および処理 +## (省略可)エラー検出および処理 -## (オプション) パフォーマンスの特性評価 +## (省略可)性能特性 -## (オプション) 参考文献/外部リンク +## (省略可)参考文献 / 外部リンク [1] B. Stellato, et al., "OSQP: an operator splitting solver for quadratic programs", Mathematical Programming Computation, 2020, [10.1007/s12532-020-00179-2](https://link.springer.com/article/10.1007/s12532-020-00179-2). [2] Y. Zhang, et al., "Toward a More Complete, Flexible, and Safer Speed Planning for Autonomous Driving via Convex Optimization", Sensors, vol. 18, no. 7, p. 2185, 2018, [10.3390/s18072185](https://doi.org/10.3390/s18072185) -## (オプション) 将来の拡張 / 未実装の部分 +## (省略可)将来の拡張 / 未実装部分 + diff --git a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md index b345fc8c1f6a8..a83b458002b0a 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/README.md @@ -1,40 +1,41 @@ -# 車線変更設計による回避 +# 車線変更による回避設計 -これは車線変更操作で障害物を避けるサブモジュールです。 +これは車線変更動作によって障害物を回避するためのサブモジュールです。 ## 目的/役割 -このモジュールは障害物回避機能の1つとして設計されており、以下の条件が満たされる場合に車線変更パスを生成します。 +このモジュールは障害物回避機能の1つとして設計されており、次の条件が満たされた場合に車線変更パスを生成します。 -- 車線変更可能なレーンレットが存在する。 -- 自車走行車線上に回避対象物が存在する。 +- 車線変更可能なレーンの存在 +- 自車走行レーンの回避対象物の存在 ![avoidance_by_lane_change](./images/avoidance_by_lane_change.svg) ## 内部動作/アルゴリズム -基本的に、このモジュールは既存の[静的障害物回避モジュール](../autoware_behavior_path_static_obstacle_avoidance_module/README.md)の回避対象フィルタリングロジックと[通常車線変更モジュール](../autoware_behavior_path_lane_change_module/README.md)のパス生成ロジックを再利用して実装されています。一方、モジュールが有効になる条件は通常の回避モジュールとは異なります。 +基本的に、このモジュールは既存の[静的障害物回避モジュール](../autoware_behavior_path_static_obstacle_avoidance_module/README.md)の回避対象フィルタリングロジックと[通常の車線変更モジュール](../autoware_behavior_path_lane_change_module/README.md)のパス生成ロジックを再利用して実装されています。一方、モジュールがアクティブになる条件は通常の回避モジュールの条件とは異なります。 -回避対象のフィルタリング処理後、以下の条件が満たされていることを確認します。 +回避対象のフィルタリング処理後に、次の条件が満たされているかを確認してください。 -### 回避対象オブジェクトの数 +### 回避対象のオブジェクト数 -このモジュールは、**自車走行車線**上の回避対象オブジェクトの数が`execute_object_num`より大きい場合に起動します。自車走行車線に回避対象がなかったり、その数がパラメータより少ない場合は、通常の回避挙動(通常の回避モジュールが登録されている場合)による障害物回避を行います。 +このモジュールは、**自車走行レーン**の回避対象オブジェクトの数が`execute_object_num`を超えたときに起動されます。自車走行レーンに回避対象物が存在しない場合、またはその数がパラメータよりも少ない場合、障害物は通常の回避動作(通常の回避モジュールが登録されている場合)によって回避されます。 ![trigger_1](./images/avoidance_by_lc_trigger_1.svg) -### 車線変更終了点条件 +### 車線変更エンドポイント条件 -シフトライン終了点を指定する通常の回避モジュールとは異なり、このモジュールは車線変更パスを生成するときに終了点を指定しません。一方、`execute_only_when_lane_change_finish_before_object`を`true`に設定すると、車線変更を回避対象オブジェクトよりも前に完了できる場合にのみ、このモジュールが有効になります。 +シフトラインのエンドポイントを指定する通常の回避モジュールとは異なり、このモジュールは車線変更パスを生成するときにそのエンドポイントを指定しません。一方で、`execute_only_when_lane_change_finish_before_object`を`true`に設定すると、このモジュールは車線変更が回避対象オブジェクトの前に完了する場合にのみアクティブになります。 -パラメータを`false`に設定すると車線変更による回避の場面が増えますが、車線変更中に障害物の脇を通過するため、十分な横方向マージンが確保できない場合があります。 +パラメータを`false`に設定すると車線変更による回避のシーンが増加しますが、車線変更中に車両が障害物の横を通り過ぎるため、十分な側方マージンが確保されない場合があると考えられます。 ![trigger_2](./images/avoidance_by_lc_trigger_2.svg) ## パラメータ -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------------------- | ---- | ------ | -------------------------------------------------------------------------------------------------------------------------- | ------------ | -| execute_object_num | [-] | int | 自車進行車線上の回避対象の数がこの値より多い場合、本モジュールが起動します。 | 1 | -| execute_object_longitudinal_margin | [m] | double | [おそらく未使用] 自車と回避対象の距離がこの値よりも長い場合のみ、本モジュールが起動します。 | 0.0 | -| execute_only_when_lane_change_finish_before_object | [-] | bool | このフラグが`true`に設定されている場合、本モジュールは車線変更の終了点が回避対象の **後ろではない** 場合にのみ起動します。 | true | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------------------- | ---- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | +| execute_object_num | [-] | int | 自車の走行車線での回避対象オブジェクトの数がこの値より多い場合、このモジュールが起動されます。 | 1 | +| execute_object_longitudinal_margin | [m] | double | [おそらく使用されていません] 自車と回避対象オブジェクト間の距離がこの値よりも長い場合にのみ、このモジュールが起動されます。 | 0.0 | +| execute_only_when_lane_change_finish_before_object | [-] | bool | このフラグが`true`に設定されている場合、このモジュールは、レーン変更の終了点が回避対象オブジェクトの**後ろ**に**ない**場合にのみ起動されます。 | true | + diff --git a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md index 33a74b6390e4c..e2a107eb52bed 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md @@ -1,135 +1,117 @@ -## 回避モジュール(動的物体用) +# 可動物体の回避モジュール -本モジュールは開発中です。 +このモジュールは開発中です。 ## 目的 / 役割 -本モジュールは、自身経路の周辺にある車両、歩行者、および障害物を回避する機能を [autoware_path_optimizer](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_path_optimizer/) と併用して提供します。 -各モジュールは以下のような役割を果たします。 -動的回避モジュールは回避対象の目標位置と速度に基づき、走行可能領域を切り取ります。 -障害物回避モジュールは送信された走行可能領域の範囲に収まるように、走行経路を修正します。 +このモジュールは、Autowareの[autoware_path_optimizer](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_path_optimizer/)と連携して、自車の経路周辺の車両、歩行者、障害物を回避する機能を提供します。 +それぞれのモジュールは次の役割を果たします。 +動的回避モジュールは、回避対象物の位置と速度に応じて走行可能領域を切り取ります。 +障害物回避モジュールは、受信した走行可能領域に収まるように従うべき経路を変更します。 -[静的回避モジュール](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_behavior_path_static_obstacle_avoidance_module/) によって、静的障害物回避機能も提供されますが、これらのモジュールは役割が異なります。 -静的障害物回避モジュールは、自身の車線の外側を介して回避を実行しますが、移動中の物体を回避することはできません。 -一方、このモジュールは移動中の物体を回避できます。 -そのため、本モジュールの名称には「動的」という言葉が使用されています。 -以下の表に、各状況に対応する回避モジュールを記載します。 +静的障害物の回避機能は[Static Avoidance module](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_behavior_path_static_obstacle_avoidance_module/)でも提供されますが、これらのモジュールには役割の違いがあります。 +スタティック障害回避モジュールは独自の車線を外部から回避しますが、可動物体は回避できません。 +一方、このモジュールは可動物体を回避できます。 +このため、モジュール名に「動的」という単語が使用されています。 +次の表は、各状況に対処できる回避モジュールを示しています。 -| | 車線内での回避 | 車線外の外側からの回避 | -| :----------------------- | :------------------------------------------------------------------------: | :---------------------: | -| 未稼働オブジェクトの回避 | Avoidance Module
Dynamic Avoidance Module + Obstacle Avoidance Module | Avoidance Module | -| 稼働オブジェクトの回避 | Dynamic Avoidance Module + Obstacle Avoidance Module | モジュールなし (開発中) | +| | 車線内回避 | 車線外通過による回避 | +| :----------------------- | :-------------------------------------------------------------------------: | :---------------------------------------: | +| 静止物回避 | Avoidance Module
Dynamic Avoidance Module + Obstacle Avoidance Module | Avoidance Module | +| 動的物回避 | Dynamic Avoidance Module + Obstacle Avoidance Module | No Module (Under Development) | ## アルゴリズムのポリシー ここでは、内部アルゴリズムのポリシーについて説明します。 -内部アルゴリズムは 2 つの部分に分けることができます。1 つ目は障害物を回避するかどうかを判断し、2 つ目は対応する障害物に対する走行可能領域を切り取ります。 +内部アルゴリズムは2つの部分に分けられます。最初の部分は障害物を回避するかを決定し、2番目の部分は回避する障害物に対する走行可能領域を切り取ります。 -### 回避する障害物の選択 +### 回避する障害物を選択 -オブジェクトを回避するかを判断するためには、予測されたパスと各オブジェクトの状態(ポーズとツイスト)の両方が使用されます。 -このモジュールに回避してほしいオブジェクトの種類も必要です。 -この情報を使用して、モジュールは自車の進行を妨げ、回避可能なオブジェクトを回避することを決定します。 +オブジェクトを回避するかどうかを決定するには、予測パスと各オブジェクトの状態(ポーズとツイスト)の両方が使用されます。 +ユーザーがこのモジュールに回避してほしいタイプのオブジェクトも必要です。 +この情報を使用して、モジュールは「自車位置の通過を妨げる」かつ「回避可能な」オブジェクトを_回避_するように決定します。 -自車の進行を妨げるという定義は、数秒以内に衝突するオブジェクトとして実装されています。 -もう 1 つ、「回避可能」は、乗客や他の車両にリスクを与えることなく回避できるかどうかを示します。 -この目的のために、モジュールは障害物が横加速度と横ジャークの制約を満たして回避できるかどうかを判断します。 -例えば、横方向に近すぎるか速すぎるオブジェクトは回避しないことを決定します。 +「自車位置の通過を妨げる」の定義は、数秒以内に衝突するオブジェクトとして実装されています。 +もう一方の「回避可能な」は、乗客や他の車両を危険にさらすことなく回避できるかどうかを示します。 +このため、モジュールは横加速度と横ジャークの制約を満たして障害物を回避できるかどうかを判断します。 +たとえば、モジュールは横方向に近すぎるか速度が速すぎるオブジェクトを回避しないことを決定します。 -### 選択された車両に対する走行可能領域の切り取り +### 選択した車両に対して走行可能領域を切り取り -回避するために選択された障害物に対して、モジュールは走行可能領域を切り取ります。 -切り取りポリゴンの形状を決定するための入力として、障害物のポーズが主に使用されます。ただし、予測されたパスではなく、それらが自車のパスと並行に移動すると想定されます。 -この設計は、オブジェクトの予測されたパスは(少なくとも現在は)パス変更を使用するほど正確ではないというところから来ています。 -さらに、出力の走行可能領域の形状は、計算を平面ではなくスカラーで行うために、自車のパスに沿った長方形の切り取りとして設計されています。 +回避するべき選択された障害物に対して、モジュールは走行可能領域を切り取ります。 +カットオフ多角形の形状を決定する入力として、主に予測パスではなく、障害物のポーズが使用され、障害物が自車位置のパスに平行に移動すると仮定します。 +この設計は、オブジェクトの予測パスがパス修正を使用するには十分に正確ではない(少なくとも現時点では)という点に起因しています。 +さらに、出力の走行可能領域の形状は、平面ではなく自車位置のパスに沿った長方形の切り抜きとして設計されており、計算を平面でなくスカラーで行います。 #### 横方向の寸法の決定 -ポリゴンの横方向の寸法は次のように計算されます。 -走行可能領域から抽出するポリゴンの幅は、障害物の幅と `drivable_area_generation.lat_offset_from_obstacle` です。 -`drivable_area_generation.max_lat_offset_to_avoid` によって横方向のシフトの長さを制限できます。 +多角形の横方向の寸法は次のように計算されます。 +走行可能領域から抽出する多角形の幅は障害物の幅と`drivable_area_generation.lat_offset_from_obstacle`です。 +横方向のシフト長は`drivable_area_generation.max_lat_offset_to_avoid`で制限できます。 ![drivable_area_extraction_width](./image/drivable_area_extraction_width.drawio.svg) #### 縦方向の寸法の決定 -次に、走行可能領域から同じ方向と反対方向の障害物を取り出すのは、TTC(衝突時間)を考慮して次のように機能します。 +次に、走行可能領域から同じ方向および逆方向の障害物を抽出することは、TTC(衝突時間)を考慮して次のように機能します。 -同じ方向の障害物に関して、TTC が負の障害物は無視されます(例: 障害物が自車の前にあり、障害物の速度が自車の速度よりも大きい)。 +同じ方向の障害物に関して、TTCが負の障害物は無視されます(例:障害物が自車位置の前にあり、障害物の速度が自車位置の速度より大きい)。 -**同じ方向の障害物**(実装によってパラメータ名が異なる場合があります) +同じ方向の障害物(パラメータ名は実装によって異なる場合があります) ![same_directional_object](./image/same_directional_object.svg) -**反対方向の障害物**(実装によってパラメータ名が異なる場合があります) +逆方向の障害物(パラメータ名は実装によって異なる場合があります) ![opposite_directional_object](./image/opposite_directional_object.svg) -### 選択された歩行者に対する走行可能領域の切り取り +### 選択した歩行者に対して走行可能領域を切り取り -次に、回避すべき歩行者に走行可能領域を生成するロジックについて説明します。 -このタイプのオブジェクトは、自車の安全を確保しつつ、自車に対して優先権を持つものとみなされます。 -言い換えれば、モジュールは次図に示すように、特定の時間の予測されたパスに基づいて特定の確信度で、特定の余裕を持った障害物に走行可能領域を割り当てます。 +次に、回避するべき歩行者に対して走行可能領域を生成するロジックについて説明します。 +このタイプのオブジェクトは、自車位置の車両よりも優先権を持ち、自車位置の車両の最低限の安全性を確保していると考えられます。 +言い換えれば、モジュールは障害物に次の図のように特定の時間に特定の信頼度で予測されたパスに基づいて特定のマージンのある走行可能領域を割り当てます。
-
制限領域は歩行者の予測されたパスから生成されます
+
各歩行者の予測パスから制限領域が生成されます
-モジュールは、オブジェクト用のポリゴンとは別に、自車の安全性を確保するための別のポリゴンも生成します。つまり、急な操舵またはパスからの大幅な変化を回避します。 -これは、車両に対する回避動作と似ており、回避すべきオブジェクトとの安全距離の確保よりも優先されます。 -その結果、下の図に示すように、オブジェクトの周りのポリゴンが自車の安全なポリゴンによって縮小されたものが自車の走行可能領域から引き算されます。 +オブジェクトの多角形とは別に、モジュールは自車位置の安全性を確保するため、つまり急激な操舵やパスからの大幅な変更を避けるために別の多角形も生成します。 +これは車両に対する回避と似ており、回避するオブジェクトからの安全距離を確保することよりも優先されます。 +その結果、下の図に示すように、自車位置の安全な多角形によって減少したオブジェクト周辺の多角形が自車位置の走行可能領域から差し引かれます。
-## 図 - -
自車の最小要求を対象物軌跡との余裕で優先する
- ## 例
-
バスの出発に対する回避
-
- -
- -
曲線上の回避
+
自動運転車両側の最小限の条件を対象物とのマージンに対して優先
-
- -
対向車に対する回避
-
+## 将来の作業 -
- -
複数の車に対する回避
-
- -## 今後の課題 - -現在、経路シフト長は `drivable_area_generation.max_lat_offset_to_avoid` によって0.5メートル以内に制限されています。 -これは、他のモジュールやPlanningコンポーネントの構造と連携する機能がないことが原因です。 -この問題により、このモジュールは回避幅が小さい状況でのみ処理できます。 +現在、回避経路の移動距離は `drivable_area_generation.max_lat_offset_to_avoid` によって 0.5 メートル以下に制限されています。 +これは、他のモジュールで機能するためには十分な機能がなく、Planning コンポーネントの構造が原因です。 +この問題により、このモジュールは回避幅が小さい場合にのみ対応できます。 この問題は、このモジュールにとって最も重要です。 -また、このモジュールが必要に応じて走行可能領域を拡張する能力も必要です。 +さらに、必要に応じて走行可能領域を拡張する機能も必要です。 ## パラメーター 開発中 -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :---------------------------------------------------------------------- | :---- | :----- | :----------------------------------------- | :----------- | -| `target_object.car` | [-] | bool | 車の回避フラグ | true | -| `target_object.truck` | [-] | bool | トラックの回避フラグ | true | -| ... | [-] | bool | ... | ... | -| `target_object.min_obstacle_vel` | [m/s] | double | 回避する際の最小障害物速度 | 1.0 | -| `drivable_area_generation.lat_offset_from_obstacle` | [m] | double | 障害物からの回避用横方向オフセット | 0.8 | -| `drivable_area_generation.max_lat_offset_to_avoid` | [m] | double | 回避する際の最大横方向オフセット | 0.5 | -| `drivable_area_generation.overtaking_object.max_time_to_collision` | [s] | double | タイムトゥーコリジョンを計算する際の最大値 | 3.0 | -| `drivable_area_generation.overtaking_object.start_duration_to_avoid` | [s] | double | 障害物を通過する前に回避を考慮する期間 | 4.0 | -| `drivable_area_generation.overtaking_object.end_duration_to_avoid` | [s] | double | 障害物を通過した後に回避を考慮する期間 | 5.0 | -| `drivable_area_generation.overtaking_object.duration_to_hold_avoidance` | [s] | double | 障害物を通過した後に回避を保持する期間 | 3.0 | -| `drivable_area_generation.oncoming_object.max_time_to_collision` | [s] | double | タイムトゥーコリジョンを計算する際の最大値 | 3.0 | -| `drivable_area_generation.oncoming_object.start_duration_to_avoid` | [s] | double | 障害物を通過する前に回避を考慮する期間 | 9.0 | -| `drivable_area_generation.oncoming_object.end_duration_to_avoid` | [s] | double | 障害物を通過した後に回避を考慮する期間 | 0.0 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :--------------------------------------------------------------------- | :---- | :----- | :--------------------------------------------------------- | :------------ | +| target_object.car | [-] | bool | 避けるべき対象物に車が含まれるかどうかのフラグ | true | +| target_object.truck | [-] | bool | 避けるべき対象物にトラックが含まれるかどうかのフラグ | true | +| ... | [-] | bool | ... | ... | +| target_object.min_obstacle_vel | [m/s] | double | 回避すべき障害物の最小速度 | 1.0 | +| drivable_area_generation.lat_offset_from_obstacle | [m] | double | 障害物から回避するための横方向オフセット | 0.8 | +| drivable_area_generation.max_lat_offset_to_avoid | [m] | double | 避けるための最大横方向オフセット | 0.5 | +| drivable_area_generation.overtaking_object.max_time_to_collision | [s] | double | 衝突時間計算時の最大値 | 3.0 | +| drivable_area_generation.overtaking_object.start_duration_to_avoid | [s] | double | 障害物を追い越す前に回避を考慮する時間 | 4.0 | +| drivable_area_generation.overtaking_object.end_duration_to_avoid | [s] | double | 障害物を追い抜いた後に回避を考慮する時間 | 5.0 | +| drivable_area_generation.overtaking_object.duration_to_hold_avoidance | [s] | double | 障害物を追い抜いた後に回避を保持する時間 | 3.0 | +| drivable_area_generation.oncoming_object.max_time_to_collision | [s] | double | 衝突時間計算時の最大値 | 3.0 | +| drivable_area_generation.oncoming_object.start_duration_to_avoid | [s] | double | 障害物に接近する前に回避を考慮する時間 | 9.0 | +| drivable_area_generation.oncoming_object.end_duration_to_avoid | [s] | double | 障害物を回避した後に回避を考慮する時間 | 0.0 | + diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md index f2ca30e874e2b..2a5327b04d788 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md @@ -1,16 +1,17 @@ -# ゴールプランナー設計 +# 目標プランナーの設計 -## 目的 / 役割 +## 目的/役割 -ゴール周辺のパスを計画する。 +目標地点周辺の経路を計画する。 -- 指定されたゴールに到着する。 -- 障害物を回避するため、または車線の脇に停車するため、ゴールを変更する。 +- 指定された目標地点に到着する。 +- 障害物を回避または車線を避けるために目標地点を変更する。 ## 設計 -ゴール変更が許可されていない場合は、指定された固定ゴールに駐車する(下の図の `fixed_goal_planner`)。 -許可されている場合は、指定されたポリシー(例:車線の左右に駐車)に従って駐車する(下の図の `rough_goal_planner`)。現在、ラフゴールプランナーはプルオーバー機能のみをサポートしているが、将来的にはさまざまな駐車ポリシーに対応できることが望ましい。 +目標地点の変更が許可されない場合は、指定された固定目標地点に停車する。(下図の`fixed_goal_planner`) +許可されている場合は、指定されたポリシー(例:車線の左側/右側に寄る)に従って駐車する。(下図の`rough_goal_planner`)現在、ラフ目標プランナーは寄る機能のみをサポートしていますが、今後さまざまな駐車ポリシーに対応できるようにすることが望ましいです。 + ```plantuml @startuml @@ -84,16 +85,16 @@ GoalCandidates --o GoalSearcherBase ### fixed_goal_planner -これは、指定された目標にスムーズな経路を計画する非常にシンプルな関数です。この関数は承認を必要とせず、常に他のモジュールと一緒に実行されます。 -_注意: このプランナーは、「目標探索」、「衝突チェック」、「安全チェック」など、以下で説明するいくつかの機能は実行しません。_ +이것은 지정된 목표 지점까지 매끄러운 경로를 계획하는 매우 간단한 함수입니다. 이 함수는 승인이 필요하지 않으며 항상 다른 모듈과 함께 실행됩니다. +_참고: 이 플래너는 "목표 검색", "충돌 확인", "안전 확인" 등 아래에 설명된 여러 기능을 수행하지 않습니다._ -両方の条件が満たされると実行されます。 +두 조건이 모두 충족될 때 실행됩니다. -- ルートは `allow_goal_modification=false` で設定されています。これはデフォルトです。 -- 目標は通常の車線に設定されています。つまり、`road_shoulder` ではありません。 -- 自車は目標と同じ車線シーケンスに存在します。 +- 경로가 `allow_goal_modification=false`로 설정됩니다. 이것이 기본값입니다. +- 목표 지점이 정상 차선에 설정됩니다. 즉, `road_shoulder`가 아닙니다. +- 자차가 목표 지점과 동일한 차선 시퀀스에 존재합니다. -目標経路に目標が含まれている場合、経路のポイントを変更して、経路と目標がスムーズにつながるようにします。この処理により、経路の形状が目標から `refine_goal_search_radius_range` の距離だけ変化します。このロジックは、後続のモジュールで実行される補間アルゴリズム(現時点ではスプライン補間を使用)に依存するため、将来的にはアップデートする必要があります。 +대상 경로에 목표 지점이 포함된 경우 경로와 목표 지점이 매끄럽게 연결되도록 경로의 지점을 수정합니다. 이 프로세스는 목표 지점에서 `refine_goal_search_radius_range`의 거리만큼 경로의 모양을 변경합니다. 이 로직은 이후에 실행되는 모듈의 보간 알고리즘에 따라 다르며(현재는 스플라인 보간 사용) 향후에 업데이트되어야 한다는 점에 유의하세요. ![path_goal_refinement](./images/path_goal_refinement.drawio.svg) @@ -101,268 +102,262 @@ _注意: このプランナーは、「目標探索」、「衝突チェック ### rough_goal_planner -#### 路側端に寄せる +#### 도로 차선에 대기 -- 目標と自車間の距離が `pull_over_minimum_request_length` よりも短い。 -- ルートは `allow_goal_modification=true` で設定されています。 - - [SetRoute](https://github.com/autowarefoundation/autoware_adapi_msgs/blob/main/autoware_adapi_v1_msgs/routing/srv/SetRoute.srv#L2) API サービスでこのオプションを設定できます。 - - RVizで `r` にキーバインドされた `2D Rough Goal Pose` をサポートしていますが、将来的にはRVizからさまざまなルートAPIを操作するためのツールパネルを用意する予定です。 -- 現在のパスにおける終点は、目標と同じ車線シーケンス内にあります。目標が路側肩にある場合は、隣接する車線シーケンス内にあります。 +- 목표 지점과 자차의 거리가 `pull_over_minimum_request_length`보다 짧습니다. +- 경로가 `allow_goal_modification=true`로 설정됩니다. + - [SetRoute](https://github.com/autowarefoundation/autoware_adapi_msgs/blob/main/autoware_adapi_v1_msgs/routing/srv/SetRoute.srv#L2) API 서비스를 사용하여 이 옵션을 설정할 수 있습니다. + - RViz에서 키를 바인드한 `2D Rough Goal Pose` `r`을 지원하지만 향후에 RViz에서 다양한 경로 API를 조작하는 도구 패널이 있을 것입니다. +- 현재 경로의 종단이 목표 지점과 동일한 차선 시퀀스에 있습니다. 목표 지점이 도로 어깨에 있는 경우 인접한 도로 차선 시퀀스에 있습니다. -#### 路側肩に寄せる +#### 어깨 차선에 대기 -- 目標と自車間の距離が `pull_over_minimum_request_length` よりも短い。 -- ゴールは `road_shoulder` に設定されています。 +- 목표 지점과 자차의 거리가 `pull_over_minimum_request_length`보다 짧습니다. +- 목표 지점이 `road_shoulder`에 설정됩니다. -## 終了条件 +## 종료 조건 + +- 차량에서 목표 지점까지의 거리가 임계값(기본값:`1m`)보다 낮습니다. +- 자차가 정지합니다. + - 속도가 임계값(기본값:`0.01m/s`)보다 낮습니다. -- 自車から目標までの距離がしきい値(デフォルト: < `1m`)より低い。 -- 自車が停止している。 - - 速度がしきい値(デフォルト: < `0.01m/s`)より低い。 +## goal_planner에 대한 일반적 매개변수 -## goal_planner の一般的なパラメータ +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------ | :---- | :----- | :----------------------------------------------------- | :------------ | +| th_arrived_distance | [m] | double | パス終了の到着距離閾値 | 1.0 | +| th_stopped_velocity | [m/s] | double | パス終了の到着速度閾値 | 0.01 | +| th_stopped_time | [s] | double | パス終了の到着時間閾値 | 2.0 | +| center_line_path_interval | [m] | double | 参照中心線パス点の間隔 | 1.0 | -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------ | :---- | :----- | :----------------------------------- | :----------- | -| th_arrived_distance | [m] | 数値 | パス終了に到着するための距離閾値 | 1.0 | -| th_stopped_velocity | [m/s] | 数値 | パス終了に到着するための速度閾値 | 0.01 | -| th_stopped_time | [s] | 数値 | パス終了に到着するための時間閾値 | 2.0 | -| center_line_path_interval | [m] | 数値 | 参照センターラインパスのポイント間隔 | 1.0 | +## **ゴール検索** -## **Goal Search** +元のゴールの近くに障害物が存在する場合でも駐車を実現するために、元のゴールの周囲の一定範囲内で衝突のない領域が検索されます。見つかったゴールは `/planning/scenario_planning/modified_goal` として公開されます。 -障害物が当初の目標付近にある場合でもハザードランプ消灯を実現するために、当初の目標の周囲の特定範囲内で衝突しない領域を検索します。見つかった目標は `/planning/scenario_planning/modified_goal` として公開されます。 +[ゴール検索ビデオ](https://user-images.githubusercontent.com/39142679/188359594-c6724e3e-1cb7-4051-9a18-8d2c67d4dee9.mp4) -[Goal Search Video](https://user-images.githubusercontent.com/39142679/188359594-c6724e3e-1cb7-4051-9a18-8d2c67d4dee9.mp4) -1. 当初目標が設定され、レファインド目標のポーズが車線の中心線に対して垂直方向に移動し、『レーン境界から『 `margin_from_boundary` 』離れた距離を保つことで取得されます。 +1. 元のゴールが設定され、車線中央線に垂直方向に移動し、車線のエッジから `margin_from_boundary` を維持することで、洗練されたゴール姿勢が得られます。 ![refined_goal](./images/goal_planner-refined_goal.drawio.svg) -2. 『レファインド目標』をベース目標として使用して、精度を高めた目標に基づいて、縦方向に『 `-forward_goal_search_length` 』から『 `backward_goal_search_length` 』、横方向に『 `longitudinal_margin` 』から『 `longitudinal_margin` + `max_lateral_offset` 』の範囲で候補目標を検索します。 +2. `refined_goal` をベースゴールとして使用し、精製されたゴールに基づいて、縦方向に `-forward_goal_search_length` から `backward_goal_search_length` の範囲と、横方向に `longitudinal_margin` から `longitudinal_margin+max_lateral_offset` の範囲で候補ゴールを検索します。 ![goal_candidates](./images/goal_planner-goal_candidates.drawio.svg) -3. 各候補目標に優先順位が付けられ、各目標に対して各プランナーでパスが生成されます。候補目標の優先順位は、ベース目標からの距離によって決まります。車両は可能な限り最も高い目標に向けて駐車しようします。距離は選択したポリシーによって定義されます。 『 `minimum_longitudinal_distance` 』の場合は、縦方向の距離が小さい方が小さい横方向の距離よりも優先されるようにソートします。 『 `minimum_weighted_distance` 』の場合は、加重横方向距離と縦方向距離の合計でソートします。これは、距離が `longitudinal_distance + lateral_cost*lateral_distance` によって計算されることを意味します。 +3. 各候補ゴールには優先順位が付けられ、各ゴールの各Plannerに対して経路が生成されます。候補ゴールの優先順位は、ベースゴールからの距離によって決まります。自動運転車は、可能な限り最も高いゴールのために駐車を試みます。距離は選択されたポリシーによって決定されます。`minimum_longitudinal_distance` の場合、縦方向の距離がより小さいものが横方向の距離がより小さいものより優先されるようにソートします。`minimum_weighted_distance` の場合、加重横方向距離と縦方向距離の合計でソートします。つまり、距離は `longitudinal_distance + lateral_cost*lateral_distance`で計算されます ![goal_distance](./images/goal_planner-goal_distance.drawio.svg) - 次の図は `minimum_weighted_distance` の例です。白い数字は目標候補の優先順位を表し、数字が小さいほど優先順位が高くなります。目標 0 はベース目標を表します。 + 次の図は `minimum_weighted_distance` の例です。白色の数値はゴール候補の優先順位を示し、数値が小さいほど優先順位が高くなります。0 のゴールはベースゴールを示します。 ![goal_priority_rviz_with_goal](./images/goal_priority_with_goal.png) ![goal_priority_rviz](./images/goal_priority_rviz.png) -4. 各目標候補のフットプリントがオブジェクトのフットプリントから `object_recognition_collision_check_margin` 以内に収まると安全でないと判断されます。これらの目標は選択されません。 `use_occupancy_grid_for_goal_search` が有効になっている場合、グリッド上の衝突検出も `occupancy_grid_collision_check_margin` で実行されます。 -画像内の赤色の目標候補は安全でないことを示しています。 +4. 各ゴール候補内のフットプリントが、オブジェクトのフットプリントから `object_recognition_collision_check_margin` 以内にある場合、安全でないことが判断されます。これらのゴールは選択されません。`use_occupancy_grid_for_goal_search` が有効になっている場合、`occupancy_grid_collision_check_margin` を使用したグリッド上の衝突検出も実行されます。 + +画像内の赤色のゴール候補は、安全ではないゴール候補を示します。 ![is_safe](./images/goal_planner-is_safe.drawio.svg) -目標候補では、縦方向に `longitudinal_margin` を障害物から衝突マージンとは離しておくことが可能です。これは、駐車時の自然な間隔と効率的な出発を確保することを目的としています。 +ゴール候補から、障害物に対する衝突マージンとは別に、縦方向に `longitudinal_margin` を維持できます。これは、駐車や効率的な出発を可能にするための適切な間隔を確保することを目的としています。 ![longitudinal_margin](./images/goal_planner-longitudinal_margin.drawio.svg) -また、 `prioritize_goals_before_objects` が有効になっている場合は、各目標に到着するために対象範囲内で回避する必要のあるオブジェクトの数をカウントし、数が最も少ないものに優先順位を付けます。 +また、`prioritize_goals_before_objects` が有効になっている場合、各ゴールに到着するために、対象範囲内で回避する必要があるオブジェクトの数がカウントされ、最小のオブジェクトを持つゴールに優先順位が与えられます。 -画像は、前述の距離に関係なく、回避する必要があるオブジェクトの数を各範囲でカウントしたものであり、数が最も少ないものに優先順位が付けられています。 +図は、前述の距離に関係なく、オブジェクト数が少ないゴールに優先順位が与えられる各範囲で回避する必要のあるオブジェクトの数を表しています。 ![object_to_avoid](./images/goal_planner-object_to_avoid.drawio.svg) -グレーの数字は回避対象のオブジェクトを表しており、この場合、前の目標の優先順位が高いことがわかります。 +灰色の数値は、回避するオブジェクトを表し、この場合は前のゴールの方が優先順位が高いことがわかります。 ![goal_priority_object_to_avoid_rviz.png](./images/goal_priority_object_to_avoid_rviz.png) -### Goal Search のパラメータ +### ゴール検索のパラメータ -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------ | :--- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------- | -| goal_priority | [-] | string | longitudinal distancesを優先し小さい距離を優先する `minimum_longitudinal_distance`、weighted lateral distanceとlongitudinal distanceの総和を優先する `minimum_weighted_distance` | `minimum_weighted_distance` | -| lateral_weight | [-] | double | `minimum_weighted_distance`時に使用されるlateral distanceの重み | 40.0 | -| prioritize_goals_before_objects | [-] | bool | 回避すべきオブジェクトがある場合、それらの前面にある目標を優先 | true | -| forward_goal_search_length | [m] | double | 元の目標から探索する前方範囲の長さ | 20.0 | -| backward_goal_search_length | [m] | double | 元の目標から探索する後方範囲の長さ | 20.0 | -| goal_search_interval | [m] | double | 目標検索の距離間隔 | 2.0 | -| longitudinal_margin | [m] | double | 目標位置の自車と障害物間の距離マージン | 3.0 | -| max_lateral_offset | [m] | double | lateral方向の目標検索の最大オフセット | 0.5 | -| lateral_offset_interval | [m] | double | lateral方向の目標検索の距離間隔 | 0.25 | -| ignore_distance_from_lane_start | [m] | double | このパラメータによって、車線路の開始位置と目標間の距離が指定した値以上になることが保証されます。これは、目標を車線路の開始位置にかなり近い位置に設定することを防ぐために使用され、安全でない、または実用的な路肩への車両移動につながる可能性があります。この値を増やすと、システムは車線路の開始位置近くの潜在的な目標位置を無視せざるを得なくなり、安全で快適な路肩への車両移動につながる可能性があります。 | 0.0 | -| margin_from_boundary | [m] | double | 車線路の端からの距離マージン | 0.5 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------- | :--- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------- | +| `goal_priority` | [-] | 文字列 | `minimum_longitudinal_distance` の場合、経路距離が短いものから並べ替え、横方向距離は無視します。`minimum_weighted_distance` の場合、横方向距離と経路距離の加重合計で並べ替えを行います。 | `minimum_weighted_distance` | +| `lateral_weight` | [-] | double | `minimum_weighted_distance` の場合に使用する横方向距離の重み | 40.0 | +| `prioritize_goals_before_objects` | [-] | ブール | 回避する必要のある物体がある場合、それらの前の目標を優先します。 -## **路肩駐車** +## **停止** -経路生成方法が 3 つあります。 -経路は路肩の境界線から一定の余白(デフォルト: `0.75 m`)を設けて生成されます。 +経路生成手法は3つあります。 +経路は路肩車線の境界線から一定のマージン(デフォルト: `0.75 m`)で生成されます。 -各候補のゴールに対して複数の Plannar を使用して経路を生成するため、プロセスには時間がかかります。したがって、このモジュールでは経路生成はメインスレッドとは異なるスレッドで実行されます。経路生成は、前のモジュールの出力経路の形状が変更されたタイミングで実行されます。新しいモジュールが起動すると、通常はゴールプランナより前の段階に移行し、その場合、ゴールプランナは経路を再生成します。ゴールプランナは複数のモジュールの最後で実行されることを想定しており、これはプランナマネージャの `keep_last` によって実現されます。 +複数のプランナーを使用して経路を生成するため、このプロセスは時間を要します。したがって、このモジュールでは経路生成はメインスレッドとは異なるスレッドで実行されます。経路生成は、前のモジュールの出力経路の形状が変化したタイミングで実行されます。新しいモジュールが起動する場合、その前にゴールプランナーの前段階に進むことが想定されます。その場合、ゴールプランナーが経路を再生成します。ゴールプランナーは複数モジュールの最後で実行されることが想定され、これはプランナーマネージャーで `keep_last` によって実現されます。 -ゴールプランナの threads は次のとおりです。 +ゴールプランナーのスレッドを以下に示します。 ![threads.png](./images/goal_planner-threads.drawio.svg) -メインスレッドは、プランナマネージャフローから呼び出されるスレッドになります。 +メインスレッドはプランナーマネージャーフローから呼び出されます。 - ゴール候補の生成と経路候補の生成は、別のスレッド(車線経路生成スレッド)で行われます。 -- そこで生成された経路候補はメインスレッドで参照され、現在のプランナーのデータ(例: 自車と障害物の情報)に対して有効と判断された候補がその中から選択されます。有効とは、急減速なし、障害物との衝突なしなどを意味します。選択された経路がこのモジュールの出力になります。 -- 選択された経路がない場合、または選択された経路が衝突で自車が停止した場合、別のスレッド(フリースペース経路生成スレッド)がフリースペース Plannar アルゴリズムを使用して経路を生成します。有効なフリースペース経路が見つかった場合、それはモジュールの出力になります。障害物が移動して車線に沿って生成された路肩駐車の経路が衝突フリーの場合、経路は再び出力として使用されます。フリースペース経路の生成フローの詳細については、フリースペース駐車に関するセクションも参照してください。 +- そこで生成された経路候補はメインスレッドによって参照され、現在のプランナーデータ(例:自車と障害物の情報)に有効であると判断されるものが選択されます。有効とは、急減速がない、障害物との衝突がない、などを意味します。選択された経路がこのモジュールの出力になります。 +- 選択された経路がない場合や、選択された経路が衝突している場合、および自車がスタックしている場合は、別のスレッド(空き領域経路生成スレッド)が空き領域計画アルゴリズムを使用して経路を生成します。有効な空き領域経路が見つかった場合、それはモジュールの出力になります。物体は移動し、車線に沿って生成された停止経路が衝突なしの場合は、経路は再び出力として使用されます。空き領域経路の生成フローの詳細については、空き領域駐車のセクションも参照してください。 -| 名称 | 単位 | 種類 | 説明 | デフォルト値 | -| ------------------------------------- | ------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -| pull_over_minimum_request_length | [m] | double | 自動車が目標地点にこの距離まで接近するか、停止する安全距離に達すると、プルオーバーが有効になる。 | 100.0 | -| pull_over_velocity | [m/s] | double | 目標検索エリアまでにこの速度に減速する | 3.0 | -| pull_over_minimum_velocity | [m/s] | double | 一度停止した後のプルオーバーの速度。過度の加速度を防止する。 | 1.38 | -| decide_path_distance | [m] | double | 駐車位置にこの距離まで接近した場合に経路を決定する。その後、経路計画と目標検索は実行されません | 10.0 | -| maximum_deceleration | [m/s2] | double | 最大減速度。駐車経路が急に検出できない場合に急減速を防ぐ。 | 1.0 | -| path_priority | [-] | string | `efficient_path`を使用する場合、`efficient_path_order`に設定された効率的な経路を生成できる目標を使用します。`close_goal`を使用する場合、元の目標に最も近い目標を使用します。 | efficient_path | -| efficient_path_order | [-] | string | フリースペースでのプルオーバーを除くレーンに沿ったプルオーバープランナーの効率的な順序 | ["SHIFT", "ARC_FORWARD", "ARC_BACKWARD"] | -| lane_departure_check_expansion_margin | [m] | double | 車線逸脱チェックを実行するときの自動車両のフットプリントを拡大するためのマージン | 0.0 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------ | :----- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- | +| pull_over_minimum_request_length | [m] | double | 自車位置が目標にこの距離または安全な停止距離に近づいたときに、プルオーバーがアクティブになります。 | 100.0 | +| pull_over_velocity | [m/s] | double | 目標探索エリアまでにこの速度まで減速します。 | 3.0 | +| pull_over_minimum_velocity | [m/s] | double | 一度停止した後のプルオーバーの速度です。これにより過度の加速を防止します。 | 1.38 | +| decide_path_distance | [m] | double | 駐車位置との相対距離がこの距離に近づくとパスを決定します。それ以降は、パスプランニングと目標検索は実行されません。 | 10.0 | +| maximum_deceleration | [m/s2] | double | 最大減速度です。突然駐車経路が見つからなくなったときに急減速を防ぎます。 | 1.0 | +| path_priority | [-] | string | `efficient_path` の場合は、`efficient_path_order` で設定されている効率的なパスを生成できる目標を使用します。`close_goal` の場合は、元の目標に最も近い目標を使用します。 | efficient_path | +| efficient_path_order | [-] | string | フリースペースプルオーバーを除くレーンに沿ったプルオーバープランナーの効率的な順序 | ["SHIFT", "ARC_FORWARD", "ARC_BACKWARD"] | +| lane_departure_check_expansion_margin | [m] | double | レーン逸脱チェック時に自車のフットプリントを拡張するためのマージン | 0.0 | -### **路肩駐車** +### **シフトパーキング** -寄せる距離は、速度、横方向偏差、横方向ジャークから計算されます。 -横方向ジャークは、事前に設定された最小値と最大値の間で検索され、上記の条件を満たすものが出力されます。 +停車距離は、速度、横方向偏差、横方向のジャークにより計算されます。 +横方向のジャークは、あらかじめ決められた最小値と最大値の間で検索され、上述の準備条件を満たすものが出力されます。 -1. 余白を確保するために、路肩車線の路側線セグメントに一様なオフセットを適用する -2. 合流開始と終了の間のセクションでは、回避経路の生成に使用される方法(4セグメント定数ジャーク多項式)で経路をシフトする -3. この経路と車線の中心線を組み合わせる +1. 路側帯の中心線に一様なオフセットを適用してマージンを確保する +2. マージ開始点と終了点の間のセクションでは、回避経路の生成に使用される方法(四分割定数ジャーク多項式)で経路をシフトする +3. この経路を道路車線のセンターラインと組み合わせる ![shift_parking](./images/shift_parking.drawio.svg) -[shift_parking video](https://user-images.githubusercontent.com/39142679/178034101-4dc61a33-bc49-41a0-a9a8-755cce53cbc6.mp4) +[シフトパーキング動画](https://user-images.githubusercontent.com/39142679/178034101-4dc61a33-bc49-41a0-a9a8-755cce53cbc6.mp4) -#### 路肩駐車のパラメータ +#### シフトパーキングのパラメータ -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :---------------------------- | :----- | :------------------- | :------------------------------------------------- | :----------- | -| enable_shift_parking | [-] | ブール型 | シフトパーキングを有効にするフラグ | true | -| shift_sampling_num | [-] | 整数型 | lateral_jerkの最小および最大範囲内のサンプリング数 | 4 | -| maximum_lateral_jerk | [m/s3] | 倍精度浮動小数点数型 | 最大横方向ジャーク | 2.0 | -| minimum_lateral_jerk | [m/s3] | 倍精度浮動小数点数型 | 最小横方向ジャーク | 0.5 | -| deceleration_interval | [m] | 倍精度浮動小数点数型 | 減速区間の距離 | 15.0 | -| after_shift_straight_distance | [m] | 倍精度浮動小数点数型 | 引き寄せ終了後の直線距離 | 1.0 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :---------------------------- | :----- | :----- | :------------------------------------------------------------------------- | :------------ | +| enable_shift_parking | [-] | bool | シフトパーキングを有効にするかどうか | true | +| shift_sampling_num | [-] | int | lateral_jerk の最小から最大範囲のサンプル数 | 4 | +| maximum_lateral_jerk | [m/s3] | double | 最大横加速度 | 2.0 | +| minimum_lateral_jerk | [m/s3] | double | 最小横加速度 | 0.5 | +| deceleration_interval | [m] | double | 減速セクションの距離 | 15.0 | +| after_shift_straight_distance | [m] | double | 引越し終了点以降の直線距離 | 1.0 | -### **geometric parallel parking** +### **幾何学的並列駐車** -2つの不連続曲率円弧パスを生成します。パスの途中で2回停止し、この時点でステアリングを制御します。2つのパス生成方法:前進と後進があります。 +不連続曲率を持つ2つの円弧パスを生成します。そのパスの真ん中で2回停止して、その場でステアリングを制御します。2つのパス生成方法があります: 前進と後進。 アルゴリズムの詳細については、[[1]](https://www.sciencedirect.com/science/article/pii/S1474667015347431) を参照してください。また、[シンプルなPython実装](https://github.com/kosuke55/geometric-parallel-parking) もあります。 -#### geometric parallel parkingのパラメータ +#### 幾何学的並列駐車のパラメーター -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :---------------------- | :---- | :----- | :-------------------------------------------------------------------------------------------------------------- | :----------- | -| arc_path_interval | [m] | double | アークパスポイント間の距離 | 1.0 | -| pull_over_max_steer_rad | [rad] | double | Path生成時の最大ステアリング角度。停止中はvehicle_infoでmax_steer_angleまでステアリングを制御できない場合がある | 0.35 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------- | :---- | :----- | :---------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| arc_path_interval | [m] | double | 円弧パスの点間の距離 | 1.0 | +| pull_over_max_steer_rad | [rad] | double | 停車時のvehicle_infoでの最大ステアリング角までステアリングを制御できない可能性がある、パス生成のための最大ステアリング角 | 0.35 | -#### アークフォワードパーキング +#### アーク前進駐車 -2つの前方アークパスを生成します。 +前方円弧経路を 2 つ生成します。 ![arc_forward_parking](./images/arc_forward_parking.drawio.svg) -[arc_forward_parking video](https://user-images.githubusercontent.com/39142679/178034128-4754c401-8aff-4745-b69a-4a69ca29ce4b.mp4) +[アーク前進駐車のビデオ](https://user-images.githubusercontent.com/39142679/178034128-4754c401-8aff-4745-b69a-4a69ca29ce4b.mp4) -#### アークフォワードパーキングのパラメータ +#### アーク前進駐車のパラメータ -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :---------------------------------------- | :---- | :----- | :--------------------------------------- | :----------- | -| `enable_arc_forward_parking` | [-] | ブール | 円弧前進駐車を有効にするかどうか | true | -| `after_forward_parking_straight_distance` | [m] | double | 引き上げ終了地点から直線距離 | 2.0 | -| `forward_parking_velocity` | [m/s] | double | 前進駐車時の速度 | 1.38 | -| `forward_parking_lane_departure_margin` | [m/s] | double | 前進駐車時の車両左前角の車線逸脱マージン | 0.0 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :-------------------------------------- | :---- | :----- | :----------------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_arc_forward_parking | [-] | bool | アーク進行駐車の有効フラグ | true | +| after_forward_parking_straight_distance | [m] | double | 折返し終点からの直線距離 | 2.0 | +| forward_parking_velocity | [m/s] | double | 進行駐車中の速度 | 1.38 | +| forward_parking_lane_departure_margin | [m/s] | double | 進行駐車時に自車の前左隅から車線逸脱マージン | 0.0 | -#### アーク後退駐車 +#### アーク後方駐車 -後退アークパスを2つ生成します。 +2つの後方アーク経路を生成します。 -![後退アーク駐車](./images/arc_backward_parking.drawio.svg) +![arc_backward_parking](./images/arc_backward_parking.drawio.svg) -[後退アーク駐車ビデオ](https://user-images.githubusercontent.com/39142679/178034280-4b6754fe-3981-4aee-b5e0-970f34563c6d.mp4) +[アーク後方駐車ビデオ](https://user-images.githubusercontent.com/39142679/178034280-4b6754fe-3981-4aee-b5e0-970f34563c6d.mp4) -#### 後退アーク駐車のパラメータ +#### アーク後方駐車のパラメーター -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :--------------------------------------- | :---- | :----- | :------------------------------------------------- | :----------- | -| enable_arc_backward_parking | [-] | bool | アーク後退駐車を有効にするフラグ | true | -| after_backward_parking_straight_distance | [m] | double | 駐車終了地点後の直線距離 | 2.0 | -| backward_parking_velocity | [m/s] | double | 後退駐車時の速度 | -1.38 | -| backward_parking_lane_departure_margin | [m/s] | double | 自車の前右隅が後退駐車時に車線から逸脱するマージン | 0.0 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------ | :---- | :----- | :------------------------------------------------------------------------------------- | :----------- | +| `enable_arc_backward_parking` | [-] | bool | アークでの後退駐車を有効にするフラグ | true | +| `after_backward_parking_straight_distance` | [m] | double | 駐車終了地点からの直線距離 | 2.0 | +| `backward_parking_velocity` | [m/s] | double | 後退駐車時の速度 | -1.38 | +| `backward_parking_lane_departure_margin` | [m] | double | 自車の右前角の後退駐車時の車線逸脱マージン | 0.0 | -### 無人駐車(Freespace Parking) +### Freespace駐車場 -車両が「車線駐車」でスタックした場合は、「無人駐車」を実行します。 -この機能を実行するには、マップに「駐車場」を設定し、[costmap_generator](../costmap_generator/README.md) の `activate_by_scenarion` を `false` に、`enable_freespace_parking` を `true` に設定する必要があります。 +車両が`lane_parking`で停止した場合、`freespace_parking`を実行します。 +この機能を実行するには、マップに`parking_lot`を設定し、[costmap_generator](../costmap_generator/README.md)の`activate_by_scenario`を`false`に、`enable_freespace_parking`を`true`に設定する必要があります。 ![pull_over_freespace_parking_flowchart](./images/pull_over_freespace_parking_flowchart.drawio.svg) -フローチャート内の `avoidance_module` との同時実行は現在開発中です。 +フローチャート内の`avoidance_module`と同時実行できるよう現在開発中です。 -#### 無人駐車パラメーター +#### Freespace駐車場のパラメータ -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :----------------------- | :--- | :------- | :------------------------------------------------------------------------------------------ | :----------- | -| enable_freespace_parking | [-] | ブール値 | 障害物などにより駐車スペースで車両がスタックした場合にfreespace駐車が有効になるフラグです。 | true | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :----------------------- | :--- | :--- | :------------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_freespace_parking | [-] | bool | This flag enables freespace parking, which runs when the vehicle is stuck due to e.g. obstacles in the parking area. | true | -[freespace_planner](../autoware_freespace_planner/README.md)の他のパラメータについては、参照してください。 +他のパラメータについては [freespace_planner](../autoware_freespace_planner/README.md) を参照してください。 -## **経路生成のための衝突チェック** +## **パス生成のための衝突チェック** -経路候補の中から安全なものを選択するために、障害物との衝突チェックが行われます。 +安全なパス候補を1つ選択するために、障害物との衝突チェックが行われます。 -### **オキュパンシーグリッドベースの衝突チェック** +### **占有グリッドベースの衝突チェック** -自車位置経路点からフットプリントを生成し、対応するセルのオキュパンシーグリッドの値から障害物の衝突を判定します。 +自己位置のパスのポイントからフットプリントを生成し、対応するセルの占有グリッドの値から障害物との衝突を判断します。 -#### オキュパンシーグリッドベースの衝突チェックに関するパラメータ +#### 占有グリッドベースの衝突チェックに関するパラメータ -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :---------------------------------------------- | :--- | :----- | :-------------------------------------------------------------------------------------- | :----------- | -| use_occupancy_grid_for_goal_search | - | bool | 目標探索衝突確認のためオキューパンシーグリッドを使用するかどうか | true | -| use_occupancy_grid_for_goal_longitudinal_margin | - | bool | 縦方向マージンを保持するためオキューパンシーグリッドを使用するかどうか | false | -| use_occupancy_grid_for_path_collision_check | - | bool | 衝突確認のためオキューパンシーグリッドを使用するかどうか | false | -| occupancy_grid_collision_check_margin | m | double | フットプリントから自車セルを計算するためのマージン | 0.0 | -| theta_size | - | int | 考慮するシータ角のサイズ。衝突確認の角度分解能は 2$\pi$ / theta_size [rad] となります。 | 360 | -| obstacle_threshold | - | int | 障害物と見なされるセルの値のしきい値 | 60 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------------- | :--- | :----- | :-------------------------------------------------------------------------------------------------------------- | :------------ | +| use_occupancy_grid_for_goal_search | [-] | bool | occupancy gridを使用してゴール探索衝突検査を行うかどうかを示すフラグ | true | +| use_occupancy_grid_for_goal_longitudinal_margin | [-] | bool | occupancy gridを使用して縦方向の余裕を維持するかどうかを示すフラグ | false | +| use_occupancy_grid_for_path_collision_check | [-] | bool | occupancy gridを使用して衝突検査を行うかどうかを示すフラグ | false | +| occupancy_grid_collision_check_margin | [m] | double | フットプリントから自車位置セルを計算するためのマージン | 0.0 | +| theta_size | [-] | int | theta角のサイズ。衝突検査の角度分解能は2$\pi$ / theta_size [rad] | 360 | +| obstacle_threshold | [-] | int | 障害物と見なされるセルの値のしきい値 | 60 | -### **オブジェクト認識ベースの衝突確認** +### **認識対象に基づく衝突チェック** -各経路候補に対して衝突判定が行われ、衝突のない経路が選択されます。 -現時点では、3 つの主なマージンがあります。 +各経路候補に対して衝突の判定が行われ、衝突なしの経路が選択されます。ここでは3つの主要なマージンがあります。 -- `object_recognition_collision_check_margin` は、自車の全方向のマージンです。 -- 前進方向では、現在の速度と最大減速度から計算された制動距離によってマージンが追加されます。距離の最大値は、`object_recognition_collision_check_max_extra_stopping_margin` によって抑えられます。 -- 曲線では、横方向のマージンは直線よりも大きくなります。これは、曲線では制御エラーが発生しやすかったり、物体に近くても不安定になったりするためです(理論的根拠はありませんが、最大値は `object_recognition_collision_check_max_extra_stopping_margin` によって制限されています)。 +- `object_recognition_collision_check_margin` は自車の全方向のマージンです。 +- 前方方向では、現在の走行速度と最大減速度から計算された制動距離によるマージンが追加されます。距離の最大値は `object_recognition_collision_check_max_extra_stopping_margin` で抑えられます。 +- 曲線では、横方向のマージンは直線より大きくなります。曲線は制御誤差が発生しやすい上、物体に近づくと恐怖を覚えるためです(ただし、根拠はないものの、最大値は `object_recognition_collision_check_max_extra_stopping_margin` で制限されています)。 ![collision_check_margin](./images/goal_planner-collision_check_margin.drawio.svg) -また、ソフトマージンとハードマージンのコンセプトがあります。現時点ではパラメータ化されていませんが、`object_recognition_collision_check_margin` よりも数倍大きいマージンで衝突のない経路を生成できる場合、優先順位が高くなります。 +続いて、ソフトマージンとハードマージンの概念があります。現在はパラメータ化されていませんが、`object_recognition_collision_check_margin` よりも数倍大きいマージンで衝突なしの経路を生成できる場合、優先順位は高くなります。 -#### オブジェクト認識ベースの衝突確認のパラメータ +#### 認識対象に基づく衝突チェックに関するパラメータ -| 名称 | 単位 | 入力種別 | 説明 | デフォルト値 | -| :----------------------------------------------------------- | :--- | :------------- | :------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- | -| use_object_recognition | [-] | bool | 障害物チェックに物体認識を使用するかどうか | true | -| object_recognition_collision_check_soft_margins | [m] | vector[double] | パス生成時の衝突チェックのソフトマージン。厳密にはフットプリント間の距離ではなく、自己位置と物体が向き合っているときの最大距離。 | [5.0, 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0] | -| object_recognition_collision_check_hard_margins | [m] | vector[double] | パス生成時の衝突チェックのハードマージン | [0.6] | -| object_recognition_collision_check_max_extra_stopping_margin | [m] | double | 停止距離を考慮した衝突チェックのための縦方向距離マージンの追加時の最大値 | 1.0 | -| detection_bound_offset | [m] | double | パス生成の衝突チェック検出エリアを作るため、待避レーンをこのオフセットで拡張 | 15.0 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------------------------- | :--- | :----------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ | +| use_object_recognition | [-] | bool | 衝突確認にオブジェクト認識を使用するかどうか | true | +| object_recognition_collision_check_soft_margins | [m] | vector[double] | パス生成時の衝突確認用のソフトマージン。フートプリント間の距離を厳密に指定するわけではなく、自車とオブジェクトの向きが異なる場合の最大距離を指定する | [5.0, 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0] | +| object_recognition_collision_check_hard_margins | [m] | vector[double] | パス生成時の衝突確認用のハードマージン | [0.6] | +| object_recognition_collision_check_max_extra_stopping_margin | [m] | double | 停止距離を考慮した衝突確認の縦方向距離マージンを追加する場合の最大値 | 1.0 | +| detection_bound_offset | [m] | double | パス生成の衝突確認用の検出エリアを作成するために、プローブオーバーレーンをこのオフセットで拡大する | 15.0 | -## **safety check** +## **セーフティチェック** -走行オブジェクトに対して安全チェックを実施します。オブジェクトが危険と判断された場合、経路意思決定が行われず、承認も与えられません。 +移動物体に対してセーフティチェックを実施します。物体が危険と判断された場合、パス決定は行われず、承認は与えられません。 -- 経路意思決定が行われず、承認は許可されません。 -- 承認後、自動運転車は減速制約とジャーク制約に従って停止します。 +- パス決定は行われず、承認は付与されません。 +- 承認後、自車位置は減速およびジャークの制約下で停止します。 -本モジュールでは、`RSS`と`integral_predicted_polygon`の2つの安全チェック手法を使用します。 +このモジュールには、`RSS`と`integral_predicted_polygon`の2つのセーフティチェック方式があります。 -`RSS`手法は、他の動作経路プランナーモジュールで一般的に使用される手法です。[RSSベースの安全チェックユーティリティに関する説明](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md)を参照してください。 +`RSS`方式は、他の挙動パスプランナーモジュールで一般的に使用される方法です。[RSSベースのセーフティチェックユーティリティの説明](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md)を参照してください。 -`integral_predicted_polygon`は、より安全指向の手法です。この手法は、走行中の速度が運転中の場合よりも低く、車線の縁を走行するオブジェクトが少ない場合に実装されます。(反応が良すぎて利用頻度が少ない場合があります。) -この手法は、特定の時点における自車位置とオブジェクトのフットプリントを統合し、それらの衝突をチェックします。 +`integral_predicted_polygon`は、よりセーフティ志向の方法です。この方式は、プルオーバー中の速度が走行中の速度よりも低く、レーン端に沿って走る物体が少ないということを理由に実装されています。(場合によっては過剰に反応し、利用できない可能性があります。) +この方式は、特定の時点での自車位置と物体のフットプリントを統合し、それらの間の衝突をチェックします。 ![safety_check](./images/goal_planner-safety_check.drawio.svg) -また、安全チェックには時間のヒステリシスがあり、一定期間(`keep_unsafe_time`)経路が「安全」と判断されると、最終的に「安全」として扱われます。 +また、セーフティチェックには時間ヒステリシスがあり、パスが一定時間(`keep_unsafe_time`)「セーフ」と判断された場合、最終的に「セーフ」として扱われます。 + ```txt ==== is_safe @@ -381,49 +376,50 @@ _注意: このプランナーは、「目標探索」、「衝突チェック ### 安全チェックのパラメータ -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :--------------------------------- | :---- | :----- | :----------------------------------------------------------------------------------------------------- | :------------------------- | -| enable_safety_check | [-] | bool | セーフティチェックを使用するかどうか | true | -| method | [-] | 文字列 | セーフティチェックの方法. RSSまたはintegral_predicted_polygon | integral_predicted_polygon | -| keep_unsafe_time | [s] | double | セーフティチェックヒステリシス時間. その時間だけ経路が"安全"と判定されれば、最終的に"安全"とみなされる | 3.0 | -| check_all_predicted_path | - | bool | 予測経路のすべてを確認するためのフラグ | true | -| publish_debug_marker | - | bool | デバッグマーカーを公開するためのフラグ | false | -| collision_check_yaw_diff_threshold | [rad] | double | RSSベースの衝突チェックを実行するときの、自己位置と物体との最大ヨーの違い | 3.1416 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------- | :---- | :----- | :-------------------------------------------------------------------------------------------------------------- | :---------------------------- | +| enable_safety_check | [-] | bool | セーフティチェックを使用するかどうかのフラグ | true | +| method | [-] | string | セーフティチェックの方法。`RSS`または`integral_predicted_polygon` | `integral_predicted_polygon` | +| keep_unsafe_time | [s] | double | セーフティチェックのヒステリシス時間。経路が「安全」と判断された場合、最終的に「安全」として扱われます。 | 3.0 | +| check_all_predicted_path | - | bool | すべての予測経路を確認するフラグ | true | +| publish_debug_marker | - | bool | デバッグマーカーを公開するフラグ | false | +| `collision_check_yaw_diff_threshold` | [rad] | double | rssベースの衝突チェックを実行するときの自車とオブジェクトの最大ヨー差 | 3.1416 | -#### RSS 安全性検査パラメータ +#### RSS 安全性確認用のパラメータ -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :------------------------------------ | :--- | :----- | :------------------------- | :----------- | -| `rear_vehicle_reaction_time` | [s] | double | 後方車両の反応時間 | 2.0 | -| `rear_vehicle_safety_time_margin` | [s] | double | 後方車両の安全時間マージン | 1.0 | -| `lateral_distance_max_threshold` | [m] | double | 最大横方向距離閾値 | 2.0 | -| `longitudinal_distance_min_threshold` | [m] | double | 最小縦方向距離閾値 | 3.0 | -| `longitudinal_velocity_delta_time` | [s] | double | 縦方向速度のデルタ時間 | 0.8 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------- | :--- | :----- | :-------------------------------------------------- | :------------ | +| `rear_vehicle_reaction_time` | [秒] | double | 後続車の反応時間 | 2.0 | +| `rear_vehicle_safety_time_margin` | [秒] | double | 後続車の安全余裕時間 | 1.0 | +| `lateral_distance_max_threshold` | [m] | double | 最大の横方向距離のしきい値 | 2.0 | +| `longitudinal_distance_min_threshold` | [m] | double | 最小の縦方向距離のしきい値 | 3.0 | +| `longitudinal_velocity_delta_time` | [秒] | double | 縦速度のデルタ時間 | 0.8 | -#### インテグラル予測ポリゴン安全性チェック用パラメーター +#### integral_predicted_polygon 安全チェック用パラメーター -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :-------------- | :--- | :----- | :------------------------------- | :----------- | -| forward_margin | [m] | double | 自己位置の前面の余裕 | 1.0 | -| backward_margin | [m] | double | 自己位置の後面の余裕 | 1.0 | -| lat_margin | [m] | double | 自己位置の側面の余裕 | 1.0 | -| time_horizon | [s] | double | 各フットプリントを統合する時間幅 | 10.0 | +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :------------: | :--: | :---: | :----------------------------------------------- | :-----------: | +| forward_margin | [m] | double | 自車フットプリントの前方余白 | 1.0 | +| backward_margin | [m] | double | 自車フットプリントの後方余白 | 1.0 | +| lat_margin | [m] | double | 自車フットプリントの横方向余白 | 1.0 | +| time_horizon | [s] | double | 各フットプリントを統合する時間幅 | 10.0 | -## **パス決定** +## **経路決定** -`decide_path_distance` が停車開始位置に近づくと、その時点で衝突がなく、オブジェクトの予測パスに対して安全な場合、DECIDING に遷移します。一定期間安全であれば、DECIDED に移行します。 +プルオーバー開始時に`decide_path_distance`が近づくと、その時点で衝突がなく、オブジェクトの予測経路に対して安全であれば、DECIDINGに移行します。一定時間安全であれば、DECIDEDに移行します。 ![path_deciding](./images/goal_planner-deciding_path.drawio.svg) -## 未実装部分 / 制限事項 +## 未実装部分/制限事項 + +- シフトプルオーバーのみ、他のモジュールと同時に実行可能 +- 駐車スペースの狭さと安全マージンのトレードオフ。状況に応じて低速を使用して余裕を減らすモードが必要だが、速度の動的切り替えメカニズムはない。 +- 利用可能な駐車スペースはオブジェクトの可視性に依存し、駐車決定が適切に行えない場合があります。 +- 未認識オブジェクト(未知のオブジェクトでもありません)に対するマージンは占用グリッドに依存しています。接近可能なオブジェクト(例:草、葉)が区別できないため、未認識の地表オブジェクトに近づきすぎる場合があります。 -- Shift pull over のみ他のモジュールと同時に実行可能 -- 駐車スペースの確保とマージンの確保のトレードオフ。状況に応じた低速走行によるマージン削減モードが必要だが、速度の動的切替メカニズムはない。 -- 駐車可能なスペースはオブジェクトの可視性に依存するため、適切な駐車決定ができない場合があります。 -- 未認識オブジェクト(未知のオブジェクトですらないもの)に対するマージンはオキュパンシグリッドに依存します。接近が許可されているオブジェクト(例:芝生、葉)は区別できないため、未認識の地上オブジェクトに近づきすぎる場合があります。 +フリースペース駐車の未実装部分/制限事項 -縦列駐車の未実装部分 / 制限事項 +- 短い経路が生成されると、自車はそれを使用して走行できません。 +- 複雑なケースは生成に時間がかかったり、失敗します。 +- 走行可能な領域は`parking_lot`に収まるとは限りません。 -- 短いパスが生成された場合、エゴカーは走行できません。 -- 複雑なケースでは、生成に時間がかかったり、失敗したりします。 -- 走行可能なエリアは `parking_lot` に収まることが保証されていません。 diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md index 3833fbfcbcd46..d7a7d6592f46c 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md @@ -1,30 +1,31 @@ # 車線変更設計 -車線変更モジュールは、車線変更が必要かつ安全に実行可能な場合にアクティベートされます。 +車線変更が必要で、安全に実行できる場合、車線変更モジュールがアクティブ化されます。 ## 車線変更要件 -- 前提条件として、HDマップ内の車線境界のタイプが次のいずれかにする必要があります。 - - 破線路面表示: 車線変更が両方向で許可されています。 - - 左側が破線で右側は実線: 車線変更は左から右に許可されています。 - - 右側が破線で左側が実線: 車線変更は右から左に許可されています。 - - `allow_lane_change` タグが `true` に設定されています -- 車線変更リクエスト条件の期間 - - 自車が `preferred_lane` 上にありません。 - - 自車が信号機に近づいていません (条件はパラメータ化されています)。 - - 自車が横断歩道に近づいていません (条件はパラメータ化されています)。 - - 自車が交差点に近づいていません (条件はパラメータ化されています)。 -- 車線変更準備条件 - - 車線変更の経路が他の可動物体と衝突しない (以下の図を参照) - - 車線変更候補経路はオペレーターによって承認されている。 +- 前提条件として、HD マップにおける車線境界の種類が以下のいずれかである必要があります。 + - 破線車線または、実線と破線の混在: 両方向の車線変更が許可されています。 + - 左側が破線、右側が実線: 左から右への車線変更が許可されています。 + - 左側が実線、右側が破線: 右から左への車線変更が許可されています。 + - `allow_lane_change` タグが `true` に設定されています。 +- 車線変更要求条件中 + - 自車が `preferred_lane` 上にいません。 + - 自車が信号機に近づいていません。(条件パラメータ化) + - 自車が横断歩道に近づいていません。(条件パラメータ化) + - 自車が交差点に近づいていません。(条件パラメータ化) +- 車線変更準備完了条件 + - 車線変更の経路が他の動的オブジェクトと衝突していません(以下の図を参照)。 + - 車線変更候補経路がオペレーターによって承認されています。 ## 車線変更候補経路の生成 -車線変更候補経路は、準備と車線変更の2つのフェーズに分けられます。以下の図は車線変更候補経路の各フェーズを示しています。 +車線変更候補経路は、準備フェーズと車線変更フェーズの 2 つに分けられます。次の図は、車線変更候補経路の各フェーズを示しています。 -![车线変更阶段](./images/lane_change-lane_change_phases.png) +![車線変更フェーズ](./images/lane_change-lane_change_phases.png) + +次のチャートは、車線変更用の候補経路のサンプリングプロセスを示しています。 -以下のグラフは、車線変更の候補経路をサンプリングするプロセスを示しています。 ```plantuml @startuml @@ -89,7 +90,8 @@ stop @enduml ``` -以下の図では、有効な候補経路の生成プロセスを示しています。 +以下のチャートでは、有効な候補経路を作成するプロセスを説明しています。 + ```plantuml @startuml @@ -126,49 +128,56 @@ endif @enduml ``` -### 準備フェーズ +### 準備段階 + +準備経路は、候補経路の最初の直線部分で、自車位置の現在の車線に沿って生成されます。準備経路の長さは、次のように計算されます。 -準備軌道とは候補パスの中で最初で、自車位置に沿って生成される直線部分です。準備軌道の長さは、以下のように計算します。 ```C++ lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2 ``` -準備段階では、残り距離が`lane_change_search_distance`以下になるとウインカーが作動します。 +準備フェーズでは、残りの距離が`lane_change_search_distance`以下になった場合は、ターンシグナルが作動します。 + +### 車線変更フェーズ -### レーン変更の段階 +車線変更フェーズは、自車位置を現在の車線からターゲット車線に移動するシftedパスで構成されます。車線変更フェーズの総距離は次のとおりです。車線変更フェーズでは、自車は一定速度で走行することに注意してください。 -レーン変更の段階は、自車の現在の車線から目標の車線に移動するシフトパスで構成されています。レーン変更の段階の総距離を以下に示します。レーン変更の段階では、自車は一定速度で走行します。 ```C++ lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity) lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration ``` -`backward_length_buffer_for_end_of_lane` は、ブレーキ時の遅れなどの制御または機械的な遅れなどの可能性のある遅延のため、ある程度のバッファーを追加するために追加されました。 +`backward_length_buffer_for_end_of_lane` にはブレーキ遅れなどの制御または機械的な遅延の可能性のある時間ウィンドウが追加されます。 -#### 候補パスサンプルの複数(縦方向加速度) +#### マルチ候補パスサンプル(縦加速度) -レーン変更速度は、自我車両の現在の速度の影響を受けます。高速は、より長い準備時間とレーン変更距離を必要とします。ただし、自我車両が減速する場合に備えて、レーン変更の軌道も計画する必要があります。自我車両が減速すると仮定する候補パスを計算するには、事前決定された減速値を `prepare_length`、`prepare_velocity`、および `lane_changing_length` の計算式に代入します。 +車線変更速度は、自車現在の速度の影響を受けます。高速では、より長い準備と車線変更距離が必要になります。ただし、自車が徐行する場合も車線変更軌跡を計画する必要があります。 + +自車が減速すると想定した候補パスを計算するには、あらかじめ決定した減速度値を、`prepare_length`、`prepare_velocity`、`lane_changing_length` の方程式に代入します。 + +あらかじめ決定された縦加速度値は `longitudinal_acceleration = maximum_longitudinal_acceleration` から始まる値のセットで、`longitudinal_acceleration_resolution` だけ減少して `longitudinal_acceleration = -maximum_longitudinal_deceleration` に達します。`maximum_longitudinal_acceleration` と `maximum_longitudinal_deceleration` のどちらも、`common.param` ファイルで `normal.min_acc` として定義された値として計算されます。 -事前決定された縦方向加速度値は、`longitudinal_acceleration = maximum_longitudinal_acceleration` から開始されるセットと、`longitudinal_acceleration = -maximum_longitudinal_deceleration` に達するまで `longitudinal_acceleration_resolution` ずつ減少するセットです。`maximum_longitudinal_acceleration` と `maximum_longitudinal_deceleration` の両方が、`common.param` ファイルで `normal.min_acc` として定義されているように計算されます。 ```C++ maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc) maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc) ``` -ここで、`common_param` は車両の一般的な最大縦加速度および最大減速度を定義する車両の一般的なパラメータです。一方、`lane_change_param` には車線変更モジュールの最大縦加速度および最大減速度があります。たとえば、ユーザーが `common_param.max_acc=1.0` および `lane_change_param.max_acc=0.0` を設定すると、`maximum_longitudinal_acceleration` は `0.0` となり、車線変更フェーズで車線変更は加速しません。 +`common_param`は車両の共通最大縦加速度と減速度を定義する車両共通パラメータです。一方、`lane_change_param`には車線変更モジュールの最大縦加速度と減速度があります。たとえば、ユーザーが`common_param.max_acc=1.0`と`lane_change_param.max_acc=0.0`を設定すると、`maximum_longitudinal_acceleration`は`0.0`になり、車線変更は車線変更フェーズで加速しません。 + +`longitudinal_acceleration_resolution`は以下によって決定されます -`longitudinal_acceleration_resolution` は次によって決定されます。 ```C++ longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num ``` -`現在の速度` が `最低車線変更速度` より小さい場合、車両は速度を `最低車線変更速度` まで加速する必要があることに注意してください。したがって、縦加速度は正の値(減速しない)になります。 +「current_velocity」が「minimum_lane_changing_velocity」より低い場合、車両は速度を「minimum_lane_changing_velocity」まで加速する必要があることに留意してください。したがって、縦加速度は正の値(減速ではない)になります。 + +このチャートは、縦加速度値がサンプリングされる条件を示しています。 -グラフは縦加速度の値がサンプリングされる条件を示しています。 ```plantuml @startuml @@ -221,7 +230,8 @@ stop ``` -このドキュメントでは、縦断加速度をサンプリングするプロセスについて説明します。 + longitudinal 加速度のサンプリングのプロセスを以下に説明します。 + ```plantuml @startuml @@ -251,123 +261,47 @@ stop @enduml ``` -次の図は `longitudinal_acceleration_sampling_num = 4` の場合を示しています。`maximum_deceleration = 1.0` とすると、`a0 == 0.0 == 減速なし`、`a1 == 0.25`、`a2 == 0.5`、`a3 == 0.75`、`a4 == 1.0 == maximum_deceleration` となります。`a0` は自車が減速しない場合の想定される車線変更軌跡であり、`a1` の経路は自車が `0.25 m/s^2` で減速する場合の想定される車線変更軌跡です。 +次の図は、`longitudinal_acceleration_sampling_num = 4` の場合を表しています。`maximum_deceleration = 1.0` と仮定すると、`a0 == 0.0 == 減速なし`、`a1 == 0.25`、`a2 == 0.5`、`a3 == 0.75`、`a4 == 1.0 == maximum_deceleration` となります。`a0` は自動運転車が減速しない場合の期待車線変更軌跡であり、`a1` のパスは自動運転車が `0.25 m/s^2` で減速した場合の期待車線変更軌跡です。 ![path_samples](./images/lane_change-candidate_path_samples.png) -どの経路が選択されるかは、妥当性と衝突判定によって異なります。 - -#### 候補経路サンプル複数(横断加速度) - -縦断加速度のサンプルに加え、横断加速度の値を調整することで車線変更経路のサンプリングも行います。横断加速度は車線変更の持続時間に影響するため、横断加速度の値が低いと車線変更経路が長くなり、横断加速度の値が高いと車線変更経路が短くなります。これにより、車線変更の余裕が少ない場合に横断加速度を増加させることで、車線変更モジュールはより短い車線変更経路を生成できます。 - -最大横断加速度と最小横断加速度は、車線変更パラメータファイルでマップとして定義されています。横断加速度の範囲は、マップ内の値を線形補間することで各速度について決定されます。次のようなマップがあるとします。 - -## 自動運転ソフトウェア設計仕様 - -### Overview - -このドキュメントは、Autowareの自動運転ソフトウェアの設計仕様を定義します。ここでは、Planningコンポーネントの動作を定義します。 - -### Planningコンポーネント - -Planningコンポーネントは、周囲環境を認識し、現在の位置を考慮して、車両の安全で効率的な経路を計画します。Planningコンポーネントの主な機能を次に示します。 - -- **経路生成:** 目的地を考慮した、安全で最適な経路の生成。 -- **障害物回避:** 障害物を検出し、安全に回避するための経路の調整。 -- **速度制御:** 目標速度の維持と速度制限の遵守のための速度制御。 - -### 設計仕様 - -#### 経路生成 - -**経路生成の制約条件:** - -- 車両の物理的制約(速度、加速度、旋回限界など)を遵守する。 -- 交通規則と法規に従う。 -- 障害物を安全に回避する。 - -**経路生成パラメータ:** - -次のパラメータは、経路生成アルゴリズムに影響を与えます。 - -- `post resampling`後の距離 -- `post resampling`後のHeading -- `post resampling`後の旋回角度 - -**経路生成アルゴリズム:** - -経路生成アルゴリズムは、さまざまな技術を使用できます(例:最適化、グラフ探索)。アルゴリズムは、上記の制約条件とパラメータを満たす経路を生成する必要があります。 - -#### 障害物回避 - -**障害物検出:** - -Planningコンポーネントは、センサーデータを使用して障害物を検出します(例:LiDAR、カメラ)。検出された障害物は、タイプ、サイズ、位置で分類されます。 - -**障害物回避アルゴリズム:** - -障害物回避アルゴリズムは、検出された障害物を考慮して、経路を安全に調整します。アルゴリズムは、障害物との衝突を回避しながら、元の経路からの逸脱を最小限に抑える必要があります。 +どのパスが選択されるかは、有効性と衝突検出によって決まります。 -#### 速度制御 +#### 複数の候補パスサンプル(横加速度) -**速度制御の制約条件:** +縦加速度をサンプリングすることに加えて、横加速度の値を調整して車線変更パスをサンプリングします。横加速度は車線変更の時間を左右するため、横加速度の値が低いほど車線変更のパスが長くなり、横加速度の値が高いほど車線変更のパスが短くなります。これにより、車線変更モジュールは車線変更のためのスペースに制限がある場合、横加速度を高めることでより短い車線変更パスを生成できます。 -- 車両のマキシマム速度と加速/減速能力を遵守する。 -- 速度制限に従う。 -- 安全で快適な運転体験を提供する。 +最大および最小横加速度は、車線変更パラメータファイルでマップとして定義されています。横加速度の範囲は、マップ内の値を線形補間することによって各速度に対して決定されます。次のマップがあるとします。 -**速度制御パラメータ:** +| 自車速度 | 最小横加速度 | 最大横加速度 | +| ---------- | -------------------------- | -------------------------- | +| 0.0 | 0.2 | 0.3 | +| 2.0 | 0.2 | 0.4 | +| 4.0 | 0.3 | 0.4 | +| 6.0 | 0.3 | 0.5 | -次のパラメータは、速度制御アルゴリズムに影響を与えます。 +このケースでは、自車速度が3.0の場合、横加速度の最小値と最大値はそれぞれ0.25と0.4になります。これらの値は、横加速度の最小値と最大値を定義するマップの2行目と3行目から線形補間により取得されます。 -- 自車位置 -- 目標速度 -- 速度逸脱量 -- 加速度逸脱量 +この範囲内で自車の横加速度をサンプリングします。縦加速度のサンプリングに使用する手法と同様に、横加速度の分解能(`lateral_acceleration_resolution`)は以下によって決定されます。 -**速度制御アルゴリズム:** - -速度制御アルゴリズムは、車両の速度を制御するために使用されます。アルゴリズムは、上記の制約条件とパラメータを満たす必要があります。 - -#### その他の仕様 - -**安全対策:** - -Planningコンポーネントは、次の安全対策を実装する必要があります。 - -- **障害物検出の冗長性:** 衝突を回避するために、複数のセンサーを使用します。 -- **経路の検証:** 経路が安全で妥当であることを検証します。 -- **異常検出:** 予期しない動作を検出し、車両を安全な状態に停止させます。 - -**効率性:** - -Planningコンポーネントは、効率的に動作し、リアルタイムの要件を満たす必要があります。 - -**拡張性:** - -Planningコンポーネントは、将来の機能拡張や改善のために設計されています。 - -このケースでは、自車位置の現在の速度が 3.0 であるとき、最小と最大の横加速度はそれぞれ 0.25 と 0.4 になります。この値は、最小と最大の横加速度値を提供するマップの 2 行目と 3 行目を線形補間することで得られます。 - -この範囲内で、自車位置の横加速度をサンプリングします。縦加速度のサンプリングに使用された方法と同様、横加速度の分解能 (lateral_acceleration_resolution) は以下の方法で決定されます。 ```C++ lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num ``` -#### 候補パス有効性チェック +#### 候補パスの有効性チェック + +候補パスは、次の基準を満たす場合に有効と見なされます。 -候補パスは、以下の条件を満たす場合、有効とみなされます。 +1. 自車位置から現車線の終端までの距離が、単一の車線変更を実行するのに十分である。 +2. 自車位置から現車線上のゴールまでの距離が、複数回の車線変更を完了するのに十分である。 +3. 自車位置から目標車線の終端までの距離が、複数回の車線変更を完了するのに十分である。 +4. 自車位置から次の規制要素までの距離が、単一の車線変更を実行するのに十分である。 +5. 駐車車両を通過後に車線変更が完了する。 +6. 車線変更の実行が「post resampling」で安全と判断される。 -1. 自車位置から現在の車線の終わりまでの距離は、車線変更一回分を完了するには十分である。 -2. 自車位置から現在の車線に沿った目標までの距離は、複数の車線変更を完了するには十分である。 -3. 自車位置から目標車線の終わりまでの距離は、複数の車線変更を完了するには十分である。 -4. 自車位置から次の規制要素までの距離は、車線変更一回分を完了するには十分である。 -5. 駐車車両を通過してから車線変更を完了可能である。 -6. 車線変更を実行するのが安全とみなされる。 +次のフローチャートは、有効性チェックを示しています。 -以下のフローチャートは、有効性チェックを示しています。 ```plantuml @startuml @@ -428,40 +362,107 @@ stop @enduml ``` -#### Candidate Path's Safety check +#### レーン変更遅延チェック + +特定の状況で、自車の前方目標車線に停止車両がある場合、停止車両の後に車線変更を実行して立ち往生を避けることが望まれます。 +そのため、自車の前方の目標車線にある静止オブジェクトをすべて最寄りから最遠に向かって確認し、オブジェクトが次の条件を満たしている場合は車線変更が遅延され、候補パスが拒否されます。 + +1. オブジェクトから終点までの距離が車線変更を実行するのに十分である +2. オブジェクトまでの距離が車線変更の長さ未満である +3. オブジェクトから次のオブジェクトまでの距離が車線変更を実行するのに十分である + +`check_only_parked_vehicle`パラメータが`true`に設定されている場合、チェックでは駐車しているものとして特定されたオブジェクトのみが考慮されます。 + +次のフローチャートは、レーン変更遅延チェックを示しています。 + + +```plantuml +@startuml +skinparam defaultTextAlignment center +skinparam backgroundColor #White + +start +if (Is target objects, candidate path, OR current lane path empty?) then (yes) + #LightPink:Return false; + stop +else (no) +endif + +:Start checking objects from closest to furthest; +repeat + if (Is distance from object to terminal sufficient) then (yes) + else (no) + #LightPink:Return false; + stop + endif + + if (Is distance to object less than lane changing length) then (yes) + else (no) + if (Is only check parked vehicles and vehicle is not parked) then (yes) + else (no) + if(Is last object OR distance to next object is sufficient) then (yes) + #LightGreen: Return true; + stop + else (no) + endif + endif + endif + repeat while (Is finished checking all objects) is (FALSE) + +#LightPink: Return false; +stop + +@enduml +``` + +以下に、各種状況における遅延車線変更のトリガーの可否を示します。 + +1. 前方十分な距離があるので、遅延車線変更がトリガーされます。 + ![delay lane change 1](./images/delay_lane_change_1.drawio.svg) +2. 前方十分な距離がないので、遅延車線変更はトリガーされません。 + ![delay lane change 2](./images/delay_lane_change_2.drawio.svg) +3. 前方十分な距離があるので、先行 NPC による遅延車線変更がトリガーされます。 + ![delay lane change 3](./images/delay_lane_change_3.drawio.svg) +4. 前方十分な距離があるので、後続 NPC による遅延車線変更がトリガーされます。 + ![delay lane change 4](./images/delay_lane_change_4.drawio.svg) +5. 前方十分な距離がないので、遅延車線変更はトリガーされません。 + ![delay lane change 5](./images/delay_lane_change_5.drawio.svg) -[安全チェックユーティリティの説明](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md)を参照 +#### 候補パスに対する安全確認 + +[安全確認ツールの説明](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) を参照してください。 #### オブジェクトの選択と分類 -まず、ターゲットオブジェクトをターゲットレーンの障害物、現在のレーンの障害物、および他のレーンの障害物に分割します。ターゲットレーンは、レーン変更後に自車が到達するレーンを示しており、現在のレーンとはレーン変更前の自車が走行中の現在のレーンを意味します。他のレーンは、ターゲットレーンと現在のレーンに属さないレーンです。次の図は、各レーンのオブジェクトを示しています。`check_objects_on_current_lanes`フラグと`check_objects_on_other_lanes`フラグを変更することにより、安全チェックから現在のレーンと他のレーンのオブジェクトを除外できることに注意してください。 +まず、ターゲットオブジェクトをターゲット車線の障害物、現在の車線の障害物、その他の車線の障害物に分けます。ターゲット車線は車両が車線変更後に到達する車線を、現在の車線は車両が車線変更する前に走行している車線を指します。それ以外の車線はターゲット車線と現在の車線に含まれない車線です。次の図は各車線上のオブジェクトを示しています。ユーザーは、`check_objects_on_current_lanes` と `check_objects_on_other_lanes` フラグを変更することで、現在の車線またはその他の車線上のオブジェクトを安全確認から除外できます。 -![オブジェクトレーン](./images/lane_objects.drawio.svg) +![object lanes](./images/lane_objects.drawio.svg) -さらに、信号で待機している車両の後ろでレーン変更を行うために、信号付近の停止している車両に対する安全チェックをスキップします。駐車車両の検出に関する説明は、[回避モジュールのドキュメント](../autoware_behavior_path_static_obstacle_avoidance_module/README.md)に記載されています。 +さらに、信号で待機している車両の背後で車線変更を行う場合、信号付近の停止車両に対する安全確認をスキップします。駐車車両の検出に関する説明は、[回避モジュールのドキュメント](../autoware_behavior_path_static_obstacle_avoidance_module/README.md) に記載されています。 -ターゲットレーンの検出範囲は、ターゲットレーンの境界を越えるオブジェクトを検出できるように元の境界を超えて拡張できます。 +ターゲット車線の検出領域は、元の境界を越えて拡張して、ターゲット車線の範囲外のオブジェクトの検出を可能にすることができます。
-
レーン拡張なし
- レーン拡張なし +
車線拡張なし
+ 車線拡張なし
-
レーン拡張あり
- レーン拡張あり +
車線拡張あり
+ 車線拡張あり
-##### オブジェクトフィルタリング +##### オブジェクトのフィルタリング + ```plantuml @startuml @@ -596,32 +597,32 @@ stop @enduml ``` -##### prepareフェーズでの衝突確認 +##### 準備段階での衝突チェック -自車位置をターゲット車両の直前まで十分に確保してから、車線変更しようとすることがあります。この動作を実現するには、フラグ`enable_collision_check_at_prepare_phase`を有効にすることができます。次の画像は、`false`と`true`の場合の違いを示しています。 +自車は車線変更を試行する前に、ターゲット車両の十分な前方の車間距離を確保する必要がある場合があります。この動作を得るために `enable_collision_check_at_prepare_phase` フラグを有効にすることができます。次の画像は `false` と `true` の場合の違いを示しています。 -![prepareフェーズでの衝突チェックの有効化](./images/lane_change-enable_collision_check_at_prepare_phase.png) +![準備段階での衝突チェックの有効化](./images/lane_change-enable_collision_check_at_prepare_phase.png) -パラメータ`prepare_phase_ignore_target_speed_thresh`は、停止または非常に低速で走行するオブジェクトなど、速度が特定の閾値未満のターゲットに対してprepareフェーズの衝突チェックを無視するように設定できます。 +#### 車線が塞がっていて車線変更が複数ある場合 -#### 車線がブロックされている場合と複数の車線変更 +他の車両が公道を走行している場合、車線変更が実行できないシナリオがあります。候補パスが、例えば隣接車線の対向車のため、安全でないとして評価されたとします。その場合、自車は車線を変えることができませんし、目的地にたどり着くことも不可能です。そのため、自車は一定の距離手前で停止し、隣接車線が安全であると評価されるのを待つ必要があります。最低停止距離は、シフト長と車線変更最小速度から計算できます。 -他の車両と一緒に公道を走行する場合は、車線変更が実行できないシナリオがあります。例えば、近隣の車線に進入車両があるため、候補パスが安全でない場合が考えられます。その場合、自車位置は車線変更することができず、ゴールに到達することはできません。そのため、自車位置は特定の距離で早めに停止し、近隣の車線が安全と評価されるまで待つ必要があります。最小停止距離は、シフトの長さと車線変更の最小速度から計算できます。 ```C++ lane_changing_time = f(shift_length, lat_acceleration, lat_jerk) minimum_lane_change_distance = minimum_prepare_length + minimum_lane_changing_velocity * lane_changing_time + lane_change_finish_judge_buffer ``` -以下の図は、複数車線変更時に車線が塞がれている場合を示しています。 +以下の図は、複数車線変更時に車線が塞がっているタイミングを示しています。 ![multiple-lane-changes](./images/lane_change-when_cannot_change_lanes.png) -### 停車動作 +### 停止動作 -自車の停車動作は、必要な車線変更回数、障害物の有無、および車線変更計画に関する障害物の位置など、さまざまな要素に基づいて決定されます。目的は、さまざまな交通状況に適応しながら、安全かつ効果的な車線変更を可能にする適切な停止地点を選択することです。 +自車の停止動作は、必要な車線変更回数、障害物の有無、障害物の位置と車線変更計画との関連など、さまざまな要因に基づいて決定されます。目的は、さまざまな交通シナリオに適応しながら安全かつ効果的な車線変更を可能にする適切な停止地点を選択することです。 + +次のフローチャートとサブセクションは、障害物が前方にある場合に停止地点を挿入する場所を決定するための条件を説明しています。 -次のフローチャートとサブセクションでは、障害物が前方にある場合に停止地点を挿入する場所の決定条件について説明します。 ```plantuml @startuml @@ -669,49 +670,49 @@ stop @enduml ``` -#### 自車の前方に障害物がある場合の停止位置 +#### 自車前方障害物時の停止位置 -自車が前方に障害物に遭遇した場合は、車線変更の可能性に備えて安全な距離を保ちながら停止します。正確な停止位置は、ターゲット車線が空いているかどうかや、車線変更が遅れる必要があるかに左右されます。以下に、さまざまな停止シナリオの処理方法を示します。 +自車が前方障害物に遭遇した場合、車線変更に備えて安全距離を確保しつつ停止します。正確な停止位置は、ターゲットレーンが空いているのか、または車線変更を遅らせる必要があるかなどの要因によって異なります。以下に、さまざまな停止シナリオの処理方法を説明します。 -##### 車線変更終了間近の場合 +##### 車線変更終点付近の場合 -ターゲット車線に障害物があるかどうかに関係なく、自車は前方の障害物から安全な距離を保ちながら停止し、車線変更に十分なスペースが確保されます。 +ターゲットレーンに障害物があるかどうかに関わらず、自車は前方障害物から安全距離を保ちつつ停止し、車線変更に必要な十分なスペースを確保します。 ![stop_at_terminal_no_block](./images/lane_change-stop_at_terminal_no_block.drawio.svg) ![stop_at_terminal](./images/lane_change-stop_at_terminal.drawio.svg) -##### 自車が車線変更終了間近でない場合 +##### 自車が車線変更終点付近ではない場合 -自車は前方の障害物から安全な距離を保ちながら停止し、車線変更に十分なスペースが確保されます。 +自車は前方障害物から安全距離を保ちつつ停止し、車線変更に必要な十分なスペースを確保します。 ![stop_not_at_terminal_no_blocking_object](./images/lane_change-stop_not_at_terminal_no_blocking_object.drawio.svg) -#### 車線変更セクションに障害物がある場合の自車停止位置 +#### 車線変更セクションに障害物がある場合の自車の停止位置 -ターゲット車線の車線変更セクションに障害物がある場合、自車は通常の車線変更距離を維持せず、前方の障害物に近い場所で停止します。 +ターゲットレーンの車線変更セクション内に障害物がある場合、自車は車線変更に必要な通常の距離を保たずに、前方障害物に近づいて停止します。 -##### 車線変更終了間近の場合 +##### 車線変更終点付近の場合 -ターゲット車線に障害物があるかどうかに関係なく、自車は前方の障害物から安全な距離を保ちながら停止し、車線変更を可能にします。 +ターゲットレーンに障害物があるかどうかに関わらず、自車は前方障害物から安全距離を保ちつつ停止し、車線変更を行います。 ![stop_at_terminal_no_block](./images/lane_change-stop_at_terminal_no_block.drawio.svg) ![stop_at_terminal](./images/lane_change-stop_at_terminal.drawio.svg) -##### 車線変更終了間近でない場合 +##### 車線変更終点付近ではない場合 -ターゲット車線の車線変更セクションに障害物がない場合、自車は前方の障害物から安全距離を確保しながら停止し、車線変更に対応します。 +ターゲットレーンの車線変更セクション内に障害物がない場合、自車は前方障害物から安全距離を保ちつつ停止し、車線変更を行います。 ![stop_not_at_terminal_no_blocking_object](./images/lane_change-stop_not_at_terminal_no_blocking_object.drawio.svg) -ターゲット車線の車線変更セクション内に障害物がある場合、自車は通常の車線変更に必要な距離を維持せず、前方の障害物に近い場所で停止します。 +ターゲットレーンの車線変更セクション内に障害物がある場合、自車は車線変更に必要な通常の距離を保たずに、前方障害物に近づいて停止します。 ![stop_not_at_terminal](./images/lane_change-stop_not_at_terminal.drawio.svg) -#### ターゲット車線が遠い場合 +#### ターゲットレーンが遠い場合 -車線変更用のターゲット車線が遠く、現在の車線に隣接していない場合、自車は車線変更用の通常の距離を維持する必要がないため、前方の障害物に近づいて停止します。 +車線変更用のターゲットレーンが遠く離れていて、現在のレーンに隣接していない場合、自車は車線変更に必要な通常の距離を保つ必要がないため、前方障害物に近づいて停止します。 ![stop_far_from_target_lane](./images/lane_change-stop_far_from_target_lane.drawio.svg) @@ -719,28 +720,33 @@ stop ### スタック時の車線変更 -自車が停止していて、次のいずれかの条件を満たす場合、スタックしていると見なされます。 +自車が停止していて、次のいずれかの条件を満たしている場合、スタックしていると見なされます。 -- 現在の車線の前方に障害物がある -- 自車が現在の車線の末端に位置している +- 現在のレーンに前方障害物がある。 +- 自車が現在のレーンの終端に位置している。 -この場合、通常の時間と比較して車線変更の安全確認は緩和されます。 -詳細は、「車線変更時の衝突確認」の「stuck」セクションを参照してください。 -この機能を実現するために、前述のセクションで前進する障害物に対してある程度のマージンを保って停止する機能が実行されます。 +この場合、車線変更の安全確認は通常時よりも緩和されています。 +詳細については、'Collision checks during lane change'の'stuck'セクションを参照してください。 +この機能を実現するために、前述のセクションで'post resampling'障害物に対してマージンを保って停止する機能が実行されています。 -### 車線変更に関する制御 +### 車線変更の規制 -交差点や信号で車線変更を制御する場合、車線変更モジュールはそれらの付近で無効になります。 -交差点や信号で車線変更を制御するには、`regulation.crosswalk`, `regulation.intersection`または`regulation.traffic_light`を`true`に設定します。 -自車がスタックした場合、スタックを避けるため車線変更が交差点/交差点で有効になります。 -自車が`stuck_detection.stop_time`秒以上停止すると、スタックと見なされます。 -自車の速度が`stuck_detection.velocity`未満の場合、停止していると見なされます。 +横断歩道、交差点、または信号で車線変更を規制する場合、それらの付近では車線変更モジュールが無効になります。 -### 車線変更の中断 +横断歩道、交差点、または信号で車線変更を規制するには、`regulation.crosswalk`、`regulation.intersection`、または `regulation.traffic_light` を `true` に設定します。 + +自車が立ち往生した場合、立ち往生を避けるために、横断歩道や交差点で車線変更を有効にします。 + +自車が `stuck_detection.stop_time` 秒以上停止した場合、立ち往生とみなされます。 + +自車の速度が `stuck_detection.velocity` より小さい場合、停止しているとみなされます。 + +### 車線変更の中止 + +中断プロセスは、「キャンセル」、「中止」、「停止/クルーズ」の3つの異なる結果をもたらす可能性があります。 -中断プロセスは、取り消し、中断、停止/巡航の3つの異なる結果をもたらす可能性があります。 +以下は、中断車線変更チェックの流れを示しています。 -以下は、車線変更の中断チェックの流れを示しています。 ```plantuml @startuml @@ -786,9 +792,10 @@ detach @enduml ``` -車線変更中は、自車減速を考慮した安全確認が実施され、`cancel.deceleration_sampling_num` 個の減速パターンの安全確認を実施し、すべての減速パターンで中止条件が満たされた場合は、車線変更がキャンセルされます。 +車線変更中に、車輌の減速度を考慮し安全チェックが行われ、`cancel.deceleration_sampling_num` 減速パターンに対して安全チェックが行われます。すべての減速パターンに対して中止条件が満たされる場合、車線変更はキャンセルされます。 + +安全でない状態と安全な状態が交互に出現するために生じる車線変更経路の振動に対する予防策として、中止またはキャンセル操作を実行する前に、追加のヒステリシス・カウントチェックが実装されています。安全でない場合、`unsafe_hysteresis_count_` がインクリメントされ、`unsafe_hysteresis_threshold` と比較されます。これを超えると中止条件のチェックが促され、最近の安全評価を考慮して決定が行われます。このメカニズムは意思決定を安定させ、一時的な安全でない状態による突然の変化を防止します。 -安全と危険な状態の交互によって発生する車線変更経路の振動に対する予防策として、中止またはキャンセル操作を実行する前に、ヒステリシスカウントチェックが追加で実装されています。安全でない場合は、`unsafe_hysteresis_count_` がインクリメントされ、`unsafe_hysteresis_threshold` と比較されます。これを超えると中止条件のチェックが促され、最近の安全評価を考慮に入れて決定が下されるようにします(上のフローチャートで示されています)。このメカニズムは意思決定を安定させ、一時的な安全でない状態による急激な変化を防ぎます。 ```plantuml @startuml @@ -811,37 +818,38 @@ endif @enduml ``` -## キャンセル +#### キャンセル -車線変更軌道が安全ではないと評価された場合、自車位置が現在の車線をまだ離れていない場合、軌道がリセットされ、自車位置は車線フォロー操作を再開します。 +もし車線変更軌跡が安全ではないと評価された場合、エゴ車両が現在の車線から逸脱していない場合は、軌跡がリセットされ、エゴ車両は車線維持操作を再開します。 -`enable_on_prepare_phase` を `true` に設定することでこの関数を有効化できます。 +この関数は `enable_on_prepare_phase` を `true` に設定することで有効にできます。 -次の図はキャンセル処理を示しています。 +キャンセル処理のイメージを以下に示します。 -![cancel](./images/lane_change-cancel.png) +![キャンセル](./images/lane_change-cancel.png) -## 中断 +#### 中断 -自車位置が既に現在の車線を離れているとします。その場合、パスをキャンセルすることは危険であり、自車位置が急激に進行方向を変えることになります。この場合、進行方向の変更を最小限に抑えながら、自車位置が現在のパスに戻ることを可能にする軌道を計画する必要があります。この場合、車線変更モジュールは中断パスを生成します。次の図は中断パスの例を示しています。この関数は周囲にある物体の有無やその反応を確認しないため、安全な中断処理が保障されません。`enable_on_prepare_phase` と `enable_on_lane_changing_phase` の両方を `true` に設定することで、この関数を手動で有効化できます。この機能を動作させるには、`max_lateral_jerk` パラメータを大きな値に設定する必要があります。 +エゴ車両がすでに現在の車線から逸脱しているとします。その場合、経路をキャンセルすることは危険であり、エゴ車両が突然進行方向を変えることになります。この場合、エゴ車両が進行方向の変更を最小限に抑えながら現在の経路に戻る軌跡を計画する必要があります。この場合、車線変更モジュールは中断経路を生成します。次の画像は中断経路の例を示しています。この関数は、周囲のオブジェクトやそれらの反応を確認していないため、安全な中断処理を保証しないことに注意してください。この関数は `enable_on_prepare_phase` と `enable_on_lane_changing_phase` の両方を `true` に設定することで手動で有効にすることができます。この関数を動作させるには、パラメータ `max_lateral_jerk` に高い値を設定する必要があります。 -![abort](./images/lane_change-abort.png) +![中断](./images/lane_change-abort.png) -## 停止/巡航 +#### 停止/巡航 -この最後の動作は、自車位置が現在の車線を離れた場合にも発生します。中断関数が無効化されているか、中断がもはや不可能な場合、自車位置は停止するか障害物巡航モードに移行しようとします。これらの重要なシナリオ中に発生する予期しない動作により、このモジュールは安全な操作を保障しません。次の図は状況を示しています。 +最後の動作は、エゴ車両が現在の車線から逸脱した場合にも発生します。中断関数が無効になっているか、中断がもはや不可能な場合、エゴ車両は停止するか障害物巡航モードに移行します。このモジュールは、これらの重大なシナリオ中に発生する予期しない動作のために、安全な操作を保証しないことに注意してください。イメージを次に示します。 -![stop](./images/lane_change-cant_cancel_no_abort.png) +![停止](./images/lane_change-cant_cancel_no_abort.png) ## 車線変更完了チェック -自車位置が車線変更に成功したかどうかを判断するには、縦方向基準または横方向基準のいずれかが満たされている必要があります。 +エゴ車両が車線変更に成功したかどうかを判断するには、縦方向または横方向の基準のいずれかを満たす必要があります。 + +縦方向の基準の場合、エゴ車両は車線変更終了姿勢を通り抜け、そこから `finish_judge_buffer` 距離以内にある必要があります。次にモジュールはエゴ車両が目標車線にいるかどうかを確認します。trueの場合、モジュールは成功を返します。このチェックにより、プランニングマネージャーがエゴ車両の現在の姿勢に基づいてルートレーンレットを正しく更新します。このチェックがない場合、エゴ車両が障害物を回避しながら車線変更している場合、および現在の姿勢が元の車線にある場合、プランニングマネージャーはルートレーンレットを元の車線として設定する可能性があります。これはエゴ車両にもう一度車線変更を実行するように強制します。目標車線チェックを使用すると、エゴ車両が目標車線にいることが確認され、プランニングマネージャーはルートレーンレットを正しく更新できます。 -縦方向基準では、自車位置は車線変更の終端ポーズを通過し、その距離が `finish_judge_buffer` 内にある必要があります。モジュールはその後、自車位置が目標車線にあるかどうかを確認します。true の場合、モジュールは success を返します。このチェックにより、プランナーマネージャーが自車位置の現在のポーズに基づいてルートレーンレットを正しく更新します。このチェックがない場合、自車位置が障害物を回避しながら車線変更を行っていて現在のポーズが元の車線にある場合、プランナーマネージャーはルートレーンレットを元の車線として設定します。これにより、自車位置はもう一度車線変更を実行することになります。目標車線チェックがあれば、自車位置が目標車線にあることが確認され、プランナーマネージャーはルートレーンレットを正しく更新できます。 +縦方向の基準が満たされない場合、モジュールは横方向の基準を評価します。横方向の基準の場合、エゴ車両は目標車線のセンターラインから `finish_judge_lateral_threshold` 距離以内にある必要があり、角度偏差は `finish_judge_lateral_angle_deviation` 度以内である必要があります。角度偏差チェックにより、急な操舵がないことが保証されます。角度偏差を大きく設定すると、エゴ車両の向きがセンターラインから大きくずれる可能性があり、軌跡フォロワーがセンターラインに戻るために積極的な操舵を行います。角度偏差値をできるだけ小さくすることで、この問題を回避できます。 -縦方向基準が満たされない場合、モジュールは横方向基準を評価します。横方向基準では、自車位置は目標車線のセンターラインから `finish_judge_lateral_threshold` 距離以内にある必要があり、角度偏差が `finish_judge_lateral_angle_deviation` 度以内である必要があります。角度偏差チェックにより、急激な操舵がないことが保証されます。角度偏差が大きすぎると、自車位置の向きがセンターラインから大きく逸脱し、軌道追従器が積極的に操舵を修正してセンターラインに戻ろうとします。角度偏差の値を可能な限り小さくすることで、この問題を回避できます。 +車線変更完了を決定するプロセスを次の図に示します。 -車線変更完了の判定プロセスは、次の図に示します。 ```plantuml @startuml @@ -890,230 +898,202 @@ endif ## パラメータ -### 必須車線変更パラメータ - -以下のパラメータは [lane_change.param.yaml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml) で構成できます。 - -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| -------------------------------------------- | ------ | ------ | ---------------------------------------------------------------------------------------------------------------- | ------------------ | -| `backward_lane_length` | [m] | double | 車線変更のターゲット車線を後方からチェックする長さ | 200.0 | -| `prepare_duration` | [m] | double | 自動運転車が車線変更の準備をするための時間 | 4.0 | -| `backward_length_buffer_for_end_of_lane` | [m] | double | 車線変更を開始するために自動運転車が十分な距離を確保するための、車線末端のバッファ | 3.0 | -| `backward_length_buffer_for_blocking_object` | [m] | double | 車両の正面に障害物がある場合に車線変更を開始するために自動運転車が十分な距離を確保するための、車線末端のバッファ | 3.0 | -| `backward_length_from_intersection` | [m] | double | 最後の交差点からの距離のしきい値。この距離以内では車線変更経路が無効またはキャンセルされる | 5.0 | -| `lane_change_finish_judge_buffer` | [m] | double | 車線変更プロセスの完了を確認するために使用される追加のバッファ | 2.0 | -| `lane_changing_lateral_jerk` | [m/s3] | double | 車線変更経路を生成するための横方向加速度値 | 0.5 | -| `minimum_lane_changing_velocity` | [m/s] | double | 車線変更プロセス中の最小速度 | 2.78 | -| `prediction_time_resolution` | [s] | double | 障害物の経路補間と衝突チェックのための時間分解能 | 0.5 | -| `longitudinal_acceleration_sampling_num` | [-] | int | 縦方向加速度の影響を受ける車線変更可能な経路の数 | 3 | -| `lateral_acceleration_sampling_num` | [-] | int | 横方向加速度の影響を受ける車線変更可能な経路の数 | 3 | -| `object_check_min_road_shoulder_width` | [m] | double | 車線に路側帯がない場合、路側帯と見なされる幅 | 0.5 | -| `object_shiftable_ratio_threshold` | [-] | double | 中心線からこの距離比内にある車両は、駐車車両から除外される | 0.6 | -| `min_length_for_turn_signal_activation` | [m] | double | 自動運転車が車線変更の最小距離にこの長さまで近づいたら、ターンシグナルが有効になる | 10.0 | -| `length_ratio_for_turn_signal_deactivation` | [-] | double | 自動運転車が車線変更の終了点にこの距離比まで近づいたら、ターンシグナルが無効になる | 0.8 | -| `max_longitudinal_acc` | [-] | double | 車線変更の最大縦方向加速度 | 1.0 | -| `min_longitudinal_acc` | [-] | double | 車線変更の最大縦方向減速度 | -1.0 | -| `lateral_acceleration.velocity` | [m/s] | double | 横方向加速度計算のための基準速度(参照テーブル) | [0.0, 4.0, 10.0] | -| `lateral_acceleration.min_values` | [m/ss] | double | 速度に対応する最小横方向加速度値(参照テーブル) | [0.4, 0.4, 0.4] | -| `lateral_acceleration.max_values` | [m/ss] | double | 速度に対応する最大横方向加速度値(参照テーブル) | [0.65, 0.65, 0.65] | +### 必須の車線変更パラメータ + +以下のパラメータは [lane_change.param.yaml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/lane_change/lane_change.param.yaml) で設定できます。 + +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------------------- | ---- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `backward_lane_length` | [m] | double | レーン変更の対象となるレーンに進行してくる物体を確認するための後方長の距離 | 200.0 | +| `backward_length_buffer_for_end_of_lane` | [m] | double | エゴカーがレーン変更を開始するために十分な距離を確保するための、車線の終端からのバッファ長 | 3.0 | +| `backward_length_buffer_for_blocking_object` | [m] | double | 前方に障害物がある場合に、エゴカーがレーン変更を開始するために十分な距離を確保するための、車線の終端からのバッファ長 | 3.0 | +| `backward_length_from_intersection` | [m] | double | 最後の交差点からの距離しきい値。この距離を超えると、レーン変更のパスが無効またはキャンセルされる | 5.0 | +| `trajectory.prepare_duration` | [m] | double | エゴカーがレーン変更を実行する準備をするための時間 | 4.0 | +| `trajectory.lateral_jerk` | [m/s3] | double | レーン変更のパス生成における横方向のジャーク値 | 0.5 | +| `trajectory.minimum_lane_changing_velocity` | [m/s] | double | レーン変更中の最小速度 | 2.78 | +| `trajectory.lon_acc_sampling_num` | [-] | int | 縦方向加速度の影響を受けるレーン変更可能な軌道の数 | 3 | +| `trajectory.lat_acc_sampling_num` | [-] | int | 横方向加速度の影響を受けるレーン変更可能な軌道の数 | 3 | +| `trajectory.max_longitudinal_acc` | [m/s2] | double | レーン変更時の最大縦方向加速度 | 1.0 | +| `trajectory.min_longitudinal_acc` | [m/s2] | double | レーン変更時の最大縦方向減速度 | -1.0 | +| `min_length_for_turn_signal_activation` | [m] | double | エゴカーが最小レーン変更長の距離まで近づくと、ウインカーが作動する | 10.0 | +| `lateral_acceleration.velocity` | [m/s] | double | 横方向加速度を計算するための参照速度(ルックアップテーブル) | [0.0, 4.0, 10.0] | +| `lateral_acceleration.min_values` | [m/s2] | double | 速度に対応する最小横方向加速度値(ルックアップテーブル) | [0.4, 0.4, 0.4] | +| `lateral_acceleration.max_values` | [m/s2] | double | 速度に対応する最大横方向加速度値(ルックアップテーブル) | [0.65, 0.65, 0.65] | ### 車線変更完了判定パラメータ -車線変更完了を判定するために、以下のパラメータを使用します。 - -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------- | ---- | ------ | ------------------------------------------------------------------------------------------ | ------------ | -| `lane_change_finish_judge_buffer` | [m] | double | レーン変更終了姿勢からの縦方向距離 | 2.0 | -| `finish_judge_lateral_threshold` | [m] | double | ターゲットレーンの中心線からの横方向距離。`finish_judge_lateral_angle_deviation`と併用する | 0.1 | -| `finish_judge_lateral_angle_deviation` | [度] | double | ターゲットレーンの中心線に対する自車角度偏差。`finish_judge_lateral_threshold`と併用する | 2.0 | - -### 車線変更規制 - -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------- | ---- | -------- | ---------------------------------- | ------------ | -| `regulation.crosswalk` | [-] | ブール値 | 横断歩道間での車線変更を許可する | true | -| `regulation.intersection` | [-] | ブール値 | 交差点間での車線変更を許可する | true | -| `regulation.traffic_light` | [-] | ブール値 | 信号間での車線変更の実行を許可する | true | - -### 自車位置検出 +車線変更の完了を判断するため、以下のパラメータが使用されます。 + +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :------------------------------------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------ | ------------- | +| `lane_change_finish_judge_buffer` | [m] | double | 車線変更終了地点を基準とした縦方向距離 | 2.0 | +| `finish_judge_lateral_threshold` | [m] | double | 目標車線の路肩線からの横方向距離。`finish_judge_lateral_angle_deviation` と併用されます | 0.1 | +| `finish_judge_lateral_angle_deviation` | [度] | double | 自車と目標車線の路肩線の角度偏差。`finish_judge_lateral_threshold` と併用されます | 2.0 | + +### レーン変更規則 + +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------- | ---- | ------- | ------------------------------------------------------------------------ | ------------- | +| `regulation.crosswalk` | [-] | ブール | 横断歩道間の車線変更を許可 | true | +| `regulation.intersection` | [-] | ブール | 交差点間の車線変更を許可 | true | +| `regulation.traffic_light` | [-] | ブール | 信号間の車線変更を許可 | true | + +### 自車位置固着検知 + +| 名称 | 単位 | タイプ | 説明 | 既定値 | +| :-------------------------- | ----- | ------ | ---------------------------------------------------------- | -------- | +| `stuck_detection.velocity` | [m/s] | 倍精度 | 自車位置のスタック検出のための速度閾値 | 0.1 | +| `stuck_detection.stop_time` | [s] | 倍精度 | 自車位置のスタック検出のための停止時間閾値 | 3.0 | + +### レーンチェンジ遅延 + +| 名前 | ユニット | タイプ | 説明 | デフォルト値 | +|---|---|---|---|---| +| `delay_lane_change.enable` | [-] | ブール値 | レーンチェンジ遅延機能を有効/無効にするフラグ | true | +| `delay_lane_change.check_only_parked_vehicle` | [-] | ブール値 | 遅延機能を駐車車両のみに限定するフラグ | false | +| `delay_lane_change.min_road_shoulder_width` | [m] | double | 駐車車両をチェックする際に、レーンに路肩がない場合、路肩と見なされる幅 | 0.5 | +| `delay_lane_change.th_parked_vehicle_shift_ratio` | [-] | double | 中心線からこの距離比率を超える停止車両は駐車車両と見なされる | 0.6 | + +### 衝突確認 + +#### 対象物体 + +| 名前 | 単位 | タイプ | 説明 | 初期値 | +| :-------------------------- | ---- | ------- | ------------------------------------------------------ | -------- | +| `target_object.car` | [-] | ブール | 安全性の確認に自動車オブジェクトを含める | true | +| `target_object.truck` | [-] | ブール | 安全性の確認にトラックオブジェクトを含める | true | +| `target_object.bus` | [-] | ブール | 安全性の確認にバスオブジェクトを含める | true | +| `target_object.trailer` | [-] | ブール | 安全性の確認にトレーラーオブジェクトを含める | true | +| `target_object.unknown` | [-] | ブール | 安全性の確認に不明なオブジェクトを含める | true | +| `target_object.bicycle` | [-] | ブール | 安全性の確認に自転車オブジェクトを含める | true | +| `target_object.motorcycle` | [-] | ブール | 安全性の確認にオートバイオブジェクトを含める | true | +| `target_object.pedestrian` | [-] | ブール | 安全性の確認に歩行者オブジェクトを含める | true | + +#### 共通 + +| 名 | 単位 | 型 | 説明 | デフォルト値 | +| ------------------------------------------ | ---- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `safety_check.lane_expansion.left_offset` | m | double | 探索領域の左端を拡張し、以前は左側にあったオブジェクトが検出されて標的として登録されるようにする。 | 0.0 | +| `safety_check.lane_expansion.right_offset` | m | double | 探索領域の右端を拡張し、以前は右側にあったオブジェクトが検出されて標的として登録されるようにする。 | 0.0 | + +#### 追加パラメーター + +| Name | Unit | Type | Description | Default value | +|---|---|---|---|---| +| `collision_check.enable_for_prepare_phase.general_lanes` | [-] | ブール値 | 明示的に他の設定でカバーされていない状況(例:交差点)で、準備フェーズから衝突チェックを実行します。 `false` の場合、衝突チェックは車線変更フェーズでのみ評価されます。 | false | +| `collision_check.enable_for_prepare_phase.intersection` | [-] | ブール値 | 自車が交差点にいる場合、準備フェーズから衝突チェックを実行します。 `false` の場合、衝突チェックは車線変更フェーズでのみ評価されます。 | true | +| `collision_check.enable_for_prepare_phase.turns` | [-] | ブール値 | 自車がターン指示タグが付いたレーンレットにいる場合、準備フェーズから衝突チェックを実行します。 `false` の場合、衝突チェックは車線変更フェーズでのみ評価されます。 | true | +| `collision_check.check_current_lanes` | [-] | ブール値 | true の場合、車線変更モジュールは衝突評価のために常に現在の車線内のオブジェクトをチェックします。 false の場合、自車がスタックしている場合にのみ現在の車線内のオブジェクトをチェックします。 | false | +| `collision_check.check_other_lanes` | [-] | ブール値 | true の場合、車線変更モジュールは衝突評価時に他の車線内のオブジェクトを含めます。 | false | +| `collision_check.use_all_predicted_paths` | [-] | ブール値 | false の場合、最大信頼度の予測されたパスのみを使用します。 | true | +| `collision_check.prediction_time_resolution` | [秒] | double | オブジェクトのパス補間と衝突チェックの時間分解能。 | 0.5 | +| `collision_check.yaw_diff_threshold` | [rad] | double | RSS ベースの衝突チェックを実行する際の自車とオブジェクト間の最大ヨー差 | 3.1416 | + +#### 車線変更パスの計算時における安全制約 + +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------------------- | ---- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| `safety_check.execution.expected_front_deceleration` | [m/s^2] | double | 前方車両の急ブレーキ時の最大の減速度 (※1) | -1.0 | +| `safety_check.execution.expected_rear_deceleration` | [m/s^2] | double | 後方車両の急ブレーキ時の最大の減速度 (※1) | -1.0 | +| `safety_check.execution.rear_vehicle_reaction_time` | [s] | double | 後方車両のドライバーが、前方車両の急ブレーキに気づいてからブレーキを踏むまでのリアクションタイム | 2.0 | +| `safety_check.execution.rear_vehicle_safety_time_margin` | [s] | double | ドライバーが急ブレーキをかけた際の後方車両が完全に停止するまでの時間バッファ | 1.0 | +| `safety_check.execution.lateral_distance_max_threshold` | [m] | double | 2つのオブジェクト間の横方向の距離が十分かどうか、レーン変更が安全かどうかを判断するために使用される横方向の距離のしきい値 | 2.0 | +| `safety_check.execution.longitudinal_distance_min_threshold` | [m] | double | 2つのオブジェクト間の縦方向の距離が十分かどうか、レーン変更が安全かどうかを判断するために使用される縦方向の距離のしきい値 | 3.0 | +| `safety_check.execution.longitudinal_velocity_delta_time` | [m] | double | 各予測点における車両間の実際のギャップを計算するために使用される時間乗数 (RSS距離ではない) | 0.8 | + +#### 停止または駐車中の車両に対する安全制約 + +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :--------------------------------------------------------- | -------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | +| `safety_check.parked.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキをかけたときの、前方物体の最大減速度。(*1) | -1.0 | +| `safety_check.parked.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキをかけたときの、後方物体の最大減速度。(*1) | -2.0 | +| `safety_check.parked.rear_vehicle_reaction_time` | [s] | double | 前方車両の急ブレーキに気づいてから、ブレーキを踏むまでの後方車両のドライバーの反応時間。 | 1.0 | +| `safety_check.parked.rear_vehicle_safety_time_margin` | [s] | double | ドライバーが急ブレーキをかけたとき、後方車両が完全に停止するまでの時間バッファ。 | 0.8 | +| `safety_check.parked.lateral_distance_max_threshold` | [m] | double | オブジェクト間の側方距離が十分であり、車線変更が安全であるかどうかを判断するために使用される側方距離のしきい値。 | 1.0 | +| `safety_check.parked.longitudinal_distance_min_threshold` | [m] | double | オブジェクト間の縦方向距離が十分であり、車線変更が安全であるかどうかを判断するために使用される縦方向距離のしきい値。 | 3.0 | +| `safety_check.parked.longitudinal_velocity_delta_time` | [m] | double | 車両間の実際のギャップを各予測点で計算するために使用される時間乗数(RSS距離ではない)。 | 0.8 | + +##### 車線変更経路の中止に関する安全制約 + +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :-----------|:--------|:---------|:------------|:------------ | +| `safety_check.cancel.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキをした場合の前方車両の最大減速度。(\*1) | -1.0 | +| `safety_check.cancel.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキをした場合の後方車両の最大減速度。(\*1) | -2.0 | +| `safety_check.cancel.rear_vehicle_reaction_time` | [s] | double | 後方車両の運転者が前方車両の急ブレーキに気づいてからブレーキを踏むまでの反応時間。 | 1.5 | +| `safety_check.cancel.rear_vehicle_safety_time_margin` | [s] | double | 後方車両の運転者が急ブレーキをかけた場合に完全に停止するまでの時間バッファ。 | 0.8 | +| `safety_check.cancel.lateral_distance_max_threshold` | [m] | double | 車両間で車線変更が安全かどうかを判断するために使用される横方向距離の閾値。 | 1.0 | +| `safety_check.cancel.longitudinal_distance_min_threshold` | [m] | double | 車両間で車線変更が安全かどうかを判断するために使用される縦方向距離の閾値。 | 2.5 | +| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | 各予測点における車両間の実際のギャップを計算するために使用される時間乗数(RSS距離ではない)。 | 0.6 | + +##### 車両が停止しているときに車線変更経路を計算する際に使用されるセーフティ制約 + +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| ------------------------------------------------------------ | ----- | --- | ------------------------------------------------------------------------------------------------------------------------- | ----------- | +| `safety_check.stuck.expected_front_deceleration` | m/s^2 | double | 前方車両が急ブレーキを実行したときの前方車両の最大減速(*1) | -1.0 | +| `safety_check.stuck.expected_rear_deceleration` | m/s^2 | double | 後方車両が急ブレーキを実行したときの後方車両の最大減速(*1) | -1.0 | +| `safety_check.stuck.rear_vehicle_reaction_time` | s | double | 前方車両の急ブレーキに気付いた時点からブレーキを踏む時点までの、後方車両のドライバーの反応時間 | 2.0 | +| `safety_check.stuck.rear_vehicle_safety_time_margin` | s | double | 後方車両のドライバーが急ブレーキを実行した場合に、後方車両が完全に停止するまでの時間バッファ | 1.0 | +| `safety_check.stuck.lateral_distance_max_threshold` | m | double | 2 つの車両間の横方向距離が十分であり、車線変更が安全かどうかを判断するために使用される横方向距離のしきい値 | 2.0 | +| `safety_check.stuck.longitudinal_distance_min_threshold` | m | double | 2 つの車両間の縦方向距離が十分であり、車線変更が安全かどうかを判断するために使用される縦方向距離のしきい値 | 3.0 | +| `safety_check.stuck.longitudinal_velocity_delta_time` | m | double | 各予測ポイント(RSS 距離ではない)における車両間の実際のギャップを計算するために使用される時間乗数 | 0.8 | + +(\*1) 値はマイナスの必要があります。 ---- - -障害物が自車を完全に包囲して動作不可能にした状態を検出します。 - -| 名称 | 単位 | 型 | 説明 | 初期値 | -| :-------------------------- | ----- | ------ | ------------------------------------------ | ------ | -| `stuck_detection.velocity` | [m/s] | double | 自車位置の静止検出における速度しきい値 | 0.1 | -| `stuck_detection.stop_time` | [秒] | double | 自車位置の静止検出における停止時間しきい値 | 3.0 | - -### 衝突チェック - -#### 目標オブジェクト - -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :------------------------- | ---- | ------- | -------------------------------------------- | ------------ | -| `target_object.car` | [-] | boolean | 安全チェックに自動車オブジェクトを含める | true | -| `target_object.truck` | [-] | boolean | 安全チェックにトラックオブジェクトを含める | true | -| `target_object.bus` | [-] | boolean | 安全チェックにバスオブジェクトを含める | true | -| `target_object.trailer` | [-] | boolean | 安全チェックにトレーラーオブジェクトを含める | true | -| `target_object.unknown` | [-] | boolean | 安全チェックに不明オブジェクトを含める | true | -| `target_object.bicycle` | [-] | boolean | 安全チェックに自転車オブジェクトを含める | true | -| `target_object.motorcycle` | [-] | boolean | 安全チェックにオートバイオブジェクトを含める | true | -| `target_object.pedestrian` | [-] | boolean | 安全チェックに歩行者オブジェクトを含める | true | - -#### common - -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :----------------------------------------- | ---- | ---------------- | ---------------------------------------------------------------------------------------------------- | ------------ | -| `safety_check.lane_expansion.left_offset` | [m] | 倍精度浮動小数点 | 検出領域の左側の境界を拡大し、以前は左側にあったオブジェクトの検出とターゲットへの登録を可能にする。 | 0.0 | -| `safety_check.lane_expansion.right_offset` | [m] | 倍精度浮動小数点 | 検出領域の右側の境界を拡大し、以前は右側にあったオブジェクトの検出とターゲットへの登録を可能にする。 | 0.0 | - -#### 追加パラメータ - -| Name | Unit | Type | Description | Default value | -| :------------------------------------------------------- | ----- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | -| `enable_collision_check_for_prepare_phase.general_lanes` | [-] | boolean | Planningコンポーネントの準備フェーズから衝突チェックを実行します(交差点など、他の設定で明示的にカバーされていない状況の場合)。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | false | -| `enable_collision_check_for_prepare_phase.intersection` | [-] | boolean | 自車が交差点にいる場合、準備フェーズから衝突チェックを実行します。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | true | -| `enable_collision_check_for_prepare_phase.turns` | [-] | boolean | 自車が旋回方向タグのあるLaneletにいる場合、準備フェーズから衝突チェックを実行します。`false`の場合、衝突チェックは車線変更フェーズのみで評価されます。 | true | -| `prepare_phase_ignore_target_speed_thresh` | [m/s] | double | 設定された値より小さいオブジェクトの速度について、準備フェーズでの衝突チェックを無視します。`enable_collision_check_at_prepare_phase`が`true`である必要があります。 | 0.1 | -| `check_objects_on_current_lanes` | [-] | boolean | trueの場合、車線変更モジュールは衝突評価を実行する際、現在の車線上のオブジェクトをチェックします。 | false | -| `check_objects_on_other_lanes` | [-] | boolean | trueの場合、車線変更モジュールは衝突評価を実行する際、他の車線上のオブジェクトを含めます。 | false | -| `use_all_predicted_path` | [-] | boolean | falseの場合、信頼度が最も高い予測パスのみを使用します。 | true | -| `safety_check.collision_check_yaw_diff_threshold` | [rad] | double | RSSベースの衝突チェックを実行する際の自車とオブジェクト間の最大ヨー角差 | 3.1416 | - -#### 車線変更経路が計算中の安全性制約 - -``` - -``` - -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :----------------------------------------------------------- | ------ | ------ | ---------------------------------------------------------------------------------------------------------- | ------------ | -| `safety_check.execution.expected_front_deceleration` | [m/s²] | double | 前方の車両が急ブレーキを行った場合の前方対象物の最大減速度。(\*1) | -1.0 | -| `safety_check.execution.expected_rear_deceleration` | [m/s²] | double | 後方の車両が急ブレーキを行った場合の後方対象物の最大減速度。(\*1) | -1.0 | -| `safety_check.execution.rear_vehicle_reaction_time` | [s] | double | 前方車両の急ブレーキに気付いた時点からブレーキを踏むまでの後方車両の運転者の反応時間。 | 2.0 | -| `safety_check.execution.rear_vehicle_safety_time_margin` | [s] | double | 後方車両の運転者が急ブレーキを行ったときに完全停止状態になるまでの時間バッファ。 | 1.0 | -| `safety_check.execution.lateral_distance_max_threshold` | [m] | double | 2 つの対象物間の横方向距離が十分で、車線変更が安全かどうかを判断するために使用される横方向距離のしきい値。 | 2.0 | -| `safety_check.execution.longitudinal_distance_min_threshold` | [m] | double | 2 つの対象物間の縦方向距離が十分で、車線変更が安全かどうかを判断するために使用される縦方向距離のしきい値。 | 3.0 | -| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | 予測された各時点での車両間の実際のギャップを計算するために使用される時間乗数(RSS 距離ではない)。 | 0.8 | - -#### 停止または駐車車両に対する安全制約 - -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :-------------------------------------------------------- | ------- | ------ | ----------------------------------------------------------------------------------------------------------------- | ------------ | -| `safety_check.parked.expected_front_deceleration` | [m/s^2] | double | 前走車が急ブレーキをかけたときの前方の物体の最大の減速度。(\*1) | -1.0 | -| `safety_check.parked.expected_rear_deceleration` | [m/s^2] | double | 後続車が急ブレーキをかけたときの後方の物体の最大の減速度。(\*1) | -2.0 | -| `safety_check.parked.rear_vehicle_reaction_time` | [s] | double | 後続車のドライバーが、前走車の急ブレーキに気づいてからブレーキを踏むまでの反応時間。 | 1.0 | -| `safety_check.parked.rear_vehicle_safety_time_margin` | [s] | double | 後続車のドライバーが急ブレーキをかけたときに完全に停止するための時間バッファ。 | 0.8 | -| `safety_check.parked.lateral_distance_max_threshold` | [m] | double | 2つの物体間の横方向距離が十分かどうか、また車線変更が安全かどうかを判断するために使用される横方向距離のしきい値。 | 1.0 | -| `safety_check.parked.longitudinal_distance_min_threshold` | [m] | double | 2つの物体間の縦方向距離が十分かどうか、また車線変更が安全かどうかを判断するために使用される縦方向距離のしきい値。 | 3.0 | -| `safety_check.parked.longitudinal_velocity_delta_time` | [m] | double | 予測された各ポイントにおける車両間の実際のギャップを計算するために使用される時間乗数(RSS距離ではなく)。 | 0.8 | - -##### 車線変更パスのキャンセルに対するセーフティ制約 - -| 名前 | ユニット | タイプ | 説明 | デフォルト値 | -| --------------------------------------------------------- | -------- | ------ | ------------------------------------------------------------------------------------------------- | ------------ | -| `safety_check.cancel.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキをかけたときの前方車両の最大減速度。(*1) | -1.0 | -| `safety_check.cancel.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキをかけたときの後方車両の最大減速度。(*1) | -2.0 | -| `safety_check.cancel.rear_vehicle_reaction_time` | [s] | double | 前方車両の急ブレーキに気づいてブレーキを踏むまでの後方車両のドライバーの反応時間 | 1.5 | -| `safety_check.cancel.rear_vehicle_safety_time_margin` | [s] | double | 後方車両のドライバーが急ブレーキをかけたときに完全に停止するまでの時間バッファ | 0.8 | -| `safety_check.cancel.lateral_distance_max_threshold` | [m] | double | 2つの車両間の横距離が十分であり、車線変更が安全かどうかを判断するために使用される横距離のしきい値 | 1.0 | -| `safety_check.cancel.longitudinal_distance_min_threshold` | [m] | double | 2つの車両間の縦距離が十分であり、車線変更が安全かどうかを判断するために使用される縦距離のしきい値 | 2.5 | -| `safety_check.cancel.longitudinal_velocity_delta_time` | [m] | double | 各予測点での車両間の実際のギャップを計算するために使用される時間倍率(RSS距離ではない) | 0.6 | - -##### 車両が動けなくなった場合にレーンチェンジパスの計算に使用​​される安全制約 - -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------------------------- | ------- | ------ | ------------------------------------------------------------------------------------------------------------------------- | ------------ | -| `safety_check.stuck.expected_front_deceleration` | [m/s^2] | double | 前方車両が急ブレーキを実行した場合の前方オブジェクトの最大減速度。(\*1) | -1.0 | -| `safety_check.stuck.expected_rear_deceleration` | [m/s^2] | double | 後方車両が急ブレーキを実行した場合の後方オブジェクトの最大減速度。(\*1) | -1.0 | -| `safety_check.stuck.rear_vehicle_reaction_time` | [s] | double | 後方車両の運転手が前方の車両の急ブレーキに気付く瞬間からブレーキを踏む瞬間までの反応時間。 | 2.0 | -| `safety_check.stuck.rear_vehicle_safety_time_margin` | [s] | double | 後方車両の運転手が急ブレーキを実行したときに完全に停止するためのタイムバッファ。 | 1.0 | -| `safety_check.stuck.lateral_distance_max_threshold` | [m] | double | 2つのオブジェクト間の横方向の距離が十分かどうか、および車線変更が安全かどうかを判断するために使用される横方向距離の閾値。 | 2.0 | -| `safety_check.stuck.longitudinal_distance_min_threshold` | [m] | double | 2つのオブジェクト間の縦方向の距離が十分かどうか、および車線変更が安全かどうかを判断するために使用される縦方向距離の閾値。 | 3.0 | -| `safety_check.stuck.longitudinal_velocity_delta_time` | [m] | double | 各予測ポイントでの車両間の実際のギャップを計算するために使用される時間乗数(RSS距離ではない)。 | 0.8 | - -(\*1) この値は負の値でなければなりません。 - -### 車線変更の中止 +### 車線変更の中断 次のパラメータは `lane_change.param.yaml` で構成できます。 -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------- | ------- | ------- | ---------------------------------------------------------------------------------------- | ------------ | -| `cancel.enable_on_prepare_phase` | [-] | boolean | レーン変更のキャンセルを許可 | true | -| `cancel.enable_on_lane_changing_phase` | [-] | boolean | レーン変更の中断を許可 | false | -| `cancel.delta_time` | [s] | double | センタラインに戻るステアリングを開始するのにかかる時間 | 3.0 | -| `cancel.duration` | [s] | double | センタラインに戻るために要する時間 | 3.0 | -| `cancel.max_lateral_jerk` | [m/sss] | double | 中断パスの最大横方向ジャーク | 1000.0 | -| `cancel.overhang_tolerance` | [m] | double | 車両ヘッドがこの許容距離を超えて車線境界を超えた場合、レーン変更のキャンセルは禁止される | 0.0 | -| `cancel.unsafe_hysteresis_threshold` | [-] | int | 安全と不安全の決定の間の頻繁な切り替えを防ぐのに役立つしきい値 | 10 | -| `cancel.deceleration_sampling_num` | [-] | int | レーン変更のキャンセルを安全にするためにチェックする 減速度パターンの数 | 5 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------- | ------- | ------- | ---------------------------------------------------------------------------------------------------------------- | ------------- | +| `cancel.enable_on_prepare_phase` | [-] | boolean | 車線変更をキャンセル可能にする | true | +| `cancel.enable_on_lane_changing_phase` | [-] | boolean | 車線変更の中断可能にする | false | +| `cancel.delta_time` | [s] | double | 中央線に戻るステアリング開始にかかる時間 | 3.0 | +| `cancel.duration` | [s] | double | 中央線復帰の完了にかかる時間 | 3.0 | +| `cancel.max_lateral_jerk` | [m/sss] | double | 中断経路の最大横方向ジャーク | 1000.0 | +| `cancel.overhang_tolerance` | [m] | double | 車両ヘッドが車線境界よりこの許容距離を超過した場合、車線変更はキャンセルされる | 0.0 | +| `cancel.unsafe_hysteresis_threshold` | [-] | int | 安全性と非安全性の判断の頻繁な切り替えを防ぐのに役立つしきい値 | 10 | +| `cancel.deceleration_sampling_num` | [-] | int | 車線変更をキャンセルするための安全を確認するための減速パターンの数 | 5 | ### デバッグ -以下のパラメータは `lane_change.param.yaml` で設定できます。 +次のパラメータは `lane_change.param.yaml` で設定できます。 -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| ---------------------- | ---- | -------- | ---------------------------- | ------------ | -| `publish_debug_marker` | [-] | ブール型 | デバッグマーカーの公開を設定 | `false` | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :--------------------- | ---- | ------- | ---------------------------- | ------------- | +| `publish_debug_marker` | [-] | boolean | デバッグマーカーを公開するフラグ | false | -## デバッグマーカーと可視化 +## デバッグマーカーおよび可視化 + +デバッグマーカーを有効にするには、実行(再起動不要)します。 -デバッグマーカーを有効にするには、(再起動は不要です)を実行します。 ```shell ros2 param set /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner lane_change.publish_debug_marker true ``` -LaneChangeモジュール内の`publish_debug_marker`を`lane_change.param.yaml`で`true`に設定すれば、永続的に効果をもたらします(再起動が必要)。 +または、永続的な効果を得るには `lane_change.param.yaml` で `publish_debug_marker` を `true` に設定するだけです(再起動が必要です)。 次に、マーカーを追加します。 + ```shell /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lane_change_left ``` -## 自動運転ソフトウェアのドキュメント - -### 車線変更戦略 - -#### 概要 - -この戦略では、車両の車線変更に関する予測、決定、実行のためのコンポーネントが提供されます。戦略は、環境内のオブジェクトに関する情報を考慮して、車線変更を実施するかどうかを決定します。 - -#### コンポーネント +rviz2で以下が表示されます。 -- **Planning Planner** - - 車両の軌道と車線変更の実行時間に関する情報を生成します。 -- **Safety Checker** - - 車両の周囲にある物体の安全性を評価し、車線変更が安全かどうかを判断します。 -- **Supervisor** - - PlannerとSafety Checkerからの情報を統合し、車線変更を実施するかどうかを決定します。 +![debug](./images/lane_change-debug-1.png) -### 起動要件 +![debug2](./images/lane_change-debug-2.png) -この戦略を起動するには、次の情報を提供する必要があります。 +![debug3](./images/lane_change-debug-3.png) -- **自車位置** -- **周囲の物体の情報** -- **目標車線** +利用可能な情報 -### 利用可能な情報 - -**rviz2**で利用できる情報。 - -![デバッグ](./images/lane_change-debug-1.png) - -![デバッグ2](./images/lane_change-debug-2.png) - -![デバッグ3](./images/lane_change-debug-3.png) - -**提供される情報:** - -1. 自車と物体の関係、および安全チェック情報 -2. 最新の安全チェック位置までの自車位置(補間) -3. オブジェクトの安全性(ポリゴンの色で表示:緑 = 安全、赤 = 安全でない) +1. 自車と物体との関係、および安全確認情報 +2. 最新の安全確認位置までの自車位置の補間 +3. 物体が安全かどうか、ポリゴンの色で表示 (緑 = 安全、赤 = 危険) 4. 有効な候補パス -5. 車線変更の開始および終了位置 +5. 車線変更開始位置および終了位置 + diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/README.md b/planning/behavior_path_planner/autoware_behavior_path_planner/README.md index 4014ed0e256f9..fe4e657a0d5f4 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/README.md @@ -1,305 +1,244 @@ # 行動経路プランナー -行動経路プランナーの主な目的は、衝突の危険性を最小限に抑えることで自動運転車の安全性を大幅に向上させることです。時間節約による運転効率の向上と、ルールに基づくアプローチによる信頼性の向上を図ります。さらに、ユーザーは独自のカスタム動作モジュールを統合したり、自動車、バス、配送ロボットなどさまざまなタイプの車両や、混雑した都市道路から高速道路までさまざまな環境で使用したりできます。 +行動経路プランナーの主な目的は、事故のリスクを最小限に抑えることで自動運転車両の安全性を大幅に向上させることです。時間短縮による運転効率の向上、ルールベースのアプローチによる信頼性の向上を図っています。さらに、ユーザーは独自のカスタマイズされた行動モジュールを統合したり、自動車、バス、配送ロボットなどのさまざまなタイプの車両や、混雑した都市の道路から高速道路まで、さまざまな環境で使用したりすることができます。 -このモジュールは、自律車両の現在の状況、つまり位置、速度、周囲環境を徹底的に分析することから始まります。この分析により、車線変更や停止に関する重要な運転判断が下され、その後、安全かつ効率的な経路が生成されます。障害物を回避して、他の車両、歩行者、予期しない路上の障害物などの静的および動的障害物に対応しながら、道路形状、交通規則、動的条件を考慮に入れて、安全なナビゲーションを確保します。 +このモジュールは、まずエゴビークルの現在の状況を、その位置、速度、周囲の環境を含めて徹底的に分析します。この分析により、車線変更や停止に関する重要な運転上の判断が下され、その後、安全かつ効率的な経路が生成されます。路面形状、交通ルール、動的な条件を考慮すると同時に、他の車両、歩行者、予期せぬ路面障害物などの静的および動的障害物を回避して、安全なナビゲーションを確保します。 -さらに、このプランナーは他の交通参加者と積極的に対話し、彼らの行動を予測して、それにしたがって車両の経路を調整します。これにより、自律車両の安全性が確保されるだけでなく、交通の流れが円滑になります。速度制限や交通信号などの交通法規を遵守することで、法に則った予測可能な運転行動がさらに保証されます。このプランナーは、急な旋回や急ブレーキを最小限に抑えるよう設計されており、快適で自然な運転体験を目指しています。 +さらに、プランナーは他の交通参加者と積極的に対話し、彼らの行動を予測して車両の経路を調整します。これにより、自動運転車両の安全性が確保されるだけでなく、交通の円滑化にも貢献します。速度制限や交通信号などの交通法規を遵守することで、さらに法的かつ予測可能な運転行動が保証されます。プランナーはまた、急激な操作を最小限に抑えるように設計されており、快適で自然な運転体験を目指しています。 !!! note - [プランニングコンポーネント設計](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/) ドキュメントは、行動経路プランナーモジュールの設計と将来の開発を導く基本的な哲学の概要を示しています。その現在の構成とその継続的な開発の方向性を理解するために、このドキュメントを参照することを強くお勧めします。 + [Planning Component Design](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/)ドキュメントでは、行動経路プランナーモジュールの設計と将来の開発を導く基本的な理念を概説しています。現在の構成と継続的な開発の方向性を理解するために、このドキュメントを参照することを強くお勧めします。 -## 目的とユースケース +## 目的 / ユースケース -基本的に、このモジュールには主に3つの責務があります。 +基本的に、このモジュールには3つの主要な責任があります。 -1. 交通状況に基づいた経路を作成する。 -2. 車両が走行可能な「走行可能領域」を生成する。 -3. 車両インターフェイスに中継されるウィンカーコマンドを生成する。 +1. 交通状況に基づく**経路の作成** +2. **走行可能領域**の生成、つまり車両が操縦できる領域 +3. 車両インターフェースに中継される**ターンシグナル**コマンドの生成 ## 機能 -### サポートされるシーンモジュール +### サポートされているシーンモジュール -行動経路プランナーには、次のシーンモジュールがあります。 +行動経路プランナーには、次のシーンモジュールがあります -| 名称 | 説明 | 詳細 | -| :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- | -| 車線追従 | このモジュールは、レーンレットの中心線から基準パスを生成します。 | [LINK](https://drive.google.com/file/d/1upH4p_9JUod40iEIdAQq4A2H6-52zz-l/view?usp=sharing) | -| 静的障害物回避 | このモジュールは、回避すべきオブジェクトがある場合に回避パスを生成します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_static_obstacle_avoidance_module/README.md) | -| 動的障害物回避 | WIP | [LINK](https://github.com/ros-planning/autoware/tree/master/ros2/autoware_behavior_path_dynamic_obstacle_avoidance_module) | -| 車線変更による回避 | このモジュールは、回避すべきオブジェクトがある場合に車線変更パスを生成します。 | [LINK](https://drive.google.com/file/d/1k7x-4T2Yj_bJhp0-IzY12wY4gII_42Vu/view?usp=sharing) | -| 車線変更 | このモジュールは、必要に応じて実行され、他の車両との衝突チェックが完了します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_lane_change_module/README.md) | -| 外部車線変更 | WIP | [LINK](https://drive.google.com/file/d/13jDgm9Q7ELR00Gka51B_2XquH6e_61cp/view?usp=sharing) | -| ゴールプランナー | このモジュールは、自車が道路車線にいるときでゴールが路側車線にいるときに実行されます。自車はゴールで停止します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_goal_planner_module/README.md) | -| スタートプランナー | このモジュールは、自車が停止していて、自車のフットプリントが路側車線に含まれているときに実行されます。このモジュールは、自車が道路に合流すると終了します。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_start_planner_module/README.md) | -| サイドシフト | (リモート制御用)外部の命令に従ってパスを左または右にシフトします。 | [LINK](https://autoware.readthedocs.io/en/latest/autoware_behavior_path_side_shift_module/README.md) | +| 名前 | 説明 | 詳細 | +| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------- | +| Lane Following | このモジュールは、レーンレットの中心線から参照パスを生成します。 | LINK | +| Static Obstacle Avoidance | このモジュールは、回避すべきオブジェクトがある場合に回避パスを生成します。 | [LINK](../autoware_behavior_path_static_obstacle_avoidance_module/README.md) | +| Dynamic Obstacle Avoidance | WIP | [LINK](../autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md) | +| Avoidance By Lane Change | このモジュールは、回避すべきオブジェクトがある場合にレーン変更パスを生成します。 | [LINK](../behavior_path_avoidance_by_lane_change_module/README.md) | +| Lane Change | このモジュールは、必要に応じて実行され、他の車両との衝突チェックをクリアします。 | [LINK](../autoware_behavior_path_lane_change_module/README.md) | +| External Lane Change | WIP | LINK | +| Goal Planner | このモジュールは、自動運転車が道路車線にあり、ゴールが路肩車線にある場合に実行されます。自動運転車はゴールで停止します。 | [LINK](../autoware_behavior_path_goal_planner_module/README.md) | +| Start Planner | このモジュールは、自動運転車が停止しており、自動運転車のフットプリントが路肩車線に含まれる場合に実行されます。このモジュールは、自動運転車が道路に合流したときに終了します。 | [LINK](../autoware_behavior_path_start_planner_module/README.md) | +| Side Shift | (リモートコントロール用)外部からの指示に従ってパスを左右にシフトします。 | [LINK](../autoware_behavior_path_side_shift_module/README.md) | -!!! Note +!!! メモ - 以下の画像をクリックすると、実行中のビデオが表示されます。 +以下の画像をクリックすると実行時の動画が見られます -
- - - - - - - - - - - -
車線維持モジュール回避モジュール車線変更による回避モジュール
車線変更モジュール始点プランナーモジュール終点プランナーモジュール
-
+
+ + + + + + + + + + + +
車線維持モジュール障害物回避モジュール車線変更による障害物回避モジュール
車線変更モジュール開始プランニングモジュールゴールプランニングモジュール
+
-!!! Note +!!! メモ - Planningコンポーネントの設計については、[Planningコンポーネント設計](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/#supported-functions)を参照してください。 +ユーザーは追加の動作については、[Planningコンポーネント設計](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-architecture/planning/#supported-functions)を参照できます。 -#### 新規モジュールの追加・実装方法 +#### 新しいモジュールを追加または実装する方法 -すべてのシーンモジュールは、基本クラス`scene_module_interface.hpp`を継承して実装されます。 +すべてのシーンモジュールは、基本クラス`scene_module_interface.hpp`を継承することにより実装されます。 -!!! Warning +!!! 注意 - 本項の残りの部分は現在進行中です(WIP)。 +このサブセクションの残りの部分は、作業中(WIP)です。 -### プランナーマネージャー +### プランニングマネージャー -プランナーマネージャーの責務は次のとおりです。 +プランニングマネージャーの責任には、次のものが含まれます。 -1. 自動運転車両が直面している特定の状況に応じて、関連するシーンモジュールをアクティブ化します。たとえば、駐車車両によって自車の走行車線がブロックされた場合、マネージャーは回避モジュールを起動します。 -2. 複数のモジュールが同時に実行されている場合の実行順序を管理します。たとえば、車線変更モジュールと回避モジュールの両方が稼働している場合、マネージャーがどちらを優先するかを決定します。 -3. 複数のモジュールが同時にアクティベートされ、それぞれが独自のパスを生成する場合、それらのパスをマージして単一の機能パスを作成します。 +1. 自律走行車が直面している特定の状況に応じて、関連するシーンモジュールをアクティブにします。たとえば、駐車車両が自車の走行車線をブロックしている場合、マネージャーは障害物回避モジュールを作動させます。 +2. 複数のモジュールが同時に実行されているときの、実行順序を管理します。たとえば、車線変更モジュールと障害物回避モジュールの両方が動作している場合、マネージャーはどちらを優先させるかを決定します。 +3. 複数のモジュールが同時にアクティブで、それぞれが独自のパスを生成する場合、それらのパスをマージして、単一の機能パスを作成します。 -!!! note +!!! メモ - シーンモジュールの遷移(登録済みモジュール、承認済みモジュール、候補モジュール)を確認するには、[動作パスプランナーコンフィグレーションファイル](https://github.com/autowarefoundation/autoware_launch/blob/0cd5d891a36ac34a32a417205905c109f2bafe7b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml#L3)で`verbose: true`を設定します。 +シーンモジュールの遷移(登録されたモジュール、承認されたモジュール、候補モジュール)を確認するには、[挙動パスプランニング構成ファイル](https://github.com/autowarefoundation/autoware_launch/blob/0cd5d891a36ac34a32a417205905c109f2bafe7b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/behavior_path_planner.param.yaml#L3)で`verbose: true`を設定します。 - ![シーンモジュールの遷移表](./image/checking_module_transition.png) +![シーンモジュールの遷移表](./image/checking_module_transition.png) -!!! note +!!! メモ - より詳細な情報については、[マネージャー設計](./docs/behavior_path_planner_manager_design.md)ドキュメントを参照してください。 +さらに詳しい情報については、[マネージャー設計](./docs/behavior_path_planner_manager_design.md)ドキュメントを参照してください。 ## 入出力/API ### 入力 -| 名前 | 必須? | タイプ | 説明 | -| :---------------------------- | :---: | :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| ~/input/odometry | ○ | `nav_msgs::msg::Odometry` | 自車速度 | -| ~/input/accel | ○ | `geometry_msgs::msg::AccelWithCovarianceStamped` | 自車加速度 | -| ~/input/objects | ○ | `autoware_perception_msgs::msg::PredictedObjects` | 知覚モジュールからのダイナミックオブジェクト | -| ~/input/occupancy_grid_map | ○ | `nav_msgs::msg::OccupancyGrid` | 知覚モジュールのオキュパンシグリッドマップ。Goal Plannerモジュールでのみ使用されます。 | -| ~/input/traffic_signals | ○ | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 知覚モジュールからの交通信号情報 | -| ~/input/vector_map | ○ | `autoware_map_msgs::msg::LaneletMapBin` | ベクタマップ情報 | -| ~/input/route | ○ | `autoware_planning_msgs::msg::LaneletRoute` | スタートからゴールまでの現在のルート | -| ~/input/scenario | ○ | `tier4_planning_msgs::msg::Scenario` | 現在シナリオが`Scenario:LaneDriving`の場合、ビヘイビアパスプランナーを起動 | -| ~/input/lateral_offset | △ | `tier4_planning_msgs::msg::LateralOffset` | サイドシフトをトリガするための横方向オフセット | -| ~/system/operation_mode/state | ○ | `autoware_adapi_v1_msgs::msg::OperationModeState` | 車両が自律モードにあるか、制御可能であるかどうかをPlanningモジュールに伝える[参照](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/operation-mode.md) | - -- ○ 必須: このどれか1つでも存在しない場合、Planning Moduleは動作しません。 -- △ オプション: 一部のモジュールは動作しませんが、Planning Moduleは引き続き動作できます。 +| 名前 | 必須 | タイプ | 説明 | +| :---------------------------- | :-------: | :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ~/input/odometry | ○ | `nav_msgs::msg::Odometry` | 自車速度 | +| ~/input/accel | ○ | `geometry_msgs::msg::AccelWithCovarianceStamped` | 自車加速度 | +| ~/input/objects | ○ | `autoware_perception_msgs::msg::PredictedObjects` | 知覚モジュールからの動的オブジェクト | +| ~/input/occupancy_grid_map | ○ | `nav_msgs::msg::OccupancyGrid` | 知覚モジュールからのオキュパンシーグリッドマップ。Goal Plannerモジュールでのみ使用 | +| ~/input/traffic_signals | ○ | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 知覚モジュールからの交通信号情報 | +| ~/input/vector_map | ○ | `autoware_map_msgs::msg::LaneletMapBin` | ベクトルマップ情報 | +| ~/input/route | ○ | `autoware_planning_msgs::msg::LaneletRoute` | スタートからゴールまでの現在の経路 | +| ~/input/scenario | ○ | `tier4_planning_msgs::msg::Scenario` | 現在のシナリオが `Scenario:LaneDriving` の場合、動作パスプランナーを起動 | +| ~/input/lateral_offset | △ | `tier4_planning_msgs::msg::LateralOffset` | Side Shiftをトリガーする水平方向オフセット | +| ~/system/operation_mode/state | ○ | `autoware_adapi_v1_msgs::msg::OperationModeState` | Planningモジュールは、車両が自動運転モードか制御可能かを知る[参照](https://github.com/autowarefoundation/autoware.universe/blob/main/system/autoware_default_adapi/document/operation-mode.md) | + +- ○ 必須: これらの一部が存在しない場合、Planningモジュールは機能しません。 +- △ オプション: 一部のモジュールは機能しませんが、Planningモジュールは引き続き動作できます。 ### 出力 -| 名前 | タイプ | 説明 | QoSの耐久性 | -| ----------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------- | ----------------- | -| ~/output/path | `tier4_planning_msgs::msg::PathWithLaneId` | 各モジュールによって生成された経路 | `volatile` | -| ~/output/turn_indicators_cmd | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | ターンシグナルのコマンド | `volatile` | -| ~/output/hazard_lights_cmd | `autoware_vehicle_msgs::msg::HazardLightsCommand` | ハザードランプのコマンド | `volatile` | -| ~/output/modified_goal | `autoware_planning_msgs::msg::PoseWithUuidStamped` | 変更された目標コマンドの出力を示す | `transient_local` | -| ~/output/stop_reasons | `tier4_planning_msgs::msg::StopReasonArray` | 自車停止の理由を説明 | `volatile` | -| ~/output/reroute_availability | `tier4_planning_msgs::msg::RerouteAvailability` | モジュールが採用しようとしている経路。外部からの承認が得られ次第実行される | `volatile` | +| 名前 | タイプ | 説明 | QoS耐久性 | +| :---------------------------- | :------------------------------------------------- | :---------------------------------------------------------------------------------------------- | ----------------- | +| ~/output/path | `tier4_planning_msgs::msg::PathWithLaneId` | モジュールによって生成されたパス | `volatile` | +| ~/output/turn_indicators_cmd | `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` | ウインカーコマンド | `volatile` | +| ~/output/hazard_lights_cmd | `autoware_vehicle_msgs::msg::HazardLightsCommand` | ハザードランプコマンド | `volatile` | +| ~/output/modified_goal | `autoware_planning_msgs::msg::PoseWithUuidStamped` | 出力する修正済み目標コマンド | `transient_local` | +| ~/output/reroute_availability | `tier4_planning_msgs::msg::RerouteAvailability` | モジュールのこれから進む予定のパス(外部の承認が得られ次第すぐに実行される予定) | `volatile` | ### デバッグ -#### 障害物検出(障害物検出モジュール) - -##### 障害物検出の可視化 - -1. Rvizで `ObstacleDetection` トピックを subscribe します。 -2. `rviz_visual_tools` で **Object** マーカーを有効にします。 - - `MarkerFrame`: `map` - - `MarkerTopic`: `ObstacleDetection` - - `MarkerShape`: `Sphere` - -##### デバッグコマンド - -- `/obstacle_detection/debug_info` トピックを subscribe し、障害物検出の結果を確認します。 -- `/obstacle_detection/obstacles` トピックを subscribe し、障害物の情報を取得します。 -- `/obstacle_detection/cluster` トピックを subscribe し、クラスタリングされた障害物の情報を取得します。 - -#### 行動計画(Planning) - -##### 行動計画の可視化 - -1. Rvizで `Planning` トピックを subscribe します。 -2. Rvizで **Path** マーカーを有効にします。 - - `MarkerFrame`: `map` - - `MarkerTopic`: `Planning` - - `MarkerShape`: `Arrow` - -##### デバッグコマンド - -- `/planning/debug_info` トピックを subscribe し、行動計画の結果を確認します。 -- `/planning/trajectory` トピックを subscribe し、期待される経路を取得します。 - -#### 制御(Control) - -##### `post resampling` コントローラーの可視化 -1. Rvizで `Control` トピックを subscribe します。 -2. Rvizで **Path** マーカーを有効にします。 - - `MarkerFrame`: `map` - - `MarkerTopic`: `Control` - - `MarkerShape`: `Arrow` - -##### デバッグコマンド - -- `/control/debug_info` トピックを subscribe し、制御の結果を確認します。 -- `/control/trajectory` トピックを subscribe し、制御された経路を取得します。 - -#### ローカリゼーション - -##### 自車位置の可視化 - -1. Rvizで `Localization` トピックを subscribe します。 -2. Rvizで **Pose** マーカーを有効にします。 - - `MarkerFrame`: `map` - - `MarkerTopic`: `Localization` - - `MarkerShape`: `Cube` - -##### デバッグコマンド - -- `/localization/debug_info` トピックを subscribe し、ローカリゼーションの結果を確認します。 -- `/localization/pose` トピックを subscribe し、自車位置を取得します。 - -| 名前 | タイプ | 説明 | QoS の永続性 | -| --------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------------------- | ------------ | -| ~/debug/avoidance_debug_message_array | `tier4_planning_msgs::msg::AvoidanceDebugMsgArray` | Avoidance のデバッグメッセージ。Avoidance パスを生成できない理由をユーザーに通知します | `volatile` | -| ~/debug/lane_change_debug_message_array | `tier4_planning_msgs::msg::LaneChangeDebugMsgArray` | レーン変更のデバッグメッセージ。レーン変更処理中の危険な理由をユーザーに通知します | `volatile` | -| ~/debug/maximum_drivable_area | `visualization_msgs::msg::MarkerArray` | 最大の静的走行可能領域を表示します | `volatile` | -| ~/debug/turn_signal_info | `visualization_msgs::msg::MarkerArray` | TBA | `volatile` | -| ~/debug/bound | `visualization_msgs::msg::MarkerArray` | 静的走行可能領域のデバッグ | `volatile` | -| ~/planning/path_candidate/\* | `autoware_planning_msgs::msg::Path` | 承認前のパス | `volatile` | -| ~/planning/path_reference/\* | `autoware_planning_msgs::msg::Path` | 各モジュールによって生成されたリファレンスパス | `volatile` | +| 名称 | 型 | 説明 | QoS耐久性 | +| :----------------------------------- | :------------------------------------------------------ | :---------------------------------------------------------------------------------------- | -------------- | +| ~/debug/avoidance_debug_message_array | `tier4_planning_msgs::msg::AvoidanceDebugMsgArray` | 回避に対するデバッグメッセージ。回避経路を生成できない理由をユーザーに通知する。 | `volatile` | +| ~/debug/lane_change_debug_message_array | `tier4_planning_msgs::msg::LaneChangeDebugMsgArray` | レーン変更に対するデバッグメッセージ。レーン変更プロセス中の安全でない理由をユーザーに通知する。 | `volatile` | +| ~/debug/maximum_drivable_area | `visualization_msgs::msg::MarkerArray` | 最大静的走行可能エリアを表示する。 | `volatile` | +| ~/debug/turn_signal_info | `visualization_msgs::msg::MarkerArray` | TBA | `volatile` | +| ~/debug/bound | `visualization_msgs::msg::MarkerArray` | 静的走行可能エリアのデバッグ | `volatile` | +| ~/planning/path_candidate/\* | `autoware_planning_msgs::msg::Path` | 承認前の経路。 | `volatile` | +| ~/planning/path_reference/\* | `autoware_planning_msgs::msg::Path` | Planningコンポーネントによって生成された参照経路。 | `volatile` | !!! note - トピックのサブスクライブと発行に関する具体的な情報は、[behavior_path_planner.xml](https://github.com/autowarefoundation/autoware.universe/blob/9000f430c937764c14e43109539302f1f878ed70/planning/behavior_path_planner/launch/behavior_path_planner.launch.xml#L36-L49) を参照してください。 + 詳細なトピックの購読および公開については、[behavior_path_planner.xml](https://github.com/autowarefoundation/autoware.universe/blob/9000f430c937764c14e43109539302f1f878ed70/planning/behavior_path_planner/launch/behavior_path_planner.launch.xml#L36-L49) を参照してください。 -## モジュールの有効化と無効化の方法 +## モジュールの有効化または無効化の方法 -Behavior Path Planning内のモジュールの有効化と無効化は、主に2つの主要なファイル(`default_preset.yaml`と`behavior_path_planner.launch.xml`)によって管理されます。 +動作パスプランナーでモジュールを有効化または無効化することは、基本的に2つのキーファイル「`default_preset.yaml`」と「`behavior_path_planner.launch.xml`」で管理されます。 -`default_preset.yaml`ファイルは、プランナー内の特定のモジュールを有効化または無効化するための設定ファイルとして機能します。Behavior Path Planningのモジュールまたは機能を表す一連の引数を含みます。例: +`default_preset.yaml` ファイルは、プランナー内の特定のモジュールを有効または無効にするための設定ファイルとして機能します。プランナーのモジュールまたは機能を表す一連の引数が含まれています。例えば: -- `launch_static_obstacle_avoidance_module`: 回避モジュールを有効にするには`true`に、無効にするには`false`に設定します。 +- `launch_static_obstacle_avoidance_module`: 回避モジュールを有効にするには `true` に、無効にするには `false` に設定します。 !!! note - `default_preset.yaml`を表示するには、[ここ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/preset/default_preset.yaml)をクリックします。 + `default_preset.yaml` を表示するには、[こちら](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/preset/default_preset.yaml) をクリックします。 + +`behavior_path_planner.launch.xml` ファイルは、`default_preset.yaml` で定義された設定を参照して、動作パスプランナーのノードが実行されているときに設定を適用します。たとえば、`behavior_path_planner.launch.xml` のパラメータ `static_obstacle_avoidance.enable_module` は -`behavior_path_planner.launch.xml`ファイルは、`default_preset.yaml`に定義された設定を参照して、Behavior Path Planningのノード実行時に設定を適用するために使用します。たとえば、`behavior_path_planner.launch.xml`の`static_obstacle_avoidance.enable_module`パラメータでは、 ```xml ``` -### `default_preset.yaml`の`launch_static_obstacle_avoidance_module`に対応する +`default_preset.yaml`の`launch_static_obstacle_avoidance_module`に対応します。 -したがって、モジュールを有効または無効にするには、`default_preset.yaml`内の対応するモジュールを`true`または`false`に設定します。これらの変更は、Autowareの次回の起動時に適用されます。 +したがって、モジュールの有効/無効を設定するには、`default_preset.yaml`内の対応するモジュールを`true`または`false`に設定します。これらの変更は、Autowareの次回起動時に適用されます。 ## パス生成 -精緻な手法がパスの生成に使用され、特に車線変更や回避などの操作に焦点を当てます。この設計の中核は、一定の加速度変化率によって達成される、基準パスのスムーズな横方向シフトです。このアプローチにより、加速度の変化率が一定になり、スムーズな遷移が促進され、横方向動特性の突然の変化が最小限に抑えられます。これは乗客の快適さと安全に不可欠です。 +パスを生成するための洗練された手法が使用されており、とりわけ車線変更や回避のような操作に焦点を当てています。この設計の中心には、一定加速度プロフィールによるリファレンスパスの滑らかな横断があります。このアプローチは、加速度の変化率を一定にすることで、スムーズな遷移を促進し、横方向動力の急激な変化を最小限に抑え、乗客の快適さと安全に不可欠です。 -この設計には、時間の経過に伴う車両パスの横方向のシフトを計算するための複雑な数学的定式化が含まれます。これらの計算には、車両の横方向の変位、速度、および加速度の決定、車両の横方向の加速度と速度の制限の考慮が含まれます。これにより、車両の動きが安全かつ管理可能であることが保証されます。 +設計には、車両の経路の横断を時間をかけて計算するための複雑な数学的定式化が含まれます。これらの計算には、車両の横加速度と速度制限を考慮しながら、横変位、速度、加速度を決定することが含まれます。これにより、車両の動作が安全かつ制御可能であることが保証されます。 -`ShiftLine`構造体([こちら](https://github.com/autowarefoundation/autoware.universe/blob/9000f430c937764c14e43109539302f1f878ed70/planning/behavior_path_planner/include/behavior_path_planner/utils/path_shifter/path_shifter.hpp#L35-L48)に記載)は、横方向シフトの開始点と終了点を表すパス上のポイントを表すために使用されます。これには、絶対座標系での開始点と終了点、基準パスと比較したこれらのポイントでの相対シフトの長さ、および基準パス上の対応するインデックスなどの詳細が含まれます。この構造体はパスシフトを管理するのに不可欠であり、パスプランナーが車両の現在の位置と計画されている操作に基づいて軌道を動的に調整できます。 +`ShiftLine`構造体([here](https://github.com/autowarefoundation/autoware.universe/blob/9000f430c937764c14e43109539302f1f878ed70/planning/behavior_path_planner/include/behavior_path_planner/utils/path_shifter/path_shifter.hpp#L35-L48)を参照)は、横断が開始および終了するパス上の点を表すために利用されます。絶対座標の開始点と終了点、リファレンスパスに対するこれらの点での相対的なシフト長さ、リファレンスパス上の関連するインデックスなどの詳細が含まれます。この構造体は、パスシフトの管理に不可欠であり、パスプランナーが車両の現在の位置と計画された操作に基づいて軌道​​を動的に調整することを可能にします。 -さらに、この設計とその実装には、パスシフトに必須のパラメータを計算するためのさまざまな方程式と数学的モデルが組み込まれています。これらには、横方向シフトの総距離、許容される最大横方向加速度とジャーク、シフトに必要な総時間が含まれます。また、ほとんどの車線変更と回避のケースでは特定のタイムインターバルがないときに仮定を単純化するなど、実際的な考慮事項にも注意します。 +さらに、設計とその実装には、パスシフトに必要なパラメータを計算するためのさまざまな方程式と数学モデルが含まれています。これらには、横方向シフトの全距離、許容される最大横加速度とジャーク、シフトに必要な全時間が含まれます。また、ほとんどの車線変更と回避のケースでは特定の時間間隔がないという単純な仮定など、実践的な考慮事項も考慮されています。 -シフトパス生成ロジックにより、ビヘイビアパスプランナーは安全かつ効率的なパスを動的に生成し、横方向の動きを正確に制御して、車線変更と回避操作の円滑な実行を保証できます。この慎重な計画と実行は、車両の動的機能と安全上の制約を順守し、自律車両ナビゲーションにおける効率と安全性を最大化します。 +シフトされたパス生成ロジックにより、行動パスプランナーは安全で効率的なパスを動的に生成し、車両の横方向の動きを正確に制御して、車線変更と回避操作のスムーズな実行を確保できます。この慎重な計画と実行は、車両の動的能力と安全上の制約に従うことで、自律走行ナビゲーションの効率と安全性を最大化します。 !!! note - 数学好きの方は、詳細については[パス生成設計](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)を参照してください。 + 数学好きの方は、[パス生成設計](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)を参照してください。 -## 衝突評価/安全チェック +## 衝突アセスメント/安全チェック -ビヘイビアパスプランナーの衝突評価機能の目的は、すべてのモジュールを横断してターゲットオブジェクトとの衝突の可能性を評価することです。2つのシナリオで使用されます。 +行動パスプランナーの衝突アセスメント機能の目的は、すべてのモジュール間でターゲットオブジェクトとの衝突の可能性を評価することです。これは2つのシナリオで使用されます。 -1. 候補パスの生成中、生成された候補パスが衝突のないものであることを確認します。 -2. パスがマネージャーによって承認され、自己車両が現在のモジュールを実行しているとき、現在の状況が安全でない場合は、各モジュールの要件に応じて、プランナーは実行をキャンセルするか、別のモジュールを実行することを選択します。 +1. 候補パスの生成中、生成された候補パスに衝突がないことを確認します。 +2. パスがマネージャーによって承認され、自車が現在のモジュールを実行しているとき。現在の状況が安全でないと判断された場合、各モジュールの要件に応じて、プランナーは実行をキャンセルするか、別のモジュールを実行することを選択します。 -安全チェックプロセスはいくつかのステップを含みます。最初に、通常予測パスを補間して、特定の時点でのターゲットオブジェクトの位置を取得します。次に、この時点で自己車両とターゲットオブジェクトとの間にオーバーラップがないか確認します。オーバーラップが検出された場合、パスは安全ではないと判断されます。また、関数の与えられたパスに沿った弧長を使用して、どちらの車両が前方にいるかを識別します。この関数は、自己車両(自律車両)とターゲットオブジェクトの両方について、正確な位置、速度、形状のデータが利用可能であるという前提で動作します。また、これらのオブジェクトの予測パス内の各点のヨー角に依存し、次のパス点の方向を向くことが想定されています。 +安全チェックプロセスにはいくつかのステップが含まれます。最初に、特定の時点でのターゲットオブジェクトのポーズを取得します。通常、予測パスの補間によって取得します。次に、この時点で自車とターゲットオブジェクトとの間に重複がないかを確認します。重複が検出されると、パスは安全ではないとみなされます。また、この関数は、与えられたパスに沿ったアーク長を使用して、どちらの車両が前方にいるかを識別します。この関数は、自車とターゲットオブジェクトの両方の予測パス内の各点のヨー角が、次のパス点に向いていると仮定して動作します。 -安全チェックの重要な部分は、RSS(責任感応型安全)距離に着想を得たアルゴリズムの計算です。このアルゴリズムは、反応時間、安全時間マージン、両方の車両の速度と減速などの要因を考慮します。自己車両とターゲット車両の両方に、拡張オブジェクトポリゴンが作成されます。特に、後方のオブジェクトのポリゴンは、縦方向にRSS距離、横方向にマージンで拡張されます。最後に、この拡張された後方のオブジェクトのポリゴンと前方オブジェクトのポリゴンとのオーバーラップをチェックします。オーバーラップは、潜在的に安全でない状況を示します。 +安全チェックの重要な部分は、RSS(責任感応型安全性)距離に影響を受けたアルゴリズムの計算です。このアルゴリズムは、反応時間、安全時間マージン、両車両の速度と減速度などの要因を考慮します。自車とターゲット車両の両方に拡張オブジェクトポリゴンが作成されます。特に、後方オブジェクトのポリゴンは、縦方向にRSS距離、横方向にマージンで拡張されます。最後に、この拡張された後方オブジェクトポリゴンと前方オブジェクトポリゴンとの重複を確認します。重複があれば、潜在的に危険な状況を示します。 -ただし、モジュールにはターゲットオブジェクトの予測パス内の各点のヨー角に関する制限があり、常に次の点に向いていない場合があります。これにより、エッジケースで潜在的な不正確さが発生する場合があります。 +ただし、このモジュールにはターゲットオブジェクトの予測パス内の各点のヨー角に関する制限があり、必ずしも次の点に正確に向いているとは限らないため、エッジケースでは不正確になる可能性があります。 !!! note - 衝突評価手法の詳細については、[安全チェックユーティリティ](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md)を参照してください。 + 衝突評価方法の詳細については、[安全チェックユーティリティ](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md)を参照してください。 ## 走行可能領域の生成 ### 静的走行可能領域のロジック -走行可能領域は、自己車両が走行できる領域を決定するために使用されます。静的走行可能領域の拡張の主な目的は、車両の現在の動作に必要なスペースのみを含む領域を生成することによって安全な走行を確保することですが、不要な領域を除外します。たとえば、`回避`モジュールが実行されているとき、走行可能領域には障害物を回避するための操作に必要な追加のスペースが含まれ、動作はレーンレットの領域の外側に回避パスを拡張しないことで制限されます。 +走行可能領域は、自車が走行できる領域を決定するために使用されます。静的走行可能領域の拡張の主な目標は、車両の現在の動作に必要なスペースのみを含み、不要な領域を除外する領域を生成することで、安全な走行を確保することです。たとえば、`avoidance`モジュールが実行されている間、走行可能領域には障害物周辺での操作に必要な追加スペースが含まれ、レーンレット領域の外側に回避パスを拡張しないことで動作を制限します。
- + - +
Before expansion拡張前
After expansion拡張後
-静的走行可能領域の拡張は、レーンの正しい配置と、左端と右端の境界内での車両の前部と後部の両方の範囲について、次の動作で行われます: - -走行可能領域を生成するための重要なパラメータとしては、自己車両の追加フットプリントオフセット、動的オブジェクトの処理、最大拡張距離、および拡張のための具体的な方法があります。さらに、各モジュールは独自の走行可能領域を生成するため、次の実行モジュールの走行可能領域を生成するための入力として渡すか、統一された走行可能領域を生成する前に、車両の走行順序に基づいて走行可能レーンのソートを行います。これにより、走行可能領域の生成に使用されるレーンの正しい定義が確保されます。 +静的走行可能領域の拡張は、レーンの正しい配置と、左右の境界内での車両の前後の両方のカバー範囲に関する仮定に基づいて動作します。走行可能領域生成の主なパラメータには、自車に対する追加のフットプリントオフセット、動的オブジェクトの処理、最大拡張距離、および拡張の特定の方法が含まれます。さらに、各モジュールは独自の走行可能領域を生成するため、それを入力として次の実行モジュールの走行可能領域を生成する前に、または統一された走行可能領域を生成する前に、システムは走行可能領域を使用して車両をソートします。これにより、走行可能領域の生成に使用するレーンの正しい定義が確保されます。 !!! note ### Dynamic Drivable Area Logic -大型車両の旋回にはより広い空間が必要で、現在の車線を逸脱することがあります。例えば、交差点でバスが曲がっている場合です。そのような場合、静的な走行可能領域に依存することは不十分です。静的な方法は、高精細マップによって提供される車線情報に依存するためです。静的なアプローチの制限を克服するために、動的走行可能領域の拡張アルゴリズムは、自律車両の通行可能なスペースをリアルタイムで調整します。以前に計算された経路データを再利用することで計算処理を節約し、車両の位置に大きな変化がある場合にのみ更新します。システムは、車両の旋回半径や他の動的要因に対応するために必要な最小車線幅を評価します。その後、車両の経路曲率を考慮して、安全な走行のための十分なスペースを確保するために必要な走行可能領域の境界の最適な拡張を計算します。これらの境界を拡張または縮小できる速度は、車両のナビゲーションの安定性を維持するために調整されています。このアルゴリズムは、固定障害物を回避し、法的な走行制限に従いながら、走行可能なスペースを最大化することを目的としています。最後に、これらの境界線の調整を適用し、経路曲率の計算を滑らかにすることで、車両の運用を通じて安全で法令に準拠した通行可能な経路が維持されるようにします。 +大型車はより多くのスペースを必要とし、そのため現在の車線からはみ出すことがあります。交差点でバスが曲がるときが典型的な例です。このような場合、静的な走行可能エリアに依存するのは不十分です。静的な方法は高精細地図によって提供される車線情報に依存するためです。静的なアプローチの制限を克服するために、ダイナミック走行可能エリア拡張アルゴリズムは自動運転車の走行可能スペースをリアルタイムで調整します。車両の位置に大幅な変化があった場合にのみ更新することによって、以前に計算された経路データを再利用して計算能力を節約します。システムは、車両の旋回半径やその他の動的要因に対応するために必要な最小車線幅を評価します。その後、車両の経路曲率を考慮して安全な操縦に十分なスペースがあることを保証するために、走行可能エリアの境界の最適な拡張を計算します。これらの境界を拡張または縮小できる速度は、車両のナビゲーションの安定性を維持するために調整されます。このアルゴリズムは、固定障害物を回避し、法的な運転制限を守る一方で、走行可能スペースを最大化することを目指しています。最後に、これらの境界調整を適用し、経路曲率の計算を滑らかにすることで、車両の操作全体で安全で法令を遵守した航行パスが維持されるようにします。 !!! note - この機能は [drivable_area_expansion.param.yaml](https://github.com/autowarefoundation/autoware_launch/blob/0cd5d891a36ac34a32a417205905c109f2bafe7b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml#L10) で有効にすることができます。 + この機能は[drivable_area_expansion.param.yaml](https://github.com/autowarefoundation/autoware_launch/blob/0cd5d891a36ac34a32a417205905c109f2bafe7b/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/drivable_area_expansion.param.yaml#L10)で有効にすることができます。 ## ターンシグナルの生成 -Behavior Path Plannerモジュールは、ターンシグナルのコマンドを出力するために `autoware_vehicle_msgs::msg::TurnIndicatorsCommand` を使用します([TurnIndicatorsCommand.idl](https://github.com/autowarefoundation/autoware_msgs/blob/main/autoware_vehicle_msgs/msg/TurnIndicatorsCommand.msg) を参照)。システムは運転状況を評価し、旋回、車線変更、障害物回避などの走行計画に基づいて、いつターンシグナルを作動させるかを決定します。 +Behavior Path Plannerモジュールは、`autoware_vehicle_msgs::msg::TurnIndicatorsCommand`を使用してターンシグナルコマンドを出力します([TurnIndicatorsCommand.idl](https://github.com/autowarefoundation/autoware_msgs/blob/main/autoware_vehicle_msgs/msg/TurnIndicatorsCommand.msg)を参照)。システムは運転状況を評価し、旋回、車線変更、障害物回避などの操作プランに基づいてターンシグナルをいつ作動させるかを決定します。 -このフレームワークの中で、システムは**必要な**点滅器作動と**不要な**点滅器作動を区別します。**不要な**作動は、車線変更や旋回の前の合図など、一般的な運転シナリオで交通法によって推奨されるものです。**必要な**作動は、障害物を避けるために急な車線変更を合図するなど、安全上の理由から必須とみなされるものです。 +このフレームワークの中で、システムは**必要な**点滅器の作動と**要求される**作動を区別します。**必要な**作動は、車線変更や旋回前の合図など、一般的な運転シナリオにおける交通法で推奨されるものです。**要求される**作動とは、障害物を避けるために急な車線変更を合図するなど、安全上の理由から必須と見なされるものです。 -`TurnIndicatorsCommand` メッセージ構造には、いくつかの定数のいずれかを保持できるコマンドフィールドがあります。`NO_COMMAND` は信号が不要であることを示し、`DISABLE` は信号を無効にし、`ENABLE_LEFT` は左折を合図し、`ENABLE_RIGHT` は右折を合図します。Behavior Path Planner は、点滅器作動の**不要**および**必要**の両方のシナリオを考慮するルールベースのシステムに基づいて、適切なタイミングでこれらのコマンドを送信します。 +`TurnIndicatorsCommand`メッセージ構造には、`NO_COMMAND`(信号が必要ないことを示す)、`DISABLE`(信号を無効にする)、`ENABLE_LEFT`(左折を合図する)、`ENABLE_RIGHT`(右折を合図する)などの定数の1つを取ることができるコマンドフィールドがあります。Behavior Path Plannerは、点滅器を作動させる**必要な**シナリオと**要求される**シナリオの両方を考慮したルールベースのシステムに基づいて、適切なタイミングでこれらのコマンドを送信します。 !!! note - 詳細については、[ターンシグナル設計](../autoware_behavior_path_planner_common/docs/behavior_path_planner_turn_signal_design.md)ドキュメントを参照してください。 + 詳細については、[Turn Signal Design](../autoware_behavior_path_planner_common/docs/behavior_path_planner_turn_signal_design.md)ドキュメントを参照してください。 -## リルーティング +## 再ルーティング !!! warning - リルーティングは現在進行中の機能です。詳細情報については、後日掲載いたします。 + 再ルーティングは現在進行中の機能です。詳しい情報は後日掲載します。 + +## パラメータと設定 -## パラメータと構成 +[設定ファイル](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner)は、ナビゲーションし管理しやすいように階層的なディレクトリ構造で構成されています。各サブディレクトリには、モジュールに関連する特定の設定ファイルが含まれています。ルートディレクトリには、プランナーの全体的な動作に適用される一般的な設定ファイルがあります。以下は、それぞれの設定ファイルを使用したディレクトリ構造の概要です。 -[設定ファイル](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner) は、操作と管理の容易さのために階層的なディレクトリ構造で整理されています。各サブディレクトリには、そのモジュールに関連する具体的な構成ファイルが含まれています。ルートディレクトリには、プランナー全体の動作に適用される一般的な構成ファイルがあります。以下は、ディレクトリ構造とその構成ファイルの概要です。 ```text behavior_path_planner @@ -322,7 +261,8 @@ behavior_path_planner └── start_planner.param.yaml ``` -同様に、[common](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/common) ディレクトリには、さまざまなモジュールで使用される設定ファイルが含まれています。これらの設定ファイルは、Behavior Path Planner の機能に不可欠な共通パラメータと設定を提供します。 +同様に、[common](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/common) ディレクトリには、さまざまなモジュールで使用されるコンフィギュレーションファイルが含まれており、挙動パスプランナの機能に必要な共有パラメータと設定が提供されます。 + ```text common @@ -331,14 +271,16 @@ common └── nearest_search.param.yaml ``` -[Preset](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/preset) ディレクトリには、さまざまなモジュールの動作状態を管理するための構成が含まれています。これには、システム内のモジュールの有効化や無効化を具体的に処理する `default_preset.yaml` ファイルが含まれます。 +[preset](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/preset)ディレクトリには、さまざまなモジュールの運用状態を管理するための構成が含まれています。これには、システム内のモジュールを有効または無効にするための、default_preset.yamlファイルが含まれています。 + ```text preset └── default_preset.yaml ``` -## 制限事項と今後の取り組み +## 制限事項と今後の課題 + +1. Goal Plannerモジュールは、他のモジュールと同時に実行できません。 +2. このモジュールはプラグインとして設計されていません。カスタムモジュールを統合するのは容易ではなく、ユーザは動作パスプランナメインコードの一部を変更する必要があります。 -1. ゴールプランナーモジュールは、他のモジュールと同時に実行できません。 -2. このモジュールはプラグインとして設計されていません。カスタムモジュールの統合は容易ではなく、ユーザーは動作パス計画メインコードの一部を変更する必要があります。 diff --git a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md index d67e8872cd0fa..154f9cec2b527 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/README.md @@ -1,76 +1,77 @@ -# 振る舞い経路サンプルベースプランナー +# Behavior Path Sampling Planner -警告: このモジュールは実験的であり、実車両では適切にテストされていません。シミュレーションでのみ使用してください。 +警告: このモジュールは実験段階であり、実際の車両で適切にテストされていません。シミュレーションでのみ使用してください。 ## 目的 -このパッケージでは、サンプリングベースプランニングを使用して、振る舞い経路プランナーのための走行可能なトラジェクトリを生成するノードを実装しています。[sampling_based_plannerモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner)を大幅にベースにしています。 +このパッケージは、サンプリングベースプランニングを使用して、Behavior Path Planner用の走行可能経路を生成するノードを実装します。このパッケージは、[sampling_based_plannerモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner)を大幅にベースとしています。 -## 特徴 +## 機能 -このパッケージでは、次のことができます。 +このパッケージは次のことができます。 -- 静的障害物を避けるスムースなトラジェクトリを作成する。 -- 生成されたトラジェクトリ(存在する場合)がカスタマイズ可能なハード制約に確実に準拠するようにする。 -- 自車がゴールレーンに合流した後、成功状態に移行する。 -- 以前生成した出力を再利用して、新しい代替経路を再サンプリングする +- 静的障害物を避けるためのスムーズな経路を作成します。 +- (存在する場合)生成された経路がカスタマイズ可能なハード制約に確実に準拠します。 +- 自車が目標車線に合流した後に成功状態に移行します。 +- 以前生成した出力を再利用して、新しい代替経路を再サンプリングします。 -ここで速度は入力経路からそのまま引き継がれることに注意してください。 +速度は入力パスからそのまま取得されます。 ## アルゴリズム -サンプリングベースプランニングは、3つの連続した手順に分解されます。 +サンプリングベースプランニングは、3つの連続したステップに分解されます。 -1. サンプリング: 候補のトラジェクトリが生成されます。 -2. プルーニング: 無効な候補は破棄されます。 -3. 選択: 残りの有効な候補の中で最適なものが選択されます。 +1. サンプリング: 候補経路が生成されます。 +2. 剪定: 無効な候補は破棄されます。 +3. 選択: 残りの有効な候補の中で最善の候補が選択されます。 ### サンプリング -候補のトラジェクトリは、現在の車両状態とターゲット状態に基づいて生成されます。 -現在実装されているサンプリングアルゴリズムは1つです。フレネフレームにおける多項式 +候補経路は、現在の自己状態とターゲット状態に基づいて生成されます。 +現在、1つのサンプリングアルゴリズムが実装されています。フレネフレーム内の多項式です。 -### プルーニング +### 剪定 -各候補トラジェクトリの有効性は、一連のハード制約を使用してチェックされます。 +各候補経路の有効性は、一連のハード制約を使用してチェックされます。 -- 衝突: 静的障害物との衝突がないことを保証する。 -- 曲率: 滑らかな曲率を保証する。 -- 走行可能領域: トラジェクトリが走行可能領域内にとどまることを保証する。 +- 衝突: 静的障害物との衝突がないことを確認します。 +- 曲率: 滑らかな曲率を確保します。 +- 走行可能エリア: 経路が走行可能エリア内に留まることを確認します。 ### 選択 -有効な候補のトラジェクトリの中から、一連のソフト制約(つまり目的関数)を使用して最適なものが決定されます。 +有効な候補経路の中で、_最善の_経路は、一連のソフト制約(つまり目的関数)を使用して決定されます。 -- 曲率: よりスムーズなトラジェクトリを優先する。 -- 長さ: 残り経路長が長いトラジェクトリを優先する。 -- 横方向逸脱: ゴールに近いトラジェクトリを優先する。 +- 曲率: よりスムーズな経路を優先します。 +- 長さ: 残り経路長が長い経路を優先します。 +- 側方偏差: 目標に近い経路を優先します。 -各ソフト制約には重み付けが関連付けられており、プリファレンスの調整が可能です。 +各ソフト制約には重みが関連付けられており、優先順位を調整できます。 ## 制限事項 フレネフレーム内の多項式で生成された候補の品質は、参照経路に大きく依存します。 -参照経路がスムースでない場合、生成された候補は走行不能になる可能性が高くなります。 +参照経路がスムーズでない場合、生成された候補はおそらく運転不可能になります。 -現在、有効なトラジェクトリが見つからないと、突然停止するトラジェクトリが発生します。 +有効な経路が見つからない場合、現在では突然停止する経路になります。 -このモジュールは、ゴールレーンのレットに素早く収束する経路を生成することに問題があります。基本的には、すべての障害物を克服した後、このモジュールは車両をゴールレーンに素早く収束させる経路(つまり、平均横方向逸脱と最終横方向逸脱が低い経路)を優先するはずです。ただし、現時点では正しく機能していません。 +このモジュールは、目標車線に迅速に収束する経路を生成することに問題があります。基本的に、すべての障害物を克服した後、モジュールは自車が目標車線に迅速に再収束する経路(つまり、平均側方偏差と最終側方偏差が小さい経路)を優先する必要があります。ただし、これは現在正しく機能していません。 -## 今後の取り組み +## 今後の作業 -このモジュールには次のような潜在的な改善事項が含まれます。 +このモジュールの可能な改善点を以下に示します。 -\*動的重み調整アルゴリズムの実装: 全ての障害物が回避された後、シチュエーションに応じて重みを動的に変更する (つまり、曲率が低く、平均横方向逸脱量が低いパスを優先する)。 +- 動的な重み調整アルゴリズムの実装: シナリオに応じて重みを動的に変更する (つまり、すべての障害物を回避した後、曲率が小さく、平均横方向偏差が小さい経路を優先する)。 -\*コンピューティング時間を改善し、より動的なソフト制約の重み調整を行うことができる、多目的最適化の実装 [関連出版物](https://ieeexplore.ieee.org/abstract/document/10180226)。 +- コンピューティング時間を短縮し、より動的なソフト制約重み調整を行うために、複数目的最適化を実装する。[関連する出版物](https://ieeexplore.ieee.org/abstract/document/10180226)。 -\*別のサンプル取得手法としてベジエ曲線を実装する [sampling_based_plannerモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner)を参照。 +- 別のサンプル取得方法としてベジェ曲線を実装する。[sampling_based_plannerモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/sampling_based_planner)を参照のこと。 -\*サンプリングベースの行動経路モジュールで他のいくつかの行動経路モジュールを置き換えることができる可能性を検討する。 +- いくつかの他の動作経路モジュールを、サンプリングベース動作経路モジュールに置き換える可能性を調査する。 -\*このモジュールが成熟し、いくつかの制限が解決されたら、このモジュールのリアルライフテストを実施する。 +- このモジュールが成熟し、いくつかの制限点が解決されれば、実際のテストを実行する。 ## その他の可能性 -現在、このモジュールは静的障害物回避用パスの作成を目的としています。ただし、サンプリングプランナーの性質により、このモジュールを車線変更、動的回避、目標への一般的な到達などの他のタスクに拡張または転用できます。適切な候補の剪定とソフト制約の適切な重み調整を前提に、サンプリングプランニングの手法を他の行動経路モジュールの代替として使用することが可能です。 +このモジュールは現在、静止障害物回避用の経路の作成を目的としています。ただし、サンプリングプランナの性質により、このモジュールを車線変更、動的回避、一般的な目標への到達など他のタスクに拡張または転用できます。適切な候補の剪定と適切なソフト制約重み調整を想定すれば、サンプリングプランニングアプローチを他の動作経路モジュールの代替として使用することは可能です。 + diff --git a/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md index 088c6a678fb85..337a4b13ef26a 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/README.md @@ -1,32 +1,33 @@ -# 側方シフト設計 +# 横ずれ設計 -(リモート制御用)外部の指示に従って経路を左右にシフトします。 +(リモート制御用)外部からの指示に従って経路を左または右にシフトします。 -## 側方シフトモジュール処理の概要 +## Side Shiftモジュールプロセスの概要 -1. 必要な横方向オフセット入力を受信します。 -2. 次の条件下で`requested_lateral_offset_`を更新します。 - a. 最後の更新時刻が経過したか確認します。 - b. 必要な横方向オフセット値が前の値と異なることを確認します。 -3. 側方シフトモジュールのステータスがSHIFTINGステータスの場合は、シフトポイントをパスに挿入します。 +1. 必要な横ずれオフセット入力を受信する。 +2. 以下の条件を満たす場合に`requested_lateral_offset_`を更新する。 + a. 最後の更新時刻が経過しているかどうかを確認する。 + b. 必要な横ずれオフセット値が前の値と異なっていることを確認する。 +3. Side ShiftモジュールのステータスがSHIFTINGステータスでなければ、シフトポイントをパスに挿入する。 -`requested_lateral_offset_`は最新の値で常に更新され、キューに入れられないことに注意してください。 +`requested_lateral_offset_`は最新の値で継続的に更新され、キューに入れられないことに注意してください。 -## 側方シフトのステータス +## Side Shiftのステータス -側方シフトには3つの異なるステータスがあります。SHIFTINGステータスの間はパスを更新できないことに注意してください。 +Side Shiftには3つの異なるステータスがあります。SHIFTINGステータス中はパスを更新できないことに注意してください。 1. BEFORE_SHIFT:シフトの準備。 -2. SHIFTING:現在シフト処理中。 +2. SHIFTING:現在シフト中です。 3. AFTER_SHIFT:シフト完了。
![case1](images/side_shift_status.drawio.svg){width=1000} -
側方シフトのステータス
+
side shiftステータス
## フローチャート + ```plantuml @startuml skinparam monochrome true @@ -50,6 +51,7 @@ stop @enduml ``` + ```plantuml @startuml skinparam monochrome true @@ -76,6 +78,7 @@ stop @enduml ``` + ```plantuml @startuml skinparam monochrome true @@ -113,3 +116,4 @@ partition updateState { @enduml ``` + diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md index 526756630d514..387b71f84a586 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/README.md @@ -1,14 +1,14 @@ -# スタートプランナ設計 +## スタートプランナー設計 ## 目的 / 役割 -このモジュールは、路肩車線または道路脇車線から道路車線の中央に安全に合流するための経路を生成して計画します。 +このモジュールは、路肩または道路脇の車線から道路中央の車線に安全に合流するためのパスを生成して計画します。 -具体的には、以下の機能を含みます。 +具体的には、次の機能が含まれます。 -- 路肩車線または道路脇車線から道路車線の中心まで自動的に開始するための経路を計画します。 -- 路肩車線に駐車車両が存在する場合、モジュールは、指定されたマージンの隙間から開始できる経路を生成します。 -- 生成された経路を走行中に他の交通参加者との衝突が検出された場合、可能な限り停止します。 +- 路肩または道路脇の車線から道路中央の車線へ自動的に開始するためのパスを計画する。 +- 路肩に駐車車両がある場合、モジュールは指定されたマージンのギャップを残して開始できるパスを生成する。 +- 生成されたパスを走行中に他の交通参加者との衝突が検出された場合、可能な限り停止する。
![start_planner_module](images/start_planner_example.png){width=1100} @@ -16,94 +16,99 @@ ## ユースケース -経路生成がどのように実行されるかを示す、典型的な例を示します。経路生成は路肩車線から開始する例を示していますが、道路脇車線から開始する例も生成できます。 +パスの生成方法の典型的な例を示します。路肩からパスの生成を開始する例を示していますが、道路脇の車線からも生成できます。
![shift_pull_out_from_road_lane](images/shift_pull_out_path_from_road_lane.drawio.svg){width=1100}
-### **ユースケース1: シフト・プルアウト** +### **ユースケース 1: シフト・プルアウト** -路肩車線に前方に駐車車両がなく、路肩車線が十分な長さの場合、前進シフトプルアウト経路(連続したジャークを持つクロソイド曲線)が生成されます。 +路肩で、前方に駐車車両がなく、路肩が十分に長い場合、前方シフト・プルアウトパス(一貫したジャークを持つクロソイド曲線)が生成されます。
![shift_pull_out](images/shift_pull_out_path.drawio.svg){width=1100}
-### **ユースケース2: ジオメトリカル・プルアウト** +### **ユースケース 2: ジオメトリック・プルアウト** -路肩車線に前方に障害物があり、後方に十分な長さがない場合、ジオメトリカルプルアウト経路が生成されます。 +路肩で、前方に障害物があり、後方の路肩が十分に長くない場合、ジオメトリック・プルアウトパスが生成されます。
![geometric_pull_out](images/geometric_pull_out_path.drawio.svg){width=1100}
-### **ユースケース3: バックワード・アンド・シフト・プルアウト** +### **ユースケース 3: 後退とシフト・プルアウト** -路肩車線に前方に駐車車両があり、後方に十分な長さがある場合、後退して前進シフトプルアウト経路を生成する経路が作成されます。 +路肩で、前方に駐車車両があり、後方の路肩が十分に長い場合、後退して前進シフト・プルアウトパスを生成するパスが作成されます。
![shift_pull_out_with_back](images/shift_pull_out_path_with_back.drawio.svg){width=1100}
-### **ユースケース4: バックワード・アンド・ジオメトリカル・プルアウト** +### **ユースケース 4: 後退とジオメトリック・プルアウト** -路肩車線に前方に障害物があり、後退するのに十分なスペースがない場合、後退してジオメトリカルプルアウト経路を生成する経路が生成されます。 +路肩で、前方に障害物があり、後退するスペースが十分でない場合、後退してからジオメトリック・プルアウトを行うパスが生成されます。
![geometric_pull_out_with_back](images/geometric_pull_out_path_with_back.drawio.svg){width=1100}
-### **ユースケース5: フリースペース・プルアウト** +### **ユースケース 5: フリースペース・プルアウト** -シフトプルアウト経路とジオメトリカルプルアウト経路の両方が作成できない状況で、フリースペース経路を生成できる情報がマップに記載されている場合、フリースペースアルゴリズムに基づいた経路が生成されます。 +シフト・プルアウトパスとジオメトリック・プルアウトパスの両方を生成できない状況で、フリースペースパスが生成できるという情報が地図に付与されている場合、フリースペースアルゴリズムに基づくパスが生成されます。 -**注:** これらの経路を生成するパターンは既定のパラメーターに基づいています。ただし、次のセクションで説明するように、経路生成ポリシーを変更したり、静的オブジェクトの周囲のマージンを調整したりすることで、後退を含む経路や、幾何学的経路が生成される可能性が高くなります。 +
+ ![freespace_path_jp](images/freespace_pull_out_jp.png){width=1100} +
+ +**上記の例におけるパス生成のパターンは、デフォルトのパラメータに基づいています。ただし、以下のセクションで説明するように、パス生成ポリシーを変更したり、静的オブジェクトの周りのマージンを調整したりすることで、後退する可能性が高いパスや幾何学的なパスを生成する可能性を高めるなどの、側面を制御できます。** -## 制限 +## 制限事項 -以下にいくつかの注目すべき制限を示します。 +以下にいくつかの注目すべき制限事項を記載します。 -- 路肩の前後、または両側に駐車車両があり、規定された距離を維持できない場合、停止経路が生成され、潜在的なデッドロックにつながります。 -- behavior_path_planner の既定設定では、回避モジュールが後段階で動作し、オブジェクトを回避しようとします。ただし、start_planner モジュールが障害物を回避できる経路を出力するとは限りません。つまり、回避不能な経路が生成されると、デッドロックが発生する可能性があります。 -- 安全性のチェックのパフォーマンスは、map_based_prediction ノードで生成される予測経路の精度に依存します。現在、加速度を考慮した予測経路は生成されず、低速で移動するオブジェクトの経路は正確に生成されない可能性があることに注意してください。 -- ルールベースアルゴリズムの現在の仕様によると、経路の安全性と人間の自然さとの間にはトレードオフがあります。このトレードオフを管理するためにパラメーターを調整することは可能ですが、これらの側面をより良く調和させるために改善が必要です。 +- 路肩の前後または左右に駐車車両があり、それらとの間に一定の距離を維持することができない場合、停止パスが生成され、デッドロックが発生する可能性があります。 +- `behavior_path_planner` のデフォルト設定では、回避モジュールが後工程で動作し、オブジェクトを回避しようとします。ただし、`start_planner` モジュールが障害物を回避できるパスを出力するとは限りません。つまり、回避不可能なパスが生成されると、デッドロックが発生する可能性があります。 +- セーフティチェックのパフォーマンスは、`map_based_prediction` ノードによって生成される予測パスの精度に依存します。現在、加速度を考慮した予測パスは生成されず、低速オブジェクトのパスは正確に生成されない可能性があるため、注意が必要であることに注意してください。 +- ルールベースアルゴリズムの現在の仕様を考慮すると、パスの安全性と人間にとっての自然さとのトレードオフがあります。このトレードオフを管理するためパラメータを調整することは可能ですが、これらの側面をさらに調整するために改善が必要です。 ## 開始/終了条件 ### **開始条件** -`StartPlannerModule` は、`isExecutionRequested` 関数で評価された特定の基準に基づいて実行を開始するように設計されています。モジュールは、次の条件下では **開始しません**。 +`StartPlannerModule` は、`isExecutionRequested` 関数によって評価される特定の基準に基づいて、実行を開始するように設計されています。次の条件が満たされている場合、モジュールは **実行しません**。 -1. **道路中央での開始位置**: 車両の開始位置が道路の中央にあると判断された場合、モジュールは開始しません。これにより、プランナーは路肩の位置から開始されます。 +1. **自車位置が道路の中央**: モジュールは、車両の自車位置が道路の中央にあると判定された場合に開始されません。これにより、プランナーは路肩の位置から開始されます。 -2. **車両が開始位置から遠い**: 車両が開始位置から離れている場合、モジュールは実行されません。これにより、新しい目標が与えられた場合に冗長な実行が防止されます。 +2. **車両が開始位置から離れている**: 車両が開始位置から離れている場合、モジュールは実行しません。これにより、新しいゴールが与えられたときの冗長な実行が防止されます。 -3. **車両が目標位置に到達**: 車両がすでに目標位置に到達している場合、モジュールは開始せず、目的地に到着したときに不要な実行を回避します。 +3. **車両がゴールに到着**: 車両がすでにゴール位置に到着している場合、モジュールは開始されません。これにより、目的地に到着したときの不要な実行が防止されます。 -4. **車両が走行中**: 車両がまだ走行中の場合、モジュールは開始を延期します。これにより、安全のために安定した静止状態からプランニングが実行されます。 +4. **車両が走行中**: 車両が依然として走行中の場合、モジュールは開始を延期します。これにより、安全のために安定した静止状態からプランニングが行われるようになります。 -5. **同じ経路セグメント内で目標位置が後方**: 目標位置が現在の経路上で自車位置の後方にある場合、モジュールは開始しません。この条件は、現在サポートされていない、車両が現在の経路で後退する必要がある経路のプランニングに伴う複雑さを回避するためにチェックされます。 +5. **同じルートセグメント内でゴールが後方**: モジュールは、ゴール位置が同じルートセグメント内で自車位置の後方にある場合に開始されません。この条件は、車両が現在の経路上で後退する必要があるルートのプランニングにおける複雑さを回避するためにチェックされ、現在はサポートされていません。 ### **終了条件** -`StartPlannerModule` は、使用されているプランナーの種類に応じて、特定の条件が満たされると終了します。`canTransitSuccessState` 関数は、以下の基準に基づいてモジュールを成功状態に移行する必要があるかどうかを判断します。 +`StartPlannerModule` は、特定の条件が満たされると終了し、使用されているプランナーの種類によって異なります。 `canTransitSuccessState` 関数は、以下の基準に基づいてモジュールが成功状態に移行する必要があるかどうかを判断します。 -#### フリーパスプランナーがアクティブな場合 +#### Freespace Planner がアクティブな場合 -- フリーパス経路の終点に到達した場合、モジュールは成功状態に移行します。 +- Freespace パスのエンドポイントに到達した場合、モジュールは成功状態に移行します。 -#### その他の種類のプランナーがアクティブな場合 +#### 他のタイプのプランナーがアクティブな場合 -成功状態への移行は、次の条件によって決定されます。 +成功状態への移行は、以下の条件によって決定されます。 -- リバースパスが生成されている場合、またはプルアウトパスの検索に失敗した場合: +- リバースパスが生成されるか、プルアウトパスの検索が失敗した場合: - モジュールは成功状態に移行しません。 -- プルアウトパスのシフトセクションの終点に到達した場合: +- プルアウトパスのシフトセクションのエンドポイントに到達した場合: - モジュールは成功状態に移行します。 以下のフローチャートは、`canTransitSuccessState` 関数における意思決定プロセスを示しています。 + ```plantuml @startuml @startuml @@ -150,109 +155,109 @@ endif @enduml ``` -## セーフティアシュアランスのコンセプト +## 安全保証のコンセプト -衝突防止アプローチは、静的情報を考慮した経路生成と、生成された経路の安全性を確保するためのダイナミック障害物との衝突検出という2つの主要コンポーネントに分かれています。 +衝突安全性へのアプローチは、静的情報を考慮した経路の生成と、生成された経路の安全性を確保するための動的障害物との衝突検出の 2 つの主要なコンポーネントに分けられます。 -### 1. 静的情報を使用した経路生成 +### 1. 静的情報を考慮した経路の生成 -- **経路逸脱チェック**: 経路が指定されたレーンレット内に留まることを保証します。この機能はデフォルトで有効ですが、必要に応じて非アクティブ化できます。 +- **経路逸脱チェック**:経路が指定されたレーンレット内に留まることを保証します。この機能はデフォルトで有効になっていますが、必要に応じて無効にすることができます。 -- **経路からの静的障害物クリアランス**: これは、静的障害物の周辺に十分なマージンが維持されていることを確認することを含みます。このプロセスには、現在の位置からプルアウトのエンドポイントまでの車両サイズのフットプリントを作成することが含まれます。これはパラメータで調整できます。その後、静的障害物ポリゴンまでの距離が計算されます。この距離が指定された閾値より小さい場合、経路は安全でないと見なされます。閾値レベル(例:'[2.0, 1.0, 0.5, 0.1]')は設定可能で、システムは、後続のセクションで説明する設定された検索優先順位に基づいて可能な限り最高の閾値を満たす経路を検索し、ポリシーに基づいて安全な経路の選択を確保します。最小閾値を満たす経路がなければ、安全な経路がないと判断されます。 +- **経路からの静的障害物のクリアランス**:静的障害物の周囲に十分なマージンが維持されていることを検証します。このプロセスには、車両サイズのフットプリントを現在位置からプルアウトエンドポイントまで作成することが含まれ、パラメータで調整できます。その後、静的障害物ポリゴンとの距離が計算されます。この距離が指定されたしきい値を下回ると、経路は安全でないものとみなされます。しきい値レベル(例:[2.0、1.0、0.5、0.1])を設定でき、システムは後述する検索優先順位に基づいて可能な限り最高のしきい値を満たす経路を検索し、ポリシーに基づいて安全な経路が選択されます。しきい値を満たす経路がない場合、安全な経路がないことが判断されます。 -- **静止物からのクリアランス**: 車両の前後に配置された静止物から十分な距離を維持することは、安全上不可欠です。経路と静止物に一定のマージンがあっても、シフト開始位置から前方の静止物までの距離が「`collision_check_margin_from_front_object`」メートル未満の場合、または後方の静止物までの距離が「`back_objects_collision_check_margin`」メートル未満の場合、経路は安全でないと見なされます。 +- **静止物体からのクリアランス**:車両の前方と後方に配置された静止物体から十分な距離を維持することは、安全上不可欠です。経路と静止物体がある程度の余白が確認されていても、シフト開始位置から前面の静止物体までの距離が `collision_check_margin_from_front_object` m 未満の場合、または後方の静止物体までの距離が `back_objects_collision_check_margin` m 未満の場合は、経路は安全でないとみなされます。 - - なぜ前面のオブジェクトからのマージンが必要なのですか? - クリアランスから静的障害物への経路が最小限で、前方に停止した車両がある「ジオメトリックプルアウトパス」のシナリオを検討します。この場合、経路は安全基準を満たしている可能性があり、したがって生成される可能性がありますが、同時に動作する回避モジュールは障害物を回避することが不可能であると見なす可能性があり、車両のデッドロックにつながる可能性があります。回避操作のための十分な距離を確保するために、前面障害物までの距離が評価されます。このパラメータを増やすことで、回避モジュール内での無効化を防ぐことができますが、後方経路またはジオメトリックプルアウトパスの生成頻度が高くなる可能性があり、人間には不自然に見える経路が生じる可能性があります。 + - なぜ前面の物体からの余白が必要ですか? + 「ジオメトリカルプルアウトパス」のシナリオでは、経路から静的障害物までのクリアランスが最小限で、前方に停止している車両がある場合を考えてください。この場合、経路は安全基準を満たし、生成される可能性がありますが、同時に動作する回避モジュールが障害物を回避できないと判断し、車両のデッドロックにつながる可能性があります。回避操作のために十分な距離を確保するため、前面の障害物との距離が評価されます。このパラメータを増やすことで回避モジュール内での固定化を防ぐことができますが、「バックワードパス」または「ジオメトリカルプルアウトパス」が生成されることが多くなり、人間にとって不自然に見える経路になる可能性があります。 - - なぜ後方のオブジェクトからのマージンが必要なのですか? - 前のオブジェクトの場合、経路から静的障害物へのクリアランスが最小限であっても、回避計画を通じて経路自体に上書きできる別のビヘイビアモジュールが存在するため、静的障害物から安全な距離を維持できます。ただし、車両の後ろにあるオブジェクトの場合、start_planner 以外の他のビヘイビアモジュールが経路を変更してマージンを確保することは不可能であり、「obstacle_cruise_planner」などのアクションモジュールによるデッドロックや、その後の無効化につながる可能性があります。したがって、後方の静止物に対するマージンが設定されています。 + - なぜ後方の物体からの余白が必要ですか? + 前面の物体に対しては、たとえ経路から静的障害物までのクリアランスが最小限であっても回避計画を通じて経路を上書きし、静的障害物から安全な距離を維持できる別の動作モジュールが介入できます。しかし、車両後方の物体については、start_planner 以外の別の動作モジュールが経路を変更してマージンを確保することは不可能であり、「obstacle_cruise_planner」などのアクションモジュールによるデッドロックやその後の固定化につながる可能性があります。したがって、後方の静止物体に対してマージンが設定されています。 -静的障害物からのクリアランスが「'[2.0, 1.0, 0.5, 0.1]'」に設定されている場合の開始ポーズ検索手順の表現を以下に示します。プロセスは次のとおりです。 +`collision_check_margins` が [2.0、1.0、0.5、0.1] に設定されている場合の開始ポーズ検索ステップの表現を次に示します。プロセスは次のとおりです。 1. **開始ポーズ候補の生成** - - 車両の現在の位置を基準点として設定します。 - - 車両の後ろの最大「`max_back_distance`」までの考慮範囲を決定します。 - - 「backward_search_resolution」で定義された間隔で、後方方向に開始ポーズ候補を生成します。 - - 現在の位置を開始ポーズ候補の 1 つとして含めます。 + - 車両の現在位置を基準点として設定します。 + - `max_back_distance` まで車両後方の考慮エリアを決定します。 + - `backward_search_resolution` で定義された間隔で後方方向に開始ポーズの候補ポイントを生成します。 + - 現在位置を開始ポーズの候補の 1 つとして含めます。 ![start pose candidate](images/start_pose_candidate.drawio.svg){width=1100} -2. **最大マージンで検索開始** +2. **最大の余白で検索を開始** - - 最大しきい値(例:2.0 メートル)で検索を開始します。 - - 各開始ポーズ候補が 2.0 メートル以上のマージンを維持しているかどうかを評価します。 + - 最も大きなしきい値(例:2.0 メートル)で検索を開始します。 + - 各開始ポーズの候補が 2.0 メートル以上の余白を維持しているかどうかを評価します。 - 同時に、その開始ポーズから生成された経路が他の必要な基準(例:経路逸脱チェック)を満たしていることを確認します。 - - 後述の検索優先順位に従って順番に評価し、条件を満たせば開始ポーズを採用します。 + - 後述する検索優先順位に従って順番に評価し、条件を満たせば開始ポーズを採用します。 -3. **しきい値レベルに応じた検索の繰り返し** +3. **しきい値レベルによる検索の繰り返し** - - 条件を満たす開始ポーズが見つからない場合は、しきい値を次のレベル(例:1.0 メートル)まで下げて検索を繰り返します。 + - 条件を満たす開始ポーズが見つからない場合は、しきい値を次のレベル(例:1.0 メートル)に下げ、検索を繰り返します。 4. **検索の継続** - 条件を満たす開始ポーズが見つかるまで、またはしきい値レベルが最小値(例:0.1 メートル)に達するまで検索を続けます。 - このプロセスの目的は、可能な限り大きなマージンを確保し、かつ経路に必要な条件を満たす開始ポーズを見つけることです。 -5. **停止パスの生成** - - どのしきい値レベルでも条件を満たす開始ポーズがない場合は、安全性を確保するために停止パスを生成します。 +5. **停止経路の生成** + + - どのしきい値レベルでも条件を満たす開始ポーズがない場合は、停止経路を生成して安全を確保します。 #### **検索優先順位** -静的障害物に対する十分なクリアランスを確保した安全な経路を前に生成できない場合、車両の現在の位置から後方検索を実行して、プルアウトパスの生成に適した開始点を特定します。 +静的障害物を十分にクリアできる安全な経路を前方まで生成できない場合、車両の現在位置から後方検索が行われ、プルアウトパスを生成するための適切な開始点が特定されます。 -この後方検索中に、`search_priority`パラメータに基づいて異なるポリシーを適用できます。 +この後方検索中には、`search_priority` パラメータに基づいてさまざまなポリシーが適用できます。 -`efficient_path` を選択すると、車両がどれほど後方に移動する必要があっても、シフトプルアウトパスを作成することに重点が置かれます。 -`short_back_distance` を選択すると、できるだけ後方移動が少なくなる場所を探すことを目的としています。 +`efficient_path` を選択すると、車両をどれだけ後方に移動させる必要があるかに関係なく、シフトプルアウトパスを作成することに焦点を当てます。 +`short_back_distance` を選択すると、後方移動が最小限の場所を探すようになります。 ![priority_order](./images/priority_order.drawio.svg) -**優先順位** +`PriorityOrder` はペアのベクトルとして定義され、各要素は開始ポーズ候補のインデックスを表す `size_t` インデックスとプランナーの種類で構成されます。`PriorityOrder` ベクトルは先頭から順に処理されるため、ベクトルの上位にあるペアはプルアウトパスの生成において優先的に選択されます。 -`PriorityOrder` は、各要素が開始姿勢候補のインデックスを表す `size_t` インデックスとプランナータイプで構成されるペアのベクトルとして定義されます。 PriorityOrder ベクトルは先頭から順次処理され、ベクトルの先頭にリストされたペアがプルアウトパスの生成で優先されます。 +##### `efficient_path` -##### **`efficient_path`** +`search_priority` が `efficient_path` に設定されており、`shift_pull_out` を優先する場合、`PriorityOrder` 配列はすべての開始ポーズ候補に対して `shift_pull_out` がグループ化され、その後で次のプランナ―の種類に移るように設定されます。この優先順位付けは配列の順序に反映され、`shift_pull_out` は `geometric_pull_out` の前にリストされます。 -`search_priority` が `efficient_path` に設定され、`shift_pull_out` を優先する場合、`PriorityOrder` 配列は `shift_pull_out` がすべての開始姿勢候補にグループ化された後、次のプランナータイプに移行するように設定されます。この優先順位は配列の順序に反映され、`shift_pull_out` が `geometric_pull_out` の前にリストされています。 +| インデックス | プランナータイプ | +|---|---| +| 0 | shift_pull_out | +| 1 | shift_pull_out | +| ... | ... | +| N | shift_pull_out | +| 0 | geometric_pull_out | +| 1 | geometric_pull_out | +| ... | ... | +| N | geometric_pull_out | -| インデックス | Plan手法 | -| ------------ | ------------------ | -| 0 | shift_pull_out | -| 1 | shift_pull_out | -| ... | ... | -| N | shift_pull_out | -| 0 | geometric_pull_out | -| 1 | geometric_pull_out | -| ... | ... | -| N | geometric_pull_out | - -この手法では、`geometric_pull_out` に進む前に、`shift_pull_out` が適切である可能性が高い状況で効率的である可能性のある `shift_pull_out` ですべて候補を試すことを優先します。 +このアプローチは、`geometric_pull_out` に進む前に `shift_pull_out` で候補をすべて試行することを優先し、`shift_pull_out` が適切である可能性がある状況では効率的である可能性があります。 ##### `short_back_distance` -`search_priority` が `short_back_distance` に設定されている場合、アレイは各スタートポーズ候補のプランナタイプを交互に使用して、前の候補が成功した場合に車両が後方移動する距離を最小化できます。 +`search_priority` が `short_back_distance` に設定されている場合、アレイは開始ポーズ候補ごとにプランナータイプを切り替えます。これにより、以前の候補が成功した場合に車両が後退する必要がある距離を最小限に抑えることができます。 -| Index | Planningコンポーネント | -| ----- | ---------------------- | -| 0 | shift_pull_out | -| 0 | geometric_pull_out | -| 1 | shift_pull_out | -| 1 | geometric_pull_out | -| ... | ... | -| N | shift_pull_out | -| N | geometric_pull_out | +| インデックス | Plannerタイプ | +| ----- | ------------------ | +| 0 | shift_pull_out | +| 0 | geometric_pull_out | +| 1 | shift_pull_out | +| 1 | geometric_pull_out | +| ... | ... | +| N | shift_pull_out | +| N | geometric_pull_out | -この順番付けは、後退距離を最小化することが優先される場合に有益であり、各プランナーに最も近い可能な開始位置で成功する平等な機会を与えます。 +この順序付けは、後退距離の最小化が優先され、各プランナーがなるべく近いスタート地点で成功する可能性が均等となる場合に有効です。 ### 2. 動的障害物との衝突検出 -- **動的衝突検出における RSS の適用**: 衝突検出は、安全距離が維持されているかどうかを評価するために RSS (責任感応型安全) モデルに基づいています。[安全確認機能の説明](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) を参照してください。 +- **ダイナミック衝突検出での RSS の適用**: 衝突検出は、安全距離が保持されているかどうかを評価するために RSS (責任感のある安全) モデルに基づいています。[安全チェック機能の説明](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) を参照してください。 + +- **衝突チェック実行範囲**: ダイナミックオブジェクトとの衝突に関する安全チェックは、各機動の始点と終点の間で定義された境界内で行われ、自車位置が自車の後ろから来るダイナミックオブジェクトの進行を妨げたり妨害したりしないようにします。 -- **衝突確認実行範囲**: 動的物体との衝突に対する安全確認は、各機動の開始点と終了点間の定義された境界内で行われ、自車位置が自分の後方から来る動的物体の進行を妨げたり、妨害したりしないことを保証します。 +- **衝突応答ポリシー**: 生成されたパスに沿ってダイナミックオブジェクトとの衝突が検出された場合、衝突検出が出発前に発生した場合、モジュール決定は非アクティブになります。車両がすでに動き始めていた場合は、ブレーキ制約内で実行可能であり、後続車が自車位置と車線境界の間のギャップを通過できる場合に、停止を試みます。 -- **衝突対応ポリシー**: 生成されたパス上の動的物体との衝突が検出されると、出発前に衝突検出が発生した場合、モジュール非アクティブ決定が登録されます。車両がすでに動き始めた場合、制動制約内で実行可能であり、後続車両が自車と車線境界の隙間を通過できる場合に限り、停止を試みます。 ```plantuml @startuml @@ -276,34 +281,35 @@ stop @enduml ``` -#### **シフトプルアウトに対する安全機能検査の範囲の例** +#### **シフトプルアウト時に実行される安全確認範囲の例** -シフトプルアウトに対する安全機能検証の範囲の例を提示する。安全機能検査はシフトの開始から終了まで実施される。自車輪郭が後方車両の走行に十分なスペースがない場合、動的物体に関連する安全機能検査は無効化される。 +シフトプルアウト時の安全確認範囲の例を示します。安全確認はシフト開始から終了まで実行されます。後続車両が通行するのに十分なスペースがない場合、動的オブジェクトに対する安全確認は無効になります。
- ![シフトプルアウトに対する安全機能検査範囲](images/collision_check_range_shift_pull_out.drawio.svg){width=1100} + ![シフトプルアウト時の安全確認範囲](images/collision_check_range_shift_pull_out.drawio.svg){width=1100}
-**なお、後退動作時は安全機能検査は実施されない。安全機能検証は後退動作が停止した時点から開始される。** +**注:後退時は安全確認は実行されません。安全確認は後退動作が停止した地点から開始されます。** -## RTC(Remote Teleoperation Capability)インターフェース +## RTCインターフェイス -本システムは、手動モードと自動モードで動作が大きく異なり、特に走行開始前、動的障害物とのやり取りにおいて違いがある。以下に、各モードの動作を記載する。 +システムは、手動モードと自動モードで別々に動作します。特に、出発前と動的障害物との相互作用に関する動作が異なります。各モードにおける具体的な動作を以下に示します: ### 承認が必要な場合 -#### 前進走行 +#### 前進運転 -- **走行開始承認必須**:経路が生成されていても、走行開始には承認が必要である。後方から接近する車両などの動的障害物が危険な場合、候補経路は表示されるが、走行開始には承認が必要である。 +- **開始承認が必要**: パスが生成されていても、移動を開始するには承認が必要です。後方から接近する車両など、動的オブジェクトが危険を及ぼす場合、候補パスが表示される可能性がありますが、出発には承認が必要です。 -#### 後退走行 + 前進走行 +#### 後退運転 + 前進運転 -- **複数回の承認が必要**:計画経路に後退走行が含まれる場合は、後退開始前と前進走行再開前に承認が必要である。前進走行開始前は、動的障害物に対する安全機能検査が実施される。障害物が検出された場合、走行開始承認が必要である。 +- **複数の承認が必要**: 計画されたパスに後退運転が含まれる場合、後退を開始する前と前進運動を再開する前に複数の承認が必要です。前進運動を開始する前に、システムは動的障害物に対する安全確認を実行します。検出された場合、出発の承認が必要です。 -この区別により、手動モード(`enable_rtc`が真の場合)において重要な場面で人間の介入が必要となり、自動モードおよび手動モードの両方で動的障害物が存在する場合に安全でない動作を防止するための自動安全機能検査を実施することで、安全な車両動作が確保される。 +この差別化により、手動モード(`enable_rtc`がtrue)の重要な場面で人間の介入を必要とすることで安全な運転を確保し、両方のモードで自動安全確認を取り入れ、動的障害物がある場合の安全でない動作を防ぎます。 ## 設計 + ```plantuml @startuml package start_planner{ @@ -345,201 +351,202 @@ PullOutPath --o PullOutPlannerBase @enduml ``` -## Planningコンポーネントの一般パラメータ - -| パラメータ名 | 単位 | 型 | 説明 | デフォルト値 | -| :--------------------------------------------------------- | :---- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | -| th_arrived_distance | [m] | double | 到達後経路終了距離のしきい値 | 1.0 | -| th_stopped_velocity | [m/s] | double | 到達後経路終了速度のしきい値 | 0.01 | -| th_stopped_time | [s] | double | 到達後経路終了時間のしきい値 | 1.0 | -| th_distance_to_middle_of_the_road | [m] | double | 車両が道路の中間点にいるかどうかを判断するための距離のしきい値 | 0.1 | -| collision_check_margins | [m] | double | 障害物衝突チェックマージンのリスト | [2.0, 1.0, 0.5, 0.1] | -| shift_collision_check_distance_from_end | [m] | double | 衝突チェック距離の終端からのシフト終端姿勢 | -10.0 | -| geometric_collision_check_distance_from_end | [m] | double | 衝突チェック距離の終端幾何学的終端姿勢 | 0.0 | -| collision_check_margin_from_front_object | [m] | double | 前方の対象からの衝突チェックマージン | 5.0 | -| skip_rear_vehicle_check | - | bool | 後続車両チェックをスキップするフラグ(後続車両チェックは、自動運転車が後続車両の進行を妨げているときに安全チェックをスキップして出発を続行するために実行される) | false | -| extra_width_margin_for_rear_obstacle | [m] | double | 自動運転車が路肩車線から車線に合流する間に、後方の障害物が自動運転車を追い抜くことができるかどうかを判断するときに、認知される後方の障害物の幅に追加される追加幅 | 0.5 | -| object_types_to_check_for_path_generation.check_car | - | bool | getPathGen用車検フラグ | true | -| object_types_to_check_for_path_generation.check_truck | - | bool | getPathGen用トラック検査フラグ | true | -| object_types_to_check_for_path_generation.check_bus | - | bool | getPathGen用バス検査フラグ | true | -| object_types_to_check_for_path_generation.check_bicycle | - | bool | getPathGen用自転車検査フラグ | true | -| object_types_to_check_for_path_generation.check_motorcycle | - | bool | getPathGen用オートバイ検査フラグ | true | -| object_types_to_check_for_path_generation.check_pedestrian | - | bool | getPathGen用歩行者検査フラグ | true | -| object_types_to_check_for_path_generation.check_unknown | - | bool | getPathGen用障害物検査フラグ | true | -| center_line_path_interval | [m] | double | 参照中心線経路ポイント間隔 | 1.0 | +## start_planner の汎用パラメータ + +| 名称 | 単位 | タイプ | 説明 | 初期値 | +| :---------------------------------------------------------- | :--- | :----|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| :----| +| `th_arrived_distance` | [m] | double | 終端パスの到着距離の閾値 | 1.0 | +| `th_stopped_velocity` | [m/s] | double | 終端パスの到着速度の閾値 | 0.01 | +| `th_stopped_time` | [s] | double | 終端パスの到着時間の閾値 | 1.0 | +| `th_distance_to_middle_of_the_road` | [m] | double | 車両が道路の中央にいるかどうかを判断するための距離閾値 | 0.1 | +| `collision_check_margins` | [m] | double | 障害物衝突チェックマージンリスト | [2.0, 1.0, 0.5, 0.1] | +| `shift_collision_check_distance_from_end` | [m] | double | エンドポーズから衝突チェック距離シフトエンドポーズ | -10.0 | +| `geometric_collision_check_distance_from_end` | [m] | double | エンドポーズから衝突チェック距離ジオメトリエンドポーズ | 0.0 | +| `collision_check_margin_from_front_object` | [m] | double | 前方オブジェクトからの衝突チェックマージン | 5.0 | +| `skip_rear_vehicle_check` | - | bool | リア車両チェックをスキップするフラグ(リア車両チェックは、後続車が進行を妨げているときに自車による出発を安全チェックをスキップして続行するために実行されます) | false | +| `extra_width_margin_for_rear_obstacle` | [m] | double | 車両が路肩の車線から車線に合流する際に、後方障害物が自車を追い越せるかどうかを判断する際、認識された後方障害物の幅に追加される余分な幅 | 0.5 | +| `object_types_to_check_for_path_generation`.`check_car` | - | bool | パス生成のための車の確認フラグ | true | +| `object_types_to_check_for_path_generation`.`check_truck` | - | bool | パス生成のためのトラックの確認フラグ | true | +| `object_types_to_check_for_path_generation`.`check_bus` | - | bool | パス生成のためのバスの確認フラグ | true | +| `object_types_to_check_for_path_generation`.`check_bicycle` | - | bool | パス生成のための自転車の確認フラグ | true | +| `object_types_to_check_for_path_generation`.`check_motorcycle` | - | bool | パス生成のためのオートバイの確認フラグ | true | +| `object_types_to_check_for_path_generation`.`check_pedestrian` | - | bool | パス生成のための歩行者の確認フラグ | true | +| `object_types_to_check_for_path_generation`.`check_unknown` | - | bool | パス生成のための未知の確認フラグ | true | +| `center_line_path_interval` | [m] | double | 基準中心線パスポイントのインターバル | 1.0 | ### **自車速度計画** -未完成 +進行中 -### **障害物なし領域の安全確認** +### **安全な空き領域での安全性チェック** -未完成 +進行中 -## 安全確認のパラメータ +## 安全性チェックのパラメータ ### 停止基準パラメータ -`stop_condition` のパラメータは停止条件の基準を定義します。 +`stop_condition` 以下のパラメータは停止条件の基準を定義します。 -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :------------------------------ | :------ | :----- | :------------------- | :----------- | -| `maximum_deceleration_for_stop` | [m/s^2] | double | 停止時の最大減速度 | 1.0 | -| `maximum_jerk_for_stop` | [m/s^3] | double | 停止時の最大ジャーク | 1.0 | +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------- | :------ | :----- | :-------------------------------------- | :------------ | +| maximum_deceleration_for_stop | [m/s^2] | double | 停止時の最大減速度 | 1.0 | +| maximum_jerk_for_stop | [m/s^3] | double | 停止時の最大ジャーク | 1.0 | ### 自車予測経路パラメータ -`path_safety_check.ego_predicted_path` のパラメータは、自車予測経路特性を指定します。 - -| 名称 | 単位 | 型 | 説明 | デフォルト値 | -| :---------------------------- | :------ | :----- | :----------------------------- | :----------- | -| min_velocity | [m/s] | double | 自車位置の予測経路の最小速度 | 0.0 | -| acceleration | [m/s^2] | double | 自車位置の予測経路の加速度 | 1.0 | -| max_velocity | [m/s] | double | 自車位置の予測経路の最大速度 | 1.0 | -| time_horizon_for_front_object | [s] | double | 先方物体の予測時間幅 | 10.0 | -| time_horizon_for_rear_object | [s] | double | 後方物体の予測時間幅 | 10.0 | -| time_resolution | [s] | double | 自車位置の予測経路の時間分解能 | 0.5 | -| delay_until_departure | [s] | double | 自車が発進するまでの遅延時間 | 1.0 | - -### ターゲットオブジェクトフィルタリングのパラメーター - -`target_filtering` のパラメーターは、セーフティチェックのためのターゲットオブジェクトのフィルタリングに関連しています。 - -| Name | 単位 | タイプ | 説明 | デフォルト値 | -| :---------------------------------------------- | :----- | :----- | :----------------------------------------------- | :----------- | -| safety_check_time_horizon | [秒] | 倍精度 | 自車と動的オブジェクトの予測パスの時間範囲 | 5.0 | -| safety_check_time_resolution | [秒] | 倍精度 | 自車と動的オブジェクトの予測パスの時間解像度 | 1.0 | -| object_check_forward_distance | [m] | 倍精度 | 物体検出の前方距離 | 10.0 | -| object_check_backward_distance | [m] | 倍精度 | 物体検出の後方距離 | 100.0 | -| ignore_object_velocity_threshold | [m/秒] | 倍精度 | 物体が無視される速度しきい値 | 1.0 | -| object_types_to_check.check_car | - | ブール | 車を検査するためのフラグ | true | -| object_types_to_check.check_truck | - | ブール | トラックを検査するためのフラグ | true | -| object_types_to_check.check_bus | - | ブール | バスを検査するためのフラグ | true | -| object_types_to_check.check_trailer | - | ブール | トレーラーを検査するためのフラグ | true | -| object_types_to_check.check_bicycle | - | ブール | 自転車を検査するためのフラグ | true | -| object_types_to_check.check_motorcycle | - | ブール | オートバイを検査するためのフラグ | true | -| object_types_to_check.check_pedestrian | - | ブール | 歩行者を検査するためのフラグ | true | -| object_types_to_check.check_unknown | - | ブール | 不明なタイプのオブジェクトを検査するためのフラグ | false | -| object_lane_configuration.check_current_lane | - | ブール | 現在の車線を検査するためのフラグ | true | -| object_lane_configuration.check_right_side_lane | - | ブール | 右側の車線を検査するためのフラグ | true | -| object_lane_configuration.check_left_side_lane | - | ブール | 左側の車線を検査するためのフラグ | true | -| object_lane_configuration.check_shoulder_lane | - | ブール | 路肩を検査するためのフラグ | true | -| object_lane_configuration.check_other_lane | - | ブール | 他の車線を検査するためのフラグ | false | -| include_opposite_lane | - | ブール | 反対車線を検査に含めるフラグ | false | -| invert_opposite_lane | - | ブール | 反対車線の検査を反転するフラグ | false | -| check_all_predicted_path | - | ブール | すべての予測パスを検査するためのフラグ | true | -| use_all_predicted_path | - | ブール | すべての予測パスを使用するためのフラグ | true | -| use_predicted_path_outside_lanelet | - | ブール | 車線外側の予測パスを使用するためのフラグ | false | - -### 安全確認パラメータ - -`safety_check_params` のパラメータは、安全確認の設定を定義しています。 - -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :--------------------------------------------- | :--- | :----- | :--------------------------------------------------------------------- | :----------- | -| enable_safety_check | - | bool | セーフティチェックを有効にするフラグ | true | -| check_all_predicted_path | - | bool | 予測パスをすべてチェックするフラグ | true | -| publish_debug_marker | - | bool | デバッグマーカーを発行するフラグ | false | -| rss_params.rear_vehicle_reaction_time | [s] | double | 後続車の反応時間 | 2.0 | -| rss_params.rear_vehicle_safety_time_margin | [s] | double | 後続車のセーフティタイムマージン | 1.0 | -| rss_params.lateral_distance_max_threshold | [m] | double | 最大横方向距離のしきい値 | 2.0 | -| rss_params.longitudinal_distance_min_threshold | [m] | double | 最小縦方向距離のしきい値 | 3.0 | -| rss_params.longitudinal_velocity_delta_time | [s] | double | 縦速度のデルタ時間 | 0.8 | -| hysteresis_factor_expand_rate | - | double | ヒステリシスの拡張/縮小率 | 1.0 | -| collision_check_yaw_diff_threshold | - | double | RSSベースのコリジョンチェックの実行時にEgoとオブジェクト間の最大ヨー差 | 1.578 | - -## **経路生成** - -経路生成方法は2つあります。 - -### **Shift Pull Out** - -最も基本的な経路計画開始の手法で、特に障害物がない道路の車線や路側帯で使用されます。 - -プルアウト距離は、速度、側方偏差、および側方ジャークによって計算されます。側方ジャークは、あらかじめ決められた最小値と最大値の中から検索され、安全な経路を生成するものが選択されます。 - -- 道路車線のセンターラインを生成し、現在の位置にシフトします。 -- 合流開始点と終了点の間のセクションでは、回避経路の生成に使用される手法(4つのセグメント定常ジャーク多項式)で経路をシフトします。 -- この経路を道路車線のセンターラインと組み合わせます。 +`path_safety_check.ego_predicted_path` 以下のパラメータは、自車の予測経路特性を指定します。 + +| 名前 | 単位 | 型 | 説明 | デフォルト値 | +| :---------------- | :------ | :----- | :-------------------------------------------------------------------------- | :------------ | +| `min_velocity` | [m/s] | double | 自車の予測パスにおける最小速度 | 0.0 | +| `acceleration` | [m/s^2] | double | 自車の予測パスにおける加速度 | 1.0 | +| `max_velocity` | [m/s] | double | 自車の予測パスにおける最大速度 | 1.0 | +| `time_horizon_for_front_object` | [s] | double | 前方オブジェクトの予測に対する時間的範囲 | 10.0 | +| `time_horizon_for_rear_object` | [s] | double | 後方オブジェクトの予測に対する時間的範囲 | 10.0 | +| `time_resolution` | [s] | double | 自車の予測パスの時間分解能 | 0.5 | +| `delay_until_departure` | [s] | double | 自車が走り出すまでの遅延時刻 | 1.0 | + +### 対象物フィルタリングパラメータ + +`target_filtering` 配下のパラメータは、セーフティチェック用の対象物のフィルタリングに関連しています。 + +| 名称 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------------ | :---- | :----- | :------------------------------------------------------------------------------- | :------------ | +| safety_check_time_horizon | [s] | double | 自車と動的物体の予測パスの時間幅 | 5.0 | +| safety_check_time_resolution | [s] | double | 自車と動的物体の予測パスの時間分解能 | 1.0 | +| object_check_forward_distance | [m] | double | 物体検出の前方距離 | 10.0 | +| object_check_backward_distance | [m] | double | 物体検出の後方距離 | 100.0 | +| ignore_object_velocity_threshold | [m/s] | double | velocityが下の物体は無視 | 1.0 | +| object_types_to_check.check_car | - | bool | 車をチェックするフラグ | true | +| object_types_to_check.check_truck | - | bool | トラックをチェックするフラグ | true | +| object_types_to_check.check_bus | - | bool | バスをチェックするフラグ | true | +| object_types_to_check.check_trailer | - | bool | トレーラーをチェックするフラグ | true | +| object_types_to_check.check_bicycle | - | bool | 自転車をチェックするフラグ | true | +| object_types_to_check.check_motorcycle | - | bool | オートバイをチェックするフラグ | true | +| object_types_to_check.check_pedestrian | - | bool | 歩行者をチェックするフラグ | true | +| object_types_to_check.check_unknown | - | bool | unknownな物体のタイプをチェックするフラグ | false | +| object_lane_configuration.check_current_lane | - | bool | 現在走行している車線をチェックするフラグ | true | +| object_lane_configuration.check_right_side_lane | - | bool | 右側の車線をチェックするフラグ | true | +| object_lane_configuration.check_left_side_lane | - | bool | 左側の車線をチェックするフラグ | true | +| object_lane_configuration.check_shoulder_lane | - | bool | 路肩の車線をチェックするフラグ | true | +| object_lane_configuration.check_other_lane | - | bool | 他の車線をチェックするフラグ | false | +| include_opposite_lane | - | bool | 反対側の車線を含むフラグ | false | +| invert_opposite_lane | - | bool | 反対側の車線のチェックを反転するフラグ | false | +| check_all_predicted_path | - | bool | すべての予測パスをチェックするフラグ | true | +| use_all_predicted_path | - | bool | すべての予測パスを使用するフラグ | true | +| use_predicted_path_outside_lanelet | - | bool | Lanelet の外側の予測パスを使用するフラグ | false | + +### 安全検査パラメータ + +`safety_check_params` のパラメータは、安全検査の設定を定義します。 + +| 名前 | 単位 | 種類 | 説明 | デフォルト値 | +| :------------------------------------------ | :--- | :----- | :---------------------------------------------------------------------------------------------------------- | :----------- | +| enable_safety_check | - | bool | 安全チェックを有効にするフラグ | true | +| check_all_predicted_path | - | bool | すべての予測経路をチェックするフラグ | true | +| publish_debug_marker | - | bool | デバッグマーカーを公開するフラグ | false | +| rss_params.rear_vehicle_reaction_time | [s] | double | 後続車の反応時間 | 2.0 | +| rss_params.rear_vehicle_safety_time_margin | [s] | double | 後続車に対する安全時間マージン | 1.0 | +| rss_params.lateral_distance_max_threshold | [m] | double | 最大横距離閾値 | 2.0 | +| rss_params.longitudinal_distance_min_threshold | [m] | double | 最小縦距離閾値 | 3.0 | +| rss_params.longitudinal_velocity_delta_time | [s] | double | 縦速度のデルタ時間 | 0.8 | +| hysteresis_factor_expand_rate | - | double | ヒステリシス係数を拡張/縮小するレート | 1.0 | +| collision_check_yaw_diff_threshold | - | double | RSSベースの衝突チェックの実行時にエゴとオブジェクト間の最大ヨー差 | 1.578 | + +## **パス生成** + +パスを生成する方法は2つあります。 + +### **シフトプルアウト** + +最も基本的なパス計画開始手法です。特に障害物が歩道や路肩が存在する場合は、それらのレーンで使用されます。 + +プルアウト距離は、速度、横方向の偏差、横方向のジャークによって計算されます。横方向のジャークは、事前に決められた最小値と最大値の間で検索され、安全なパスを生成するものが選択されます。 + +- 車線のセンターラインを生成し、現在位置に移します。 +- 統合開始点と終了点間のセクションで、パスは回避パスを生成するために使用される方法(4つのセグメントの一定ジャーク多項式)によってシフトされます。 +- このパスを車線のセンターラインと結合します。 ![shift_pull_out](./images/shift_pull_out.drawio.svg) -[Shift Pull Out動画](https://user-images.githubusercontent.com/39142679/187872468-6d5057ee-e039-499b-afc7-fe0dc8052a6b.mp4) +[シフトプルアウト動画](https://user-images.githubusercontent.com/39142679/187872468-6d5057ee-e039-499b-afc7-fe0dc8052a6b.mp4) -#### Shift Pull Outのパラメーター +#### シフトプルアウトのパラメータ -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :--------------------------------------------- | :----- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------- | -| enable_shift_pull_out | [-] | bool | Shift pull out を有効にするかどうか | true | -| check_shift_path_lane_departure | [-] | bool | Shift path の車両逸脱量をチェックするかどうか | true | -| allow_check_shift_path_lane_departure_override | [-] | bool | エゴビークルの現在の位置がすでに車両逸脱中である場合に、車両逸脱のチェックを上書き/キャンセルするフラグ | false | -| shift_pull_out_velocity | [m/s] | double | Shift pull out の速度 | 2.0 | -| pull_out_sampling_num | [-] | int | 横方向加速度の最小値から最大値の範囲内でサンプリングする回数 | 4 | -| maximum_lateral_jerk | [m/s3] | double | 最大横方向加速度 | 2.0 | -| minimum_lateral_jerk | [m/s3] | double | 最小横方向加速度 | 0.1 | -| minimum_shift_pull_out_distance | [m] | double | 最小 Shift pull out 距離。計算された pull out 距離がこれよりも短かった場合、Path 生成にこれを用いる。 | 0.0 | -| maximum_curvature | [1/m] | double | 最大曲率。Shift pull out 距離を、参照パスが直線で、2 つの近似弧でシフトされたものと仮定して、この最大曲率から計算する。シフトパスまたは曲線内の曲率は考慮されない。 | 0.07 | -| end_pose_curvature_threshold | [1/m] | double | Shift pull out 距離を計算するために使用される曲率の閾値。シフトのエンドポーズは、シフトのエンドポーズの曲率がこの値未満になるように前方にシフトされる。これは、エンドポーズが曲線上にある場合に生成されたパスに大きな曲率が発生するのを防ぐためである。閾値以下の曲率を持つシフトのエンドポーズが見つからない場合、Shift pull out 距離は特定の距離を越えた地点のうち、最も曲率が低い地点までの距離として使用される。 | 0.01 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :------------------------------------------ | :--- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------- | +| `enable_shift_pull_out` | [-] | bool | シフトプルアウトを有効にするかどうか | true | +| `check_shift_path_lane_departure` | [-] | bool | シフトパスのフットプリントがレーン外かどうかを確認するかどうか | true | +| `allow_check_shift_path_lane_departure_override` | [-] | bool | 自車の開始姿勢がすでにレーン外にある場合、レーン逸脱チェックをオーバーライド/キャンセルするフラグ | false | +| `shift_pull_out_velocity` | [m/s] | double | シフトプルアウトの速度 | 2.0 | +| `pull_out_sampling_num` | [-] | int | 側方ジャークの最小範囲から最大範囲までのサンプリング数 | 4 | +| `maximum_lateral_jerk` | [m/s3] | double | 最大側方ジャーク | 2.0 | +| `minimum_lateral_jerk` | [m/s3] | double | 最小側方ジャーク | 0.1 | +| `minimum_shift_pull_out_distance` | [m] | double | 最小シフトプルアウト距離。計算されたプルアウト距離がこの値よりも短い場合、パスの生成はこの値を使用します | 0.0 | +| `maximum_curvature` | [1/m] | double | 最大曲率。リファレンスパスは直線と見なされ、2 つの近似円弧でシフトされたと仮定して、この最大曲率から必要なプルアウト距離を計算します。シフトしたパスや曲線の曲率に対して補正は行いません | 0.07 | +| `end_pose_curvature_threshold` | [1/m] | double | シフトプルアウト距離を計算するために使用される曲率しきい値。シフト終了姿勢が、この値よりも小さい曲率になるようにシフト終了姿勢が前方へシフトされます。これは、終了姿勢が曲線上に存在する場合に、生成されたパスが大きな曲率を持つことを防ぐためです。しきい値以下の曲率を持つ終了姿勢が発見されなかった場合、シフトプルアウト距離は、特定の距離を超えた点の中で最も低い曲率を持つ点への距離として使用されます。 | 0.01 | ### **geometric pull out** -不連続的な曲率の 2 つの円弧パスを生成します。自動運転車はパスの途中で一度停止し、その場でステアリングを制御します。 -アルゴリズムの詳細については [[1]](https://www.sciencedirect.com/science/article/pii/S1474667015347431) を参照してください。 +不連続な曲率を持つ2つの円弧パスを生成します。自動運転車はパスの途中で一時停止し、その場で操舵を制御します。 +アルゴリズムの詳細については、[[1]](https://www.sciencedirect.com/science/article/pii/S1474667015347431) を参照してください。 ![geometric_pull_out](./images/geometric_pull_out.drawio.svg) -[geometric pull out video](https://user-images.githubusercontent.com/39142679/181024707-3e7ca5ee-62de-4334-b9e9-ded313de1ea1.mp4) +[geometric pull out ビデオ](https://user-images.githubusercontent.com/39142679/181024707-3e7ca5ee-62de-4334-b9e9-ded313de1ea1.mp4) #### geometric pull out のパラメータ -| 名称 | 単位 | タイプ | 説明 | デフォルト値 | -| :------------------------------------ | :---- | :----- | :--------------------------------------------------------------------------------------------------------------------- | :----------- | -| enable_geometric_pull_out | [-] | bool | ジオメトリプルアウトを有効にするフラグ | true | -| divide_pull_out_path | [-] | bool | 円弧パスを分割するフラグ。曲率が連続ではないため、パスは分割されていると想定されます。ただし、出発中に停止が必要です。 | false | -| geometric_pull_out_velocity | [m/s] | double | ジオメトリプルアウトの速度 | 1.0 | -| lane_departure_margin | [m] | double | 右側車線を逸脱する際の許容範囲 | 0.2 | -| lane_departure_check_expansion_margin | [m] | double | 車線逸脱チェック時の自車Footprintの拡大マージン | 0.0 | -| pull_out_max_steer_angle | [rad] | double | パス生成における最大操舵角 | 0.26 | +| 名称 | 単位 | 型 | 説明 | デフォルト値 | +| :---- | :---- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_geometric_pull_out | [-] | bool | 幾何学的プルアウトを有効にするかのフラグ | true | +| divide_pull_out_path | [-] | bool | アークパスを分割するかのフラグ。カーブが連続的でないためパスは分割されたと仮定されます。ただし、出発中は停止する必要があります。 | false | +| geometric_pull_out_velocity | [m/s] | double | 幾何学的プルアウトの速度 | 1.0 | +| lane_departure_margin | [m] | double | 右車線の逸脱マージン | 0.2 | +| lane_departure_check_expansion_margin | [m] | double | 車線逸脱チェック時に自車フットプリントを拡張するためのマージン | 0.0 | +| pull_out_max_steer_angle | [rad] | double | パス生成のための最大ステアリング角度 | 0.26 | -## **後退引き出し始点の検索** +## **後退引き出し開始点検索** -現在の位置から安全な経路が生成できない場合、一定の間隔(デフォルト: `2.0`)で後退して引き出し開始点を探します。 +現在位置から安全な経路を生成できない場合は、一定間隔(デフォルト:``2.0``)で後退引き出し開始点を後方に検索します。 ![pull_out_after_back](./images/pull_out_after_back.drawio.svg) -[後退後の引き出しに関する動画](https://user-images.githubusercontent.com/39142679/181025149-8fb9fb51-9b8f-45c4-af75-27572f4fba78.mp4) +[後退走行後の引き出し動画](https://user-images.githubusercontent.com/39142679/181025149-8fb9fb51-9b8f-45c4-af75-27572f4fba78.mp4) ### **後退引き出し開始点検索のパラメータ** -| 名前 | 単位 | タイプ | 説明 | デフォルト値 | -| :---------------------------- | :--- | :----- | :----------------------------------------------------------------------------------------------------------------------- | :------------- | -| enable_back | [-] | bool | 開始点として後方検索するかどうか | true | -| search_priority | [-] | string | `efficient_path`の場合、後方距離が長くても効率的な経路を使用する。 `short_back_distance`の場合、後方距離が短い経路を使用 | efficient_path | -| max_back_distance | [m] | double | 後方距離の最大値 | 30.0 | -| backward_search_resolution | [m] | double | 後方引き出し開始点の検索間隔 | 2.0 | -| backward_path_update_duration | [s] | double | 後方引き出し開始点の検索時間間隔。これにより、後方走行と引き出しのチャッタリングを防ぐことができる | 3.0 | -| ignore_distance_from_lane_end | [m] | double | シフト開始位置から側道レーンの終了までの距離がこの値より小さい場合、この開始位置の候補は無視される | 15.0 | +| 名前 | 単位 | タイプ | 説明 | デフォルト値 | +| :---------------------------- | :--- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------- | +| enable_back | [-] | bool | start_pointを後方に検索するフラグ | true | +| search_priority | [-] | string | `efficient_path`の場合、戻る距離が長い場合でも効率経路を使用。`short_back_distance`の場合、戻る距離が短い経路を使用 | efficient_path | +| max_back_distance | [m] | double | 最大戻る距離 | 30.0 | +| backward_search_resolution | [m] | double | バック引き出し開始点の探索距離 | 2.0 | +| backward_path_update_duration | [s] | double | バック引き出し開始点の探索時間間隔。これにより、バック走行と引き出し間のチャタリングが防止される | 3.0 | +| ignore_distance_from_lane_end | [m] | double | シフト開始位置から路肩の終点までの距離がこの値よりも小さい場合、この開始位置候補は無視される | 15.0 | -### **フリースペースでの引き出し** +### **スペースフリー巻き出し** -車両が車線沿いの引き出しで立ち往生した場合、フリースペースでの引き出しを実行します。 -この機能を実行するには、地図に `parking_lot` を設定し、 costmap_generator の `activate_by_scenario` を `false` にして、`enable_freespace_planner` を `true` にする必要があります。 +車両が車線沿いに巻き出しで立ち往生した場合、スペースフリー巻き出しを実行します。 +この機能を実行するには、`parking_lot`をマップに設定し、`activate_by_scenario`の[costmap_generator](../autoware_costmap_generator/README.md)を`false`、`enable_freespace_planner`を`true`に設定する必要があります。 -#### フリースペースでの引き出しの未実装部分と制限事項 +#### スペースフリー巻き出しの未実装部分/制限 + +- 短い経路が生成された場合、エゴ車両はそれを走行できません。 +- 複雑なケースでは、生成に時間がかかったり、失敗したりします。 +- 走行可能なエリアが必ずしも`parking_lot`に収まるわけではありません。 -- 短い経路が生成された場合、自車はその経路で走行できません。 -- 複雑なケースでは、生成時間が長くなるか失敗します。 -- 走行可能エリアが parking_lot に収まることは保証されていません。 +#### スペースフリー駐車パラメーター -#### フリースペース駐車のパラメータ +| Name | Unit | Type | Description | Default value | +| :---------------------------------------- | :--- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| enable_freespace_planner | [-] | bool | 車両が現在レーン上の障害物により走行不能になった時にフリースペースへの離脱を実行するフラグを設定します | true | +| end_pose_search_start_distance | [m] | double | フリースペースへの離脱経路における自車位置から終了地点の探索開始地点までの距離を設定します | 20.0 | +| end_pose_search_end_distance | [m] | double | フリースペースへの離脱経路における自車位置から終了地点の探索終了地点までの距離を設定します | 30.0 | +| end_pose_search_interval | [m] | bool | フリースペースへの離脱経路における終了地点の探索の間隔を設定します | 2.0 | -| 名前 | 単位 | 型 | 説明 | デフォルト値 | -| :----------------------------- | :--- | :----- | :------------------------------------------------------------------------------------------------------- | :----------- | -| enable_freespace_planner | [-] | ブール | 車両が走行する車線に障害物があり、車両が立ち往生した際に実行するフリースペースプルのフラグを有効にします | true | -| end_pose_search_start_distance | [m] | 倍精度 | 自車からfreespace_pull_outのドライビングレーンで終端点の検索を開始する地点までの距離 | 20.0 | -| end_pose_search_end_distance | [m] | 倍精度 | 自車からfreespace_pull_outのドライビングレーンで終端点の検索を終了する地点までの距離 | 30.0 | -| end_pose_search_interval | [m] | 倍精度 | freespace_pull_outのドライビングレーンで終端点を検索する間隔 | 2.0 | +詳細は [freespace_planner](../autoware_freespace_planner/README.md) を参照してください。 -その他の詳細は [freespace_planner](../autoware_freespace_planner/README.md) を参照してください。 diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md index 85000127a03f2..f027aae6433d5 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md @@ -1,32 +1,33 @@ -## 静止物回避モジュール +# 静止物体回避モジュール ![fig](./images/purpose/rviz.png) ## 目的/役割 -これはルールベースの回避モジュールで、知覚出力データ、HDマップ、現在のパスとルートに基づいて実行されます。このモジュールは、単純な状況における静止 (=停止) 物体に対する回避パスを作成するように設計されています。現在、このモジュールは動的 (=移動) 物体をサポートしていません。 +これはルールベースの回避モジュールで、認識出力データ、HDMap、現在の経路とルートに基づいて動作します。このモジュールは、単純な状況において静止(=停止)しているオブジェクトに対して回避経路を作成するように設計されています。現時点では、このモジュールは動的(=移動)物体には対応していません。 ![fig](./images/purpose/avoidance.png) -このモジュールは[RTC インターフェイス](../../autoware_rtc_interface/README.md)を持ち、ユーザーは車両のセンサーの性能に応じてMANUAL/AUTOから運転モードを選択できます。ユーザーがMANUALモードを選択した場合、このモジュールは回避パスの候補を出力し、オペレーターの承認を待ちます。センサー/知覚の性能が不十分で誤検知が発生する場合は、不要な回避操作を防ぐためにMANUALモードをお勧めします。 +このモジュールは[RTCインタフェース](../../autoware_rtc_interface/README.md)を持ち、ユーザは車両のセンサの性能に応じて手動/自動から動作モードを選択できます。ユーザが手動モードを選択した場合、このモジュールは回避経路の候補を出力し、オペレータの承認を待ちます。センサ/認識の性能が不十分で誤検出が発生する場合は、不要な回避操作を防ぐために手動モードをお勧めします。 -ユーザーがAUTOモードを選択した場合、このモジュールはオペレーターの承認なしで現在の追従パスを変更します。センサー/知覚の性能が十分な場合は、AUTOモードを使用します。 +ユーザが自動モードを選択した場合、このモジュールはオペレータの承認なしに現在の追随経路を変更します。センサ/認識の性能が十分な場合は、自動モードを使用してください。 ### 制限事項 -このモジュールにより、開発者は特定のルールを使用した回避計画における車両の動作を設計できます。ルールベースの計画の特性上、このアルゴリズムは複雑な場合における障害物との衝突を補正できません。これは、「直感的で設計が容易」と「調整が難しいが多くのケースに対応できる」とのトレードオフです。このモジュールは前者のポリシーを採用しているため、この出力を後工程でより厳密に確認する必要があります。`.iv` リファレンス実装では、モーション計画モジュールに、複雑なケースにおける回避処理を行うための最適化を使用する別の回避モジュールがあります。(モーションプランナーは、単純なケースで動作結果があまり変わらないように調整する必要があり、これは階層的挙動・モーションアーキテクチャにおける典型的な課題です。) +このモジュールでは、開発者が特定のルールを使用して回避計画における車両の挙動を設計できます。ルールベースの計画の性質のため、アルゴリズムは複雑な場合に障害物との衝突を補償できません。これは、「直感的かつ設計が容易であること」と「調整が難しいが多くのケースを処理できること」とのトレードオフです。このモジュールは前者のポリシーを採用しているため、この出力を後段でより厳密にチェックする必要があります。.iv リファレンス実装では、複雑なケースでの回避を処理するために、最適化を使用するモーション計画モジュールに別の回避モジュールがあります。(モーションプランナは、単純なケースでは挙動の結果が大きく変わらないように調整する必要があり、これは階層的な挙動-運動アーキテクチャの典型的な課題です。) -### 回避が挙動モジュールにある理由 +### なぜ回避は挙動モジュールにあるのか? -このモジュールは車線をまたぐ回避を実行し、決定には交通ルールに対応する車線構造情報が必要です(例: 車両が車線を横断するときにウィンカー信号を送信する必要があります)。計画スタックにおけるモーションモジュールと挙動モジュールの違いは、プランナーが交通ルールを考慮するかどうかであり、この回避モジュールが挙動モジュールに存在する理由です。 +このモジュールは車線を越えて回避を実行し、この決定には交通ルールを考慮した車線構造情報が必要です(たとえば、車両が車線を横断するときにインジケータ信号を送信する必要があります)。計画スタック内の運動モジュールと挙動モジュールの違いは、プランナが交通ルールを考慮するかどうかであり、これがこの回避モジュールが挙動モジュールにある理由です。
-詳細ではなく概要を知りたい場合は、次のセクションをスキップして[FAQ](#よくある質問)を参照してください。 +詳細ではなく概要を知りたい場合は、次のセクションをスキップして [FAQ](#frequently-asked-questions) を参照してください。 -## 内部動作/アルゴリズム +## 内部構造/アルゴリズム + +このモジュールは主に、目標フィルタリングとパス生成の 2 つの部分で構成されています。最初に、すべてのオブジェクトは複数の条件によってフィルタリングされます。このステップで、モジュールは回避の可能性と必要性をチェックします。その後、このモジュールは、フィルタリングされたオブジェクトに基づいて Avoidance Path Outline(回避パスアウトライン)、つまり「シフトライン」を生成します。シフトラインは、パス生成用のライブラリである [Path Shifter](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md) に設定されて、スムーズなシフトパスが作成されます。さらに、このモジュールには、エゴが対象オブジェクトを安全に回避できるように非対象オブジェクトをチェックする機能があります。この機能は、生成された回避パスと周辺オブジェクトを受信し、現在の状況を判断します。最後に、このモジュールは現在のエゴ挙動を更新します。 -このモジュールには、主にターゲットフィルタリングとパスジェネレーションの2つの部分があります。最初に、すべてのオブジェクトがいくつかの条件でフィルタリングされます。このステップで、モジュールは回避の実現可能性と必要性をチェックします。その後、このモジュールは、フィルタリングされたオブジェクトを基に、**シフトライン**と呼ばれる回避パスの輪郭を生成します。シフトラインは[パスシフター](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)に設定されます。パスシフターは、スムーズなシフトパスの生成に使用されるパスジェネレーション用のライブラリです。さらに、このモジュールには、エゴがターゲットオブジェクトを安全に回避できるように、ターゲット以外のオブジェクトをチェックする機能があります。この機能は、生成された回避パスと周囲のオブジェクトを受け取り、現在の状況を判断します。最後に、このモジュールは現在のエゴ挙動を更新します。 ```plantuml @startuml @@ -210,30 +211,31 @@ stop ### 概要 -このモジュールは、回避するターゲットオブジェクトをフィルタリングするために、以下の条件を使用します。 - -| 条件の確認 | ターゲットクラス | 詳細 | 条件が満たされない場合 | -| ------------------------------------------------------------------------------ | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | -| 回避対象クラスオブジェクトですか? | 全て | 設定ファイルから回避対象クラスを選択できます。 | 回避しません。 | -| 停止中のオブジェクトですか? | 全て | `th_moving_speed`よりも速い速度を`th_moving_time`よりも長い時間維持するオブジェクトは移動中と判断されます。 | 回避しません。 | -| 検知エリア内ですか? | 全て | モジュールは設定ファイルの横方向マージンに基づいて対象オブジェクトを大まかにフィルターするために検知エリアを作成します。([こちら](#width-of-detection-area)を参照) | 回避しません。 | -| オブジェクトとパスの間に十分な横方向距離がないですか? | 全て | - | 回避しません。 | -| 自車線のセンターラインの近くですか? | 全て | - | その他の条件によって異なります。 | -| オブジェクトの近くに横断歩道がありますか? | 歩行者、自転車 | モジュールは横断歩道の近くに歩行者と自転車を回避しません。横断歩道で道路を渡っている場合、自車は停止する必要があるからです。([こちら](#for-crosswalk-users)を参照) | 回避しません。 | -| パス上のオブジェクトと信号との距離がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | この条件は、車両が駐車されているかどうかが不明な場合に使用されます。 | その他の条件によって異なります。 | -| パス上のオブジェクトと横断歩道信号との距離がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | -| 停止時間がしきい値よりも長くなっていますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | -| 交差点内ですか? | 乗用車、トラック、バス、トレーラー | モジュールは交差点内に駐車車両がないことを前提としています。 | その他の条件によって異なります。 | -| 自車線上にありますか? | 乗用車、トラック、バス、トレーラー | - | その他の条件によって異なります。 | -| 駐車車両ですか? | 乗用車、トラック、バス、トレーラー | モジュールは横方向オフセットに基づいて車両が駐車車両かどうかを判断します。([こちら](#judge-if-its-a-parked-vehicle)を参照) | その他の条件によって異なります。 | -| 他車線から自車線に合流していますか? | 乗用車、トラック、バス、トレーラー | モジュールはヨー角とオフセットの方向に基づいて車両の挙動を判断します。([こちら](#judge-vehicle-behavior)を参照) | その他の条件によって異なります。 | -| 自車線から他車線に合流していますか? | 乗用車、トラック、バス、トレーラー | 上記と同じ。 | その他の条件によって異なります。 | +このモジュールは、回避対象となるターゲットオブジェクトをフィルタリングするために、以下の条件を使用します。 + +| 条件のチェック | ターゲットクラス | 詳細 | 条件が満たされない場合 | +|---------------------------------------------------------------------------------------------|-------------------------| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |-----------------------------------| +| 回避対象クラスのオブジェクトですか? | すべてのクラス | 回避対象クラスはconfigファイルから選択できます。 | 回避しません。 | +| 停止中のオブジェクトですか? | すべてのクラス | `th_moving_speed`よりも高い速度を`th_moving_time`よりも長い時間維持しているオブジェクトは、移動中と判断します。 | 回避しません。 | +| 検出領域内にありますか? | すべてのクラス | このモジュールは、configファイルの横方向マージンに基づいて、ターゲットオブジェクトを大まかにフィルタリングするために、検出領域を作成します。( [こちら](#width-of-detection-area) を参照) | 回避しません。 | +| オブジェクトとパスとの間に十分な横方向距離がありませんか? | すべてのクラス | - | 回避しません。 | +| 自車線のセンターラインの近くですか? | すべてのクラス | - | 他の条件によって異なります。 | +| オブジェクトの近くに横断歩道がありますか? | 歩行者、自転車 | 自車が道を横断している場合、横断歩道の近くにいる歩行者と自転車は回避されません( [こちら](#For-crosswalk-users) を参照)。 | 回避しません。 | +| パス上のオブジェクトと信号機との距離がしきい値より長いですか? | 乗用車、トラック、バス、トレーラー | この条件は、車両が駐車しているかどうかが不明な場合に使用されます。 | 他の条件によって異なります。 | +| パス上のオブジェクトと横断歩道の信号機との距離がしきい値より長いですか? | 乗用車、トラック、バス、トレーラー | 上記と同じです。 | 他の条件によって異なります。 | +| 停止時間はしきい値より長いですか? | 乗用車、トラック、バス、トレーラー | 上記と同じです。 | 他の条件によって異なります。 | +| 交差点内にありますか? | 乗用車、トラック、バス、トレーラー | このモジュールは、交差点内に駐車車両がないことを前提としています。 | 他の条件によって異なります。 | +| 自車線上にありますか? | 乗用車、トラック、バス、トレーラー | - | 他の条件によって異なります。 | +| 駐車車両ですか? | 乗用車、トラック、バス、トレーラー | このモジュールは、横方向オフセットに基づいて車両が駐車車両であるかどうかを判断します。( [こちら](#judge-if-its-a-parked-vehicle) を参照) | 他の条件によって異なります。 | +| 別の車線から自車線に合流していますか? | 乗用車、トラック、バス、トレーラー | このモジュールは、ヨー角とオフセット方向に基づいて車両の動作を判断します。( [こちら](#judge-vehicle-behavior) を参照) | 他の条件によって異なります。 | +| 自車線から別の車線に合流していますか? | 乗用車、トラック、バス、トレーラー | 上記と同じです。 | 他の条件によって異なります。 | ### 一般的な条件 -#### 検出エリア +#### 検出領域 + +モジュールは、次のパラメータに基づいて、ターゲットフィルタリング用の検出領域を生成します。 -モジュールは、以下のパラメータに基づいて、ターゲットのフィルタリング用の検出エリアを生成します。 ```yaml # avoidance is performed for the object type with true @@ -255,16 +257,17 @@ stop backward_distance: 10.0 # [m] ``` -##### 検出領域の幅 +##### 検出範囲の幅 -1. 全てのクラス(車両、トラックなど)の最大の側方マージンを取得します。マージンは`soft_margin`と`hard_margin_for_parked_vehicle`の合計です。 -2. 検出領域の幅は自車幅と最大の側方マージンの合計です。 +1. すべてのクラス(車両、トラックなど)から最大の横方向のマージンを取得します。マージンは`soft_margin`と`hard_margin_for_parked_vehicle`の合計です。 +2. 検出範囲の幅は、自車幅と最大の横方向のマージンを合計したものです。 -##### 検出領域の縦方向距離 +##### 検出範囲の縦方向距離 -パラメータ`detection_area.static`が`true`に設定されている場合、モジュールは縦方向距離が`max_forward_distance`の検出領域を作成します。 +パラメータ`detection_area.static`が`true`に設定されている場合、モジュールは縦方向距離が`max_forward_distance`の検出範囲を作成します。 + +パラメータ`detection_area.static`が`false`に設定されている場合、モジュールは自車が最小の横方向ジャーク値で障害物を回避できるように検出範囲を作成します。したがって、縦方向距離は最大横方向シフト長、横方向ジャーク制約、現在の自車速度に依存します。さらに、準備フェーズに使用される距離も考慮する必要があります。 -パラメータ`detection_area.static`が`false`に設定されている場合、モジュールは自車が最小の側方ジャーク値でオブジェクトを回避できるように検出領域を作成します。したがって、縦方向距離は最大側方シフト長、側方ジャーク制約、および現在の自車速度によって異なります。さらに、準備段階で使用される距離も考慮する必要があります。 ```c++ ... @@ -279,19 +282,24 @@ stop parameters_->object_check_max_forward_distance); ``` -### 車両以外のオブジェクトの条件 +![fig](./images/target_filter/detection_area.svg) + +![fig](./images/target_filter/detection_area_rviz.png) -#### 歩行者用横断歩道利用者の場合 +### 非車両タイプのオブジェクトに関する条件 -歩行者と自転車が横断歩道に2.0m(現在はハードコーディング)未満近接した場合、このモジュールはこの歩行者らが交差点を横断していると判断し、回避しません。 +#### 横断歩道使用者 + +歩行者と自転車が横断歩道に閾値2.0m(現在はハードコード)よりも近づいている場合、モジュールは道路を横断していると判断し、避けることはありません。 ![fig](./images/target_filter/crosswalk.svg) -### 車両タイプのオブジェクトの条件 +### 車両タイプのオブジェクトに関する条件 + +#### 車両の挙動の判断 -#### 車両の挙動の判定 +モジュールは、ヨー角とオフセットの方向に基づいて、車両を次の3つの挙動に分類します。 -このモジュールは、ヨー角とオフセット方向に基づいて車両を以下の3つの挙動に分類します。 ```yaml # params for filtering objects that are in intersection @@ -299,11 +307,12 @@ intersection: yaw_deviation: 0.349 # [rad] (default 20.0deg) ``` -| 動作 | 詳細 | 図形 | -| --------- | ------------------------------------------------------------------------------------------------ | -------------------------------------------- | -| NONE | オブジェクトの車線に対する相対的な偏角が閾値 `yaw_deviation` 未満の場合、`NONE` に分類されます。 | ![fig](./images/target_filter/none.png) | -| MERGING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/merging.png) | -| DEVIATING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/deviating.png) | +| Behavior | 詳細 | 図 | +| --------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| NONE | オブジェクトの車線に対する相対的なヨー角が閾値 `yaw_deviation` 未満の場合、`NONE` に分類されます。 | ![fig](./images/target_filter/none.png) | +| MERGING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/merging.png) | +| DEVIATING | 以下のフローチャートを参照してください。 | ![fig](./images/target_filter/deviating.png) | + ```plantuml @startuml @@ -350,38 +359,39 @@ stop #### 駐車車両の判定 -センターラインからの距離だけでなく、路肩からの距離も計算して、フィルタリング処理に使用します。このロジックでは、次のとおり**実際のシフト長**と**シフト可能なシフト長**の比率を計算します。結果がしきい値 `th_shiftable_ratio` よりも大きい場合、このモジュールは車両が駐車車両であると判断します。 +車線中央線からの距離だけでなく、 路肩からの距離も計算し、フィルタリング処理に使用します。このロジックでは、次の「実際のシフト幅」と「シフト可能なシフト幅」の比率を計算します。結果が閾値 `th_shiftable_ratio` よりも大きい場合、モジュールは車両が駐車車両であると判断します。 $$ L_{d} = \frac{W_{lane} - W_{obj}}{2}, \\ ratio = \frac{L_{a}}{L_{d}} $$ -- $L_{d}$ : シフト可能な長さ。 -- $L_{a}$ : 実際のシフト長。 -- $W_{lane}$ : レーン幅。 -- $W_{obj}$ : オブジェクトの幅。 +- $L_{d}$ : シフト可能な幅 +- $L_{a}$ : 実際のシフト幅 +- $W_{lane}$ : 車線幅 +- $W_{obj}$ : 物体の幅 ![fig2](./images/target_filter/parked_vehicle.svg) -### ターゲットオブジェクトのフィルタリング - -| 状況 | 詳細 | 自車動作 | -| ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | -| 自車がHDMapで定義された交差点エリア内にある場合。このモジュールは、車線を走行中または自車線に合流中の車両を無視する | ![fig](./images/target_filter/never_avoid_intersection.png) | 回避しない。 | -| 自車が自車線上にいる場合、両側に隣接した車線がある | ![fig](./images/target_filter/never_avoid_not_edge.png) | 回避しない。 | -| 自車線から他の車線に合流中の車両。その車両のフットプリントの大部分が自車線にある | ![fig](./images/target_filter/never_avoid_deviating.png) | 回避しない。 | -| 他の車線から自車線に合流中の車両。その車両のフットプリントの大部分が自車線にある | ![fig](./images/target_filter/never_avoid_merging.png) | 回避しない。 | -| 駐車しているようには見えないが、横断歩道または信号の前に停止している車両 | ![fig](./images/target_filter/never_avoid_stop_factor.png) | 回避しない。 | -| 道路脇に停車しようとして自車線上で停止した車両 | ![fig](./images/target_filter/avoid_on_ego_lane.png) | すぐに回避する。 | -| 隣接した車線で停止した車両 | ![fig](./images/target_filter/avoid_not_on_ego_lane.png) | すぐに回避する。 | -| 道路脇に停車せずに自車線上で停止した車両 | ![fig](./images/target_filter/ambiguous_parallel.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | -| 他の車線から自車線に合流中の車両 | ![fig](./images/target_filter/ambiguous_merging.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | -| 自車線から他の車線に合流中の車両 | ![fig](./images/target_filter/ambiguous_deviating.png) | パラメータ`avoidance_for_ambiguous_vehicle.enable`を`true`に設定すると、モジュールは不明瞭な車両を回避する。 | +### 目標オブジェクトのフィルタリング + +| 場面 | 詳細 | 自動運転の挙動 | +| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| 自車はHDマップで定義された交差点領域内にある。モジュールは自車線に従うか自車線に合流する車両を無視する | ![図](./images/target_filter/never_avoid_intersection.png) | 回避しない | +| 自車は自車線にいる。両側に隣接車線がある | ![図](./images/target_filter/never_avoid_not_edge.png) | 回避しない | +| 自車は自車線から他の車線に合流中。ほとんどが自車線にいる | ![図](./images/target_filter/never_avoid_deviating.png) | 回避しない | +| 自車は他車線から自車線に合流中。ほとんどが自車線にいる | ![図](./images/target_filter/never_avoid_merging.png) | 回避しない | +| 駐車しているようには見えず、横断歩道または信号の前に停車している | ![図](./images/target_filter/never_avoid_stop_factor.png) | 回避しない | +| 自車が路肩に寄せる途中、自車線で停車した | ![図](./images/target_filter/avoid_on_ego_lane.png) | 速やかに回避する | +| 自車が隣接車線で停車した | ![図](./images/target_filter/avoid_not_on_ego_lane.png) | 速やかに回避する | +| 自車が路肩に寄せることなく自車線で停車している | ![図](./images/target_filter/ambiguous_parallel.png) | パラメータ `avoidance_for_ambiguous_vehicle.enable` を `true` に設定すると、モジュールは不明確な車両を回避する | +| 自車は他車線から自車線に合流している | ![図](./images/target_filter/ambiguous_merging.png) | パラメータ `avoidance_for_ambiguous_vehicle.enable` を `true` に設定すると、モジュールは不明確な車両を回避する | +| 自車は自車線から他の車線に合流している | ![図](./images/target_filter/ambiguous_deviating.png) | パラメータ `avoidance_for_ambiguous_vehicle.enable` を `true` に設定すると、モジュールは不明確な車両を回避する | ### フローチャート -`isSatisfiedWithCommonCondition()`, `isSatisfiedWithVehicleCondition()`, `isSatisfiedWithNonVehicleCondition()`の3つのメインフィルタリング関数があります。フィルタリングプロセスは次のフローチャートに従って実行されます。さらに、このモジュールはコンフィグファイル内のオブジェクトの姿勢、エゴパス、横マージンに基づいて`isNoNeedAvoidanceBehavior()`で回避の必要性を確認します。 +`isSatisfiedWithCommonCondition()`, `isSatisfiedWithVehicleCondition()`, `isSatisfiedWithNonVehicleCondition()`の3つの主なフィルタリング機能があります。フィルタリングプロセスは次のフローチャートに従って実行されます。さらに、このモジュールはコンフィグファイル内のオブジェクトの姿勢、エゴパス、横方向の余裕に基づいて、`isNoNeedAvoidanceBehavior()`で回避の必要性をチェックします。 + ```plantuml @startuml @@ -430,7 +440,8 @@ stop #### 共通条件 -まず、`isSatisfiedWithCommonCondition()` 関数には、すべてのオブジェクトクラスに使用される条件が含まれます。 +`isSatisfiedWithCommonCondition()` 関数は、すべてのオブジェクトクラスに使用される条件を最初に含みます。 + ```plantuml @startuml @@ -478,13 +489,14 @@ stop 対象クラス: -- 乗用車 +- 自動車 - トラック - バス -- トレーラー +- トレーラ 次のステップとして、オブジェクトはそのクラスに特化した条件でフィルタリングされます。 + ```plantuml @startuml skinparam defaultTextAlignment center @@ -549,6 +561,7 @@ stop ``` + ```plantuml @startuml skinparam defaultTextAlignment center @@ -618,6 +631,7 @@ stop @enduml ``` + ```plantuml @startuml skinparam defaultTextAlignment center @@ -666,6 +680,7 @@ stop - 歩行者 - 自転車 + ```plantuml @startuml skinparam defaultTextAlignment center @@ -708,33 +723,35 @@ stop @enduml ``` -## ターゲット オブジェクトが消えたとき +## ターゲットオブジェクトがなくなったとき + +ユーザーはターゲットオブジェクトがなくなったときの自車挙動を選択できます。 -ターゲット オブジェクトが消えた際のエゴの動作は、ユーザーが選択できます。 ```yaml cancel: enable: true # [-] ``` -上記のパラメータが「真」の場合、以下の条件を満たしたときにこのモジュールは回避経路を戻します。 +パラメータが `true` の場合、以下の条件が満たされたときに回避経路が元に戻ります。 -- すべてのターゲットオブジェクトが消えた -- 主体は回避操作を開始していない +- すべての対象物がなくなった。 +- 自車はまだ回避操作を開始していない。 ![fig](./images/cancel/cancel.png) -パラメータが「偽」の場合、このモジュールはターゲットオブジェクトが消えた後も実行し続けます。 +パラメータが `false` の場合、このモジュールは対象物がなくなった後も動作を続けます。 ## パス生成 ### 知覚ノイズによるシフトラインのチャタリングを防ぐ方法 -オブジェクト認識結果は位置、向き、多角形の形状に関連するノイズを含んでいるため、モジュールがパス生成で生のオブジェクト認識結果を使用すると、出力パスはノイズによって直接影響を受けます。そのため、このモジュールはノイズの影響を低減するために、各ターゲットオブジェクトの多角形を生成し、それをもとに出力パスを生成します。 +オブジェクト認識の結果には、位置、向き、多角形の形状に関連するノイズが含まれます。モジュールがパス生成に生のオブジェクト認識結果を使用すると、出力パスはノイズの影響を直接受けます。したがって、ノイズの影響を低減するために、このモジュールは各目標オブジェクトの多角形を生成し、そのに基づいて出力パスが生成されます。 ![fig](./images/path_generation/envelope_polygon_rviz.png) -エンベロープ多角形は長方形のボックスで、サイズはオブジェクトの多角形とバッファパラメータ「envelope_buffer_margin」によって異なります。さらに、常に基準パスと平行です。モジュールがターゲットオブジェクトを初めて検出したとき、多角形を初期化します。 +エンヴェロープ多角形は、オブジェクトの多角形とバッファパラメータ `envelope_buffer_margin` に依存する長方形のボックスです。さらに、常に参照パスと平行です。モジュールが初めて目標オブジェクトを見つけると、多角形を初期化します。 + ```yaml car: @@ -742,23 +759,24 @@ cancel: envelope_buffer_margin: 0.5 # [m] FOR DEVELOPER ``` -### 封筒ポリゴンの生成 +![図](./images/path_generation/envelope_polygon.png) + +このモジュールは、最新のオブジェクトの姿勢と各プランニング サイクルの raw ポリゴンを使用して、1 ショット エンベロープ ポリゴンを作成します。一方、モジュールは、最後のプランニング サイクルで作成されたエンベロープ ポリゴン情報を使用して、姿勢共分散を考慮してエンベロープ ポリゴンを更新します。 -このモジュールは、各計画サイクルで最新のオブジェクトの姿勢と生ポリゴンを使用してワンショット封筒ポリゴンを作成します。一方で、このモジュールは前回の計画サイクルで作成された封筒ポリゴン情報を使用して、姿勢共分散を考慮して封筒ポリゴンを更新します。 +姿勢共分散がしきい値よりも小さい場合、エンベロープ ポリゴンは次のロジックに従って更新されます。1 ショット エンベロープ ポリゴンが以前のエンベロープ ポリゴン内にない場合、モジュールは新しいエンベロープ ポリゴンを作成します。それ以外の場合は、以前のエンベロープ ポリゴンを保持します。 -姿勢共分散がしきい値より小さい場合、封筒ポリゴンは次のロジックに従って更新されます。ワンショット封筒ポリゴンが以前の封筒ポリゴン内にある場合、モジュールは新しい封筒ポリゴンを作成します。それ以外の場合、以前の封筒ポリゴンが維持されます。 +![図](./images/path_generation/polygon_update.png) -![fig](./images/path_generation/polygon_update.png) +姿勢共分散がしきい値よりも大きい場合、各オブジェクトの最大姿勢共分散と比較されます。値が小さい場合は、1 ショット エンベロープ ポリゴンがエンベロープ ポリゴンとして直接使用されます。それ以外の場合は、以前のエンベロープ ポリゴンを保持します。 -姿勢共分散がしきい値より大きい場合、各オブジェクトの最大姿勢共分散と比較されます。値が小さい場合、ワンショット封筒ポリゴンが封筒ポリゴンとして直接使用されます。それ以外の場合、以前の封筒ポリゴンが維持されます。 +このプロセスを実行することにより、知覚出力がオブジェクトの姿勢や形状にノイズを含んでいても、エンベロープ ポリゴンのサイズと姿勢は収束します。 -この処理により、知覚出力がオブジェクトの姿勢または形状にノイズを含んでいても、封筒ポリゴンのサイズと姿勢は収束します。 +### エンベロープ ポリゴンと回避パスの関係 -### 封筒ポリゴンと回避パスの関係 +回避パスには 2 つのシフト セクションがありますが、その開始点または終了点の位置はエンベロープ ポリゴンによって決まります。回避シフト セクションの終了点とリターン シフト セクションの開始点は、エンベロープ ポリゴンと反対側のエッジに基づいて固定されており、他の側はエゴ速度、シフト長、横方向のジャークの制約などに基づいて動的に変化します。 -回避パスには 2 つのシフトセクションがあり、その開始点または終了点の位置は封筒ポリゴンによって決まります。回避シフトセクションの終了点と帰還シフトセクションの開始点は、封筒ポリゴンと反対側のエッジに基づいて固定され、他の側面は自車速度、シフトの長さ、横方向ジャークの制約などに基づいて動的に変化します。 +2 つのポイントの横方向位置は、エゴ ボディーとエンベロープ ポリゴン エッジポイントの最もオーバーハングしたポイントとの間に十分なスペース (=横方向マージン) があるように決定されます。ユーザーは、次のパラメーターを使用して横方向マージンを調整できます。 -2 つの点の横方向の位置は、自車本体と封筒ポリゴン境界点の最もオーバーハングした点の間に十分なスペース (= 横方向余裕) ができるようになっています。ユーザーは、次のパラメーターを使用して横方向余裕を調整できます。 ```yaml car: @@ -769,7 +787,8 @@ cancel: hard_margin_for_parked_vehicle: 0.7 # [m] ``` -縦方向の位置は、エンベロープ多角形、自車仕様、次のパラメーターに依存します。回避シフトセクションの終点とエンベロープ多角形 (つまり前面縦方向バッファ) との縦方向距離は、`consider_front_overhang` パラメーターが `true` の場合、`vehicle_info.param.yaml` で定義された `front_overhang` と `longitudinal_margin` の合計です。`consider_front_overhang` が `false` の場合、`longitudinal_margin` のみが考慮されます。同様に、復帰シフトセクションの始点とエンベロープ多角形 (つまり後方縦方向バッファ) との距離は、`rear_overhang` と `longitudinal_margin` の合計です。 +縦方向の位置は、エンベロープポリゴン、自車仕様、および次のパラメーターに依存します。回避シフトセクションの終了点とエンベロープポリゴン(=フロント縦方向バッファ)間の縦方向距離は、パラメーター `consider_front_overhang` が `true` の場合、`vehicle_info.param.yaml` で定義されている `front_overhang` と `longitudinal_margin` の合計です。`consider_front_overhang` が `false` の場合は、`longitudinal_margin` のみ考慮されます。同様に、戻りシフトセクションの開始点とエンベロープポリゴン(=リア縦方向バッファ)間の距離は、`rear_overhang` と `longitudinal_margin` の合計です。 + ```yaml @@ -787,9 +806,10 @@ cancel: consider_rear_overhang: true # [-] ``` -### 横断マージン +### 側方余裕 + +上で述べたように、ユーザーは以下の 2 種類のパラメータを変更することで側方余裕を調整できます。`soft_margin` は側方余裕のソフト制約パラメータです。`hard_margin` と `hard_margin_for_parked_vehicle` はハード制約パラメータです。 -上記のとおり、横断マージンは次の2種類のタイプのパラメータを変更することで調整できます。`soft_margin`は横断マージンのソフト制約パラメータです。`hard_margin`と`hard_margin_for_parked_vehicle`はハード制約パラメータです。 ```yaml car: @@ -800,55 +820,56 @@ cancel: hard_margin_for_parked_vehicle: 0.7 # [m] ``` -## 回避経路生成モジュール +## ソフト・ハードマージンのモジュール -このモジュールは基本的に、回避対象オブジェクトからの横方向距離(`soft_margin` と `hard_margin`/`hard_margin_for_parked_vehicle` の合計)を保つための回避経路を生成しようとします。 +基本的に、このモジュールは、`soft_margin`と`hard_margin`/`hard_margin_for_parked_vehicle`の合計である、回避対象オブジェクトからの横方向距離を維持するために回避経路を生成しようとします。 ![fig](./images/path_generation/soft_hard.png) -ただし、`soft_margin` 距離を維持する十分なスペースがない場合、このモジュールは制約なし横方向マージンを短くします。パラメーター `soft_margin` は制約なしの最大値で、実際の制約なしマージンは 0.0 から `soft_margin` の間の値になります。一方、このモジュールは状況に応じて `hard_margin` または `hard_margin_for_parked_vehicle` を必ず維持します。したがって、横方向全マージンの最小値は `hard_margin`/`hard_margin_for_parked_vehicle`、最大値は `hard_margin`/`hard_margin_for_parked_vehicle` と `soft_margin` の合計になります。 +ただし、`soft_margin`の距離を維持するための十分なスペースがない場合は、このモジュールはソフト制約の横方向マージンを短縮します。`soft_margin`パラメータはソフト制約の最大値であり、実際のソフトマージンは0.0と`soft_margin`の間の値になります。一方、このモジュールは状況に応じて`hard_margin`または`hard_margin_for_parked_vehicle`を必ず維持します。したがって、横方向マージンの最小値は`hard_margin`/`hard_margin_for_parked_vehicle`となり、最大値は`hard_margin`/`hard_margin_for_parked_vehicle`と`soft_margin`の合計です。 -次の図は、ユーザーがパラメーター `use_lane_type` を `same_direction_lane` に設定した場合、このモジュールが反対車線で走行しないために横方向制約なしマージンを短くする状況を示しています。 +次の図は、ユーザーがパラメータ`use_lane_type`を`same_direction_lane`に設定した場合に、このモジュールが横方向のソフト制約を短縮して反対車線に進入しないようにする状況を示しています。 ![fig](./images/path_generation/adjust_margin.png) -このモジュールは一時的に何らかの理由で停止している駐車されていない車両(例:信号が赤から青に変わるのを待っている)だけではなく、駐車車両も回避します。さらに、このモジュールには 2 つタイプのハードマージンパラメーター `hard_margin` と `hard_margin_for_parked_vehicle` があり、車両のドアが突然開いたり、駐車車両から人が降りたりするリスクを考慮して各車両が駐車車両であるかどうかを判断します。 +このモジュールは駐車車両だけでなく、何らかの理由で一時的に停止している駐車していない車両(例:信号が赤から青に変わるのを待っている)も回避します。さらに、このモジュールには`hard_margin`と`hard_margin_for_parked_vehicle`の2種類のハードマージンパラメータがあり、駐車車両であるかどうかを各車両に対して判断します。これは、駐車車両のドアが突然開いたり、そこから人が降りてくるというリスクを考慮するためです。 -ユーザーは、ドアや車両から突然降りてくる人との衝突を防ぐために、`hard_margin_for_parked_vehicle` を `hard_margin` より大きく設定する必要があります。 +ユーザーは、ドアや車両から突然出てくる人と衝突するのを防ぐために、`hard_margin_for_parked_vehicle`を`hard_margin`よりも大きく設定する必要があります。 -このモジュールには、制約なし横方向マージンに関するパラメーター `soft_margin` が 1 つだけあります。 +このモジュールには、ソフト横方向マージン制約パラメータ`soft_margin`が1つのみあります。 ![fig](./images/path_generation/hard_margin.png) -ハードマージンパラメーターはユーザーが確実に維持したい距離を定義するため、回避操作を実行せずにエゴが対象オブジェクトの側面を通過できるかどうかをチェックするロジックでも使用されます。 +ハードマージンパラメータは、ユーザーが確実に維持したい距離を定義するため、回避動作を実行せずにエゴがターゲットオブジェクトの側面を通過できるかどうかをチェックするロジックにも使用されます。 -回避操作なしでエゴが現在のレーンに従うと仮定した場合、横方向距離が `hard_margin`/`hard_margin_for_parked_vehicle` より小さい場合、このモジュールはエゴがオブジェクトの側面を安全に通過できないと判断し、回避する必要があります。この場合、このモジュールは回避操作の実行が許可されるまで停止点を入力し、エゴが承認後にオブジェクトを回避できるようにします。(たとえば、モジュールが MANUAL モードの場合、エゴはオペレータが回避操作を承認するまでそのようなオブジェクトの前で停止し続けます。) +回避動作を行わずにエゴが現在のレーンを走行することを想定した場合に横方向距離が`hard_margin`/`hard_margin_for_parked_vehicle`よりも小さい場合、このモジュールはエゴがオブジェクトの側面を安全に通過できないと考え、エゴはそれ回避する必要があります。この場合、このモジュールは回避操作の実行が許可されるまで停止点を挿入し、エゴが承認後にオブジェクトを回避できるようにします(たとえば、モジュールがMANUALモードの場合、エゴはそのようなオブジェクトの前に停止し、オペレータが回避操作を承認するまで停止し続けます)。 ![fig](./images/path_generation/must_avoid.png) -一方、横方向距離が `hard_margin`/`hard_margin_for_parked_vehicle` より大きい場合、このモジュールは承認を待っている場合でも停止点を挿入しません。それは、オブジェクトの側面を安全に通過できる可能性があると考えるためです。 +一方、横方向距離が`hard_margin`/`hard_margin_for_parked_vehicle`よりも大きい場合、このモジュールはオブジェクトの側面を安全に通過できる可能性があると判断するため、承認待ちであっても停止点を挿入しません。 ![fig](./images/path_generation/pass_through.png) ### スペースが不足している場合 -このモジュールは、エゴがオブジェクトを回避できる可能性がある場合にのみ停止点を挿入します。したがって、横方向距離を `hard_margin`/`hard_margin_for_parked_vehicle` より大きく維持できない場合、このモジュールは何も行いません。次の図は、ユーザーがパラメーター `use_lane_type` を `same_direction_lane` に設定した場合、このモジュールが十分な横方向距離を維持できない状況を示しています。 +このモジュールは、エゴがオブジェクトを回避できる可能性がある場合にのみ停止点を挿入します。そのため、`hard_margin`/`hard_margin_for_parked_vehicle`よりも大きい距離を維持できない場合、このモジュールは何もしません。次の図は、ユーザーがパラメータ`use_lane_type`を`same_direction_lane`に設定した場合に、このモジュールが十分な横方向距離を維持できない状況を示しています。 ![fig](./images/path_generation/do_nothing.png) !!! info - この状況では、[obstacle_cruise_planner](../../autoware_obstacle_cruise_planner/README.md) の障害物停止機能がエゴ車両の安全を担保します。 + この状況では、[obstacle_cruise_planner](../../autoware_obstacle_cruise_planner/README.md)のobstacle stop機能がエゴ車両の安全を担当します。 ![fig](./images/path_generation/insufficient_drivable_space.png) ### シフト長の計算 -横方向シフト長は、`overhang_distance`、横方向マージン(config ファイルで設定した値)、`vehicle_info.param.yaml` で定義されたエゴ車両幅の半分から構成されます。一方、このモジュールは、回避操作に使用できるスペースとパラメーター `soft_drivable_bound_margin` と `hard_drivable_bound_margin` に応じてシフト長を制限します。基本的に、シフト長はエゴが `soft_drivable_bound_margin` より近い位置に走行可能な境界線に近づかないように制限されます。ただし、モジュールは道路幅が狭い場合、しきい値を `soft_drivable_bound_margin` から `hard_drivable_bound_margin` に緩和することを許可します。 +横方向シフト長は、`overhang_distance`、コンフィグファイルで設定された横方向マージン、および`vehicle_info.param.yaml`で定義されたエゴ車両幅の半分からなります。一方、モジュールは、回避動作に使用できるスペースと`soft_drivable_bound_margin`と`hard_drivable_bound_margin`のパラメータに応じてシフト長を制限します。基本的に、シフト長は、エゴが走行可能境界線に`soft_drivable_bound_margin`より近づかないように制限されます。しかし、このモジュールでは、道路が狭い場合に、閾値が`soft_drivable_bound_margin`から`hard_drivable_bound_margin`に緩和されることを許可します。 ![fig](./images/path_generation/lateral.png) -回避モジュールの使用可能なレーンは、config ファイルを使用して選択できます。 +回避モジュールに使用できる走行可能レーンは、コンフィグファイルを使用して選択できます。 + ```yaml ... @@ -860,21 +881,22 @@ cancel: use_lane_type: "opposite_direction_lane" ``` -### 使用レーンのタイプの設定 +## 車線種類の設定 -ユーザーがパラメータ `use_lane_type` を `opposite_direction_lane` に設定した場合、逆走車線を走行できます。 +`use_lane_type`パラメータを`opposite_direction_lane`に設定すると、対向車線を使用できます。 ![fig](./images/path_generation/opposite_direction.png) -ユーザーがパラメータ `use_lane_type` を `same_direction_lane` に設定した場合、モジュールは逆走車線を重複するパスは生成しません。 +`use_lane_type`パラメータを`same_direction_lane`に設定すると、モジュールは対向車線と重なるパスを作成しません。 ![fig](./images/path_generation/same_direction.png) -### シフトライン生成 +### シフトラインの生成 + +前述のように、回避シフトパスのエンドポイントと復路シフトパスのスタートポイントは固定されており、エンベロープポリゴンから計算されます。次のステップで、モジュールは、シフトの長さ、現在のエゴ速度、および設定ファイルで定義されている横方向のジャーク制約パラメータに応じて、他の側面の点を調整します。 -前述のとおり、エンベロープポリゴンから回避シフトパスのエンドポイントと、リターンシフトパスのスタートポイントがFIXEDポイントとして計算されます。このモジュールでは、次に、シフト距離、現在の自車速度、コンフィグファイルで定義された横方向ジャーク制限パラメータに応じて、他のサイドポイントを調整します。 +2つの点は常にエゴ車線のセンターライン上にあるため、モジュールは次の関数に基づいてシフト開始点とエンドポイント間の縦距離のみを計算します。この関数はパスシフタライブラリで定義されています。[こちら](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)のページも参照してください。 -2つのポイントは常に自車線の中心線上に存在するため、モジュールは次の関数に基づいてシフトのスタートポイントとエンドポイント間の縦方向距離のみを計算します。この関数はパスシフタライブラリで定義されています。[こちら](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md)のページも参照してください。 ```c++ double PathShifter::calcLongitudinalDistFromJerk( @@ -890,9 +912,10 @@ double PathShifter::calcLongitudinalDistFromJerk( } ``` -回避開始地点と終了地点を結ぶ線を `shift_line` と呼び、回避経路はスプライン補完によって生成されます。 +回避経路を生成するスプライン補完において、シフトの開始点と終了点を結ぶ線を「`shift_line`」と呼びます。 + +回避の開始点は、もう 1 つの縦方向の制約があります。回避動作を開始する前に数秒間ウィンカーを点灯するため、回避の開始点は、自車位置に対する自車速度によって変化する値(この距離を「`prepare_length`」と呼びます)を上回っていなければなりません。 -回避開始地点には、もう 1 つの縦方向拘束があります。回避操作を開始する前にウインカーを数秒間点灯し続けるために、回避開始地点は自分の位置から自己速度に応じた値(距離を `prepare_length` と呼びます)よりも遠くなければなりません。 ```yaml longitudinal: @@ -901,41 +924,42 @@ longitudinal: min_prepare_distance: 1.0 # [m] ``` -`prepare_length`は自己速度と`max_prepare_time`の積として計算されます。(自己速度がゼロの場合、`min_prepare_distance`が使用されます。) +`prepare_length` は、自車速度と `max_prepare_time` の積として計算されます。(自車速度が 0 のときは `min_prepare_distance` が使用されます。) ![fig](./images/path_generation/shift_line.png) -## 赤信号でのPlanning +## 赤信号での Planning -このモジュールは信号情報を考慮に入れて、自己車が適切に動作できるようにします。自己車が車線境界線を超えている場合でも、そのような状況で赤信号の前に停止しないようにする必要があります。これは、自己車が隣接車線を塞いでしまい、他の車両に迷惑がかかるためです。 +このモジュールは、トラフィックライト情報を考慮して、自車が適切な挙動をするようにします。自車が車線をまたぐことがありますが、このような状況では自車が赤信号の前に停止しないようにします。これは、自車が隣接する車線を塞ぎ、他の車両に迷惑になるからです。 ![fig](./images/traffic_light/traffic_light.png) -そのため、このモジュールはシフト長とシフトの開始/終了点を制御して、上記のような状況を防ぎます。 +したがって、このモジュールは、上記のような状況を防ぐためにシフトの長さとシフトの開始/終了点を制御します。 -### シフト長の制御 +### シフトの長さの制御 -まず、自己車が回避操作を開始していない場合、このモジュールは最大シフト長を制限し、赤信号の間は**現在の車線のみ**を使用します。これにより、このモジュールが回避操作を実行し、自己車が赤信号に捕らえられたとしても、自己車が他の車両を塞ぐのを防ぎます。 +まず、自車がまだ回避動作を開始していない場合、このモジュールは赤信号中の最大シフトの長さを制限し、現在の車線のみを使用します。これにより、このモジュールが回避動作を実行し自車が赤信号に捕らわれても、他の車両を塞ぐことを防ぎます。 ![fig](./images/traffic_light/limit_shift_length.png) -### 回避シフト開始点の制御 +### 回避シフトの開始点を制御 -さらに、目標物体が信号の停止線より遠方の場合は、このモジュールは回避シフト開始点を停止線に設定して、回避操作中に自己車が赤信号で停止するのを防ぎます。 +さらに、ターゲットオブジェクトが信号の停止線よりも遠い場合、このモジュールは、回避動作の途中で自車が赤信号で停止しないように、回避シフトの開始点を停止線に設定します。 ![fig](./images/traffic_light/shift_from_current_pos.png) ![fig](./images/traffic_light/shift_from_stop_line.png) -### 復帰シフト終了点の制御 +### リターンシフトの終了点を制御 -自己車がすでに回避操作を開始している場合、このモジュールは復帰シフト終了点を停止線に設定しようとします。 +自車がすでに回避動作を開始している場合、このモジュールはリターンシフトの終了点を停止線に設定しようとします。 ![fig](./images/traffic_light/return_after_stop_line.png) ![fig](./images/traffic_light/return_before_stop_line.png) -## セーフティチェック +## 安全確認 + +この機能は、次のパラメータを `true` に設定することで有効にすることができます。 -この機能は次のパラメータを`true`に設定することで有効にできます。 ```yaml safety_check: @@ -943,15 +967,16 @@ longitudinal: enable: true # [-] ``` -このモジュールは回避対象物だけでなく、回避経路の近くに存在する非対象物にも注意を払い、周囲の物体が原因で回避経路が安全でない場合は、回避操舵を解除し、車線を譲ります。 +このモジュールでは、回避対象物だけでなく、回避経路の近くにある非対象物にも注意を払い、周辺の物体によって回避経路が安全でない場合は、回避策を元に戻して、対象物にレーンを譲ります。 ![fig](./images/safety_check/safety_check_flow.png) -### 譲渡操舵 +### 譲渡操作 -さらに、このモジュールは譲渡操舵の際、通常、回避対象物の前に停止点を挿入し、安全に回避できるようになるまで十分な距離を保ちます。移動先の車線が渋滞している場合、自車は停止して待ちます。 +さらに、このモジュールは、対象物を回避して安全に行えるように十分な距離を確保するために、譲渡操作中に回避対象物の前に停止点を挿入します。シフト側レーンが混雑している場合は、エゴは地点で停止して待ちます。 + +次のパラメータを「真」に設定すると、この機能を有効化できます。 -この機能は、次のパラメーターを `true` に設定することで有効にできます。 ```yaml yield: @@ -960,13 +985,14 @@ yield: ![図](./images/safety_check/stop.png) -ただし、横方向の余白が「`hard_margin`」を超えている場合(または「`hard_margin_for_parked_vehicle`」を超えている場合)は、このモジュールは停止点は挿入しません。エゴは回避操作なしで対象物の側面を安全に通過できるためです。 +しかし、横の余白が `hard_margin` (または `hard_margin_for_parked_vehicle`) より大きい場合、このモジュールはストップポイントを挿入しません。エゴは回避操作なしで安全に障害物側面を通り抜けることができるからです。 ![図](./images/safety_check/not_stop.png) -### 安全チェック対象車線 +### 安全確認対象車線 + +ユーザーは以下のパラメーターを使用して、安全確認エリアを選択できます。基本的に、シフト側の車線のみを確認する、以下の構成を推奨します。厳密に安全性を確認したい場合は、`check_current_lane` または `check_other_side_lane` を `true` に設定してください。 -ユーザーは、以下のパラメーターを使用して安全チェックエリアを選択できます。基本的に、シフト側の車線のみを確認するための以下の設定を推奨します。安全を厳格に確認したい場合は、`check_current_lane` および/または `check_other_side_lane` を `true` に設定してください。 ```yaml safety_check: @@ -976,7 +1002,8 @@ yield: check_other_side_lane: false # [-] ``` -回避モジュールでは、`path_safety_checker::isCentroidWithinLanelet` 関数はレーンのオブジェクトをフィルタリングするために使用されます。 +回避モジュールでは、`path_safety_checker::isCentroidWithinLanelet` 関数は車線を基準にオブジェクトをフィルタリングするために使用されます。 + ```c++ bool isCentroidWithinLanelet(const PredictedObject & object, const lanelet::ConstLanelet & lanelet) @@ -989,41 +1016,42 @@ bool isCentroidWithinLanelet(const PredictedObject & object, const lanelet::Cons !!! info - `check_current_lane` や `check_other_side_lane` を `true` に設定すると、誤検知や不必要に譲歩する可能性が高くなります。 + `check_current_lane` と/または `check_other_side_lane` が `true` に設定されている場合、誤検出と不要な譲渡操作の可能性が高くなります。 -### 安全確認アルゴリズム +### 安全チェックアルゴリズム -このモジュールは、`path_safety_checker` ライブラリに実装されている一般的な安全確認ロジックを使用しています。[こちら](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) のページを参照してください。 +このモジュールでは、`path_safety_checker` ライブラリで実装された一般的な安全チェックロジックを使用しています。[こちら](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) のページを参照してください。 ### 制限事項 -#### 制限事項-1 +#### 制限事項 1 -モジュールがこの条件を不安全と判断したときの現在の動作はとても慎重で、これは現在の Planning アーキテクチャでは、積極的な操作(例:後続車両との距離をもっと広げるために速度を上げる)を達成することが難しいからです。 +モジュールが安全ではないと判断した場合の現在の動作は、現在の Planning アーキテクチャではアグレッシブな操作(例:後続車両との距離を増やすために速度を上げる)を実現することが困難であるため、非常に慎重になっています。 -#### 制限事項-2 +#### 制限事項 2 -譲歩操作は、車両がまだ回避操作を開始していない場合にのみ実行されます。(このモジュールは反対車線のオブジェクトを確認しますが、回避操作前に不安全であると判断するには、非常に遠くのオブジェクトを見つける必要があります。) Avoidance 操作中に ego に接近する車両を検出した場合、このモジュールはパスを元に戻したり停止点を挿入したりしません。今のところ、この状況に対処する機能はこのモジュールにはありません。そのため、移動物体との衝突を回避するためにパスを調整する新しいモジュールが必要か、オペレーターがオーバーライドする必要があります。 +譲渡操作は、車両が回避操作を開始していない **場合のみ** 実行されます。(このモジュールは逆車線のオブジェクトを確認しますが、回避操作の前には非常に遠くのオブジェクトを見つけて安全かどうかを判断する必要があります。)回避操作中に自車に接近する車両を検出しても、このモジュールはパスを元に戻したり、停止点を挿入したりしません。現時点では、この状況に対処する機能はこのモジュールにはありません。そのため、移動オブジェクトを避けるようにパスを調整するための新しいモジュールが必要になるか、オペレーターが上書きする必要があります。 !!! info - このモジュールにはシフトの長さのためのしきい値パラメータ `th_avoid_execution` があり、車両の現在のシフトがこの値を超えると車両が回避を開始していると判断します。 + このモジュールにはシフト長のしきい値パラメーター `th_avoid_execution` があり、車両の現在のシフトがこの値を超えると、車両が回避を開始していると判断します。 + +## その他の機能 -## その他の特徴 +### 検出ロスによる補正 -### 検出ロストに対する補償 +認識結果のチャタリングを防ぐため、障害物がターゲットにされると、障害物が消えてもしばらく保持されます。これは、認識が不安定な場合に有効です。ただし、過検出(誤検出の数の増加)につながるため、認識の精度に応じてパラメーターを調整する必要があります(`object_last_seen_threshold = 0.0` の場合、認識結果は 100% 信頼されます)。 -認識結果のチャタリングを防ぐため、障害物がターゲットになると、消えてもしばらく保持されます。これは、認識が不安定な場合に効果的です。ただし、過検出(偽陽性の増加)につながるため、認識精度に合わせてパラメータを調整する必要があります(`object_last_seen_threshold = 0.0` の場合、認識結果は 100% 信頼されます)。 +### 走行可能領域の拡大 -### 走行可能領域の拡張 +このモジュールは、HDMap で定義された以下のポリゴンの追従を可能にする走行可能領域の拡大をサポートしています。 -このモジュールは、HDMap で定義された次のポリゴンの後続に対する走行可能領域の拡張をサポートしています。 +- 交差点領域 +- ハッチング道路標識 +- 自由空間領域 -- 交差点エリア -- ハッチングされた道路標示 -- 自由空間エリア +回避操作でこれらの領域を使用できるようにする場合、ユーザーはフラグを `true` に設定してください。 -これらのエリアを回避操作で使用できるようにする場合は、これらのフラグを `true` に設定してください。 ```yaml # drivable lane setting. This module is able to use not only current lane but also right/left lane @@ -1038,42 +1066,43 @@ use_hatched_road_markings: true use_freespace_areas: true ``` -| | | | -| ---------------------------------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `use_lane_type: same_direction_lane` | ![図](./images/advanced/avoidance_same_direction.png) | | -| `use_lane_type: opposite_direction_lane` | ![図](./images/advanced/avoidance_opposite_direction.png) | | -| 交差点エリア | ![図](./images/advanced/avoidance_intersection.png) | 交差点エリアはLanelet mapで定義されます。 [こちら](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) を参照してください | -| ハッチング道路標示 | ![図](./images/advanced/avoidance_zebra.png) | ハッチング道路標示はLanelet mapで定義されています | +| | | | +| -------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| use_lane_type: same_direction_lane | ![fig](./images/advanced/avoidance_same_direction.png) | | +| use_lane_type: opposite_direction_lane | ![fig](./images/advanced/avoidance_opposite_direction.png) | | +| 交差点エリア | ![fig](./images/advanced/avoidance_intersection.png) | 交差点エリアはLanelet mapで定義されています。[こちら](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md)を参照してください| +| ハッチング路面表示 | ![fig](./images/advanced/avoidance_zebra.png) | ハッチング路面表示はLanelet mapで定義されています。[こちら](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md#hatched-road-markings-area)を参照してください| +| フリースペースエリア | ![fig](./images/advanced/avoidance_freespace.png) | フリースペースエリアはLanelet mapで定義されています(不安定) | -## 未実装/将来の拡張 +## 今後の拡張/未実装部分 - **回避対象の速度の考慮** - - 現在の実装では、停止車両のみが回避対象としてターゲット化されています。自転車などの低速車両の追い越し機能をサポートする必要があります。(実際には、パラメータを変更することで低速オブジェクトを追い越すことは可能ですが、ロジックがサポートされていないため、安全性は保証できません。) - - 追い越し(例:時速20kmの先行車両を時速40kmで追い越す)は、回避モジュール外で処理する必要がある場合があります。どのモジュールで処理するかを検討する必要があります。 + - 現在の実装では、停止車両のみが回避対象になります。自転車などの低速車両の追い越し機能をサポートする必要があります。(実際にはパラメータを変更することで低速オブジェクトを追い越すことは可能ですが、ロジックがサポートされていないため安全は保証できません。) + - 追い越し(例:時速40kmで走行中の前方に時速20kmで走行する車両を追い越す)は、回避モジュール外で処理する必要がある場合があります。どのモジュールが処理すべきかを議論する必要があります。 -- **ターゲットが消失した際の回避キャンセル** +- **ターゲットが見えなくなったら回避をキャンセル** - - 現在の仕様では、回避ターゲットが消えた場合でも、回避経路は残ったままです。回避の必要がなくなった場合はキャンセルする必要があります。 + - 現在の実装では、回避対象が消えても回避経路は残ります。回避する必要がなくなった場合は、取り消す必要があります。 -- **回避ターゲット選択のパフォーマンス向上** +- **回避対象選択のパフォーマンス向上** - - 本質的に、回避ターゲットは静止物かどうかを基準に判断されます。例えば、信号で待機している車両は、将来的に動き出すことが分かっているので、回避されるべきではありません。しかし、現在のAutowareでは、知覚機能が不足しているため、この判断は行えません。そのため、現在の回避モジュールは回避目標を路肩に駐車している車両に限定し、車線の中心から離れた場所で停止している車両に対してのみ回避を実行します。しかし、このロジックでは、故障して車線の中央で停止している車両を避けることはできず、これは知覚モジュールによって静止物として認識されるべきものです。この判断のパフォーマンスには改善の余地があります。 + - 本質的に、回避対象は静的オブジェクトであるかどうかによって判断されます。たとえば、信号待ちで停車している車両は、将来的に動き出すことがわかっているため、避けるべきではありません。しかし、この決定は、Autowareの知覚機能の不足により、現在のAutowareではできません。したがって、現在の回避モジュールは回避対象を路肩に駐車されている車両に限定し、車線の外れで停止している車両に対してのみ回避を実行します。しかし、車線の中央で立ち往生し、停車している故障車両は避けることができず、これらは知覚モジュールによって静的オブジェクトとして認識されるべきです。この決定のパフォーマンスには改善の余地があります。 - **経路の再サンプリング** - - - 現在、荒い解像度の再サンプリングは、後続のモジュールの計算コストを削減するために、出力パスに処理されています。この解像度は一様に大きな値(例:'5m')に設定されていますが、複雑な経路には小さな解像度を適用する必要があります。 + - 現在、ラフ解像度の再サンプリングは、後続モジュールの計算コストを削減するために、出力経路に処理されます。この解像度は一様に大きな値(例:`5m`)に設定されていますが、複雑な経路には小さな解像度を適用する必要があります。 ## デバッグ -### コンソールに`RCLCPP_DEBUG`を表示 +### `RCLCPP_DEBUG` をコンソールに表示 -すべてのデバッグメッセージは、次の名前空間に記録されます。 +すべてのデバッグメッセージは、以下の名前空間でログに記録されます。 -- `planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance` または, +- `planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance` または、 - `planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance.utils` -ユーザーは、次のコマンドでデバッグ情報を参照できます。 +次のコマンドでデバッグ情報を見ることができます。 + ```bash ros2 service call /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/config_logger logging_demo/srv/ConfigLogger "{logger_name: 'planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance', level: DEBUG}" @@ -1081,7 +1110,8 @@ ros2 service call /planning/scenario_planning/lane_driving/behavior_planning/beh ### デバッグマーカーの可視化 -ユーザーは、次のパラメーターを使用して、デバッグマーカーの公開を有効にできます。 +ユーザーは次のパラメーターを使用して、デバッグマーカーの公開を有効にできます。 + ```yaml debug: @@ -1097,13 +1127,14 @@ debug: ![fig](./images/debug/debug_marker_rviz.png) -### デバッグメッセージのエコーにより、オブジェクトが無視された理由を特定する +### オブジェクトが無視された理由を検出するためのデバッグメッセージのエコー -何らかの理由で、オブジェクトに対してシフトポイントが生成されない場合、`ros2 topic echo` を利用して障害が発生した理由を確認できます。 +何らかの理由でオブジェクトのシフトポイントが生成されない場合、`ros2 topic echo` を使用して障害の理由を確認できます。 ![avoidance_debug_message_array](./images/avoidance_debug_message_array.png) -デバッグメッセージを出力するには、次のコマンドを実行するだけです。 +デバッグメッセージを出力するには、以下を実行するだけです + ```bash ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance_debug_message_array @@ -1111,106 +1142,105 @@ ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behav ## よくある質問 -### ターゲットオブジェクト +### 対象物体 -#### 静止オブジェクトと動的オブジェクトの両方を回避できますか? +#### 静止物体および動的物体は回避されますか? -このモジュールは静止オブジェクト(停止しているオブジェクト)を回避しますが、動的オブジェクト(動いているオブジェクト)の回避はサポートしていません。動的オブジェクトは、[動的障害物回避モジュール](../autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md)内で処理されます。 +このモジュールは、静止(停止)している物体は回避しますが、動的(移動)している物体を回避する機能はありません。動的物体は、[動的障害回避モジュール](../autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md)で処理されます。 -#### 回避するオブジェクトのタイプ(クラス)を教えてください +#### 回避する物体の種類(分類)は? -デフォルトでは、車、トラック、バス、トレーラー、自転車、オートバイ、歩行者、未知のオブジェクトを回避します。詳細は、[ターゲットオブジェクトのフィルタリングセクション](#target-object-filtering)を参照してください。 -これらのオブジェクトは、車両タイプオブジェクトと車両タイプ以外のオブジェクトに分類され、ターゲットオブジェクトのフィルタリングは車両タイプと車両タイプ以外で異なります。 +デフォルトでは、このモジュールは、自動車、トラック、バス、トレーラー、自転車、オートバイ、歩行者、および不明な物体を回避します。詳細については、[対象物体フィルタリングセクション](#target-object-filtering)を参照してください。 +上記の物体は、車両タイプの物体と車両タイプ以外の物体に分けられます。対象物体フィルタリングは、車両タイプと車両タイプ以外の物体で異なります。 -- 車両タイプオブジェクト: 車、トラック、バス、トレーラー、オートバイ -- 車両タイプ以外のオブジェクト: 歩行者、自転車 +- 車両タイプの物体:自動車、トラック、バス、トレーラー、オートバイ +- 車両タイプ以外の物体:歩行者、自転車 -#### ターゲットオブジェクトかどうかをどのように判断しますか? +#### 対象物体かどうかを判断する方法は? -車両タイプオブジェクトと車両タイプ以外のオブジェクトの条件は異なります。ただし、基本的な考え方は、計画された経路内の路肩にある静止オブジェクトを回避することです。 -以下は、車両タイプオブジェクトに対して回避経路が生成される場合の例です。 +車両タイプの物体と車両タイプ以外の物体の条件は異なります。ただし、主な考え方は、計画された経路内の路肩にある静止している物体は回避されるべき、というものです。 +以下は、車両タイプの物体に対して回避経路が生成される際の例です。 -- 道路脇に車を停車して立ち寄る -- 隣接する車線を走行する -- 隣接車線を停車する +- 路肩に停車して後続車両に道を譲る車両 +- 隣接車線に停車している車両 -詳細は、[車両タイプオブジェクト](#conditions-for-vehicle-type-objects)と[車両タイプ以外のオブジェクト](#conditions-for-non-vehicle-type-objects)を参照してください。 +詳細については、[車両タイプの物体](#conditions-for-vehicle-type-objects)と[車両タイプ以外の物体](#conditions-for-non-vehicle-type-objects)を参照してください。 -#### 曖昧なターゲットとは何ですか? +#### 曖昧な対象とは? -曖昧なターゲットとは、Autowareの現在の制限(例:車線の真ん中に駐車された車両)により、回避ターゲットとして明確に特定できないオブジェクトを指します。 -このモジュールは、明確に定義された静止オブジェクトを自動的に回避しますが、曖昧なターゲットには一部オペレーターの介入が必要になります。 +曖昧な対象とは、現在の Autoware の限界により回避対象として明確に識別できない物体のことです(例:車線の真ん中に駐車している車両)。 +このモジュールは、明確に定義された静止した物体を自動的に回避しますが、曖昧な対象についてはオペレーターによる介入が必要になる場合があります。 -#### ターゲットオブジェクトをどのように視覚化できますか? +#### 対象物体はどのように視覚化できますか? -ターゲットオブジェクトはRVizを使用して視覚化できます。RVizでは、検出された障害物や計画された回避経路などのモジュールの出力が表示されます。詳細については、[デバッグマーカーセクション](#visualize-debug-markers)を参照してください。 +対象物体は RViz を使用して視覚化できます。RViz では、障害物の検出や回避経路の計画などのモジュールの出力が表示されます。詳細については、[デバッグマーカーセクション](#visualize-debug-markers)を参照してください。 -#### 障害物との横方向距離を確認するにはどうすればよいですか? +#### 障害物との横方向の距離を確認する方法を教えてください。 -現時点では、自車とターゲットオブジェクトの相対位置を出力するトピックはありません。 -現時点では、RVizでの視覚的な確認が唯一の解決策です。 +現時点では、自車と対象物との相対位置を出力するトピックはありません。 +現時点では、RViz での視覚的な確認が唯一の解決策です。 -#### 複数のオブジェクトを同時に回避しますか? +#### 複数のオブジェクトを同時に回避できますか? -はい、このモジュールは複数の静止オブジェクトを同時に回避できます。 -複数のシフトラインを生成し、各オブジェクトを回避する回避経路を計算します。 -詳細は、[経路形状の決定方法セクション](#multiple-obstacle-case-one-direction)で説明しています。 +はい、このモジュールは、複数の静止したオブジェクトを同時に回避できます。 +これは複数のシフトラインを生成し、各オブジェクトを回避する回避経路を計算することによって実現します。 +詳細は、[経路形状の決定方法セクション](#multiple-obstacle-case-one-direction)で説明されています。 -### 回避時の使用エリア +### 回避時に使用するエリア -#### どの車線がオブジェクトの回避に使用されますか? +#### オブジェクトの回避に使用される車線は? -このモジュールは、現在の車線だけでなく、隣接車線と対向車線も使用できます。使用可能な車線は、[シフト長計算セクション](#shift-length-calculation)で説明されているように、設定ファイルで選択できます。左右に車線がある状況では、中央車線に駐車車両がないと想定されています。 +このモジュールは、現在の車線だけでなく、隣接車線と反対車線も使用できます。[シフト長の計算セクション](#shift-length-calculation)で述べたように、使用可能な車線は設定ファイルで選択できます。左右に車線がある場合、中央車線には駐車車両がないと想定されます。 -#### 交差点内のオブジェクトを回避しますか? +#### 交差点内のオブジェクトは回避されますか? -基本的に、このモジュールは交差点内に駐車車両がないことを想定しています。車線に従う車両や自車線に合流する車両はターゲット外オブジェクトです。 -交差点内で右折/左折を待つ車両は、[走行可能エリアの拡張セクション](#drivable-area-expansion)で説明されているように、設定ファイルで走行可能エリアを拡張することで回避できます。 +このモジュールは、基本的に、交差点内には駐車車両がないと想定しています。車線に従うか、自車線に合流する車両は、対象外です。[走行可能領域拡張セクション](#drivable-area-expansion)で説明しているように、交差点内で右折/左折を待ち構える車両は、設定ファイルで走行可能領域を拡張することで回避できます。 -走行可能なエリアは、[走行可能なエリア拡幅のセクション](#走行可能なエリア拡幅)で説明されているように、設定ファイルで拡張できます。 +運転可能エリアは、[運転可能エリアの拡張セクション](#drivable-area-expansion)で述べられているように、構成ファイルで拡張できます。 ### パス生成 -#### 回避パスはどのように生成されていますか? +#### 回避経路はどのように生成されますか? -回避パスは、検出された静止オブジェクトの周囲をナビゲートするように現在の参照パスを変更することで生成されます。 -これは、車両が安全な境界内に留まり、障害物を避けながら道路に従うことを保証する、ルールベースのシフトラインアプローチを使用して行われます。 -詳細は[付録](#付録-シフトライン生成パイプライン)で説明されています。 +回避経路は、検出された静止物体の周囲を走行するために現在のリファレンスパスを変更して生成されます。 +これは、車両が安全な境界内に残り、障害物を回避しながら道路に従うことを保証するルールベースのシフトラインアプローチを使用して行われます。 +詳細は [付録](#appendix-shift-line-generation-pipeline) に説明されています。 -#### 回避パスはどちらの方向(右または左)に生成されていますか? +#### 回避経路はどちら側に(右または左)生成されますか? -回避の動作は、目標車両の重心に依存します。 -ターゲットオブジェクトがエゴレーン(自車走行レーン)の左側にいる場合、回避は右側に生成されます。 -現在、左側から左にシフトした障害物を避けることはサポートされていません(右にシフトしたオブジェクトも同じです)。 +回避の挙動は、対象車両の重心に依存します。 +対象物が自車線の左側にいる場合、回避は右側に生成されます。 +現時点では、左側から左にシフトした障害物を回避することはサポートされていません (右にシフトした物体も同様です)。 -#### ターゲットオブジェクトにエンベロープポリゴンを使用するのはなぜですか? +#### なぜ対象物にエンベロープポリゴンを使用するのですか? -各ターゲットオブジェクトの知覚/追跡ノイズの影響を軽減するために使用されます。 -エンベロープポリゴンは長方形であり、そのサイズはオブジェクトのポリゴンとバッファーパラメータに依存し、常に参照パスに平行です。 +各対象物に対する知覚/追跡ノイズの影響を軽減するために使用されています。 +エンベロープポリゴンは、オブジェクトのポリゴンとバッファパラメータに依存するサイズを持つ長方形であり、常にリファレンスパスと平行です。 エンベロープポリゴンは、最新のワンショットエンベロープポリゴンと前のエンベロープポリゴンを使用して作成されます。 -詳細は[知覚ノイズによって引き起こされるシフトラインチャタリングを防ぐ方法のセクション](#知覚ノイズによって引き起こされるシフトラインチャタリングを防ぐ方法)で説明されています。 +詳細は [知覚ノイズによって引き起こされるシフトラインのチャタリングを防ぐ方法](#how-to-prevent-shift-line-chattering-that-is-caused-by-perception-noise) に説明されています。 -#### モジュールが安全な回避パスを見つけられない場合どうなりますか? +#### モジュールが安全な回避経路を見つけられないとどうなりますか? -モジュールが安全な回避パスを見つけられない場合、車両は回避操作を実行せずに停止するか、現在のパスに沿って続行する場合があります。 -ターゲットオブジェクトがあり、回避するのに十分なスペースがある場合、エゴビークルは回避パスを生成できる位置で停止します。これを[譲歩操作](#譲歩操作)と呼びます。 -一方で、十分なスペースがない場合、このモジュールは何もせず、[障害物クルーズプランナー](../../autoware_obstacle_cruise_planner/README.md)オブジェクトを担当します。 +モジュールが安全な回避経路を見つけられない場合、車両は回避操作を実行せずに停止するか、現在のパスに沿って走行を続ける場合があります。 +対象物があり、回避するのに十分なスペースがある場合、自車はその回避経路を生成できる位置で停止します。これを [譲歩操縦](#yield-maneuver) と呼びます。 +一方で、十分なスペースがない場合、このモジュールは何もせず、[障害物クルーズプランナー](../../autoware_obstacle_cruise_planner/README.md) がオブジェクトの制御を担います。 -#### 回避パスがあるように見えますが、車両が停止します。何が起こっているのでしょうか? +#### 回避経路があるように見えるのに、車両が停止します。何が起こっているのですか? -この状況は、モジュールがAUTOモードで動作しているときにターゲットオブジェクトがあいまいな場合、またはMANUALモードで動作しているときに発生します。 -生成された回避パスは候補として提示され、実行前にオペレーターの承認が必要です。オペレーターがパスを承認しない場合、エゴビークルは回避パスを生成できる場所で停止します。 +この状況は、モジュールが AUTO モードで動作しているときに対象物が曖昧な場合、または MANUAL モードで動作しているときに発生します。 +生成された回避経路は候補として表示され、実行前にオペレータの承認が必要です。 +オペレータがパスを承認しない場合、自車は回避経路を生成できる場所で停止します。 ### 操作 -#### MANUALモードをAUTOモードよりも使用する利点は何ですか? +#### AUTO モードよりも MANUAL モードを使用するメリットは何ですか? -MANUALモードを使用すると、オペレーターは回避パスの承認を直接制御できます。これは、センサーデータが信頼できない場合やあいまいである場合に特に役立ちます。 -このモードは、実行前に人による検証が必要なため、不要または不適切な回避操作を防ぐのに役立ちます。偽陽性が発生する可能性がある環境や、センサー/知覚システムの性能が低い場合に推奨されます。 +MANUAL モードでは、オペレータが回避経路の承認を直接制御できます。これは、センサーデータが信頼できないか曖昧な状況で特に便利です。 +このモードは、実行前に人間の検証が必要なため、不要または不適切な回避操作を防ぐのに役立ちます。誤検出が発生する可能性が高い環境やセンサー/知覚システムの性能が制限されている場合に推奨されます。 -#### このモジュールは特定の車両タイプまたは環境に合わせてカスタマイズできますか? +#### このモジュールは特定の車両タイプまたは環境に合わせてカスタマイズできますか? -モジュールは、障害物の特定と回避方法を定義するルールとパラメータを調整することでカスタマイズできます。 +モジュールは、障害物の識別方法と回避方法を定義するルールとパラメーターを調整することでカスタマイズできます。 回避操作は、特定の車両タイプによって変更されることはありません。 ## 付録: シフトライン生成パイプライン @@ -1219,6 +1249,7 @@ MANUALモードを使用すると、オペレーターは回避パスの承認 + ```plantuml @startuml skinparam monochrome true @@ -1320,56 +1351,57 @@ stop ### パス形状の決定方法 -指定された横方向加速度で障害物に対するシフトポイントを生成します。これらのポイントは統合されて回避経路が生成されます。障害物の配置に対応する各ケースの詳細な処理フローを以下に示します。実際のインプリメンテーションは各ケースに分かれていませんが、常に「複数の障害物ケース(両方向)」に対応する関数が実行されています。 +与えられた横方向のジャークで障害物のためのシフトポイントを生成します。これらのポイントは、回避経路を生成するために統合されます。障害物の設置位置に対応する各ケースの処理フローの詳細を以下に示します。実際の実装はケースごとに分離されていませんが、常に `multiple obstacle case (both directions)` に対応する関数が実行されています。 -#### 障害物が1つのケース +#### 単一障害物のケース -障害物に対する横方向シフト距離が計算され、下図に示すように、自己車両の速度と指定された横方向加速度からシフトポイントが生成されます。シフトポイントに基づいて、次に円滑な回避経路が計算されます。 +障害物に対する横方向のシフト距離が計算され、次にシフトポイントは、以下の図のようにエゴビークルの速度と与えられた横方向のジャークから生成されます。次に、シフトポイントに基づいて滑らかな回避経路が計算されます。 -さらに、特殊な場合は以下のプロセスが実行されます。 +さらに、特別の場合には、以下の処理が実行されます。 -#### 横方向加速度緩和条件 +#### 横方向のジャーク緩和条件 -- 自己車両が回避ターゲットに近い場合、横方向加速度は最大加速度まで緩和されます。 -- 回避後に中心線に戻るときに、ゴール(パスの終端)まで十分な距離が残っていない場合、上記の条件と同様に加速度条件は緩和されます。 +- エゴビークルが回避ターゲットに近い場合、横方向のジャークは最大ジャークまで緩和されます。 +- 回避後、中央線に戻る際に、ゴール(パスの終了)まで十分な距離が残っていない場合、ジャーク条件は上記のように緩和されます。 #### 最小速度緩和条件 -回避中に実際の速度を事前に認識できないという問題があります。これは、特に自己車両の速度が0のときに重要です。 -それを解決するために、このモジュールは最小回避速度用のパラメータを提供します。これは、車両速度が低いときに加速度を計算するために使用されます。 +回避中の実際の速度を予期して知ることができないという問題があります。これは、エゴビークルの速度が 0 の場合に特に重要です。 +これを解決するため、このモジュールは、車両の速度が低いときに横方向のジャーク計算に使用される、最小回避速度のパラメータを提供します。 -- 自己車両速度が「公称」最小速度より低い場合、加速度の計算に最小速度を使用します。 -- 自己車両速度が「鋭い」最小速度よりも低く、公称の横方向加速度が回避に十分でない場合(自己車両が障害物近くで停止している場合)、加速度の計算に「鋭い」最小速度を使用します(「公称」速度より低くする必要があります)。 +- エゴビークルの速度が「公称値」の最小速度より低い場合、ジャークの計算には最小速度を使用します。 +- エゴビークルの速度が「鋭敏」な最小速度より低く、公称横方向のジャークが回避に十分でない(エゴビークルが障害物の近くに停止しているケース)場合、ジャークの計算では「鋭敏」な最小速度を使用します(「公称速度」より低くする必要があります)。 ![fig](./images/how_to_decide_path_shape_one_object.drawio.svg) -#### 障害物が複数あるケース(一方向) +#### 複数の障害物のケース(一方向) -障害物が複数の場合は、シフトポイントを生成します。それらすべてはマージされ、リファレンスパスに沿って新しいシフトポイントが生成されます。新しいポイントはフィルタリングされ(たとえば、影響の小さいシフトポイントは削除され)、フィルタリングされたシフトポイントに対して回避経路が計算されます。 +複数の障害物のためのシフトポイントを生成します。それらはすべてマージされて、基準パスに沿った新しいシフトポイントが生成されます。新しいポイントはフィルタリングされ(たとえば、小さな影響のシフトポイントを削除します)、回避経路はフィルタリングされたシフトポイントに対して計算されます。 -**生シフトポイントのマージプロセス**: 各パスポイントのシフト長を確認します。シフトポイントが重なっている場合、同じ方向に対して最大シフト値が選択されます。 +**生のシフトポイントのマージ処理**: 各パスポイントのシフト長を確認します。シフトポイントが重なっている場合、同じ向きに対して最大シフト値が選択されます。 -シフトポイントフィルタリングの詳細については、[#シフトポイントのフィルタリング](#filtering-for-shift-points)を参照してください。 +シフトポイントフィルタリングの詳細については、[シフトポイントのフィルタリング](#シフトポイントのフィルタリング)を参照してください。 ![fig](./images/how_to_decide_path_shape_multi_object_one_direction.drawio.svg) -#### 障害物が複数あるケース(両方向) +#### 複数の障害物のケース(両方向) -障害物が複数の場合は、シフトポイントを生成します。それらすべてはマージされて新しいシフトポイントが生成されます。異なる方向で目的のシフトが競合する領域がある場合、これらの領域の最大シフト量の合計が最終的なシフト量として使用されます。プロセスの残りの部分は、単一方向の場合と同じです。 +複数の障害物のためのシフトポイントを生成します。それらはすべてマージされて、新しいシフトポイントが生成されます。望ましいシフトが異なる方向で衝突する領域がある場合、これらの領域における最大シフト量の合計が最終シフト量として使用されます。処理の残りの部分は、一方向の場合と同じです。 ![fig](./images/how_to_decide_path_shape_multi_object_both_direction.drawio.svg) #### シフトポイントのフィルタリング -シフトポイントは、期待される回避経路的形状を取得するためにフィルタリングプロセスによって修正されます。次のフィルタが含まれます。 +シフトポイントは、回避経路の期待される形状を得るために、フィルタリングプロセスによって変更されます。次のフィルタが含まれています。 -- 量子化: 小さなシフトを無視するために、回避幅を量子化します。 -- 小さなシフトの削除: 前のシフトポイントに対する小さな変化を伴うシフトは、前のシフト幅に統合されます。 -- 類似勾配の削除: シフトポイントを2つ直線で接続し、直線の近傍にシフト量がある場合は、間のシフトポイントを削除します。 -- 一時的な戻りの削除: 回避幅を(中心線に戻るために)削減するシフトポイントの場合、縦方向に十分な距離がある場合はそれらを削除します。 +- 量子化: 小さなシフトを無視するために回避幅を量子化します。 +- 小さいシフトの削除: 前のシフトポイントに対する変化が小さいシフトは、前のシフト幅で統一されます。 +- 類似勾配の削除: 2つのシフトポイントを直線で接続し、それらのシフト量が直線の近くにある場合、間のシフトポイントを削除します。 +- 一時的なリターンの削除: 回避幅を削減するシフトポイント(中央線に戻る場合)、縦方向に十分な距離がある場合はそれらを削除します。 ## 付録: すべてのパラメータ -回避固有のパラメータ設定ファイルの場所: `src/autoware/launcher/planning_launch/config/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/static_obstacle_avoidance.param.yaml`。 +回避固有のパラメータ構成ファイルの場所: `src/autoware/launcher/planning_launch/config/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/static_obstacle_avoidance.param.yaml`. {{ json_to_markdown("planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json") }} + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md index d606820cfaf81..4f92baa9dbc65 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/README.md @@ -2,47 +2,48 @@ ### 役割 -ブラインドスポットモジュールは、交差点での左折/右折時、左/右側に走行する自転車や歩行者との衝突可能性をチェックします。 +ブラインドスポットモジュールは、交差点で左右に走行する自転車や歩行者との衝突の可能性を、左折/右折前に確認します。 -![brief](./docs/blind-spot.drawio.svg) +![簡潔](./docs/blind-spot.drawio.svg) -### 起動タイミング +### アクティブ化タイミング -この機能は、ターゲットパスのレーンIDに交差点ラベル(すなわち「`turn_direction`」属性が「`left`」または「`right`」)がある場合に起動されます。 +この機能は、ターゲットパスのレーンIDが交差点ラベル(つまり、`turn_direction`属性が`left`または`right`)を持つときにアクティブ化されます。 -### 内部動作/アルゴリズム +### 内部処理/アルゴリズム マップ情報と自車位置に基づいて、停止線、通過判定線、検出エリア、衝突エリアを設定します。 -- 停止線: 交差するレーンの情報に基づいて自動作成されます。 +- 停止線: 交差点レーン情報に基づいて自動的に作成されます。 -- 通過判定線: 急ブレーキを回避するために、停止するかしないかを判断する位置です。 +- 通過判定線: 急ブレーキを避けるために停止するかどうかの判断位置。 -- 検出エリア: 自車位置の左右のエリアです。 +- 検出エリア: 自車位置の右/左領域。 -- 衝突エリア: 自車位置から停止線までの左右のエリアです。 +- 衝突エリア: 自車位置から停止線までの右/左領域。 -停止/走行状態: 各オブジェクトのいずれかで両方の条件が満たされた場合、このモジュールの状態は「停止」状態に移行し、ゼロ速度を挿入して車両を停止します。 +停止/走行状態: 対象物すべてにどちらかの条件が満たされた場合、このモジュール状態は「停止」状態に移行し、ゼロ速度を挿入して車両を停止させます。 -- オブジェクトが検出エリア上にあります -- オブジェクトの予測パスが衝突エリアにあります +- オブジェクトが検出領域にある +- オブジェクトの予測経路が衝突領域にある -急停止を避けるために、「停止」判定は判定線が通過された後には実行されません。 +急停止を避けるために、判定ライン通過後は「停止」判定は実行されません。 -「停止」が判定されると、状態のチャタリング(例: 2秒)を防ぐため、「走行」判定が一定時間継続するまで「走行」状態に移行しません。 +「停止」が判定されると、状態のチャタリング(例: 2秒)を防ぐために、「走行」判定が一定期間継続するまで「走行」状態に移行しません。 -### モジュールパラメータ +### モジュールパラメーター -| パラメータ | タイプ | 説明 | -| ------------------------------- | ------ | -------------------------------------------------------------------------------------- | -| `stop_line_margin` | double | [m] 車両が停止線手前で停止しようとするマージン | -| `backward_length` | double | [m] 最も近いパスポイントから始点のエッジまでの距離 | -| `ignore_width_from_center_line` | double | [m] 自車の後方の車両が自車と衝突するかどうかを無視するしきい値 | -| `max_future_movement_time` | double | [s] オブジェクトの将来の移動を考慮するための最大時間 | -| `adjacent_extend_width` | double | [m] 隣接する車線(例:自転車専用車線)が存在する場合、死角領域はこの長さだけ拡張される | +| パラメータ | タイプ | 説明 | +|---|---|---| +| `stop_line_margin` | double | 車両が停止線の手前で停止しようとするマージン[m] | +| `backward_length` | double | 最も近いパス地点から始点の端までの距離[m] | +| `ignore_width_from_center_line` | double | 後続車が自車と衝突しているかどうかを判定する無視しきい値[m] | +| `max_future_movement_time` | double | オブジェクトの将来の動きを考慮するための最大時間[s] | +| `adjacent_extend_width` | double | 隣接車線が自転車専用車線などの場合、死角領域がこの長さに拡張される[m] | ### フローチャート + ```plantuml @startuml title modifyPathVelocity @@ -97,3 +98,4 @@ endif stop @enduml ``` + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md index 1511095409a03..f2770ada5b062 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md @@ -2,7 +2,7 @@ ## 役割 -本モジュールは、歩行者や自転車などの横断歩道利用者が安全に通行するために、車両が横断歩道前で停止する必要があるかどうかを、オブジェクトの挙動や周囲の交通状況に基づいて判断します。 +このモジュールは、自車位置、周囲の交通状況、歩行者や自転車などの横断歩道利用者の行動に基づき、横断歩道の手前で自車が停止する必要があるかどうかを判断することで、安全な通行を確保します。
![crosswalk_module](docs/crosswalk_module.svg){width=1100} @@ -10,6 +10,7 @@ ## フローチャート + ```plantuml @startuml @@ -41,6 +42,7 @@ stop @enduml ``` + ```plantuml @startuml @@ -72,36 +74,37 @@ stop ## 機能 -### 歩行者への優先権の譲与 +### 歩行者への譲歩 #### ターゲットオブジェクト -crosswalkモジュールは、`object_filtering.target_object` 名前空間で定義された次のパラメータのタイプを持つオブジェクトを処理します。 + crosswalkモジュールは、`object_filtering.target_object`名前空間で次のパラメータで定義されたタイプのオブジェクトを処理します。 -| パラメータ | 単位 | 型 | 説明 | -| ------------ | ---- | ---- | ----------------------------------------- | -| `unknown` | [-] | bool | `UNKNOWN` 物体を探して停止するかどうか | -| `pedestrian` | [-] | bool | `PEDESTRIAN` 物体を探して停止するかどうか | -| `bicycle` | [-] | bool | `BICYCLE` 物体を探して停止するかどうか | -| `motorcycle` | [-] | bool | `MOTORCYCLE` 物体を探して停止するかどうか | +| パラメーター | 単位 | タイプ | 説明 | +| ------------ | ---- | ---- | ---------------------------------------------- | +| `unknown` | [-] | bool | 未知物体に対して監視と停車を行うかどうか | +| `pedestrian` | [-] | bool | 歩行者に対して監視と停車を行うかどうか | +| `bicycle` | [-] | bool | 自転車に対して監視と停車を行うかどうか | +| `motorcycle` | [-] | bool | オートバイに対して監視と停車を行うかどうか | -横断歩道外の周囲を横断する歩行者を処理するために、横断歩道モジュールは横断歩道周囲に注意領域を作成し、図の黄色の多角形で示されます。オブジェクトの予測パスが注意領域と衝突した場合、オブジェクトは譲歩の対象となります。 +横断歩道以外の近隣の横断歩道を横断する人を処理するため、横断歩道モジュールは横断歩道の周囲に注目領域を作成し、図の黄色の多角形として示します。物体の予測パスが注目領域と衝突する場合は、その物体は譲歩の対象となります。
- ![crosswalk_attention_range-ja](docs/crosswalk_attention_range-ja.svg){width=600} + ![crosswalk_attention_range](docs/crosswalk_attention_range.svg){width=600}
-周囲は `object_filtering.target_object` ネームスペース内の次のパラメータによって定義されます。 +近隣は `object_filtering.target_object` 名前空間内の次のパラメータによって定義されます。 -| パラメータ | 単位 | 型 | 説明 | -| --------------------------- | ---- | ------ | ------------------------------------------------------------------------ | -| `crosswalk_attention_range` | [m] | double | 検出エリアは -X メートルから +X メートルの間の横断歩道として定義されます | +| パラメーター | 単位 | タイプ | 説明 | +| ---------------------------- | ---- | -------- | -------------------------------------------------------------------------------------------------- | +| `crosswalk_attention_range` | [m] | double | 検出領域は横断歩道の `X` メートル前から横断歩道の `X` メートル後に設定 | #### 停止位置 -まず、安全性のため自己位置と対象物体の距離は常に `stop_distance_from_object [m]` 以上維持されます。 +第一に、自車と対象物との安全距離を保つため、`stop_distance_from_object [m]` は常に最低でも維持されます。 -レーンのマップに停止線が存在する場合、停止位置は線に基づいて算出されます。レーンのマップに停止線が **存在しない** 場合、停止位置は自己位置と横断歩道の距離を `stop_distance_from_crosswalk [m]` に保つことで算出されます。 +車線地図内に停止線が存在する場合、停止位置はその線に基づいて計算されます。 +車線地図内に停止線が**存在しない**場合、停止位置は自車と横断歩道との間隔を `stop_distance_from_crosswalk [m]` に保つことで計算されます。
@@ -112,37 +115,37 @@ crosswalkモジュールは、`object_filtering.target_object` 名前空間で
-例外ケースとして、 スクランブル交差点で見られる**幅広の**横断歩道を歩行者(または自転車)が横断しており、歩行者の位置が停止線から `far_object_threshold` メートル以上離れている場合、実際の停止位置は停止線ではなく、`stop_distance_from_object` と歩行者の位置によって決まります。 +例外として、スクランブル交差点で見られる**幅広の**横断歩道を歩行者(または自転車)が渡っており、かつ歩行者の位置が停止線から `far_object_threshold` メートル以上離れている場合、実際の停止位置は停止線ではなく、`stop_distance_from_object` と歩行者の位置によって決定されます。
![far_object_threshold](docs/far_object_threshold.drawio.svg){width=700}
-`stop_position` 名前空間では、以下のパラメータが定義されています。 +`stop_position` ネームスペースでは、以下のパラメータが定義されています。 -| パラメータ | | 型 | 説明 | -| ------------------------------ | --- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `stop_position_threshold` | [m] | double | 自車位置が停止線からこの値よりも近い場合は、このモジュールは自車が譲歩を完了したとみなします。 | -| `stop_distance_from_crosswalk` | [m] | double | 明示的な停止線が設定されていないLanelet2マップの場合、停止線を横断歩道から離す | -| `far_object_threshold` | [m] | double | 物体が停止線のXメートル後ろを通過した場合、停止位置は、横断歩道の幅が非常に広い場合のケースに対して、オブジェクト位置に基づいて決定されます(オブジェクトの`stop_distance_from_object`メートル前) | -| `stop_distance_from_object` | [m] | double | Vehicle decelerates to be able to stop in front of object with margin | +| パラメータ | | 型 | 説明 | +| ---------------------------- | --- | ----- | ---------------------------------------------------------------------------------------------------------------------------- | +| `stop_position_threshold` | [m] | double | 自車位置がこの値未満で停止線付近に停止した場合、このモジュールは自車が譲歩したと判断します。 | +| `stop_distance_from_crosswalk` | [m] | double | Lanelet2マップで明示的な停止線が存在しない場合、停止線を横断歩道の外側に設定します。 | +| `far_object_threshold` | [m] | double | 物体が停止線のXメートル後方に横断した場合、横断歩道の幅が非常に広い場合のために、停止位置は物体位置(オブジェクトの`stop_distance_from_object`メートル前)に従って決定されます。 | +| `stop_distance_from_object` | [m] | double | 車両がマージンをつけて物体の前で停止できるよう減速します。 | -#### Yield判断 +#### 譲歩の意思決定 -モジュールは歩行者信号が**緑**または**不明**の場合にのみ譲る判断を行います。 -判断は、衝突点の計算とともに、以下の変数に基づきます。 +このモジュールは、歩行者の信号が **緑** または **不明** の場合にのみ譲歩の意思決定を行います。 +この意思決定は、衝突点の計算に加えて、以下の変数に基づいています。 -- Time-To-Collision (TTC): **自車**が仮想衝突点に到達する時間。 -- Time-To-Vehicle (TTV): **対象物**が仮想衝突点に到達する時間。 +- 衝突時間 (TTC):自車が仮想衝突点に到達するまでの時間 +- 車両到達時間 (TTV):**障害物** が仮想衝突点に到達するまでの時間 -TTCとTTVの相対的な関係に基づき、横断歩道での**自車**の挙動を3つのカテゴリに分類します[1]。 +横断歩道における自車の挙動を、TTC と TTV の関係によって 3 つのカテゴリに分類します [1]。 -- A. **TTC >> TTV**: 対象物は**自車**よりも先に横断する十分な時間があります。 - - 停止計画なし。 -- B. **TTC ≒ TTV**: 衝突の危険性があります。 - - **自車の経路に停止点が挿入されます。** -- C. **TTC << TTV**: **自車**は対象物よりも先に横断する十分な時間があります。 - - 停止計画なし。 +- A. **TTC >> TTV**:障害物には自車よりも前に横断する十分な時間がある。 + - 停止計画はなし。 +- B. **TTC ≒ TTV**:衝突の危険性がある。 + - **自車の経路に停止地点が挿入されます**。 +- C. **TTC << TTV**:自車には障害物よりも前に横断する十分な時間がある。 + - 停止計画はなし。
@@ -153,12 +156,12 @@ TTCとTTVの相対的な関係に基づき、横断歩道での**自車**の挙
-AとBの境界は、`ego_pass_later_margin_x`と`ego_pass_later_margin_y`から補間されます。 -上の図の場合、`ego_pass_later_margin_x`は`{0, 1, 2}`で、`ego_pass_later_margin_y`は`{1, 4, 6}`です。 -同様に、BとCの境界は`ego_pass_first_margin_x`と`ego_pass_first_margin_y`から計算されます。 -上の図の場合、`ego_pass_first_margin_x`は`{3, 5}`で、`ego_pass_first_margin_y`は`{0, 1}`です。 +A と B の境界は、`ego_pass_later_margin_x` と `ego_pass_later_margin_y` から内挿されます。 +上の図の場合、`ego_pass_later_margin_x` は `{0, 1, 2}` で、`ego_pass_later_margin_y` は `{1, 4, 6}` です。 +同様に、B と C の境界は `ego_pass_first_margin_x` と `ego_pass_first_margin_y` から計算されます。 +上の図の場合、`ego_pass_first_margin_x` は `{3, 5}` で、`ego_pass_first_margin_y` は `{0, 1}` です。 -横断歩道に対応する赤信号が表示されている場合、**自車**は歩行者に対して譲りません。 +対応する横断歩道の信号が赤の場合、自車は歩行者に対して譲歩しません。
@@ -169,193 +172,200 @@ AとBの境界は、`ego_pass_later_margin_x`と`ego_pass_later_margin_y`から
-`pass_judge`ネームスペースで、以下のパラメータが定義されています。 +`pass_judge` 名前空間では、以下のパラメータが定義されています。 -| パラメーター | | 型 | 説明 | -| ---------------------------------- | ----- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `ego_pass_first_margin_x` | [[s]] | double | ego_pass_first状況のタイム・トゥ・コリジョン・マージンベクトル(モジュールは、TTC + マージン < TTV条件ではegoが停止する必要がないと判断します) | -| `ego_pass_first_margin_y` | [[s]] | double | ego_pass_first状況のタイム・トゥ・ビークル・マージンベクトル(モジュールは、TTC + マージン < TTV条件ではegoが停止する必要がないと判断します) | -| `ego_pass_first_additional_margin` | [s] | double | チャッタリングを抑止するための、ego_pass_first状況の追加タイムマージン | -| `ego_pass_later_margin_x` | [[s]] | double | オブジェクトパスファースト状況のタイム・トゥ・ビークル・マージンベクトル(モジュールは、TTV + マージン < TTC条件ではegoが停止する必要がないと判断します) | -| `ego_pass_later_margin_y` | [[s]] | double | オブジェクトパスファースト状況のタイム・トゥ・コリジョン・マージンベクトル(モジュールは、TTV + マージン < TTC条件ではegoが停止する必要がないと判断します) | -| `ego_pass_later_additional_margin` | [s] | double | チャッタリングを抑止するための、オブジェクトパスファースト状況の追加タイムマージン | +| パラメータ | | タイプ | 説明 | +| ---------------------------------- | ----- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ego_pass_first_margin_x` | [[s]] | 数値 | ego車優先通過の場合のタイムツーコリジョンマージンベクトル(モジュールはTTC + MARGIN < TTV条件の場合、ego車が停止する必要がないと判断) | +| `ego_pass_first_margin_y` | [[s]] | 数値 | ego車優先通過の場合のタイムトゥビークルマージンベクトル(モジュールはTTC + MARGIN < TTV条件の場合、ego車が停止する必要がないと判断) | +| `ego_pass_first_additional_margin` | [s] | 数値 | ego車優先通過の場合の追加タイムマージン(チャタリングを抑止) | +| `ego_pass_later_margin_x` | [[s]] | 数値 | 対向車優先通過の場合のタイムトゥビークルマージンベクトル(モジュールはTTV + MARGIN < TTC条件の場合、ego車が停止する必要がないと判断) | +| `ego_pass_later_margin_y` | [[s]] | 数値 | 対向車優先通過の場合のタイムツーコリジョンマージンベクトル(モジュールはTTV + MARGIN < TTC条件の場合、ego車が停止する必要がないと判断) | +| `ego_pass_later_additional_margin` | [s] | 数値 | 対向車優先通過の場合の追加タイムマージン(チャタリングを抑止) | -#### スムーズ歩行者譲り判定 +#### 止まれの判断を円滑に行う -歩行者が横断歩道付近で停止しており、歩行の意図がない場合、自車が歩行者に通行権を譲り続ける状況が発生することがあります。 -このようなデッドロック状態を防ぐため、自車は状況に応じて譲歩をキャンセルします。 +オブジェクトが横断歩道の近くで停止していても歩行の意思がない場合、本車両がそのオブジェクトに依然として優先権を与え続ける状況が発生することがあります。 +このようなデッドロックの状況を防ぐため、本車両は状況に応じて優先権を与えないようにします。 -横断歩道付近で停止しており、歩行の意図が(\*1)ない歩行者については、自車が一定時間(\*2)譲歩のため停車を継続した後、譲歩をキャンセルして走行を開始します。 +横断歩道の付近で停止していて歩行する意思のないオブジェクト (\*1) に対して、本車両がある特定の時間 (\*2) 優先権を譲り続けている場合、本車両は優先権を譲ることを取り消して運転を開始します。 -\*1: -時間は、物体と横断歩道間の距離を `distance_set_for_no_intention_to_walk` と `timeout_set_for_no_intention_to_walk` で補間して計算されます。 +\*1: +この時間は、オブジェクトと横断歩道との距離を補間して `distance_set_for_no_intention_to_walk` と `timeout_set_for_no_intention_to_walk` を掛け合わせて計算されます。 -`pass_judge` 名前空間では、以下のパラメータが定義されています。 +`pass_judge` 名前空間では、次のパラメーターが定義されています。 -| パラメータ | | タイプ | 説明 | -| --------------------------------------- | ----- | ------ | ------------------------------------------------------------------ | -| `distance_set_for_no_intention_to_walk` | [[m]] | double | 歩行の意思なしのタイムアウトを補間で計算するためのキーを設定します | -| `timeout_set_for_no_intention_to_walk` | [[s]] | double | 歩行の意思なしのタイムアウトを補間で計算するための値を設定します | +| パラメータ | 単位 | タイプ | 説明 | +| ------------------------------------------ | ---- | -------- | --------------------------------------------------------------------------- | +| `distance_set_for_no_intention_to_walk` | [[m]] | double | 内插した歩行意思なしのタイムアウトを計算するために設定するキー | +| `timeout_set_for_no_intention_to_walk` | [[s]] | double | 内插した歩行意思なしのタイムアウトを計算するために設定する値 | -**パス判定** +**2:** -`pass_judge`名前空間に、以下のパラメータが定義されています。 +`pass_judge` 名前空間では、次のパラメーターが定義されています。 -| パラメータ | | タイプ | 説明 | -| ---------------------------- | --- | ------ | ---------------------------------------------------------------------------------------------------------------- | -| `timeout_ego_stop_for_yield` | [s] | double | 自動運転車が停止を保持する時間がこの期間に達した場合、自動運転車は十分な時間停止したとみなし、走行を再開します。 | +| パラメータ | | 型 | 説明 | +|---|---|---|---| +| `timeout_ego_stop_for_yield` | [秒] | double | 自車が一定時間停止し続けた場合、その停止が十分な長さだったと判断して自車は前進します。 | -#### 新規オブジェクトの取り扱い +#### 新規オブジェクトの処理 -認識の限界のため、木や電柱が歩行者として認識された場合、あるいは群衆や閉塞状況により追跡が失敗した場合、周囲の環境が変わっていないにもかかわらず、新しい歩行者(= 新しいIDの歩行者)が突然出現することがあります。 -これが自車が横断歩道を通り抜けようとしているときに発生すると、自車は急停止します。 +認識の制限により、木やポールが歩行者として認識されたり、群衆や閉塞による追跡に失敗したりする場合、周囲の環境が変化していなくても、新しい歩行者(=新しい ID の歩行者)が突然現れることがあります。 +このようなことが自車が横断歩道を渡ろうとしているときに発生すると、自車は突然停止します。 -この問題に対処するために、オプション「disable_yield_for_new_stopped_object」が用意されています。 -trueを設定すると、信号機のある横断歩道の周辺における減速決定は、新しい停止オブジェクトを無視します。 +この問題に対処するために、オプション `disable_yield_for_new_stopped_object` が用意されています。 +これを true に設定すると、信号のある横断歩道周辺の譲渡の判断は新しい停止オブジェクトを無視します。 -`pass_judge`ネームスペースでは、以下のパラメータが定義されています。 +`pass_judge` ネームスペースでは、次のようなパラメーターが定義されます。 -| パラメータ | | タイプ | 説明 | -| -------------------------------------- | --- | ------ | ------------------------------------------------------------------------------ | -| `disable_yield_for_new_stopped_object` | [X] | bool | trueの場合、信号機の付いた横断歩道付近にある停止中の新しい障害物は無視されます | +| パラメータ | 既定値 | 型 | 説明 | +|---|---|---|---| +| `disable_yield_for_new_stopped_object` | [-] | ブール | trueに設定すると、信号のある横断歩道付近の新規停止オブジェクトは無視されます。 -### 歩行者横断歩道での停止防止 +### 横断歩道での停止防止 -この機能は、自車が歩行者横断歩道上で停止しないようにします。 -歩行者横断歩道の直前に低速または停止している車両があり、歩行者横断歩道と車両との間に十分なスペースがない場合、歩行者や自転車がいない場合でも、歩行者横断歩道手前で停止するようPlanningモジュールが計画します。 +この機能は、自車が横断歩道の前で停車しないようにします。 +横断歩道の前の低速または停止車両があり、かつ横断歩道と車両間のスペースが十分に確保されていない場合、横断歩道モジュールは歩行者や自転車がいない場合でも横断歩道の前で停止するよう計画します。 -`min_acc`、`min_jerk`、および`max_jerk`が満たされます。これらのパラメータを使用して自車が歩行者横断歩道手前で停止できない場合、停止位置は前進します。 +`min_acc`、`min_jerk`、および`max_jerk`が満たされている必要があります。これらのパラメータを使用して自車が横断歩道の前で停止できない場合、停止位置は前進することになります。
![stuck_vehicle_attention_range](docs/stuck_vehicle_detection.svg){width=600}
-`stuck_vehicle`名前空間で、次のパラメータが定義されます。 +`stuck_vehicle` 名前空間には、次のパラメータが定義されています。 -| パラメータ | 単位 | 型 | 説明 | -| ---------------------------------- | ------- | ------ | ---------------------------------------- | -| `stuck_vehicle_velocity` | [m/s] | double | 車両停止状態の最大速度しきい値 | -| `max_stuck_vehicle_lateral_offset` | [m] | double | 目標車両の最大横方向オフセット | -| `required_clearance` | [m] | double | 自車と前方の車両との確保するクリアランス | -| `min_acc` | [m/ss] | double | 停止するための最小加速度 | -| `min_jerk` | [m/sss] | double | 停止するための最小ジャーク | -| `max_jerk` | [m/sss] | double | 停止するための最大ジャーク | +| パラメータ名 | 単位 | 型 | 説明 +| ---------------------------------- | ------- | ------ | ----------------------------------------------------------------------- | +| `stuck_vehicle_velocity` | [m/s] | double | 対象車両の停車状態を判定するための最大速度の閾値 | +| `max_stuck_vehicle_lateral_offset` | [m] | double | 対象車両の位置における最大横方向オフセット | +| `required_clearance` | [m] | double | 自車と前方車両との間の確保すべきクリアランス | +| `min_acc` | [m/ss] | double | 停止するための最小加速度 | +| `min_jerk` | [m/sss] | double | 停止するための最小ジャーク | +| `max_jerk` | [m/sss] | double | 停止するための最大ジャーク | ### 安全減速挙動 -現在の Autoware の実装では、横断歩道の周辺にターゲット オブジェクトが検出されない場合、自車位置は横断歩道で減速しません。 -ただし、たとえば死角がある場合など、減速することも考えられます。 -この状況は、[lanelet2_format_extension.md](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) -ドキュメントの指示に従って、関連する横断歩道にタグを設定することによって処理できます。 +現在のAutoware実装では、横断歩道周辺にターゲットオブジェクトが検出されない場合、自車位置は横断歩道に向かって減速しません。 +ただし、死角があるなどの状況では減速することが望ましい場合があります。 +このような状況は、[lanelet2_format_extension.md](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) +ドキュメントで指示されているように、関連する横断歩道にいくつかのタグを設定することで処理することができます。 -| パラメーター | 単位 | タイプ | 説明 | -| --------------------- | ----- | ------ | --------------------------------------------------------------------------------- | -| `slow_velocity` | m/s | double | モジュールが FOA から減速コマンドを受信したときのターゲット車両速度 | -| `max_slow_down_jerk` | m/sss | double | 安全なブレーキのための最小ジャーク減速度 | -| `max_slow_down_accel` | m/ss | double | 安全なブレーキのための最小アクセル減速度 | -| `no_relax_velocity` | m/s | double | 現在速度が X m/s 未満の場合、エゴは常に停止位置で停止する(減速制約を緩和しない) | +| パラメーター | | タイプ | 説明 | +| --------------------- | ------- | ------ | ---------------------------------------------------------- | +| `slow_velocity` | [m/s] | double | FOAから減速コマンドを受け取った時の目標速度 | +| `max_slow_down_jerk` | [m/sss] | double | 安全なブレーキのための最小減速度 | +| `max_slow_down_accel` | [m/ss] | double | 安全なブレーキのための最小減速度 | +| `no_relax_velocity` | [m/s] | double | 現在の速度がX m/s未満の場合、自車は常に停止位置で停止します(減速制約を緩和しません)。 | -### オクルージョン +### Occlusion -この機能を有効にすると、自動運転車は遮られた横断歩道手前で減速します。 +この機能により、エゴ車両は視界を遮る横断歩道のために減速します。 -横断歩道のオクルージョンは、オキュパンシーグリッドを使用して判断されます。 -オクルージョンとは、`min_size`サイズの正方形のオクルージョンセルです(つまり、その値は`free_space_max`と`occupied_min`の間)。 -横断歩道範囲内にオクルージョンが見つかった場合、横断歩道での速度制限は`slow_down_velocity`に設定されます。(ただし、`max_slow_down_jerk`と`max_slow_down_accel`で設定された制限を超えない範囲) -この範囲は、自動運転車の走行経路と横断歩道の交点から算出され、自動運転車が横断歩道に到達するまでの時間と`occluded_object_velocity`を掛けたものになります。 -この範囲は、自動運転車が横断歩道から遠い場合は大きく、近い場合は小さくなります。 +横断歩道の遮蔽(Occlusion)は、占有グリッドを使用して決定されます。 +遮蔽とは、サイズの四角形であり、`min_size`個の遮蔽されたセルがあり (つまり、それらの値は`free_space_max`と`occupied_min`の間にある)、`min_size`のサイズです。 +横断歩道の範囲内に遮蔽が見つかった場合、横断歩道の速度制限は`slow_down_velocity`に設定されます (あるいは`max_slow_down_jerk`と`max_slow_down_accel`によって設定された制限を超えないように、より高い値に設定されます)。 +範囲は、エゴパスと横断歩道の交差点から計算され、エゴが横断歩道に到達するのにかかる時間に`occluded_object_velocity`を乗算した値になります。 +この範囲は、エゴが横断歩道から遠いときは広く、エゴが近いときは狭くなるように設定されています。 -ちらつきを伴う判断を避けるために、時間バッファを使用できます。これにより、「減速を追加する(または削除する)」という決定は、オクルージョンが`time_buffer`パラメーターで定義された連続した時間検出(または未検出)された後にのみ行われます。 +チラつきのある決定を避けるために、タイムバッファを使って減速を追加 (または削除) する決定が、`time_buffer`パラメータで定義された連続時間の間、遮蔽が検出 (または検出されない) された後でなければ行われないようにすることができます。 -横断歩道の信号が赤のときにオクルージョンを無視するには、`ignore_with_traffic_light`をtrueに設定する必要があります。 +横断歩道に信号機があるときの遮蔽を無視するには、`ignore_with_traffic_light`をtrueに設定する必要があります。 -移動中のオブジェクトによる一時的なオクルージョンを無視するには、 -`ignore_behind_predicted_objects`をtrueに設定する必要があります。 -デフォルトでは、`ignore_velocity_thresholds.default`より速度の高いオブジェクトの背後のオクルージョンは無視されます。 -この速度閾値は、パラメータリスト`ignore_velocity_thresholds.custom_labels`と`ignore_velocity_thresholds.custom_thresholds`でオブジェクトクラスのラベルと速度閾値を指定することによって、オブジェクトタイプに応じて指定できます。 -オブジェクトのマスクを膨らませるには、`extra_predicted_objects_size`を使用してフットプリントを大きくすることができます。 +移動オブジェクトによって引き起こされる一時的な遮蔽を無視するには、`ignore_behind_predicted_objects`をtrueに設定する必要があります。 +デフォルトでは、`ignore_velocity_thresholds.default`を上回る速度のオブジェクトの後ろにある遮蔽は無視されます。 +この速度しきい値は、オブジェクトのクラスラベルと速度しきい値をパラメータリスト`ignore_velocity_thresholds.custom_labels`と`ignore_velocity_thresholds.custom_thresholds`に指定することで、オブジェクトのタイプによって指定できます。 +オブジェクトの後ろのマスキングを増やすには、`extra_predicted_objects_size`を使用してそれらのフットプリントを大きくすることができます。
![stuck_vehicle_attention_range](docs/with_occlusion.svg){width=600}
-| パラメータ | 単位 | タイプ | 説明 | -| ---------------------------------------------- | ----- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------- | -| `enable` | [-] | ブール型 | trueの場合、エゴは、遮蔽されている横断歩道の周囲で減速します。 | -| `occluded_object_velocity` | [m/s] | ダブル型 | 遮蔽された空間から現れる可能性のあるオブジェクトの想定速度 | -| `slow_down_velocity` | [m/s] | ダブル型 | 減速速度 | -| `time_buffer` | [s] | ダブル型 | 減速を追加/削除するための、遮蔽あり/なしの連続時間 | -| `min_size` | [m] | ダブル型 | 遮蔽の最小サイズ(正方形の1辺の長さ) | -| `free_space_max` | [-] | ダブル型 | オキュパンシーグリッド内の空きセルの最大値 | -| `occupied_min` | [-] | ダブル型 | オキュパンシーグリッド内の占有セルの最小値 | -| `ignore_with_traffic_light` | [-] | ブール型 | trueの場合、信号機のある横断歩道の遮蔽は無視されます。 | -| `ignore_behind_predicted_objects` | [-] | ブール型 | trueの場合、予測されたオブジェクトの背後にある遮蔽は無視されます。 | -| `ignore_velocity_thresholds.default` | [m/s] | ダブル型 | 遮蔽は、速度が同じかそれよりも高いオブジェクトの背後でのみ無視されます。 | -| `ignore_velocity_thresholds.custom_labels` | [-] | 文字列リスト | 既定以外の速度しきい値を定義するラベル(すべてのラベルについては、`autoware_perception_msgs::msg::ObjectClassification`を参照してください) | -| `ignore_velocity_thresholds.custom_thresholds` | [-] | ダブルリスト | カスタムラベルの速度 | -| `extra_predicted_objects_size` | [m] | ダブル型 | 遮蔽をマスクするためにオブジェクトに追加される余分なサイズ | +| パラメータ | 単位 | タイプ | 説明 | +| ---------------------------------------------- | ----- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `enable` | [-] | bool | trueの場合、エゴは遮蔽された横断歩道の周辺で減速します | +| `occluded_object_velocity` | [m/s] | double | 遮蔽された空間から出てくる可能性がある物体の想定速度 | +| `slow_down_velocity` | [m/s] | double | 減速速度 | +| `time_buffer` | [s] | double | 閉塞あり/なしの連続時間を使用して減速を追加/削除します | +| `min_size` | [m] | double | 遮蔽物の最小サイズ(正方形の幅) | +| `free_space_max` | [-] | double | 占有グリッド内の自由空間セルの最大値 | +| `occupied_min` | [-] | double | 占有グリッド内の占有セルの最小値 | +| `ignore_with_traffic_light` | [-] | bool | trueの場合、信号機付きの横断歩道での遮蔽は無視されます | +| `ignore_behind_predicted_objects` | [-] | bool | trueの場合、予測された物体の背後にある遮蔽は無視されます | +| `ignore_velocity_thresholds.default` | [m/s] | double | 遮蔽は、より高い速度または同じ速度の物体のみの背後で無視されます | +| `ignore_velocity_thresholds.custom_labels` | [-] | 文字列リスト | 非デフォルトの速度しきい値を定義するラベル(すべてのラベルについては、`autoware_perception_msgs::msg::ObjectClassification`を参照) | +| `ignore_velocity_thresholds.custom_thresholds` | [-] | doubleリスト | カスタムラベルの速度 | +| `extra_predicted_objects_size` | [m] | double | オブジェクトの追加サイズで、遮蔽をマスクします | ### その他 -`common` 名前空間では、以下のパラメータが定義されています。 +`common` 名前空間で、以下のようなパラメータが定義されています。 -| パラメータ | ユニット | 種類 | 説明 | -| ----------------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `show_processing_time` | [-] | ブール値 | 処理時間を表示するかどうか | -| `traffic_light_state_timeout` | [s] | double | 信号のタイムアウトしきい値 | -| `enable_rtc` | [-] | ブール値 | true の場合、シーンモジュールは (rtc 関数の協力を要求して) rtc によって承認される必要があります。false の場合、モジュールは rtc から承認なしに実行できます。 | +| パラメーター | 単位 | タイプ | 説明 | +| ----------------------------- | ---- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| `show_processing_time` | [-] | bool | 処理時間を表示するかどうか | +| `traffic_light_state_timeout` | [s] | double | 信号機信号のタイムアウト閾値 | +| `enable_rtc` | [-] | bool | trueの場合、シーンモジュールはrtc機能によって承認される必要がある。falseの場合、モジュールはrtcの承認なしで実行できる。 | -## 既知の問題 +## 問題がわかっている場合 -- ケースによっては譲歩の決定が積極的または消極的になることがあります。 - - 主な理由は、横断歩道モジュールが車両の将来の位置を知らないことです。車両の正確な位置は、すべての計画の後で決定されます。 - - 現在、このモジュールは車両が一定の速度で移動すると想定しています。 +- ケースによって譲歩する判断がアグレッシブまたはコンサバティブになることがあります。 + - 主な理由は、crosswalkモジュールは将来の自己位置を知らないことです。詳細な自己位置はプランニング全体の後で決定されます。 + - 現在、モジュールは自己が一定の速度で移動すると仮定しています。 ## デバッグ -### デバッグマーカーの可視化 +### デバッグマーカーのビジュアライゼーション `/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/crosswalk` は、次のマーカーを表示します。
- ![ limitation](docs/debug_markers.png){width=1000} + ![limitation](docs/debug_markers.png){width=1000}
- 黄色い多角形 - - 衝突チェックを計算するための車両フットプリントの多角形。 + - 衝突チェックを計算するための自己フットプリントの多角形。 - ピンクの多角形 - - 衝突チェックを計算するためのオブジェクトフットプリントの多角形。 + - 衝突チェックを計算するための物体のフットプリントの多角形。 - 横断歩道の色 - - 信号の色を考慮して、赤はターゲットの横断歩道を、白は無視される横断歩道を示します。 + - 信号の色を考慮すると、赤はターゲット横断歩道を示し、白は無視する横断歩道を示します。 - テキスト - - モジュールID、TTC、TTV、およびモジュールの状態を示します。 + - モジュールID、TTC、TTV、およびモジュール状態を表示します。 + +### 時間最短衝突のビジュアライゼーション -### 衝突時間(TTC)の可視化 ```sh ros2 run autoware_behavior_velocity_crosswalk_module time_to_collision_plotter.py ``` -## **Troubleshooting** +自己位置と歩行者の衝突時間次図を表示できます。各プロットのラベルは ``-`` です。 -### **Behavior** +
+ ![limitation](docs/time_to_collision_plot.png){width=1000} +
+ +## トラブルシューティング -- Q. 交差点ユーザーオブジェクトがいないのに、自車位置が交差点付近で停止した - - A. [スタックビークル検出](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection)を参照してください。 -- Q. 交差点仮想ウォールが突然現れて、急停止した - - A. 自車位置が交差点の近くにいたときに、交差点ユーザーが動き始めた可能性があります。 -- Q. 歩行者信号が赤色でも、交差点モジュールが停止を決定する - - A. レーンレットマップが正しくない可能性があります。歩行者信号と交差点は関連付けられている必要があります。 -- Q. Planningシミュレーションで、交差点モジュールがすべての交差点で停止する譲渡動作を行う - - A. これは、歩行者信号が既定で不明であるためです。この場合、交差点は安全のために譲渡動作を行います。 +### 振る舞い -### **パラメータ調整** +- Q. 横断歩道に横断歩道利用者がいないのに、エゴカーが横断歩道前で停車しました。 + - A. [スタックした車両の検知](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection)を参照してください。 +- Q. 横断歩道仮壁が突然現れて、急停車になりました。 + - A. エゴカーが横断歩道近くにいたときに、横断歩道利用者が動き始めた可能性があります。 +- Q. 横断歩道信号が赤でも、横断歩道モジュールは停止を決定します。 + - A. レーンレットマップが正しくない可能性があります。横断歩道信号と横断歩道を関連付ける必要があります。 +- Q. 計画シミュレーションにおいて、横断歩道モジュールはすべての横断歩道で停止するように譲歩決定を行います。 + - A. これは、横断歩道信号が既知ではないことによります。この場合、横断歩道は安全のために譲歩決定を行います。 -- Q. 自車の譲渡動作が保守的すぎる - - A. [譲渡決定](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection)に記載されている「`ego_pass_later_margin`」を調整します。 -- Q. 自車の譲渡動作が攻撃的すぎる - - A. [譲渡決定](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection)に記載されている「`ego_pass_later_margin`」を調整します。 +### パラメーター調整 -## **参考文献/外部リンク** +- Q. エゴカーの譲歩動作が過度に保守的です。 + - A. [譲歩決定](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection)で説明されている `ego_pass_later_margin` を調整してください。 +- Q. エゴカーの譲歩動作が過度に積極的です。 + - A. [譲歩決定](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection)で説明されている `ego_pass_later_margin` を調整してください。 + +## リファレンス/外部リンク [1] 佐藤 みなみ, 早坂 祥一, 清水 政行, 村野 隆彦, 横断歩行者に対するドライバのリスク回避行動のモデル化, 自動車技術会論文集, 2013, 44 巻, 3 号, p. 931-936. + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md index 8f0c9ebda5f90..b30c8c4390641 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/README.md @@ -1,38 +1,39 @@ -## 検知領域 +## 検出エリア ### 役割 -地図上に定義された検知領域で点群が検知された場合、設定された地点で停止するプランニングが実行されます。 +マップ上に定義された検出エリアで点群が検出された場合、あらかじめ設定された地点で停止計画が実行されます。 ![brief](./docs/detection_area.svg) -### 稼働タイミング +### 起動タイミング -このモジュールは、対象レーン上に検知領域が存在する場合に稼働します。 +このモジュールは、対象車線上に検出エリアがある場合に起動されます。 -### モジュールパラメータ +### モジュールのパラメータ -| パラメータ | 型 | 説明 | -| ----------------------------------- | ------ | ------------------------------------------------------------------------------------ | -| `use_dead_line` | 論理型 | [-] デッドラインを使用するかどうか | -| `use_pass_judge_line` | 論理型 | [-] 通過判定ラインを使用するかどうか | -| `state_clear_time` | double | [s] オブジェクトが一定時間検出されず、車両が停止している場合、STOPPED 状態に遷移する | -| `stop_margin` | double | [m] 車両が停止線前に停止しようとするマージン | -| `dead_line_margin` | double | [m] 後続車が自車と衝突するかどうかを無視するしきい値 | -| `hold_stop_margin_distance` | double | [m] 再始動防止のための設定 (アルゴリズム セクションを参照) | -| `distance_to_judge_over_stop_line` | double | [m] 停止線を越えたことを判定するためのパラメータ | -| `suppress_pass_judge_when_stopping` | 論理型 | [m] 停止時に通過判定を抑制するためのパラメータ | +| パラメータ | タイプ | 説明 | +|---|---|---| +| `use_dead_line` | bool | [-] デッドラインを使用するかどうか | +| `use_pass_judge_line` | bool | [-] パスジャッジラインを使用するかどうか | +| `state_clear_time` | double | [s] 車両が特定の時間に停止し、障害物が存在しない場合、STOPPED 状態に移行 | +| `stop_margin` | double | [m] 車両が停止線手前で停止しようとするマージン | +| `dead_line_margin` | double | [m] 走行車両が自車に衝突するかどうかを無視するしきい値 | +| `hold_stop_margin_distance` | double | [m] 再始動防止のパラメータ(アルゴリズムのセクションを参照) | +| `distance_to_judge_over_stop_line` | double | [m] 停止線を越えたと判断するパラメータ | +| `suppress_pass_judge_when_stopping` | bool | [m] 停止時のパスジャッジを抑制するパラメータ | -### 内部動作/アルゴリズム +### 内部構成 / アルゴリズム -1. マップ情報から検出領域と停止線を取得し、検出領域に点群があることを確認する -2. 停止線から前方 l[m] に停止点を挿入する -3. 車両が最大減速度で停止可能な点に通過判定点を挿入する -4. 自車位置が通過判定点前方にいる場合、停止線後方に速度をゼロに設定する -5. 自車位置が通過判定点をすでに通過している場合、停止せずに通過する +1. 地図情報から検出エリアと停止線を取得し、検出エリアに点群があることを確認する +2. 停止線の前に停止地点 l[m] を挿入する +3. 車両が最大減速度で停止できる地点に通過判断地点を挿入する +4. 自車が通過判断地点の前にある場合、停止線の後ろの速度を 0 に設定する +5. 自車がすでに通過判断地点を通過している場合は、停止せずに通過する。 #### フローチャート + ```plantuml @startuml title modifyPathVelocity @@ -95,21 +96,22 @@ stop #### 再始動防止 -車両制御性能が低いため、動き始めたら0.5メートルなどの距離(Xメートル)が必要な場合、車両は停止地点を超えて進み、停止寸前の地点(例:0.3メートル先)に近づくため、厳守する必要があります。 +車両の制御性能が低い場合、車両の始動から停止までXメートル(例:0.5メートル)が必要になる場合、車両は停止位置を超過してしまい、停車位置付近(例:0.3メートル離れている)に近づくために厳守する必要があります。 -このモジュールには、このような重複する再始動を防ぐためのパラメーター「hold_stop_margin_distance」があります。車両がモジュール停止位置(\_front_to_stop_line < hold_stop_margin_distance)から「hold_stop_margin_distance」メートル以内で停止した場合、車両はモジュールの停止位置で停止していると判断し、車両が他の要因で停止した場合でも現在の位置で停止を続けることを計画します。 +このモジュールには、これらの余分な再始動を防ぐためのパラメータ`hold_stop_margin_distance`があります。車両がモジュールの停止位置から`hold_stop_margin_distance`メートル以内(\_front_to_stop_line < hold_stop_margin_distance)で停止している場合、モジュールは車両がすでにモジュールの停止位置で停止していると判断し、車両が他の要因で停止している場合でも現在の位置で停止し続けます。
- ![例](restart_prevention.svg){width=1000} -
パラメーター
+ ![example](restart_prevention.svg){width=1000} +
パラメータ
- ![例](restart.svg){width=1000} + ![example](restart.svg){width=1000}
hold_stop_margin_distanceの外側
- ![例](keep_stopping.svg){width=1000} + ![example](keep_stopping.svg){width=1000}
hold_stop_margin_distanceの内側
+ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md index 3ff34dc6d8c21..26efac5735972 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/README.md @@ -1,124 +1,125 @@ -## 交差点 +# 交差点 -### 役割 +## 役割 -交差点モジュールは、以下の方法により都市部の交差点を安全に通過する責任を負っています。 +交差点モジュールは、以下の方法で都市の交差点を安全に通過する役割を担っています。 -1. 前方の車両との衝突を確認する -2. 交差点内の隠れたエリアを認識する -3. 関連する信号機の各色/形状に対応する +1. 前方車両との衝突チェック +2. 交差点で遮蔽されている領域の認識 +3. 関連する信号機の各色/形状への対応 -このモジュールは左ハンドル/右ハンドルの交通規則に依存せず、十字路、T字路などで動作するように設計されています。このモジュールではラウンドアバウトは正式にサポートされていません。 +このモジュールは、左/右通行ルールに依存せず、十字路、丁字路などに適用できるように設計されています。ラウンドアバウトはこのモジュールでは正式にサポートされていません。 ![topology](./docs/intersection-topology.drawio.svg) -### アクティブ条件 +## 起動条件 -このモジュールは、パスに `turn_direction` タグを持つレーンが含まれる場合にアクティブになります。より正確には、パスの `lane_ids` がこれらのレーンの `id` を含む場合、対応する交差点モジュールのインスタンスがそれぞれレーンごとにアクティブになります。 +このモジュールは、パスに turn_direction タグを持つレーンが含まれている場合に起動します。正確には、パスの lane_ids にこれらのレーンの ID が含まれている場合、対応する各レーンの intersection モジュールのインスタンスが起動します。 -### 要件/制限事項 +## 要件/制限事項 -- HDマップには、交差点内のすべてのレーンに関する `turn_direction` タグ(`straight`、`left`、`right` のいずれか)の情報と、特定のレーンに関する `right_of_way` タグ(詳細については [RightOfWay](#how-towhy-set-rightofway-tag) セクションを参照)が必要です。詳細については、[autoware_lanelet2_extension ドキュメント](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) を参照してください。 -- WIP(認識要件/制限事項) -- WIP(センサー視認性の要件/制限事項) +- HDMap には、すべての交差点のレーンに関する turn_direction タグ(straight、left、right のいずれか)と、特定のレーンに関する right_of_way タグの情報が必要です(詳細については [RightOfWay](#how-towhy-set-rightofway-tag) セクションを参照)。詳細については [autoware_lanelet2_extension ドキュメント](https://github.com/autowarefoundation/autoware_lanelet2_extension/blob/main/autoware_lanelet2_extension/docs/lanelet2_format_extension.md) を参照してください。 +- WIP(認識の要件/制限事項) +- WIP(センサーの可視性の要件/制限事項) -### 注視領域 +## 注目領域 -交差点内の注視領域は、エゴパスと競合するレーンとその先行する最大 `common.attention_area_length` メートルのレーンとして定義されます。既定では `RightOfWay` タグが設定されていないため、注視領域は最初の行に示すように、すべての競合するレーンとその先行するレーンをカバーします。`RightOfWay` タグは、信号機の関係と `turn_direction` の優先順位に基づいて各レーンが優先権を持つレーンを除外するために使用されます。2 行目では、紫色のレーンは `RightOfWay` タグ内のエゴレーンの `yield_lane` として設定されています。 +交差点内の注目領域は、自己位置のパスと衝突するレーンとその先行レーン(最大 'common.attention_area_length' メートルまで)の集合として定義されます。デフォルトでは RightOfWay タグは設定されていないため、注目領域は最初の行のようにすべての衝突するレーンとその先行レーンをカバーします。RightOfWay タグは、信号機との関係と turn_direction の優先順位を与えられた優先レーンを除外するために使用されます。2 行目では、紫のレーンが RightOfWay タグで自己位置のレーンの yield_lane として設定されています。 ![attention_area](./docs/intersection-attention.drawio.svg) -HDマップ上に定義されている `intersection_area` は、交差点全体を変換する領域です。 +HDMap 上で定義される intersection_area は、交差点全体を含んだ領域です。 -### 同相/逆相信号群 +### 同相信号群/逆相信号群 -「同相信号群」と「逆相信号群」という用語は、次図に示すように、信号機規制のタイミングによってレーンを区別するために導入されました。 +「同相信号群」と「逆相信号群」という用語は、信号機のタイミングによるレーンの区別を導入したものです。以下に示します。 ![phase signal group](./docs/signal-phase-group.drawio.svg) -レーン L1 と色が同期している交差点レーン群を L1 の同相信号群と呼び、残りのレーン群を逆相信号群と呼びます。 +L1 レーンの色と同期している交差点レーンの集合は、L1 の同相信号群と呼ばれ、残りのレーンの集合は逆相信号群と呼ばれます。 ### RightOfWay タグの設定方法/理由 -理想的には、エゴがすべての信号情報に完全にアクセスできる場合、RightOfWay タグは不要です。なぜなら: +理想的には、自己位置がすべての信号機情報について完全な知識を持っている場合は RightOfWay タグは不要です。その理由は以下のとおりです。 -- 現在 GREEN であるためにチェックする必要がある競合レーンと、そのレーン上の車両との衝突が発生する可能性があります。 -- 現在 RED であるために無視できる競合レーンと、そのレーン上の車両との衝突は、交通規則に違反しない限り発生しません。 +- 現在 GREEN であり自己位置との衝突が発生する可能性がある車両を保持しているので、どの衝突レーンをチェックする必要があるかを区別することができます。 +- 現在 RED であり、それらのレーン上の車両が交通ルールに違反しない限り衝突の可能性がないため、どの衝突レーンを無視できるかを区別することができます。 -これにより、エゴはリアルタイムの信号情報を使用して注視領域を動的に生成できます。ただし、この理想的な条件は、信号情報がインフラストラクチャを介して提供されない限り、ほとんど満たされません。また、複数のレーンが複雑に重なる非常に複雑で悪い交差点のマップがある可能性があります。 +これにより、自己位置はリアルタイムの信号機情報を使用して動的に注目領域を生成できます。ただし、この理想的な状態は、信号機情報がインフラストラクチャを通じて提供されない限り、ほとんど満たされません。また、複数のレーンが複雑に重なる非常に複雑/劣悪な交差点マップがある場合があります。 -- 完全な信号機信号に完璧にアクセスできる場合は、`common.use_map_right_of_way` を false に設定できます。RightOfWay タグをマップ上に設定する必要はありません。交差点モジュールは、信号機と対応する競合レーンを確認して注視領域を生成します。この機能はまだ実装されていません。 -- 信号情報が完璧でない場合は、`common.use_map_right_of_way` を true に設定します。逆相信号群レーンの車両を検出しない場合は、それらをエゴレーンの `yield_lane` として設定します。 -- 信号がなくても、交差点レーンが醜い方法で重なっている場合は、RightOfWay タグを設定する必要がある場合があります。たとえば、同じ同相群の隣接する交差点レーンが境界線を共有せず、少し重なっている場合は、そのような無関係なレーンで不必要に停止しないようにお互いに RightOfWay を設定する必要がある場合があります。 +- 完全な信号機信号に完全にアクセスできる場合は、common.use_map_right_of_way を false に設定でき、マップで RightOfWay タグを設定する必要はありません。交差点モジュールは、信号機とその衝突レーンを確認して注目領域を生成します。この機能はまだ実装されていません。 +- 信号機情報が完全でない場合は、common.use_map_right_of_way を true に設定します。逆相信号群レーンの車両を検出しない場合は、それらを自己位置のレーンの yield_lane として設定します。 +- 信号機がなくても、交差点のレーンが醜い方法で重なっている場合は、RightOfWay タグを設定する必要があります。たとえば、同じ同相グループの隣接する交差点レーンが境界線を共有せず、少し重なっている場合は、そのような無関係なレーン上の車両に対する不要な停止を回避するために、RightOfWay をお互いに設定する必要がある場合があります。 -交差点モジュールが限られたレーンのセットのみを処理できるようにするには、RightOfWay タグを適切に設定する必要があります。 +交差点モジュールを限られたレーンのみを処理するようにするには、RightOfWay タグを適切に設定する必要があります。 -次の表は、**例**として、信号のない交差点の各レーンに `yield_lane` を設定する方法を示しています。幾何学的/トポロジ的な方法で交差点レーンのセットの一意の信号位相グループを決定する方法は明らかでないため、`yield_lane` を手動で設定する必要があります。信号機のある直進レーンは、通常他のすべてのレーンよりも優先順位が高いため、レーンの検出がされないように特別に処理されます。したがって、RightOfWay の設定は必要ありません。 +次の表は、信号機のない交差点の各レーンに yield_lane を設定する方法の**例**を示しています。幾何学的/トポロジカルな方法で交差点レーンの信号機フェーズグループを一意に決定する方法が明確ではないため、yield_lane は手動で設定する必要があります。信号機のある直進レーンは、通常他のすべてのレーンよりも優先されるため、特別にレーンがないように処理され、RightOfWay 設定は不要です。 -| 進路と優先道路の関係 | 交差点での減速車線(信号有り) | 交差点での減速車線(信号無し) | -| -------------------- | -------------------------------------------------------- | ------------------------------ | -| 直進 | 減速車線を設定する必要はない(このケースは特殊) | 同相車の対向車線 | -| 左折(左ハンドル車) | 反相車の対抗車線と対向車線の同相車の右側から対抗する車線 | 同相車の対向車線の右側の車線 | -| 右折(左ハンドル車) | 反相車の対抗車線 | 減速車線を設定しない | -| 左折(右ハンドル車) | 反相車の対抗車線 | 減速車線を設定しない | -| 右折(右ハンドル車) | 反相車の対抗車線と対向車線の同相車の右側から対抗する車線 | 同相車の対向車線の左側の車線 | +| 右優先方向 | 譲歩レーン(信号機あり) | 譲歩レーン(信号機なし) | +| ------------------------------ | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | +| 直進 | 譲歩レーンを設定する必要なし(このケースは特殊) | 同相グループ内で衝突する左/右の車線 | +| 左折(左ハンドル交通) | 対抗相グループのすべての競合車線、および同相グループの右競合車線 | 同相グループの右競合車線 | +| 右折(左ハンドル交通) | 対抗相グループのすべての競合車線 | 譲歩レーンなし | +| 左折(右ハンドル交通) | 対抗相グループのすべての競合車線 | 譲歩レーンなし | +| 右折(右ハンドル交通) | 対抗相グループのすべての競合車線、および同相グループの右競合車線 | 同相グループの左競合車線 | -この設定は、次の `attention_area` 設定を提供します。 +この設定は次の `attention_area` コンフィギュレーションを作成します。 ![attention_area_straight](./docs/intersection-attention-straight.drawio.svg) ![attention_area_ll_rr](./docs/intersection-attention-ll-rr.drawio.svg) ![attention_area_lr_rl](./docs/intersection-attention-lr-rl.drawio.svg) -以下のように示される複雑/不良な交差点のマップの場合、追加の RightOfWay 設定が必要になる場合があります。 +下記のように複雑で悪い交差点マップでは、追加的な RightOfWay 設定が必要になる場合があります。 ![bad-map](./docs/ugly-intersection.drawio.svg) -不良な点は次のとおりです。 +悪い点は次のとおりです。 -1. ego 車線は同期グループの隣接車線と重複しています。この場合、他に注意領域が先行車線にも生成され、望ましくない停止が発生する可能性があるため、この車線を yield_lane として追加で設定する必要があります。 -2. ego 車線は無関係な車線と重複しています。この場合、理論的には右折専用車線であり、衝突の可能性はありません。ただし、(1) と同じ理由でこの車線を yield_lane として追加設定する必要があります。 +1. 自車線は、同一相グループの隣接車線と重複しています。この場合、この車線を yield_lane に追加的に設定する必要があります。そうでないと、その先行車線にも attention area が生成され、不要な停止を引き起こす可能性があります。 +2. 自車線は無関係な車線と重複しています。この場合、車線は右折専用であり、理論的には衝突の可能性はありません。しかし、(1) と同じ理由で、このレーンを yield_lane に追加的に設定する必要があります。 -## 停止線 +## 可能な停止線 -次の図は、交差点モジュールで使用される重要な位置を示しています。各実線は ego 車両のフロントラインの位置を表し、対応するドットは車両フレームの実際の挿入停止点の位置、つまり後輪の中心を表しています。 +次の図は交差点モジュールで使用される重要な位置を示しています。各実線は自車最前面位置を表し、対応する点は車両フレームの実際の挿入停止点位置、すなわち後輪の中心です。 ![data structure](./docs/intersection-stoplines.drawio.svg) -停止位置を正確に計算するために、経路は `common.path_interpolation_ds` の特定の間隔で補間されます。 +停止位置を正確に計算するために、パスは `common.path_interpolation_ds` の特定間隔で補間されます。 -- closest_idx は、ego 位置に最も近い経路ポイントインデックスを示します。 -- first_attention_stopline は、ego フットプリントが attention_area と交差する最初の経路ポイントを示します。 -- 停止線がマップ上の交差点車線に関連付けられている場合、その線は衝突検出用の default_stopline として使用されます。そうでない場合、first_attention_stopline の `common.default_stopline_margin` メートル後ろの点が代わりに default_stopline として定義されます。 -- occlusion_peeking_stopline は、後で説明するように、first_attention_stopline より少し先です。 -- occlusion_wo_tl_pass_judge_line は、ego フットプリントが最初の attention_area 車線のセンターラインと交差する最初の位置です。 +- closest_idx は自車位置に最も近いパス点インデックスを表します。 +- first_attention_stopline は、自車のフットプリントが attention_area と交差する最初のパス点です。 +- 停止線がマップ上の交差点レーンに関連付けられている場合は、その線が衝突検出の default_stopline として使用されます。それ以外の場合、first_attention_stopline の `common.default_stopline_margin` メートル後方の点が default_stopline として定義されます。 +- occlusion_peeking_stopline は、後で説明するように、first_attention_stopline より少し前です。 +- occlusion_wo_tl_pass_judge_line は、自車のフットプリントが最初の attention_area レーンのセンターラインと交差する最初の位置です。 ## 標的オブジェクト -[立ち往生車両の検出](#stuck-vehicle-detection) と [衝突検出](#collision-detection) の場合、このモジュールは **乗用車**、**バス**、**トラック**、**トレーラー**、**モーターサイクル**、**自転車** タイプのオブジェクトを確認します。 +[停車車両の検出](#stuck-vehicle-detection)と[衝突の検出](#collision-detection)に対して、このモジュールは**乗用車、バス、トラック、トレーラー、オートバイ、自転車**タイプのオブジェクトをチェックします。 -次の条件をすべて満たすオブジェクトは、標的オブジェクト(衝突の可能性のあるオブジェクト)と見なされます。 +次の条件をすべて満たすオブジェクトは、ターゲットオブジェクト(衝突の可能性のあるオブジェクト)とみなされます。 -- オブジェクトの中心は注目車線から **一定の距離以内** にある (しきい値 = `common.attention_area_margin`)。 - - (オプションの条件) オブジェクトの中心が **交差点エリア** にある。 - - 交差点内の車線でカバーされていない領域にあるオブジェクトを処理するため。 -- オブジェクトの姿勢は **注目車線と同じ方向** である (しきい値 = `common.attention_area_angle_threshold`)。 -- ego の **隣接車線にいない**。 +- オブジェクトの中心が**特定の距離以内**にアテンションレーンからある(閾値 = `common.attention_area_margin`)。 + - (オプションの条件)オブジェクトの中心が**交差点エリア内**にある。 + - インターセクションのレーンの範囲から外れているエリア内のオブジェクトに対処します。 +- オブジェクトの姿勢が**アテンションレーンと同じ方向**(閾値 = `common.attention_area_angle_threshold`)。 +- 自車の**隣接車線にない**。 ## 意思決定プロセスの概要 -シーンに応じて、いくつかの動作があります。 +シーンに応じていくつかの動作があります。 + +| 行動 | シーン | アクション | +| ------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| 安全 | 自車が遮蔽物や衝突を検出していない | 自車が交差点を通過 | +| 停止 | 交差点の出口が渋滞によって塞がれている | 自車が交差点または注意領域の境界線の前で停止 | +| 進路妨害による停止 | 別の車両が自車に道を譲るために停止している | 自車が交差点または注意領域の境界線の前で停止 | +| 遮蔽物なしの衝突停止 | 自車は遮蔽物はないと検出するが、衝突を検出する | 自車がデフォルト停止線で停止 | +| オクルージョン前の一時停止 | 自車が交差点進入時に遮蔽物を検出する | 自車が最初にデフォルト停止線で停止 | +| オクルージョンに近づいて覗く | 自車は遮蔽物を検出し、FOV内には衝突を検出していない (OcclusionBeforeOcclusionの後) | 自車が注意領域の境界線にゆっくり接近 | +| オクルージョン下衝突停止 | 自車は遮蔽物と衝突の両方を検出する (OcclusionBeforeOcclusionの後) | 自車が直ちに停止 | +| 完全優先 | 自車が信号によって完全に優先されている | 自車は交差点内を走行している車両のみを考慮。遮蔽物は無視 | +| 優先通行線上にいる | 自車がすでに注意領域内あるいは注意領域の境界線の前にある | 自車は衝突/遮蔽物検出せずに交差点を通過 | -| 挙動 | シーン | アクション | -| -------------------- | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | -| 安全 | 自車が遮蔽と衝突を検出しない | 自車が交差点を通過する | -| 停止維持 | 交差点の出口が渋滞によって塞がれている | 自車が交差点または注意領域の境界手前で停止する | -| 譲歩による停止 | 他の車両が自車に道を譲るために停車する | 自車が交差点または注意領域の境界手前で停止する | -| 遮蔽なし衝突停止 | 自車が遮蔽を検出しないが衝突を検出する | 自車がデフォルトの停止線で停止する | -| 遮蔽範囲前に待機する | 交差点への進入時に自車が遮蔽を検出する | 自車が最初にデフォルトの停止線で停止する | -| 遮蔽のほうを伺う | 自車が遮蔽を検出し、視野内では衝突を検出しない(遮蔽範囲前に待機した後) | 自車が注意領域の境界にゆっくりと接近する | -| 遮蔽により衝突停止 | 自車が遮蔽と衝突の両方を検出する(遮蔽範囲前に待機した後) | 自車が直ちに停止する | -| 完全優先 | 自車が赤/矢印信号によって完全に優先されている | 自車は交差点内でまだ走行中の車両のみを考慮する。遮蔽は無視される | -| 通過判断線通過 | 自車がすでに注意領域内にある、または注意領域の境界手前で停止できないことを検出している | 自車は衝突/遮蔽を検出せず、交差点を通過する | ```plantuml @startuml @@ -178,164 +179,163 @@ OccludedCollisionStop --> PeekingTowardOcclusion: IF not collision detected @enduml ``` -## スタック車両検出 +## Stuck Vehicle Detection -交差点内部および交差点出口(最大 `stuck_vehicle.stuck_vehicle_detect_dist` レーン)の経路上にオブジェクトがあり、その速度がしきい値(`stuck_vehicle.stuck_vehicle_velocity_threshold`)未満の場合、オブジェクトはスタック車両とみなされます。スタック車両が存在する場合、このモジュールは他のレーンとの重複領域より手前の特定の距離(=`default_stopline_margin`)に停止線を挿入します。スタック車両検出領域は計画された経路に基づいて生成されるため、上流のモジュールが回避経路を生成している場合はスタック車両停止線は挿入されません。 +交差点内および交差点出口付近の経路に (`stuck_vehicle.stuck_vehicle_detect_dist` まで) オブジェクトが存在し、その速度がしきい値 (`stuck_vehicle.stuck_vehicle_velocity_threshold`) 未満の場合、オブジェクトはスタック車両とみなされます。スタック車両が存在する場合、このモジュールは他の車線との重複領域より手前 (つまり、`default_stopline_margin` に相当) に停止線を挿入します。スタック車両検出領域は計画された経路に基づいて生成されるため、上流モジュールが回避経路を生成した場合、スタック車両の停止線は挿入されません。 ![stuck_vehicle_detection](./docs/stuck-vehicle.drawio.svg) -## 一時停止車両検出 +## Yield Stuck Vehicle Detection -エゴパスとの交差点点と、その位置から `yield_stuck.distance_threshold` 前の位置の間の注意レーンの停止オブジェクトがある場合、オブジェクトはエゴ車両に対して一時停止していると見なされます。この場合、エゴは一時停止オブジェクトによって優先権を与えられますが、このモジュールは交差点への進入を防ぐ停止線を挿入します。このシーンは、オブジェクトがエゴに対して一時停止しているか、交差点の出口付近の横断歩道前でオブジェクトが待機しているときに発生します。 +自車経路との交差点点から `yield_stuck.distance_threshold` 手前の注目車線に停止したオブジェクトが存在する場合、オブジェクトは自車に歩行車権を与えているとみなされます。この場合、自車は歩行車権を与えるオブジェクトによって優先されますが、このモジュールは交差点への進入を防ぐために停止線を挿入します。このシーンは、オブジェクトが自車に対して歩行車権を与えているか、または交差点出口付近の横断歩道の前でオブジェクトが待機しているときに発生します。 ![yield_stuck_detection](./docs/yield-stuck.drawio.svg) -## 衝突検出 +## Collision Detection -エゴが交差点を安全に通過できるかどうかを判断するために、次の処理がターゲットオブジェクトに対して行われます。エゴが十分な余裕をもって交差点を通過できないと判断された場合、このモジュールは経路上に停止線を挿入します。 +次のプロセスは、自車が交差点を安全に通行できるかどうかを判断するために対象オブジェクトに対して実行されます。自車が交差点を十分な余裕を持って通過できないと判断された場合、このモジュールは経路上に停止線を挿入します。 -1. 予測された経路時間ステップから、オブジェクトが最初にエゴパスと交差する時間`t`を予測します。信頼度が`collision_detection.min_predicted_path_confidence`よりも大きい予測のみが使用されます。 -2. 以下のプロセスで予測された経路とエゴの予測された経路間の衝突を検出します - 1. [$t$ - `collision_detection.collision_start_margin_time`, $t$ + `collision_detection.collision_end_margin_time`]の衝突インターバルを計算します - 2. 平滑化された速度プロファイルによって取得された(時間、距離)の配列から、衝突インターバル中のエゴ通過領域を計算します。 - 3. エゴ通過領域とオブジェクトの予測パスインターバルが衝突するかどうかをチェックします -3. 衝突が検出された場合、モジュールは停止線を挿入します -4. エゴが[通過判定ライン](#通過判定ライン)を超えている場合、急ブレーキや交差点の中央での不要な停止を避けるために、衝突チェックはスキップされます +1. 予測された経路のタイムステップから、オブジェクトが最初に自車経路と交差する時刻 `t` を予測します。信頼度が `collision_detection.min_predicted_path_confidence` より大きい予測のみが使用されます。 +2. 次のプロセスで予測された経路と自車の予測された経路間の衝突を検出します。 + 1. [$t$ - `collision_detection.collision_start_margin_time`, $t$ + `collision_detection.collision_end_margin_time`] の衝突間隔を計算します。 + 2. 平滑化された速度プロファイルによって得られた (時刻、距離) の配列から、衝突間隔中の自車の通過領域を計算します。 + 3. 自車の通過領域とオブジェクトの予測された経路間隔が衝突するかどうかを確認します。 +3. 衝突が検出された場合、モジュールは停止線を挿入します。 +4. 自車が [pass_judge_line](#pass-judge-line) を通過している場合、交差点の半ばで突然のブレーキや不必要な停止を避けるために衝突チェックはスキップされます。 -パラメータ`collision_detection.collision_start_margin_time`と`collision_detection.collision_end_margin_time`は次のように解釈できます。 +パラメーター `collision_detection.collision_start_margin_time` と `collision_detection.collision_end_margin_time` は次のように解釈できます。 -- エゴがターゲットオブジェクトよりも早く交差点を通過する場合は、2つの間の時間差が`collision_detection.collision_start_margin_time`未満の場合に衝突が検出されます。 -- エゴがターゲットオブジェクトよりも遅く交差点を通過する場合は、2つの間の時間差が`collision_detection.collision_end_margin_time`未満の場合に衝突が検出されます。 +- 自車が対象オブジェクトより早く交差点を通過する場合、両者の時間差が `collision_detection.collision_start_margin_time` 未満であれば衝突が検出されます。 +- 自車が対象オブジェクトより遅く交差点を通過する場合、両者の時間差が `collision_detection.collision_end_margin_time` 未満であれば衝突が検出されます。 -衝突が検出されると、状態はすぐに「STOP」に移行します。一方、決定のチャタリングを防ぐために、セーフな判断が一定期間`collision_detection.collision_detection_hold_time`にわたって続かない限り、状態は「GO」に移行しません。 +衝突が検出された場合、状態はすぐに「STOP」に移行します。一方、衝突の判断が一定時間 `collision_detection.collision_detection_hold_time` 継続しない限り、「GO」に移行しません。これにより、判断のチャタリングを防ぎます。 + +現在、交差点モジュールは `motion_velocity_smoother` 機能を使用して、縦方向/横方向の制約下で交差点車線に沿った自車の速度プロファイルを正確に計算しています。フラグ `collision_detection.velocity_profile.use_upstream` が true の場合、元の経路の目標速度プロファイルが使用されます。それ以外の場合は、目標速度は `collision.velocity_profile.default_velocity` に設定されます。軌跡平滑化プロセスでは、自車軌道上の/自車軌道の前の目標速度が自車の現在の速度に設定されます。次に、平滑化された軌道は、現在の自車位置から経路上の各軌道点への到着時間を示す (時刻、距離) の配列に変換されます。`debug.ttc` に車線 ID を追加して実行すると、この配列を視覚化できます。 -現在、交差点モジュールは`motion_velocity_smoother`機能を使用して、縦方向/横方向の制約の下で交差点レーンに沿ったエゴの速度プロファイルを正確に計算しています。フラグ`collision_detection.velocity_profile.use_upstream`がtrueの場合、元々のパスのターゲット速度プロファイルが使用されます。そうでない場合、ターゲット速度は`collision.velocity_profile.default_velocity`に設定されます。軌跡平滑化処理では、エゴの軌跡ポイントで/その前のターゲット速度は、エゴの現在の速度に設定されます。滑らかにされた軌跡はその後、現在のエゴの位置から経路上の各軌跡ポイントへの到着時間を示す(時間、距離)の配列に変換されます。レーンIDを`debug.ttc`に追加して実行することでこの配列を視覚化できます。 ```bash ros2 run behavior_velocity_intersection_module ttc.py --lane_id ``` -![ego ttc profile](./docs/ttc.gif) - -### upstream_velocity フラグについて +## use_upstream_velocityフラグについて -一部のユースケースでは、交差点の出口付近の歩道/横断歩道モジュールにより一時停止が考慮されるため、その停止位置が交差点内にある可能性があり、進行中の車両に影響を与える可能性があるため、ego が交差点に入る前に衝突を確認する必要があります。フラグ `collision_detection.velocity_profile.use_upstream` を true に設定し、このモジュールより前に歩道/横断歩道モジュールを実行すると、ego の速度プロファイルがそれらの速度と停止位置を考慮して計算されます。 +交差点の出口周辺にある歩道/横断歩道のモジュールによる一時停止を考慮して、交差点に進入する前に自車が衝突を確認する必要があるユースケースがいくつかあります。停止位置が交差点内にある可能性があり、近づいてくる車両を妨げる可能性があるためです。フラグ`collision_detection.velocity_profile.use_upstream`をtrueに設定し、このモジュールより前に歩行者/横断歩道モジュールを実行すると、自車の速度プロファイルは歩行者の速度と停止位置を考慮して計算されます。 -下図に示すように、アップストリームモジュールが停止線を追加した場合、ego の位置プロファイルはそこには無限に残り、このため ego が [$t$ - `collision_detection.collision_start_margin_time`, $t$ + `collision_detection.collision_end_margin_time`] の間隔で交差点から出られないと判断されます。この方法では、ego の位置より先に停止線が存在する場合、無限に衝突の可能性を考慮します(実際には予測の範囲は制限されているため、衝突チェックの範囲は限定されています)。 +下記の図に示すように、アップストリームモジュールがストップラインを挿入した場合、自車の位置プロファイルは無限時間そこに留まり、自車が区間[$t$ - `collision_detection.collision_start_margin_time`, $t$ + `collision_detection.collision_end_margin_time`]の間に出口できないと判断されることになります。この方法では、自車の位置の前方にストップラインが存在する場合、無限時間衝突の可能性を考慮します(実際には予測の範囲は限定されているため、衝突確認の範囲も限定されます)。 ![upstream_velocity](./docs/upstream-velocity.drawio.svg) ## オクルージョン検出 -フラグ `occlusion.enable` が true の場合、このモジュールは `occlusion.occlusion_attention_area_length` までの注目範囲の視野 (FOV) が十分にあるかどうかを確認します。FOV が十分にクリアでない場合、ego は最初に `occlusion.temporal_stop_time_before_peeking` の間 default*stopline で短時間停止し、その後オクルージョン*ピーキング*ストップラインにゆっくりと進みます。`occlusion.creep_during_peeking.enable` が true の場合、`occlusion.creep_during_peeking.creep_velocity` がオクルージョン*ピーキング\_ストップラインまで挿入されます。そうでない場合、停止線のみが挿入されます。 +フラグ`occlusion.enable`が有効な場合、このモジュールは最大`occlusion.occlusion_attention_area_length`までの注意領域に十分な視野(FOV)があるかどうかを確認します。FOVが十分でない場合、自車は最初にdefault_stoplineで`occlusion.temporal_stop_time_before_peeking`の間短時間停止し、その後occlusion_peeking_stoplineに向かってゆっくりとクリープします。`occlusion.creep_during_peeking.enable`がtrueの場合、occlusion_peeking_stoplineまでの`occlusion.creep_during_peeking.creep_velocity`が挿入されます。そうでない場合、ストップラインのみが挿入されます。 -忍び寄っている間に衝突が検出された場合、このモジュールはすぐに ego の前に停止線を追加し、FOV が十分にクリアになると交差点\_オクルージョン壁は消えます。オクルージョンがクリアされ、衝突が検出されなかった場合、ego は交差点を通過します。 +クリープ中に衝突が検出されると、このモジュールはすぐに自車の前にストップラインを挿入し、FOVが十分にクリアになると交差点のオクルージョン壁は消えます。オクルージョンが解消され、衝突が検出されないと、自車は交差点を通過します。 -オクルージョンは、オクルージョン注目範囲(通常注目範囲と部分的に同じ)と占有グリッドマップの不明セルとの共通領域として検出されます。占有グリッドマップは `occlusion.denoise_kernel` のウィンドウサイズを使用して形態学を用いてノイズを除去されます。オクルージョン注目範囲のレーンは直線ストリングに離散化され、それらを使用して、下の図のように各セルがレーンに沿った ego パスの距離を表すグリッドを生成します。 +オクルージョンは、オクルージョン注意領域(部分的には通常の注意領域と同じ)と占有グリッドマップの不明セルの共通領域として検出されます。占有グリッドマップは`occlusion.denoise_kernel`のウィンドウサイズを使用した形態処理を使用してノイズが除去されます。オクルージョン注意領域のレーンはライン文字列に離散化され、各セルが以下に示すようにレーンに沿った自車経路からの距離を表すグリッドを生成するために使用されます。 ![occlusion_detection](./docs/occlusion_grid.drawio.svg) -最も近いオクルージョンセル値がしきい値 `occlusion.occlusion_required_clearance_distance` よりも低い場合、ego の FOV はクリアではないことを意味します。オクルージョンは、車両がオクルージョン監視停止線に近づくとクリアされると予想されます。 +最も近くのオクルージョンセルの値が閾値`occlusion.occlusion_required_clearance_distance`を下回っている場合、自車のFOVがクリアでないことを意味します。オクルージョンは、車両がオクルージョン覗き見停止線に近づくにつれて解消されることが期待されています。 -### 信号機のある交差点でのオクルージョンソースの推定 +### 交差点における信号機でのオクルージョンソース推定 -信号機のある交差点では、ego と最も近いオクルージョンセルとの間に物体があるかどうかをチェックすることで、オクルージョンの所在推定が行われます。オクルージョンが何らかの物体によって引き起こされていると推定される間 (動的にオクルージョンされる)、交差点\_ウォールは常に表示されます。ego と最も近いオクルージョンセルとの間に物体が見つからない場合(静的にオクルージョンされる)、ego は `occlusion.static_occlusion_with_traffic_light_timeout` の期間と `occlusion.occlusion_detection_hold_time` の期間停止した後、意図的にオクルージョンを無視してスタックを回避します。 +信号機のある交差点では、自車と最も近いオクルージョンセルの間に物体があるかどうかを確認することでオクルージョンの所在を推定します。オクルージョンが何らかの物体(動的にオクルージョン)によって引き起こされると推定されている間、交差点の壁は常に表示されます。自車と最も近いオクルージョンセルの間に物体がない場合(静的にオクルージョン)、自車が`occlusion.static_occlusion_with_traffic_light_timeout`の期間 плюс`occlusion.occlusion_detection_hold_time`停止した後、スタックを避けるために意図的にオクルージョンは無視されます。 -残り時間は交差点\_オクルージョン仮想ウォールに視覚化されます。 +残りの時間は交差点のオクルージョン仮想壁に視覚化されます。 ![static-occlusion-timeout](./docs/static-occlusion-timeout.png) ### 信号機のない交差点でのオクルージョン処理 -信号機のない交差点でオクルージョンが検出された場合、ego は default_stopline と first_attention_stopline でそれぞれ短時間停止します。first_attention_area_stopline で停止した後、このモジュールはオクルージョンがクリアされない間、ego と occlusion_wo_tl_pass_judge_line の間に `occlusion.absence_traffic_light.creep_velocity` の速度を挿入します。衝突が検出された場合、ego はすぐに停止します。オクルージョンがクリアされたか、ego が occlusion_wo_tl_pass_judge_line を通過すると、ego のフットプリントはすでに交差点内にあるため、このモジュールは衝突やオクルージョンを検出しません。 +信号のない交差点では、オクルージョンが検出されると、自車はdefault_stoplineとfirst_attention_stoplineでそれぞれ短時間停止します。first_attention_area_stoplineで停止した後、このモジュールはオクルージョンが解消されない限り、自車とocclusion_wo_tl_pass_judge_lineの間に`occlusion.absence_traffic_light.creep_velocity`の速度を挿入します。衝突が検出されると、自車はすぐに停止します。オクルージョンが解消されたか、自車がocclusion_wo_tl_pass_judge_lineを通過すると、自車のフットプリントはすでに交差点内にあるため、このモジュールは衝突やオクルージョンを検出しません。 ![occlusion_detection](./docs/occlusion-without-tl.drawio.svg) -ego が進んでいる間、黄色の交差点\_ウォールが ego の前に表示されます。 +自車がクリープしている間、自車の前に黄色の交差点の壁が表示されます。 ![occlusion-wo-tl-creeping](./docs/occlusion-wo-tl-creeping.png) -## 交通信号固有の挙動 +## 交通信号機特異的挙動 ### 衝突検出 -TTC パラメータは信号機の色や形状によって次のように変化します。 +TTCパラメータは次のとおり、信号機の色の形状によって異なります。 -| 交通信号色 | ttc(開始) | ttc(終了) | -| ----------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| GREEN | `collision_detection.not_prioritized.collision_start_margin` | `collision_detection.not_prioritized.collision_end_margin` | -| AMBER | `collision_detection.partially_prioritized.collision_start_end_margin` | `collision_detection.partially_prioritized.collision_start_end_margin` | -| RED / Arrow | `collision_detection.fully_prioritized.collision_start_end_margin` | `collision_detection.fully_prioritized.collision_start_end_margin` | +| 信号色 | ttc(開始) | ttc(終了) | +|---|---|---| +| 緑 | `collision_detection.not_prioritized.collision_start_margin` | `collision_detection.not_prioritized.collision_end_margin` | +| 黄 | `collision_detection.partially_prioritized.collision_start_end_margin` | `collision_detection.partially_prioritized.collision_start_end_margin` | +| 赤 / 矢印 | `collision_detection.fully_prioritized.collision_start_end_margin` | `collision_detection.fully_prioritized.collision_start_end_margin` | -### グリーンスロー中での譲り +### yield on GREEN -信号がグリーンに変化し、自分車が交差点レーン入り口に `collision_detection.yield_on_green_traffic_light.distance_to_assigned_lanelet_start` 以内で接近し、ストップラインまでの距離が `collision_detection.yield_on_green_traffic_light.object_dist_to_stopline` 未満のオブジェクトがある場合、このモジュールはデフォルト・ストップラインに `collision_detection.yield_on_green_traffic_light.duration` 間停止することを指示します。 +信号がGREENに変わった場合、自車位置のintersection laneの入口が`collision_detection.yield_on_green_traffic_light.distance_to_assigned_lanelet_start`の距離に達していて、かつそのstoplineからの距離が`collision_detection.yield_on_green_traffic_light.object_dist_to_stopline`未満のオブジェクトがある場合、このモジュールはdefault_stoplineで`collision_detection.yield_on_green_traffic_light.duration`分の停止を指示します。 -### アンバー中でのスキップ +### skip on AMBER -信号がアンバーですが、オブジェクトが `collision_detection.ignore_on_amber_traffic_light.object_expected_deceleration` の減速度でストップラインより手前で停止すると予想される場合、衝突チェックはスキップされます。 +信号がAMBERの場合、オブジェクトが減速率`collision_detection.ignore_on_amber_traffic_light.object_expected_deceleration`未満でstopline手前で停止すると予想される場合、衝突判定はスキップされます。 -### レッド中でのスキップ +### skip on RED -信号がレッドまたは矢印信号が点灯している場合、自分車レーンと交差しない注意レーンは検出に使用されません。さらに、オブジェクトがストップラインからある程度オーバーシュートして停止する場合でも、`collision_detection.ignore_on_amber_traffic_light.object_expected_deceleration` の減速度で予想される停止位置が衝突地点から `collision_detection.ignore_on_red_traffic_light.object_margin_to_path` 以上の距離にある場合、そのオブジェクトは無視されます。 +信号がREDの場合、または矢印信号が点灯している場合、自車線と交差しない注意レーンは検出に使用されません。また、オブジェクトがstoplineから多少オーバーシュートして停止しても、減速率`collision_detection.ignore_on_amber_traffic_light.object_expected_deceleration`で期待される停止位置が衝突ポイントから`collision_detection.ignore_on_red_traffic_light.object_margin_to_path`以上の距離にある場合、そのオブジェクトは無視されます。 -### オクルージョン検出 +### ocultarion detection -信号の色/形状がレッド/矢印の場合、オクルージョン検出はスキップされます。 +信号の色/形状がRED/Arrowの場合、occlusion detectionはスキップされます。 ![traffic-light-specific-behavior](./docs/traffic-light-specific-behavior.drawio.svg) -## パス判定線 +## Pass Judge Line -一般的に、交差点内の無保護領域の真ん中に交通優先順位の低い車両が停車することは許容されず、衝突の危険がある場合はその前に停止する必要があります。これにより次の2つの要件が生じます。 +一般的に、優先順位の低い車両が交差点の無保護領域の中央で停止することは認められません。衝突のリスクがある場合には、事前にstop lineで停止する必要があります。これには2つの要件があります。 -1. 車両は、停止する場合、少なくとも制動距離分、無保護領域の境界線より手前でブレーキを開始する必要がある -2. 車両は、走行する場合、十分な制動距離マージンで先行車両を認識し、安全性を事前に確認する必要がある -3. そして、安全の判断は絶対に確実であり、将来の予測期間にわたって有効である必要がある。そのため、安全条件は、自分車が無保護領域内を走行している間、常に満たされる必要があります。 -4. (TODO): 制限された検出範囲/速度追跡性能を考慮すると、完璧に安全な判断を事前に下すことはほとんど不可能であるため、交差点モジュールは、安全上の判断が次の理由により後に "裏切られた" 場合に、リスク回避的加速速度プロファイルの計画と/または横方向加速度制限の緩和を行う必要があります。 -5. 状況がその後に危険になった場合、主に速度追跡が過小評価されたか、またはオブジェクトが TTC マージンを超えて加速したため -6. 状況がその後に危険になった場合、主にオブジェクトが突然どこからともなく検出されたため +1. 車両が停止する必要がある場合は、十分な制動距離を確保して、少なくとも無保護領域の境界線手前でブレーキを開始する必要があります。 +2. 車両は、十分な制動距離マージンを確保して、進行中の車両を認識し、事前に安全性を判断する必要があります。また、SAFEの判断は完全に確実なものでなければならず、自車が無保護領域内を走行している間、常に安全条件が満たされる必要があります。 +3. (TODO): 検出範囲/速度追跡性能が限られているため、事前に完全に安全な判断を下すことはほぼ不可能であるため、交差点モジュールは、安全判断が後から次の理由で「裏切られた」場合に、リスク回避的な加速度速度プロファイルと/または横加速度制限を緩和する必要があります。 + 1. 速度追跡が過小評価されたか、またはオブジェクトがTTCマージンを超えて加速したため、状況が後で_危険になった_ + 2. オブジェクトが突然何もないところから検出されたため、状況が後で_危険になった_ $$ \dfrac{v_{\mathrm{ego}}^{2}}{2a_{\mathrm{max}}} + v_{\mathrm{ego}} * t_{\mathrm{delay}} $$ -によって得られる制動距離分、無保護領域の境界線より手前の位置をパス判定線と呼び、自分車がこの位置を通過する前に安全上の判断が行われなければなりません。自分車はこれ以上停車しなくなるからです。 +で得られる制動距離によって無保護領域の境界線より手前にある位置をpass_judge_lineと呼び、自車がこの位置を通過する前に安全判断を行う必要があります。なぜなら、自車はそれ以上停止しないからです。 -1st*pass*判定線は最初の先行レーンより手前にあり、複数の先行レーンがある交差点では、2nd*pass*判定線は制動距離分、最初の注意レーンのセンターラインより手前の位置として定義されます。1st/2nd*pass*判定線は次の図で示されています。 +1st_pass_judge_lineは最初の進行車線の前にあり、複数の進行車線がある交差点では、2nd_pass_judge_lineは制動距離を考慮して最初の注意レーンのセンターラインより前に定義されます。1st/2nd_pass_judge_lineは次の図に示されています。 ![pass-judge-line](./docs/pass-judge-line.drawio.svg) -交差点モジュールは次の場合に走行を指示します。 +交差点モジュールは、次の場合にGOを指示します。 -- 自分車がデフォルト・ストップラインを越えている場合 (または `common.enable_pass_judge_before_default_stopline` が true の場合) -- 自分車が 1st*pass*判定線を越えている場合 -- 自分車が以前に SAFE と判断されている場合 -- (自分車が 2nd*pass*判定線を越えている場合、または自分車が 1st と 2nd のパス判定線の間にあるが、最も可能性の高い衝突が 1st の注意レーンで発生すると予想される場合) +- 自車位置がdefault_stoplineより前(または`common.enable_pass_judge_before_default_stopline`がtrue)の場合 +- 自車位置が1st_pass judge lineより前 +- 自車が事前にSAFEと判断した +- (自車位置が2nd_pass_judge_lineより前、または1stと2ndのpass_judge_lineの間だが、最も可能性の高い衝突が1番目の注意レーンで発生すると予想される場合) -以下の場合は、停止するか停止判断を継続すると予想されるためです。 +次の場合は停止、または停止判断を続行すると予想されるためです。 -1. 自分車がデフォルト・ストップラインより前で `common.enable_pass_judge_before_default_stopline` が false の場合 -1. 理由: デフォルト・ストップラインはマップ上に定義されており、尊重する必要があります -1. 自分車が 1st*pass*判定線より前 -1. 理由: 制動距離マージンが十分にある -1. 自分車は以前に UNSAFE と判断されました -1. 理由: 自分車は現在停止しようとしており、減速中に 1st*pass*判定線を越えたとしても、衝突が検出されたら停止判断を続ける必要があります -1. (自分車は 1st と 2nd のパス判定線の間で、最も可能性の高い衝突が 2nd の注意レーンで発生すると予想される) +1. 自車位置がdefault_stoplineより前で`common.enable_pass_judge_before_default_stopline`がfalseの場合 + 1. 理由:default_stoplineは地図上で定義されており、遵守する必要があります。 +2. 自車位置が1st_pass_judge_lineより前 + 1. 理由:十分な制動距離のマージンがあります。 +3. 自車が事前にUNSAFEと判断した場合 + 1. 理由:自車は現在停止しようとしており、後の計算で衝突が検出された場合は停止の判断を継続する必要があります。 +4. (自車位置が1stと2ndのpass_judge_lineの間で、最も可能性の高い衝突は2番目の注意レーンで発生すると予想される) -3 番目の条件では、自分車が衝突検出のために停止しようとしている場合、無保護領域にオーバーシュートして停止する可能性があります。これは、自分車が減速中に 1st*pass*判定線を越えた場合でも UNSAFE 判断が行われたままで、停止判断を続ける必要があるためです。 +3番目の条件では、自車は減速中に1st_pass_judge_lineを通過する場合がありますが、衝突検出中、自車は無保護領域に少しオーバーシュートして停止する可能性があります。なぜなら、自車がUNSAFEと判断されている間は停止の判断を継続する必要があるからです。 -交差点の4番目の条件では、2番目の注意車線が交わる交差点で、自車が1番目のpass_judge_lineを超えたとしても、2番目の注意車線で最も衝突が起こりそうな場合は、交差点モジュールは停止するように指示します。 +4 番目の条件では、2 番目の注目レーンがある交差点において、エゴカーが 1 番目の通過判定ラインを超えていても、2 番目の注目レーンで最も衝突の可能性が高いと予想される場合、交差点モジュールは停止を指示します。 -また、`occlusion.enable`がtrueの場合、1st_pass_judgeラインの位置は、自車がのぞき見中に元の1st_pass_judgeラインの位置を通過した場合は、occlusion_peeking_stoplineに変更されます。そうしないと、自車がのぞき見中に無意識のうちに1st_pass_judgeを超えたと判断し、のぞき見を中止してしまう可能性があります。 +また、`occlusion.enable` が true の場合、エゴカーが覗き見中に元の 1 番目の通過判定ラインの位置を通過した場合、1 番目の通過判定ラインの位置は occlusion_peeking_stopline に変更されます。そうしないと、エゴカーは覗き見中に誤って 1 番目の通過判定ラインを通過し、覗き見を中止する可能性があります。 ## データ構造 -各データ構造は`util_type.hpp`で定義されています。 +各データ構造は `util_type.hpp` で定義されています。 ![data-structure](./docs/data-structure.drawio.svg) ### `IntersectionLanelets` + ```plantuml @startuml entity IntersectionLanelets { @@ -360,7 +360,8 @@ entity IntersectionLanelets { ### `IntersectionStopLines` -各停止線は、補間されたパス点から生成され、正確な位置を取得します。 +各停止線は、内挿パスから生成され、正確な位置を取得しています。 + ```plantuml @startuml @@ -388,7 +389,8 @@ entity IntersectionStopLines { ### `TargetObject` -`TargetObject` は、対象物、その所属車線、および対応する停止線情報を保持します。 +`TargetObject` には、対象物、それに属する車線、対応する停止線情報が保持されます。 + ```plantuml @startuml @@ -407,126 +409,138 @@ entity TargetObject { ## モジュールパラメータ -### 共通 - -| パラメータ | タイプ | 説明 | -| -------------------------------------------- | ------ | ----------------------------------------------------------------------------- | -| `.attention_area_length` | double | [m] 物体検出範囲 | -| `.attention_area_margin` | double | [m] アテンションエリアの幅の拡張マージン | -| `.attention_area_angle_threshold` | double | [rad] 検出オブジェクトと車線の角度差の閾値 | -| `.use_intersection_area` | bool | [-] 衝突検出に交差領域を使用するフラグ | -| `.default_stopline_margin` | double | [m] 停止線手前マージン | -| `.stopline_overshoot_margin` | double | [m] 停止線への進入マージン | -| `.max_accel` | double | [m/ss] 停止時の最大加速度 | -| `.max_jerk` | double | [m/sss] 停止時の最大ジャーク | -| `.delay_response_time` | double | [s] 停止前のアクション遅延時間 | -| `.enable_pass_judge_before_default_stopline` | bool | [-] ego が pass_judge_line を超えていても default_stopline で停止しないフラグ | +### コモン + +| パラメータ | 型 | 説明 | +| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------- | +| `.attention_area_length` | double | [m] 物体検出の範囲 | +| `.attention_area_margin` | double | [m] 注意領域の幅を拡大するためのマージン | +| `.attention_area_angle_threshold` | double | [rad] 検出された物体と車線の角度差のしきい値 | +| `.use_intersection_area` | bool | [-] 衝突検出に intersection_area を使用するフラグ | +| `.default_stopline_margin` | double | [m] stopline の手前のマージン | +| `.stopline_overshoot_margin` | double | [m] stopline からのオーバーシュートのマージン | +| `.max_accel` | double | [m/ss] stop に対する最大加速度 | +| `.max_jerk` | double | [m/sss] stop に対する最大ジャーク | +| `.delay_response_time` | double | [s] stop 前の動作の遅延 | +| `.enable_pass_judge_before_default_stopline` | bool | [-] 自車が pass_judge_line を超えていても既定の stopline の前に停止しないフラグ | ### stuck_vehicle/yield_stuck -自動車が駐車されたり、故障したりして動けなくなっている車両に遭遇した場合の対処法を定義する。 - -| パラメータ | 型 | 説明 | -| ------------------------------------------------ | ------ | ------------------------------------------------------- | -| `stuck_vehicle.turn_direction` | - | [-] 自動停止車両検出のための turn_direction 指定 | -| `stuck_vehicle.stuck_vehicle_detect_dist` | double | [m] 自動停止車両検出のための交差点出口からの方向 | -| `stuck_vehicle.stuck_vehicle_velocity_threshold` | double | [m/s] 自動停止車両検出のための速度しきい値 | -| `yield_stuck.distance_threshold` | double | [m/s] 自車経路に沿って停止車両から ego まで距離しきい値 | - -### 衝突検出 - -このコンポーネントは、自車位置、検出可能なオブジェクト、およびPlanningモジュールによって生成されたパスから、衝突のリスクを評価します。 -衝突リスク評価は、衝突確率とその衝突までの時間、衝突した場合の逸脱量を考慮して行われます。 -衝突は、自車および周囲のオブジェクトの間の距離が一定のしきい値を下回った場合に検出されます。 -検出された衝突は、`post resampling`によって調整されます。 - -| パラメータ | 種類 | 説明 | -| --------------------------------------------- | ------ | -------------------------------------------------------------------------- | -| `.consider_wrong_direction_vehicle` | bool | [-] 逆走車両を検出するためのフラグ | -| `.collision_detection_hold_time` | double | [s] 衝突検出のホールド時間 | -| `.min_predicted_path_confidence` | double | [-] 衝突検出に使用される予測パスの最小信頼値 | -| `.keep_detection_velocity_threshold` | double | [s] パスジャッジラインを通過するまでの衝突検出を継続するための自車速度閾値 | -| `.velocity_profile.use_upstream` | bool | [-] 上流モジュールで計画された速度プロファイルを使用するためのフラグ | -| `.velocity_profile.minimum_upstream_velocity` | double | [m/s] ゼロ除算を回避するための上流速度プロファイルの最小速度 | -| `.velocity_profile.default_velocity` | double | [m/s] use_upstreamがfalseの場合の一定速度プロファイル | -| `.velocity_profile.minimum_default_velocity` | double | [m/s] ゼロ除算を回避するためのデフォルト速度プロファイルの最小速度 | -| `.yield_on_green_traffic_light` | - | [-] [説明](#yield-on-green) | -| `.ignore_amber_traffic_light` | - | [-] [説明](#skip-on-amber) | -| `.ignore_on_red_traffic_light` | - | [-] [説明](#skip-on-red) | - -### 閉塞 - -| パラメータ | 型 | 説明 | -| ---------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ | -| `.enable` | bool | [-] オクルージョン検出を計算するフラグ | -| `.occlusion_attention_area_length` | double | [m] オクルージョン検出のための注目領域の長さ | -| `.free_space_max` | int | [-] オクルージョンとして扱うために、占有グリッドセルの最大値 | -| `.occupied_min` | int | [-] オクルージョンとして扱うために、占有グリッドセルの最小値 | -| `.denoise_kernel` | double | [m] 生の占有グリッドを前処理するための形態学的ウィンドウサイズ | -| `.attention_lane_crop_curvature_threshold` | double | [m] レーンの曲線部を切り取るための曲率のしきい値 | -| `.attention_lane_crop_curvature_ds` | double | [m] レーンの曲率を計算するためのセンターラインの離散化間隔 | -| `.creep_during_peeking.enable` | bool | [-] 交差点のオクルージョン停止線にピーキング中に `creep_velocity` を挿入するためのフラグ | -| `.creep_during_peeking.creep_velocity` | double | [m/s] 交差点のオクルージョン停止線にピーキング中に使用するコマンド速度 | -| `.peeking_offset` | double | [m] ピーキング中のオクルージョンのために、車両前面を注意領域にオフセットする距離 | -| `.occlusion_required_clearance_distance` | double | [m] エゴパスからの最寄りのオクルージョンセルまでの距離のしきい値 | -| `.possible_object_bbox` | [double] | [m] オクルージョンポリゴンが十分に小さいかどうかを確認するための最小バウンディングボックスサイズ | -| `.ignore_parked_vehicle_speed_threshold` | double | [m/s] 駐車車両の確認のための速度しきい値 | -| `.occlusion_detection_hold_time` | double | [s] オクルージョン検出のホールド時間 | -| `.temporal_stop_time_before_peeking` | double | [s] ピーキングを開始する前に、`default_stopline` でのタイムスタンプの停止時間 | -| `.temporal_stop_before_attention_area` | bool | [-] `attention_area` にピーキングする前に、`first_attention_stopline` で一時停止するフラグ | -| `.creep_velocity_without_traffic_light` | double | [m/s] `occlusion_wo_tl_pass_judge_line` へのクリープ速度 | -| `.static_occlusion_with_traffic_light_timeout` | double | [s] 交通信号のある交差点での静的オクルージョンを無視するためのタイムアウトの期間 | +- このコンポーネントは他の車両が停止しているか動けなくなっている場合に、それらの車両と衝突しないようにする安全な経路を生成します。 + +- 出力トピックは「`/planning/lattice_planner/trajectory_candidate`」です。 +- 入力トピックは次のとおりです。 + - 「`/perception/object`」: 自身の周囲にある物体の認識結果。 + - 「`/planning/scenario`」: シナリオ認識結果。 + - 「`/localization/kinematic`」: 自車位置。 + - 「`/planning/lattice`」: 走行格子。 + - 「`/planning/vel_profile`」: 速度プロフィール。 + +| パラメータ | タイプ | 説明 | +| ------------------------------------------------ | ------ | ---------------------------------------------------------------------------------------- | +| `stuck_vehicle.turn_direction` | - | [-] 停止車両検出のturn_direction指定 | +| `stuck_vehicle.stuck_vehicle_detect_dist` | double | [m] 交差点出口からの距離で、停止車両検出のための長さ | +| `stuck_vehicle.stuck_vehicle_velocity_threshold` | double | [m/s] 停止車両検出の速度しきい値 | +| `yield_stuck.distance_threshold` | double | [m/s] 車線に沿ったエゴパスからの停止車両の距離しきい値 | + +### collision_detection + +**概要:** +本コンポーネントは、車両周囲の静的および動的障害物を検出し、衝突のリスクを評価します。 + +**アーキテクチャ:** +collision_detectionコンポーネントは、以下のモジュールで構成されています。 + +- **ObjectPerceptionModule:** カメラやレーダーなどのセンサーからのデータを使用して障害物を検出します。 +- **PlanningModule:** 障害物情報を解釈し、衝突リスクを評価します。 +- **LocalizationModule:** 自車位置を推定し、障害物との相対位置を計算します。 + +| パラメータ | 型 | 説明 | +| ------------------------------------------ | ------ | ---------------------------------------------------------------------------- | +| `.consider_wrong_direction_vehicle` | ブール | [-] 逆走車両を検出するフラグ | +| `.collision_detection_hold_time` | 倍精度 | [秒] 衝突検出の保持時間 | +| `.min_predicted_path_confidence` | 倍精度 | [-] 衝突検出に使用する予測パスの最小信頼値 | +| `.keep_detection_velocity_threshold` | 倍精度 | [秒] 通過基準を超える前に衝突検出を継続するための自車速度のしきい値 | +| `.velocity_profile.use_upstream` | ブール | [-] 上位のモジュールによって計画された速度プロファイルをにするフラグ | +| `.velocity_profile.minimum_upstream_velocity` | 倍精度 | [m/秒] 0除算を避けるための、上位の速度プロファイルの最小速度 | +| `.velocity_profile.default_velocity` | 倍精度 | [m/秒] use_upstreamがfalseのときの定数速度プロファイル | +| `.velocity_profile.minimum_default_velocity` | 倍精度 | [m/秒] 0除算を避けるための、デフォルト速度プロファイルの最小速度 | +| `.yield_on_green_traffic_light` | - | [-] [説明](#yield-on-green) | +| `.ignore_amber_traffic_light` | - | [-] [説明](#skip-on-amber) | +| `.ignore_on_red_traffic_light` | - | [-] [説明](#skip-on-red) | + +## オクルージョン + +| パラメータ | タイプ | 説明 | +| -------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------ | +| `.enable` | bool | [-] オクルージョン検出を計算するフラグ | +| `.occlusion_attention_area_length` | double | [m] オクルージョン検出用のアテンションエリアの長さ | +| `.free_space_max` | int | [-] 占有グリッドセルがオクルージョン状態として扱われる最大値 | +| `.occupied_min` | int | [-] 占有グリッドセルがオクルージョン状態として扱われる最小値 | +| `.denoise_kernel` | double | [m] 生の占有グリッドの前処理のためのモフォロジーウィンドウサイズ | +| `.attention_lane_crop_curvature_threshold` | double | [m] 車線の曲線部分のトリミングのための曲率しきい値 | +| `.attention_lane_crop_curvature_ds` | double | [m] 車線曲率計算のためのセンターラインの離散化間隔 | +| `.creep_during_peeking.enable` | bool | [-] 交差点オクルージョンストップラインを覗き込む際に `creep_velocity` を挿入するフラグ | +| `.creep_during_peeking.creep_velocity` | double | [m/s] 交差点オクルージョンストップラインを覗き込む際の指令速度 | +| `.peeking_offset` | double | [m] オクルージョンを覗き込むためのアテンションエリアへの車両の前方のオフセット | +| `.occlusion_required_clearance_distance` | double | [m] エゴパスから最も近いオクルージョンセルまでの距離のしきい値 | +| `.possible_object_bbox` | [double] | [m] オクルージョンのポリゴンが十分に小さいかどうかを確認するための最小バウンディングボックスサイズ | +| `.ignore_parked_vehicle_speed_threshold` | double | [m/s] 駐車車両の確認のための速度しきい値 | +| `.occlusion_detection_hold_time` | double | [s] オクルージョン検出のホールド時間 | +| `.temporal_stop_time_before_peeking` | double | [s] ピーキングを開始する前のデフォルトストップラインでの一時停止時間 | +| `.temporal_stop_before_attention_area` | bool | [-] アテンションエリアを覗き込む前に最初の `attention_stopline` で一時停止するフラグ | +| `.creep_velocity_without_traffic_light` | double | [m/s] オクルージョンなしの通行可能な判定ラインへのクリープ速度 | +| `.static_occlusion_with_traffic_light_timeout` | double | [s] 信号機付き交差点での静的オクルージョンを無視するためのタイムアウト時間 | ## トラブルシューティング -### 交差点モジュールが関係のない車両に対して停止してしまう +### Intersection モジュールが関係のない車両に対して停止する -この場合は、まず `/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection` トピックを視覚化し、`attention_area` ポリゴンを確認します。交差点モジュールはこのポリゴン上で走行する車両に対して衝突チェックを実行するため、意図しない車線にまで拡張されている場合は、[RightOfWay タグ](#how-towhy-set-rightofway-tag) を付ける必要があります。 +この場合、最初に `/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection` トピックを視覚化して `attention_area` ポリゴンを確認します。Intersection モジュールはこのポリゴン上で実行されている車両の衝突チェックを実行するため、意図しない車線まで拡張されている場合は、[RightOfWay タグ](#how-towhy-set-rightofway-tag) が必要です。 -`common.attention_area_length` を下げることで、どの車線が交差点車線とコンフリクトしているかを調べることができます。次に、コンフリクトしている車線の部分を Yield Lane として設定します。 +`common.attention_area_length` を下げることで、どのレーンが交差点レーンと競合しているかを確認できます。次に、競合するレーンの部分を yield_lane として設定します。 -### 交差点の停止線がフラフラする +### 交差点の停止線が不安定である -パラメータ `collision_detection.collision_detection_hold_time` は、SAFE 決定が最終的に行われるまで UNSAFE 決定をこの時間保持することでフラッターを抑えます。このパラメータの役割は、対象物の不安定な検出/追跡を考慮することです。この値を増やすことでチャタリングを抑えることができます。ただし、停止時間が過度に長くなる可能性があります。 +パラメーター `collision_detection.collision_detection_hold_time` は、SAFE 決定が最終的に下されるまで UNSAFE 決定をこの期間保持することで不安定さを抑制します。このパラメータの役割は、不安定なオブジェクトの検出 / トラッキングを考慮することです。この値を大きくすることで、不安定さを抑制できます。ただし、停止時間が過度に長くなる可能性があります。 -チャタリングが対象車両の加速度/減速度に起因する場合は、`collision_detection.collision_detection.collision_end_margin_time` と/または `collision_detection.collision_detection.collision_end_margin_time` を増やします。 +不安定さがターゲット車両の加速 / 減速から生じる場合は、`collision_detection.collision_detection.collision_end_margin_time` または `collision_detection.collision_detection.collision_end_margin_time` を増やします。 -### 停止線が早すぎたり遅すぎたり解除される +### 停止線が早すぎる / 遅すぎる -交差点壁があまりにも早く現れたり、自我は前方車両に対してあまりにも保守的に停止する傾向がある場合は、パラメータ `collision_detection.collision_detection.collision_start_margin_time` を下げます。対象車両が通過した後に停止が長すぎる場合は、パラメータ `collision_detection.collision_detection.collision_end_margin_time` を下げます。 +交差点の壁が早すぎたり、エゴが先行車両に対して保守的に停止する傾向がある場合は、パラメーター `collision_detection.collision_detection.collision_start_margin_time` を下げます。ターゲット車両が通過した後も長すぎる場合は、`collision_detection.collision_detection.collision_start_margin_time` パラメーターを下げます。 -### 自己が信号のある交差点で突然停止する +### エゴが信号機のある交差点で突然停止する -信号の色が AMBER/RED から UNKNOWN に変わると、交差点モジュールは GREEN カラーモードで動作します。したがって、衝突と遮蔽が再び検出される可能性があります。 +信号の色が AMBER/RED から UNKNOWN に変わった場合、交差点モジュールは GREEN 色モードで動作します。そのため、衝突や閉塞が再び検出される可能性があります。 -### 遮蔽が過剰検出される +### 過剰に閉塞が検出される -`/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection/occlusion_polygons` を可視化することで、どの領域が遮蔽として検出されているかを確認できます。 +`/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection/occlusion_polygons` を視覚化することで、どのエリアが閉塞として検出されたかを確認できます。閉塞を検出しない / 無視したい場合、または閉塞検出の計算コストを下げたい場合は、`occlusion.occlusion_attention_area_length` を低い値に設定してください。 -自我から遠くの遮蔽を検出し nech6たい/無視したい場合、または遮蔽検出の計算コストを下げたい場合は、`occlusion.occlusion_attention_area_length` を低い値に設定する必要があります。 +エゴの近くにある閉塞をより慎重に処理したい場合は、`occlusion.occlusion_required_clearance_distance` を大きな値に設定します。次に、エゴはより明確な FOV を確保するために、閉塞_peeking_stopline により近づきます。 -自我近くの遮蔽をより慎重に配慮したい場合は、`occlusion.occlusion_required_clearance_distance` をより大きな値に設定します。次に、自己は遮蔽のぞき見停止線により近づいて、より明確な FOV が確保されます。 +`occlusion.possible_object_bbox` は、検出された閉塞エリアが小さく、このサイズより大きな車両が内部に存在しないかどうかを確認するために使用されます。このサイズを小さくすると、エゴは小さな閉塞エリアを無視します。 -`occlusion.possible_object_bbox` は、検出された遮蔽領域が小さすぎて、このサイズよりも大きい車両が内部に存在できないかどうかをチェックするために使用されます。このサイズを小さくすると、自己は小さな遮蔽領域を無視します。 +#### 占有グリッドマップの調整 -#### オキュパンシー グリッド マップの調整 +詳細については [autoware_probabilistic_occupancy_grid_map](https://autowarefoundation.github.io/autoware.universe/main/perception/autoware_probabilistic_occupancy_grid_map/) のドキュメントを参照してください。閉塞が明らかに空きスペースで検出される傾向がある場合は、`occlusion.free_space_max` を大きくして無視します。 -詳細については、[autoware_probabilistic_occupancy_grid_map](https://autowarefoundation.github.io/autoware.universe/main/perception/autoware_probabilistic_occupancy_grid_map/) のドキュメントを参照してください。明らかに自由なスペースで遮蔽が検出される傾向がある場合は、`occlusion.free_space_max` を増やしてそれらを無視します。 +#### simple_planning_simulator で -#### simple_planning_simulator の場合 +レーザー_ベースの_occupancy_grid_map は 2D 方式で不自然な UNKNOWN セルを生成するため、intersection_occlusion 機能は Planning_simulator での使用には **推奨されません**。 -laserscan_based_occupancy_grid_map は 2D 方式で不自然な UNKNOWN セルを生成するため、intersection_occlusion 機能は Planning Simulator での使用はお勧めしません。 +- 歩行者の背後にあるすべてのセルは UNKNOWN +- 地面の点群は生成されない -- 歩行者の後ろのすべてのセルは UNKNOWN です -- グラウンド ポイント クラウドは生成されません +また、多くのユーザーは、交差点閉塞(および実際の交通環境でも)に非常に重要な交通信号機情報を頻繁には設定しません。 -また、多くのユーザーは非常に重要な交差点の遮蔽(および実際の交通環境でも)のために頻繁に信号情報を設定しません。 +これらの理由から、`occlusion.enable` はデフォルトで false です。 -これらの理由により、`occlusion.enable` はデフォルトで false です。 +#### 実車 / エンドツーエンドシミュレータで -#### 実車 / エンドツーエンドシミュレータの場合 +実車や [AWSIM](https://tier4.github.io/AWSIM/) などのエンドツーエンドシミュレータでは、次の pointcloud_based_occupancy_grid_map 設定を強くお勧めします。 -実車または [AWSIM](https://tier4.github.io/AWSIM/) などのエンドツーエンドシミュレータでは、次の pointcloud_based_occupancy_grid_map 設定を強くお勧めします。 ```yaml scan_origin_frame: "velodyne_top" @@ -537,11 +551,12 @@ OccupancyGridMapProjectiveBlindSpot: obstacle_separation_threshold: 1.0 # [m] fill the interval between obstacles with unknown for this length ``` -`scan_origin_frame`として最上部のLiDARリンクを設定する必要があります。例では`velodyne_top`です。`OccupancyGridMapProjectiveBlindSpot`メソッドは、`scan_origin`から障害物までまたは地面までの射影線投影を実行し、オブジェクトの「影」上のセルをUNKNOWNとして埋めて視野を推定します。 +`scan_origin_frame`としてトップLiDARリンクを設定する必要があります。この例では`velodyne_top`です。`OccupancyGridMapProjectiveBlindSpot`メソッドは、`scan_origin`から障害物または地面までの射影レイ・トレーシングを実行してFOVを推定し、物体の「影」上のセルをUNKNOWNとして塗りつぶします。 ## フローチャート -作業中 +WIP + ```plantuml @startuml @@ -624,39 +639,40 @@ stop @enduml ``` -## 私有地からの合流 +## 私道からの合流 -### 機能 +### 役割 -自車が私有地(例:駐車場)から公道に入る場合、安全を確認するために公道手前で停止する必要があります。 +自動運転車が私道(例:駐車場)から公道へ進入する場合、公道への進入前に公道に面し、停止する必要があります。 -このモジュールは、車が公道に進入する私有地エリアに交差点がある場合に有効になります。停止線は、目標地点が交差点車線にあるときと、経路が交差点車線を越えるときの両方で生成されます。基本的な動作は交差点モジュールと同じですが、自車は停止線で1回停止する必要があります。 +このモジュールは、車両が私道から公道への進入交差点に差し掛かったときに有効になります。停止線は、目標地点が交差点車線にある場合と、経路が交差点車線を越える場合の両方で生成されます。基本的な動作は交差点モジュールと同じですが、自動運転車は停止線で一度停止する必要があります。 ![merge-from-private](docs/merge_from_private.png) -### 起動タイミング +### 有効化タイミング -このモジュールは、次の条件を満たしている場合に起動します。 +このモジュールは、以下の条件が満たされた場合に有効になります。 -- 自車線に「private」タグが付けられている -- 自車線は、他の非私有レーンレットと衝突している +- 自車線に「私道」タグがある +- 自車線は他の「非私道」レーンレットと衝突する -| パラメータ | 型 | 説明 | -| ------------------------------------------- | ------ | ------------------------ | -| `merge_from_private_road/stop_duration_sec` | double | 状態変更のマージンタイム | +| パラメータ | 型 | 説明 | +| ------------------------------------------- | ------ | ------------------------------- | +| `merge_from_private_road/stop_duration_sec` | double | [`m`]状態を変更するための時間マージン | ### 既知の問題 -自車が停止線を超過すると、停止状態から遷移しません。 +自車がストップラインからある程度の距離を超えて走行した場合、STOP から遷移しません。 ## テストマップ -交差点レーンのマップには、次のようなさまざまな交差点があります。 +交差点のlaneletマップには、次のようなさまざまな交差点が含まれています。 -- 信号機のある4方向交差点 -- 信号機のない4方向交差点 -- 信号のないT字路 -- ラウンドアバウトのある交差点 +- 信号のある4方向交差点 +- 信号のない4方向交差点 +- 信号のないT字路交差点 +- ループのある交差点 - 複雑な交差点 ![intersection_test](./docs/intersection_test_map.png) + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md index b835b47707e26..b5ee18ae871d4 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/README.md @@ -1,52 +1,52 @@ -## 走行可能な車線がなし +## 走行可能車線なし ### 役割 -このモジュールは、走行可能な車線を参照していない場合に、パスに関連する部分の速度を計画します。 +このモジュールは、それらを参照する走行可能車線がない場合のパスに関連する部分の速度を計画します。 -走行可能な車線とは、運用設計ドメイン(ODD)の対象外である車線または車線以上のことであり、車両は**自**動この車線で運転してはいけません。 +走行可能車線なしとは、車両がその車線で自律的に走行しては**ならない**動作設計領域 (ODD) 外の車線または複数の車線です。 -車線が走行不能(ODDの対象外)になる理由は、SWやHWの技術的限界、業務上の要件、安全上の考慮事項、さらにはそれらの組み合わせなど、さまざまです。 +車線は、SW および/または HW の技術的制限、ビジネス上の要件、安全上の考慮事項、それらの組み合わせなどの多くの理由により走行不能 (ODD 外) になる可能性があります。 -走行不能な車線の例を次に示します。 +走行可能車線なしの例 -- 建設作業などにより意図的に閉鎖された道路 -- 安全上の理由から鉄道路線の真下を通るアンダーパスの道路 -- 技術的な制限により車両が自**動的に**運転できない勾配の道路 -- その他多数の例 +- 工事のため、意図的に道路が閉鎖されている場合 +- 安全上の理由から、鉄道の下をくぐるアンダーパスの道路 +- 技術的制限により車両が自律的に走行できない勾配/傾斜のある道路。他にも多くの例があります。 ![no-drivable-lane-design.svg](./docs/no_drivable_lane_design.svg) -車線は、マップファイル`` に関連する車線に新しいタグを追加することで無効になります。 +車線は、マップファイル内の関連車線の新しいタグ、`` を追加することで無効になります。 -このモジュールの目標は、車両が走行不能な車線に入る前に停止させること(構成可能な停止マージンを使用)、または走行不能な車線内で自動モードが開始された場合に車両を停止させることです。次に、人間の運転手に運転操作の責任を取ってもらうよう求めます(テイクオーバーリクエスト/介入リクエスト)。 +このモジュールの目的は、走行不能車線に入る前に車両を停止させること (設定可能な停止マージンあり)、または車両が走行不能車線内で自律モードを開始した場合に車両を停止したままにすることです。次に、ドライバーに対して、運転タスクの責任を引き継ぐよう要求します (テイクオーバー要求/介入要求)。 -### アクティベーションタイミング +### 起動タイミング -この機能は、ターゲットパスの車線 ID に走行不能な車線のラベル(つまり`no_drivable_lane` 属性が`yes` )がある場合にアクティブになります。 +この機能は、ターゲットパスの走行車線 ID に走行不能車線のラベル (つまり、`no_drivable_lane` 属性が `yes` である) があるときに作動します。 ### モジュールパラメータ -| Parameter | 型 | 説明 | -| ------------------ | ------ | -------------------------------------------------- | -| `stop_margin` | double | 自車位置が速度抑制帯前で停止するためのマージン [m] | -| `print_debug_info` | bool | デバッグ情報を印刷するかどうか | +| パラメータ | 型 | 説明 | +| ------------------ | ------ | ------------------------------------------------ | +| `stop_margin` | double | スピーディーバンプ手前の自車位置までのマージン [m] | +| `print_debug_info` | bool | デバッグ情報をプリントするかどうか | -### 仕組み / アルゴリズム +### 内部構造/アルゴリズム -- lanelet2 マップから経路上の no_drivable_lane 属性を取得 -- no_drivable_lane ステートマシンは `INIT` ステートから開始 -- 経路と no_drivable_lane ポリゴンの交点を取得 -- 次の場合に、no_drivable_lane に対して `APPROACHING` ステートを割り当て: - - 自車の前から自車の経路と no_drivable_lane ポリゴンの最初の交点までの距離が `stop_margin` より大きい -- 次の場合に、`INSIDE_NO_DRIVABLE_LANE` ステートを割り当て: - - 自車の経路の最初の点が no_drivable_lane ポリゴン内にある場合、または - - 自車の前から自車の経路と no_drivable_lane ポリゴンの最初の交点までの距離が `stop_margin` より小さい場合 -- 車両が完全に停止したときに、`STOPPED` ステートを割り当て +- lanelet2マップからパスの`no_drivable_lane`属性を取得 +- no drivable レーン状態ステートマシンは`INIT`状態で開始 +- パスとno drivable レーンポリゴンとの間の交点を取得 +- 次の場合にno drivable レーンに向かって`APPROACHING`状態を割り当て: + - 自車前方から自己パスとno drivable レーンポリゴンとの最初の交点までの距離が`stop_margin`より大きい +- 次の場合に`INSIDE_NO_DRIVABLE_LANE`状態を割り当て: + - 自パスの最初の点がno drivable レーンポリゴン内にある + - 自車前方から自己パスとno drivable レーンポリゴンとの最初の交点までの距離が`stop_margin`より小さい +- 車両が完全に停止したら`STOPPED`状態を割り当て ![no_drivable_lane_scenarios.svg](./docs/no_drivable_lane_scenarios.svg) -### 今後の課題 +### 将来の作業 + +- [Request to Intervene API](https://github.com/autowarefoundation/autoware/issues/3487)はまだ実装されていないため、`no_drivable_lane`により車両が停止した後、運転タスクの責任をドライバーに引き渡すために処理される予定 +- 車両がno drivable レーン手前で停止したが、そのフットプリントの一部がno drivable レーンポリゴンと交差している場合を処理する -- [Request to Intervene API](https://github.com/autowarefoundation/autoware/issues/3487) はまだ実装されていないため、この機能は `no_drivable_lane` により車両が停止した後、運転作業の引き継ぎをドライバーに通知するために処理されます -- 車両が no_drivable_lane の前で停止するが、その一部が no_drivable_lane ポリゴンと交差するケースを処理 diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md index 7a411af383a37..d6a3535086395 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/README.md @@ -1,36 +1,37 @@ -### 停车禁止区域 +### 禁止駐車エリア -#### 角色 +#### 役割 -该模块计划避免在“停车禁止区域”停车。 +このモジュールは、「禁止駐車エリア」での停止を回避するために計画を立てます。 ![brief](./docs/no-stopping-area.svg) -- 直通过去的情况 - - 如果本车已通过通过判断点,则本车无法以最大加加减减速停车,因此该模块也不会插入停车速度。在这种情况下就需要 Override 或外部操作。 -- 停车情况 - - 如果“停车禁止区域”周围有处在停滞状态的车辆或停车速度,则车辆会在“停车禁止区域”内停车,因此该模块会在“停车禁止区域”前设定停车速度。 -- 行驶情况 - - 其他情况 +- 通過ケース + - 自動運転車が通過判断点を通過した場合、自動運転車は最大のジャークと加速度で停止できないため、このモジュールは停止速度を挿入しません。この場合、オーバーライドまたは外部操作が必要です。 +- 停止ケース + - 「禁止駐車エリア」の周囲に停止車両または停止速度がある場合、車両は「禁止駐車エリア」内で停止するため、このモジュールは「禁止駐車エリア」の手前に停止速度を作成します。 +- 走行ケース + - その他 -### 限制 +### 制限 -该模块允许开发人员使用特定规则设计“停车禁止区域”模块中的车辆速度。一旦本车通过过境点后,本车就不会插入停车速度,也不会改变 GO 的决策。此外,该模块仅考虑动态物体,以避免不必要地停车。 +このモジュールにより、開発者は特定のルールを使用して「禁止駐車エリア」モジュールにおける車両速度を設計できます。自動運転車が通過点を通過すると、自動運転車は停止速度を挿入せず、走行するという決定を変更しません。また、このモジュールは不要な停止を避けるために動的物体のみを考慮します。 #### ModelParameter -| パラメーター | タイプ | 説明 | -| ---------------------------- | ------ | ---------------------------------------------- | -| `state_clear_time` | 数値 | [s] 停止状態を解除する時間 | -| `stuck_vehicle_vel_thr` | 数値 | [m/s] この速度以下の車両は停止車両とみなす。 | -| `stop_margin` | 数値 | [m] 停止禁止区域での停止線へのマージン | -| `dead_line_margin` | 数値 | [m] 自車がこの位置を通過すると進路を許可 | -| `stop_line_margin` | 数値 | [m] 停止禁止区域での自動生成停止線へのマージン | -| `detection_area_length` | 数値 | [m] 検索ポリゴンの長 | -| `stuck_vehicle_front_margin` | 数値 | [m] 障害物停止最大距離 | +| パラメータ名 | 型 | 説明 | +| ---------------------------- | ------ | ------------------------------------------------------------------- | +| `state_clear_time` | double | [秒] 停止状態を解除する時間 | +| `stuck_vehicle_vel_thr` | double | [m/秒] この速度以下の車両は停止車両とみなされます。 | +| `stop_margin` | double | [m] 停止線がないエリアでの停止線に対する余裕 | +| `dead_line_margin` | double | [m] 自動車がこの位置を通過したらGO | +| `stop_line_margin` | double | [m] 停止線がないエリアでの自動生成された停止線に対する余裕 | +| `detection_area_length` | double | [m] ポリゴンを検索する長さ | +| `stuck_vehicle_front_margin` | double | [m] 停止車両との最大距離 | #### フローチャート + ```plantuml @startuml title modifyPathVelocity @@ -123,3 +124,4 @@ stop @enduml ``` + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md index b9ce64ec67f4d..195ee79fa5418 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/README.md @@ -2,154 +2,159 @@ ### 役割 -このモジュールは、運転者が障害物によって見通しが悪い「遮蔽スポット」から隠れた物体が飛び出してくる衝突地点に到達する前に安全速度を計画し、減速します。 +このモジュールは、障害物により運転者がはっきりと確認できない「遮蔽スポット」から隠れた物が飛び出してきて衝突するポイントに到達する前に速度を落とす安全速度を計画します。 -![概要](./docs/occlusion_spot.drawio.svg) +![brief](./docs/occlusion_spot.drawio.svg) ### 起動タイミング -このモジュールは、`launch_occlusion_spot` が true になった場合に起動します。歩行者優先ゾーンのマップタグを作成することは TODO の 1 つです。 +このモジュールは、`launch_occlusion_spot` が True になった場合に起動されます。歩道優先ゾーンのマップタグを作成することは TODO の 1 つです。 ### 制限事項と TODO -このモジュールは、遮蔽スポットをケアするためのプロトタイプ実装です。認識の誤検出による過剰な減速に対処するために、検出方法のロジックを選択できます。このポイントはまだ詳細に議論されておらず、改善が必要です。 +このモジュールは、遮蔽スポットのケアを行うためのプロトタイプ実装です。知覚の誤検知による過度の減速に対処するために、検出方法のロジックを選択できます。この点はまだ十分に検討されておらず、改善が必要です。 -- 計画用のオキュパンシーグリッドを作成します。 -- 遮蔽スポットのマップタグを作成します。 -- 最適な安全動作について。 +- 計画用の占有グリッドを作成する。 +- 遮蔽スポット用のマップタグを作成する。 +- 最適な安全な動作について。 -TODO は各内側の仕組み/アルゴリズムに記載されています(以下の説明を参照)。 +TODO は各内部処理/アルゴリズム(以下の説明を参照)に記載されています。 -### 内側の仕組み/アルゴリズム +### 内部処理 / アルゴリズム -#### ロジックの仕組み +#### ロジックの処理 -遮蔽には、「駐車車両によって発生する遮蔽」や「障害物による遮蔽」など、いくつかのタイプがあります。**障害物のある道路**で運転するなど、人々が頻繁に飛び出す状況では、考えられるすべての遮蔽スポットを考慮する必要があります。このモジュールは**オキュパンシーグリッド**から計算されたすべての遮蔽スポットを考慮しますが、ガードレールの後ろや走行中の車の後ろから飛び出す人などのすべての遮蔽スポットを考慮するのは合理的ではありません。そのため、現在、検出エリアは**予測オブジェクト**情報を使用するように限定されています。 +遮蔽には、「駐車車両による遮蔽」や「障害物による遮蔽」など、さまざまなタイプがあります。人々が頻繁に飛び出してくる**障害物のある道路**で運転するような状況では、考えられるすべての遮蔽スポットを考慮する必要があります。このモジュールは**占有グリッド**から計算されたすべての遮蔽スポットを考慮しますが、ガードレールの後ろや走行中の車両の後ろから人が飛び出すなど、すべての遮蔽スポットを考慮するのは現実的ではありません。したがって、現在の検出エリアは**予測オブジェクト**情報を活用することに限定されています。 -この決定ロジックはまだ開発中であり、改善する必要があります。 +この決定ロジックはまだ開発中であり、改善する必要があることに注意してください。 -#### 検出エリアのポリゴン +#### DetectionArea ポリゴン -このモジュールは、歩行者の速度と遮蔽スポットまでの横方向の距離から TTV を考慮します。TTC は、自己速度と加速度、モーション速度スムージングを使用した衝突点までの縦方向の距離から計算されます。高速に計算するために、このモジュールは TTC よりも TTV が小さく、「最大横方向距離」内の領域のみを考慮します。 +このモジュールは、歩行者の速度と遮蔽スポットまでの横方向の距離から TTV を考慮します。 +TTC は、運動速度スムージングを使用して、エゴ速度と加速度、衝突ポイントまでの縦距離から計算されます。このモジュールを高速に計算するためには、TTV が TTC 未満であり、「最大横方向距離」内のエリアのみを考慮します。 -![概要](./docs/da.drawio.svg) +![brief](./docs/da.drawio.svg) -#### オキュパンシーグリッドベースの遮蔽スポット +#### 占有グリッドベースの遮蔽スポット -このモジュールは、オキュパンシーグリッドから計算されたエゴパス周辺の遮蔽スポットを考慮します。計算コストにより、オキュパンシーグリッドは高解像度ではなく、これによりオキュパンシーグリッドがノイズだらけになるので、このモジュールはオキュパンシーグリッドマップにオキュパンシー情報を追加します。 +このモジュールでは、占有グリッドから計算されたエゴパス周辺のあらゆる遮蔽スポットを考慮します。 +計算コストのため、占有グリッドの解像度は高くなく、これにより占有グリッドがノイズだらけになり、このモジュールは占有グリッドマップに占有率情報を追加します。 -TODO: オキュパンシーグリッドを生成するための障害物点群の高さを考慮します。 +TODO: 占有グリッドを生成するための障害物点群の高さを考慮する。 -##### 衝突なしの判断 +##### 衝突フリーの判断 -遮蔽スポットから飛び出せる障害物は、エゴ車から交差するまで自由な隙間がある必要があります。 +遮蔽スポットから飛び出す可能性のある障害物は、エゴ車両から交差点まで空きスペースがある必要がある -![概要](./docs/collision_free.drawio.svg) +![brief](./docs/collision_free.drawio.svg) -##### 車線レットのパーティション +##### レーンレットのパーティション -「ガードレール」、「フェンス」、「壁」タグの車線レット情報を使用すると、不要な遮蔽スポットを削除できます。 +「ガードレール」、「フェンス」、「壁」タグのレーンレット情報を使用すると、不要な遮蔽スポットを除去できます。 -静的オブジェクト情報を使用すると、オキュパンシーグリッドをより正確にすることができます。 +静的オブジェクト情報を使用すると、占有グリッドをさらに正確にすることができます。 -計画用のオキュパンシーグリッドを作成することは TODO の 1 つです。 +計画用の占有グリッドを作成することは TODO の 1 つです。 -##### 衝突の可能性 +##### 障害物衝突の可能性 -動く車両によって遮蔽から飛び出す可能性のある障害物。 +隠蔽から飛び出すことが可能な障害物が移動中の車両によって遮断される。 -![略図](./docs/raycast_shadow.drawio.svg) +![ブリーフ](./docs/raycast_shadow.drawio.svg) -#### 安全な走行について +#### 安全な動作について -![略図](./docs/velocity_planning.drawio.svg) +![ブリーフ](./docs/velocity_planning.drawio.svg) -##### 安全速度とマージンのコンセプト +##### 安全な速度と余裕の概念 -安全な減速速度は、自車の緊急ブレーキシステムと衝突時間のパラメータから以下のように計算されます。 -以下の計算では velocity は含まれていますが、プランナーにとっては動的 velocity の変更はお勧めしません。 +安全な減速速度は、自己緊急ブレーキシステムのパラメータと衝突までの時間に基づいて計算されます。 +以下の計算は含まれますが、プランナーの速度を動的に変更することはお勧めしません。 -- ジャーク限界[m/s^3] -- 減速限界[m/s2] -- 応答遅延時間[s] -- 歩行者の衝突時間[s] - これらのパラメータにより、理想的な環境での遮蔽スポット手前の安全な走行を簡単に定義できます。 +- ジャーク制限 [m/s^3] +- 減速限界 [m/s2] +- 応答遅延時間 [s] +- 歩行者の衝突までの時間 [s] +これらのパラメータを使用して、理想的な環境での隠蔽スポット前の安全な動作の概要を簡単に定義できます。 - ![占有空間グリッド](./docs/safe_motion.drawio.svg) +![占有グリッド](./docs/safe_motion.drawio.svg) -このモジュールは、自車が停止するまでの距離と衝突経路の点の距離を幾何学的に考慮して安全マージンを定義します。 -自車が安全マージンから衝突経路の点まで巡航している間、自車は遮蔽スポットの安全速度と同じ速度を維持します。 +このモジュールは、停止距離と衝突経路点の幾何学的形状を考慮した安全なマージンを定義します。 +車が安全なマージンから衝突経路点に巡航している間、車速は隠蔽スポットの安全な速度と同じになります。 -![略図](./docs/behavior_after_safe_margin.drawio.svg) +![ブリーフ](./docs/behavior_after_safe_margin.drawio.svg) -注: このロジックは、高精度の車両速度の追跡を前提としており、減速ポイントのマージンが最善の解決策ではない場合があります。歩行者が実際に遮蔽スポットから飛び出してきた場合は、手動による運転者のオーバーライドが検討されます。 +注意: このロジックは、高精度の車両速度追跡を前提としており、減速点のマージンは最善のソリューションではない可能性があり、歩行者が隠蔽スポットから本当に飛び出した場合は、ドライバーによる手動でのオーバーライドが検討されます。 -TODO: 最善の選択肢の 1 つを検討する +検討中の最適な選択肢の 1 つ: -1. 遮蔽スポットの前に停止する -2. 遮蔽スポットの前に 1km/h の速度を挿入する -3. このように減速する +1. 隠蔽スポットの直前で停止する +2. 隠蔽スポットの直前に 1km/h の速度を挿入する +3. この方法で減速する 4. など... . ##### 最大減速速度 -最大減速速度は、過剰な減速を避けるために、最大減速ジャークと最大減速加速度での自車の現在の速度と加速度のパラメータから計算されます。 - -- $j_{max}$ 減速ジャーク限界[m/s^3] -- $a_{max}$ 減速減速度限界[m/s2] -- $v_{0}$ 現在の速度[m/s] -- $a_{0}$ 現在の加速度[m/s] - -![略図](./docs/maximum_slowdown_velocity.drawio.svg) - -#### モジュールパラメータ - -| パラメータ | 型 | 説明 | -| ------------------- | ------ | ---------------------------------------------------- | -| `pedestrian_vel` | double | [m/s] 障害物出現点から出てくる歩行者の仮定最大速度。 | -| `pedestrian_radius` | double | 障害物スポットにフィットする仮定歩行者半径。 | - -| パラメータ | 型 | 説明 | -| ----------------------- | ---- | ---------------------------------------------------------- | -| `use_object_info` | bool | [-] オブジェクト情報を占有グリッドマップに反映するかどうか | -| `use_partition_lanelet` | bool | [-] パーティションLaneletマップデータを使用するかどうか | - -| パラメータ /デバッグ | 型 | 説明 | -| ------------------------- | ---- | ------------------------------------------ | -| `is_show_occlusion` | bool | 遮蔽点のマーカーを表示するかどうか | -| `is_show_cv_window` | bool | OpenCVデバッグウィンドウを表示するかどうか | -| `is_show_processing_time` | bool | 処理時間を表示するかどうか | - -| パラメータ/しきい値 | 型 | 説明 | -| ----------------------- | ------ | -------------------------------------------------- | -| `detection_area_length` | double | [m] オクルージョン地点を考えるパス長 | -| `stuck_vehicle_vel` | double | [m/s] この値より速度が低い場合は停止していると判断 | -| `lateral_distance` | double | [m] 隠れた衝突を考える最大横方向距離 | - -| パラメーター/モーション | タイプ | 説明 | -| ---------------------------- | ------ | ---------------------------------------------------- | -| `safety_ratio` | double | [-] じゃーと加速度の安全性係数 | -| `max_slow_down_jerk` | double | [m/s^3] 安全なブレーキのじゃー | -| `max_slow_down_accel` | double | [m/s^2] 安全なブレーキの減速度 | -| `non_effective_jerk` | double | [m/s^3] 速度Plannningの弱いじゃー | -| `non_effective_acceleration` | double | [m/s^2] 速度Plannningの弱い減速度 | -| `min_allowed_velocity` | double | [m/s] 許容最小速度 | -| `safe_margin` | double | [m] 緊急ブレーキシステムで停止するための最大許容誤差 | - -| パラメーター / detection_area | 型 | 説明 | -| ----------------------------- | ------ | ----------------------------------------------------------------------- | -| `min_occlusion_spot_size` | double | [m] オクルージョンを考慮するパスの長さ | -| `slice_length` | double | [m] 検出エリアを分割する距離 | -| `max_lateral_distance` | double | [m] 検出\_エリア領域を構築するために使用される自己パスの周りのバッファ. | - -| パラメータ/グリッド | 型 | 説明 | -| ------------------- | ------ | ----------------------------------------------------------------- | -| `free_space_max` | double | [-] 占有グリッド内の空きスペースセルの最大値 | -| `occupied_min` | double | [-] detection_area 領域の構築に使用される自車パス周辺のバッファー | +最大減速速度は、最大減速ジャークと最大減速加速度を考慮して、現在の速度と加速度のパラメータから計算されます。これは、減速しすぎないようにするためです。 + +- $j_{max}$ 最大減速ジャーク制限 [m/s^3] +- $a_{max}$ 最大減速限界 [m/s2] +- $v_{0}$ 現在の速度 [m/s] +- $a_{0}$ 現在の加速度 [m/s] + +![ブリーフ](./docs/maximum_slowdown_velocity.drawio.svg) + +#### モジュールの設定 + +| パラメータ | タイプ | 説明 | +| ------------------- | ------ | -------------------------------------------------------------------------- | +| `pedestrian_vel` | double | [m/s] 最大速度想定歩行者遮断ポイントから現れる. | +| `pedestrian_radius` | double | [m] 遮断スポットに収まる想定歩行者半径. | + +| パラメーター | 型 | 説明 | +|---|---|---| +| `use_object_info` | bool | オブジェクト情報を占有グリッドマップに反映するかどうか | +| `use_partition_lanelet` | bool | パーティションされたレーンレットマップデータを使用するかどうか | + +| パラメータ /debug | タイプ | 説明 | +|---|---|---| +| `is_show_occlusion` | bool | [-] オクルージョンポイントマーカーを表示するかどうか | +| `is_show_cv_window` | bool | [-] オープンCVデバッグウィンドウを表示するかどうか | +| `is_show_processing_time` | bool | [-] 処理時間を表示するかどうか | + +| パラメータ/しきい値 | タイプ | 説明 | +| ----------------------- | ------ | --------------------------------------------------------- | +| `detection_area_length` | double | [m] 隠れスポットを考慮するパスの長さ | +| `stuck_vehicle_vel` | double | [m/s] この値以下の速度は停止しているとみなす | +| `lateral_distance` | double | [m] 隠れた衝突を考慮する最大横方向距離 | + +| パラメータ/モーション | タイプ | 説明 | +| ------------------------------- | ------ | -------------------------------------------------------------- | +| `safety_ratio` | double | [-] ジャークと加速度の安全比 | +| `max_slow_down_jerk` | double | [m/s^3] 安全なブレーキ用のジャーク | +| `max_slow_down_accel` | double | [m/s^2] 安全なブレーキ用の減速度 | +| `non_effective_jerk` | double | [m/s^3] Velocity Planningにおける弱いジャーク | +| `non_effective_acceleration` | double | [m/s^2] Velocity Planningにおける弱い減速度 | +| `min_allowed_velocity` | double | [m/s] 許可される最低速度 | +| `safe_margin` | double | [m] 緊急ブレーキシステムで停止するための最大許容誤差 | +| `post resampling` | double | [s] `post resampling` timestamp offset of playback | +| `current pose` | XYZPose | Planningの初期トラジェクトリに対する自車位置 | + +| パラメータ /detection_area | タイプ | 説明 | +| ------------------------- | ------ | ------------------------------------- | +| `min_occlusion_spot_size` | double | [m] オクルージョンスポットとみなすパスの長さ | +| `slice_length` | double | [m] 検出領域を分割する距離 | +| `max_lateral_distance` | double | [m] detection_area領域を構築するために使用する自車パスの周囲のバッファー | + +| Parameter /グリッド | タイプ | 説明 | +| ---------------- | ------ | --------------------------------------------------------------------- | +| `free_space_max` | double | [-] 占有グリッドの自由空間セルの最大値 | +| `occupied_min` | double | [-] detection_areaエリアの構築に使用される自車経路周辺のバッファー | #### フローチャート -##### 全体過程のフローアウトライン +##### 全体的なプロセスの概要 + ```plantuml @startuml @@ -221,7 +226,8 @@ stop @enduml ``` -##### 予測オブジェクトの詳細プロセス(未更新) +##### 予測対象(未更新)の詳細プロセス + ```plantuml @startuml @@ -273,36 +279,36 @@ stop @enduml ``` -##### 点群ベースの空間グリッドの細部プロセス +##### オキュパンシーグリッドベースの詳細な処理 -1. 1パス目 +**プロセス** - - 点群データを `post resampling` 処理して、空間グリッド上に等間隔で配置します。 - - 自車位置の周りの空間グリッドセルに、点群データを割り当てます。 - - 各空間グリッドセルに、占有確率を割り当てます。 +1. **センサデータ処理** + - センサデータ(点群、レーダーなど)から障害物検出を実行します。 -2. 2パス目 +2. **オキュパンシーグリッド作成** + - 環境のオキュパンシーグリッドを生成します。これにより、各セルが占有されているか未占有かが示されます。 - - 占有確率に基づいて、空間グリッドセルを「占有」、「非占有」、「不明」に分類します。 - - 隣接する空間グリッドセルの分類を考慮して、分類結果を洗練します。 +3. **障害物クラスタリング** + - オキュパンシーグリッドで隣接する占有セルをクラスタリングします。 -3. 障害物検出 +4. **障害物マージング** + - 複数のフレームにわたって同じ障害物をマージし、単一の障害物として表現します。 - - 占有確率が高い空間グリッドセルを、障害物として検出します。 - - 障害物の形状や位置を推定します。 +5. **障害物トラッキング** + - 複数のフレームにわたって障害物をトラッキングし、その軌跡と状態を予測します。 -4. **Planning** +**Planningコンポーネントとのやりとり** - - 障害物の予測と回避を考慮した経路を生成します。 - - 速度、加速度、逸脱量に基づく制約を考慮します。 +- Planningコンポーネントに障害物マップを提供します。 +- Planningコンポーネントから障害物に関するクエリを受信します(例:自車位置から障害物までの距離)。 -5. **Control** +**詳細** - - **Planning** モジュールからの経路に従って、車両を制御します。 - - ステアリング、アクセル、ブレーキなどのアクチュエーターを制御します。 +- **โพストレスサンプリング:**オキュパンシーグリッドから動的障害物(歩行者、車両など)を除去する処理を実行します。 +- **グローカリゼーション:**車両の自車位置と向きを正確に推定します。正確なオキュパンシーグリッドを作成するために不可欠です。 +- **セマンティックセグメンテーション:**オキュパンシーグリッドをさまざまなカテゴリ(例:車両、歩行者、建物)に分割します。 -6. 反復 - - システムは、点群データの更新を受け取り、プロセスを繰り返します。 ```plantuml @startuml @@ -363,3 +369,4 @@ partition handle_possible_collision { stop @enduml ``` + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md index 3189f48d1fdf9..8b9c55802405b 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/README.md @@ -2,68 +2,69 @@ ## 概要 -`behavior_velocity_planner` は交通規則に基づいて速度を調整するプランナーです。 -モジュールをプラグインとして読み込みます。各モジュールについて詳しくは、次のリンクを参照してください。 +`behavior_velocity_planner` は、交通ルールに基づいて速度を調整するプランナーです。 +モジュールをプラグインとして読み込みます。各モジュールの詳細については、以下に示すリンクを参照してください。 ![アーキテクチャ](./docs/BehaviorVelocityPlanner-Architecture.drawio.svg) -- [Blind Spot](../autoware_behavior_velocity_blind_spot_module/README.md) -- [Crosswalk](../autoware_behavior_velocity_crosswalk_module/README.md) -- [Walkway](../autoware_behavior_velocity_walkway_module/README.md) -- [Detection Area](../autoware_behavior_velocity_detection_area_module/README.md) -- [Intersection](../autoware_behavior_velocity_intersection_module/README.md) -- [MergeFromPrivate](../autoware_behavior_velocity_intersection_module/README.md#merge-from-private) -- [Stop Line](../autoware_behavior_velocity_stop_line_module/README.md) -- [Virtual Traffic Light](../autoware_behavior_velocity_virtual_traffic_light_module/README.md) -- [Traffic Light](../autoware_behavior_velocity_traffic_light_module/README.md) -- [Occlusion Spot](../autoware_behavior_velocity_occlusion_spot_module/README.md) -- [No Stopping Area](../autoware_behavior_velocity_no_stopping_area_module/README.md) -- [Run Out](../autoware_behavior_velocity_run_out_module/README.md) -- [Speed Bump](../autoware_behavior_velocity_speed_bump_module/README.md) - -各モジュールが速度を計画する際は、`base_link`(後車軸の中央)の姿勢を基準として考慮します。 -たとえば、ストップラインに車の前面を向けて停止するには、`base_link`から前面までの距離から`base_link`の姿勢を計算し、`base_link`の姿勢からパス速度を変更します。 - -![set_stop_velocity](./docs/set_stop_velocity.drawio.svg) +- [盲点](../autoware_behavior_velocity_blind_spot_module/README.md) +- [横断歩道](../autoware_behavior_velocity_crosswalk_module/README.md) +- [歩道](../autoware_behavior_velocity_walkway_module/README.md) +- [検知エリア](../autoware_behavior_velocity_detection_area_module/README.md) +- [交差点](../autoware_behavior_velocity_intersection_module/README.md) +- [私道から合流](../autoware_behavior_velocity_intersection_module/README.md#merge-from-private) +- [停止線](../autoware_behavior_velocity_stop_line_module/README.md) +- [仮想信号](../autoware_behavior_velocity_virtual_traffic_light_module/README.md) +- [信号](../autoware_behavior_velocity_traffic_light_module/README.md) +- [遮蔽スポット](../autoware_behavior_velocity_occlusion_spot_module/README.md) +- [停車禁止区域](../autoware_behavior_velocity_no_stopping_area_module/README.md) +- [飛び出し](../autoware_behavior_velocity_run_out_module/README.md) +- [スピードバンプ](../autoware_behavior_velocity_speed_bump_module/README.md) + +各モジュールが速度を計画する場合、`base_link`(後輪軸の中心)位置に基づいて考慮します。 +したがって、たとえば、車両の前方が停止線にある状態で停止線で停止するには、`base_link` から前部までの距離から `base_link` 位置を計算し、`base_link` 位置からパス速度を変更します。 + +![停止速度を設定](./docs/set_stop_velocity.drawio.svg) ## 入力トピック -| 名前 | タイプ | 説明 | -| ----------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | -| `~input/path_with_lane_id` | tier4_planning_msgs::msg::PathWithLaneId | レーンID付きパス | -| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクターマップ | -| `~input/vehicle_odometry` | nav_msgs::msg::Odometry | 車両の速度 | -| `~input/dynamic_objects` | autoware_perception_msgs::msg::PredictedObjects | 動的オブジェクト | -| `~input/no_ground_pointcloud` | sensor_msgs::msg::PointCloud2 | 障害物点群 | -| `~/input/compare_map_filtered_pointcloud` | sensor_msgs::msg::PointCloud2 | 比較マップでフィルタリングされた障害物点群(この実行モジュールの検出方法がPointsの場合に使用されます) | -| `~input/traffic_signals` | autoware_perception_msgs::msg::TrafficLightGroupArray | 信号状態 | +| 名称 | タイプ | 説明 | +|---|---|---| +| `~input/path_with_lane_id` | tier4_planning_msgs::msg::PathWithLaneId | lane_id付き経路 | +| `~input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクターマップ | +| `~input/vehicle_odometry` | nav_msgs::msg::Odometry | 車両速度 | +| `~input/dynamic_objects` | autoware_perception_msgs::msg::PredictedObjects | 動的オブジェクト | +| `~input/no_ground_pointcloud` | sensor_msgs::msg::PointCloud2 | 障害物点群 | +| `~/input/compare_map_filtered_pointcloud` | sensor_msgs::msg::PointCloud2 | 比較マップでフィルタリングされた障害物点群。なお、これはrun outモジュールの検出方式がポイントの場合にのみ使用されます。 | +| `~input/traffic_signals` | autoware_perception_msgs::msg::TrafficLightGroupArray | 信号状態 | ## 出力トピック -| 名前 | 型 | 説明 | -| ---------------------- | ------------------------------------------- | -------------------- | -| `~output/path` | `autoware_planning_msgs::msg::Path` | 走行すべきパス | -| `~output/stop_reasons` | `tier4_planning_msgs::msg::StopReasonArray` | 車両を停止させる理由 | +| 名 | 型 | 説明 | +| ---------------------- | ---------------------------------------- | --------------------------------------- | +| `~output/path` | autoware_planning_msgs::msg::Path | 追従する経路 | +| `~output/stop_reasons` | tier4_planning_msgs::msg::StopReasonArray | 車両が停止する理由 | -## ノードパラメータ +## ノードパラメーター -| パラメーター | タイプ | 説明 | -| ---------------------- | ---------------- | ----------------------------------------------------------------- | -| `launch_modules` | 文字列のベクトル | 起動するモジュール名 | -| `forward_path_length` | double | フォワードパス長 | -| `backward_path_length` | double | バックワードパス長 | -| `max_accel` | double | (グローバルパラメータ) 車両の最大加速度 | -| `system_delay` | double | (グローバルパラメータ) 制御コマンドの出力を始めるまでの遅延時間 | -| `delay_response_time` | double | (グローバルパラメータ) 車両が制御コマンドに応答するまでの遅延時間 | +| パラメータ | 型 | 説明 | +| ---------------------- | -------------------- | ------------------------------------------------------------------------------------ | +| `launch_modules` | vector<string> | 起動されるモジュールの名前 | +| `forward_path_length` | double | 前方パス長 | +| `backward_path_length` | double | 後方パス長 | +| `max_accel` | double | (グローバルパラメータ) 車両の最大加速度 | +| `system_delay` | double | (グローバルパラメータ) 制御コマンドを出力するまでの遅延時間 | +| `delay_response_time` | double | (グローバルパラメータ) 車両が制御コマンドに応答するまでの遅延時間 | ## シミュレーション/実環境における信号機処理 -信号機情報の処理は用途によって異なります。以下の表では、対応する車線の信号機トピック要素を `info` とし、`info` が使用できない場合は `null` とします。 +信号機情報の処理は、使用状況によって異なります。以下の表では、対応する車線に対する信号機トピック要素は `info` とし、`info` が使用できない場合は `null` と記載しています。 + +| モジュール/ケース | `info`が`null` | `info`が`null`ではない | +| ------------------------------------------------------------------------------------------------------- | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| intersection_occlusion(`is_simulation = *`)
  • `info`は最新の`null`でない情報
| GO(閉塞は無視) | intersection_occlusionは、現在のキュー内に存在する最新のUNKNOWN以外の情報を最優先で使用する。
  • `info`が`GREENまたはUNKNOWN`の場合、閉塞は考慮
  • `info`が`REDまたはYELLOW`の場合、閉塞は無視(GO)
  • 注:現在、タイムアウトは考慮されていません
| +| traffic_light(sim, `is_simulation = true`)
  • `info`は現在の情報
| GO | traffic_lightは現在感知されている信号情報を使用。
  • `info`がタイムアウトの場合、色は関係なくSTOP
  • `info`がタイムアウトでない場合、色に応じて行動。`info`が`UNKNOWN`の場合、STOP
{: rowspan=2} | +| traffic_light(real, `is_simulation = false`)
  • `info`は現在の情報
| STOP | | +| crosswalk with Traffic Light(`is_simulation = *`)
  • `info`は現在の情報
| default |
  • `disable_yield_for_new_stopped_object`がtrueの場合、各サブシーンモジュールはモジュールインスタンス化後に新しく検出された歩行者を無視。
  • `ignore_with_traffic_light`がtrueの場合、閉塞検出はスキップ。
| +| map_based_prediction(`is_simulation = *`)
  • `info`は現在の情報
| default | 歩行者信号が
  • REDの場合、周囲の歩行者は予測されない。
  • GREENの場合、停止している歩行者は予測されない。
| -| モジュール/ケース | `info` が `null` | `info` が `null` 以外 | -| :------------------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| intersection_occlusion(`is_simulation = *`)
  • `info` は最新の非 `null` 情報
| GO (遮蔽は無視されます) | intersection_occlusion は現在までのキューの中で最新の UNKNOWN 以外の情報を利用します。
  • `info` が `GREEN` または `UNKNOWN` の場合、遮蔽が考慮されます
  • `info` が `RED` または `YELLOW` の場合、遮蔽は無視されます (GO)
  • 注: 現在、タイムアウトは考慮されていません
| -| traffic_light(sim, `is_simulation = true`)
  • `info` は現在の情報
| GO | traffic_light は現在知覚している交通信号情報を直接使用します。
  • `info` がタイムアウトの場合は、色に関係なく停止します
  • `info` がタイムアウトでない場合は、色に応じて動作します。`info` が `UNKNOWN` の場合は、停止します
{: rowspan=2} | -| traffic_light(real, `is_simulation = false`)
  • `info` は現在の情報
| 停止 | {: style="padding:0"} | -| 歩行者横断歩道と交通信号 (`is_simulation = *`)
  • `info` は現在の情報
| デフォルト |
  • `disable_yield_for_new_stopped_object` が true の場合、各サブ scene_module はモジュールインスタンス化後に検出された新しい歩行者を無視します。
  • `ignore_with_traffic_light` が true の場合、遮蔽検出はスキップされます。
| -| map_based_prediction(`is_simulation = *`)
  • `info` は現在の情報
| デフォルト | 歩行者信号が
  • RED の場合、周囲の歩行者は予測されません。
  • GREEN の場合、停止中の歩行者は予測されません。
| diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md index 6532b1fe6b621..d7c5c857f950a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md @@ -1,3 +1,4 @@ -# Behavior Velocity Planner (共通) +# Behavior Velocity Planner Common + +このパッケージは、`behavior_velocity_planner`ノードとモジュールで使用されるライブラリとしての共通関数を提供します。 -このパッケージはライブラリとして共通関数を提供し、`behavior_velocity_planner` ノードとモジュールで使用されます。 diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md index 9cf7441e7c34e..c53ff74e4ddaa 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/README.md @@ -1,19 +1,20 @@ -## 障害物回避 +## 車線逸脱 ### 役割 -`run_out` は、歩行者、自転車、オートバイなどの動的障害物に対して減速・停止を行うモジュールです。 +`run_out`は、歩行者、自転車、オートバイなどの動的障害物を減速・停止するためのモジュールです。 -![brief](./docs/run_out_overview.svg) +![概要](./docs/run_out_overview.svg) -### 起動タイミング +### アクティベーションタイミング -このモジュールは、`launch_run_out` が True になると起動します。 +このモジュールは`launch_run_out`がtrueになった場合にアクティブになります。 -### 内部動作 / アルゴリズム +### 内部処理/アルゴリズム #### フローチャート + ```plantuml @startuml title modifyPathVelocity @@ -43,108 +44,109 @@ stop @enduml ``` -#### パスを事前処理する +#### パスの前処理 -##### 自車に対する予測目標速度を計算する +##### 自車の想定目標速度の算出 -障害物との衝突時間をより正確に計算するために、自車パスの予測目標速度を計算します。 -予測目標速度は、現在の速度、現在の加速度、マップと外部APIによって指示された速度制限を使用して、[autoware velocity smootherモジュール](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/autoware_velocity_smoother)で計算されます。 +障害物との衝突時間をより正確に算出するために、自車のパスに対する想定目標速度を算出します。想定目標速度は、[autoware velocity smoother module](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/autoware_velocity_smoother)を使用して、現在の速度、現在の加速度、マップや外部APIによって指示された速度制限を使用して計算されます。 ![brief](./docs/calculate_expected_target_velocity.svg) -##### パスを延長する +##### パスの延長 -パスは目標地点の後の障害物を考慮するために、ベースリンクの長さの前方に延長されます。 +パスは、目標以降の障害物を考慮するために、ベースリンクから前方までの長さまで延長されます。 -##### 自車位置からパスをトリムする +##### 自車位置からのパスの切り取り -計算時間を削減するため、自車位置からある程度距離があるパスはトリムされます。 -トリム距離は`detection_distance`のパラメータで指定されます。 +計算時間を短縮するために、パスは自車位置から一定の距離まで切り取られます。切り取り距離は`detection_distance`パラメータで指定されます。 -#### 障害物を事前処理する +#### 障害物の前処理 -##### 動的障害物を抽象化したデータを作成する +##### 抽象化された動的障害物のデータの作成 -このモジュールは、障害物の抽象化されたダイナミックデータレイヤーを作成することによって、複数のタイプの障害物に対処できます。現在、抽象障害物データを作成するための3タイプの検出方法(Object、ObjectWithoutPath、Points)があります。 +このモジュールは、抽象化された動的障害物データレイヤーを作成することで、複数の種類の障害物を処理できます。現在、抽象化された障害物データを作成するために3種類の検出方法(Object、ObjectWithoutPath、Points)があります。 -###### 抽象化されたダイナミック障害物 +###### 抽象化された動的障害物 -障害物の抽象化されたデータには、次の情報が含まれています。 +抽象化された障害物データには次の情報が含まれます。 -| 名称 | 型 | 説明 | -| -------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | -| 位置 | `geometry_msgs::msg::Pose` | 障害物の位置 | -| 分類 | `std::vector` | 確率のある分類 | -| 形状 | `autoware_perception_msgs::msg::Shape` | 障害物の形状 | -| 予測経路 | `std::vector` | 信頼度のある予測経路。このデータには、最小速度と最大速度を使用するため、タイムステップがありません。 | -| 最小速度 (m/s) | `float` | 障害物の最小速度。パラメータ `dynamic_obstacle.min_vel_kmph` で指定されています。 | -| 最大速度 (m/s) | `float` | 障害物の最大速度。パラメータ `dynamic_obstacle.max_vel_kmph` で指定されています。 | +| 名称 | 型 | 説明 | +| ---------------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | +| pose | `geometry_msgs::msg::Pose` | 障害物の姿勢 | +| 分類 | `std::vector` | 確率ごとの分類 | +| 形状 | `autoware_perception_msgs::msg::Shape` | 障害物の形状 | +| 予想経路 | `std::vector` | 信頼度ごとの予想経路(最小速度と最大速度を使用するため、タイムステップはありません)。 | +| 最小速度 (m/秒) | `float` | 障害物の最小速度(パラメータ `dynamic_obstacle.min_vel_kmph` で指定)。 | +| 最大速度 (m/秒) | `float` | 障害物の最大速度(パラメータ `dynamic_obstacle.max_vel_kmph` で指定)。 | -オブジェクトの最大/最小速度をパラメータとして入力し、予想速度に十分なマージンを追加します。このパラメータは、[衝突検出](.#衝突検出)の多角形を作成するために使用されます。 +対象の最大速度と最小速度をパラメータとして入力し、想定される速度に十分な余裕を持たせます。このパラメータは、[衝突検出](.#Collision-detection)のポリゴンを作成するために使用されます。 -将来の作業: オブジェクトの共分散に基づいて予測速度から最大/最小速度を特定します。 +今後の作業: オブジェクトの推定速度と共分散から最大/最小速度を決定する ###### 3種類の検出方法 -私たちは異なる安全性と可用性の要件を満たすために3種類の検出方法を用意しています。その特性は下の表に示されています。 -`Object`の方法は、予測経路が車線上のオブジェクトのみを検出するため、高い可用性(誤検出が少ない)があります。しかし、認識が障害物を検出できなかったり、予測経路が不正になったりする場合には安全ではないことがあります。 -一方、`Points`の方法は、入力として点群を使用するため、高い安全性(誤認が少ない)があります。点は予測経路を持たないため、自車経路に垂直な方向に移動する経路が抽象化された動的障害物データの予測経路と見なされます。しかし、ポイントフィルタを適切に調整しなければ、多くのポイントを検出する可能性があり、可用性が非常に低くなります。 -`ObjectWithoutPath`は、`Object`と`Points`の中間に位置する特性を持っています。 - -| 手法 | 説明 | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -| オブジェクト | 衝突検出に予測パス付きのオブジェクトを使用する。 | -| ObjectWithoutPath | オブジェクトを使用するが、衝突検出に予測パスを使用しない。オブジェクトが指定された速度で車線に飛び出すことを前提にパスを置き換える。 | -| ポイント | 衝突検出にフィルタされたポイントを使用する。ポイントは車線に飛び出すことを前提にパスが作成される。ポイントは小さな円形の障害物とみなされる。 | - -## 自動運転ソフトウェアドキュメント +さまざまな安全および可用性の要件を満たすために、3種類の検出方法を用意しています。これらの特性を以下の表に示します。 +`Object`の手法は、予測パスが車線上に存在するオブジェクトのみを検出するため、可用性が高くなります (誤検出が少ない)。ただし、認識が障害物を検出できなかったり、予測パスが正しく生成できなかったりすると、安全に欠ける場合があります。 +一方、`Points`の手法は入力として点群を使用するため、安全性が高くなります (見逃しが少ない)。点は予測パスを持たないため、自己車両のパスの法線方向に移動するパスは、抽象化された動的障害物データの予測パスと見なされます。ただし、点のフィルタを適切に調整しないと多くの点を検出し、可用性が非常に低くなる可能性があります。 +`ObjectWithoutPath`の手法は、`Object`と`Points`の中間の特性を備えています。 -### 動的障害物 +| 方法 | 説明 | +| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Object | 衝突検出に予測パスを持つオブジェクトを使用します。 | +| ObjectWithoutPath | オブジェクトを使用しますが、予測パスは衝突検出に使用しません。指定された速度でオブジェクトが車線に飛び出すと仮定してパスを置き換えます。 | +| Points | 衝突検出にフィルタリングされたポイントを使用します。点は車線に飛び出すと仮定してパスが作成されます。点は円形の小障害物とみなされます。 | -#### パーティション外の障害物の除外 +##### パーティション外の障害物の除外 -このモジュールは、ガードレール、フェンス、壁などのパーティション外の障害物を除外できます。この機能を使用するには、パーティションの情報を持つレーンレットマップが必要です。この機能により、車線に飛び出す可能性が低い障害物による不要な減速を減らすことができます。`use_partition_lanelet`パラメータを使用して、この機能を使用するかどうかを選択できます。 +このモジュールは、ガードレール、フェンス、壁など、パーティションの外側の障害物を除外できます。 +この機能を使用するには、パーティションに関する情報を持つ Lanelet マップが必要です。 +この機能により、レーンに飛び出してくる可能性が低い障害物による不要な減速を減らすことができます。`use_partition_lanelet` パラメータでこの機能を使用するかどうかを選択できます。 -#### ラベルによる障害物の除外 +##### ラベルによる障害物の除外 -このモジュールは、`target_obstacle_types`パラメータで定義されたターゲット障害物にのみ作用します。このパラメータで指定されていないタイプの障害物が検出された場合、このモジュールによって無視されます。 +このモジュールは、`target_obstacle_types` パラメータで定義された対象の障害物にのみ作用します。同パラメータで指定されていないタイプの障害物が検出された場合、このモジュールによって無視されます。 -#### 自車走行経路上にある障害物の除外 +##### 自車位置にある障害物の除外 -障害物がすでに自車走行経路上に存在する場合、障害物は自車の経路に「割り込む」ことはできないため(このモジュールで処理しようとしている状況です)、自車のフットプリント経路上にすでに存在する障害物を除外すると有用な場合があります。`exclude_obstacles_already_in_path`パラメータを`true`に設定すると、このモジュールは`keep_obstacle_on_path_time_threshold`を超えて自車走行経路上にあると見なされる障害物を除外します。このモジュールは、各障害物の現在の位置に対して自車の最寄りの経路ポイントを考慮し、障害物と自車の左右の側の間の横方向距離を決定します。障害物がそのポーズに対して車の左端と右端の間に位置する場合、それは自車のフットプリント経路内にあると見なされ、除外されます。障害物が経路内にあるかどうかを検出するために使用される車両の仮想幅は、`ego_footprint_extra_margin`パラメータで調整できます。 +障害物が自車位置にある場合、障害物が自車のパスに「割り込む」ことはできないため(これはこのモジュールが処理しようとしている状況です)、車両のフットプリントパスにすでに存在する障害物を除外することが役立つ場合があります。`exclude_obstacles_already_in_path` パラメータを true に設定すると、このモジュールは `keep_obstacle_on_path_time_threshold` を超えて自車位置のパス上にすでに存在すると見なされる障害物を除外します。このモジュールは、障害物の現在の位置に対する自車の最も近いパスポイントを考慮し、障害物と自車の左右の間の横方向距離を決定します。障害物がそのポーズの車両の左右の極限内に位置する場合、障害物は自車のフットプリントパス内にあると見なされ、除外されます。障害物がパス内にあるかどうかを検出するために使用される車両の仮想幅は、`ego_footprint_extra_margin` パラメータで調整できます。 -#### 自車の「カットライン」を横断する障害物の除外 +##### 自車の「カットライン」を超える障害物の除外 -このモジュールは、自車の後部を横断する予測経路を持つ障害物を除外できます。予測経路が自車の「カットライン」を横断する場合に障害物を除外します。「カットライン」は自車に垂直で、自車のベースリンクを通過する仮想線分です。 +このモジュールは、自車の後ろ側を超える予想パスを持つ障害物を除外できます。障害物が自車の「カットライン」を超えて予想パスがある場合、障害物を除外します。「カットライン」は自車に垂直で、自車のベースリンクを通過する仮想線分です。 -`use_ego_cut_line`パラメータを`true`または`false`に設定することで、この機能を使用するかどうかを選択できます。線の幅は、`ego_cut_line_length`パラメータで調整できます。 +`use_ego_cut_line` パラメータを `true` または `false` に設定することで、この機能を使用するかどうかを選択できます。線の幅は `ego_cut_line_length` パラメータで調整できます。 #### 衝突検出 -#### 動的障害物との衝突検出 +##### 動的障害物との衝突検出 -自車走行経路に沿って、各`detection_span`で衝突検出を実行するポイントを決定します。 +自車パスに沿って、各 `detection_span` に対して衝突検出を実行するポイントを決定します。 -各ポイントまでの移動時間は、[自車予想ターゲット速度](.#Calculate-the-expected-target-velocity-for-ego-vehicle)から計算されます。 +各ポイントまでの移動時間は、[自車の期待ターゲット速度](.#Calculate-the-expected-target-velocity-for-ego-vehicle) から計算されます。 -各ポイントについて、自車のフットプリントポリゴンと障害物の予測位置のポリゴンを使用して衝突検出を実行します。障害物の予測位置は、最小速度、最大速度、およびその点に対する自車の移動時間で計算される範囲を持つ長方形またはポリゴンとして記述されます。動的障害物の入力タイプが`Points`の場合、障害物形状は小さな円筒として定義されます。 +各ポイントについて、自車のフットプリントポリゴンと障害物の予想位置のポリゴンを使用して衝突検出を実行します。 +障害物の予想位置は、最小速度、最大速度、およびポイントまでの自車の移動時間で計算された範囲を持つ長方形またはポリゴンとして記述されます。動的障害物の入力タイプが `Points` の場合、障害物の形状は小さな円柱として定義されます。 -衝突検出は2つのポリゴン間で計算されるため、複数のポイントが衝突ポイントとして検出されます。そのため、障害物と同じ側で自車に近いポイントを衝突ポイントとして選択します。 +衝突検出は 2 つのポリゴン間で計算されるため、複数のポイントが衝突点として検出されます。 +そのため、障害物と同じ側にある自車に近いポイントを衝突点として選択します。 #### 速度の挿入 -#### 障害物に対して減速する速度の挿入 +##### 障害物に対して減速するために速度を挿入 -衝突が検出された場合、選択された衝突ポイントからベースリンクから前方までの距離+停止マージンに停止点が挿入されます。ベースリンクから前方とは、ベースリンク(後輪軸の中央)と車の前面の間の距離を意味します。停止マージンは`stop_margin`パラメータで決定されます。 +衝突が検出された場合、選択された衝突点からベースリンクからフロント + 停止マージンの距離に停止点が挿入されます。ベースリンクからフロントとは、ベースリンク(後輪車軸の中心)と車のフロントの間の距離です。停止マージンは `stop_margin` パラメータによって決定されます。 #### 障害物に接近するための速度の挿入 -`Points`または`ObjectWithoutPath`の方法を選択すると、自車が障害物の前で停止し続ける場合があります。 +`Points` または `ObjectWithoutPath` の方法を選択した場合、自車は障害物の前で停止し続ける場合があります。 -`approaching.enable` のパラメータが true に設定されると、エゴは `state.stop_time_thresh` 秒間停止した後、障害物に接近します。接近時の最大速度は `approaching.limit_vel_kmph` のパラメータで指定できます。障害物に接近するかどうかの決定は、次の図のような単純な状態遷移によって決定されます。 +`approaching.enable` パラメータが true に設定されている場合、自車は `state.stop_time_thresh` 秒間停止した後、障害物に接近します。 +接近の最大速度は `approaching.limit_vel_kmph` パラメータで指定できます。 +障害物に接近するかどうかは、次の画像に示すような単純な状態遷移によって決定されます。 ![brief](./docs/insert_velocity_to_approach.svg) + ```plantuml @startuml hide empty description @@ -161,70 +163,72 @@ APPROACH --> APPROACH : Approach duration is less than threshold @enduml ``` -##### 指定ジャークおよび加速度極限を使用して速度を制限 +##### 特定のじゃくれと加速度限度で速度を制限 -急減速しすぎないように最大減速速度を計算します。詳細については、[閉塞スポットドキュメント](../autoware_behavior_velocity_occlusion_spot_module/#maximum-slowdown-velocity)を参照してください。 -この機能を使用するかどうかは `slow_down_limit.enable` パラメータで選択できます。 +過度に減速しないために、最大減速速度が計算されます。 +詳細については、[オクルージョン・スポットのドキュメント](../autoware_behavior_velocity_occlusion_spot_module/#最大減速速度)を参照してください。 +パラメータ`slow_down_limit.enable`によって、この機能を使用するかどうかを選択できます。 ### モジュールパラメータ -| パラメータ名 | タイプ | 説明 | -| ----------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `detection_method` | 文字列 | [-] 候補: Object, ObjectWithoutPath, Points | -| `target_obstacle_types` | 文字ベクトル | [-] モジュールが考慮する障害物タイプを指定します。障害物の分類タイプがここに記載されていない場合、無視されます。候補: ["PEDESTRIAN", "BICYCLE","MOTORCYCLE"] | -| `use_partition_lanelet` | ブール | [-] 分割laneletマップデータを使用するかどうか | -| `specify_decel_jerk` | ブール | [-] 自車が減速するときのジャークを指定するかどうか | -| `stop_margin` | double | [m] 車両はこのマージンを保持して停止できるよう減速します | -| `passing_margin` | double | [m] 障害物より先に予測位置にある車両の前方が障害物 + このマージンに達したときに車両の加速を開始します | -| `deceleration_jerk` | double | [m/s^3] 障害物のために停止するときに自車がこのジャークで減速します | -| `detection_distance` | double | [m] 自車の前方距離から障害物を検出します | -| `detection_span` | double | [m] 計算時間を短縮するために、この間隔で衝突を計算します | -| `min_vel_ego_kmph` | double | [km/h] 衝突までの時間を計算するための最小速度 | - -| パラメータ /detection_area | 型 | 説明 | -| -------------------------- | ------ | ---------------------------------- | -| `margin_ahead` | double | 検出エリア多角形の前方マージン [m] | -| `margin_behind` | double | 検出エリア多角形の後方マージン [m] | - -| パラメータ | タイプ | 説明 | -| ------------------------------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------- | -| `use_mandatory_area` | double | [-] 強制検出領域を使用するかどうか | -| `assume_fixed_velocity.enable` | double | [-] 有効な場合、障害物の速度は以下に指定した最小速度と最大速度の範囲内と見なされます | -| `assume_fixed_velocity.min_vel_kmph` | double | [km/h] 動的障害物の最小速度 | -| `assume_fixed_velocity.max_vel_kmph` | double | [km/h] 動的障害物の最大速度 | -| `diameter` | double | [m] 障害物の直径。ポイントから動的障害物を作成するために使用されます | -| `height` | double | [m] 障害物の高さ。ポイントから動的障害物を作成するために使用されます | -| `max_prediction_time` | double | [秒] この時間まで予測経路を作成します | -| `time_step` | double | [秒] 各パスステップのタイムステップ。パスを含まないポイントまたはオブジェクトから動的障害物を作成するために使用されます | -| `points_interval` | double | [m] この間隔で障害物ポイントをグループに分割し、最も近くにある横方向のポイントのみを検出します。ポイントメソッドでのみ使用されます | - -| パラメータ /approaching | タイプ | 説明 | -| ----------------------- | ------ | ------------------------------------- | -| `enable` | bool | [-] 停止後に接近を有効にするかどうか | -| `margin` | double | [m] 自車が障害物に接近する方法の距離 | -| `limit_vel_kmph` | double | [km/h] 停止後に接近するための速度制限 | - -| パラメータ/状態 | 型 | 説明 | -| ------------------------ | ------ | -------------------------------------------------------------------- | -| `stop_thresh` | double | [m/s] エゴが停止状態であると判定するための閾値 | -| `stop_time_thresh` | double | [sec] 停止状態から接近状態に移行するための停止時間閾値 | -| `disable_approach_dist` | double | [m] 障害物との距離がこの値より長い場合に接近状態を終了する | -| `keep_approach_duration` | double | [sec] 状態遷移のチャタリングを避けるため、接近状態をこの期間保持する | - -| パラメータ /slow_down_limit | 型 | 説明 | -| --------------------------- | ------ | -------------------------------------------------- | -| `enable` | bool | [-] 最大ジャークと加速度で速度を制限するかどうか | -| `max\_jerk` | double | [m/s^3] 安全なブレーキのための最小ジャーク減速度。 | -| `max\_acc` | double | [m/s^2] 安全なブレーキのための最小加速度減速度。 | - -| パラメーター /ignore_momentary_detection | タイプ | 説明 | -| ---------------------------------------- | ------ | ----------------------------------- | -| `enable` | bool | [-] 一時的な検出を無視するかどうか | -| `time_threshold` | double | [秒] この期間より短い検出を無視する | - -### 今後の拡張 / 未実装の部分 - -- 共分散から障害物の最小速度と最大速度を計算する -- ポリゴンオブジェクトとの衝突を検出する +| パラメータ | タイプ | 説明 | +| ------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `detection_method` | 文字列 | [-] 候補: Object、ObjectWithoutPath、Points | +| `target_obstacle_types` | 文字列の配列 | [-] モジュールで考慮される障害物タイプを指定します。ここで障害物分類タイプが記載されていない場合、無視されます。候補: ["PEDESTRIAN", "BICYCLE", "MOTORCYCLE"] | +| `use_partition_lanelet` | ブール型 | [-] パーティションされたレーンの地図データを使用するかどうか | +| `specify_decel_jerk` | ブール型 | [-] 自車が減速するときにジャークを指定するかどうか | +| `stop_margin` | double型 | [m] 自車は、この余裕をもって停止できるように減速します | +| `passing_margin` | double型 | [m] 障害物 + この余裕の分だけ、予測位置での自車の前方が障害物より先にあった場合、自車が加速し始めます | +| `deceleration_jerk` | double型 | [m/s^3] 障害物に対して停止する場合、自車は、このジャークで減速します | +| `detection_distance` | double型 | [m] 自車から障害物を検出する前方距離 | +| `detection_span` | double型 | [m] 計算時間を短縮するために、このスパンで衝突を計算します | +| `min_vel_ego_kmph` | double型 | [km/h] 衝突までの時間を計算するための最小速度 | + +| パラメータ /detection_area | 型 | 説明 | +| ------------------------- | ------ | ------------------------------------------------------------------------------------------------------ | +| `margin_ahead` | double | 検出領域ポリゴンの前方の余裕 [m] | +| `margin_behind` | double | 検出領域ポリゴンの後方の余裕 [m] | + +| パラメータ /dynamic_obstacle | 型 | 説明 | +|---|---|---| +| `use_mandatory_area` | double | [-] 強制検出エリアを使用するかどうか | +| `assume_fixed_velocity.enable` | double | [-] 有効な場合、障害物の速度は以下に指定する最小速度値と最大速度値の範囲内と仮定 | +| `assume_fixed_velocity.min_vel_kmph` | double | [km/h] 動的障害物の最小速度 | +| `assume_fixed_velocity.max_vel_kmph` | double | [km/h] 動的障害物の最大速度 | +| `diameter` | double | [m] 障害物の直径。点から動的障害物を作成するために使用 | +| `height` | double | [m] 障害物の高さ。点から動的障害物を作成するために使用 | +| `max_prediction_time` | double | [sec] この時間まで予測パスを作成 | +| `time_step` | double | [sec] 各パス ステップの時間刻み。パスを持たない点またはオブジェクトから動的障害物を作成するために使用 | +| `points_interval` | double | [m] 障害物点をこの間隔でグループに分割し、横方向の最寄りの点のみを検出する。Points 方式でのみ使用 | + +| パラメータ /approaching | 型 | 説明 | +| ----------------------- | ---- | ----------------------------------------------------- | +| `enable` | ブール | [-] 停止後に接近を有効にするかどうか | +| `margin` | double | [m] 自己車が障害物に近づく距離の程度 | +| `limit_vel_kmph` | double | [km/h] 停止後に接近するための速度の限界 | + +| パラメータ/状態 | タイプ | 説明 | +| ------------------------ | ------ | ---------------------------------------------------------------------------- | +| `stop_thresh` | double | [m/s] エゴが停止していると判断するしきい値 | +| `stop_time_thresh` | double | [sec] 停止時間しきい値、この時間を超えると接近状態に移行する | +| `disable_approach_dist` | double | [m] 障害物までの距離がこの値よりも大きい場合に接近状態を終了する | +| `keep_approach_duration` | double | [sec] 状態遷移のチャタリングを避けるため、接近状態をこの期間維持する | + +| パラメーター /slow_down_limit | 型 | 説明 | +| -------------------------- | ------ | ------------------------------------------------------------- | +| `enable` | bool | [-] 最大ジャークと加速度で速度を制限するかどうか | +| `max_jerk` | double | [m/s^3] 安全なブレーキのための最小ジャーク減速度 | +| `max_acc` | double | [m/s^2] 安全なブレーキのための最小加速度減速度 | + +| パラメーター /ignore_momentary_detection | 型 | 説明 | +| ----------------------------------------- | ----- | ----------------------------------------------------------------- | +| `enable` | bool | [-] 一時的な検出を無視するかどうか | +| `time_threshold` | double | [秒] この期間より短く続く検出を無視する | + +### 将来の機能拡張 / 未実装部分 + +- 共分散から障害物の最小速度と最大速度を計算 +- ポリゴンオブジェクトとの衝突を検出 - 障害物の予測経路が直線でない場合の処理 - - 現在、衝突チェックは障害物の予測経路が直線であるという仮定に基づいて計算されています + - 現在、衝突のチェックは障害物の予測経路が直線であるという仮定に基づいて計算されています + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md index 8433a0579bb04..e09ce7f2a296c 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/README.md @@ -2,50 +2,51 @@ ### 役割 -このモジュールは、速度バンプ規制要素が参照している場合、パスの関連部分の速度を計画します。 +このモジュールは、スピードバンプ規制要素が参照するパスの関連部分の速度を計画します。 ![speed_bump_design.svg](docs/speed_bump_design.svg) ### 起動タイミング -マネージャーは、基準パスを参照する速度バンプ規制要素がある場合に、速度バンプシーンモジュールを起動します。 +マネージャーは、基準パスを参照するスピードバンプ規制要素があると、スピードバンプシーンモジュールを起動します。 ### モジュールパラメーター -| パラメーター | 型 | 説明 | -| ------------------- | ------ | ----------------------------------------------- | -| `slow_start_margin` | double | 車両が減速帯手前で減速するための [m] マージン | -| `slow_end_margin` | double | 車両が減速帯通過後に加速するための [m] マージン | -| `print_debug_info` | bool | デバッグ情報を印刷するか否か | +| パラメータ | 型 | 説明 | +| ------------------- | ------ | --------------------------------------------------------- | +| slow_start_margin | double | スロープの手前で減速するために自車が必要とするマージン [m] | +| slow_end_margin | double | スロープ通過後に加速するために自車が必要とするマージン [m] | +| print_debug_info | bool | デバッグ情報を印刷するかどうか | #### 速度計算 -- 段差の高さおよび減速速度の限界を使用して一次方程式を作成する +- スピードバンプの高さの制限と減速速度を使用して一次方程式を作成する -| パラメータ | 型 | 説明 | -| ------------ | ------ | ------------------------------------ | -| `min_height` | double | [m] スピードバンプの低さの最低想定値 | -| `max_height` | double | [m] スピードバンプの高さの最高想定値 | -| `min_speed` | double | [m/s] 減速速度の最低想定値 | -| `max_speed` | double | [m/s] 減速速度の最高想定値 | +| パラメータ | 型 | 説明 | +| ------------ | ------ | -------------------------------------------- | +| `min_height` | double | [m] スピードバンプの最小高さの想定 | +| `max_height` | double | [m] スピードバンプの最大高さの想定 | +| `min_speed` | double | [m/s] 減速速度の最小速度の想定 | +| `max_speed` | double | [m/s] 減速速度の最大速度の想定 | ### 内部動作 / アルゴリズム -- lanelet2 マップから経路上にある減速帯規制要素を取得する -- 規制要素で指定された `speed_bump_height` に対する `slow_down_speed` を計算する、または減速帯アノテーションから `slow_down_speed` タグを読み取る(存在する場合) +- lanelet2マップから経路上の減速帯規制要素を取得 +- 規制要素で指定された`speed_bump_height`に基づいて`slow_down_speed`を計算、または減速帯アノテーションから利用可能な場合は`slow_down_speed`タグを読み取る ![speed_bump_vel_calc](docs/speed_bump_vel_calc.png) -**注:** 減速帯アノテーションで `slow_down_speed` タグが使用されている場合、減速帯の高さに対する速度の計算は無視されます。その場合、**[kph]** 単位で指定された `slow_down_speed` 値が使用されます。 +**注:** 減速帯アノテーションで`slow_down_speed`タグが使用されている場合は、減速帯の高さに基づいて速度を計算することは無視されます。そのような場合は、**[km/h]**で指定された`slow_down_speed`値が使用されます。 -- 経路と減速帯ポリゴンの交差点を取得する -- 交差点を基に `slow_start_point` と `slow_end_point` を計算し、それらを経路に挿入する -- `slow_start_point` または `slow_end_point` が与えられた(または計算された)オフセット値で挿入できない場合、任意の経路点が仮想的に `slow_start_point` または `slow_end_point` に割り当てられるかどうかを確認する +- 経路と減速帯ポリゴンの交点を取得 +- 交点を基にして`slow_start_point`と`slow_end_point`を計算し、それらを経路に挿入 +- 指定された/計算されたオフセット値を使用して`slow_start_point`または`slow_end_point`を挿入できない場合は、任意の経路点が`slow_start_point`または`slow_end_point`として仮想的に割り当てられるかどうかを確認 ![speed_bump_scenarios.svg](docs/speed_bump_scenarios.svg) -- `slow_start_point` または `slow_end_point` 間の経路点に `slow_down_speed` を割り当てる +- `slow_start_point`または`slow_end_point`間の経路点に`slow_down_speed`を割り当て -### 今後の作業 +### 将来の展望 + +- 論文[こちら](https://journals.sagepub.com/doi/10.1155/2014/736576)では、凹凸のモデリング方法が提案されています。単純に凹凸を円にフィットさせて、円の半径を計算する方法です。現時点の実装では、速度の計算は凹凸の高さに基づいていますが、将来はより現実的な結果を得られるこの方法を採用する予定です。 -- [こちら](https://journals.sagepub.com/doi/10.1155/2014/736576) の記事では、バンプのモデリング手法が提案されています。これは、バンプを円に当てはめて、半径を計算するという簡単なものです。最近のインプリメンテーションでは、速度の計算はバンプの高さだけに基づいていますが、将来はより現実的な結果を得るために、この手法を適用する予定です。 diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md index a4475ef990e7d..0f91bcc619e7e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md @@ -1,34 +1,35 @@ -## 停止線 +## ストップライン ### 役割 -このモジュールは、車両が停止線の手前で停止し、停止後に再発進できるように速度を計画します。 +このモジュールは、車両がストップラインの直前で停止し、停止後に走行を再開できるように速度を計画します。 -![停止線](docs/stop_line.svg) +![ストップライン](docs/stop_line.svg) -### 作動タイミング +### アクティベーションのタイミング -このモジュールは、ターゲット車線に停止線があるときに作動します。 +このモジュールは、ターゲット車線にストップラインがある場合にアクティベートされます。 ### モジュールパラメータ -| パラメータ | タイプ | 説明 | -| -------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| `stop_margin` | 倍精度 | 車両が停止線前に停止しようとするマージン | -| `stop_duration_sec` | 倍精度 | [秒] 自己車両が停止線の前で停止する時間パラメータ | -| `hold_stop_margin_distance` | 倍精度 | [メートル] 再始動防止パラメータ(アルゴリズムセクションを参照)。また、自己車両がこの距離より停止線に近い場合、自己状態は接近から停止に変わります | -| `use_initialization_stop_state` | ブール | 車両が停止線から離れる場合に接近状態に戻すかどうかを決定するフラグ | -| `show_stop_line_collision_check` | ブール | 停止線との衝突チェックのデバッグ情報を表示するかどうかを決定するフラグ | +| パラメータ名 | 型 | 説明 | +| ------------------------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `stop_margin` | double | 車両が停止線の前で停止しようとするマージン | +| `stop_duration_sec` | double | [s] 自車が停止線の前で停止するまでの時間パラメータ | +| `hold_stop_margin_distance` | double | [m] 再起動防止のパラメータ(アルゴリズムセクションを参照)。また、自車が停止線からこの距離内にいる場合、自車の状態はAPPROACHINGからSTOPPEDに変わる | +| `use_initialization_stop_state` | bool | 車両が停止線から移動した場合に、接近状態に戻るかどうかを決定するフラグ | +| `show_stop_line_collision_check` | bool | 停止線との衝突チェックのデバッグ情報を表示するかどうかを決定するフラグ | -### 内部動作 / アルゴリズム +### 内部構造 / アルゴリズム -- 地図情報から停止線を取得します。 -- 地図で定義された停止線と自車長からパス上に停止点を挿入します。 -- 停止点以降のパスの速度を 0[m/s] に設定します。 -- 車両が停止点で `stop_duration_sec` 秒間停止しているときに、挿入された停止速度を解除します。 +- マップ情報から停止線を取得します。 +- マップに定義された停止線と自車長から、パスの停止地点を挿入します。 +- 停止地点以降のパス速度を 0[m/s] に設定します。 +- 車両が停止地点で `stop_duration_sec` 秒間停止したら、挿入された停止速度を解除します。 #### フローチャート + ```plantuml @startuml title modifyPathVelocity @@ -69,31 +70,29 @@ stop @enduml ``` -このアルゴリズムは「セグメント」に基づいています。 -「セグメント」は2つのノードポイントで構成されています。`セグメント(i)`が存在すれば、`ノード(i)`と`ノード(i+1)`が存在すると仮定できるため、境界条件を削除するのに役立ちます。 +このアルゴリズムは `segment` に基づいています。 +`segment` は 2 つのノードポイントで構成されています。`segment(i)` が存在する場合、`node(i)` と `node(i+1)` が存在することが想定されるため、境界条件を削除するために役立ちます。 ![node_and_segment](docs/./node_and_segment.drawio.svg) -最初に、このアルゴリズムはリファレンスパスと停止線間の衝突を検出します。 -次に、「衝突セグメント」と「衝突ポイント」を取得できます。 +まず、このアルゴリズムはリファレンスパスと停止線との衝突を検出します。 +次に、`collision segment` と `collision point` を取得できます。 ![find_collision_segment](docs/./find_collision_segment.drawio.svg) -次に、「衝突ポイント」に基づいて、「post resampling」ポイントを特定のオフセット長まで後方ポイントを反復処理することによって「オフセットセグメント」を検出します。 -オフセットの長さは、`停止マージン`(パラメータ)+ `base_link~前方`(先頭ポーズを停止線に調整するため)です。 -次に、「オフセットセグメント」と「セグメント開始からのオフセット」を取得できます。 +次に、`collision point` に基づいて、特定のオフセット長までポイントを後方反復処理することで `offset segment` を検出します。オフセット長は `stop_margin`(パラメータ)+ `base_link to front`(ヘッドの姿勢を停止線に調整するため)です。次に、`offset segment` と `offset from segment start` を取得できます。 ![find_offset_segment](docs/./find_offset_segment.drawio.svg) -その後、「オフセットセグメント」と「オフセット」からオフセットポイントを計算できます。 これが「停止ポーズ」です。 +その後、`offset segment` と `offset` からオフセットポイントを計算できます。これが `stop_pose` になります。 ![calculate_stop_pose](docs/./calculate_stop_pose.drawio.svg) #### 再始動防止 -車両の制御性能が低下しているため、車両が動き始めると停止するために X メートル(例: 0.5 メートル)が必要な場合、車両は停止点を通過します。車両が動き始めて停止点に近づく(例: 0.3 メートル先)ときに、厳守する必要があります。 +車両の制御性能が低い場合、車両が動き始めると停止するために何メートル(例: 0.5 メートル)が必要になり、車両は近距離の停止点に接近するために厳守する必要がある停止位置を超過します(例: 0.3 メートル離れている)。 -このモジュールには、これらの不要な再始動を防ぐためのパラメータ `hold_stop_margin_distance` があります。車両がモジュールの停止点から `hold_stop_margin_distance` メートル以内で停止している場合(\_front_to_stop_line < hold_stop_margin_distance)、車両はモジュールの停止点に対してすでに停止していると判断し、車両が他の要因で停止している場合でも、現在の位置で停止し続けるように計画します。 +このモジュールには、これらの冗長な再始動を防ぐためのパラメータ `hold_stop_margin_distance` があります。車両がモジュールの停止点から `hold_stop_margin_distance` メートル以内(\_front_to_stop_line < hold_stop_margin_distance)で停止した場合、モジュールは車両がモジュールの停止点に対してすでに停止していると判断し、車両が他の要因によって停止した場合でも現在の位置で停止を維持するように計画します。
![example](docs/restart_prevention.svg){width=1000} @@ -102,10 +101,11 @@ stop
![example](docs/restart.svg){width=1000} -
hold_stop_margin_distance の外部
+
hold_stop_margin_distance の外側
![example](docs/keep_stopping.svg){width=1000} -
hold_stop_margin_distance の内部
+
hold_stop_margin_distance の内側
+ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md index 2329d1bb38679..7c4cd776c605e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/README.md @@ -1,76 +1,77 @@ ## テンプレート -`autoware_behavior_velocity_speed_bump_module` に基づく動作速度モジュールのテンプレート。 +autoware_behavior_velocity_speed_bump_module に基づいた動作速度モジュールのテンプレート。 -# Autoware 動作速度モジュールテンプレート +# Autoware 動作速度モジュール テンプレート ## `Scene` ### `TemplateModule` クラス -`TemplateModule` クラスは Autoware 動作速度プランナー内のシーンモジュールを作成するための基盤として機能します。モジュールの動作に必要なコアメソッドと機能を定義します。プレースホルダーコードは、特定の動作速度モジュールに合わせた実際のインプリメンテーションに置き換える必要があります。 +`TemplateModule` クラスは、Autoware 動作速度プランナー内でシーンモジュールを作成するための基盤として機能します。モジュールの動作に必要なコアメソッドと機能を定義しています。プレースホルダーコードを、特定の動作速度モジュールに合わせた実際の実装に置き換える必要があります。 -#### コンストラクタ +#### コンストラクター -- `TemplateModule` のコンストラクタはモジュールを作成するための重要なパラメータを受け取ります: `const int64_t module_id`, `const rclcpp::Logger & logger`, and `const rclcpp::Clock::SharedPtr clock`。これらのパラメータは、新しいモジュールを登録するときに `TemplateModuleManager` によって供給されます。特定のモジュールインプリメンテーションで必要に応じて、他のパラメータをコンストラクタに追加できます。 +- `TemplateModule` のコンストラクターはモジュールを作成するための必須パラメーターを受け取ります: `const int64_t module_id`, `const rclcpp::Logger & logger`, and `const rclcpp::Clock::SharedPtr clock`. これらのパラメーターは、新しいモジュールを登録するときに `TemplateModuleManager` によって供給されます。特定のモジュール実装で必要に応じて、他のパラメーターをコンストラクターに追加できます。 #### `modifyPathVelocity` メソッド -- `TemplateModule` クラスで定義されたこのメソッドは、特定の条件に基づいて入力パスの速度を変更することが期待されています。提供されるコードでは、テンプレートモジュールが実行されるときに一度だけ情報メッセージをログに記録します。 -- 速度変更の特定のロジックは、モジュールの要件に基づいてこのメソッドにインプリメントする必要があります。 +- `TemplateModule` クラスで定義されているこのメソッドは、特定の条件に基づいて入力パスの速度を変更すると想定されています。提供されているコードでは、テンプレートモジュールが実行されるときに一度情報メッセージを記録します。 +- 速度変更の具体的なロジックは、モジュールの要件に基づいて、このメソッド内で実装する必要があります。 #### `createDebugMarkerArray` メソッド -- `TemplateModule` クラスで定義されているこのメソッドは、デバッグマーカーのビジュアライゼーションを作成し、`visualization_msgs::msg::MarkerArray` として返します。提供されるコードでは、空の `MarkerArray` を返します。 +- `TemplateModule` クラスで定義されているこのメソッドは、デバッグマーカーを視覚化して `visualization_msgs::msg::MarkerArray` として返す役割を持ちます。提供されているコードでは、空の `MarkerArray` を返します。 - モジュールの機能に固有のデバッグマーカーを生成するロジックを実装する必要があります。 #### `createVirtualWalls` メソッド -- `createVirtualWalls` メソッドはシーンの仮想壁を作成し、`autoware::motion_utils::VirtualWalls` として返します。提供されるコードでは、空の `VirtualWalls` オブジェクトが返されます。 -- モジュールの要件に基づいて仮想壁を作成するロジックを実装する必要があります。 +- `createVirtualWalls` メソッドは、シーンの仮想壁を作成し、それらを `autoware::motion_utils::VirtualWalls` として返します。提供されているコードでは、空の `VirtualWalls` オブジェクトを返します。 +- モジュールの要件に基づいて、仮想壁を作成するロジックを実装する必要があります。 ## `Manager` -モジュールの管理は manager.hpp と manager.cpp で定義されます。管理は 2 つのクラスによって処理されます: +モジュールの管理は manager.hpp と manager.cpp で定義されています。管理は次の 2 つのクラスによって処理されます。 -- `TemplateModuleManager` クラスは、動作速度テンプレートシーンの管理と起動 (behavior_velocity_template_module/src/scene.cpp/hpp で定義) のコアロジックを定義します。親クラス `SceneModuleManagerInterface` から重要なマネージャー属性を継承します。 -- `TemplateModulePlugin` クラスは、`TemplateModuleManager` を動作速度プランナーのロジックに統合する方法を提供します。 +- `TemplateModuleManager` クラスは、behavior_velocity_template シーン (behavior_velocity_template_module/src/scene.cpp/hpp で定義) を管理して起動するためのコアロジックを定義します。親クラス `SceneModuleManagerInterface` から必須マネージャ属性を継承します。 +- `TemplateModulePlugin` クラスは、`TemplateModuleManager` を動作速度プランナーのロジックに統合するための方法を提供します。 ### `TemplateModuleManager` クラス -#### コンストラクタ `TemplateModuleManager` +#### コンストラクター `TemplateModuleManager` -- これは `TemplateModuleManager` クラスのコンストラクタであり、パラメータとして `rclcpp::Node` 参照を受け取ります。 +- これは `TemplateModuleManager` クラスのコンストラクターで、`rclcpp::Node` 参照をパラメーターとして受け取ります。 - メンバー変数 `dummy_parameter_` を 0.0 に初期化します。 #### `getModuleName()` メソッド -- このメソッドは `SceneModuleManagerInterface` クラスの仮想メソッドのオーバーライドです。 -- モジュールの名前である定数文字列へのポインタを返します。この場合、モジュール名を「テンプレート」として返します。 +- これは `SceneModuleManagerInterface` クラスの仮想メソッドをオーバーライドしたものです。 +- モジュールの名前である constant 文字列へのポインターを返します。この場合、「template」をモジュール名として返します。 #### `launchNewModules()` メソッド - これは `tier4_planning_msgs::msg::PathWithLaneId` 型の引数を取るプライベートメソッドです。 -- 与えられたパス情報 (PathWithLaneId) に基づいて新しいモジュールを起動する責任があります。このメソッドの実装には、`TemplateModule` クラスを使用して動作速度プランナーに固有のモジュールの初期化と設定が含まれます。 -- 提供されるソースコードでは、`module_id` を 0 に初期化し、同じ ID を持つモジュールがすでに登録されているかどうかを確認します。登録されていない場合、`TemplateModule` をモジュール ID で新しく登録します。`TemplateModuleManager` によって管理される各モジュールは一意の ID を持つ必要があることに注意してください。テンプレートコードは単一のモジュールを登録するため、`module_id` は単純さのために 0 に設定されます。 +- 提供されたパス情報 (PathWithLaneId) に基づいて新しいモジュールを起動します。このメソッドの実装には、`TemplateModule` クラスを使用して動作速度プランナー固有のモジュールを初期化して構成することが含まれます。 +- 提供されたソースコードでは、`module_id` を 0 に初期化し、同じ ID を持つモジュールがすでに登録されているかどうかを確認します。登録されていない場合は、`TemplateModule` を新しいモジュール ID で登録します。`TemplateModuleManager` によって管理される各モジュールは固有の ID を持つ必要があることに注意してください。テンプレートコードは単一のモジュールを登録するため、`module_id` は単純化するために 0 に設定されています。 #### `getModuleExpiredFunction()` メソッド - これは `tier4_planning_msgs::msg::PathWithLaneId` 型の引数を取るプライベートメソッドです。 -- このメソッドの実装は、モジュールの有効期限ステータスを確認するために使用できる関数を返すことが期待されています。 +- このメソッドの実装は、モジュールの有効期限ステータスを確認するために使用できる関数を返すことが期待されます。 -メソッド `launchNewModules()` と `getModuleExpiredFunction()` の具体的な機能は、ビヘイビア速度モジュールの詳細とその Autoware システム内での管理方法によって異なります。モジュールの要件に従ってこれらのメソッドを実装する必要があります。 +`launchNewModules()` および `getModuleExpiredFunction()` メソッドの具体的な機能は、行動速度モジュールの詳細と、それらが Autoware システム内でどのように管理されるかによって異なります。モジュールの要件に従ってこれらのメソッドを実装する必要があります。 ### `TemplateModulePlugin` クラス #### `TemplateModulePlugin` クラス -- このクラスは `PluginWrapper` から継承します。これは本質的に、動的にロードおよび管理できるプラグイン内への `TemplateModuleManager` クラスをラップします。 +- このクラスは `PluginWrapper` から継承します。これは基本的に `TemplateModuleManager` クラスをプラグイン内にラップし、動的にロードおよび管理できます。 ## `Example Usage` -次の例では、パスの各点を取得して 2 倍にします。つまり、速度を複製します。すべてのビヘイビア速度モジュールが実行された後、Velocity Smoother がパス速度をさらに変更することに注意してください。 +次の例では、パスの各点を取得して 2 倍します。速度を本質的に複製します。すべての動作速度モジュールが実行されると、速度スムージングによりパスの速度がさらに変更されることに注意してください。 + ```cpp bool TemplateModule::modifyPathVelocity( @@ -83,3 +84,4 @@ bool TemplateModule::modifyPathVelocity( return false; } ``` + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md index e16da19adaa96..b86ba8d42d873 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/README.md @@ -1,78 +1,76 @@ ### 信号機 #### 役割 - -車両が交差点に進入できるかどうかを信号機の状態によって判断し、必要に応じて停止時の速度を計画します。このモジュールは、開発者が挙動を設計しやすいルールベースの速度決定のために設計されています。信号機シーンに適した速度を生成します。 +交通信号の状態によって車両が交差点に進入可能かどうかを判断し、必要に応じて停止速度を計画します。このモジュールは、開発者が動作を設計しやすいルールベースの速度判断用に設計されています。信号機シーンに適切な速度を生成します。 ![brief](./docs/traffic_light.svg) ### 制限事項 +このモジュールにより、開発者は特定のルールを使用して交通信号モジュールでの停止/進行を設計できます。ルールベースの計画の特性により、アルゴリズムは交通信号を考慮したオブジェクト認識と知覚の精度に大きく依存します。また、このモジュールは交通信号シーンでの停止/進行のみを処理するため、交通状況に応じた急ごしらえや迅速な判断は今後の課題です。 -このモジュールにより、開発者は特定のルールを使用して、信号機モジュールでの停止/進行を設計できます。ルールベースの計画の性質により、このアルゴリズムは、信号機を考慮した物体検出と認識の精度に大きく依存します。また、このモジュールは信号機シーンでの停止/進行のみを処理します。したがって、交通状況に応じた急ぎ足または迅速な決定は今後の課題です。 - -#### 起動タイミング - -このモジュールは、自車レーンに信号機があるときに起動します。 +#### アクティベーションタイミング +このモジュールは、自車線に交通信号があるときにアクティブになります。 #### アルゴリズム +1. 地図情報から、ルートにマップされた交通信号と、交通信号に対応する停止線を取得します。 -1. 地図情報から、ルートにマップされた信号機と信号機に対応する停止線を取得します。 + - 対応する交通信号がこれまで見つからない場合、通過する信号として扱われます。 - - 対応する信号機信号が一度も検出されない場合、通過する信号として扱います。 + - 対応する交通信号が見つかったがタイムアウトした場合、停止する信号として扱われます。 - - 対応する信号機信号が検出されるがタイムアウトした場合、停止する信号として扱います。 +2. 交通信号認識結果のうち信頼性の最も高いものを利用し、その色が緑または対応する矢印信号でなかった場合、停止点を生成します。 -2. 信号機認識結果の中で最も信頼性の高いものを採用し、その色が緑または対応する矢印信号ではなかった場合、停止点を生成します。 - - - 停止信号を受信する経過時間が `stop_time_hysteresis` 未満の場合、通過する信号として扱います。この機能は、チャタリングを防ぐためのものです。 + - 停止信号を受信する経過時間が`stop_time_hysteresis`未満の場合、通過する信号として扱われます。この機能はチャタリングを防止するためのものです。 3. 車両の現在の速度が - - 2.0m/s 以上 ⇒ 通過判断(次のスライドの式を使用して) + - 2.0m/sより高速 ⇒ 通過判定(次のスライドの式を使用) - - 2.0m/s 未満 ⇒ 停止 + - 2.0m/sより低速 ⇒ 停止 -4. 車両が停止線までに停止できないと判断された場合、Autoware は次のいずれかの動作を選択します。 +4. 車両が停止線よりも先に停止できないと判断された場合、Autowareは次のいずれかの動作を選択します。 - - 黄信号中に停止線を「通過可能」 => 通過 + - 黄色のランプ中に停止線を「通過できる」⇒ 通過 - - 黄信号中に停止線を「通過不可」 => 緊急停止 + - 黄色のランプ中に停止線を「通過できない」⇒ 緊急停止 #### ジレンマゾーン ![brief](./docs/traffic_light_dilemma.svg) -- 黄信号線 +- 黄色ランプ線 - 黄信号中に車両が移動する距離を示す「黄信号線」と呼ばれます。 +イエローランプ内で車が移動する距離を示す「イエローランプ線」と呼ばれます。 - ジレンマゾーン - 次の条件を満たす「ジレンマゾーン」と呼ばれます。 +次の条件を満たす「ジレンマゾーン」と呼ばれます。 - - 車両は黄信号中に停止線を通過できません(黄信号線の右側)。 + - 車両は黄色のランプ中に停止線を通過できません。(イエローランプ線の右側) - - 車両は減速とジャーク限界内では停止できません(通過判断曲線の左側)。 + - 車両は減速とジャークの制限内で停止できません。(通過判定曲線の左側) - ⇒ 緊急停止(交通規則を守るために減速とジャークの制限を緩和) + ⇒緊急停止(交通規則を守るために減速とジャークの制限を緩和する) -「オプションゾーン」と呼ばれ、以下の条件を満たすものです。 +「任意停止エリア」と呼ばれ、次の条件を満たすエリアです。 -- 車両は黄色のランプ線(黄色いランプ線の左側)の間に停止線を通過できます。 -- 車両は減速およびジャークの限界で停止できます。(パス判定曲線の右側) ⇒ 停止(Autowareが安全な選択肢を選択します) +- 車両は黄色信号中に停止線を通過することができます(黄色信号線の左側)。 +- 車両は減速およびジャークの限界内で停止できます(パス判定曲線の右側)。 + ⇒停止(Autowareが安全側の選択肢を選択します) #### モジュールパラメータ -| パラメータ | 型 | 説明 | -| ---------------------- | ------ | ---------------------------------------------------------- | -| `stop_margin` | double | [m] 停止点手前の余裕 | +| パラメーター | 型 | 説明 | +| ---------------------- | ------ | -------------------------------------------------------------------- | +| `stop_margin` | double | [m] 停止地点手前の余裕 | | `tl_state_timeout` | double | [s] 検出された信号機の結果のタイムアウト | -| `stop_time_hysteresis` | double | [s] チャタリング防止のための停止計画の決定に関する時間閾値 | -| `yellow_lamp_period` | double | [s] 黄色のランプ時間 | -| `enable_pass_judge` | bool | [-] 通過判定を使用するかどうか | +| `stop_time_hysteresis` | double | [s] チャタリング防止のための停止計画の決定における時間閾値 | +| `yellow_lamp_period` | double | [s] 黄色点灯時間 | +| `enable_pass_judge` | bool | [-] 通過判定を使用するかどうか | #### フローチャート + ```plantuml @startuml title modifyPathVelocity @@ -113,6 +111,7 @@ endif @enduml ``` -##### 既知の限界 +##### 已知の制約 + +- 未定。 -- 現在確認中 diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md index 55d778375155a..9cd5ca722f421 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/README.md @@ -1,32 +1,33 @@ -### バーチャル交通信号機 +### バーチャルトラフィックライト #### 役割 -自動運転車は、以下のようなインフラと連携する必要があります。 +自動運転車両は、次のようなインフラストラクチャと連携する必要があります。 -- 倉庫のシャッター -- V2X対応信号機 -- 交差点の通信機器 -- フリート管理システム (FMS) +- 倉庫シャッター +- V2X対応の交通信号 +- 交差点の通信デバイス +- フリートマネジメントシステム (FMS) -例を以下に示します。 +以下の例を挙げます。 -1. V2X対応信号機による交通制御 +1. V2X対応の交通信号による交通制御 ![traffic_light](docs/V2X_support_traffic_light.png) -2. FMSによる複数の車両の交差点調整 +2. FMSによる複数の車両の交差点調整。 ![FMS](docs/intersection-coordination.png) -これらの機能は個別に実現することもできますが、ユースケースは次の3つの要素で一般化できます。 +それぞれの機能を個別に行うことも可能ですが、ユースケースはこの3つの要素で一般化できます。 -1. `start`: 車両が特定のゾーンに入った後、連携手順を開始します。 -2. `stop`: インフラから受信したステータスに従って、定義された停止線で停止します。 -3. `end`: 車両が終了ゾーンに到達した後、連携手順を完了します。これは、安定した通信範囲内で行う必要があります。 +1. `start`: 車両が特定のゾーンに入ると連携手順を開始します。 +2. `stop`: インフラストラクチャから受信したステータスに従い、所定の停止線で停止します。 +3. `end`: 車両が終了ゾーンに到達したら連携手順を完了します。これは、安定した通信範囲内で行う必要があります。 -このモジュールは、インフラからステータスを送受信し、連携結果の速度を計画します。 +このモジュールは、インフラストラクチャからステータスを送受信し、連携結果の速度をプランニングします。 ### システム構成図 + ```plantuml @startuml !theme cerulean-outline @@ -83,31 +84,34 @@ remote_controllable_traffic_light -[hidden]right-> warning_light @enduml ``` -プランナーと各インフラストラクチャは共通抽象メッセージを使用して相互に通信します。 +**Plannerとインフラストラクチャ間の通信** + +Plannerと各インフラストラクチャは、共通の抽象化メッセージを使用して通信します。 -- 各インフラストラクチャに対する特別な処理は拡張性がありません。インターフェイスは Autoware API として定義されています。 +- 各インフラストラクチャの特別な処理は拡張性に優れません。インターフェイスはAutoware APIとして定義されています。 - 各インフラストラクチャの要件はわずかに異なりますが、柔軟に対応します。 -FMS: 複数の車両が運用中で関連レーンの占有がある場合の交差点調整 +**FMS**:複数の車両が運行中で関連するレーンが占有されている場合の交差点調整 -- 自動シャッター: 接近時にシャッターを開き、離開時に閉じる -- 手動シャッター: ドライバーにシャッターを開閉してもらう。 -- リモートコントロール信号: ドライバーに進行方向に合わせて信号状態を変更してもらう。 -- 警告灯: 警告灯を作動させる。 +- 自動シャッター:接近時にシャッターを開け、離れる時に閉じる +- 手動シャッター:ドライバーにシャッターを開閉させる +- リモート制御信号:ドライバーに進行方向に合わせて信号状態を変更させる +- 警報灯:警報灯を点灯 -インフラストラクチャごとに異なる通信方法をサポートする +**異なるインフラストラクチャ向けの異なる通信方法のサポート** - HTTP - Bluetooth - ZigBee -地理的な場所ごとに異なるメタ情報を保有する +**各地理的位置に関する異なるメタ情報の保持** + +- 関連レーンID +- ハードウェアID +- 通信方法 -- 関連するレーン ID -- ハードウェア ID -- 通信方式 +**FMS**:フリート管理システム -FMS: フリートマネジメントシステム ```plantuml @startuml @@ -206,39 +210,38 @@ remote_controllable_traffic_light -[hidden]down-> warning_light #### モジュールパラメータ -## 自動運転ソフトウェア パラメータ - -| パラメータ | 型 | 説明 | -| ------------------------------- | ------ | ------------------------------------------------------ | -| `max_delay_sec` | double | [秒] コマンドの最大許容遅延 | -| `near_line_distance` | double | [m] 停車線を停止するために停止線までの距離のしきい値 | -| `dead_line_margin` | double | [m] このモジュールが停止線を挿入し続けるしきい値 | -| `hold_stop_margin_distance` | double | [m] 再起動防止のパラメータ(以降のセクションを参照) | -| `check_timeout_after_stop_line` | bool | [-] リンクが切断されたときに停止するタイムアウトの確認 | +| パラメータ | タイプ | 説明 | +| ------------------------------- | ------ | --------------------------------------------------------------- | +| `max_delay_sec` | double | [s] コマンドの最大許容遅延 | +| `near_line_distance` | double | [m] 停止線へのしきい値距離。自車の停止を確認。 | +| `dead_line_margin` | double | [m] このモジュールがこの停止線を挿入し続けるしきい値距離。 | +| `hold_stop_margin_distance` | double | [m] 再始動防止のパラメータ。(次のセクションを参照) | +| `check_timeout_after_stop_line` | bool | [-] リンクが切断されたときの停止へのタイムアウト確認。 | #### 再始動防止 -車両の制御性能が低下するために、車両の動き始め時に停止するのに X メートル(例: 0.5 メートル)を要する場合、車両は停止点に近づこうとして動き始めるときは厳守すべき停止位置を超過します(例: 0.3 メートル距離)。 +車両の制御性能が低いため、車両が動き始めてから停止するまで X メートル(例:0.5 メートル)が必要な場合、車両は停止ポイントを超えて移動して、停止点に近づきます(例:0.3 メートル離れます)。 -このモジュールには、これらの余分な再始動を防止するためのパラメータ `hold_stop_margin_distance` があります。車両がモジュールの停止位置(\_front_to_stop_line < hold_stop_margin_distance)から `hold_stop_margin_distance` メーター以内に停止した場合、モジュールは車両がモジュールの停止位置で既に停止していると判断し、他の要素により車両が停止した場合にも、現在の位置で停止し続けることを計画します。 +このモジュールには、これらの不要な再始動を防ぐためにパラメータ `hold_stop_margin_distance` があります。車両がモジュールの停止ポイントから `hold_stop_margin_distance` メートル以内で停止した場合(\_front_to_stop_line < `hold_stop_margin_distance`)、モジュールは車両がモジュールの停止ポイントで既に停止していると判断し、他の要因で車両が停止した場合でも、現在の位置で停止を維持するように計画します。
- ![例](docs/restart_prevention.svg){width=1000} + ![example](docs/restart_prevention.svg){width=1000}
パラメータ
- ![例](docs/restart.svg){width=1000} -
hold_stop_margin_distanceの外側
+ ![example](docs/restart.svg){width=1000} +
hold_stop_margin_distance の外部
- ![例](docs/keep_stopping.svg){width=1000} -
hold_stop_margin_distanceの内側
+ ![example](docs/keep_stopping.svg){width=1000} +
hold_stop_margin_distance の内部
#### フローチャート + ```plantuml @startuml !theme cerulean-outline @@ -286,9 +289,9 @@ stop @enduml ``` -#### マップフォーマット +#### 地図フォーマット -- 急ブレーキを回避するため、仮想信号機の始点と停止線の距離は、始点通過時の速度が$v_0$で、Autowareで定義された最小加速度が$a_{\mathrm{min}}$と仮定して計算される$l_{\mathrm{min}}$よりも長くなければなりません。 +- 急ブレーキを回避するため、仮想交通信号のスタートラインとストップラインの間の長さは、スタートライン通過時の速度が $v_0$、Autoware で定義された最小加速度が $a_{\mathrm{min}}$ の場合、次のように計算される $l_{\mathrm{min}}$ よりも長くなければなりません。 $$ \begin{align} @@ -296,6 +299,7 @@ l_{\mathrm{min}} = -\frac{v_0^2}{2 a_{\mathrm{min}}} \end{align} $$ -#### 制限事項 +#### 既知の制限 - 未定 + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md index c4007a704ccfd..8909ca6c6989e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/README.md @@ -1,5 +1,6 @@ -## 歩道 +## 歩行者通路 -### 役割 +### 機能 + +このモジュールは、自車が私有地に出入りするために歩行者通路(横断歩道を含む)を渡る前に停止するかどうかを判断します。 -このモジュールは、自車が私有地に進入または離脱するために横断歩道を含む横断施設を横断する前に停止することを決定します。 diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md index f50618902bf54..c52d27a0bf502 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/README.md @@ -1,92 +1,91 @@ -## 動的障害物停止 +## 動的障害物回避 ### 役割 -`dynamic_obstacle_stop` は、自律走行車がダイナミックオブジェクトの _直近の_ パスに進入することを防止するモジュールです。 +`dynamic_obstacle_stop` モジュールは、自律走行車が動的オブジェクトのすぐ側の経路上に入るのを阻止します。 -オブジェクトの _直近の_ パスとは、一定の速度と向きを想定した場合に、そのオブジェクトが特定の時間枠内に移動する領域のことです。 +オブジェクトのすぐ側の経路とは、そのオブジェクトが一定の速度と進行方向で走行した場合、所定の時間内に通過する領域です。 ![rviz の例](docs/dynamic_obstacle_stop_rviz.png) -### 起動タイミング +### アクティベーション タイミング -このモジュールは、モーションプランニング起動ファイルで起動パラメータ `launch_dynamic_obstacle_stop_module` が true に設定されている場合に起動します。 +このモジュールは、モーション プランニング起動ファイルで起動パラメーター `launch_dynamic_obstacle_stop_module` が true に設定されている場合にアクティベートされます。 -### 内部構造/アルゴリズム +### 仕組み / アルゴリズム -このモジュールは、自律走行車の軌跡とオブジェクトの直近のパスが衝突する位置に停止点を挿入します。 -このモジュールの全体的な流れは、次の 4 つのステップで要約できます。 +このモジュールは、自動運転車の軌跡とオブジェクトのすぐ側の経路が衝突する地点に停止ポイントを挿入します。 +全体的なモジュールのフローは、以下の 4 つのステップでまとめられます。 1. 動的オブジェクトのフィルタリング -2. 動的オブジェクトの直近のパス矩形の計算 -3. 自律走行車が直近のパス矩形と衝突する、最も早い衝突箇所の検出 -4. 衝突前に停止点を挿入 +2. 動的オブジェクトのすぐ側の経路の長方形の計算 +3. 自動運転車がすぐ側の経路の長方形と衝突する最も早い衝突の検出 +4. 衝突前に停止ポイントを挿入する -これらの 4 つのステップに加えて、2 つのメカニズムが、このモジュールの停止点をより安定させるために用意されています。ヒステリシスと決定期間のバッファです。 +これらの 4 つのステップに加えて、このモジュールの停止ポイントをより安定させるために、2 つのメカニズムが用意されています。ヒステリシスとディシジョン期間バッファーです。 -`hysteresis` パラメータは、前のイテレーションで停止点が既に挿入されていた場合に使用され、動的オブジェクトがモジュールで使用するための自律走行車の軌跡に十分近いとみなされる範囲を拡大します。 +`hysteresis` パラメーターは、前のイテレーションで停止ポイントが挿入されていた場合に使用され、モジュールで使用するのに自動運転車の軌跡に十分近いと見なされる動的オブジェクトの範囲を拡大します。 #### 動的オブジェクトのフィルタリング ![フィルタリングの例](docs/DynamicObstacleStop-Filtering.drawio.svg) -オブジェクトは、次の条件をすべて満たす場合にのみモジュールによって考慮されます。 +モジュールでは、オブジェクトは、以下のすべての条件を満たす場合にのみ考慮されます。 -- 車両である(歩行者は無視する) -- `minimum_object_velocity` パラメータで定義されている以上の速度で走行している -- 自律走行車の現在位置にあまりにも近くない -- 回避不可能ではない(`ignore_unavoidable_collisions` パラメータが `true` に設定されている場合のみ) -- 自律走行車の軌跡に近い +- 車両である(歩行者は無視される)。 +- `minimum_object_velocity` パラメーターで定義された速度より高速で走行している。 +- 自動運転車の現在の位置に近づきすぎていない。 +- 回避不可能ではない(`ignore_unavoidable_collisions` パラメーターが `true` に設定されている場合のみ)。 +- 自動運転車の軌跡に近い。 -自律走行車が停止しても衝突が発生する(オブジェクトが直線走行を続けると仮定した場合)ため、オブジェクトは自律走行車の方向に走行している場合に回避不可能とみなされます。 +オブジェクトは、自動運転車の軌跡からの横方向距離が、自動運転車の幅とオブジェクトの幅(`extra_object_width` パラメーターを含む)の半分を足したしきい値パラメーター `minimum_object_distance_from_ego_trajectory` より小さい場合に、十分に近いと見なされます。また、前回のイテレーションで停止ポイントが挿入されていた場合、`hysteresis` パラメーターの値が最小距離に追加されます。 -最後の条件では、自律走行車の軌跡からのオブジェクトの側方距離が、`minimum_object_distance_from_ego_trajectory` パラメータのしきい値に自律走行車とオブジェクトの幅の半分(`extra_object_width` パラメータを含む)を足した値未満の場合に、オブジェクトは十分に近いとみなされます。 -さらに、前のイテレーションで停止点が挿入されていた場合は、`hysteresis` パラメータの値が最小距離に追加されます。 +#### すぐ側の経路の長方形の計算 -#### 直近のパス矩形の計算 +![すぐ側の経路の例](docs/DynamicObstacleStop-ImmediatePaths.drawio.svg) -![直近のパス例](docs/DynamicObstacleStop-ImmediatePaths.drawio.svg) +考慮される各オブジェクトについて、そのすぐ側の経路を表す長方形が作成されます。 +長方形の幅はオブジェクトの幅に `extra_object_width` パラメーターを加えたもので、長さはオブジェクトの現在の速度に `time_horizon` を掛けたものです。 -考慮される各オブジェクトについて、その _直近の_ パスを表す矩形が作成されます。 -矩形の幅は、オブジェクトの幅に `extra_object_width` パラメータを加えたもので、長さは、オブジェクトの現在の速度に `time_horizon` を掛けたものです。 +#### 最も早い衝突の検出 -#### 最も早い衝突箇所の検出 +![最も早い衝突の例](docs/DynamicObstacleStop-Collision.drawio.svg) -![最も早い衝突箇所の例](docs/DynamicObstacleStop-Collision.drawio.svg) +次に、これらの自己軌道フットプリントと、以前に計算された即時パス矩形の交差点を計算します。 +交差点は、オブジェクトが自己に向かっていない場合は無視されます。つまり、オブジェクトと軌跡点の間の絶対角度が $\frac{3 \pi}{4}$ より大きくなります。 -次に、これらの自車軌跡フットプリントと、以前に計算された直近経路長方形との交差点を計算します。 -交差点は、オブジェクトが自車に向かって走行していない場合(つまり、オブジェクトと軌跡点の間の絶対角度が $\frac{3 \pi}{4}$ より大きい場合)無視されます。 +**自己軌跡**に投影されたときにアーク長が最も小さい衝突点は、最終停止点を計算するために使用されます。 -自車軌跡に投影したときの距離が最も短い衝突点は、最終停止点の計算に使用されます。 - -#### 停止点を挿入する +#### 停止点を挿入 ![停止点の例](docs/DynamicObstacleStop-StopPoint.drawio.svg) -停止点を挿入する前に、挿入可能な軌跡距離範囲を計算します。 -最小値は、車両の加速度とジャークの制約を満たすように計算されます。 -前のモジュール反復に停止点が挿入された場合、その距離の範囲が最大値として使用されます。 -最後に、停止点の距離の範囲は、以前に検出された衝突点の距離の範囲から「`stop_distance_buffer`」と自車車両の車軸方向のオフセットを減じたもので、最小値と最大値の間でクリッピングされます。 +停止点を挿入する前に、挿入できる軌跡アーク長の範囲を計算します。 +最低値は、車両の加速度とジャークの制約を満たすように計算されます。 +モジュールの前回の反復で停止点が挿入された場合、そのアーク長が最大値として使用されます。 +最後に、 +停止点アーク長は、以前に見つけた衝突点のアーク長から `stop_distance_buffer` と自己車両の縦方向オフセットを引いた値であり、最小値と最大値の範囲でクランプされます。 #### 持続時間バッファ -ノイズの多い認識によるチャタリングを防ぐために、2 つの持続時間パラメータが使用されます。 +ノイズの多い知覚によるチャタリングを防ぐために、2つの持続時間パラメータが使用されます。 -- `add_stop_duration_buffer` は、対応する停止点が追加されるオブジェクトとの連続衝突検出の持続時間を表します。 -- `remove_stop_duration_buffer` は、対応する停止点が削除されるオブジェクトとの衝突の非検出の連続持続時間を表します。 +- `add_stop_duration_buffer`は、対応する停止点が追加されるオブジェクトとの連続衝突検出の持続時間を表します。 +- `remove_stop_duration_buffer`は、対応する停止点が削除されるオブジェクトとの連続衝突の非検出の持続時間を表します。 -タイマーと衝突点は、各ダイナミックオブジェクトに対して独立して追跡されます。 +タイマーと衝突点は、各動的オブジェクトごとに独立して追跡されます。 ### モジュールパラメータ -| パラメーター | タイプ | 説明 | -| --------------------------------------------- | ------ | ------------------------------------------------------------------------------------------ | -| `extra_object_width` | double | [m] 検出したオブジェクト周辺の余分な幅 | -| `minimum_object_velocity` | double | [m/s] この値以下の速度のオブジェクトは無視されます | -| `stop_distance_buffer` | double | [m] 停止点と衝突点の間に追加する余分な距離 | -| `time_horizon` | double | [s] 衝突チェックに使用される時間的視野 | -| `hysteresis` | double | [m] 衝突が検出されると、このヒステリシスが衝突検出に使用されます | -| `add_stop_duration_buffer` | double | [s] 停止の判断が追加される前に、衝突が継続的に検出されなければならない時間 | -| `remove_stop_duration_buffer` | double | [s] 衝突が検出されなくなってから停止の判断が削除されるまでの時間 | -| `minimum_object_distance_from_ego_trajectory` | double | [m] 衝突を考慮する場合の、自己軌跡とオブジェクトの足跡間の最小距離 | -| `ignore_unavoidable_collisions` | bool | [-] trueの場合、停止では回避できない衝突を無視します(障害物が直進し続けると仮定した場合) | +| パラメータ | タイプ | 説明 | +| ---------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------- | +| `extra_object_width` | double | 検出されたオブジェクトの周りの[m]余分な幅 | +| `minimum_object_velocity` | double | この値より低い速度のオブジェクトは無視されます | +| `stop_distance_buffer` | double | 停止点と衝突点の間に追加される[m]の余分な距離 | +| `time_horizon` | double | 衝突チェックに使用される[s]の時系列 | +| `hysteresis` | double | 衝突が検出されると、衝突検出にこのヒステリシスが使用されます | +| `add_stop_duration_buffer` | double | 停止の決定が追加されるまで、衝突が継続的に検出されなければならない[s]の期間 | +| `remove_stop_duration_buffer` | double | 衝突が検出されなくなり、停止の決定が削除される[s]の期間 | +| `minimum_object_distance_from_ego_trajectory` | double | 衝突の対象とするために、自己のフットプリントとオブジェクトのフットプリント間の最小距離[m] | +| `ignore_unavoidable_collisions` | bool | true の場合、停止では回避できない衝突を無視する(障害物が直進を継続すると想定) | + diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md index c09acc7445c6f..cf165b423b185 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/README.md @@ -1,242 +1,169 @@ -# 障害物速度制限機能 +# 障害物速度制御 ## 目的 -このノードは、障害物の方向へ走行している際の速度を制限します。 -例えば、カーブでガードレールに接近しているときに速度を下げることができます。 +このノードは、障害物に向かって走行しているときの速度を制限します。 +たとえば、カーブでガードレールに近づいたときに速度を低下させることができます。 -## 自動運転ソフトウェアドキュメント +| このノードを使用しない | このノードを使用する | +| -------------------------------------------------|:----------------------------------------------------- | +| ![obstacle_velocity_limiter_off](./media/ovl_off.png) | ![obstacle_velocity_limiter_on](./media/ovl_on.png) | -### **障害物速度制限器** +## 内部構造/アルゴリズム -障害物速度制限器ノードは、障害物との衝突を回避するために車両の速度を制限します。このノードを有効にすると、車両は障害物との衝突を回避するために次の操作を行います。 +パラメータ`min_ttc`(最小衝突時間)を使用して、ノードは、新しい制御入力が`min_ttc`の時間の間なくなっても、障害物との衝突が発生しないような速度制限を設定します。 -- 障害物との距離が指定されたしきい値よりも小さい場合、車両の速度を制限します。 -- 障害物が車両の走行経路にある場合、車両の経路を再計画します。 +これを実現するために、自車位置の各時点において、軌跡を時系列でシミュレートして、それに対応するフットプリントを作成します。 +フットプリントが障害物と衝突する場合、軌跡のポイントでの速度が、新しいシミュレートされたフットプリントが衝突しないように低下されます。パラメータ`simulation.distance_method`により、正確な距離計算と、単純なユークリッド距離を使用した安価な近似との切り替えが可能です。 -障害物速度制限器ノードは、次のコンポーネントを使用して障害物との衝突を検出します。 +パラメータ`simulation.model`では、車両のモーションをシミュレートするための2つのモデルを選択できます:単純な粒子モデルと、より複雑な自転車モデルです。 -- **自車位置** -- **障害物検出** -- **経路計画** +#### 粒子モデル -障害物速度制限器ノードは、障害物との衝突を回避するために次のコンポーネントを使用して車両の速度を制限します。 - -- **速度計画** -- **速度制御** - -### **機能** - -障害物速度制限器ノードには、次の機能があります。 - -- 障害物との衝突を回避するための車両速度の制限 -- 障害物との衝突を回避するための車両経路の再計画 -- 障害物との衝突を回避するための車両速度の`post resampling` - -### **設定** - -障害物速度制限器ノードは以下のパラメータで設定できます。 - -- 障害物との衝突回避のための最小距離しきい値 -- 車両の速度を制限するための最大速度 -- 車両の速度を`post resampling`するための間隔 - -### **使用方法** - -障害物速度制限器ノードを使用するには、次の手順に従います。 - -1. Autowareの「障害物速度制限器」ノードを起動します。 -2. 障害物との衝突回避のための最小距離しきい値、車両の速度を制限するための最大速度、車両の速度を`post resampling`するための間隔を設定します。 -3. 「障害物速度制限器」ノードを車両の他のコンポーネントに接続します。 - -### **例** - -障害物速度制限器ノードは、次のようなシナリオで使用できます。 - -- 車両が他の車両や歩行者に近づきすぎている場合 -- 車両が交差点に近づきすぎている場合 -- 車両が障害物のある道路を走行している場合 - -### **制約事項** - -障害物速度制限器ノードには、次の制約事項があります。 - -- 障害物を正確に検出できない場合があります。 -- 車両の速度を制限できない場合があります。 -- 車両の経路を再計画できない場合があります。 - -### **トラブルシューティング** - -障害物速度制限器ノードに問題がある場合は、次の手順に従います。 - -1. 障害物との衝突回避のための最小距離しきい値が適切に設定されていることを確認します。 -2. 車両の速度を制限するための最大速度が適切に設定されていることを確認します。 -3. 車両の速度を`post resampling`するための間隔が適切に設定されていることを確認します。 -4. 障害物速度制限器ノードが車両の他のコンポーネントに適切に接続されていることを確認します。 - -## 内部機構/アルゴリズム - -パラメータ`min_ttc`(衝突までの最小時間)を使用し、ノードは速度制限を設定して、`min_ttc`の期間、新しい制御入力がなくても障害物との衝突が発生しないようにします。 - -これを達成するために、各軌跡のポイントで自車位置が時間的にシミュレートされ、対応するフットプリントを作成します。 -フットプリントが障害物と衝突した場合、軌跡のポイントの速度が低減されて、新しいシミュレートされたフットプリントが衝突しなくなります。パラメータ`simulation.distance_method`により、正確な距離計算と、単純なユークリッド距離を使用したより安価な近似との切り替えが可能になります。 - -パラメータ`simulation.model`により、車両の動作をシミュレートするための2つのモデルが選択できます。簡単なパーティクルモデルと、より複雑な自転車モデルです。 - -#### パーティクルモデル - -パーティクルモデルは、軌跡のポイントにおける車両の一定の進行方向と速度を使用して、将来の動作をシミュレートします。 -シミュレートされた前方動作は直線で、フットプリントは長方形になります。 +粒子モデルは、軌跡のポイントでの車両の一定の進行方向と速度を使用して、将来のモーションをシミュレートします。 +シミュレートされた前進運動は直線に対応し、フットプリントは長方形に対応します。 ##### フットプリント -長方形のフットプリントは、シミュレートされた前方動作に平行で、車両の幅の半分だけ離れた2本の線で形成されます。 +長方形のフットプリントは、シミュレートされた前進運動に平行な2本の線と、車両幅の半分を考慮した距離から構築されます。 ![particle_footprint_image](./media/particle_footprint.png) ##### 距離 -衝突点がフットプリント内にある場合、次の図に示すようにして距離が計算されます。 +衝突点がフットプリント内にある場合、距離は次の図に示すように計算されます。 ![particle_collision_distance_image](./media/particle_distance.png) #### 自転車モデル -自転車モデルは、軌跡のポイントにおける車両の一定の進行方向、速度、およびステアリングを使用して、将来の動作をシミュレートします。 -シミュレートされた前方動作は、ステアリングに関連付けられた曲率円の周囲の円弧になります。 -ステアリングの不確実性は、`simulation.steering_offset`パラメータを使用して導入できます。このパラメータは、左端のステアリングから右端のステアリングまでの動作の範囲を生成します。 -これにより、同じ軌跡のポイントから始まる3本の曲線が生成されます。 -パラメータ`simulation.nb_points`は、これらの線の精度を調整するために使用され、最小の`2`は直線になり、値が高くなると曲線の精度が向上します。 +自転車モデルは、軌跡のポイントでの車両の一定の進行方向、速度、およびステアリングを使用して将来のモーションをシミュレートします。 +シミュレートされた前進運動は、ステアリングに関連する曲率円の周りの弧に対応します。ステアリングの不確かさは`simulation.steering_offset`パラメータで導入でき、これにより左端から右端のステアリングの動作範囲が生成されます。これにより、同じ軌跡のポイントから始まる3本の曲線が得られます。 +パラメータ`simulation.nb_points`を使用して、これらの線の精度を調整します。最小`2`は直線を生成し、値が大きいほど曲線の精度が高くなります。 -デフォルトでは、軌跡メッセージに含まれるステアリング値が使用されます。 -パラメータ`trajectory_preprocessing.calculate_steering_angles`を`true`に設定すると、これらの値を再計算できます。 +デフォルトでは、軌跡メッセージに含まれるステアリング値が使用されます。`trajectory_preprocessing.calculate_steering_angles`パラメータを`true`に設定すると、これらの値を再計算できます。 ##### フットプリント -自転車モデルのフットプリントは、シミュレートされた左および右の動作に平行で、車両の幅の半分だけ離れた線で作成されます。 -さらに、中央シミュレートされた動作の終点の左と右にある2つの点が使用されて、多角形が完成されます。 +自転車モデルのフットプリントは、左と右のシミュレートされたモーションに平行な線と、車両幅の半分を考慮した距離から作成されます。 +さらに、中央シミュレートされたモーションの終点の左右の2つの点が使用されて、ポリゴンが完成します。 ![bicycle_footprint_image](./media/bicycle_footprint.png) ##### 距離 -衝突点までの距離は、軌跡のポイントと衝突点を通過する曲率円を求めることによって計算されます。 +衝突点までの距離は、軌跡のポイントと衝突点を通過する曲率円を見つけることにより計算されます。 ![bicycle_collision_distance_image](./media/bicycle_distance.png) ### 障害物検出 -レーンレットマップは常に障害物をチェックしていますが、他のソースはパラメーター `obstacles.dynamic_source` を使用して切り替えられます。 +車線レットマップは常に障害物を確認していますが、別のソースはパラメータ「obstacles.dynamic_source」を使用して切り替えられます。 -フットプリントと交差する障害物を効率的に探すために、それらは R-ツリー ([https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost**geometry**index\_\_rtree.html](https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html)) に格納されます。 -2 つのツリーが使用されます。1 つは障害物点用で、1 つは障害物ラインストリング用です (R-ツリーを簡素化するために、ラインストリングはセグメントに分解されます)。 +フットプリントと交差する障害物を効率的に検出するために、障害物ポイントは [R-tree](https://www.boost.org/doc/libs/1_80_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree.html) に保存されています。 +障害物ポイント用の木と障害物のラインストリング用の木(R-treeを単純化するためにセグメントに分解済み)の 2 つが使用されます。 -#### オブスタクルマスク +#### 障害物マスク ##### 動的障害物 -他の車などの移動障害物は、このモジュールでは考慮されません。 -これらの障害物は知覚モジュールで検出され、ポリゴンとして表現されます。 -これらのポリゴン内の障害物は無視されます。 +他の車などの移動障害物は、このモジュールで考慮されるべきではありません。 +これらの障害物は認識モジュールによって検出され、多角形として表されます。 +これらの多角形内の障害物は無視されます。 -パラメーター `obstacles.dynamic_obstacles_min_vel` よりも速度が高い動的障害物のみが削除されます。 +パラメータ ``obstacles.dynamic_obstacles_min_vel`` を超える速度を持つ動的障害物のみが削除されます。 -遅延や精度のエラーに対処するために、パラメーター `obstacles.dynamic_obstacles_buffer` でポリゴンを拡大できます。 +遅延と精度エラーに対処するために、多角形はパラメータ ``obstacles.dynamic_obstacles_buffer`` で拡大できます。 -##### 安全範囲外の障害物 +##### セーフティーエンベロープ外の障害物 -パラメーター `obstacles.filter_envelope` が `true` に設定されている場合、横断シミュレートフットプリント内に入っていない障害物は無視されます。 -安全範囲ポリゴンはすべてのフットプリントから構築され、占有グリッドまたは点群上で正マスクとして使用されます。 +パラメータ ``obstacles.filter_envelope`` が true に設定されている場合、シミュレートされたフォワードフットプリント内の障害物は無視されます。 +セーフティーエンベロープの多角形は、すべてのフットプリントから構築され、占有グリッドまたは点群の正のマスクとして使用されます。 -このオプションは障害物の総数を減らすことができ、衝突検出のコストを削減します。 -ただし、範囲を覆うコストは通常、検討するには高すぎます。 +このオプションは障害物の総数を減らし、衝突検出のコストを削減できます。 +ただし、エンベロープをマスクするコストは通常高すぎて興味深いものではありません。 ##### エゴパス上の障害物 -パラメーター `obstacles.ignore_obstacles_on_path` が `true` に設定されている場合、軌道と車両寸法からポリゴンマスクが構築されます。 -このポリゴン内の障害物はすべて無視されます。 +パラメータ ``obstacles.ignore_obstacles_on_path`` が ``true`` に設定されている場合、軌跡と車両寸法から多角形マスクが構築されます。 +この多角形内の障害物はすべて無視されます。 -ポリゴンのサイズは、車両の横方向オフセットに追加される `obstacles.ignore_extra_distance` パラメーターを使用して増やすことができます。 +多角形のサイズは、パラメータ ``obstacles.ignore_extra_distance`` を使用して拡大できます。このパラメータは車両の側方オフセットに追加されます。 -このオプションは少しコストが高く、不適切な動的障害物がエゴパス上で検出され、不要な速度制限が発生するような、ノイズの多い動的障害物がある場合にのみ使用​​する必要があります。 +このオプションは少しコストがかかり、エゴパスで障害物が誤って検出され、不要な速度制限が引き起こされるノイズの多い動的障害物の場合にのみ使用する必要があります。 -#### レーンレットマップ +#### 車線レットマップ -静的障害物に関する情報は、ラインストリングの `type` タグの値を使用してレーンレットマップに格納できます。 -ラインストリングに `type` がパラメーター `obstacles.static_map_tags` の値のいずれかがある場合、それは障害物として使用されます。 +静的障害物に関する情報は、ラインストリングの ``type`` タグの値を使用して、車線レットマップに格納できます。 +任意のラインストリングの ``type`` にパラメータ ``obstacles.static_map_tags`` の値のいずれかが含まれている場合、それは障害物として使用されます。 -レーンレットマップからの障害物はマスクの影響を受けません。 +車線レットマップの障害物は、マスクの影響を受けません。 #### 占有グリッド -マスキングは [`autoware::grid_map_utils::PolygonIterator`](https://github.com/autowarefoundation/autoware.universe/tree/main/common/autoware_grid_map_utils) 関数を使用して、各ポリゴンマスク内のセルを反復処理することで実行されます。 -次に、パラメーター `obstacles.occupancy_grid_threshold` よりも高い占有値を持つセルのみを保持するようにしきい値が適用されます。 -最後に、イメージはイメージに変換され、障害物ラインストリングは opencv 関数 +マスク処理は、 [`autoware::grid_map_utils::PolygonIterator`](https://github.com/autowarefoundation/autoware.universe/tree/main/common/autoware_grid_map_utils) 関数を使用して各多角形マスク内のセルを反復処理することで実行されます。 +次に、パラメータ ``obstacles.occupancy_grid_threshold`` を超える占有率を持つセルのみを保持するように閾値が適用されます。 +最後に、画像が画像に変換され、障害物ラインストリングは opencv 関数 [`findContour`](https://docs.opencv.org/3.4/d3/dc0/group__imgproc__shape.html#ga17ed9f5d79ae97bd4c7cf18403e1689a) を使用して抽出されます。 #### 点群 -マスキングは [`pcl::CropHull`](https://pointclouds.org/documentation/classpcl_1_1_crop_hull.html) 関数を使用して実行されます。 -次に、点群からの点が障害物として直接使用されます。 +[`pcl::CropHull`](https://pointclouds.org/documentation/classpcl_1_1_crop_hull.html) 関数を使用してマスク処理が実行されます。 +次に、点群の点は障害物として直接使用されます。 -### 速度調節 +### 速度調整 -衝突が検出された場合、軌跡のポイントでの速度は、その結果のフットプリントが障害物に衝突しなくなるように調整されます: +衝突が検出された場合、軌跡ポイントの速度は、結果として得られるフットプリントが障害物と衝突しなくなるように調整されます。 $velocity = \frac{dist\_to\_collision}{min\_ttc}$ -エゴ車両の急激な減速を防ぐために、`max_deceleration` パラメーターは、現在のエゴ速度に対する減速を制限します。 -未来の期間 `t` で発生する軌跡点の場合 (元の速度プロファイルから計算されます)、 +エゴ車の急減速を防ぐために、パラメータ ``max_deceleration`` は現在のエゴ速度に対する減速を制限します。 +将来のある時点で発生する軌跡ポイント(元の速度プロファイルから計算される)の場合、 -さらに、`min_adjusted_velocity` パラメータは修正された速度の下限を指定します。 +さらに、パラメータ `min_adjusted_velocity` により、変更された速度の下限が提供されます。 -### 軌道の前処理 +### Trajectoryの前処理 -このノードは、自車位置からの入力軌跡の一部のみを変更します。 -パラメータ `trajectory_preprocessing.start_distance` は、自車位置のどれだけ前から速度が修正され始めるかを調整するために使用されます。 -パラメータ `trajectory_preprocessing.max_length` および `trajectory_preprocessing.max_duration` は、速度が調整される軌道の量を制御するために使用されます。 +ノードは現在の車両位置から始まる入力trajectoryの一部のみを変更します。パラメータ `trajectory_preprocessing.start_distance` は、車両位置のどの先から速度の変更が開始されるかを調整するために使用されます。パラメータ `trajectory_preprocessing.max_length` と `trajectory_preprocessing.max_duration` は、velocityが調整されるtrajectoryの量を制御するために使用されます。 -`trajectory_preprocessing.downsample_factor` パラメータを使用して、精度を犠牲にしてコンピューティングコストを削減するために、軌跡をダウンサンプリングできます。 -たとえば、値 `1` はすべての軌跡点が評価されることを意味し、値 `10` はポイントの 1/10 のみ評価されることを意味します。 +精度を犠牲にして計算コストを削減するために、パラメータ `trajectory_preprocessing.downsample_factor` を使用して、trajectoryをダウンサンプリングできます。たとえば、値が `1` の場合は、すべての trajectory ポイントが評価されますが、値が `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」は、調整された速度で発生する最大減速度(現在の自車速度に対する相対値)を設定できます。 - -## (オプション) パフォーマンスの特徴付け - -## (オプション) 参照 / 外部リンク - -## (オプション) 今後の拡張 / 実装されていない部分 +| 名前 | タイプ | 説明 | +| ------------------------------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `min_ttc` | float | 一定のヨーイングと速度を仮定すると、軌道の各点で衝突なく必要な最小時間 [s]。 | +| `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` から測定)を制御する [s]。 | +| `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 | 自転車モデルで使用されるステアリングのオフセット。 | +| `simulation.nb_points` | int | 自転車モデルの運動をシミュレートするために使用されるポイントの数。 | +| `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` | string list | このタグを持つレーンレットマップのライン文字列が障害物として使用されます。 | +| `obstacles.filter_envelope` | bool | セーフティエンベロープを使用して動的障害物ソースをフィルタリングするかどうか。 | + +## 前提条件 / 既知の制限事項 + +このノードで生成される速度プロファイルは現実的な速度プロファイルではなく、加速度やジャークを考慮せずに、速度の急激なジャンプを含んでいる場合があります。この速度プロファイルは、実際の車両速度の上限として使用することを目的としています。 + +## (オプション)エラー検出と処理 + +このノードの重要なケースは、障害物が軌道から非常に近く、誤って検出されて、対応する速度が急激に低下する場合です。これにより、急ブレーキが発生する可能性があり、これらのエラーを軽減するために2つのメカニズムを使用できます。 + +パラメータ `min_adjusted_velocity` を使用すると調整速度に最小値を設定し、ノードが車両を過度に減速させることを防ぎます。パラメータ `max_deceleration` を使用すると、調整速度が発生する最大減速度(自車の速度に対する相対値)を設定できます。 + +## (オプション)パフォーマンス特性化 + +## (オプション)参照 / 外部リンク + +## (オプション)今後の拡張 / 実装されていない部分 + diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md index 87e91512e6896..df1b206a87a9f 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/README.md @@ -1,138 +1,144 @@ -# レーン逸脱 +## 車線外 ## 役割 -自車のフットプリントが車線を逸脱する場合があります。たとえば、大型車両で狭い角を曲がるときです。 -`out_of_lane`モジュールは、このような車線逸脱時に衝突が発生しないようにするために、車両軌跡に減速ポイントと停止ポイントを追加します。 +次のように、自我車両のフットプリントが走行車線外にはみ出す場合があります。 +- 大型車両による狭い曲がり角を走行する場合 + +`out_of_lane`モジュールは、こうした車線外ケースで衝突が発生しないように、自我経路に減速点と停止点を追加します。 ## アクティベーション -このモジュールは、起動パラメータ`launch_out_of_lane_module`が`true`に設定されている場合にアクティベートされます。 +このモジュールは、起動パラメーター`launch_out_of_lane_module`がtrueに設定されている場合にアクティブになります。 ## 内部動作/アルゴリズム -このモジュールは、車線逸脱衝突が発生するかどうかを計算し、必要に応じて衝突前に停止ポイントを挿入します。 +このモジュールは、車線外衝突が発生するかどうかを計算し、必要に応じて衝突前に停止点を挿入します。 -アルゴリズムでは、入力車両軌跡に正確な`time_from_start`値が含まれているものとして、予測オブジェクトとの衝突時刻を正確に計算します。 +アルゴリズムは、入力自我経路に予測オブジェクトとの衝突時間を正確に計算するために正確な`time_from_start`値が含まれていることを想定しています。 -次に、モジュールの内部動作についてさらに詳しく説明します。 +次に、モジュールの内部動作をより詳しく説明します。 -### 1. 車両軌跡フットプリント +### 1. 自我経路フットプリント -この最初のステップでは、車両フットプリントが各軌跡ポイントに投影され、そのサイズは`ego.extra_..._offset`パラメータに基づいて修正されます。 +この最初のステップでは、自我フットプリントが各経路点に投影され、そのサイズは`ego.extra_..._offset`パラメーターに基づいて変更されます。 -フットプリントの生成に使用される軌跡の長さは、`max_arc_length`パラメータによって制限されます。 +フットプリントの生成に使用される経路の長さは、`max_arc_length`パラメーターによって制限されます。 ![ego_footprints](./docs/footprints.png) -### 2. 他のレーンのレレット +### 2. その他のレーンレット -2番目のステップでは、衝突を回避する必要があるレーンのレレットを計算します。軌跡のラインストリング(軌跡ポイントのシーケンス)またはその先行するレーンのレレットによって横切られない、車両周辺のすべてのレーンのレレットを考慮します。 +2番目のステップでは、衝突を回避する必要があるレーンレットを計算します。 +自我車両周辺で、経路ラインストリング(経路点のシーケンス)またはその前のレーンレットによって横切られていないすべてのレーンレットを考慮します。 ![other_lanes](./docs/other_lanes.png) -デバッグの可視化では、これらの他のレーンのレレットは青い多角形として表示されます。 +デバッグ表示では、これらの他のレーンレットは青い多角形として表示されます。 -### 3. 車線逸脱エリア +### 3. 車線外エリア -次に、各軌跡ポイントについて、他のレーンのレレット(ステップ 2 から)を軌跡ポイントのフットプリント(ステップ 1 から)と交差させて、対応する車線逸脱エリアを作成します。 -各エリアは、エリアと重なるレーンのレレットと、対応する車両軌跡ポイントに関連付けられています。 +次に、各経路点について、他のレーンレット(ステップ2からのもの)と経路点フットプリント(ステップ1からのもの)を交差させて対応する車線外エリアを作成します。 +各エリアは、エリアと重なるレーンレットと対応する自我経路点に関連付けられます。 ![out_of_lane_areas](./docs/out_of_lane_areas.png) -デバッグの可視化では、車線逸脱エリアの多角形は、線で対応する軌跡ポイントに接続されています。 +デバッグ表示では、車線外エリアの多角形は対応する経路点に線で接続されます。 ### 4. 予測オブジェクトのフィルタリング -オブジェクトとその予測パスは、以下の条件でフィルタリングされます。 +以下の条件でオブジェクトとその予測パスをフィルタリングします。 -- `minimum_velocity`パラメータ以下の速度のオブジェクトは無視します。 -- パラメータ`ignore_behind_ego`が`true`に設定されている場合は、自車両の後ろから来るオブジェクトを無視します。 -- 信頼度値が`predicted_path_min_confidence`パラメータを下回る予測パスは無視します。 -- パラメータ`cut_predicted_paths_beyond_red_lights`が`true`に設定されている場合は、赤信号の停止線を超える予測パスのポイントをカットします。 +- `minimum_velocity`パラメーターより速度の低いオブジェクトを無視する。 +- パラメーター`ignore_behind_ego`がtrueに設定されている場合は、自我車両の後ろから来るオブジェクトを無視する。 +- 信頼度値が`predicted_path_min_confidence`パラメーターより下の予測パスを無視する。 +- パラメーター`cut_predicted_paths_beyond_red_lights`が`true`に設定されている場合は、赤信号の停止線を超える予測パスのポイントを切り取る。 | `cut_predicted_paths_beyond_red_lights = false` | `cut_predicted_paths_beyond_red_lights = true` | -| :---------------------------------------------: | :--------------------------------------------: | -| ![](./docs/path_green_light.png) | ![](./docs/path_red_light.png) | +| :-------------------------------------------------: | :------------------------------------------------: | +| ![](./docs/path_green_light_ja.png) | ![](./docs/path_red_light_ja.png) | + +## デバッグ可視化 -デバッグ可視化では、予測パスは緑、赤信号の停止線は赤で表示されます。 +デバッグ可視化では、フィルタリング済み予測経路は緑色で表示され、赤信号の停止線は赤色で表示されます。 -### 5. 衝突までの時間 +### 5. 衝突時間 -各車線逸脱領域について、予測パスに基づいて、ダイナミックオブジェクトがその領域と重複するまでの時間を計算します。 +アウトオブレーンエリアごとに、動的オブジェクトがフィルタリング済み予測経路に基づいてエリアとかぶる時間を計算します。 -パラメータ `mode` が `threshold` に設定され、計算された時間が `threshold.time_threshold` パラメータよりも小さい場合、車線逸脱領域を回避すると判断されます。 +パラメータ `mode` が `threshold` に設定され、計算された時間が `threshold.time_threshold` パラメータより短い場合、アウトオブレーンエリアの回避を決定します。 パラメータ `mode` が `ttc` に設定されている場合、 -オブジェクトの予測時間と、軌跡ポイントに含まれる `time_from_start` フィールドを比較して衝突までの時間を計算します。 -衝突までの時間が `ttc.threshold` パラメータ値を下回っている場合、车線逸脱領域の回避が決定されます。 +オブジェクトの予測時間と軌道点に含まれる `time_from_start` フィールドを比較して衝突時間を計算します。 +衝突時間が `ttc.threshold` パラメータ値より短い場合、アウトオブレーンエリアの回避を決定します。 ![ttcs](./docs/ttcs.png) -デバッグの可視化では、ttc(秒)が対応する軌跡ポイントの上に表示されます。 -衝突を回避する必要がある場合はテキストは赤色、そうでない場合は緑色になります。 +デバッグ可視化では、ttc(秒単位)が対応する軌道点の上に表示されます。 +衝突を回避すべき場合はテキストの色が赤色になり、そうでない場合は緑色になります。 ### 6. 停止または減速ポイントの計算 -まず、車両滑らかさパラメータで設定されたジャークおよび減速の制約に基づいて、自車の最小停止距離を計算します。 +まず、エゴ車両の最小停止距離は速度スムースパラメータによって設定されたジャークと減速制約に基づいて計算されます。 -次に、軌跡に沿って、自車のフットプリントが自車車線内に留まる最長ポイントを探し、最小停止距離と回避すべき衝突が発生する最初の軌跡ポイント(前の手順で決定)の間に検索範囲を制限します。 -検索は、`action.precision` パラメータで設定されたステップ距離で、軌跡に沿って後方に移動することで実行されます。 +次に、軌道上のエゴフットプリントがエゴレーン内にとどまる最遠のポーズを検索し(ステップ 2 で計算)、検索を最小停止距離と回避すべき衝突の最初の軌道点(前のステップで決定)の間に制約します。 +検索は、`action.precision` パラメータによって設定された距離ステップを使用して軌道を後方へ移動することで行われます。 -最初に、この検索を `ego.extra_..._offset`、`action.longitudinal_distance_buffer`、および `action.lateral_distance_buffer` パラメータで拡張されたフットプリントに対して実行します。 -有効なポイントが見つからない場合、超オフセットのみを考慮し、距離バッファは考慮せずに再度検索します。 -それでも有効なポイントが見つからない場合は、オフセットなしのベースの自車フットプリントを使用します。 -ポイントが見つからない場合は、車線逸脱の有無にかかわらず、衝突が検出される前のポイントを使用します。 +最初に、`ego.extra_..._offset`、`action.longitudinal_distance_buffer`、`action.lateral_distance_buffer` パラメータによって拡張されたフットプリントでこの検索を実行します。 +有効なポーズが見つからない場合は、追加オフセットのみを考慮し、距離バッファは考慮せずに再度検索します。 +それでも有効なポーズが見つからない場合は、オフセットなしの基本エゴフットプリントを使用します。 +ポーズが見つからない場合は、レーンから外れているかどうかを考慮せずに、検出された衝突前のポーズを使用します。 -減速するか停止するかを決定するのは、自車と回避する必要がある軌跡ポイントとの距離です。 -この距離が `actions.slowdown.threshold` を下回ると、`actions.slowdown.velocity` の速度が使用されます。 -距離が `actions.stop.threshold` を下回ると、`0` m/s の速度が使用されます。 +減速するか停止するかは、エゴ車両と回避する軌道点間の距離によって決定されます。 +この距離が `actions.slowdown.threshold` よりも小さい場合、`actions.slowdown.velocity` の速度が使用されます。 +この距離が `actions.stop.threshold` よりも小さい場合、速度 `0` m/s が使用されます。 ![avoid_collision](./docs/ttcs_avoid.png) -### 停止/減速ポイントの安定性について +### 停止/減速ポーズの安定性について -入力軌跡は反復間で大幅に変更される可能性があるため、このモジュールの決定も変更されることが想定されます。 -決定をより安定させるため、停止または減速ポイントは `action.min_duration` パラメータで設定された最小時間使用されます。 -その間に自車に近い新しいポイントが生成された場合、古いポイントと置き換えられます。 -それ以外の場合は、設定された時間の間、車線逸脱の衝突が検出されない場合にのみ、停止または減速ポイントは破棄されます。 +入力軌道は反復ごとに大幅に変化する可能性があるため、このモジュールの決定も変化することが予想されます。 +決定をより安定させるために、停止または減速ポーズは `action.min_duration` パラメータによって設定された最小時間使用されます。 +その間にエゴ車両により近い新しいポーズが生成された場合、そのポーズが以前のポーズに取って代わります。 +それ以外の場合は、設定された時間の間アウトオブレーン衝突が検出されなければ停止または減速ポーズは破棄されます。 ## モジュールパラメータ -| パラメータ | 型 | 説明 | -| ----------------------------- | -------- | -------------------------------------------------------------------------- | -| `mode` | 文字列 | 動的対象の考慮に使用するモード。候補: threshold, intervals, ttc | -| `skip_if_already_overlapping` | ブール値 | 真の場合、自車が既に他の車線と重複している場合、このモジュールを実行しない | -| `max_arc_length` | double | 車線逸脱衝突の確認に使用される最大軌跡弧長 | - -| パラメータ/しきい値 | 型 | 説明 | -| ------------------- | ------ | ---------------------------------------------------------------- | -| `time_threshold` | double | [s] この時間内に重なりが生じる可能性のあるオブジェクトを考慮する | - -| Parameter /ttc | Type | Description | -| -------------- | ------ | -------------------------------------------------------------------------------------- | -| `threshold` | double | egoが重なっている間に、この値よりも推定衝突時間(TTC)が短いオブジェクトを考慮します。 | - -| パラメータ / オブジェクト | データ型 | 説明 | -| --------------------------------------- | -------- | -------------------------------------------------------- | -| `minimum_velocity` | double | [m/s] この値以下の速度のオブジェクトを無視 | -| `predicted_path_min_confidence` | double | [-] 予測パスが有効と見なされるための最小信頼度 | -| `cut_predicted_paths_beyond_red_lights` | bool | [-] trueの場合、赤信号の停止線の向こう側の予測パスは切断 | -| `ignore_behind_ego` | bool | [-] trueの場合、自車後方のオブジェクトは無視 | - -| パラメータ/アクション | タイプ | 説明 | -| ------------------------------ | ------ | ------------------------------------------------------------- | -| `precision` | double | 停止点を軌跡に挿入するときの[m]精度 | -| `longitudinal_distance_buffer` | double | 自車の前方に保持する[m]の安全距離バッファ | -| `lateral_distance_buffer` | double | 自車の側面に保持する[m]の安全距離バッファ | -| `min_duration` | double | 決定をキャンセルできるようになるまでに必要な[s]の最小継続時間 | -| `slowdown.distance_threshold` | double | オーバーラップからこの距離よりも近づいたときに減速を挿入する | -| `slowdown.velocity` | double | 減速速度 | -| `stop.distance_threshold` | double | オーバーラップからこの距離よりも近づいたときに停止を挿入する | - -| パラメータ/自車 | タイプ | 説明 | -| -------------------- | ------ | --------------------------------------- | -| `extra_front_offset` | double | 自車フットプリントに追加する前方距離[m] | -| `extra_rear_offset` | double | 自車フットプリントに追加する後方距離[m] | -| `extra_left_offset` | double | 自車フットプリントに追加する左側距離[m] | -| `extra_right_offset` | double | 自車フットプリントに追加する右側距離[m] | +| パラメータ | 型 | 説明 | +| ----------------------------- | ------ | --------------------------------------------------------------------------- | +| `mode` | 文字列 | [-] 動的オブジェクトを考慮するために使用されるモード。候補: `threshold`、`intervals`、`ttc` | +| `skip_if_already_overlapping` | ブール | [-] 自車がすでに他のレーンと重なっている場合、このモジュールを実行しない | +| `max_arc_length` | double | [m] レーン外との衝突をチェックする最大軌跡アーク長 | + +| パラメーター/しきい値 | 型 | 説明 | +| -------------------- | ------ | ------------------------------------------------------------ | +| `time_threshold` | double | [s] この時間以内にオーバーラップする物体のみを考慮する | + +| パラメータ /ttc | 種別 | 説明 | +| -------------- | ------ | ---------------------------------------------------------------------------------------------------------- | +| `threshold` | double | [s] 対象車両の自車位置に重なり時、この値以下の推定衝突時間を持つオブジェクトを検討する | + +| パラメータ / オブジェクト | 型 | 説明 | +| ------------------------------------- | ------ | ---------------------------------------------------------------------------------------- | +| `minimum_velocity` | double | [m/s] この値より速度が低いオブジェクトを無視する | +| `predicted_path_min_confidence` | double | [-] 予測パスを考慮するのに必要な最小の信頼度 | +| `cut_predicted_paths_beyond_red_lights` | bool | [-] true の場合、予測パスは赤信号の停止線の先で切断される | +| `ignore_behind_ego` | bool | [-] true の場合、自車位置の背後のオブジェクトは無視される | + +| パラメータ/アクション | タイプ | 説明 | +| ---------------------------------- | ----- | ------------------------------------------------------------------------- | +| `precision` | double | 軌道に停止位置を挿入したときの[m]精度 | +| `longitudinal_distance_buffer` | double | 自車の前方にある[m]安全距離バッファ | +| `lateral_distance_buffer` | double | 自車の横に配置する [m] 安全距離バッファ | +| `min_duration` | double | 決定がキャンセルされるまでに必要な最小時間 [s] | +| `slowdown.distance_threshold` | double | 重複とこの距離よりも近い場合に減速を挿入する | +| `slowdown.velocity` | double | 減速速度 | +| `stop.distance_threshold` | double | 重複とこの距離よりも近い場合に停止を挿入する | + +| パラメーター / 車両 | 型 | 説明 | +| -------------------- | ------ | ------------------------------------ | +| `extra_front_offset` | 倍精度浮動小数点数 | 【m】車両のフットプリントに追加するフロント側距離の追加 | +| `extra_rear_offset` | 倍精度浮動小数点数 | 【m】車両のフットプリントに追加するリア側距離の追加 | +| `extra_left_offset` | 倍精度浮動小数点数 | 【m】車両のフットプリントに追加する左側の距離の追加 | +| `extra_right_offset` | 倍精度浮動小数点数 | 【m】車両のフットプリントに追加する右側の距離の追加 | + diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md index 57643122af40b..b5d805f42ad71 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/README.md @@ -1,83 +1,63 @@ -# 運動速度プランナー +# モーション速度プランナー ## 概要 -`motion_velocity_planner`は、車両周囲の障害物に基づいて経路速度を調整するためのプランナーです。 -プラグインとしてモジュールを読み込みます。各モジュールの詳細については、以下にリストされているリンクを参照してください。 +`motion_velocity_planner` は、車両周辺の障害物に基づいて軌道の速度を調整するプランナーです。 +プラグインとしてモジュールを読み込みます。各モジュールの詳細については、以下に記載されているリンクを参照してください。 ![アーキテクチャ](./docs/MotionVelocityPlanner-InternalInterface.drawio.svg) -- [Out of Lane](../autoware_motion_velocity_out_of_lane_module/README.md) +- [レーン外](../autoware_motion_velocity_out_of_lane_module/README.md) -各モジュールは自車トラジェクトリに挿入される停止および減速点を計算します。 -これらの点は、自車がトラジェクトリに従う場合の自車`base_link`フレームに対応すると想定されています。 -つまり、壁の前に停止するには、車体前オフセット(ホイールベース + 前方オーバーハング、[車両寸法](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/vehicle-dimensions/)を参照)に等しい距離でトラジェクトリに停止点が挿入されます。 +各モジュールは、自車軌跡に挿入される停止点と減速点を計算します。 +これらの点は、軌跡に従っているときに自車の前輪の位置に対応していると想定されています。 +つまり、壁の前に停止する場合、軌跡に停止点が挿入され、壁の前方の距離は車両のフロントオフセット(ホイールベース + フロントオーバーハング、[車両寸法](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/components/vehicle-dimensions/)を参照)と同じになります。 -![停止速度を設定](./docs/set_stop_velocity.drawio.svg) +![set_stop_velocity](./docs/set_stop_velocity.drawio.svg) ## 入力トピック -| 名称 | 型 | 説明 | -| -------------------------------------- | ------------------------------------------------------- | -------------------- | -| `~/input/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 入力軌道 | -| `~/input/vector_map` | `autoware_map_msgs::msg::LaneletMapBin` | ベクターマップ | -| `~/input/vehicle_odometry` | `nav_msgs::msg::Odometry` | 自車位置と速度 | -| `~/input/accel` | `geometry_msgs::msg::AccelWithCovarianceStamped` | 自車加速度 | -| `~/input/dynamic_objects` | `autoware_perception_msgs::msg::PredictedObjects` | 動的オブジェクト | -| `~/input/no_ground_pointcloud` | `sensor_msgs::msg::PointCloud2` | 障害物点群 | -| `~/input/traffic_signals` | `autoware_perception_msgs::msg::TrafficLightGroupArray` | 交通信号状態 | -| `~/input/virtual_traffic_light_states` | `tier4_v2x_msgs::msg::VirtualTrafficLightStateArray` | 仮想交通信号状態 | -| `~/input/occupancy_grid` | `nav_msgs::msg::OccupancyGrid` | オキュパンシグリッド | +| 名称 | 型 | 説明 | +| -------------------------------------- | ----------------------------------------------------- | ----------------------------- | +| `~/input/trajectory` | autoware_planning_msgs::msg::Trajectory | 入力軌跡 | +| `~/input/vector_map` | autoware_map_msgs::msg::LaneletMapBin | ベクトルマップ | +| `~/input/vehicle_odometry` | nav_msgs::msg::Odometry | 自車位置および速度 | +| `~/input/accel` | geometry_msgs::msg::AccelWithCovarianceStamped | 車両加速度 | +| `~/input/dynamic_objects` | autoware_perception_msgs::msg::PredictedObjects | 動的オブジェクト | +| `~/input/no_ground_pointcloud` | sensor_msgs::msg::PointCloud2 | 障害物点群 | +| `~/input/traffic_signals` | autoware_perception_msgs::msg::TrafficLightGroupArray | 交通信号機状態 | +| `~/input/virtual_traffic_light_states` | tier4_v2x_msgs::msg::VirtualTrafficLightStateArray | 仮想交通信号機State | +| `~/input/occupancy_grid` | nav_msgs::msg::OccupancyGrid | 占有グリッド | ## 出力トピック -| 名称 | タイプ | 説明 | -| --------------------------- | --------------------------------------------------- | -------------------------------------------- | -| `~/output/trajectory` | `autoware_planning_msgs::msg::Trajectory` | 速度プロファイルを更新したエゴトラジェクトリ | -| `~/output/velocity_factors` | `autoware_adapi_v1_msgs::msg::VelocityFactorsArray` | エゴの速度プロファイルを変化させる要因 | +| 名前 | 種類 | 説明 | +| --------------------------- | ---------------------------------------------------------- | ------------------------------------------------------ | +| `~/output/trajectory` | autoware_planning_msgs::msg::Trajectory | 更新された速度プロファイルを持つ自己車両の経路 | +| `~/output/velocity_factors` | autoware_adapi_v1_msgs::msg::VelocityFactorsArray | 自己車両の速度プロファイルの変更を引き起こす要素 | ## サービス -### Planning +## Autoware Motion Velocity Planner -- self-localization: `current pose` の更新 -- behavior-planning: `trajectory` の生成 -- trajectory-planning: `trajectory` の追従制御 -- perception: 感知データの提供 +### サービス -### Control +| サービス名 | タイプ | 説明 | +|---|---|---| +| `~/service/load_plugin` | autoware_motion_velocity_planner_node::srv::LoadPlugin | プラグインのロードを要求する | +| `~/service/unload_plugin` | autoware_motion_velocity_planner_node::srv::UnloadPlugin | プラグインのアンロードを要求する | -- steering-control: ステアリング制御 -- braking-control: ブレーキ制御 -- throttle-control: アクセル制御 +## ノードのパラメータ -### Mapping +| パラメータ | タイプ | 説明 | +| ---------------- | ---------------- | ------------------- | +| `launch_modules` | vector\ | 起動するモジュール名 | -- map: 地図データの提供 +さらに、以下のようなパラメーターをノードに設定する必要があります。 -### Monitoring +- [ニアレストサーチパラメーター](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/common/nearest_search.param.yaml); +- [車両情報パラメーター](https://github.com/autowarefoundation/sample_vehicle_launch/blob/main/sample_vehicle_description/config/vehicle_info.param.yaml); +- [一般計画パラメーター](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/common/common.param.yaml); +- [スムージングパラメーター](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_velocity_smoother/#parameters) +- ロードされる各Planningモジュールのプラグインパラメーター -- system-monitoring: システム状態の監視 - -### Visualization - -- visualization: 各種情報の可視化 - -| 名前 | 種類 | 説明 | -| ------------------------- | -------------------------------------------------------- | ---------------------------------- | -| `~/service/load_plugin` | autoware_motion_velocity_planner_node::srv::LoadPlugin | プラグインのロードをリクエスト | -| `~/service/unload_plugin` | autoware_motion_velocity_planner_node::srv::UnloadPlugin | プラグインのアンロードをリクエスト | - -## ノードパラメータ - -| パラメータ | 型 | 説明 | -| ---------------- | ---------------- | ------------------------ | -| `launch_modules` | vector\ | 起動するモジュールの名前 | - -加えて、以下のパラメータをノードに提供する必要があります。 - -- [最近接探索パラメータ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/common/nearest_search.param.yaml) -- [車両情報パラメータ](https://github.com/autowarefoundation/sample_vehicle_launch/blob/main/sample_vehicle_description/config/vehicle_info.param.yaml) -- [一般的なPlanningパラメータ](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/common/common.param.yaml) -- [Smootherパラメータ](https://autowarefoundation.github.io/autoware.universe/main/planning/autoware_velocity_smoother/#parameters) -- ロードされる各プラグインのパラメータ diff --git a/planning/sampling_based_planner/autoware_bezier_sampler/README.md b/planning/sampling_based_planner/autoware_bezier_sampler/README.md index 9caa170f5934f..ef19abd507fae 100644 --- a/planning/sampling_based_planner/autoware_bezier_sampler/README.md +++ b/planning/sampling_based_planner/autoware_bezier_sampler/README.md @@ -1,3 +1,4 @@ -## ベジエサンプラー +# Bézier サンプラー + +`` のサンプリング戦略に従った、ベジエ曲線とその生成の実装 -このドキュメントでは、ベジエ曲線とその生成に関する実装について説明します。サンプリング戦略は [IEEE](https://ieeexplore.ieee.org/document/8932495) に掲載された論文に従っています。 diff --git a/planning/sampling_based_planner/autoware_frenet_planner/README.md b/planning/sampling_based_planner/autoware_frenet_planner/README.md index 88862895c9850..b33256cbcbbbf 100644 --- a/planning/sampling_based_planner/autoware_frenet_planner/README.md +++ b/planning/sampling_based_planner/autoware_frenet_planner/README.md @@ -1,7 +1,8 @@ -# フレーネ計画 +# Frenet プランナー -フレネ座標における経路生成 +Frenet フレームにおける軌跡生成。 ## 説明 [オリジナル論文](https://www.researchgate.net/publication/224156269_Optimal_Trajectory_Generation_for_Dynamic_Street_Scenarios_in_a_Frenet_Frame) + diff --git a/planning/sampling_based_planner/autoware_path_sampler/README.md b/planning/sampling_based_planner/autoware_path_sampler/README.md index b7f695ffc66a7..62a1f99c33ecd 100644 --- a/planning/sampling_based_planner/autoware_path_sampler/README.md +++ b/planning/sampling_based_planner/autoware_path_sampler/README.md @@ -1,186 +1,126 @@ -# Path Sampler +# パスサンプラー ## 目的 -このパッケージは、サンプリングベースのPlaningを使用して、走行可能な軌跡を作成するノードを実装します。 +このパッケージは、サンプリングベースのプランニングを使用して走行可能な経路を生成するノードを実装しています。 ## 機能 -このパッケージを使用すると、次のことができます。 +このパッケージは次のことが可能です。 -- 軌跡をスムーズにする -- 軌跡を走行可能領域内に保持する +- 経路を滑らかにする +- 経路を走行可能な領域内に保持する - 静的障害物を回避する -- 有効な軌跡を生成できない場合に停止する +- 有効な経路が生成できない場合は停止する -速度は入力パスから取得されることに注意してください。 +速度は入力パスからそのまま引き継がれます。 ## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ------------------ | --------------------------------------------- | ------------------------------ | -| `~/input/path` | autoware_planning_msgs/msg/Path | 基準経路と対応する走行可能領域 | -| `~/input/odometry` | nav_msgs/msg/Odometry | 自車位置の現在の状態 | -| `~/input/objects` | autoware_perception_msgs/msg/PredictedObjects | 回避すべきオブジェクト | +| 名称 | タイプ | 説明 | +|---|---|---| +| `~/input/path` | `autoware_planning_msgs/msg/Path` | 基準パスと対応する走行可能領域 | +| `~/input/odometry` | `nav_msgs/msg/Odometry` | 自車位置 | +| `~/input/objects` | `autoware_perception_msgs/msg/PredictedObjects` | 避けるオブジェクト | -### 自動運転ソフトウェアのドキュメント +### 出力 -#### Planning コンポーネント +[Autoware.Auto](https://github.com/autowarefoundation/autoware.auto) -Planning コンポーネントは、センシングと知覚から得られた環境情報を使用して、車両の経路を計画しています。 Planning モジュールは、以下のタスクを実行します。 +Autoware.Autoは、自動運転モビリティ向けに設計されたオープンソースソフトウェア開発キット(SDK)です。このSDKは、あらゆる種類のモビリティ(車、トラック、バスなど)に搭載できるように設計されています。このドキュメントは、Autoware.Autoのサブシステムである**Planning**コンポーネントについて説明します。 -- 自車位置の確立 -- 障害物の検出と分類 -- 目的地の決定 -- 経路の計画 -- 経路の追跡 +**Planning**コンポーネントは、以下のタスクを担当します。 -Planning コンポーネントは、センサーからのリアルタイムデータを処理して、車両の周囲を正確に把握しています。この情報は、衝突回避や効率的なルートプランニングのために使用されています。 +* 自車位置から目的地までの安全で実行可能な経路を生成する +* 経路に従って車両を誘導する制御信号を生成する -#### Motion Planning モジュール +**Planning**コンポーネントは、以下を含む複数のモジュールで構成されています。 -Motion Planning モジュールは、Planning コンポーネントが生成した経路に基づいて、車両の動きを制御しています。 Motion Planning モジュールは、以下のタスクを実行します。 +* **global planner**: グローバル経路を生成する +* **local planner**: ロカル経路を生成する +* **behavior planner**: 車両の挙動を計画する +* **decision maker**: 車両の意思決定を行う +* **motion planner**: 車両の動きを計画する -- 車両の運動学モデルの確立 -- 経路追従の生成 -- 経路追従エラーの最小化 -- 障害物回避の計画 +これらのモジュールは、センサーからの入力に基づいて、安全で実行可能な経路を生成するために協調して動作します。 -Motion Planning モジュールは、車両の運動学を考慮して、安全かつ効率的な車両の動きを計画しています。このモジュールは、衝突を回避し、快適な乗り心地を提供する最適な軌跡を生成しています。 +**Planning**コンポーネントは、自己回帰移動平均(ARMA)アルゴリズムを使用して経路を再サンプリングします。これにより、経路がセンサーから得られる最新のデータと整合するように維持されます。 -#### Control モジュール +*post resampling*、経路は障害物や他の車両などの障害物を避けるために最適化されます。これにより、車両が安全に目的地に到達できるようになります。 -Control モジュールは、Motion Planning モジュールが生成した軌跡に基づいて、車両を制御しています。 Control モジュールは、以下のタスクを実行します。 +**Planning**コンポーネントは、以下のインターフェイスを使用して他のAutoware.Autoサブシステムと通信します。 -- ステアリングの制御 -- アクセルの制御 -- ブレーキの制御 -- 横滑り防止制御 +* **perception**: センサーからの入力を提供する +* **control**: 制御信号を送信する +* **localization**: 自車位置を提供する -Control モジュールは、車両のactuatorにシグナルを送信して、車両の実際の動きを計画された軌跡に一致させています。このモジュールは、車両の安定性と安全性を確保しながら、正確な制御を実現しています。 - -#### Perception モジュール - -Perception モジュールは、車両の周囲を検知し、障害物を識別しています。 Perception モジュールは、以下のタスクを実行します。 - -- センサーデータの収集 -- データの処理とフィルタリング -- 障害物の検出と分類 - -Perception モジュールは、レーダー、カメラ、LIDAR などのセンサーからのデータを処理して、車両の周囲の正確な地図を作成しています。この情報は、衝突回避や障害物回避のために使用されています。 - -#### Localization モジュール - -Localization モジュールは、車両の自車位置と姿勢を決定しています。 Localization モジュールは、以下のタスクを実行します。 - -- センサーデータの収集 -- データの処理とフィルタリング -- 自車位置と姿勢の推定 - -Localization モジュールは、GPS、IMU、車輪速度センサーなどのセンサーからのデータを処理して、車両の自車位置を正確に特定しています。この情報は、経路プランニングや障害物回避のために使用されています。 - -#### Health Monitoring モジュール - -Health Monitoring モジュールは、システムのヘルス状態を監視しています。 Health Monitoring モジュールは、以下のタスクを実行します。 - -- センサーの健康状態の監視 -- データの健全性のチェック -- 障害の検出 -- 復旧メカニズムの起動 - -Health Monitoring モジュールは、システムの健全性を確保し、障害が発生した場合に適切な措置を講じています。このモジュールは、システムの信頼性と安全性を向上させています。 - -#### Safety モジュール - -Safety モジュールは、システムの安全性を確保しています。 Safety モジュールは、以下のタスクを実行します。 - -- 障害物逸脱量の監視 -- 加速度逸脱量の監視 -- 速度逸脱量の監視 -- システムのシャットダウン - -Safety モジュールは、システムの安全パラメータを監視し、逸脱量が許容範囲を超えた場合にシステムをシャットダウンしています。このモジュールは、乗客と周囲の安全を確保しています。 - -#### Autoware - -Autoware は、オープンソースの自動運転ソフトウェアプラットフォームです。 Autoware は、以下のモジュールを含むコンポーネントベースのアーキテクチャを採用しています。 - -- Planning -- Motion Planning -- Control -- Perception -- Localization -- Health Monitoring -- Safety - -Autoware は、自動運転車両の開発を加速化するために設計されており、用途の広い柔軟なプラットフォームを提供しています。 - -| 名称 | タイプ | 説明 | -| --------------------- | ------------------------------------- | --------------------------------------------- | -| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | Drivingを実行可能かつ衝突のない生成された軌跡 | +| 名前 | 型 | 説明 | +| ---------------------------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `~/output/trajectory` | autoware_planning_msgs/msg/Trajectory | 走行可能で衝突のない生成されたトラジェクトリ | ## アルゴリズム -サンプリングベースプランニングは、3つの連続した手順に分解されます。 +サンプリングベースのプランニングは、3 つの連続したステップに分けられます。 -1. サンプリング: 実行可能経路の候補が生成されます。 -2. プルーニング: 無効な候補が破棄されます。 -3. 選択: 残りの有効な最適候補が選択されます。 +1. サンプリング: 候補の軌道が生成されます。 +2. 剪定: 無効な候補が破棄されます。 +3. 選択: 残った有効な候補の中で最良のものが選択されます。 ### サンプリング -実行可能経路の候補は、現在の自車状態とターゲット状態に基づいて生成されます。 -現在、2つのサンプリングアルゴリズムが実装されています。ベジェ曲線を使用したサンプリングと、フレネフレーム内の多項式を使用したサンプリングです。 +候補の軌道は、現在の自車状態とターゲット状態に基づいて生成されます。 +現在、2 つのサンプリングアルゴリズムが実装されています。ベジエ曲線を使用したサンプリングと、フレネフレーム内の多項式を使用したサンプリングです。 -### プルーニング +### 剪定 -各実行可能経路の候補の有効性は、一連のハード制約を使用してチェックされます。 +各候補の軌道の有効性は、一連のハード制約を使用してチェックされます。 -- 衝突: 静的障害物との衝突がないことを確認 -- 曲率: 滑らかな曲率を確保 -- 走行可能エリア: 経路が走行可能エリア内にあることを確認 +- 衝突: 静止障害物との衝突を回避します。 +- 曲率: 滑らかな曲率を確保します。 +- 走行可能領域: 軌道が走行可能領域内にあることを確認します。 ### 選択 -有効な実行可能経路の候補の中から、一連のソフト制約(つまり、目的関数)を使用して最良の候補が決定されます。 +有効な候補の軌道の中から、一連のソフト制約(つまり、目的関数)を使用して _ベスト_ な軌道が決定されます。 -- 曲率: より滑らかな経路を優先 -- 長さ: より長い経路を優先 -- 横偏差: 基準パスに近い経路を優先 +- 曲率: より滑らかな軌道を選択 +- 長さ: より長い軌道を選択 +- 側方偏差: 参照経路に近い軌道を選択 -各ソフト制約には重みが関連付けられており、優先度の調整が可能です。 +各ソフト制約には、プリファレンスの調整を可能にする重みが関連付けられています。 -## 制限 +## 制限事項 -フレネフレーム内の多項式で生成された候補の品質は、基準パスに大きく依存します。 -基準パスが滑らかでない場合、生成された候補はおそらく走行できません。 +フレネフレーム内の多項式で生成される候補の品質は、参照経路に大きく依存します。 +参照経路が滑らかでないと、生成される候補は走行不可能になる可能性があります。 -有効な経路を見つけることができない場合、現在は突然停止する経路が発生します。 +有効な軌道が見つからない場合は、現在、軌道が突然停止する結果になります。 -## `autoware_path_optimizer`との比較 +## `autoware_path_optimizer` との比較 -`autoware_path_optimizer`は、最適化ベースのアプローチを使用しており、数学的問題の最適解が存在する場合にそれを求めます。 -解が見つからない場合、問題の中間数学的表現が原因で、しばしば問題を特定するのが困難です。 +`autoware_path_optimizer` は最適化ベースのアプローチを使用し、数学的問題の最適解を見つけます(存在する場合)。 +問題の中間的な数学的表現により、解が見つからない場合に問題を特定するのが難しいことがよくあります。 -比較すると、サンプリングベースアプローチは最適解を保証できませんが、はるかに簡単で、デバッグと調整が容易です。 +比較すると、サンプリングベースのアプローチは最適解を保証できませんが、はるかに単純です。これにより、デバッグと調整が容易になります。 ## パラメータの調整方法 -サンプリングベースプランナーは、主に経路の一貫した品質と計算時間のトレードオフを提供します。 -良好な経路が見つかることを保証するには、多くの候補を生成する必要があり、それにより計算時間が線形的に増加します。 +サンプリングベースのプランナーは、軌道の安定した品質と計算時間の間で主にトレードオフを提供します。 +良好な軌道の発見を保証するには、多くの候補を生成する必要があり、これにより計算時間が線形に増加します。 TODO -### 狭い道での走行性 +### 狭い道路での走行性 ### 計算時間 ### ロバスト性 -### その他オプション +### その他のオプション ## デバッグ方法 TODO + diff --git a/planning/sampling_based_planner/autoware_sampler_common/README.md b/planning/sampling_based_planner/autoware_sampler_common/README.md index 78912bb888e98..7b5294dbabc8a 100644 --- a/planning/sampling_based_planner/autoware_sampler_common/README.md +++ b/planning/sampling_based_planner/autoware_sampler_common/README.md @@ -1,4 +1,7 @@ -## Sampler Common +# サンプラー共通 + +サンプリングベースプランナー用の共通関数。 +これには、経路と軌跡を表すクラス、 +ハードおよびソフト制約、 +座標系とフレネフレーム間の変換などが含まれます。 -Samplerベースのプランナーの共通関数です。 -パスや軌跡、強く柔らかい制約、カルテシアンフレームとフロネフレームの変換を表現するためのクラスが含まれます。 diff --git a/sensing/autoware_gnss_poser/README.md b/sensing/autoware_gnss_poser/README.md index 9c15495429bad..e67816b5a2d11 100644 --- a/sensing/autoware_gnss_poser/README.md +++ b/sensing/autoware_gnss_poser/README.md @@ -2,65 +2,111 @@ ## 目的 -`gnss_poser`は、GNSSセンシングメッセージを購読し、共分散と共に vehicle pose を計算するノードです。 +`gnss_poser` は GNSS センシングメッセージをサブスクライブし、共分散を使用した車両のポージングを計算するノードです。 -このノードは、**base_link** の pose をパブリッシュするために NavSatFix を購読します。NavSatFix のデータはアンテナの位置を表します。したがって、`base_link` からアンテナの位置への tf を使用して、座標変換を実行します。アンテナの位置の frame_id は NavSatFix の `header.frame_id` を参照します。 -(**NavSatFix の `header.frame_id` は地球や基準楕円体ではなく、アンテナの frame_id を示していることに注意してください。[NavSatFix の定義も参照してください。](https://docs.ros.org/en/noetic/api/sensor_msgs/html/msg/NavSatFix.html))**) +このノードは NavSatFix をサブスクライブし、**base_link** のポージングをパブリッシュします。NavSatFix のデータはアンテナの位置を表します。そのため、`base_link` からアンテナ位置への tf を使用して座標変換を実行します。アンテナ位置の frame_id は NavSatFix の `header.frame_id` を参照します。(**NavSatFix の `header.frame_id` は地球や基準楕円体ではなく、アンテナの frame_id を示していることに注意してください。[NavSatFix 定義も参照してください。](https://docs.ros.org/en/noetic/api/sensor_msgs/html/msg/NavSatFix.html)) -`base_link` からアンテナへの変換が取得できない場合、座標変換を実行せずにアンテナ位置の pose を出力します。 +`base_link` からアンテナへの変換が取得できない場合は、座標変換を実行せずにアンテナ位置のポージングを出力します。 -## 内部動作 / アルゴリズム +## 内部処理 / アルゴリズム -## 入力 / 出力 +## 入出力 ### 入力 -| 名称 | タイプ | 説明 | -| ------------------------------ | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectorInfo` | 地図投影情報 | -| `~/input/fix` | `sensor_msgs::msg::NavSatFix` | GNSS状態メッセージ | -| `~/input/autoware_orientation` | `autoware_sensing_msgs::msg::GnssInsOrientationStamped` | 姿勢 [詳細はこちら](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_sensing_msgs) | +| 名前 | タイプ | 説明 | +| ------------------------------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| `/map/map_projector_info` | `tier4_map_msgs::msg::MapProjectorInfo` | 地図投影情報 | +| `~/input/fix` | `sensor_msgs::msg::NavSatFix` | GNSSステータスメッセージ | +| `~/input/autoware_orientation` | `autoware_sensing_msgs::msg::GnssInsOrientationStamped` | 方位 [詳細はこちら](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_sensing_msgs) | -### アウトプット +### 출력 -**背景** +### Autoware 自動運転システムアーキテクチャ -Autoware 自動運転ソフトウェアでは、Planning コンポーネントが周囲環境を感知し、車輌の軌道計画を算出します。**Path Planning** モジュールはこの計画を実行します。 +#### 自動運転ソフトウェアスタック -**Path Planning** +自動運転ソフトウェアスタックは、次の主要なレイヤーで構成されています。 -Path Planning モジュールは、以下を含む一連の操作を通じて、経路計画を実行します。 +- Perception + - カメラ、レーダー、LiDARセンサからの生のデータを意味のある情報に変換する。 +- Planning + - 知覚データに基づいて、車両の経路を計画する。 +- Behavior Prediction + - 周囲の車両や歩行者の動きを予測する。 +- Path Optimization + - Planningからの経路を最適化し、周囲の環境への適応性を高める。 +- Decision Making + - 複数のPlanningとPath Optimizationからの候補経路を考慮し、最終的な経路を決定する。 +- Motion Planning + - 経路に従って車両を制御するための詳細な軌道を生成する。 +- Controller + - Motion Planningからの軌道を追従するように車両を制御する。 +- Behavior Execution + - Controllerからのコマンドを実行し、車両を制御する。 -1. **衝突回避** - - 障害物検出と衝突逸脱量計算 - - 障害物を避けるための経路修正 -2. **ルート追従** - - 指定された経路からの逸脱量計算 - - 経路に沿って車輌を誘導するための経路修正 -3. **加減速制御** - - 車輌の目標速度の計算 - - 加減速逸脱量計算 - - 車輌の速度を制御するための加減速修正 -4. **自車位置推定** - - センサーから受信した情報の統合 - - 'post resampling' ステップにおける自車位置と姿勢の推定 +#### Perceptionレイヤー -**制御フロー** +Perceptionレイヤーは、主にセンサデータの処理を担当します。このレイヤーは次のモジュールで構成されています。 -Path Planning モジュールの制御フローは次のとおりです。 +- **localization:** 車両の自車位置と姿勢を推定する。 +- **object detection:** 車両、歩行者、障害物などの周囲の物体を検出する。 +- **semantic segmentation:** 画像内のピクセルを、道路、歩道、建物などの意味のあるセグメントに分類する。 +- **lane detection:** 道路上の車線を検出する。 +- **traffic sign recognition:** 交通標識を認識する。 -1. センサーデータを受信します。 -2. 自車位置を推定します。 -3. 障害物とルート逸脱量を計算します。 -4. 経路を修正します。 -5. 加減速軌道を計算します。 -6. 車輌を制御します。 +#### Planningレイヤー -| 名前 | タイプ | 説明 | -| ------------------------ | ----------------------------------------------- | ------------------------------------------------------------- | -| `~/output/pose` | `geometry_msgs::msg::PoseStamped` | GNSS センシングデータから計算された自車位置 | -| `~/output/gnss_pose_cov` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSS センシングデータから計算された、共分散行列を含む自車位置 | -| `~/output/gnss_fixed` | `tier4_debug_msgs::msg::BoolStamped` | GNSS 固定ステータス | +Planningレイヤーは、知覚データに基づいて車両の経路を計画します。このレイヤーは次のモジュールで構成されています: + +- **motion planner:** 車両の軌跡を生成する。 +- **path planner:** Planningコンポーネントが生成した複数の候補経路を評価し、最適な経路を選択する。 +- **trajectory optimizer:** 選択された経路を最適化し、周囲の環境への適応性を高める。 + +#### Behavior Predictionレイヤー + +Behavior Predictionレイヤーは、周囲の車両や歩行者の動きを予測します。このレイヤーは次のモジュールで構成されています: + +- **interactive object tracker:** 周囲の車両や歩行者を追跡する。 +- **behavior predictor:** 追跡されたオブジェクトの将来の動作を予測する。 + +#### Path Optimizationレイヤー + +Path Optimizationレイヤーは、Planningコンポーネントから生成された経路を最適化します。このレイヤーは次のモジュールで構成されています: + +- **local path planner:** 'post resampling'後に経路を滑らかにし、周囲の環境への適応性を高める。 +- **junction planner:** 交差点で安全かつ効率的な経路を計画する。 + +#### Decision Makingレイヤー + +Decision Makingレイヤーは、PlanningとPath Optimizationレイヤーからの複数の候補経路を考慮し、最終的な経路を決定します。このレイヤーは次のモジュールで構成されています: + +- **decision maker:** 候補経路を評価し、最も適切な経路を選択する。 + +#### Motion Planningレイヤー + +Motion Planningレイヤーは、経路に従って車両を制御するための詳細な軌道を生成します。このレイヤーは次のモジュールで構成されています: + +- **lateral controller:** 車両の横方向速度を制御する。 +- **longitudinal controller:** 車両の縦方向速度を制御する。 + +#### Controllerレイヤー + +Controllerレイヤーは、Motion Planningレイヤーからの軌道を追従するように車両を制御します。このレイヤーは次のモジュールで構成されています: + +- **vehicle controller:** ブレーキ、アクセル、ステアリングを制御する。 + +#### Behavior Executionレイヤー + +Behavior Executionレイヤーは、Controllerレイヤーからのコマンドを実行し、車両を制御します。このレイヤーは次のモジュールで構成されています: + +- **actuators:** ブレーキ、アクセル、ステアリングなどのアクチュエータを制御する。 + +| 名前 | タイプ | 説明 | +| ------------------------ | ----------------------------------------------- | ------------------------------------------------------------ | +| `~/output/pose` | `geometry_msgs::msg::PoseStamped` | GNSSセンシングデータから計算された自車位置 | +| `~/output/gnss_pose_cov` | `geometry_msgs::msg::PoseWithCovarianceStamped` | GNSSセンシングデータから計算された共分散付きの自車位置 | +| `~/output/gnss_fixed` | `tier4_debug_msgs::msg::BoolStamped` | GNSS固定ステータス | ## パラメータ @@ -68,12 +114,13 @@ Path Planning モジュールの制御フローは次のとおりです。 {{ json_to_markdown("sensing/autoware_gnss_poser/schema/gnss_poser.schema.json") }} -## 想定/既知の限界 +## 想定事項と既知の制限事項 + +## (オプション) エラー検知と処理 -## (オプション) エラー検出と処理 +## (オプション) 性能特性評価 -## (オプション) パフォーマンス特性 +## (オプション) 参考文献/外部リンク -## (オプション) 参照/外部リンク +## (オプション) 将来の拡張機能/実装予定外の部分 -## (オプション) 将来の拡張/未実装部分 diff --git a/sensing/autoware_image_diagnostics/README.md b/sensing/autoware_image_diagnostics/README.md index 9234fd0efacec..d55e79a216e72 100644 --- a/sensing/autoware_image_diagnostics/README.md +++ b/sensing/autoware_image_diagnostics/README.md @@ -1,158 +1,85 @@ -# image_diagnostics +## イメージ診断 ## 目的 -`image_diagnostics`は、入力された生画像のステータスをチェックするためのノードです。 +`image_diagnostics`は、入力された生画像のステータスを確認するノードです。 -## 内部動作/アルゴリズム +## 内部処理 / アルゴリズム -下図は、image diagnosticsノードのフローチャートを示しています。各画像は、ブロック状態の評価用に小さなブロックに分割されます。 +下記の図は、画像診断ノードのフローチャートを示しています。各画像は、ブロック状態評価用に小さなブロックに分割されます。 -![image diagnosticsフローチャート ](./image/image_diagnostics_overview.svg) +![イメージ診断フローチャート](./image/image_diagnostics_overview.svg) -各小さな画像ブロックのステータスは、下図のように評価されます。 +各小さな画像ブロックの状態は、以下の図のように評価されます。 -![ブロックステータス決定ツリー ](./image/block_state_decision.svg) +![ブロック状態決定木](./image/block_state_decision.svg) -すべての画像ブロックのステータスが評価されると、画像全体のステータスは以下のように要約されます。 +すべての画像のブロックの状態が評価された後、画像全体のステータスは以下のように要約されます。 -![画像全体のステータス決定ツリー](./image/image_status_decision.svg) +![全体の画像状態決定木](./image/image_status_decision.svg) ## 入出力 ### 入力 - -| 名称 | 型 | 説明 | -| ----------------- | ------------------------- | ------ | -| `input/raw_image` | `sensor_msgs::msg::Image` | 生画像 | +1. `raw image topic` (sensor_msgs/Image): This topic should be subscribed to the topic that contains the raw images. +2. `camera calibration parameters` (`yaml`): This topic should be subscribed to the topic that contains the camera calibration parameters for the camera that captured the images. +3. `test image params` (`yaml`): This topic should be subscribed to the topic that contains the test image parameters. ### 出力 +1. `image diagnostic results topic` (diagnostic_msgs/DiagnosticStatus): This topic should be published to the topic that contains the image diagnostic results. -**自動運転ソフトウェアのドキュメント** - -**目的** - -本ドキュメントは、Autowareの自動運転ソフトウェアの設計とアーキテクチャを説明するものです。 - -**アーキテクチャ** - -Autowareのアーキテクチャはモジュール式で、個々のモジュールが特定の機能を担当しています。主なモジュールは以下の通りです。 - -- **Perception (知覚)**: センサーデータから周囲環境のモデルを作成します。 -- **Planning (プランニング)**: 目的地への安全かつ効率的な経路を計画します。 -- **Control (制御)**: 計画に基づいて車両を制御します。 - -**Planningモジュール** - -Planningモジュールは、以下のようなタスクを担当します。 - -- **経路計画**: 目的地への経路を生成します。 -- **モーション計画**: 障害物を避けながら車両を移動させる方法を計画します。 -- **安全確認**: 車両の動きが衝突リスクを含まないことを確認します。 - -**制御モジュール** - -制御モジュールは、以下のようなタスクを担当します。 - -- **ステアリング制御**: 車両のステアリングを制御します。 -- **アクセル/ブレーキ制御**: 車両の速度を制御します。 -- **Stabilization (姿勢安定化)**: 車両の姿勢を安定させます。 - -**センサーデータの処理** - -Autowareは、以下を含むさまざまなセンサーからのデータを処理します。 - -- レーダー -- LiDAR -- カメラ - -センサーデータは、Perceptionモジュールによって周囲環境のモデルを作成するために使用されます。 - -**自車位置の推定** - -自車位置は、以下のセンサーからのデータを使用して推定されます。 - -- GPS -- IMU -- オドメトリ - -**障害物検出** - -障害物は、知覚モジュールによってセンサーデータから検出されます。障害物は以下に分類されます。 - -- 静的(例: ビル、木) -- 動的(例: 車両、歩行者) - -**衝突リスクの評価** - -衝突リスクは、以下に基づいてPlanningモジュールによって評価されます。 - -- 自車と障害物の相対運動 -- 障害物のサイズ -- 障害物の形状 - -**経路計画** - -経路は、以下を考慮して生成されます。 - -- 目的地 -- 障害物 -- 交通規制 - -**モーション計画** - -モーション計画は、以下を使用して生成されます。 - -- 経路 -- 車両の運動力学 -- 障害物 - -**安全確認** - -安全確認は、以下を使用して行われます。 - -- 衝突リスクの評価 -- 障害物の逸脱量 -- 加速度逸脱量 - -**制御** - -制御は以下を使用して行われます。 - -- モーション計画 -- 車両の状態 -- センサーデータ - -**今後の開発** - -Autowareは継続的に開発されており、以下を含む機能の向上が計画されています。 +| 名 | 型 | 説明 | +| ----------------- | ------------------------- | ------- | +| `input/raw_image` | `sensor_msgs::msg::Image` | 生画像 | -- 高精度地図の統合 -- より堅牢な障害物検出 -- より効率的な経路計画 +### 出力 -| 名前 | タイプ | 説明 | -| ----------------------------------- | --------------------------------------- | ------------------------ | -| `image_diag/debug/gray_image` | `sensor_msgs::msg::Image` | グレー画像 | -| `image_diag/debug/dft_image` | `sensor_msgs::msg::Image` | 離散フーリエ変換画像 | -| `image_diag/debug/diag_block_image` | `sensor_msgs::msg::Image` | 各ブロック状態のカラー化 | -| `image_diag/image_state_diag` | `tier4_debug_msgs::msg::Int32Stamped` | 画像診断のステータス値 | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 診断 | +ここでは、PlanningモジュールのOutputに関するドキュメントを記載します。 + +**AVP Plan Output** + +| ヘッダ | フィールド | データ型 | 説明 | +|---|---|---|---| +| | [submit_plan](https://gitlab.com/ros-planning/plan_proposal_evaluator/-/wikis/submit_plan) | PlanProposal | Planningモジュールからの提案 | +| | [submit_plan_feedback](https://gitlab.com/ros-planning/plan_proposal_evaluator/-/wikis/submit_plan_feedback) | PlanEvaluation | PPEからのフィードバック | +| | [replan](https://gitlab.com/ros-planning/plan_proposal_evaluator/-/wikis/replan) | Boolean | PPEからプランの再生成をリクエスト | + +**Path** + +| ヘッダ | フィールド | データ型 | 説明 | +|---|---|---|---| +| sensor_msgs/NavSatFix | [header](http://docs.ros.org/api/sensor_msgs/html/msg/NavSatFix.html) | ヘッダー | タイムスタンプとフレーム | +| mavros_msgs/Altitude | [altitude](http://docs.ros.org/api/mavros_msgs/html/msg/Altitude.html) | 高度 | WGS 84座標系での自車位置 | +| geometry_msgs/PoseStamped | [current_pose](http://docs.ros.org/api/geometry_msgs/html/msg/PoseStamped.html) | 姿勢 | WGS 84座標系での自車位置 | +| geometry_msgs/PoseWithCovarianceStamped | [current_pose_covariance](http://docs.ros.org/api/geometry_msgs/html/msg/PoseWithCovarianceStamped.html) | 姿勢の共分散 | `post resampling`によるプランの再生成のための推定 | +| autoware_auto_planning_msgs/PathWithLaneId | [path](https://gitlab.com/autowarefoundation/autoware.auto/-/blob/master/ros/src/autoware_auto_planning_msgs/msg/PathWithLaneId.msg) | 軌跡 | 5次多項式スプラインを使用した軌跡 | +| autoware_auto_planning_msgs/StopPointWithLaneId | [stop_points](https://gitlab.com/autowarefoundation/autoware.auto/-/blob/master/ros/src/autoware_auto_planning_msgs/msg/StopPointWithLaneId.msg) | 停止位置 | 多角形内の停止位置 | +| autoware_auto_planning_msgs/LaneStopPoint | [lane_stop_points](https://gitlab.com/autowarefoundation/autoware.auto/-/blob/master/ros/src/autoware_auto_planning_msgs/msg/LaneStopPoint.msg) | 車線停止位置 | 車線ごとの停止位置 | +| std_msgs/Bool | [is_replan](https://docs.ros.org/api/std_msgs/html/msg/Bool.html) | 再生成フラグ | プランニングの再生成が必要かどうか | + +| 名称 | タイプ | 説明 | +| ------------------------------------ | --------------------------------------- | ------------------------------------- | +| `image_diag/debug/gray_image` | `sensor_msgs::msg::Image` | グレースケール画像 | +| `image_diag/debug/dft_image` | `sensor_msgs::msg::Image` | 離散フーリエ変換画像 | +| `image_diag/debug/diag_block_image` | `sensor_msgs::msg::Image` | 各ブロックの状態を示す色分け画像 | +| `image_diag/image_state_diag` | `tier4_debug_msgs::msg::Int32Stamped` | 画像診断ステータス値 | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | 障害 | ## パラメータ -## 想定 / 既知の限界 +## 仮定/既知の制限 -- これは画像診断の概念実証であり、アルゴリズムは現在さらなる改善中です。 +- これは、画像診断の概念実証であり、アルゴリズムはさらなる改善が必要です。 ## (オプション) エラー検出と処理 ## (オプション) パフォーマンスの特性評価 -## (オプション) 参照 / 外部リンク +## (オプション) 参考文献/外部リンク + +## (オプション) 今後拡張/未実装部分 -## (オプション) 今後の拡張 / 未実装部分 +- 雨滴や埃など、さらに特定の画像の歪み/遮蔽タイプを考慮してください。 -- 降雨や埃などの、より具体的な画像の歪み / 遮蔽タイプを検討する。 +- 光学的な観点からの霧や雨の状態における視程不良を考慮してください -- 光学的な観点からの霧や雨による視界の悪化を検討する diff --git a/sensing/autoware_image_transport_decompressor/README.md b/sensing/autoware_image_transport_decompressor/README.md index 83fa60eaddeb5..f630fee6faf4e 100644 --- a/sensing/autoware_image_transport_decompressor/README.md +++ b/sensing/autoware_image_transport_decompressor/README.md @@ -1,93 +1,69 @@ -# image_transport_decompressor +## 画像伝送デコンプレッサ ## 目的 -`image_transport_decompressor`は画像を解凍するノードです。 +`image_transport_decompressor` は画像を解凍するノードです。 -## 内部処理/アルゴリズム +## 内部処理 / アルゴリズム ## 入出力 ### 入力 -| 名前 | 型 | 説明 | -| -------------------------- | ----------------------------------- | -------- | +| 名前 | タイプ | 説明 | +| -------------------------- | ----------------------------------- | ---------------- | | `~/input/compressed_image` | `sensor_msgs::msg::CompressedImage` | 圧縮画像 | -**自動運転ソフトウェアドキュメント** +### 出力 -**Planningコンポーネント** +Autoware向けのPlanningコンポーネントは、周囲環境を認識し、障害物を回避し、適切な経路を計画することにより、自動運転を実現します。 -このコンポーネントは、以下の責務を担います。 +**目的:** -- 車両の現在の状態に基づく安全で効率的なパス生成 -- パスを速度と加速度のコマンドに変換 -- 周囲環境とのやり取りの統合 +* 安全で効率的な経路計画の生成 +* 障害物の回避と衝突防止 +* 走行中に起こり得る状況への適応的な応答 -**主な機能** +**モジュール:** -- **グローバルパスプランニング:** 高レベルなパス生成で、出発点から目的地までの大まかなパスを計算します。 -- **ローカルパスプランニング:** より細かいパス生成で、車両の自車位置の周辺でのパスを計算します。 -- **Motion Planning:** 速度と加速度のコマンドを生成し、車両をパスに沿って誘導します。 -- **回避:** 障害物検出と回避、およびセンサーの制約を考慮します。 -- **トラフィック予測:** 周囲の車両の動きを予測し、パスをそれに応じて調整します。 +* **認識:** レーダー、LiDAR、カメラなどのセンサーデータから周囲環境を認識します。 +* **地図:** 事前に取得したマップデータを使用して、自車位置と周囲の環境に関する情報を提供します。 +* **経路計画:** 指定された目的地に基づいて、障害物を回避する安全で効率的な経路を生成します。 +* **経路追跡:** 生成された経路に沿って車両を誘導するために、ステアリングやスロットルを制御します。 -**アルゴリズム** +**アルゴリズム:** -Planningコンポーネントは、以下を含むさまざまなアルゴリズムを使用します。 +Planningコンポーネントは、以下を含むさまざまなアルゴリズムを活用しています。 -- Dijkstraアルゴリズム -- A\*アルゴリズム -- Velocity-Obstacle法 -- モデル予測制御 +* **動的経路計画(DWA):** リアルタイムで周囲環境の更新に基づいて、経路を継続的に調整します。 +* **確率的道路マッピング:** 周囲環境の不確実性に対処し、複数の経路オプションを考慮します。 +* **`post resampling`:** センサーデータの遅延を補正し、より正確な環境認識を実現します。 -**インターフェース** +**入出力:** -Planningコンポーネントは、他のコンポーネントと以下のインターフェースを介して相互作用します。 +* **入力:** + * センサーデータ + * マップデータ + * 目的地 +* **出力:** + * 経路計画 + * ステアリングおよびスロットル制御 -- **Perceptionコンポーネント:** センサーデータ、障害物リストを提供します。 -- **Controlコンポーネント:** 速度と加速度のコマンドを受け取ります。 -- **Localizationコンポーネント:** 自車位置と姿勢を提供します。 - -**制限事項** - -Planningコンポーネントには、以下を含むいくつかの制限事項があります。 - -- データの精度とセンサー範囲によって制約されます。 -- 予測は不確実性を伴います。 -- すべての状況下での完全な自動運転を保証することはできません。 - -**Autowareでのインプリメンテーション** - -Planningコンポーネントは、Autowareフレームワークの重要なモジュールとして実装されています。AutowareのPlanningモジュールは、以下を提供します。 - -- さまざまなアルゴリズムとインターフェース -- 'post resampling'を使用したバイアス補正 -- 道路網の統合 -- 効率的な実装 - -**テストと検証** - -Planningコンポーネントのテストと検証は、以下の方法を使用して行われます。 - -- シミュレーション -- 実車両テスト -- 速度逸脱量、加速度逸脱量の監視 - -| Name | Type | Description | -| -------------------- | ------------------------- | ----------- | -| `~/output/raw_image` | `sensor_msgs::msg::Image` | 非圧縮画像 | +| 名 | タイプ | 説明 | +| -------------------- | ------------------------- | ------------------ | +| `~/output/raw_image` | `sensor_msgs::msg::Image` | 非圧縮画像 | ## パラメータ {{ json_to_markdown("sensing/autoware_image_transport_decompressor/schema/image_transport_decompressor.schema.json") }} -## 想定 / 既知の制限 +## 想定/既知の制限事項 + +## (オプション) エラー検出と処理 -## (任意) エラーの検出と処理 +## (オプション) パフォーマンスの特性評価 -## (任意) パフォーマンス特性評価 +## (オプション) 参照/外部リンク -## (任意) 参照 / 外部リンク +## (オプション) 拡張機能/未実装部分 -## (任意) 将来の拡張 / 未実装部分 diff --git a/sensing/autoware_imu_corrector/README.md b/sensing/autoware_imu_corrector/README.md index d07bcd56fd47b..895ccace7174d 100644 --- a/sensing/autoware_imu_corrector/README.md +++ b/sensing/autoware_imu_corrector/README.md @@ -2,115 +2,110 @@ ## imu_corrector -`imu_corrector_node`はimuデータを補正するノードです。 +`imu_corrector_node`はIMUデータを補正するノードです。 -1. パラメータを読み込んでヨーレートオフセット$b$を補正します。 -2. パラメータを読み込んでヨーレートの標準偏差$\sigma$を補正します。 +1. パラメーターを読み取って、ヨーレートオフセット$b$を補正します。 +2. パラメーターを読み取って、ヨーレートの標準偏差$\sigma$を補正します。 -数学的には、以下の式を想定しています。 +数学的には、以下の方程式を使用します。 $$ \tilde{\omega}(t) = \omega(t) + b(t) + n(t) $$ -ここで、$\tilde{\omega}$は観測された角速度、$\omega$は真の角速度、$b$はオフセット、$n$はガウスノイズを表します。 -また、$n\sim\mathcal{N}(0, \sigma^2)$と仮定しています。 +ここで、$\tilde{\omega}$は観測された角速度、$\omega$は真の角速度、$b$はオフセット、$n$はガウス雑音です。また、$n\sim\mathcal{N}(0, \sigma^2)$と想定します。 - + ### 入力 -| 名称 | 型 | 説明 | -| -------- | ----------------------- | ----------------- | -| `~input` | `sensor_msgs::msg::Imu` | 未処理のIMUデータ | +| 名前 | 種別 | 説明 | +| -------- | ----------------------- | ------------ | +| `~input` | `sensor_msgs::msg::Imu` | 生のIMUデータ | -### 自動運転ソフトウェアのドキュメント - -#### Planning コンポーネント - -Planning コンポーネントは、Autoware の自動運転システムの重要な部分です。周囲環境を認識し、自車位置を推定し、走行経路を生成する役割があります。これらのタスクのために、Planning コンポーネントはさまざまなセンサーからのデータを統合して使用します。 - -#### 認識コンポーネント - -認識コンポーネントは、周囲環境の認識を担当する Planning コンポーネントのサブコンポーネントです。カメラ、レーダー、LiDAR などのセンサーからデータを受け取り、オブジェクトを検出、分類、追跡します。検出されたオブジェクトには、車両、歩行者、自転車、道路標識、建物などが含まれます。 - -#### 自車位置推定コンポーネント - -自車位置推定コンポーネントは、Planning コンポーネントのもう 1 つのサブコンポーネントで、自車位置を推定する役割があります。IMU、GNSS、オドメトリなどのセンサーからデータを受け取り、現在位置と姿勢を推定します。 - -#### 走行経路生成コンポーネント +### 出力 -走行経路生成コンポーネントは、周囲環境認識と自車位置推定の結果に基づいて走行経路を生成する Planning コンポーネントのサブコンポーネントです。速度、加速度、逸脱量などの制約を考慮して、安全で効率的な走行経路を計算します。 +自動運転ソフトウェアに関するドキュメントのURL: [https://gitlab.com/autowarefoundation/autoware.auto/autoware/planning](https://gitlab.com/autowarefoundation/autoware.auto/autoware/planning) -#### 制約検証コンポーネント +**Planningモジュール** -制約検証コンポーネントは、走行経路が速度、加速度、逸脱量の制約を満たしているかどうかを検証する Planning コンポーネントのサブコンポーネントです。制約逸脱量を検出して、制約違反がある場合に警報を発信します。 +Planningモジュールは、安全で効率的な経路計画と意思決定を実行します。 Planningモジュールは、現在の自車位置と周囲環境の情報を処理し、最適な軌道を生成します。 -#### `post resampling` コンポーネント +**機能** -`post resampling` コンポーネントは、Planning コンポーネントのサブコンポーネントで、走行経路を高周波で再サンプリングする役割があります。これにより、車両の動的性能や周囲環境の変化に対応できます。 +* 障害物回避 +* 交通法規遵守 +* 経路計画 +* 軌跡生成 +* `post resampling` +* 障壁回避 -#### 制御コンポーネント +**アーキテクチャ** -制御コンポーネントは、Autoware の自動運転システムのもう 1 つの重要な部分で、Planning コンポーネントが生成した走行経路に基づいて車両を制御する役割があります。ステアリング、アクセル、ブレーキなどの作動器を使用します。 +Planningモジュールは、以下の主要コンポーネントで構成されています。 -#### コントローラーコンポーネント +* **パスプランナー:** 安全で効率的な経路を生成します。 +* **モーションプランナー:** 障害物回避と交通法規遵守を処理します。 +* **Trajectory Optimizer:** スムーズで実現可能な軌跡を生成します。 -コントローラーコンポーネントは、制御コンポーネントのサブコンポーネントで、車両の速度、加速度、逸脱量を制御する役割があります。PID 制御や状態空間制御などの制御手法を使用します。 +**インターフェイス** -#### アクターコンポーネント +Planningモジュールは、以下のインターフェイスを介して他のコンポーネントと通信します。 -アクターコンポーネントは、制御コンポーネントが生成した制御信号に基づいて車両の作動器を制御する制御コンポーネントのサブコンポーネントです。ステアリングコントローラー、アクセルコントローラー、ブレーキコントローラーなどがあります。 +* **Vehicle Control:** 軌跡を送信し、自車位置を受信します。 +* **Perception:** 周囲環境に関する情報を提供します。 +* **Localization:** 自車位置と姿勢を推定します。 -| 名称 | タイプ | 説明 | -| --------- | ----------------------- | ----------------- | -| `~output` | `sensor_msgs::msg::Imu` | 補正済みIMUデータ | +| 名称 | タイプ | 説明 | +| --------- | ----------------------- | ------------------ | +| `~output` | `sensor_msgs::msg::Imu` | 補正済imuデータ | ### パラメータ -| 名称 | タイプ | 説明 | -| ---------------------------- | ------ | ---------------------------------------------- | -| `angular_velocity_offset_x` | double | imu_linkにおけるロール角速度オフセット [rad/s] | -| `angular_velocity_offset_y` | double | imu_linkにおけるピッチ角速度オフセット [rad/s] | -| `angular_velocity_offset_z` | double | imu_linkにおけるヨー角速度オフセット [rad/s] | -| `angular_velocity_stddev_xx` | double | imu_linkにおけるロール角速度の標準偏差 [rad/s] | -| `angular_velocity_stddev_yy` | double | imu_linkにおけるピッチ角速度の標準偏差 [rad/s] | -| `angular_velocity_stddev_zz` | double | imu_linkにおけるヨー角速度の標準偏差 [rad/s] | -| `acceleration_stddev` | double | imu_linkにおける加速度の標準偏差 [m/s^2] | +| 項目名 | 型 | 説明 | +| ---------------------------- | ------ | -------------------------------------------------------- | +| `angular_velocity_offset_x` | double | `imu_link`のロールレートオフセット [rad/s] | +| `angular_velocity_offset_y` | double | `imu_link`のピッチレートオフセット [rad/s] | +| `angular_velocity_offset_z` | double | `imu_link`のヨーレートオフセット [rad/s] | +| `angular_velocity_stddev_xx` | double | `imu_link`のロールレート標準偏差 [rad/s] | +| `angular_velocity_stddev_yy` | double | `imu_link`のピッチレート標準偏差 [rad/s] | +| `angular_velocity_stddev_zz` | double | `imu_link`のヨーレート標準偏差 [rad/s] | +| `acceleration_stddev` | double | `imu_link`の加速度標準偏差 [m/s^2] | -## gyro_bias_estimator +## gyro_bias_validator -`gyro_bias_validator`はジャイロのバイアスを検証するノードです。`sensor_msgs::msg::Imu`トピックをサブスクライブし、ジャイロのバイアスが指定範囲内にあるかどうかを確認します。 +`gyro_bias_validator`はジャイロスコープのバイアスを確認するノードです。`sensor_msgs::msg::Imu`トピックをサブスクライブして,ジャイロスコープのバイアスが一定の範囲内にあるかどうかを確認します。 -このノードは、車両が停止している場合に限り、ジャイロデータからバイアスを計算して平均化することに注意してください。 +ノードは,車両が停止しているときのみジャイロスコープデータの平均値からバイアスを計算することに注意してください。 ### 入力 -| 名称 | 種類 | 説明 | -| ----------------- | ----------------------------------------------- | --------------------- | -| `~/input/imu_raw` | `sensor_msgs::msg::Imu` | **未加工** IMU データ | -| `~/input/pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | NDT の自車位置 | +| 名前 | タイプ | 説明 | +| -------------------------- | ----------------------------------------------- | ------------------------------------- | +| `~/input/imu_raw` | `sensor_msgs::msg::Imu` | **生**IMUデータ | +| `~/input/pose` | `geometry_msgs::msg::PoseWithCovarianceStamped` | ndt pose | -入力ポーズは十分に正確であると仮定されています。例えば、NDTを使用する場合、NDTは適切に収束していると仮定します。 +入力された位姿は十分に正確であると仮定されます。例えばNDTを使用する場合、NDTが適切な収束をしていると仮定します。 -現在、Autowareの`pose_source`としてNDT以外のメソッドを使用することは可能ですが、精度の低いメソッドはIMUバイアスの推定には適していません。 +現在、Autowareの `pose_source`としてNDT以外のメソッドを使用することは可能ですが、精度が低いメソッドはIMUバイアス推定には適していません。 -将来、ポーズエラーの慎重な実装により、NDTによって推定されたIMUバイアスは検証だけでなくオンラインキャリブレーションにも使用できる可能性があります。 +将来的には、位姿誤差に対する注意深い実装により、NDTによって推定されたIMUバイアスは検証だけでなくオンラインキャリブレーションにも使用できる可能性があります。 ### 出力 -| 名称 | タイプ | 説明 | -| -------------------- | ------------------------------------ | ---------------------------------- | -| `~/output/gyro_bias` | `geometry_msgs::msg::Vector3Stamped` | ジャイロスコープのバイアス [rad/s] | +| 名称 | タイプ | 説明 | +| ------------------------ | ------------------------------------ | ------------------------------ | +| `~/output/gyro_bias` | `geometry_msgs::msg::Vector3Stamped` | ジャイロスコープのバイアス [rad/s] | ### パラメータ -このノードは、`imu_corrector.param.yaml`の`angular_velocity_offset_x`、`angular_velocity_offset_y`、`angular_velocity_offset_z`パラメータも使用します。 +このノードは、`imu_corrector.param.yaml` の `angular_velocity_offset_x`, `angular_velocity_offset_y`, `angular_velocity_offset_z` パラメータも使用することに注意してください。 + +| 名前 | 型 | 説明 | +| ----------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------- | +| `gyro_bias_threshold` | double | ジャイロスコープのバイアスのしきい値 [rad/s] | +| `timer_callback_interval_sec` | double | タイマークールバック関数の秒数 [sec] | +| `diagnostics_updater_interval_sec` | double | 診断アップデーターの期間 [sec] | +| `straight_motion_ang_vel_upper_limit` | double | 直線モーションでないと思われるヨー角速度の上限 [rad/s] | -| 名前 | 型 | 説明 | -| ------------------------------------- | ------ | ---------------------------------------------- | -| `gyro_bias_threshold` | double | ジャイロスコープのバイアスの閾値 [rad/s] | -| `timer_callback_interval_sec` | double | タイマコールバック関数の秒数 [秒] | -| `diagnostics_updater_interval_sec` | double | Diagnostics updater の周期 [秒] | -| `straight_motion_ang_vel_upper_limit` | double | 直線運動と見なさない、ヨー角速度の上限 [rad/s] | diff --git a/sensing/autoware_pcl_extensions/README.md b/sensing/autoware_pcl_extensions/README.md index 49083fa16686c..a309e3f183b98 100644 --- a/sensing/autoware_pcl_extensions/README.md +++ b/sensing/autoware_pcl_extensions/README.md @@ -2,34 +2,35 @@ ## 目的 -`autoware_pcl_extensions` は pcl 拡張ライブラリです。このパッケージ内のボクセルグリッドフィルターは、元のアルゴリズムとは異なるアルゴリズムで機能します。 +`autoware_pcl_extensions` は pcl 拡張ライブラリです。このパッケージ内のボクセルグリッドフィルタは、元のものとは異なるアルゴリズムで動作します。 -## 内部機構 / アルゴリズム +## 内部動作 / アルゴリズム ### 元のアルゴリズム [1] -1. 入力点群データの上に 3D ボクセルグリッドを作成します -2. 各ボクセルの重心を計算します -3. すべての点が重心で近似されます +1. 入力点群データ上に 3D ボクセルグリッドを作成する +2. 各ボクセルの重心を計算する +3. すべての点をその重心で近似する ### 拡張アルゴリズム -1. 入力点群データの上に 3D ボクセルグリッドを作成します -2. 各ボクセルの重心を計算します -3. **すべての点が重心への最も近い点で近似されます** +1. 入力点群データ上に 3D ボクセルグリッドを作成する +2. 各ボクセルの重心を計算する +3. **すべての点をその重心にもっとも近い点で近似する** ## 入力 / 出力 ## パラメータ -## 仮定 / 既知の制限事項 +## 仮定 / 制限事項 -## (省略可)エラー検出および処理 +## (省略可能) エラー検出と処理 -## (省略可)パフォーマンス特性 +## (省略可能) パフォーマンス特性 -## (省略可)参考文献 / 外部リンク +## (省略可能) 参考資料 / 外部リンク [1] -## (省略可)将来の拡張 / 実装されていない部分 +## (省略可能) 将来の拡張 / 実装予定の機能 + diff --git a/sensing/autoware_pointcloud_preprocessor/README.md b/sensing/autoware_pointcloud_preprocessor/README.md index abd76f9640e8b..bef8f54c37b49 100644 --- a/sensing/autoware_pointcloud_preprocessor/README.md +++ b/sensing/autoware_pointcloud_preprocessor/README.md @@ -1,144 +1,123 @@ -## autoware_pointcloud_preprocessor +# autoware_pointcloud_preprocessor ## 目的 -`autoware_pointcloud_preprocessor` は以下のフィルタを含むパッケージです: +`autoware_pointcloud_preprocessor`は、次のフィルタを含むパッケージです。 -- 外れ値の除去 -- クロッピング +- 異常点の除去 +- クロッピング(切り抜き) - 点群の連結 - 歪みの補正 - ダウンサンプリング -## 仕組み/アルゴリズム +## 内部動作/アルゴリズム -各フィルタのアルゴリズムの詳細については、以下のリンクを参照してください。 +各フィルタのアルゴリズムの詳細については、次のリンクを参照してください。 -| フィルター名 | 説明 | 詳細 | -| ----------------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------- | -| concatenate_data | 複数の点群を購読し、それらを 1 つの点群に連結します。 | [link](docs/concatenate-data.md) | -| crop_box_filter | 1 回の走査中に自車位置の移動によって生じた点群の歪みを補正します。 | [link](docs/crop-box-filter.md) | -| distortion_corrector | 1 回の走査中に自車位置の移動によって生じた点群の歪みを補正します。 | [link](docs/distortion-corrector.md) | -| downsample_filter | 入力点群をダウンサンプリングします。 | [link](docs/downsample-filter.md) | -| outlier_filter | ハードウェアの問題、雨滴、小さな昆虫によって引き起こされるノイズとして点を削除します。 | [link](docs/outlier-filter.md) | -| passthrough_filter | 与えられたフィールド (例: x、y、z、強度) の範囲外にある点を削除します。 | [link](docs/passthrough-filter.md) | -| pointcloud_accumulator | 一定時間点群を累積します。 | [link](docs/pointcloud-accumulator.md) | -| vector_map_filter | ベクトルマップを使用して、車線の外側の点を削除します。 | [link](docs/vector-map-filter.md) | -| vector_map_inside_area_filter | 指定されたタイプのパラメーターによって、ベクトルマップ領域内の点を削除します。 | [link](docs/vector-map-inside-area-filter.md) | +| フィルター名 | 説明 | 詳細 | +| ----------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------- | +| concatenate_data | 複数のポイントクラウドをサブスクライブして、ポイントクラウドに連結する | [リンク](docs/concatenate-data.md) | +| crop_box_filter | 1 回のスキャン中に自己車両の移動によって生じるポイントクラウドの歪みを補正する | [リンク](docs/crop-box-filter.md) | +| distortion_corrector | 1 回のスキャン中に自己車両の移動によって生じるポイントクラウドの歪みを補正する | [リンク](docs/distortion-corrector.md) | +| downsample_filter | 入力ポイントクラウドをダウンサンプリングする | [リンク](docs/downsample-filter.md) | +| outlier_filter | ハードウェアの問題、雨滴、小さな虫によって生じるノイズとしてポイントを除去する | [リンク](docs/outlier-filter.md) | +| passthrough_filter | 与えられたフィールド(例:x、y、z、強度)の範囲外のポイントを除去する | [リンク](docs/passthrough-filter.md) | +| pointcloud_accumulator | 一定時間分ポイントクラウドを累積する | [リンク](docs/pointcloud-accumulator.md) | +| vector_map_filter | ベクトルマップを使用して、車線の外のポイントを除去する | [リンク](docs/vector-map-filter.md) | +| vector_map_inside_area_filter | パラメータで与えられたタイプを持つベクトルマップ領域内のポイントを除去する | [リンク](docs/vector-map-inside-area-filter.md) | -## 入力 / 出力 +## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ----------------- | ------------------------------- | -------------------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 基準点群 | -| `~/input/indices` | `pcl_msgs::msg::Indices` | 基準点のインデックス | +| 名前 | タイプ | 説明 | +| ----------------- | ------------------------------- | ----------------- | +| `~/input/points` | `sensor_msgs::msg::PointCloud2` | 比較対象ポイント | +| `~/input/indices` | `pcl_msgs::msg::Indices` | 比較対象インデックス | ### 出力 -#### 概要 +Autoware.Autoを構築するためのドキュメントへようこそ。このドキュメントでは、Autoware.Autoの構成要素であるPlanningモジュールの概要を紹介します。 -本ドキュメントは、AutowareのPlanningコンポーネント/モジュールの詳細を説明します。Planningコンポーネントは、車両を目標地点まで誘導するために必要な経路計画と動作計画を生成します。 +**Planningモジュール** -#### アーキテクチャ +Planningモジュールは、自動運転システムの「脳」として機能します。周囲の環境を認識し、リアルタイムで安全で効率的な経路計画を行います。このモジュールは、自己位置推定、経路計画、経路最適化の3つの主要なサブコンポーネントで構成されています。 -Planningコンポーネントは、以下のモジュールで構成されています。 +**自己位置推定** -- **Local Planner (LP)**: 現在の経路と周辺環境を考慮して、局所的な経路計画を生成します。 -- **Global Planner (GP)**: 長距離の経路計画を生成します。 -- **Behavior Planner (BP)**: 動作計画を生成し、LPで生成された経路を修正します。 -- **Planner Fusion (PF)**: LPとGPの経路を統合します。 +このサブコンポーネントは、センサーデータを使用して自車位置を正確かつリアルタイムで推定します。 -#### 機能 +**経路計画** -Planningコンポーネントは、次の機能を提供します。 +このサブコンポーネントは、現在の位置から目的地までの安全で最適な経路を生成します。 -- **経路生成**: 目的地までの経路を生成します。 -- **経路最適化**: 経路を最適化して走行性を向上させます。 -- **障害物回避**: 障害物を検出し、それらを回避する経路を生成します。 -- **速度計画**: 目標速度と加速度を生成します。 +**経路最適化** -#### アルゴリズム +このサブコンポーネントは、リアルタイムに経路を'post resampling'し、障害物や交通状況の変化に応じて経路を最適化します。 -Planningコンポーネントでは、次のアルゴリズムを使用しています。 +**Planningモジュールの責任** -- **A\*探索**: 最適経路の探索に使用されます。 -- **Dijkstraのアルゴリズム**: 最短経路の探索に使用されます。 -- **動的計画法**: 最適化された経路の生成に使用されます。 +* リアルタイムの経路計画 +* 障害物回避 +* 安全性マージンの維持 +* 効率的な経路の生成 +* 動的環境への適応 -#### 入力 +**依存関係** -Planningコンポーネントは、以下の入力を必要とします。 +Planningモジュールは、PerceptionモジュールとControlモジュールに依存しています。 -- **自車位置**: GPSとセンサーデータから取得されます。 -- **周辺環境マップ**: LiDARやカメラデータから生成されます。 -- **目標地点**: ナビゲーションシステムから取得されます。 +* Perceptionモジュールは、 Planningモジュールに周囲の環境に関する情報を提供します。 +* Controlモジュールは、Planningモジュールによって生成された経路を実装します。 -#### 出力 +**インターフェース** -Planningコンポーネントは、以下の出力を生成します。 +Planningモジュールは、ROSトピックを通じて他のモジュールと通信します。主なトピックを次に示します。 -- **経路**: 目的地までの経路。 -- **速度計画**: 目標速度と加速度。 -- **ステアリング指令**: 車両のステアリングを制御するために使用されます。 -- **障害物検出結果**: 車両周辺の障害物を示します。 +* `/final_waypoints`:最終的な経路 +* `/current_pose`:自車位置 +* `/sensor_msgs/PointCloud2`:ポイントクラウドデータ -#### 仕様 +## 出力ポイント -Planningコンポーネントは、以下の仕様を満たしています。 +| 名前 | データ型 | 説明 | +| ----------------- | ------------------------------- | --------------- | +| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタされた点 | -- **処理時間**: 100ms以内 -- **速度逸脱量**: 0.5m/s以内 -- **加速度逸脱量**: 0.2m/s²以内 -- **衝突時間最小化**: `post resampling`後に衝突回避 +## パラメーター -#### 注意事項 +### ノードパラメーター -Planningコンポーネントを使用する際は、以下の注意事項を考慮してください。 +| 名称 | タイプ | デフォルト値 | 説明 | +| ----------------- | ------ | ------------- | ---------------------------------------------------------------- | +| input_frame | 文字列 | " " | 入力フレームID | +| output_frame | 文字列 | " " | 出力フレームID | +| max_queue_size | 整数 | 5 | 入力/出力トピックの最大キューサイズ | +| use_indices | ブール | false | ポイントクラウドインデックスを使用するフラグ | +| latched_indices | ブール | false | ポイントクラウドインデックスをラッチするフラグ | +| approximate_sync | ブール | false | 近似同期オプションを使用するフラグ | -- Planningコンポーネントは、完全ではありません。常に周囲を注意して運転してください。 -- Planningコンポーネントは、周囲環境が正確にマップされている場合に最も効果的です。 -- Planningコンポーネントは、悪天候や複雑な交通状況では十分に機能しない場合があります。 +## 想定事項 / 既知の制限事項 -| 名称 | タイプ | 説明 | -| ----------------- | ------------------------------- | ------------------------ | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | フィルタリング済みの点群 | - -## パラメータ - -### ノードパラメータ - -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------------ | ------ | ------------ | ---------------------------------------------- | -| `input_frame` | 文字列 | "" | 入力フレームID | -| `output_frame` | 文字列 | "" | 出力フレームID | -| `max_queue_size` | 整数 | 5 | 入力/出力トピックの最大キューサイズ | -| `use_indices` | ブール | false | ポイントクラウドインデックスを使用するフラグ | -| `latched_indices` | ブール | false | ポイントクラウドインデックスをラッチするフラグ | -| `approximate_sync` | ブール | false | 近似同期オプションを使用するフラグ | - -## 想定事項と既知の制限事項 - -`autoware::pointcloud_preprocessor::Filter` は [この問題](https://github.com/ros-perception/perception_pcl/issues/9) により、 pcl_perception [1] に基づいて実装されています。 +`autoware::pointcloud_preprocessor::Filter` は、[この問題](https://github.com/ros-perception/perception_pcl/issues/9)により、pcl_perception [1] に基づいて実装されています。 ## パフォーマンスの測定 -Autoware では、各 LiDAR センサーからの点群データは、知覚パイプラインに入力される前にセンシングパイプラインで前処理されます。前処理段階は、以下の図で示されています。 +Autowareでは、各LiDARセンサーからの点群データは、知覚パイプラインに入力される前に、センシングパイプラインで前処理されます。前処理段階は、以下の図に示されています。 ![pointcloud_preprocess_pipeline.drawio.png](docs%2Fimage%2Fpointcloud_preprocess_pipeline.drawio.png) -パイプライン内の各段階で処理遅延が発生します。ほとんどの場合、`ros2 topic delay /topic_name`を使用してメッセージヘッダーと現在の時間の間隔を測定します。このアプローチは、小規模のメッセージに適しています。ただし、大規模な点群メッセージを処理する場合、この方法は追加の遅延を生じさせます。これは主に、外部からこれらの大規模な点群メッセージにアクセスすることがパイプラインのパフォーマンスに影響を与えるためです。 +パイプライン内の各段階で処理遅延が発生します。ほとんどの場合、メッセージヘッダーと現在の時間間の時間を測定するために `ros2 topic delay /topic_name` を使用しています。このアプローチは、小サイズのメッセージには有効です。ただし、大規模な点群メッセージを処理する場合、この方法は追加の遅延を発生させます。これは主に、これらの大規模な点群メッセージに外部からアクセスすると、パイプラインのパフォーマンスに影響を与えるためです。 -当社のセンシング/知覚ノードは、プロセス内通信を活用してコンポーザブルノードコンテナー内で実行するように設計されています。これらのメッセージへの外部サブスクリプション(ros2 トピック遅延または rviz2 の使用など)は、追加の遅延をもたらし、外部からサブスクライブすることによってパイプラインを遅くすることさえあります。したがって、これらの測定は正確ではありません。 +センシング/知覚ノードは、プロセス内通信を利用するコンポーザブルノードコンテナ内で動作するように設計されています。これらのメッセージに対する外部サブスクリプション(ros2 topic delay または rviz2 の使用など)は、追加の遅延を引き起こし、外部的にサブスクライブすることでパイプラインを低速化することさえあります。したがって、これらの測定結果は正確ではありません。 -この問題を軽減するために、パイプライン内の各ノードがパイプラインの待ち時間レポートする方法を採用しました。このアプローチは、プロセス内通信の整合性を確保し、パイプライン内の遅延をより正確に測定できます。 +この問題を軽減するために、パイプライン内の各ノードがパイプラインの待ち時間データを報告する方法を採用しました。このアプローチにより、プロセス内通信の整合性が確保され、パイプライン内の遅延をより正確に測定できます。 ### パイプラインのベンチマーク -パイプライン内のノードは、パイプラインの待ち時間をレポートし、センサーからの点群出力からノードの出力までの持続時間を示します。このデータは、パイプラインの正常性と効率を評価するために不可欠です。 +パイプライン内のノードは、センサーのポイントクラウド出力からノードの出力までの時間を示す、パイプラインの待ち時間データを報告します。このデータは、パイプラインの健全性と効率性を評価するために不可欠です。 -Autoware を実行すると、以下の ROS 2 トピックを購読することで、パイプライン内の各ノードのパイプラインの待ち時間を監視できます。 +Autowareを実行すると、次のROS 2トピックをサブスクライブすることで、パイプライン内の各ノードのパイプラインの待ち時間データを監視できます。 - `/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms` - `/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms` @@ -146,14 +125,15 @@ Autoware を実行すると、以下の ROS 2 トピックを購読すること - `/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms` - `/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms` -これらのトピックはパイプラインの待ち時間を提供し、LidarX のセンサー出力から各後続ノードまでのパイプラインのさまざまな段階での遅延に関する洞察を提供します。 +これらのトピックは、パイプラインの待ち時間データを提供し、LidarXのセンサー出力から各後続ノードまでのパイプラインのさまざまな段階での遅延に関する洞察を与えます。 -## (任意)エラーの検出および処理 +## (オプション) エラー検出および処理 -## (任意)パフォーマンス特性 +## (オプション) パフォーマンスの特性評価 -## 参照文献/外部リンク +## 参照/外部リンク [1] -## (任意)今後の拡張/未実装部分 +## (オプション) 将来の拡張/未実装部分 + diff --git a/sensing/autoware_radar_scan_to_pointcloud2/README.md b/sensing/autoware_radar_scan_to_pointcloud2/README.md index cae787deb4e78..f4e94518c0e75 100644 --- a/sensing/autoware_radar_scan_to_pointcloud2/README.md +++ b/sensing/autoware_radar_scan_to_pointcloud2/README.md @@ -2,32 +2,34 @@ ## radar_scan_to_pointcloud2_node -- `radar_msgs::msg::RadarScan` から `sensor_msgs::msg::PointCloud2` に変換 +- `radar_msgs::msg::RadarScan`から`sensor_msgs::msg::PointCloud2`に変換します - 計算コスト O(n) - n: レーダーリターンの数 ### 入力トピック -| 名 | タイプ | 説明 | -| ----------- | -------------------------- | --------- | -| input/radar | radar_msgs::msg::RadarScan | RadarScan | +| 名前 | 型 | 説明 | +| ----------- | -------------------------- | ----------- | +| input/radar | radar_msgs::msg::RadarScan | RadarScan | ### 出力トピック -| 名前 | 型 | 説明 | -| --------------------------- | ----------------------------- | --------------------------------------------- | -| output/amplitude_pointcloud | sensor_msgs::msg::PointCloud2 | 強度が振幅のPointCloud2レーダー点群 | -| output/doppler_pointcloud | sensor_msgs::msg::PointCloud2 | 強度がドップラー速度のPointCloud2レーダー点群 | +| 名称 | 型 | 説明 | +|---|---|---| +| output/amplitude_pointcloud | sensor_msgs::msg::PointCloud2 | 強度が振幅のPointCloud2レーダー点群 | +| output/doppler_pointcloud | sensor_msgs::msg::PointCloud2 | 強度がドップラー速度のPointCloud2レーダー点群 | -### パラメータ +### パラメーター -| 名称 | タイプ | 説明 | -| ---------------------------- | ------ | ------------------------------------------------------------------------------- | -| publish_amplitude_pointcloud | bool | レーダーの点群の強度を振幅で公開するかどうか。初期値は `true` です。 | -| publish_doppler_pointcloud | bool | レーダーの点群の強度をドップラー速度で公開するかどうか。初期値は `false` です。 | +| 名称 | タイプ | 説明 | +| ---------------------------- | ---- | ------------------------------------------------------------------------------------------ | +| publish_amplitude_pointcloud | bool | 強度が振幅のレーダーポイントクラウドを公開するかどうか。既定値は「true」です。 | +| publish_doppler_pointcloud | bool | 強度がドップラー速度のレーダーポイントクラウドを公開するかどうか。既定値は「false」です。 | + +### 実行方法 -### 起動方法 ```sh ros2 launch autoware_radar_scan_to_pointcloud2 radar_scan_to_pointcloud2.launch.xml ``` + diff --git a/sensing/autoware_radar_static_pointcloud_filter/README.md b/sensing/autoware_radar_static_pointcloud_filter/README.md index 458e0952bbd14..f7070500cf44b 100644 --- a/sensing/autoware_radar_static_pointcloud_filter/README.md +++ b/sensing/autoware_radar_static_pointcloud_filter/README.md @@ -2,35 +2,37 @@ ## radar_static_pointcloud_filter_node -Doppler速度と自車運動を使用して、静的および動的なレーダーポイントクラウドを抽出します。 -計算コストはO(n)で、`n`はレーダーポイントクラウドの数です。 +ドップラー速度と自車運動を使用して、静的/動的レーダー点群を抽出します。 +計算コストはO(n)です。`n`はレーダー点群の数です。 ### 入力トピック -| 名称 | 型 | 説明 | -| -------------- | -------------------------- | ---------------------- | -| input/radar | radar_msgs::msg::RadarScan | RadarScan | -| input/odometry | nav_msgs::msg::Odometry | 自車オドメトリトピック | +| 名前 | タイプ | 説明 | +| ------------ | -------------------------- | -------------------------- | +| input/radar | radar_msgs::msg::RadarScan | RadarScan | +| input/odometry | nav_msgs::msg::Odometry | 自車位置トピック | ### 出力トピック -| 名称 | タイプ | 説明 | -| ------------------------- | -------------------------- | ---------------------------- | -| output/static_radar_scan | radar_msgs::msg::RadarScan | 静的レーダーポイントクラウド | -| output/dynamic_radar_scan | radar_msgs::msg::RadarScan | 動的レーダーポイントクラウド | +| 名前 | タイプ | 説明 | +| ------------------------- | -------------------------- | ------------------------ | +| output/static_radar_scan | radar_msgs::msg::RadarScan | 静的レーダー点群 | +| output/dynamic_radar_scan | radar_msgs::msg::RadarScan | 動的レーダー点群 | ### パラメータ -| 名前 | タイプ | 説明 | +| 名称 | 型 | 説明 | | ------------------- | ------ | ------------------------------------------ | -| doppler_velocity_sd | double | レーダー・ドップラー速度の標準偏差。 [m/s] | +| doppler_velocity_sd | double | レーダー ドップラー速度の標準偏差 [m/s] | ### 起動方法 + ```sh ros2 launch autoware_radar_static_pointcloud_filter radar_static_pointcloud_filter.launch.xml ``` ### アルゴリズム -![algorithm](docs/radar_static_pointcloud_filter.drawio.svg) +![アルゴリズム](docs/radar_static_pointcloud_filter.drawio.svg) + diff --git a/sensing/autoware_radar_threshold_filter/README.md b/sensing/autoware_radar_threshold_filter/README.md index 100494b025c1a..0eb6e664422b0 100644 --- a/sensing/autoware_radar_threshold_filter/README.md +++ b/sensing/autoware_radar_threshold_filter/README.md @@ -2,47 +2,49 @@ ## radar_threshold_filter_node -しきい値によるレーダーリターンのノイズ除去 +レーダーリターンのノイズを閾値によって除去します。 -- Amplitdeフィルタ:振幅が低い場合はノイズとみなします -- FOV Filta:レーダーのFOVエッジからのポイントクラウドは摂動が発生します -- 距離フィルタ:近すぎるポイントクラウドはノイズが発生することが多いです +- 振幅フィルタ: 低振幅はノイズと見なされます +- FOVフィルタ: レーダーの視野の端からの点群は擾乱が発生します +- 距離フィルタ: 近すぎる点群はノイズが発生することがよくあります -計算量はO(n)です。ここで`n`はレーダーリターンの数です。 +計算コストはO(n)です。`n`はレーダーリターンの数です。 ### 入力トピック -| 名称 | 型 | 説明 | -| ----------- | ---------------------------- | ---------------------------------- | -| input/radar | radar_msgs/msg/RadarScan.msg | レーダー・ポイントクラウド・データ | +| 名 | 型 | 説明 | +|---|---|---| +| input/radar | radar_msgs/msg/RadarScan.msg | レーダポイントクラウドデータ | ### 出力トピック -| Name | Type | 説明 | -| ------------ | ---------------------------- | -------------------------------------- | -| output/radar | radar_msgs/msg/RadarScan.msg | フィルタされたレーダーポイントクラウド | +| 名前 | タイプ | 説明 | +| ------------ | ---------------------------- | ------------------------- | +| output/radar | radar_msgs/msg/RadarScan.msg | フィルタリングされたレーダー点群 | ### パラメータ -- ノードパラメータ - -| 名前 | タイプ | 説明 | -| ------------------- | ------ | ------------------------------------------------------------------------------------------------------- | -| is_amplitude_filter | bool | このパラメータが true の場合、振幅フィルタを適用する(`amplitude_min` < 振幅 < `amplitude_max` を公開) | -| amplitude_min | double | [dBm2] | -| amplitude_max | double | [dBm2] | -| is_range_filter | bool | このパラメータが true の場合、レンジフィルタを適用する(`range_min` < 距離 < `range_max` を公開) | -| range_min | double | [m] | -| range_max | double | [m] | -| is_azimuth_filter | bool | このパラメータが true の場合、角度フィルタを適用する(`azimuth_min` < 距離 < `azimuth_max` を公開) | -| azimuth_min | double | [rad] | -| azimuth_max | double | [rad] | -| is_z_filter | bool | このパラメータが true の場合、z 位置フィルタを適用する(`z_min` < z < `z_max` を公開) | -| z_min | double | [m] | -| z_max | double | [m] | +- ノードパラメータの場合 + +| 名前 | 型 | 説明 | +| ------------------- | ------ | ------------------------------------------------------------------------------------------- | +| is_amplitude_filter | bool | このパラメータが真の場合、振幅フィルタを適用(振幅_最小 < 振幅 < 振幅_最大をパブリッシュ) | +| amplitude_min | double | [dBm^2] | +| amplitude_max | double | [dBm^2] | +| is_range_filter | bool | このパラメータが真の場合、レンジフィルタを適用(レンジ_最小 < レンジ < レンジ_最大をパブリッシュ) | +| range_min | double | [m] | +| range_max | double | [m] | +| is_azimuth_filter | bool | このパラメータが真の場合、角度フィルタを適用(方位角_最小 < 範囲 < 方位角_最大をパブリッシュ) | +| azimuth_min | double | [rad] | +| azimuth_max | double | [rad] | +| is_z_filter | bool | このパラメータが真の場合、Z位置フィルタを適用(z_最小 < z < z_最大をパブリッシュ) | +| z_min | double | [m] | +| z_max | double | [m] | ### 起動方法 + ```sh ros2 launch autoware_radar_threshold_filter radar_threshold_filter.launch.xml ``` + diff --git a/sensing/autoware_radar_tracks_noise_filter/README.md b/sensing/autoware_radar_tracks_noise_filter/README.md index 2242ed8b3db2b..eced9d9ec2b32 100644 --- a/sensing/autoware_radar_tracks_noise_filter/README.md +++ b/sensing/autoware_radar_tracks_noise_filter/README.md @@ -1,81 +1,91 @@ -## autoware_radar_tracks_noise_filter +# autoware_radar_tracks_noise_filter -このパッケージには、`radar_msgs/msg/RadarTrack`用のレーダーオブジェクトフィルタモジュールが含まれています。 -このパッケージは、レーダートラック内のノイズオブジェクトを除去することができます。 +このパッケージには、`radar_msgs/msg/RadarTrack`用レーダーオブジェクトフィルタモジュールが含まれています。 +このパッケージは、RadarTracks内のノイズオブジェクトをフィルタリングできます。 ## アルゴリズム -このパッケージのコアアルゴリズムは、`RadarTrackCrossingNoiseFilterNode::isNoise()` 関数です。 -詳細は、関数とそのパラメータを参照してください。 +このパッケージのコアアルゴリズムは`RadarTrackCrossingNoiseFilterNode::isNoise()`関数です。 +詳細は関数とそのパラメータを参照してください。 -- Y軸しきい値 +- Y軸のしきい値 -レーダーはx軸速度をドップラー速度として検出できますが、y軸速度は検出できません。 -一部のレーダーはデバイス内部でy軸速度を推定できますが、精度が低い場合があります。 -y軸しきい値フィルタでは、レーダートラックのy軸速度が`velocity_y_threshold`より大きい場合、ノイズオブジェクトとして処理されます。 +レーダーはドップラー速度としてx軸速度を検出できますが、y軸速度を検出することはできません。 +一部のレーダーはデバイス内にy軸速度を推定できますが、精度が劣る場合があります。 +y軸しきい値フィルタでは、RadarTrackのy軸速度が`velocity_y_threshold`を超える場合、ノイズオブジェクトとして扱います。 ## 入力 -| Name | Type | Description | -| ---------------- | -------------------------------- | --------------------------------------- | -| `~/input/tracks` | `radar_msgs/msg/RadarTracks.msg` | 3D 検出されたトラック(レーダートラック) | +| 名前 | タイプ | 説明 | +| ---------------- | ------------------------------- | --------------------- | +| `~/input/tracks` | radar_msgs/msg/RadarTracks.msg | 3D検出された軌跡 | -## 出力 +## アウトプット -このドキュメントは、AutowareオペレーティングシステムのPlanningコンポーネントの設計について記載しています。 +このモジュールは、自動運転システム向けのPlanningコンポーネントを提供します。Planningモジュールは、一次元経路生成(``1D Path Generation``)、二次元経路生成(``2D Path Generation``)、経路追従(``Path Following``)などの機能を提供します。 -### Planningの概要 +### Planningモジュールの機能 -Planningコンポーネントは、自車位置に基づいて、目的地までの安全な経路を生成します。この経路は、速度、加速度、およびステアリング角の制限に従って生成されます。 +* 安全性の高い一次元経路の生成 +* 交通状況や交通規制を考慮した二次元経路の生成 +* 車両の自車位置をリアルタイムで考慮した経路の追従 +* 経路追従中の障害物検知と回避 +* 制御コマンドの出力 -### 機能 +### Planningモジュールのインターフェース -Planningコンポーネントには、以下のような機能があります。 +Planningモジュールは、次のインターフェースを介して他のAutowareコンポーネントと通信します。 -- 目的地までの経路を生成する。 -- velocity逸脱量、acceleration逸脱量、ステアリング角逸脱量を考慮した安全な経路を生成する。 -- `post resampling`を実行して、経路上の潜在的な障害物を避ける。 -- 経路をNavigationコンポーネントに提供する。 +* `Input:` + * センサーデータ + * 自車位置 + * 交通状況 +* `Output:` + * 制御コマンド + * 経路情報 -### アーキテクチャ +### Planningモジュールの構成 -Planningコンポーネントは、次のモジュールで構成されています。 +Planningモジュールは、次のサブモジュールで構成されています。 -- **Path Planner:** 自車位置に基づいて安全な経路を生成する。 -- **Trajectory Planner:** velocity逸脱量、acceleration逸脱量、ステアリング角逸脱量を考慮した安全な経路を生成する。 -- **Obstacle Avoidance:** `post resampling`を実行して、経路上の潜在的な障害物を避ける。 -- **Route Planner:** Navigationコンポーネントに経路を提供する。 +* `1D Path Generation:` 一次元経路生成モジュール +* `2D Path Generation:` 二次元経路生成モジュール +* `Path Following:` 経路追従モジュール +* `Obstacle Detection and Avoidance:` 障害物検知と回避モジュール -### 使用方法 +### Planningモジュールの使用方法 -Planningコンポーネントを使用するには、次の手順に従ってください。 +Planningモジュールを使用するには、次の手順に従います。 -1. 目的地を指定します。 -2. Planningコンポーネントを起動します。 -3. Planningコンポーネントが経路を生成するのを待ちます。 -4. 経路が生成されたら、Navigationコンポーネントに渡します。 +1. PlanningモジュールをAutowareシステムに統合します。 +2. Planningモジュールに必要な設定を行います。 +3. Planningモジュールを実行します。 -### 制限事項 +### Planningモジュールの設定 -Planningコンポーネントには、以下のような制限があります。 +Planningモジュールの設定は、`config.yaml`ファイルで行います。設定ファイルには、次のパラメータが含まれます。 -- 障害物を検出できません。 -- 動的な障害物に対応できません。 -- 高速道路での運転に対応していません。 +* `1D Path Generation:` 一次元経路生成モジュールのパラメータ +* `2D Path Generation:` 二次元経路生成モジュールのパラメータ +* `Path Following:` 経路追従モジュールの設定 +* `Obstacle Detection and Avoidance:` 障害物検知と回避モジュールの設定 -### 貢献 +### Planningモジュールの実行 -Autoware Planningコンポーネントに貢献するには、以下のリポジトリを参照してください。 +Planningモジュールを実行するには、次のコマンドを使用します。 -[https://github.com/AutowareFoundation/autoware/tree/master/ros/planning](https://github.com/AutowareFoundation/autoware/tree/master/ros/planning) +``` +$ roslaunch autoware_planning planning.launch +``` -| 名称 | 種類 | 説明 | -| -------------------------- | ------------------------------ | ------------------------------ | -| `~/output/noise_tracks` | radar_msgs/msg/RadarTracks.msg | ノイズオブジェクト | -| `~/output/filtered_tracks` | radar_msgs/msg/RadarTracks.msg | フィルタ処理されたオブジェクト | +| 名称 | 種類 | 説明 | +| -------------------------- | ------------------------------ | --------- | +| `~/output/noise_tracks` | radar_msgs/msg/RadarTracks.msg | ノイズオブジェクト | +| `~/output/filtered_tracks` | radar_msgs/msg/RadarTracks.msg | フィルタリングされたオブジェクト | ## パラメータ -| 名前 | タイプ | 説明 | デフォルト値 | -| :--------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------- | :----------- | -| `velocity_y_threshold` | double | Y軸速度の閾値 [m/s]。レーダーのトラックのY軸速度が`velocity_y_threshold`を超える場合、ノイズオブジェクトとして扱われます。 | 7.0 | +| 名前 | 型 | 説明 | デフォルト値 | +| :--------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------ | :------------ | +| `velocity_y_threshold` | double | Y軸速度しきい値 [m/s]。RadarTrack の Y 軸速度が `velocity_y_threshold` を超える場合、ノイズオブジェクトとして処理されます。 | 7.0 | + diff --git a/sensing/livox/autoware_livox_tag_filter/README.md b/sensing/livox/autoware_livox_tag_filter/README.md index ef7df4280a225..e7c67a372cea0 100644 --- a/sensing/livox/autoware_livox_tag_filter/README.md +++ b/sensing/livox/autoware_livox_tag_filter/README.md @@ -1,11 +1,11 @@ -# livox_tag_filter +## livox_tag_filter ## 目的 -`livox_tag_filter`は、次のタグを使用して点群からノイズを除去するノードです。 +`livox_tag_filter`は、以下のタグを使用して点群からノイズを除去するノードです。 -- 空間位置に基づいた点の特性 -- 強度に基づいた点の特性 +- 空間的位置に基づくポイントプロパティ +- 強度に基づくポイントプロパティ - リターン番号 ## 内部動作 / アルゴリズム @@ -14,102 +14,91 @@ ### 入力 -| Name | Type | Description | -| --------- | ------------------------------- | -------------------- | -| `~/input` | `sensor_msgs::msg::PointCloud2` | リファレンスポイント | +| 名前 | タイプ | 説明 | +| --------- | ------------------------------- | ----------- | +| `~/input` | `sensor_msgs::msg::PointCloud2` | 基準点 | ### 出力 -### Localizerについて +Autowareは、ROS Fuerteで動作する自己運転車向けのオープンソースソフトウェアスタックです。 -このドキュメントでは、AutowareのLocalizerの機能と実装について説明します。Localizerモジュールは、SLAMの結果を出力として受け取り、自車位置と自身の周囲地図を推定します。 +#### システムの全体像 -#### 機能 +Autowareのアーキテクチャは以下のモジュールで構成されています。 -Localizerの主な機能は次のとおりです。 +* **Planning**:経路計画と速度計画を実行します。 +* **Control**:自車位置とその他の情報を考慮して、車の制御を行います。 +* **Perception**:センサーデータから自車周囲の環境を認識します。 +* **Localization**:自車位置を推定します。 -- Lidar、カメラ、IMUセンサーデータの統合 -- 移動・静止物体の検出 -- オドメトリとSLAMによる自車位置の推定 -- 車線および障害物の周囲地図の抽出 +#### 詳細なモジュール -#### 実装 +**Perception**モジュールでは、以下を実行します。 -Localizerモジュールは、次のコンポーネントで構成されています。 +* **カメラ処理**:画像から物体検出、セグメンテーション、深さ推定を行います。 +* **LiDAR処理**:点群から物体検出、トラッキング、クラスタリングを行います。 +* **レーダー処理**:レーダー信号から物体検出、速度推定を行います。 -- **Sensor Preprocessor:**センサーデータの前処理とフィルタリングを行います。 -- **Odometry:**オドメトリ情報とIMUデータを使用して、自車位置を推定します。 -- **SLAM:**Lidarデータを使用して、周囲環境の地図と自車位置を推定します。 -- **Moving Object Detector:**Lidarデータを使用して、移動物体を検出します。 -- **Lane Extractor:**Lidarデータを使用して、車線を抽出します。 -- **Obstacle Extractor:**Lidarデータを使用して、障害物を抽出します。 +**Planning**モジュールでは、以下を実行します。 -#### 入出力インターフェース +* **経路計画**:現在の地図と自車位置に基づいて、目的地まで安全な経路を生成します。 +* **速度計画**:経路計画に基づいて、速度プロファイルを作成します。 -Localizerモジュールは、次のインターフェースで入出力を処理します。 +**Control**モジュールでは、以下を実行します。 -**入力:** +* **ステアリング制御**:目標ステアリング角を生成し、車両のステアリングを行います。 +* **スロットル制御**:目標速度を生成し、車両の速度を制御します。 +* **ブレーキ制御**:障害物との衝突回避のために、車両のブレーキを行います。 -- Lidarデータ -- カメラデータ(オプション) -- IMUデータ -- GPSデータ(オプション) +**Localization**モジュールでは、以下を実行します。 -**出力:** +* **GNSS測位**:衛星信号を使用して自車位置を推定します。 +* **IMU慣性航法**:加速度計とジャイロスコープを使用して、IMU(慣性計測装置)の姿勢と速度を更新します。 +* **'post resampling' SLAM**:センサーデータと地図をマージして、自車位置を高精度に推定します。 -- 自車位置推定値 -- 自身周囲地図 -- 移動物体リスト -- 車線リスト -- 障害物リスト - -#### パラメーター - -Localizerモジュールの動作を制御するには、次のパラメーターを使用します。 - -- `post resampling`:SLAMの再標本化後に自車位置を更新するかどうかを決定します。 -- `use imu`:自車位置推定にIMUデータを使用するかどうかを決定します。 -- `vel_range_violation`:速度逸脱量のしきい値です。 -- `acc_range_violation`:加速度逸脱量のしきい値です。 - -| 名前 | 型 | 説明 | -| ---------- | ------------------------------- | ---------------- | -| `~/output` | `sensor_msgs::msg::PointCloud2` | フィルタされた点 | +| 名称 | タイプ | 説明 | +|---|---|---| +| `~/output` | `sensor_msgs::msg::PointCloud2` | フィルタ処理されたポイント | ## パラメータ ### ノードパラメータ -| 名前 | タイプ | 説明 | -| ------------- | --------------- | ------------------------------- | -| `ignore_tags` | vector | 除外されたタグ (以下の表を参照) | +| 名 | 型 | 説明 | +| ------------- | --------------- | -------------------------------------- | +| `ignore_tags` | vector | 無視されるタグ (以下の表を参照) | ### タグパラメータ -| ビット | 空間的位置に基づく点の特性 | オプション | -| ------ | -------------------------- | ---------- | -| 0~1 | ノーマル | | -| | ノイズの信頼度が高い | | -| | ノイズの信頼度が中程度 | | -| | ノイズの信頼度が低い | | -| 2~3 | 強度の点の特性 | ノーマル | -| | ノイズの信頼度が高い | | -| | ノイズの信頼度が中程度 | | -| | 予約 | | -| 4~5 | 戻り値 | 0を返す | -| | 1を返す | | -| | 2を返す | | -| | 3を返す | | -| 6~7 | 予約 | | +## Autoware自動運転ソフトウェアのドキュメント -## 想定 / 既知の制限事項 +### PointCloud2のBitフィールド -## (任意) エラー検出および処理 +| Bit | 説明 | オプション | +| --- | -------------------- | ------------------- | +| 0~1 | 空間位置に基づく点のプロパティ | 00: 通常 | +| | | 01: ノイズの信頼度が高い | +| | | 10: ノイズの信頼度が適度 | +| | | 11: ノイズの信頼度が低い | +| 2~3 | 強度に基づく点のプロパティ | 00: 通常 | +| | | 01: ノイズの信頼度が高い | +| | | 10: ノイズの信頼度が適度 | +| | | 11: 予約 | +| 4~5 | リターン番号 | 00: リターン0 | +| | | 01: リターン1 | +| | | 10: リターン2 | +| | | 11: リターン3 | +| 6~7 | 予約 | | -## (任意) パフォーマンス特性評価 +## 想定事項/既知の制限 -## (任意) 参照 / 外部リンク +## (任意) エラー検出と処理 + +## (任意) パフォーマンス特性 + +## (任意) 参考文献/外部リンク [1] -## (任意) 将来の拡張 / 未実装部分 +## (任意) 将来の拡張/未実装部分 + diff --git a/sensing/vehicle_velocity_converter/README.md b/sensing/vehicle_velocity_converter/README.md index b4074e9a43c5c..ed0c733c82e63 100644 --- a/sensing/vehicle_velocity_converter/README.md +++ b/sensing/vehicle_velocity_converter/README.md @@ -1,92 +1,85 @@ -## 自動運転ソフトウェアドキュメント - # vehicle_velocity_converter ## 目的 -このパッケージは、autoware_vehicle_msgs::msg::VehicleReportメッセージを、ジャイロオドメーターノード用にgeometry_msgs::msg::TwistWithCovarianceStampedに変換します。 +このパッケージは、autoware_vehicle_msgs::msg::VehicleReportメッセージをgyro odometerノードのgeometry_msgs::msg::TwistWithCovarianceStampedに変換します。 ## 入出力 ### 入力 -| 名称 | タイプ | 説明 | -| ----------------- | ------------------------------------------- | -------- | -| `velocity_status` | `autoware_vehicle_msgs::msg::VehicleReport` | 車両速度 | +| 名称 | 種類 | 説明 | +| ----------------- | ------------------------------------------- | ---------------- | +| velocity_status | `autoware_vehicle_msgs::msg::VehicleReport` | 車両速度 | ### 出力 **自動運転ソフトウェア** -**概要** - -このドキュメントでは、自動運転ソフトウェアのアーキテクチャとモジュールについて説明します。 - -**アーキテクチャ** +**目的** -ソフトウェアは以下で構成されています。 - -- **Perception:** センサーからのデータを処理し、周囲環境に関する情報を抽出します。 -- **Planning:** 車両の経路を計画し、障害物回避を行います。 -- **Control:** Planningモジュールからの入力を基に車両を制御します。 -- **Localization:** 自車位置を推定します。 +このドキュメントでは、自動運転ソフトウェアアーキテクチャの全体的な概要を示します。 **モジュール** -**Perceptionモジュール** - -- **カメラモジュール:** カメラからの画像を処理し、物体検出、セマンティックセグメンテーション、奥行き推定を行います。 -- **Lidarモジュール:** Lidarからの点群を処理し、物体検出、地形マッピング、3次元再構築を行います。 -- **レーダーモジュール:** レーダーからの反射を処理し、物体検出、速度推定、追跡を行います。 +**Perception** -**Planningモジュール** +* センサーデータの取得と解析 +* 周囲環境の地図作成 +* 物体検出と追跡 -- **Motion Planning:** 障害物回避、経路最適化、軌跡生成を行います。 -- **Behavior Planning:** 車両の速度、加速度、旋回角を決定します。 +**Planning** -**Controlモジュール** +* **Planning Optimizer** + * 安全かつ効率的な経路計画 +* **Path Planner** + * 自車および周囲の車両の挙動予測に基づく経路生成 +* **Collision Checker** + * 障害物との衝突の可能性検出 -- **横方向制御:** ステアリングシステムを制御し、指定された軌跡に従います。 -- **縦方向制御:** 加減速システムを制御し、指定された速度と加速度に従います。 +**Control** -**Localizationモジュール** +* **Lateral Controller** + * ステアリング制御 +* **Longitudinal Controller** + * 加減速制御 +* **Vehicle Interface** + * 車両への指令送信 -- **GPSとIMUモジュール:** GPSとIMUからのデータを融合して、自車位置を推定します。 -- **Lidarと地図モジュール:** Lidar点群と地図データをマッチングさせて、自車位置を推定します。 +**Localization** -**処理フロー** +* 自車位置と姿勢の推定 +* 慣性センサー、GPS、ビジョンデータの統合 -1. Perceptionモジュールは、周囲環境の情報を生成します。 -2. Planningモジュールは、Perceptionモジュールの情報に基づいて車両の経路を計画します。 -3. Controlモジュールは、Planningモジュールの情報に基づいて車両を制御します。 -4. Localizationモジュールは、自車位置を継続的に推定します。 +**Mapping** -**パフォーマンス測定** +* 環境地図の構築と更新 +* 高精度な位置決めとナビゲーション -ソフトウェアのパフォーマンスは以下のメトリクスで測定されます。 +**Post Resampling** -- **経路逸脱量:** Planningモジュールの計画経路と実際の車両経路の差異。 -- **速度逸脱量:** Controlモジュールの制御速度と目標速度の差異。 -- **加速度逸脱量:** Controlモジュールの制御加速度と目標加速度の差異。 -- **自車位置推定誤差:** Localizationモジュールの推定自車位置と実際の自車位置の差異。 +* センサーデータのダウンサンプル後の再サンプル処理 +* リアルタイムパフォーマンスの向上 -**Autowareとの統合** +**通信** -このソフトウェアは、Autowareオープンソース自動運転プラットフォームと統合できます。 +* 他車両やインフラストラクチャとの情報共有 +* V2XおよびITSのサポート -**追加情報** +**Autoware Stack** -詳細については、GitHubリポジトリを参照してください。 +このソフトウェアアーキテクチャは、Autoware Foundationによって開発されたAutoware Stackに基づいています。Autoware Stackは、自動運転ソフトウェアのオープンソースプラットフォームです。 -| 名称 | 型 | 説明 | -| ----------------------- | ------------------------------------------------ | --------------------------------------------- | -| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | `VehicleReport`から変換した共分散付きツイスト | +| 名称 | タイプ | 説明 | +| ----------------------- | ------------------------------------------------ | -------------------------------------------------- | +| `twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | VehicleReportから変換された共分散付きtwist | ## パラメータ -| 名前 | タイプ | 説明 | -| ---------------------------- | ------ | ------------------------------- | -| `speed_scale_factor` | double | 速度スケール係数(理想値: 1.0) | -| `frame_id` | string | 出力メッセージのフレーム ID | -| `velocity_stddev_xx` | double | vx の標準偏差 | -| `angular_velocity_stddev_zz` | double | ヨーレートの標準偏差 | +| 名称 | タイプ | 説明 | +| ---------------------------- | ------ | ---------------------------------------------- | +| `speed_scale_factor` | double | 速度スケールファクター(推奨値は1.0) | +| `frame_id` | string | 出力メッセージのフレームID | +| `velocity_stddev_xx` | double | vxの標準偏差 | +| `angular_velocity_stddev_zz` | double | ヨーレートの標準偏差 | + diff --git a/simulator/autoware_carla_interface/README.md b/simulator/autoware_carla_interface/README.md index 12e17c7fe32cc..7e55e0e750e41 100644 --- a/simulator/autoware_carla_interface/README.md +++ b/simulator/autoware_carla_interface/README.md @@ -1,222 +1,120 @@ # autoware_carla_interface -## ROS 2/Autoware.universe bridge for CARLA simulator +## ROS 2/Autoware.universe と CARLA シミュレータのブリッジ -によるROS 2 Humble対応のCARLA Communicationに感謝いたします。 -このROSパッケージにより、自律走行シミュレーションのためのAutowareとCARLA間の通信が可能になります。 +ROS 2 Humble での CARLA 通信に対する に感謝します。 +この ROS パッケージは、自律運転シミュレーションのために、Autoware と CARLA の間の通信を可能にします。 -## サポートされている環境 +## サポート環境 -| ubuntu | ros | carla | autoware | -| :----: | :----: | :----: | :------: | -| 22.04 | humble | 0.9.15 | Main | - -## 自動運転ソフトウェアドキュメント - -### Planningコンポーネント - -#### Sensingモジュール - -このモジュールは、センサーデータから車線を検出してトラッキングします。 - -#### Planningモジュール - -このモジュールは、以下に基づいて、自車位置と目標地点を考慮した、安全な経路を生成します。 - -- 車両の速度と加速度 -- 周囲の環境 -- 交通規則 - -#### Controlモジュール - -このモジュールは、Planningモジュールから生成された経路を元に、ステアリング、アクセル、ブレーキを制御します。 - -### レイヤーのインターフェース - -各レイヤーは、以下のようなインターフェースを介して相互に通信します。 - -- **Sensing** - - `current pose` - - センサーデータ -- **Planning** - - `current pose` - - 経路 -- **Control** - - 経路 - - `post resampling`車両状態 - -### エラー処理 - -以下のようなエラーが発生した場合、次の対応が行われます。 - -- **センサーの障害** - - エラーが検出されると、Planningモジュールは経路生成を停止します。 -- **Planningの障害** - - 経路逸脱量の逸脱量が許容値を超えると、Controlモジュールは車両を停止します。 -- **Controlの障害** - - アクセルまたはブレーキの逸脱量が許容値を超えると、Planningモジュールは経路を再計算します。 - -### パラメータのチューニング - -次のパラメータは、ソフトウェアの動作を調整するためにチューニングできます。 - -- **Sensing** - - 車線検出手法の閾値 -- **Planning** - - 安全マージンの大きさ - - 目標速度 -- **Control** - - ステアリングゲイン - - 加速および減速率 +| Ubuntu | ROS | CARLA | Autoware | +| :---: | :---: | :---: | :-----: | +| 22.04 | Humble | 0.9.15 | Main | ## 設定 ### インストール -- [CARLA インストール](https://carla.readthedocs.io/en/latest/start_quickstart/) -- [Carla Lanelet2 マップ](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) -- [CARLA 0.9.15 ROS 2 Humble コミュニケーション用 Python パッケージ](https://github.com/gezp/carla_ros/releases/tag/carla-0.9.15-ubuntu-22.04) +- [CARLAのインストール](https://carla.readthedocs.io/en/latest/start_quickstart/) +- [Carla Lanelet2マップ](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) +- [CARLA 0.9.15のROS 2 Humble通信用のPythonパッケージ](https://github.com/gezp/carla_ros/releases/tag/carla-0.9.15-ubuntu-22.04) - - pip を使用して wheel をインストールします。 - - または egg ファイルを `PYTHONPATH` に追加します。 + - Pipを使用してwheelをインストールします。 + - または`PYTHONPATH`にeggファイルを追加します。 -1. マップを任意の場所にダウンロード(y 軸反転バージョン) -2. 名前を変更し、`autoware_map` 内にマップフォルダーを作成(例:Town01)。(`point_cloud/Town01.pcd` -> `autoware_map/Town01/pointcloud_map.pcd`、`vector_maps/lanelet2/Town01.osm`-> `autoware_map/Town01/lanelet2_map.osm`) -3. フォルダーに `map_projector_info.yaml` を作成し、最初の行に `projector_type: local` を追加。 +1. マップ(y軸が反転したバージョン)を任意の場所にダウンロードします。 +2. 名前を変更し、`autoware_map`内にマップフォルダーを作成します(例:Town01)。(`point_cloud/Town01.pcd`->`autoware_map/Town01/pointcloud_map.pcd`, `vector_maps/lanelet2/Town01.osm`->`autoware_map/Town01/lanelet2_map.osm`) +3. フォルダ上に`map_projector_info.yaml`を作成し、最初の行に`projector_type: local`を追加します。 ### ビルド + ```bash colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release ``` ### 実行 -1. carlaを実行し、マップを変更し、必要に応じてオブジェクトを生成する +1. 必要に応じてカーラを実行し、マップを変更し、オブジェクトをスポーンします。 + ```bash cd CARLA ./CarlaUE4.sh -prefernvidia -quality-level=Low -RenderOffScreen ``` -## 2. rosノードの実行 - -```bash -roslaunch autoware ai_node.launch -``` - -`Autoware`を起動すると、以下のノードが実行されます。 - -- `Planning` コンポーネント -- `localization` コンポーネント -- `visualization` コンポーネント -- `util` コンポーネント - -`current pose` は、`planning` コンポーネントによって自動生成されます。 -`current pose` の受信には以下のトピックを使用します。 - -``` -/current_pose -``` - -`planning` コンポーネントは、`current pose` を元に経路を計画します。 -`planning` コンポーネントが計画した経路は、以下のトピックで受信できます。 - -``` -/planned_path -``` - -`visualization` コンポーネントは、`planning` コンポーネントが計画した経路を視覚化します。 - -``` -/planned_path -``` - -`visualization` コンポーネントは、以下のトピックで自車位置を受信します。 - -``` -/current_pose -``` - -`util` コンポーネントは、`post resampling` された経路を出力します。 -`post resampling` された経路は、以下のトピックで受信できます。 +2. ROSノードを実行する -``` -/resampled_path -``` -`util` コンポーネントは、以下のトピックで経路の逸脱量を出力します。 - -``` -/path_offset -``` - -```bash -ros2 launch autoware_launch e2e_simulator.launch.xml map_path:=$HOME/autoware_map/Town01 vehicle_model:=sample_vehicle sensor_model:=awsim_sensor_kit simulator_type:=carla carla_map:=Town01 -``` + ```bash + ros2 launch autoware_launch e2e_simulator.launch.xml map_path:=$HOME/autoware_map/Town01 vehicle_model:=sample_vehicle sensor_model:=awsim_sensor_kit simulator_type:=carla carla_map:=Town01 + ``` -### 内部メカニズム / アルゴリズム +### Inner-workings / アルゴリズム -`InitializeInterface`クラスは、CARLAワールドと自動運転車両の両方を設定するために重要です。このクラスは、`autoware_carla_interface.launch.xml`を通じて設定パラメータを取得します。 +`InitializeInterface` クラスは、CARLA のワールドと自動運転車の両方の設定に不可欠です。それは `autoware_carla_interface.launch.xml` を通じて構成パラメータを取得します。 -メインのシミュレーションループは`carla_ros2_interface`クラス内で実行されます。このループは、CARLAシミュレータ内のシミュレーション時間を`fixed_delta_seconds`で刻み、データを受信してROS 2メッセージとして`self.sensor_frequencies`で定義された周波数で公開します。 +メインのシミュレーションループは `carla_ros2_interface` クラス内で実行されます。このループは、`fixed_delta_seconds` 時間で CARLA シミュレータ内のシミュレーション時間を刻み、データは `self.sensor_frequencies` で定義された周波数で ROS 2 メッセージとして受信および発行されます。 -Autowareからの自動運転車の指令は、`autoware_raw_vehicle_cmd_converter`を通じて処理され、これらの指令はCARLAに合わせて調整されます。調整された指令はその後、`CarlaDataProvider`を介してCARLA制御に直接フィードされます。 +Autoware からの自動運転車の指令は `autoware_raw_vehicle_cmd_converter` を通じて処理され、それらの指令は、CARLA に適するよう調整されます。その後、調整された指令が `CarlaDataProvider` 経由で直接 CARLA 制御に入力されます。 -### ワールドロード用の設定可能なパラメータ +### ワールド読み込みの構成パラメータ -すべての主要パラメータは、`autoware_carla_interface.launch.xml`で設定できます。 +すべての重要なパラメータは `autoware_carla_interface.launch.xml` で構成できます。 -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------------------- | ------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `host` | 文字列 | "localhost" | CARLA サーバーのホスト名 | -| `port` | 整数 | "2000" | CARLA サーバーのポート番号 | -| `timeout` | 整数 | 20 | CARLA クライアントのタイムアウト | -| `ego_vehicle_role_name` | 文字列 | "ego_vehicle" | 自車ロールの名称 | -| `vehicle_type` | 文字列 | "vehicle.toyota.prius" | スポーンさせる車両のブループリント ID。車両のブループリント ID は [CARLA ブループリント ID](https://carla.readthedocs.io/en/latest/catalogue_vehicles/) で見つけることができる | -| `spawn_point` | 文字列 | なし | 自車をスポーンさせる座標(なしの場合はランダム)。形式 = [x, y, z, roll, pitch, yaw] | -| `carla_map` | 文字列 | "Town01" | CARLA にロードするマップの名称 | -| `sync_mode` | ブール | True | CARLA に同期モードを設定するためのブールフラグ | -| `fixed_delta_seconds` | double | 0.05 | シミュレーションのタイムステップ(クライアント FPS に関連付けられている) | -| `objects_definition_file` | 文字列 | "$(find-pkg-share autoware_carla_interface)/objects.json" | CARLA でセンサーをスポーンするために使用されるセンサーパラメーターファイル | -| `use_traffic_manager` | ブール | True | CARLA にトラフィックマネージャーを設定するためのブールフラグ | -| `max_real_delta_seconds` | double | 0.05 | `fixed_delta_seconds` よりもシミュレーション速度を制限するためのパラメーター | -| `config_file` | 文字列 | "$(find-pkg-share autoware_carla_interface)/raw_vehicle_cmd_converter.param.yaml" | `autoware_raw_vehicle_cmd_converter` で使用される制御マッピングファイル。現在の制御は CARLA の `vehicle.toyota.prius` ブループリント ID に基づいてキャリブレーションされている。車両タイプを変更する場合は再キャリブレーションが必要になる可能性がある | +| 名称 | タイプ | デフォルト値 | 説明 | +| ------------------------- | ------ | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `host` | string | "localhost" | CARLA サーバーのホスト名 | +| `port` | int | "2000" | CARLA サーバーのポート番号 | +| `timeout` | int | 20 | CARLA クライアントのタイムアウト | +| `ego_vehicle_role_name` | string | "ego_vehicle" | 自動運転車のロール名 | +| `vehicle_type` | string | "vehicle.toyota.prius" | スポーンする車両のブループリント ID。車両のブループリント ID は [CARLA ブループリント ID](https://carla.readthedocs.io/en/latest/catalogue_vehicles/) で確認できます。 | +| `spawn_point` | string | None | 自動運転車のスポーン座標 (None の場合はランダム)。フォーマット = [x, y, z, roll, pitch, yaw] | +| `carla_map` | string | "Town01" | CARLA にロードするマップ名 | +| `sync_mode` | bool | True | CARLA で同期モードを設定するブールフラグ | +| `fixed_delta_seconds` | double | 0.05 | シミュレーションのタイムステップ (クライアントの FPS に関連) | +| `objects_definition_file` | string | "$(find-pkg-share autoware_carla_interface)/objects.json" | CARLA でセンサーをスポーンするために使用するセンサーパラメータファイル | +| `use_traffic_manager` | bool | True | CARLA でトラフィックマネージャーを設定するブールフラグ | +| `max_real_delta_seconds` | double | 0.05 | シミュレーション速度を `fixed_delta_seconds` 未満に制限するパラメーター | +| `config_file` | string | "$(find-pkg-share autoware_carla_interface)/raw_vehicle_cmd_converter.param.yaml" | `autoware_raw_vehicle_cmd_converter` で使用される制御マッピングファイル。現在の制御は CARLA の `vehicle.toyota.prius` ブループリント ID に基づいて調整されています。車両タイプを変更する場合は、再調整が必要になる場合があります。 | -### センサーの構成可能なパラメータ +### センサーの設定可能パラメータ -以下のパラメータは `carla_ros.py` で構成できます。 +以下のパラメータは `carla_ros.py` で設定できます。 -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------------------- | ------ | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `self.sensor_frequencies` | dict | {"top": 11, "left": 11, "right": 11, "camera": 11, "imu": 50, "status": 50, "pose": 2} | (line 67) 前回の公開以降の時間間隔を計算し、この間隔が、所定の頻度を超過しないために必要な最小限度を満たしているかどうかを確認します。これは ROS の公開頻度のみ影響し、CARLA のセンサーの更新には影響しません。 | +| 名前 | タイプ | デフォルト値 | 説明 | +| ------------------------- | ---- | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `self.sensor_frequencies` | dict | {"top": 11, "left": 11, "right": 11, "camera": 11, "imu": 50, "status": 50, "pose": 2} | (67行目) 前回の公開以降の時間間隔を計算し、この間隔が目的の周波数を超過しないようにするために必要な最小値を満たしているかどうかをチェックします。ROSの公開周波数にのみ影響し、CARLAセンサーのチックには影響しません。 | - CARLAセンサーパラメータは`config/objects.json`で設定できます。 - - CARLAで設定可能なパラメータの詳細については、[Carla Ref Sensor](https://carla.readthedocs.io/en/latest/ref_sensors/)で説明されています。 + - CARLAで修正可能なパラメータの詳細については、[Carla Ref Sensor](https://carla.readthedocs.io/en/latest/ref_sensors/)で説明されています。 -### ワールドのロード +### Worldのロード -`carla_ros.py` はCARLAワールドを設定します。 +`carla_ros.py`はCARLAワールドを設定します。 1. **クライアント接続**: + ```python client = carla.Client(self.local_host, self.port) client.set_timeout(self.timeout) ``` -2. **マップのロード**: +2. **地図の読み込み**: + + `carla_map` パラメーターに従って、CARLA ワールドに地図が読み込まれます。 - `carla_map`パラメータに従って、マップをCARLAワールドにロード。 ```python client.load_world(self.map_name) self.world = client.get_world() ``` -3. **自車生成**: +3. **自車配置**: + + 車両は、`vehicle_type`, `spawn_point`, `agent_role_name` のパラメータに基づいて配置されます。 - 車両は `vehicle_type`, `spawn_point`, `agent_role_name` のパラメーターに従って生成されます。 ```python spawn_point = carla.Transform() @@ -233,31 +131,32 @@ Autowareからの自動運転車の指令は、`autoware_raw_vehicle_cmd_convert ## 信号認識 -Carla シミュレータ ([Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/)) によって提供される地図は現在、Autoware に対する適切な信号コンポーネントが欠けており、点群地図と比較して緯度と経度の座標が異なります。信号認識を可能にするには、以下の手順に従って地図を修正します。 +Carla Simulator で提供されているマップ ([Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/)) には、現時点で Autoware 用の適切な信号コンポーネントがなく、点群マップと比較して緯度と経度の座標が異なります。信号認識を有効にするには、次の手順に従ってマップを変更します。 -- 地図を修正するオプション +- マップを変更するためのオプション - - A. ゼロから新しい地図を作成する - - [Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/) を使用して、新しい地図を作成します。 + - A. 新しいマップを一から作成する + - [Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/) を使用して新しいマップを作成します。 - - B. 既存の Carla Lanelet2 Maps を修正する - - PCD (原点) と整列するよう、[Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) の経度と緯度を調整します。 - - 座標を変更するにはこの [ツール](https://github.com/mraditya01/offset_lanelet2/tree/main) を使用します。 - - Lanelet を PCD とスナップし、[Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/) を使用して信号を追加します。 + - B. 既存の Carla Lanelet2 マップを変更する + - [Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) の経度と緯度を PCD (原点) に一致するように調整します。 + - この[ツール](https://github.com/mraditya01/offset_lanelet2/tree/main) を使用して座標を変更します。 + - PCD で Lanelet をスナップし、[Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/) を使用して信号を追加します。 -- Tier4 Vector Map Builder を使用する場合、PCD フォーマットを `binary_compressed` から `ascii` に変換する必要があります。この変換には `pcl_tools` を使用できます。 -- 参考として、1 つの交差点に信号を追加した Town01 の例は [こちら](https://drive.google.com/drive/folders/1QFU0p3C8NW71sT5wwdnCKXoZFQJzXfTG?usp=sharing) からダウンロードできます。 +- Tier4 Vector Map Builder を使用する場合、PCD 形式を `binary_compressed` から `ascii` に変換する必要があります。この変換には `pcl_tools` を使用できます。 +- 参考までに、1 つの交差点に信号を追加した Town01 の例を[こちら](https://drive.google.com/drive/folders/1QFU0p3C8NW71sT5wwdnCKXoZFQJzXfTG?usp=sharing) からダウンロードできます。 ## ヒント -- 初期化中に位置ずれが発生することがありますが、`init by gnss` ボタンを押せば修正できます。 -- `fixed_delta_seconds` を変更するとシミュレーションのティックが増加します (デフォルト 0.05 秒)。変更すると、`objects.json` の一部のセンサーのパラメータを調整する必要があります (例: LIDAR 回転周波数は FPS と一致する必要があります)。 +- 初期化中に配置のずれが発生する可能性があります。`init by gnss` ボタンを押すと修正されます。 +- `fixed_delta_seconds` を変更すると、シミュレーションのティックを増やすことができます (デフォルトは 0.05 秒)。これを変更すると、`objects.json` のセンサーのいくつかのパラメータを調整する必要があります (例: LIDAR の回転周波数は FPS と一致する必要があります)。 ## 既知の問題と今後の作業 -- 手続き型マップ (Adv Digital Twin) のテストを行います。 - - 現在、Adv Digital Twin map の作成に失敗するためテストできません。 -- Autoware センサーキットから CARLA センサーを自動的に設定します。 - - センサーは現在、Autoware センサーキットと同じ場所に配置されるように自動的に設定されていません。現在の回避策は、各センサーの新しいフレームを (0, 0, 0, 0, 0, 0) 座標 (base_link に相対的) で作成し、各センサーを新しいフレームにアタッチすることです (`autoware_carla_interface.launch.xml` 行 28)。この回避策は非常に限定的で制約があります。センサーキットが変更されると、センサーの場所は正しくアタッチされません。 +- 手続き型マップ (Adv Digital Twin) でのテスト。 + - 現在、Adv デジタルツインマップの作成に失敗するため、テストできません。 +- Autoware Sensor Kit からの CARLA センサーの自動設定。 + - 現在、センサーは Autoware Sensor Kit と同じ場所に自動的に設定されていません。現在の回避策は、base_link に対して (0, 0, 0, 0, 0, 0) の座標を持つ各センサーの新しいフレームを作成し、各センサーを新しいフレーム (`autoware_carla_interface.launch.xml` の行 28) にアタッチすることです。この回避策は非常に制限的で制約があり、Sensor Kit が変更されるとセンサーの位置が誤ってアタッチされます。 - 信号認識。 - - 現在、CARLA の HDmap には、Autoware が信号認識を行うために必要な信号に関する情報がありません。 + - 現在、CARLA の HD マップには、Autoware の信号認識に必要な信号に関する情報がありません。 + diff --git a/simulator/dummy_perception_publisher/README.md b/simulator/dummy_perception_publisher/README.md index fdfcd2d444308..e2b8d229feb57 100644 --- a/simulator/dummy_perception_publisher/README.md +++ b/simulator/dummy_perception_publisher/README.md @@ -1,62 +1,96 @@ -## ダミー・パーセプション・パブリッシャー +# dummy_perception_publisher ## 目的 -このノードはPerceptionタイプのダミー検出の結果をパブリッシュします。 +このノードはPerceptionタイプのダミー検出結果を発行します。 -## 動作 / アルゴリズム +## 内部動作/アルゴリズム ## 入出力 ### 入力 -| 名称 | タイプ | 説明 | -| -------------- | ----------------------------------------- | ---------------------- | -| `/tf` | `tf2_msgs/TFMessage` | TF (自車位置) | -| `input/object` | `tier4_simulation_msgs::msg::DummyObject` | ダミー検出オブジェクト | +| 名称 | 型 | 説明 | +| ------------- | ----------------------------------------- | ------------------------- | +| `/tf` | `tf2_msgs/TFMessage` | TF (自車位置) | +| `input/object` | `tier4_simulation_msgs::msg::DummyObject` | ダミー認識オブジェクト | ### 出力 -#### Vehicle Model](ビークルモデル) +**自動運転ソフトウェアのドキュメント** -`post resampling`のレーザースキャンに対するビークルモデルは、以下のとおりです。 +**1. 目的** -- 車両形状を表すポリゴン -- 自車位置 -- ハンドル角度 -- 車両速度 -- 車両加速度 -- ピッチ角、ロール角、ヨー角の回転行列 -- ヨー角とローリング角の角速度 +このドキュメントでは、自動運転ソフトウェアのアーキテクチャ、コンポーネント、機能について説明します。 -#### Planning Module](Planningモジュール) +**2. アーキテクチャ** -`Octomap`は、以下の逸脱量を計算するために使用されます。 +自動運転ソフトウェアは、以下のモジュールで構成されています。 -- 速度逸脱量 -- 加速度逸脱量 -- ヨー逸脱量 +- **Perception(知覚)モジュール:** センサーデータから周囲環境を認識します。 +- **Planning(プランニング)モジュール:** 自車の経路を生成します。 +- **Control(制御)モジュール:** ステアリング、加速、ブレーキを制御します。 +- **Localization(ローカライゼーション)モジュール:** 自車位置を特定します。 -| 名前 | タイプ | 説明 | -| ----------------------------------- | -------------------------------------------------------- | ------------------------------ | -| `output/dynamic_object` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | ダミー検出オブジェクト | -| `output/points_raw` | `sensor_msgs::msg::PointCloud2` | オブジェクトの点群 | -| `output/debug/ground_truth_objects` | `autoware_perception_msgs::msg::TrackedObjects` | グランドトゥルースオブジェクト | +**3. コンポーネント** + +各モジュールは、さらに以下のコンポーネントで構成されています。 + +- **Perceptionモジュール:** + - カメラモジュール + - レーダーモジュール + - LiDARモジュール +- **Planningモジュール:** + - 経路計画者 + - 障害物回避器 + - 車両運動計画者 +- **Controlモジュール:** + - ステアリングコントローラー + - 加速コントローラー + - ブレーキコントローラー +- **Localizationモジュール:** + - GPSモジュール + - IMUモジュール + - オドメトリモジュール + +**4. 機能** + +自動運転ソフトウェアは、以下の機能を提供します。 + +- **自律走行:** 自車位置に基づき、経路を生成して制御します。 +- **障害物回避:** 知覚モジュールからの障害物情報を元に、経路を調整します。 +- **車線維持:** 車線を認識し、自車を車線内に維持します。 +- **速度制御:** 交通状況に応じて速度を調整します。 +- **安全停止:** 障害物や異常を検知した場合、安全に停止します。 + +**5. Autowareについて** + +Autowareは、オープンソースの自動運転ソフトウェアプラットフォームで、このドキュメントで説明しているアーキテクチャに基づいています。 + +**6. 使用方法** + +このドキュメントは、自動運転ソフトウェアの設計、実装、テストを理解するためのガイドです。追加情報は、Autowareのドキュメントを参照してください。 + +| 名称 | 型 | 説明 | +| ----------------------------------- | ---------------------------------------------------------- | ------------------------------------------- | +| `output/dynamic_object` | `tier4_perception_msgs::msg::DetectedObjectsWithFeature` | ダミー検出オブジェクト | +| `output/points_raw` | `sensor_msgs::msg::PointCloud2` | オブジェクトの点群 | +| `output/debug/ground_truth_objects` | `autoware_perception_msgs::msg::TrackedObjects` | グランドトゥルースオブジェクト | ## パラメータ -| 名前 | タイプ | デフォルト値 | 説明 | -| --------------------------- | ------ | ------------ | ------------------------------------------------------- | -| `visible_range` | double | 100.0 | センサー視界範囲 [m] | -| `detection_successful_rate` | double | 0.8 | センサー検出率。(最小値) 0.0 - 1.0(最大値) | -| `enable_ray_tracing` | bool | true | True の場合、レイ追跡を使用する | -| `use_object_recognition` | bool | true | True の場合、物体トピックを公開する | -| `use_base_link_z` | bool | true | True の場合、ノードはエゴ base_link の Z 座標を使用する | -| `publish_ground_truth` | bool | false | True の場合、グランドトゥルースオブジェクトを公開する | -| `use_fixed_random_seed` | bool | false | True の場合、固定ランダムシードを使用する | -| `random_seed` | int | 0 | ランダムシード | +| 名称 | 型 | デフォルト値 | 説明 | +| --------------------------- | ------ | ------------- | ------------------------------------------------ | +| `visible_range` | double | 100.0 | センサの可視範囲 [m] | +| `detection_successful_rate` | double | 0.8 | センサの検出率 (最小) 0.0 - 1.0(最大) | +| `enable_ray_tracing` | bool | true | True の場合、レイ追跡を使用 | +| `use_object_recognition` | bool | true | True の場合、オブジェクトのトピックをパブリッシュ | +| `use_base_link_z` | bool | true | True の場合、ノードはベースリンクの z 座標を使用 | +| `publish_ground_truth` | bool | false | True の場合、グランドトゥルースオブジェクトをパブリッシュ | +| `use_fixed_random_seed` | bool | false | True の場合、固定乱数をを使用 | +| `random_seed` | int | 0 | 乱数シード | -### Node パラメータ +### ノードパラメータ なし @@ -64,6 +98,7 @@ なし -## 想定/既知の制限事項 +## 想定 / 既知の制限 + +未定 -TBD diff --git a/simulator/fault_injection/README.md b/simulator/fault_injection/README.md index 5795b9aa6a5cf..da5e4a7fb9b50 100644 --- a/simulator/fault_injection/README.md +++ b/simulator/fault_injection/README.md @@ -2,151 +2,90 @@ ## 目的 -このパッケージは、PSimからDiagnosticsに疑似システムの障害を変換して、それをAutowareに通知するために使用されます。 -コンポーネントのダイアグラムを以下に示します。 +このパッケージは、PSim から偽のシステム障害を診断に変換し、Autoware に通知するために使用されます。 +コンポーネント構成図を以下に示します: -![fault_injectionパッケージのコンポーネントダイアグラム](img/component.drawio.svg) +![fault_injection パッケージのコンポーネント構成図](img/component.drawio.svg) ## テスト + ```bash source install/setup.bash cd fault_injection launch_test test/test_fault_injection_node.test.py ``` -## 内部構造 / アルゴリズム +## 内部の仕組み/アルゴリズム ## 入出力 ### 入力 -| 名称 | タイプ | 説明 | -| --------------------------- | ---------------------------------------------- | ------------------------ | +| 名前 | タイプ | 説明 | +| --------------------------- | ---------------------------------------------- | ----------------- | | `~/input/simulation_events` | `tier4_simulation_msgs::msg::SimulationEvents` | シミュレーションイベント | ### 出力 -**自動運転ソフトウェアのドキュメント** - -**目次** - -- [はじめに](#はじめに) -- [アーキテクチャ](#アーキテクチャ) - - [Planningコンポーネント](#planningコンポーネント) - - [Controlモジュール](#controlモジュール) -- [インターフェース](#インターフェース) - - [API](#api) - - [パラメータ](#パラメータ) -- [使用方法](#使用方法) - - [インストール](#インストール) - - [設定](#設定) - - [実行](#実行) -- [トラブルシューティング](#トラブルシューティング) - - [一般的な問題](#一般的な問題) - - [高度な問題](#高度な問題) -- [寄稿](#寄稿) - -**はじめに** - -このドキュメントは、Autoware内の自動運転ソフトウェアのアーキテクチャ、インターフェース、使用方法の概要を提供します。このソフトウェアは、車両の自律走行に必要なPlanningとControl機能を提供します。 - -**アーキテクチャ** - -**Planningコンポーネント** +Autowareのアーキテクチャは、**Perception**、**Planning**、**Behavior Control**、**Vehicle Control**の4つの主要コンポーネントで構成されています。 -Planningコンポーネントは、車両の経路を生成します。次のような複数の要素で構成されています。 +**Planning**コンポーネントは、Perceptionコンポーネントから提供された周辺環境の情報を処理し、安全で効率的な走行軌跡を生成します。 -- **PathPlanningモジュール:** 車両の経路を生成します。 -- **TrajectoryPlanningモジュール:** PathPlanningモジュールで生成された経路を滑らかな軌跡に変換します。 -- **BehaviorPlanningモジュール:** 障害物回避やレーン維持などの高レベルの挙動を決定します。 +**Behavior Control**コンポーネントは、Planningコンポーネントによって生成された軌跡を、現在の状況に適応して変更し、加減速とステアリングコマンドを生成します。 -**Controlモジュール** +**Vehicle Control**コンポーネントは、Behavior Controlコンポーネントから生成されたコマンドを受け取り、車両ハードウェアに送信します。 -Controlモジュールは、車両の挙動を制御します。次のような複数の要素で構成されています。 +**Perception**コンポーネントは、カメラ、レーダー、LiDARなどのセンサからのデータを処理して、周囲環境の正確な表現である地図を作成します。 -- **LongitudinalControlモジュール:** 車両の速度を制御します。 -- **LateralControlモジュール:** 車両の方向を制御します。 +このアーキテクチャにより、Autowareは以下を実現できます。 -**インターフェース** +- **リアルタイム性能**:Perception、Planning、Behavior Control、Vehicle Controlの各コンポーネントは、リアルタイムで動作します。 +- **モジュール性**:各コンポーネントは独立しており、他のコンポーネントに依存せずに開発およびテストできます。 +- **拡張性**:Autowareは、新しいセンサやアルゴリズムを簡単に統合できるように設計されています。 -**API** +### Planningモジュール -Autowareソフトウェアは、次のようなAPIを提供します。 +Planningモジュールは、以下を含む複数のサブモジュールで構成されています。 -- **`planning/planning_interface`:** Planningコンポーネントとのインターフェースを提供します。 -- **`control/control_interface`:** Controlモジュールとのインターフェースを提供します。 +- **Motion Planning**:障害物を回避し、交通規則に従う安全な走行軌跡を生成します。 +- **Trajectory Generation**:Motion Planningモジュールによって生成された軌跡に沿って、車体を滑らかに移動させるために、速度と加速度のプロファイルを作成します。 +- **'Post Resampling'**:Planningモジュールは、軌跡と制御入力を一定の周波数で生成しますが、Vehicle Controlコンポーネントがより高い周波数で車両ハードウェアにコマンドを送信する場合があります。Post Resamplingモジュールは、元の軌跡と制御入力を補間して、Vehicle Controlコンポーネントが必要とする詳細なコマンドを生成します。 +- **Decision Making**:現在の状況に基づいて、Planningモジュールは、異なる軌跡や制御戦略の候補から最適なものを選択します。 -**パラメータ** +### Behavior Controlモジュール -PlanningとControlコンポーネントは、次のような構成可能なパラメータを備えています。 +Behavior Controlモジュールは、以下を含む複数のサブモジュールで構成されています。 -- **Planningコンポーネント:** - - パス生成パラメータ - - 軌跡生成パラメータ - - 挙動計画パラメータ -- **Controlモジュール:** - - 速度制御パラメータ - - ステアリング制御パラメータ - -**使用方法** - -**インストール** - -Autowareソフトウェアは、次のようにインストールできます。 - -``` -git clone https://github.com/autowarefoundation/autoware.git -cd autoware -./setup/install_autoware.sh -``` +- **Longitudinal Controller**:車両の速度を制御し、衝突を回避するために加減速コマンドを生成します。 +- **Lateral Controller**:車両のステアリングを制御し、軌跡を追従します。 +- **Motion Control**:車両の運動を制御し、ジャークや振動を抑えます。 -**設定** +### Vehicle Controlモジュール -インストール後、`autoware.conf`ファイルを使用してソフトウェアを設定する必要があります。このファイルには、インターフェース、パラメータ、その他の設定が含まれています。 +Vehicle Controlモジュールは、以下を含む複数のサブモジュールで構成されています。 -**実行** +- **Actuator Control**:車両のアクセル、ブレーキ、ステアリングを制御するためのコマンドを生成します。 +- **State Estimation**:Vehicle Controlコンポーネントは、センサからのデータを処理して、自車位置、速度、加速度などの車両の状態を推定します。 +- **Error Correction**:自車位置の推定値と目標軌跡との間の誤差に基づいて、制御コマンドを補正します。 -ソフトウェアを実行するには、次のコマンドを使用します。 - -``` -./launch/all.launch -``` - -**トラブルシューティング** - -**一般的な問題** - -- **`post resampling`の障害:** Planningコンポーネントが経路を生成できない可能性があります。PathPlanningモジュールのパラメータを確認してください。 -- **速度逸脱量の増加:** Controlモジュールが車両の速度を適切に制御できない可能性があります。LongitudinalControlモジュールの速度制御パラメータを確認してください。 -- **加速度逸脱量の増加:** Controlモジュールが車両の方向を適切に制御できない可能性があります。LateralControlモジュールのステアリング制御パラメータを確認してください。 - -**高度な問題** - -- **自車位置の精度が悪い:** GPSまたはIMUセンサーからのデータが適切でない可能性があります。センサーの校正と設定を確認してください。 -- **障害物の認識が不十分:** センサーからのデータが不完全またはノイズが多い可能性があります。センサーの配置と感度を確認してください。 -- **経路生成の遅延:** Planningコンポーネントが過負荷になっている可能性があります。Planningコンポーネントのリソース消費を確認してください。 - -**寄稿** - -Autowareプロジェクトはオープンソースであり、寄稿を歓迎します。詳細については、[寄稿ガイドライン](https://github.com/autowarefoundation/autoware/blob/master/CONTRIBUTING.md)を参照してください。 - -| 名称 | タイプ | 説明 | -| -------------- | --------------------------------------- | ---------- | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | ダミー診断 | +| 名前 | 型 | 説明 | +| --------------- | --------------------------------------- | ------------------ | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | ダミー診断値 | ## パラメータ -なし。 +なし ### ノードパラメータ -なし。 +なし ### コアパラメータ -なし。 +なし + +## 仮定 / 既知の制限 -## 前提条件 / 制限事項 +TBD. -TBD。 diff --git a/simulator/learning_based_vehicle_model/README.md b/simulator/learning_based_vehicle_model/README.md index ba9910043f179..77f13c8ea4292 100644 --- a/simulator/learning_based_vehicle_model/README.md +++ b/simulator/learning_based_vehicle_model/README.md @@ -1,30 +1,31 @@ # 学習済みモデル -これは、`simple_planning_simulator`パッケージで使用される、Python学習済みモデルの設計ドキュメントです。 +これは `simple_planning_simulator` パッケージで使用される Python 学習済みモデルの設計ドキュメントです。 -## 目的/ユースケース +## 目的/ ユースケース - - + + -このライブラリは、PythonのモデルとPSIM(C++)のインタフェースを作成します。複雑なC++の実装をせずにPython学習済みモデルをPSIMに迅速に展開するために使用されます。 +このライブラリは Python のモデルと PSIM (C++) のインターフェイスを作成します。複雑な C++ 実装を必要とせずに、学習した Python モデルを PSIM に素早くデプロイするために使用されます。 ## 設計 - - + + + +このパッケージの背後にある考え方は、シミュレーションに使用したいモデルが、複数のサブモデル (例: ステアリングモデル、ドライブモデル、車両運動学など) で構成されていることです。これらのサブモデルは Python で実装されており、トレーニング可能です。各サブモデルは、すべての入力/出力の文字列名を持ち、それを使用してモデルの相互接続を自動的に作成します (下の画像を参照)。これにより、サブモデルを簡単に切り替えてシミュレーターをより詳細にカスタマイズできます。 -このパッケージのアイデアは、シミュレーションに使用したいモデルが複数のサブモデル(例:ステアリングモデル、駆動モデル、車両運動学など)で構成されていることです。これらのサブモデルはPythonで実装されており、トレーニング可能です。各サブモデルには、すべての入出力用文字列名が用意されており、それらを使用してモデルを自動的に接続します(下の画像を参照)。これにより、サブモデルを簡単に切り替えて、シミュレータをよりカスタマイズできます。 +![py_model_interface](./image/python_model_interface.png "PyModel インターフェイス") -![py_model_interface](./image/python_model_interface.png "PyModelインタフェース") +## 想定事項 / 制約事項 -## 仮定/既知の制限 + - +このパッケージを使用するには `python3` と `pybind11` をインストールする必要があります。Python サブモデルの唯一の想定事項は、それらのインターフェイスです。 -このパッケージを使用するには、`python3`と`pybind11`をインストールする必要があります。Pythonサブモデルの唯一の仮定は、それらのインタフェースです。 ```python class PythonSubmodelInterface: @@ -74,15 +75,15 @@ class PythonSubmodelInterface: + - How do you use the package / API? --> -車両モデルを正常に作成するには、`InterconnectedModel` クラスを適切に設定する必要があります。 +車載モデルを正しく作成するには、InterconnectedModel クラスを正しくセットアップする必要があります。 -### `InterconnectedModel` クラス +### InterconnectedModel クラス #### `コンストラクタ` -コンストラクタは引数を受け取りません。 +コンストラクタは引数を取りません。 #### `void addSubmodel(std::tuple model_descriptor)` @@ -90,9 +91,9 @@ class PythonSubmodelInterface: 入力: -- `model_descriptor`: 使用するモデルを示します。モデル記述子は 3 つの文字列を含みます。 +- model_descriptor: 使用するモデルを記述します。モデル記述子には 3 つの文字列が含まれます。 - 最初の文字列は、モデルが実装されている Python モジュールのパスです。 - - 2 番目の文字列は、モデルのパラメータが格納されているファイルのパスです。 + - 2 番目の文字列は、モデルパラメータが格納されているファイルへのパスです。 - 3 番目の文字列は、モデルを実装するクラスの名前です。 出力: @@ -101,12 +102,12 @@ class PythonSubmodelInterface: #### `void generateConnections(std::vector in_names, std::vector out_names)` -サブモデルとモデルの入力/出力の接続を生成します。 +サブモデルとモデルの入力/出力との間の接続を生成します。 入力: -- `in_names`: モデルのすべての入力の文字列名(順序あり)。 -- `out_names`: モデルのすべての出力の文字列名(順序あり)。 +- in_names: すべてのモデル入力の文字列名(順番)。 +- out_names: すべてのモデル出力の文字列名(順番)。 出力: @@ -118,7 +119,7 @@ class PythonSubmodelInterface: 入力: -- `new_state`: モデルの新しい状態。 +- new_state: モデルの新しい状態。 出力: @@ -126,7 +127,7 @@ class PythonSubmodelInterface: #### `std::vector updatePyModel(std::vector psim_input)` -すべてのサブモデルの次状態を計算して、モデルの次状態を計算します。 +すべてのサブモデルの次の状態を計算して、モデルの次の状態を計算します。 - psim_input: モデルへの入力。 @@ -136,19 +137,20 @@ class PythonSubmodelInterface: #### `dtSet(double dt)` -モデルの時間ステップを設定します。 +モデルのタイムステップを設定します。 入力: -- dt: 時間ステップ +- dt: タイムステップ 出力: - なし -### 例 +### 使用例 + +まず、モデルを設定する必要があります。 -最初にモデルを設定する必要があります。 ```C++ InterconnectedModel vehicle; @@ -181,7 +183,8 @@ vehicle.generateConnections(input_names, state_names); vehicle.dtSet(dt); ``` -モデルが正しく設定された後、以下のように使用できます。 +モデルの正しい設定が済んだら、以下のようにして使用できます。 + ```C++ // Example of an model input @@ -197,10 +200,11 @@ vehicle.initState(current_state); std::vector next_state = vehicle.updatePyModel(vehicle_input); ``` -## 参考文献 / 外部リンク +## 参照 / 外部リンク - + -## 関連する問題 +## 関連課題 + + - diff --git a/simulator/simple_planning_simulator/README.md b/simulator/simple_planning_simulator/README.md index 843d8860a2e31..d2d2fca710c33 100644 --- a/simulator/simple_planning_simulator/README.md +++ b/simulator/simple_planning_simulator/README.md @@ -1,60 +1,60 @@ -## simple_planning_simulator +# simple_planning_simulator ## 目的 / ユースケース -このノードは、シンプルな車両モデルを使用して、2Dの車両コマンドにおける車両の運動をシミュレートします。 +このノードは、シンプルな車両モデルを使用して、2Dの車両コマンドの車両運動をシミュレートします。 ## 設計 -このシミュレータの目的は、PlanningモジュールおよびControlモジュールの統合テストを行うことです。センシングや認識はシミュレートせず、純粋なC++だけで実装され、GPUを使用しません。 +このシミュレータの目的は、Planningモジュールと制御モジュールの統合テスト用です。これはセンシングや知覚はシミュレートせず、純粋な C++ のみで実装され、GPU なしでも動作します。 -## 仮定 / 制限事項 +## 想定 / 制限事項 -- 2Dの運動のみをシミュレートします。 -- 衝突やセンシングなどの物理的な操作は実行せず、車両ダイナミクスの積分結果のみを計算します。 +- 2D の運動のみをシミュレートします。 +- 衝突やセンシングなどの物理操作は実行せず、車両ダイナミクスの積分結果のみを計算します。 ## 入出力 / API -### 入出力 +### 入力 -- **入力/initialpose** [`geometry_msgs/msg/PoseWithCovarianceStamped`]: 初期姿勢 -- **入力/ackermann_control_command** [`autoware_control_msgs/msg/Control`]: 車両を誘導するターゲットコマンド -- **入力/manual_ackermann_control_command** [`autoware_control_msgs/msg/Control`]: 車両を誘導する手動ターゲットコマンド(control_mode_request = Manualの場合に使用) -- **入力/gear_command** [`autoware_vehicle_msgs/msg/GearCommand`]: ターゲットのギアコマンド -- **入力/manual_gear_command** [`autoware_vehicle_msgs/msg/GearCommand`]: ターゲットのギアコマンド(control_mode_request = Manualの場合に使用) -- **入力/turn_indicators_command** [`autoware_vehicle_msgs/msg/TurnIndicatorsCommand`]: ターゲットのターンインジケーターコマンド -- **入力/hazard_lights_command** [`autoware_vehicle_msgs/msg/HazardLightsCommand`]: ターゲットのハザードライトコマンド -- **入力/control_mode_request** [`tier4_vehicle_msgs::srv::ControlModeRequest`]: 自動運転/手動運転のモード変更 +- input/initialpose [`geometry_msgs/msg/PoseWithCovarianceStamped`] : 初期ポーズ用 +- input/ackermann_control_command [`autoware_control_msgs/msg/Control`] : 車両を駆動するターゲットコマンド +- input/manual_ackermann_control_command [`autoware_control_msgs/msg/Control`] : 車両を駆動する手動ターゲットコマンド (control_mode_request = 手動の場合に使用) +- input/gear_command [`autoware_vehicle_msgs/msg/GearCommand`] : ターゲットギアコマンド +- input/manual_gear_command [`autoware_vehicle_msgs/msg/GearCommand`] : ターゲットギアコマンド (control_mode_request = 手動の場合に使用) +- input/turn_indicators_command [`autoware_vehicle_msgs/msg/TurnIndicatorsCommand`] : ターゲットターンインジケータコマンド +- input/hazard_lights_command [`autoware_vehicle_msgs/msg/HazardLightsCommand`] : ターゲットハザードライトコマンド +- input/control_mode_request [`tier4_vehicle_msgs::srv::ControlModeRequest`] : 自動/手動運転のモード変更 ### 出力 -- `/tf` [`tf2_msgs/msg/TFMessage`]: シミュレートされた車両姿勢(base_link) -- `/output/odometry` [`nav_msgs/msg/Odometry`]: シミュレートされた車両姿勢とツイスト -- `/output/steering` [`autoware_vehicle_msgs/msg/SteeringReport`]: シミュレートされたステアリング角度 -- `/output/control_mode_report` [`autoware_vehicle_msgs/msg/ControlModeReport`]: 現在の制御モード(自動運転/手動運転) -- `/output/gear_report` [`autoware_vehicle_msgs/msg/ControlModeReport`]: シミュレートされたギア -- `/output/turn_indicators_report` [`autoware_vehicle_msgs/msg/ControlModeReport`]: シミュレートされたターンインジケーターの状態 -- `/output/hazard_lights_report` [`autoware_vehicle_msgs/msg/ControlModeReport`]: シミュレートされたハザードライトの状態 +- /tf [`tf2_msgs/msg/TFMessage`] : 車両のシミュレートされたポーズ (base_link) +- /output/odometry [`nav_msgs/msg/Odometry`] : シミュレートされた車両のポーズとツイスト +- /output/steering [`autoware_vehicle_msgs/msg/SteeringReport`] : 車両のシミュレートされたステアリング角 +- /output/control_mode_report [`autoware_vehicle_msgs/msg/ControlModeReport`] : 現在の制御モード (自動/手動) +- /output/gear_report [`autoware_vehicle_msgs/msg/ControlModeReport`] : 車両のシミュレートされたギア +- /output/turn_indicators_report [`autoware_vehicle_msgs/msg/ControlModeReport`] : 車両のシミュレートされたターンインジケータステータス +- /output/hazard_lights_report [`autoware_vehicle_msgs/msg/ControlModeReport`] : 車両のシミュレートされたハザードライトステータス -## 内部動作 / アルゴリズム +## 動作 / アルゴリズム -### コモンパラメーター +### 共通パラメータ -| 名称 | タイプ | 説明 | デフォルト値 | -| :-------------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | -| simulated_frame_id | 文字列 | 出力tf内のchild_frame_idに設定 | "base_link" | -| origin_frame_id | 文字列 | 出力tf内のframe_idに設定 | "odom" | -| initialize_source | 文字列 | "ORIGIN"の場合は、初期姿勢が(0, 0, 0)に設定され、"INITIAL_POSE_TOPIC"の場合は、ノードが`input/initialpose`トピックが発行されるまで待機 | "INITIAL_POSE_TOPIC" | -| add_measurement_noise | ブール | trueの場合、シミュレーション結果にガウスノイズが加えられる | true | -| pos_noise_stddev | double | 位置ノイズの標準偏差 | 0.01 | -| rpy_noise_stddev | double | オイラー角ノイズの標準偏差 | 0.0001 | -| vel_noise_stddev | double | 速度ノイズの標準偏差 | 0.0 | -| angvel_noise_stddev | double | 角速度ノイズの標準偏差 | 0.0 | -| steer_noise_stddev | double | ステアリング角ノイズの標準偏差 | 0.0001 | +| 名前 | タイプ | 説明 | デフォルト値 | +| :--------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | +| simulated_frame_id | 文字列 | 出力の `tf` の `child_frame_id` に設定 | "base_link" | +| origin_frame_id | 文字列 | 出力の tf の `frame_id` に設定 | "odom" | +| initialize_source | 文字列 | "ORIGIN" の場合、初期姿勢は (0,0,0) に設定されます。 "INITIAL_POSE_TOPIC" の場合、ノードは `input/initialpose` トピックが発行されるまで待機します。 | "INITIAL_POSE_TOPIC" | +| add_measurement_noise | ブール | True の場合、シミュレーション結果にガウスノイズが追加されます。 | true | +| pos_noise_stddev | double | 位置ノイズの標準偏差 | 0.01 | +| rpy_noise_stddev | double | オイラー角ノイズの標準偏差 | 0.0001 | +| vel_noise_stddev | double | 速度ノイズの標準偏差 | 0.0 | +| angvel_noise_stddev | double | 角速度ノイズの標準偏差 | 0.0 | +| steer_noise_stddev | double | ステアリング角のノイズの標準偏差 | 0.0001 | -### 車両モデルのパラメータ +### 車両モデルパラメータ -#### `vehicle_model_type` オプション +#### vehicle_model_type のオプション - `IDEAL_STEER_VEL` - `IDEAL_STEER_ACC` @@ -63,40 +63,47 @@ - `DELAY_STEER_ACC` - `DELAY_STEER_ACC_GEARED` - `DELAY_STEER_ACC_GEARED_WO_FALL_GUARD` -- `DELAY_STEER_MAP_ACC_GEARED`: ステアリングおよびアクセラレーションコマンドに対して1次元ダイナミクスと時遅れを適用します。シミュレートされたアクセラレーションは、提供されたアクセラレーションマップを通して変換された値によって決定されます。このモデルは、実際の車両でのアクセラレーション逸脱量を用いた正確なシミュレーションに有益です。 -- `LEARNED_STEER_VEL`: 学習されたパイソンモデルを起動します。詳細はこちら [here](../learning_based_vehicle_model) をご覧ください。 -- `ACTUATION_CMD`: `ACTUATION_CMD` を受け取るシミュレータモデル。この場合、`raw_vehicle_cmd_converter` も起動されます。 - -`IDEAL` モデルは命令通りに理想的に移動する一方、`DELAY` モデルは時遅れがある1次モデルに基づいて移動します。`STEER` は、モデルがステアリングコマンドを受け取る意味です。`VEL` は、モデルがターゲットの速度コマンドを受け取り、`ACC` モデルはターゲットのアクセラレーションコマンドを受け取ることを意味します。`GEARED` サフィックスは、モーションがギアコマンドを考慮することを意味します。車両はギアに従って1方向にのみ移動します。 - -次の表は、どのモデルがどのパラメータに対応するかを示しています。モデル名は省略形で書かれています(例: IDEAL_STEER_VEL = I_ST_V)。 - -| 名称 | 型 | 説明 | I_ST_V | I_ST_A | I_ST_A_G | D_ST_V | D_ST_A | D_ST_A_G | D_ST_A_G_WO_FG | D_ST_M_ACC_G | L_S_V | デフォルト値 | 単位 | -| :------------------------- | :----- | :--------------------------------------------------------------------------------------------- | :----- | :----- | :------- | :----- | :----- | :------- | :------------- | :----------- | :---- | :----------- | :------ | -| acc_time_delay | double | 加速度入力のデッドタイム | x | x | x | x | o | o | o | o | x | 0.1 | [s] | -| steer_time_delay | double | ステアリング入力のデッドタイム | x | x | x | o | o | o | o | o | x | 0.24 | [s] | -| vel_time_delay | double | 速度入力のデッドタイム | x | x | x | o | x | x | x | x | x | 0.25 | [s] | -| acc_time_constant | double | 1次の加速度動特性の時間定数 | x | x | x | x | o | o | o | o | x | 0.1 | [s] | -| steer_time_constant | double | 1次のステアリング動特性の時間定数 | x | x | x | o | o | o | o | o | x | 0.27 | [s] | -| steer_dead_band | double | ステアリング角のデッドバンド | x | x | x | o | o | o | o | x | x | 0.0 | [rad] | -| vel_time_constant | double | 1次の速度動特性の時間定数 | x | x | x | o | x | x | x | x | x | 0.5 | [s] | -| vel_lim | double | 速度の上限 | x | x | x | o | o | o | o | o | x | 50.0 | [m/s] | -| vel_rate_lim | double | 加速度の上限 | x | x | x | o | o | o | o | o | x | 7.0 | [m/ss] | -| steer_lim | double | ステアリング角の上限 | x | x | x | o | o | o | o | o | x | 1.0 | [rad] | -| steer_rate_lim | double | ステアリング角変化率の上限 | x | x | x | o | o | o | o | o | x | 5.0 | [rad/s] | -| steer_bias | double | ステアリング角のバイアス | x | x | x | o | o | o | o | o | x | 0.0 | [rad] | -| debug_acc_scaling_factor | double | 加速度コマンドのスケーリング係数 | x | x | x | x | o | o | o | x | x | 1.0 | [-] | -| debug_steer_scaling_factor | double | ステアリングコマンドのスケーリング係数 | x | x | x | x | o | o | o | x | x | 1.0 | [-] | -| acceleration_map_path | string | 速度と理想的な加速度を実際の加速度に変換するためのCSVファイルのパス | x | x | x | x | x | x | x | o | x | - | [-] | -| model_module_paths | string | モデルを実装するPythonモジュールのパス | x | x | x | x | x | x | x | x | o | - | [-] | -| model_param_paths | string | モデルパラメータが格納されているファイルのパス(パラメータファイルが必要ない場合は空文字列可) | x | x | x | x | x | x | x | x | o | - | [-] | -| model_class_names | string | モデルを実装するクラスの名前 | x | x | x | x | x | x | x | x | o | - | [-] | - -_注意:_ パラメータ`model_module_paths`、`model_param_paths`、および`model_class_names`は同じ長にする必要があります。 - -`acceleration_map`は`DELAY_STEER_MAP_ACC_GEARED`のみに使用され、垂直軸に加速コマンド、水平軸に自車速度を表示します。各セルはシミュレータの運動計算で実際に使用される変換された加速コマンドを表しています。中間値は線形補間されます。 - -`acceleration_map.csv`の例 +- `DELAY_STEER_MAP_ACC_GEARED`: 1D ダイナミクスおよびタイム遅延をステアリングおよびアクセルコマンドに適用します。シミュレートされたアクセルは、提供されたアクセルマップで変換された値により決定されます。このモデルは、実際の車両のアクセルのずれによる正確なシミュレーションに役立ちます。 +- `LEARNED_STEER_VEL`: 学習済み Python モデルを起動します。詳細はこちら [こちら](../learning_based_vehicle_model) を参照してください。 + +次のモデルは `raw_vehicle_cmd_converter` から生成された `ACTUATION_CMD` を受信します。したがって、これらのモデルが選択されると `raw_vehicle_cmd_converter` も起動されます。 + +- `ACTUATION_CMD`: このモデルはアクセル/ブレーキコマンドのみを変換し、ステアリングコマンドはそのまま使用します。 +- `ACTUATION_CMD_STEER_MAP`: ステアリングマップを使用して、ステアリングコマンドをステアリングレートコマンドに変換します。 +- `ACTUATION_CMD_VGR`: 可変ギア比を使用して、ステアリングコマンドをステアリングレートコマンドに変換します。 +- `ACTUATION_CMD_MECHANICAL`: このモデルには、それらの機械的ダイナミクスとコントローラがあります。 + +`IDEAL` モデルはコマンドどおりに理想的に移動し、`DELAY` モデルは 1 次のタイム遅延モデルに基づいて移動します。`STEER` は、モデルがステアリングコマンドを受信することを意味します。`VEL` は、モデルがターゲット速度コマンドを受信することを意味し、`ACC` モデルはターゲットアクセルコマンドを受信することを意味します。接尾辞 `GEARED` は、モーションがギアコマンドを考慮することを意味します。車両はギアに従って 1 方向にのみ移動します。 + +以下の表は、どのモデルがどのパラメータに対応するかを示しています。モデル名は省略形で記載されています(例: IDEAL_STEER_VEL = I_ST_V)。 + +| 名 | タイプ | 説明 | I_ST_V | I_ST_A | I_ST_A_G | D_ST_V | D_ST_A | D_ST_A_G | D_ST_A_G_WO_FG | D_ST_M_ACC_G | L_S_V | A_C | デフォルト値 | 単位 | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| acc_time_delay | double | 加速度入力をのデッドタイム | x | x | x | x | o | o | o | o | x | x | 0.1 | [s] | +| steer_time_delay | double | 操舵入力をのデッドタイム | x | x | x | o | o | o | o | o | x | o | 0.24 | [s] | +| vel_time_delay | double | 速度入力をのデッドタイム | x | x | x | o | x | x | x | x | x | x | 0.25 | [s] | +| acc_time_constant | double | 1次加速度のダイナミクスの時定数 | x | x | x | x | o | o | o | o | x | x | 0.1 | [s] | +| steer_time_constant | double | 1次操舵のダイナミクスの時定数 | x | x | x | o | o | o | o | o | x | o | 0.27 | [s] | +| steer_dead_band | double | 操舵角度のデッドバンド | x | x | x | o | o | o | o | x | x | o | 0.0 | [rad] | +| vel_time_constant | double | 1次速度のダイナミクスの時定数 | x | x | x | o | x | x | x | x | x | x | 0.5 | [s] | +| vel_lim | double | 速度の制限 | x | x | x | o | o | o | o | o | x | x | 50.0 | [m/s] | +| vel_rate_lim | double | 加速度の制限 | x | x | x | o | o | o | o | o | x | x | 7.0 | [m/ss] | +| steer_lim | double | 操舵角の制限 | x | x | x | o | o | o | o | o | x | o | 1.0 | [rad] | +| steer_rate_lim | double | 操舵角変化率の制限 | x | x | x | o | o | o | o | o | x | o | 5.0 | [rad/s] | +| steer_bias | double | 操舵角のバイアス | x | x | x | o | o | o | o | o | x | o | 0.0 | [rad] | +| debug_acc_scaling_factor | double | 加速度コマンドのスケーリング係数 | x | x | x | x | o | o | o | o | x | x | 1.0 | [-] | +| debug_steer_scaling_factor | double | 操舵コマンドのスケーリング係数 | x | x | x | x | o | o | o | o | x | x | 1.0 | [-] | +| acceleration_map_path | string | 速度と理想加速度を実際の加速度に変換するための、加速マップのCSVファイルへのパス | x | x | x | x | x | x | x | o | x | x | - | [-] | +| model_module_paths | string | モデルが実装されているpythonモジュールへのパス | x | x | x | x | x | x | x | x | o | x | - | [-] | +| model_param_paths | string | モデルのパラメータが格納されているファイルへのパス(パラメータファイルが必要ない場合は空文字列にすることができます) | x | x | x | x | x | x | x | x | o | x | - | [-] | +| model_class_names | string | モデルを実装するクラスの名前 | x | x | x | x | x | x | x | x | o | x | - | [-] | + +_注:_ パラメータ `model_module_paths`, `model_param_paths`, `model_class_names` は同じ長さにする必要があります。 + +`acceleration_map` は `DELAY_STEER_MAP_ACC_GEARED` の場合のみ使用され、垂直軸にアクセルコマンド、水平軸に現在の速度を表示し、各セルがシミュレータの運動計算で実際に使用される変換されたアクセルコマンドを表しています。中間値は線形補間されます。 + +`acceleration_map.csv` の例: + ```csv default, 0.00, 1.39, 2.78, 4.17, 5.56, 6.94, 8.33, 9.72, 11.11, 12.50, 13.89, 15.28, 16.67 @@ -121,46 +128,24 @@ default, 0.00, 1.39, 2.78, 4.17, 5.56, 6.94, 8.33, 9.72, 11.11, 12.50, 1 2.0, 1.80, 1.80, 1.64, 1.43, 1.25, 1.11, 0.96, 0.81, 0.70, 0.59, 0.51, 0.42, 0.42 ``` -##### ACTUATION_CMD モデル +![acceleration_map](./media/acceleration_map.svg) -通常、simple_planning_simulator は Control コマンドを受信して動作しますが、ACTUATION_CMD モデルを選択すると、Control コマンドの代わりに Actuation コマンドを受信します。このモデルでは、実際の車両に送信される車両コマンドを使用して運動をシミュレートできます。したがって、このモデルを選択すると、raw_vehicle_cmd_converter も立ち上がります。 - -convert_steer_cmd_method には、「vgr」と「steer_map」の 2 つのオプションがあります。「vgr」(可変ギアレシオ)を選択すると、ステアリングホイール角度がアクチュエーションコマンドとして送信され、その値がモデルを動かすためのステアリングタイヤ角度に変換されるものとみなされます。「steer_map」を選択すると、任意の値がアクチュエーションコマンドとして送信され、その値がモデルを動かすためのステアリングタイヤ速度に変換されるものとみなされます。任意の値というのは、EPS(電子パワーステアリング)電圧のようなものです。enable_pub_steer は、ステアリングタイヤ角度をパブリッシュするかどうかを決定します。false の場合は、アクチュエーションステータスから他のノード(例:raw_vehicle_cmd_converter)に変換されてパブリッシュされると予想されます。 - -![vgr_sim](./media/vgr_sim.drawio.svg) - -```yaml - -``` +##### ACTUATION_CMD モデル -ACTUATION_CMDで使用するパラメータは次のとおりです。 +通常 simple_planning_simulator は制御コマンドを受信することにより動作しますが、`ACTUATION_CMD*` モデルが選択されると、制御コマンドの代わりに作動コマンドを受信します。このモデルは、実際の車両に送信される車両コマンドを使用して動作をシミュレートできます。したがって、このモデルが選択されると `raw_vehicle_cmd_converter` も起動されます。詳細については、[actuation_cmd_sim.md](./docs/actuation_cmd_sim.md) を参照してください。 -| 名前 | 型 | 説明 | 単位 | -| :----------------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | :--- | -| accel_time_delay | double | 加速度入力のデッドタイム | [秒] | -| accel_time_constant | double | 1 次加速度動特性のタイムコンスタント | [秒] | -| brake_time_delay | double | ブレーキ入力のデッドタイム | [秒] | -| brake_time_constant | double | 1 次ブレーキ動特性のタイムコンスタント | [秒] | -| convert_accel_cmd | bool | true の場合、コマンドは加速度作動値に変換されて送信されると想定され、シミュレータ内で加速度値に戻されます。 | [-] | -| convert_brake_cmd | bool | true の場合、コマンドはブレーキ作動値に変換されて送信されると想定され、シミュレータ内で加速度値に戻されます。 | [-] | -| convert_steer_cmd | bool | true の場合、コマンドは操舵作動値に変換されて送信されると想定され、シミュレータ内で操舵速度値に戻されます。 | [-] | -| convert_steer_cmd_method | bool | 操舵コマンドを変換する方法。「vgr」と「steer_map」から選択できます。 | [-] | -| vgr_coef_a | double | 可変ギア比の係数 a の値 | [-] | -| vgr_coef_b | double | 可変ギア比の係数 b の値 | [-] | -| vgr_coef_c | double | 可変ギア比の係数 c の値 | [-] | -| enable_pub_steer | bool | ステアリングタイヤ角を公開するかどうか。false の場合、actuation_status から他のノード(例: raw_vehicle_cmd_converter)で変換され、公開される必要があります。 | [-] | + - +_注意_: ステアリング/速度/加速度のダイナミクスは、_遅延_ モデルのデッドタイムを持つ1階システムによってモデリングされます。_時定数_の定義は、ステップ応答が最終値の63%まで上昇するまでの時間です。_デッドタイム_ は制御入力に対する応答の遅れです。 -_注意_: ステアリング・ダイナミクス/速度・加速度ダイナミクスは、*遅延*モデルにおけるデッドタイムを持った1次システムでモデリングされています。*時定数*の定義は、ステップ応答が最終値の63%に上昇するまでの時間です。*デッドタイム*は、制御入力に対する応答の遅延です。 +### LEARNED_STEER_VEL モデルの例 -### LEARNED_STEER_VELモデルの例 +`LEARNED_STEER_VEL` の仕組みを示すために、いくつかの基本モデルを作成しました。 -`LEARNED_STEER_VEL`の仕組みを示すために、いくつかの基本モデルを作成しました。 +1. 基本的な Python モデルを含む [ライブラリ](https://github.com/atomyks/control_analysis_pipeline/tree/v0.1_autoware) をインストールします (ブランチ: `v0.1_autoware`)。 -1. 基本的なPythonモデルを含む[ライブラリ](https://github.com/atomyks/control_analysis_pipeline/tree/v0.1_autoware)をインストールします (ブランチ: `v0.1_autoware`) +2. `src/vehicle/sample_vehicle_launch/sample_vehicle_description/config/simulator_model.param.yaml` ファイルで `vehicle_model_type` を `LEARNED_STEER_VEL` に設定します。同じファイルで、次のパラメータを設定します。これらのモデルはテスト用であり、パラメータファイルは必要ありません。 -2. `src/vehicle/sample_vehicle_launch/sample_vehicle_description/config/simulator_model.param.yaml`ファイルの`vehicle_model_type`を`LEARNED_STEER_VEL`に設定します。同じファイルで、次のパラメータを設定します。これらのモデルはテスト用であり、パラメータファイルは必要ありません。 ```yaml model_module_paths: @@ -173,41 +158,43 @@ model_param_paths: ["", "", ""] model_class_names: ["KinematicModel", "SteerExample", "DriveExample"] ``` -### デフォルトの TF 設定 +### デフォルト TF 設定 -車両が `odom`->`base_link` tf を出力するため、このシミュレータは同フレーム ID 設定の tf を出力します。 -simple_planning_simulator.launch.py では、通常はローカリゼーションモジュール (例: NDT) で推定される `map`->`odom` tf を出力するノードも起動されます。このシミュレータモジュールによって出力される tf は理想的な値であるため、`odom`->`map` は常に 0 になります。 +車両が `odom` -> `base_link` tf を出力するため、このシミュレータは同じフレーム ID 構成で tf を出力します。 +simple_planning_simulator.launch.py では、通常はローカライゼーションモジュール (例: NDT) によって推定される `map` -> `odom` tf を出力するノードも起動されます。このシミュレータモジュールが返す tf は理想的な値であるため、`odom` -> `map` は常に 0 になります。 -### (注意点) ピッチ角計算 +### (注意点) ピッチ計算 -車両のピッチ角は次の方法で計算されます。 +自車ピッチ角は次のように計算されます。 -![ピッチ角計算](./media/pitch-calculation.drawio.svg) +![ピッチ計算](./media/pitch-calculation.drawio.svg) -注意: 画像の最下行に示されているようにライン方向に対して運転することはサポートされておらず、説明目的のみを示しています。 +注: 画像の下段に示すように、線の向きに対して走行することはサポートされておらず、説明のためだけに示されています。 ## エラー検出と処理 -入力の検証は車両モデルタイプの有効性テストのみです。 +実行される唯一の入力検証は、有効な車両モデルタイプのテストです。 -## セキュリティに関する考慮事項 +## セキュリティの考慮事項 + +**必須** - +- スプーフィング (偽の入力をどのようにチェックして処理しますか?) +- 改ざん (改ざんされた入力をどのようにチェックして処理しますか?) +- 否認 (外部の動作者の行為の影響を受けますか?) +- 情報漏洩 (データが漏洩する可能性がありますか?) +- サービス拒否 (スパムをどのように処理しますか?) +- 権限昇格 (実行中に権限レベルを変更する必要がありますか?) --> -## 参照/外部リンク +## 参照 / 外部リンク -Autoware.AI で最初に開発されました。以下のリンクを参照してください。 +これはもともと Autoware.AI で開発されました。以下のリンクを参照してください。 -## 今後の拡張/未実装の部分 +## 今後の拡張 / 実装されていない部分 + +- 車両モデルの精度の向上 (例: ステアリングのデッドゾーンとスリップ動作の追加) +- 疑似ポイント クラウドまたは疑似認識結果を出力するモジュールとの連携 -- 車両モデルの精度の向上 (例: ステアリングデッドゾーンとスリップ挙動の追加) -- 擬似点群または擬似認識結果を出力するモジュールとの連携 diff --git a/simulator/tier4_dummy_object_rviz_plugin/README.md b/simulator/tier4_dummy_object_rviz_plugin/README.md index 7f6fc23f67e41..9bc05e9dcc1b4 100644 --- a/simulator/tier4_dummy_object_rviz_plugin/README.md +++ b/simulator/tier4_dummy_object_rviz_plugin/README.md @@ -2,343 +2,147 @@ ## 目的 -このプラグインは、プランニングシミュレータ内のダミー歩行者、車、障害物を生成するために使用されます。 +このプラグインは、プランニングシミュレータにダミーの歩行者、車、障害物を生成するために使用されます。 ## 概要 -CarInitialPoseToolはダミー車の生成トピックを送信します。 -PedestrianInitialPoseToolはダミー歩行者の生成トピックを送信します。 -UnknownInitialPoseToolはダミー障害物の生成トピックを送信します。 -DeleteAllObjectsToolは上記3つのツールで表示されたダミー車、歩行者、障害物を削除します。 +CarInitialPoseToolは、ダミーの車を生成するためのトピックを送信します。 +PedestrianInitialPoseToolは、ダミーの歩行者を生成するためのトピックを送信します。 +UnknownInitialPoseToolは、ダミーの障害物を生成するためのトピックを送信します。 +DeleteAllObjectsToolは、上記の3つのツールで表示されるダミーの車、歩行者、障害物を削除します。 ## 入出力 ### 出力 -| 名前 | タイプ | 説明 | -| ---------------------------------------------------- | ----------------------------------------- | ------------------------------------------------ | -| `/simulation/dummy_perception_publisher/object_info` | `tier4_simulation_msgs::msg::DummyObject` | ダミーオブジェクト情報をパブリッシュするトピック | +| 名前 | タイプ | 説明 | +| ---------------------------------------------------- | ----------------------------------------- | -------------------------------------------- | +| `/simulation/dummy_perception_publisher/object_info` | `tier4_simulation_msgs::msg::DummyObject` | ダミーオブジェクト情報を発行するトピック | ## パラメータ ### コアパラメータ -#### CarPose - -- 定義: 自車位置に関するパラメータ -- 説明: 自車位置の初期値に関するパラメータです。 - 例: - - ``` - - car_pose: - x: 10.0 - y: 20.0 - z: 30.0 - roll: 0.0 - pitch: 0.0 - yaw: 0.0 - ``` - -#### PlannerGoal - -- 定義: プランナーの目標に関するパラメータ -- 説明: プランナーのゴールに関するパラメータです。 - 例: - - ``` - - planner_goal: - x: 40.0 - y: 50.0 - z: 60.0 - roll: 0.0 - pitch: 0.0 - yaw: 0.0 - v: 10.0 - a: 0.0 - ``` - -#### Trajectory - -- 定義: 軌道に関するパラメータ -- 説明: 車両が走行する予定の軌道の初期値に関するパラメータです。 - 例: - - ``` - - trajectory: - x: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] - y: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] - z: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] - v: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] - a: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0] - ``` - -#### BehaviorPlanner - -- 定義: 行動プランナーに関するパラメータ -- 説明: 行動プランナーに関するパラメータです。 - 例: - - ``` - - behavior_planner: - target_vel: 10.0 - target_acc: 0.0 - velocity_violation: 0.1 - acceleration_violation: 0.1 - ``` - -### Perception Parameters - -#### Radar - -- 定義: レーダーに関するパラメータ -- 説明: レーダーセンサーに関するパラメータです。 - 例: - - ``` - - radar: - fov: 90.0 - range: 100.0 - min_detection_size: 0.1 - ``` - -#### Lidar - -- 定義: LiDARに関するパラメータ -- 説明: LiDARセンサーに関するパラメータです。 - 例: - - ``` - - lidar: - fov: 180.0 - range: 100.0 - min_detection_size: 0.1 - ``` - -#### Camera - -- 定義: カメラに関するパラメータ -- 説明: カメラセンサーに関するパラメータです。 - 例: - - ``` - - camera: - fov: 120.0 - range: 100.0 - min_detection_size: 0.1 - ``` - -### Control Parameters - -#### MPC - -- 定義: MPCに関するパラメータ -- 説明: MPCに関するパラメータです。 - 例: - - ``` - - mpc: - dt: 0.01 - horizon: 10 - Q: [1.0, 0.0, 0.0] - R: [1.0, 0.0, 0.0] - ``` - -#### PurePursuit - -- 定義: PurePursuitに関するパラメータ -- 説明: PurePursuitに関するパラメータです。 - 例: - - ``` - - pure_pursuit: - lookahead_distance: 10.0 - wheelbase: 2.0 - ``` - -### Simulation Parameters - -#### Simulator - -- 定義: シミュレーターに関するパラメータ -- 説明: シミュレーターに関するパラメータです。 - 例: - - ``` - - simulator: - dt: 0.01 - environment: 'urban' - spawn_location: [10.0, 20.0, 30.0] - scenario: 'intersection' - ``` - -### Autoware - -- 定義: Autowareに関するパラメータ -- 説明: Autowareに関するパラメータです。 - 例: - - ``` - - autoware: - debug: false - verbose: false - 'post resampling': false - ``` - -| 名前 | 型 | 初期値 | 説明 | -| ----------------- | ------ | ---------------------------------------------------- | ------------------------------------------------ | -| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | -| `std_dev_x_` | float | 0.03 | 初期ポーズの X 標準偏差 [m] | -| `std_dev_y_` | float | 0.03 | 初期ポーズの Y 標準偏差 [m] | -| `std_dev_z_` | float | 0.03 | 初期ポーズの Z 標準偏差 [m] | -| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | 初期ポーズの Theta 標準偏差 [rad] | -| `length_` | float | 4.0 | 初期ポーズの X 標準偏差 [m] | -| `width_` | float | 1.8 | 初期ポーズの Y 標準偏差 [m] | -| `height_` | float | 2.0 | 初期ポーズの Z 標準偏差 [m] | -| `position_z_` | float | 0.0 | 初期ポーズの Z 位置 [m] | -| `velocity_` | float | 0.0 | 速度 [m/s] | +#### 自車位置 + +| 名称 | タイプ | デフォルト値 | 説明 | +| ----------------- | ------ | ---------------------------------------------------- | -------------------------------------------- | +| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | +| `std_dev_x_` | 浮動小数点 | 0.03 | 初期姿勢の X 標準偏差 [m] | +| `std_dev_y_` | 浮動小数点 | 0.03 | 初期姿勢の Y 標準偏差 [m] | +| `std_dev_z_` | 浮動小数点 | 0.03 | 初期姿勢の Z 標準偏差 [m] | +| `std_dev_theta_` | 浮動小数点 | 5.0 \* M_PI / 180.0 | 初期姿勢の Theta 標準偏差 [rad] | +| `length_` | 浮動小数点 | 4.0 | 初期姿勢の X 標準偏差 [m] | +| `width_` | 浮動小数点 | 1.8 | 初期姿勢の Y 標準偏差 [m] | +| `height_` | 浮動小数点 | 2.0 | 初期姿勢の Z 標準偏差 [m] | +| `position_z_` | 浮動小数点 | 0.0 | 初期姿勢の Z 位置 [m] | +| `velocity_` | 浮動小数点 | 0.0 | 速度 [m/s] | #### BusPose -走行中の車両の姿勢を表現し、車両座標系における現在の姿勢を提供する。 - -| 名称 | タイプ | デフォルト値 | 説明 | -| ----------------- | -------- | ---------------------------------------------------- | ------------------------------------------------ | -| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | -| `std_dev_x_` | 浮動小数 | 0.03 | 初期姿勢に対する X 軸の標準偏差 [m] | -| `std_dev_y_` | 浮動小数 | 0.03 | 初期姿勢に対する Y 軸の標準偏差 [m] | -| `std_dev_z_` | 浮動小数 | 0.03 | 初期姿勢に対する Z 軸の標準偏差 [m] | -| `std_dev_theta_` | 浮動小数 | 5.0 \* M_PI / 180.0 | 初期姿勢に対する θ 軸の標準偏差 [rad] | -| `length_` | 浮動小数 | 10.5 | 初期姿勢に対する X 軸の標準偏差 [m] | -| `width_` | 浮動小数 | 2.5 | 初期姿勢に対する Y 軸の標準偏差 [m] | -| `height_` | 浮動小数 | 3.5 | 初期姿勢に対する Z 軸の標準偏差 [m] | -| `position_z_` | 浮動小数 | 0.0 | 初期姿勢に対する Z 軸の位置 [m] | -| `velocity_` | 浮動小数 | 0.0 | 速度 [m/s] | - -#### 歩行者姿勢 - -**概要** - -歩行者検出器は、PC(点群)と画像に基づいて、歩行者を検出し、トラッキングします。このコンポーネントは、障害物検知、経路計画、ダイナミックPlanningなどの他のコンポーネントに歩行者情報を提供します。ただし、停车中や駐車中の場合は除きます。 - -**入力** - -- 車両の点群(organized point cloud) -- 車両の画像(RGB画像) -- 自車位置と姿勢(6DoF) -- 制限速度 - -**出力** - -- 検出された歩行者リスト -- 歩行者のバウンディングボックス(3D bounding box) -- 歩行者の速度(東東、南北) -- 歩行者の加速度(東東、南北) -- 歩行者の[後方距離]'post resampling' - -**パラメータ** - -- 点群の処理時間 -- 画像の処理時間 -- 検出距離 -- 以下の歩行者逸脱量のしきい値: - - 速度 - - 加速度 - -| Name | Type | Default Value | Description | -| ----------------- | ------ | ---------------------------------------------------- | ------------------------------------------------ | -| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | -| `std_dev_x_` | float | 0.03 | 初期位置のX軸標準偏差 [m] | -| `std_dev_y_` | float | 0.03 | 初期位置のY軸標準偏差 [m] | -| `std_dev_z_` | float | 0.03 | 初期位置のZ軸標準偏差 [m] | -| `std_dev_theta_` | float | 5.0 \* M_PI / 180.0 | 初期位置のθ軸標準偏差 [rad] | -| `position_z_` | float | 0.0 | 初期位置のZ軸位置 [m] | -| `velocity_` | float | 0.0 | 速度 [m/s] | - -#### UnknownPose - -このPlanningコンポーネントは、自車位置が不明な状況でAutoware内のナビゲーションスタックを使用するために設計されています。 - -- 入力 - - 地図上の経路 - - 現在の速度、加速度 - - センサーデータ -- 出力 - - 加速度、操舵角の目標値 - - 減速目標値 - -このコンポーネントは、以下を使用して経路と自車位置とのずれを推定します。 - -- `post resampling`に対する経路の逸脱量 -- 現在の速度と加速度に対する経路の逸脱量 -- センサーデータに対する経路の逸脱量 - -センサーデータが十分に得られない場合は、コンポーネントは逸脱量を推定できない場合があります。このような場合は、コンポーネントは安全モードに入り、十分なセンサーデータが得られるまで待機します。 - -このコンポーネントは、以下の交差点の回避に使用できます。 - -- 信号のない交差点 -- 一時停止標識のある交差点 - -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------- | -------- | ---------------------------------------------------- | ---------------------------------- | -| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーの物体情報を発行するトピック | -| `std_dev_x_` | 浮動小数 | 0.03 | 初期姿勢の X 標準偏差 [m] | -| `std_dev_y_` | 浮動小数 | 0.03 | 初期姿勢の Y 標準偏差 [m] | -| `std_dev_z_` | 浮動小数 | 0.03 | 初期姿勢の Z 標準偏差 [m] | -| `std_dev_theta_` | 浮動小数 | 5.0 \* M_PI / 180.0 | 初期姿勢のシータ標準偏差 [rad] | -| `position_z_` | 浮動小数 | 0.0 | 初期姿勢の Z 位置 [m] | -| `velocity_` | 浮動小数 | 0.0 | 速度 [m/s] | +| Name | Type | デフォルト値 | 説明 | +| ----------------- | ------ | ---------------------------------------------------- | ----------------------------------------------- | +| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | +| `std_dev_x_` | 数値 | 0.03 | 初期ポーズでの X 方向の標準偏差 [m] | +| `std_dev_y_` | 数値 | 0.03 | 初期ポーズでの Y 方向の標準偏差 [m] | +| `std_dev_z_` | 数値 | 0.03 | 初期ポーズでの Z 方向の標準偏差 [m] | +| `std_dev_theta_` | 数値 | 5.0 \* M_PI / 180.0 | 初期ポーズでの Theta 方向の標準偏差 [rad] | +| `length_` | 数値 | 10.5 | 初期ポーズでの X 方向の標準偏差 [m] | +| `width_` | 数値 | 2.5 | 初期ポーズでの Y 方向の標準偏差 [m] | +| `height_` | 数値 | 3.5 | 初期ポーズでの Z 方向の標準偏差 [m] | +| `position_z_` | 数値 | 0.0 | 初期ポーズでの Z 方向の位置 [m] | +| `velocity_` | 数値 | 0.0 | Velocity [m/s] | + +#### PedestrianPose + +| 名 | 型 | デフォルト値 | 説明 | +| ----------------- | ------ | --------------------------------------------------- | -------------------------------------------- | +| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミー物体情報をパブリッシュするトピック | +| `std_dev_x_` | 実数 | 0.03 | X の初期姿勢に対する標準偏差 [m] | +| `std_dev_y_` | 実数 | 0.03 | Y の初期姿勢に対する標準偏差 [m] | +| `std_dev_z_` | 実数 | 0.03 | Z の初期姿勢に対する標準偏差 [m] | +| `std_dev_theta_` | 実数 | 5.0 \* M_PI / 180.0 | Theta の初期姿勢に対する標準偏差 [rad] | +| `position_z_` | 実数 | 0.0 | Z 位置に対する初期姿勢 [m] | +| `velocity_` | 実数 | 0.0 | 速度 [m/s] | + +#### 未知車位置 + +| 名称 | タイプ | 初期値 | 説明 | +| ----------------- | ------ | ---------------------------------------------------- | ----------------------------------------------- | +| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | +| `std_dev_x_` | 浮動小数 | 0.03 | 初期位置の X の標準偏差 [m] | +| `std_dev_y_` | 浮動小数 | 0.03 | 初期位置の Y の標準偏差 [m] | +| `std_dev_z_` | 浮動小数 | 0.03 | 初期位置の Z の標準偏差 [m] | +| `std_dev_theta_` | 浮動小数 | 5.0 \* M_PI / 180.0 | 初期位置の θ の標準偏差 [rad] | +| `position_z_` | 浮動小数 | 0.0 | 初期位置の Z 位置 [m] | +| `velocity_` | 浮動小数 | 0.0 | 速度 [m/s] | #### DeleteAllObjects -| 名前 | タイプ | デフォルト値 | 説明 | -| ----------------- | ------ | ---------------------------------------------------- | ------------------------------------------ | -| `topic_property_` | 文字列 | `/simulation/dummy_perception_publisher/object_info` | ダミーのオブジェクト情報を公開するトピック | +| Name | Type | Default Value | Description | +| ----------------- | ------ | ------------------------------------------------------ | --------------------------------------------- | +| `topic_property_` | string | `/simulation/dummy_perception_publisher/object_info` | ダミーオブジェクト情報をパブリッシュするトピック | -## 制限と前提 +## 想定/既知の制限 -Planningシミュレータを使用しています。 +Planningシミュレータを使用 ## 使用方法 -1. rvizを起動し、ツールタブの+を選択します。 +1. rvizを起動し、ツールタブで+を選択します。 ![select_add](./images/select_add.png) -2. 次のいずれかを選択します: tier4_dummy_object_rviz_plugin を選択してOKを押します。 +2. tier4_dummy_object_rviz_pluginのいずれかを選択し、OKを押します。 ![select_plugin](./images/select_plugin.png) -3. ツールタブの新しい項目を選択します(例では2D Dummy Car)rvizでこれをクリックします。 +3. ツールタブで新しいアイテム(例では2Dダミーカー)を選択し、rvizでクリックします。 ![select_dummy_car](./images/select_dummy_car.png) -### 対話型操作 +### 対話操作 -オブジェクトを対話的に操作できます。 +オブジェクトは対話的に操作できます。 1. rvizで「ツールプロパティ」を選択します。 2. ツールプロパティで対応するオブジェクトタブを選択します。 -3. 「対話型」チェックボックスをオンにします。 +3. 「インタラクティブ」チェックボックスをオンにします。 ![tool_properties](./images/tool_properties.png) -4. ツールタブでまだ選択していない項目を選択します。 +4. まだ選択していない場合、ツールタブでアイテムを選択します。 5. キーコマンドは次のとおりです。 -| 操作 | キーコマンド | -| ---- | ----------------------------------------- | -| 追加 | Shift + 右クリック | -| 移動 | 右クリック長押し + ドラッグアンドドロップ | -| 削除 | Alt + 右クリック | +## 自動運転ソフトウェア ドキュメント 翻訳 + +### Planning コンポーネント + +| アクション | キーコマンド | +|---|---| +| 追加 (ADD) | Shift キーを押しながら右クリック | +| 移動 (MOVE) | 右クリックをホールドしたままドラッグアンドドロップ | +| 削除 (DELETE) | Alt キーを押しながら右クリック | -## Material Designアイコン +### Common API -このプロジェクトではGoogleの[Material Designアイコン](https://developers.google.com/fonts/docs/material_symbols)を使用しています。これらのアイコンはApache License、Version 2.0の条件に基づいて使用されています。 +``` +# Maneuver Lane Route +lane_route: LCRLaneletIDProto +# self.pose[0] 自車位置 *post resampling*[m]; current pose[1] 自車位置 [m/s] +pose : geometry_msgs/PoseStampedWithCovariance +# `-1`; GPS, IMU, etc +source: int32 +``` -Material Designアイコンは、アプリケーション、ウェブサイト、およびその他のデジタル製品のユーザーインターフェースを向上させるためにGoogleによって提供されるシンボルのコレクションです。 +## Material Design アイコン + +このプロジェクトでは、Google の [Material Design アイコン](https://developers.google.com/fonts/docs/material_symbols) を使用しています。これらのアイコンは、Apache ライセンスバージョン 2.0 の条件に基づいて使用されています。 + +Material Design アイコンは、Google が提供するシンボルのコレクションで、アプリケーション、Web サイト、その他のデジタル製品のユーザーインターフェイスを向上させるために使用されます。 ### ライセンス -Material DesignアイコンはApache License、バージョン2.0のライセンスに基づいています。ライセンスのコピーは次のURLから取得できます。 +Material Design アイコンは、Apache ライセンスバージョン 2.0 のもとでライセンスされています。ライセンスのコピーは次の URL から入手できます。 -適用法によって要求される場合、または書面で合意される場合を除き、ライセンスに基づいて配布されるソフトウェアは、「そのまま」の状態で保証や条件なしに配布されます。ライセンスの明示的または暗示的な許可および制限に関する具体的な言語についてはライセンスを参照してください。 +適用法で求められる場合または書面で同意しない限り、ライセンスに基づいて配布されるソフトウェアは、明示的または黙示的な保証なしで「そのまま」配布されます。ライセンスの具体的な許可および制限事項については、ライセンスを参照してください。 + +### 謝辞 -### Acknowledgment +コミュニティにこれらのアイコンを提供し、開発者やデザイナーがプロジェクトのビジュアルアピールとユーザーエクスペリエンスを向上させることを支援してくれる Google に感謝の意を表したいと思います。 -これらのアイコンをコミュニティに提供し、開発者とデザイナーがプロジェクトのビジュアルアピールとユーザーエクスペリエンスを向上させるのに役立てさせてくれたGoogleに感謝の意を表します。 diff --git a/simulator/vehicle_door_simulator/README.md b/simulator/vehicle_door_simulator/README.md index b785822389839..dafe2c7a86e26 100644 --- a/simulator/vehicle_door_simulator/README.md +++ b/simulator/vehicle_door_simulator/README.md @@ -1,3 +1,4 @@ # vehicle_door_simulator -このパッケージは、ドアなどの車両機器の動作をテストするためのものです。 +このパッケージは、ドアなどの車両のデバイスに対する操作のテストに使用されます。 + diff --git a/system/autoware_component_monitor/README.md b/system/autoware_component_monitor/README.md index d8c9e5b39e889..43e70ec22f3e8 100644 --- a/system/autoware_component_monitor/README.md +++ b/system/autoware_component_monitor/README.md @@ -1,29 +1,30 @@ ## autoware_component_monitor -`autoware_component_monitor` パッケージは、コンポーネントコンテナのシステム使用量を監視できます。 -パッケージ内のコンポーザブルノードはコンポーネントコンテナに接続され、コンテナの CPU およびメモリ使用量を発行します。 +`autoware_component_monitor`パッケージではコンポーネントコンテナのシステム使用量をモニターできます。 +このパッケージ内のコンポーザブルノードはコンポーネントコンテナにアタッチされ、コンテナのCPUおよびメモリ使用率をパブリッシュします。 -## 入出力 +## 入力 / 出力 ### 入力 -なし +なし。 ### 出力 -| 名称 | タイプ | 説明 | -| -------------------------- | -------------------------------------------------- | --------------------- | -| `~/component_system_usage` | `autoware_internal_msgs::msg::ResourceUsageReport` | CPU、メモリ使用量など | +| 名称 | タイプ | 説明 | +| -------------------------- | -------------------------------------------------- | ---------------------- | +| `~/component_system_usage` | `autoware_internal_msgs::msg::ResourceUsageReport` | CPU、メモリ使用率など | -## パラメーター +## パラメータ -### コアパラメーター +### コアパラメータ {{ json_to_markdown("system/autoware_component_monitor/schema/component_monitor.schema.json") }} ## 使用方法 -起動ファイルにコンポーザブルノードとして追加します。 +起動ファイルに構成可能なノードとして追加します: + ```xml @@ -45,9 +46,10 @@ ``` -### クイックテスト +## クイックテスト + +以下のコマンドを実行することでパッケージをテストできます。 -次のコマンドを実行することでパッケージをテストできます。 ```bash ros2 component load autoware_component_monitor autoware::component_monitor::ComponentMonitor -p publish_rate:=10.0 --node-namespace @@ -58,15 +60,16 @@ ros2 component load /pointcloud_container autoware_component_monitor autoware::c ## 動作原理 -このパッケージでは、内部で `top` コマンドを使用しています。 -`top -b -n 1 -E k -p PID` コマンドが 10 Hz で実行され、プロセスのシステム使用状況を取得します。 +このパッケージは内部で `top` コマンドを使用します。 +`top -b -n 1 -E k -p PID` コマンドは 10 Hz で実行され、そのプロセスに対するシステムの使用率を取得します。 -- `-b` はバッチモードを有効にします。デフォルトでは、`top` は終了せず、定期的に標準出力に出力します。バッチモードではプログラムの終了が許可されます。 -- `-n` はバッチモードで `top` がシステム使用状況を出力する回数です。 -- `-p` は監視するプロセスの PID を指定します。 -- `-E k` は要約セクションのメモリ単位を KiB に変更します。 +- `-b` はバッチモードをアクティブにします。デフォルトでは `top` は終了せずに定期的に stdout に出力します。バッチモードではプログラムの終了が許可されます。 +- `-n` は `top` がバッチモードでシステムの使用率を出力する回数です。 +- `-p` はモニタリングするプロセスの PID を指定します。 +- `-E k` はサマリーセクションのメモリ単位を KiB に変更します。 + +出力例を以下に示します。 -サンプル出力は次のとおりです。 ```text top - 13:57:26 up 3:14, 1 user, load average: 1,09, 1,10, 1,04 @@ -79,4 +82,5 @@ KiB Swap: 39062524 total, 39062524 free, 0 used. 45520816 avail Mem 3352 meb 20 0 2905940 1,2g 39292 S 0,0 2,0 23:24.01 awesome ``` -5行目の最後にある5番目、8番目のフィールド(それぞれRES、%CPU)を取得します。 +最終行から5番目と8番目のフィールド(それぞれ`RES`と`%CPU`)を取得します。 + diff --git a/system/autoware_default_adapi/README.md b/system/autoware_default_adapi/README.md index 337ed1f58db84..c6ccfb08d1d5f 100644 --- a/system/autoware_default_adapi/README.md +++ b/system/autoware_default_adapi/README.md @@ -1,28 +1,29 @@ # autoware_default_adapi -## メモ +## 注意 -サービスを中継するコンポーネントは、マルチスレッドエグゼキューターによって実行される必要があります。 +サービスをリレーするコンポーネントは、Multi-Threaded Executor によって実行される必要があります。 -## 機能 +## 特徴 -このパッケージは既定実装の AD API です。 +このパッケージはデフォルト実装の AD API です。 -- [Autoware 状態 (後方互換性)](document/autoware-state.md) +- [autoware のステータス(後方互換性)](document/autoware-state.md) - [フェイルセーフ](document/fail-safe.md) - [インターフェイス](document/interface.md) -- [局在](document/localization.md) -- [運動](document/motion.md) -- [運転モード](document/operation-mode.md) -- [経路](document/routing.md) +- [ローカリゼーション](document/localization.md) +- [モーション](document/motion.md) +- [オペレーションモード](document/operation-mode.md) +- [ルーティング](document/routing.md) ## Web サーバースクリプト -これは、HTTP を使用して API を呼び出すためのサンプルです。 +これは、HTTP を使用して API を呼び出すサンプルです。 ## ガイドメッセージスクリプト -これは、自律モードへの遷移条件を確認するためのデバッグスクリプトです。 +これは、自律運転モードへの移行条件をチェックするためのデバッグスクリプトです。 + ```bash $ ros2 run autoware_default_adapi guide.py @@ -34,3 +35,4 @@ The vehicle is ready. Please change the operation mode to autonomous. The vehicle is driving autonomously. The vehicle has reached the goal of the route. Please reset a route. ``` + diff --git a/system/autoware_processing_time_checker/README.md b/system/autoware_processing_time_checker/README.md index 179569c6c9dbe..7060088c953fa 100644 --- a/system/autoware_processing_time_checker/README.md +++ b/system/autoware_processing_time_checker/README.md @@ -2,125 +2,86 @@ ## 目的 -このノードは各モジュールの処理時間が有効かどうかを確認し、診断を送信します。 -注: 現在、検証機能はなく、診断では常に「OK」が割り当てられます。 +このノードは、各モジュールの処理時間が有効かどうかを確認し、診断を送信します。 +注意:現在、検証機能はなく、診断では常に「OK」が割り当てられます。 ### スタンドアロン起動 + ```bash ros2 launch autoware_processing_time_checker processing_time_checker.launch.xml ``` -## 内部動作 / アルゴリズム +## 内部の仕組み / アルゴリズム ## 入出力 ### 入力 -| 名称 | タイプ | 説明 | -| ------------------------- | --------------------------------- | ---------------------- | -| `/.../processing_time_ms` | `tier4_debug_msgs/Float64Stamped` | 各モジュールの処理時間 | +| 名前 | タイプ | 説明 | +| ------------------------- | -------------------------------- | -------------------------------- | +| `/.../processing_time_ms` | `tier4_debug_msgs/Float64Stamped` | 各モジュールの処理時間 | ### 出力 -**自律走行ソフトウェアドキュメント** - -**要約** - -このドキュメントは、Autowareの自律走行ソフトウェアアーキテクチャとコンポーネントの詳細を提供します。 - -**コンポーネントアーキテクチャ** - -Autowareは、モジュール式のソフトウェアアーキテクチャに基づいています。主なコンポーネントは次のとおりです。 - -- **Planningモジュール:** 自律走行のための経路計画を生成します。 -- **Perceptionモジュール:** センサーデータから周囲環境を認識します。 -- **Controlモジュール:** 車両の制御を行います。 - -**Planningモジュール** - -Planningモジュールは、以下のサブモジュールで構成されています。 - -- **Global Planning:** 長距離の経路を生成します。 -- **Local Planning:** 短距離の経路を生成します。 -- **Behavior Planning:** 障害物の回避や車線変更などの車両行動を計画します。 - -**Planningモジュールのアルゴリズム** - -Planningモジュールは、以下のようなアルゴリズムを使用しています。 +**Autoware自動運転ソフトウェア** -- **A\*アルゴリズム:** グラフ探索を使用して経路を生成します。 -- **動的プログラミング:** 時系列データの最適化問題を解きます。 -- **確率的ロードマップ法 (PRM):** ランダムなノードとエッジを使用して経路を生成します。 +**目次** -**Perceptionモジュール** +- [アーキテクチャ](#アーキテクチャ) +- [Planning](#Planning) +- [Perception](#Perception) +- [Visualization](#Visualization) +- [Reference Documents](#Reference-Documents) -Perceptionモジュールは、以下のようなセンサーデータを使用しています。 +**アーキテクチャ** -- カメラ -- レーダー -- LiDAR +Autowareは、以下のモジュールから構成されるモジュール式のソフトウェアスタックです。 -**Perceptionモジュールのアルゴリズム** +- Controller +- Localization +- Planning +- Perception +- Vehicle Control +- Visualization -Perceptionモジュールは、以下のようなアルゴリズムを使用して周囲環境を認識します。 +**Planning** -- **物体検出:** 画像や点群データから物体検出を行います。 -- **セマンティックセグメンテーション:** 画像や点群データから物体の種類を分類します。 -- **障害物認識:** 障害物の位置と形状を推定します。 +Planningモジュールは、自車位置とセンサデータに基づいて、車両の経路を計画します。以下のタスクを実行します。 -**Controlモジュール** +- 障害物回避 +- 経路追従 +- 交通ルールへの準拠 -Controlモジュールは、以下のサブモジュールで構成されています。 +**Perception** -- **Path Following:** Planningモジュールから生成された経路に従って走行します。 -- **Lateral and Longitudinal Control:** 車両のステアリングと加速を制御します。 -- **Safety Monitor:** 車両の安全状態を監視します。 +Perceptionモジュールは、センサデータから周囲環境を認識します。以下のタスクを実行します。 -**Controlモジュールのアルゴリズム** +- 物体検出 +- レーン検出 +- 道路境界検出 -Controlモジュールは、以下のようなアルゴリズムを使用しています。 +**Visualization** -- **PID制御:** フィードバックループ制御を使用して車両の動作を調整します。 -- **状態フィードバック制御:** 車両の現在の状態に基づいて制御を行います。 -- **予測制御:** 車両の将来の動作を予測して制御を行います。 +Visualizationモジュールは、PlanningとPerceptionの出力データを視覚化します。これにより、開発者はシステムのパフォーマンスを監視できます。 -**その他のコンポーネント** +**Reference Documents** -Planning、Perception、Controlモジュールに加えて、Autowareには以下のようなコンポーネントも含まれています。 +- [Autowareユーザーガイド](https://www.autoware.ai/user-guides/) +- [Autoware開発者ガイド](https://www.autoware.ai/developer-guides/) +- [Autoware APIドキュメント](https://www.autoware.ai/api-docs/) -- **Localization:** 自車位置を推定します。 -- **Visualization:** 自律走行システムの動作を視覚化します。 -- **Data Recorder:** 自律走行システムのデータを記録します。 - -**開発ツール** - -Autowareには、以下の開発ツールが用意されています。 - -- **ROS:** ロボットオペレーティングシステムを提供します。 -- **Gazebo:** シミュレーション環境を提供します。 -- **RViz:** 自律走行システムの動作を視覚化するためのツールを提供します。 - -**評価** - -Autowareは、以下のようなテストシナリオを使用して評価されています。 - -- **クロス交差点:** 交差点での車両の衝突回避を評価します。 -- **高速道路レーン変更:** 高速道路での車線変更の安全性を評価します。 -- **駐車:** 駐車スペースへの駐車を評価します。 - -**まとめ** - -Autowareは、包括的な自律走行ソフトウェアスタックです。モジュール式のアーキテクチャ、高度なアルゴリズム、包括的な開発ツールにより、研究者や開発者が自律走行システムを開発するための強力なプラットフォームを提供します。 - -| 名称 | 種類 | 説明 | -| ----------------------------------------- | --------------------------------- | ---------------------- | -| `/system/processing_time_checker/metrics` | `diagnostic_msgs/DiagnosticArray` | 全モジュールの処理時間 | +| 名称 | タイプ | 説明 | +| ----------------------------------------- | ------------------------------------- | ---------------------------------- | +| `/system/processing_time_checker/metrics` | `tier4_metric_msgs::msg::MetricArray` | すべてのモジュールの処理時間 | ## パラメータ {{ json_to_markdown("system/autoware_processing_time_checker/schema/processing_time_checker.schema.json") }} -## 仮定/既知の制限 +`output_metrics = true` の場合、ノードはシャットダウン時にその有効期間中に測定された処理時間の統計を `/autoware_metrics/<ノード名>-<タイムスタンプ>.json` に書き出します。 + +## 前提 / 制約事項 + +未定。 -TBD. diff --git a/system/bluetooth_monitor/README.md b/system/bluetooth_monitor/README.md index f534c28349181..9aaa066a1dd94 100644 --- a/system/bluetooth_monitor/README.md +++ b/system/bluetooth_monitor/README.md @@ -2,15 +2,15 @@ ## 説明 -このノードは、L2pingを使用したワイヤレスデバイスへのBluetooth接続を監視します。
-L2pingはBluetooth L2CAPレイヤーでPINGエコーコマンドを生成し、ワイヤレスデバイスからのエコーレスポンスを受信して確認できます。 +このノードは、L2pingを使用してワイヤレスデバイスへのBluetooth接続を監視します。
+L2pingは、Bluetooth L2CAPレイヤーでPINGエコーコマンドを生成します。そして、ワイヤレスデバイスからエコーレスポンスを受信してチェックできます。 ## ブロックダイアグラム -L2pingはデフォルトではrootユーザーのみ許可されているため、このパッケージは次のアプローチを提供して、可能な限りセキュリティリスクを最小限に抑えます。 +L2pingはデフォルトではrootにのみ許可されているため、このパッケージはセキュリティリスクを可能な限り最小限に抑えるために、次のようなアプローチを提供します。 -- L2pingを実行し、ソケットプログラミングを使用してワイヤレスデバイス情報を`bluetooth_monitor`に提供する`l2ping_service`という名前の小さなプログラムを提供します。 -- `bluetooth_monitor`は、ソケット通信によってこれらの情報が送信されるため、非特権ユーザーとしてワイヤレスデバイス情報とL2pingステータスを知ることができます。 +- `l2ping_service`という、L2pingを実行し、ソケットプログラミングを使用してワイヤレスデバイス情報を`bluetooth_monitor`に提供する小さなプログラムを提供します。 +- `bluetooth_monitor`は、これらの情報がソケット通信によって送信されるため、非特権ユーザーとしてワイヤレスデバイスの情報とL2pingの状態を知ることができます。 ![block_diagram](docs/block_diagram.drawio.svg) @@ -20,60 +20,69 @@ L2pingはデフォルトではrootユーザーのみ許可されているため [概要] +## 自動運転ソフトウェア + +**翻訳** + +**メッセージレベル** + | レベル | メッセージ | -| ------ | ---------- | -| OK | OK | -| WARN | RTT警告 | -| ERROR | ロスト | -| | 関数エラー | +|---|---| +| OK | OK | +| WARN | RTT警告 | +| ERROR | ロスト | +| | 関数エラー | -**[値]** +[値] -| キー | 値 (例) | -| -------------------------- | ------------------------------------------------------------ | -| デバイス [0-9]: ステータス | OK / RTT 警告 / 検証エラー / ロスト / Ping 拒否 / 機能エラー | -| デバイス [0-9]: 名称 | ワイヤレスコントローラー | -| デバイス [0-9]: 製造元 | MediaTek, Inc. | -| デバイス [0-9]: アドレス | AA:BB:CC:DD:EE:FF | -| デバイス [0-9]: RTT | 0.00ms | +| キー | 値(例) | +| -------------------------- | --------------------------------------------------------------------| +| デバイス [0-9]: ステータス | OK / RTT 警告 / 検証エラー / 損失 / Ping 拒否 / 機能エラー | +| デバイス [0-9]: 名前 | ワイヤレスコントローラー | +| デバイス [0-9]: 製造者 | MediaTek, Inc. | +| デバイス [0-9]: アドレス | AA:BB:CC:DD:EE:FF | +| デバイス [0-9]: RTT | 0.00ms | -- 「bluetooth_monitor」が「機能エラー」をレポートすると、次のキーが追加されます。
- 例) 「connect」システムコールが失敗する。 +- `bluetooth_monitor`が`機能エラー`を報告すると、次のキーが追加されます。
+ 例)`connect`システムコールが失敗しました。 -| キー(例) | 値(例) | -| -------------------- | ------------------------------------------------ | -| デバイス [0-9]: 接続 | そのようなファイルまたはディレクトリはありません | +| キー(例) | 値(例) | +| --------------------- | ------------------------- | +| Device [0-9]: connect | そのようなファイルまたはディレクトリはありません | -## パラメータ +## パラメーター {{ json_to_markdown("system/bluetooth_monitor/schema/bluetooth_monitor.schema.json") }} - `rtt_warn` - - **0.00(ゼロ)**: RTTのチェックを無効化 - - **それ以外**: 指定した秒数でRTTをチェック + - **0.00(ゼロ)**: RTT チェックを無効にする + - **それ以外**: 指定した秒数で RTT をチェックする - `addresses` - **\***: すべての接続デバイス - - **AA:BB:CC:DD:EE:FF**: Bluetoothアドレスを設定することで監視するデバイスを指定できます + - **AA:BB:CC:DD:EE:FF**: Bluetooth アドレスを設定することで監視対象のデバイスを指定できる -## 開始前の手順 +## 開始前の注意事項 -- ルートユーザーとして`l2ping_service`を実行する場合は、以下の手順をスキップできます。 +- `l2ping_service` を root ユーザーとして実行すれば、この手順は省略できます。 + +1. L2ping には `cap_net_raw+eip` ケーパビリティが必要なため、`l2ping_service` にケーパビリティを割り当てます。 -1. L2pingは`cap_net_raw+eip`機能を必要とするため、`cap_net_raw+eip`機能を`l2ping_service`に割り当てます。 ```sh sudo setcap 'cap_net_raw+eip' ./build/bluetooth_monitor/l2ping_service ``` -2. `l2ping_service` と `bluetooth_monitor` を実行します。 +2. `l2ping_service` と `bluetooth_monitor` を実行してください。 + ```sh ./build/bluetooth_monitor/l2ping_service ros2 launch bluetooth_monitor bluetooth_monitor.launch.xml ``` -## 周知の制限と問題 +## 制限事項および問題点 なし。 + diff --git a/system/component_state_monitor/README.md b/system/component_state_monitor/README.md index 4e9ea0bc87cb6..ed31781514395 100644 --- a/system/component_state_monitor/README.md +++ b/system/component_state_monitor/README.md @@ -1,3 +1,6 @@ # component_state_monitor -コンポーネントステートモニターは、トピックステートモニターを使用して各コンポーネントのステートを確認します。これは、ADサービスステートモニターとの後方互換性のための実装です。将来的には診断ツリーを使用して置き換えられます。 +component_state_monitorはトピック状態モニタを使用して各コンポーネントの状態を確認します。 +これはAutoware Driver Servicesとの下位互換性のためのimplementationです。 +将来、診断ツリーを使用して置き換えられます。 + diff --git a/system/default_ad_api_helpers/ad_api_adaptors/README.md b/system/default_ad_api_helpers/ad_api_adaptors/README.md index e0e7d812b9317..53c0ea1e7c778 100644 --- a/system/default_ad_api_helpers/ad_api_adaptors/README.md +++ b/system/default_ad_api_helpers/ad_api_adaptors/README.md @@ -2,34 +2,35 @@ ## initial_pose_adaptor -このノードを使用すると、RVizからローカライゼーションAD APIを簡単に使用できます。 -初期姿勢トピックを受信すると、ローカライズの初期化APIを呼び出します。 -このノードはマップ高度適合ライブラリに依存します。 -[詳細はここを参照してください。](../../../map/autoware_map_height_fitter/README.md) +このノードを使用すると、RViz からローカリゼーション AD API を簡単に使用できます。 +初期姿勢のトピックを受信すると、ローカリゼーション初期化 API を呼び出します。 +このノードはマップの高さの調整ライブラリに依存しています。 +[詳細はこちらをご覧ください。](../../../map/autoware_map_height_fitter/README.md) -| インターフェイス | ローカル名 | グローバル名 | 説明 | -| ------------------ | ----------- | ---------------------------- | ------------------------------ | -| サブスクリプション | initialpose | /initialpose | ローカリゼーション初期化の姿勢 | -| クライアント | - | /api/localization/initialize | ローカリゼーション初期化 API | +| Interface | Local Name | Global Name | Description | +|---|---|---|---| +| Subscription | initialpose | /initialpose | 局所化初期化のためのポーズ | +| Client | - | /api/localization/initialize | 局所化初期化 API | ## routing_adaptor -このノードを使用すると、RVizからrouting AD APIを簡単に利用できます。 -ゴールの姿勢トピックを受信すると、ウェイポイントをリセットしてAPIを呼び出します。 -ウェイポイントの姿勢トピックを受信すると、APIを呼び出すためのウェイポイントの末尾に追加されます。 +このノードを使用すると、RVizからRouting AD APIを簡単に利用できます。 +ゴールのポーズに関するトピックを受信すると、ウェイポイントをリセットしてAPIを呼び出します。 +ウェイポイントのポーズに関するトピックを受信すると、APIを呼び出すためにウェイポイントの最後に追加します。 ルートを設定する前に、clear APIが自動的に呼び出されます。 -| Interface | Local Name | Global Name | Description | -| ------------ | ------------------ | ------------------------------------- | -------------------------------------- | -| 購読 | - | /api/routing/state | ルーティング API の状態 | -| 購読 | ~/input/fixed_goal | /planning/mission_planning/goal | 経路のゴール目標値(目標の変更は無効) | -| 購読 | ~/input/rough_goal | /rviz/routing/rough_goal | 経路のゴール目標値(目標の変更を有効) | -| 購読 | ~/input/reroute | /rviz/routing/reroute | 再経路の目標位置 | -| 購読 | ~/input/waypoint | /planning/mission_planning/checkpoint | 経路のウェイポイント位置 | -| クライアント | - | /api/routing/clear_route | ルートクリア API | -| クライアント | - | /api/routing/set_route_points | ルートポイント設定 API | -| クライアント | - | /api/routing/change_route_points | ルートポイント変更 API | +| インターフェース | ローカル名 | グローバル名 | 説明 | +|---|---|---|---| +| サブスクリプション | - | /api/routing/state | ルーティング API の状態 | +| サブスクリプション | ~/input/fixed_goal | /planning/mission_planning/goal | ルートの目標姿勢。ゴールの変更を無効にする | +| サブスクリプション | ~/input/rough_goal | /rviz/routing/rough_goal | ルートの目標姿勢。ゴールの変更を有効にする | +| サブスクリプション | ~/input/reroute | /rviz/routing/reroute | 再ルーティングの目標姿勢 | +| サブスクリプション | ~/input/waypoint | /planning/mission_planning/checkpoint | ルートのウェイポイント姿勢 | +| クライアント | - | /api/routing/clear_route | ルートクリア API | +| クライアント | - | /api/routing/set_route_points | ルートポイントセット API | +| クライアント | - | /api/routing/change_route_points | ルートポイント変更 API | ## パラメーター {{ json_to_markdown("/system/default_ad_api_helpers/ad_api_adaptors/schema/ad_api_adaptors.schema.json") }} + diff --git a/system/default_ad_api_helpers/automatic_pose_initializer/README.md b/system/default_ad_api_helpers/automatic_pose_initializer/README.md index 0f90bcb7574bf..4cb143a0e7db4 100644 --- a/system/default_ad_api_helpers/automatic_pose_initializer/README.md +++ b/system/default_ad_api_helpers/automatic_pose_initializer/README.md @@ -2,10 +2,11 @@ ## automatic_pose_initializer -このノードは、ローカリゼーション初期化状態が初期化されていない場合にローカリゼーション初期化APIを呼び出します。 -APIは、ポーズが指定されていない場合にGNSSポーズを使用するため、GNSSを使用した初期化を自動的に実行できます。 +このノードは、ローカリゼーションの初期状態が「uninitialized(初期化されていない)」の場合にローカリゼーションの初期化APIを呼び出します。 +APIは、基準点が指定されていない場合はGNSSの基準点を使用するため、GNSSを使用した初期化を自動的に実行できます。 + +| インターフェース | ローカル名 | グローバル名 | 説明 | +|---|---|---|---| +| サブスクリプション | - | /api/localization/initialization_state | ローカリゼーション初期化状態 API | +| クライアント | - | /api/localization/initialize | ローカリゼーション初期化 API | -| インターフェース | ローカル名 | グローバル名 | 説明 | -| ------------------ | ---------- | -------------------------------------- | ------------------------------- | -| サブスクリプション | - | /api/localization/initialization_state | ローカリゼーションの初期状態API | -| クライアント | - | /api/localization/initialize | ローカリゼーションの初期化API | diff --git a/system/diagnostic_graph_aggregator/README.md b/system/diagnostic_graph_aggregator/README.md index 37f310dcfff98..f459f91d5a588 100644 --- a/system/diagnostic_graph_aggregator/README.md +++ b/system/diagnostic_graph_aggregator/README.md @@ -2,32 +2,32 @@ ## 概要 -diagnostic_graph_aggregatorノードは診断配列をサブスクライブして、集計した診断グラフをパブリッシュします。 -下の図に示すように、このノードは中間的な機能単位のための追加の診断ステータスを導入します。 +診断グラフ集約ノードは診断配列をサブスクライブし、集約診断グラフをパブリッシュします。 +下の図に示すように、このノードは中間の機能単位に対して追加の診断ステータスを導入します。 ![overview](./doc/overview.drawio.svg) -## 診断グラフの構造 +## 診断グラフ構造 -診断グラフは、実際にはAutowareの各オペレーションモードに対するフォールトツリー解析(FTA)のセットです。 -同じノードのステータスは複数のノードによって参照される可能性があるため、全体的な構造は有向非巡回グラフ(DAG)です。 -診断グラフ内の各ノードは、入力診断を含む特定の機能単位の診断ステータスを表します。 -そのため、これを「ユニット」と定義し、入力診断に対応するユニットを「diagユニット」、その他を「ノードユニット」と呼びます。 +診断グラフは実際には Autoware の各運用モードに対するフォールトツリー解析 (FTA) のセットです。 +同じノードのステータスは複数のノードから参照される可能性があるため、全体的な構造は有向非巡回グラフ (DAG) です。 +診断グラフの各ノードは、入力診断を含め、特定の機能単位の診断ステータスを表します。 +そのためこれを「ユニット」と定義し、入力診断に対応するユニットを「diag ユニット」、その他を「ノード ユニット」と呼びます。 -すべてのユニットには、DiagnosticStatusと同じエラーレベル、ユニットタイプ、ユニットパス(オプション)があります。 -さらに、すべてのdiagユニットには、DiagnosticStatusと同じメッセージ、hardware_id、および値があります。 -ユニットタイプは、ユニットステータスがANDまたはORなどの方法で計算される方法を表します。 -ユニットパスは、ユニットの機能を表す一意の文字列です。 +すべてのユニットには、DiagnosticStatus と同じエラーレベル、ユニットタイプがあり、オプションでユニットパスがあります。 +さらに、すべての diag ユニットには、DiagnosticStatus と同じメッセージ、hardware_id、および値があります。 +ユニットタイプは、AND や OR などのユニットステータスの計算方法を表します。 +ユニットパスは、ユニットの機能を表す任意の一意の文字列です。 -**注意:** この機能は現在開発中です。 -ユニット間の接続にステータスが追加されるケースがあるため、診断グラフは「リンク」もサポートしています。 -たとえば、多くの機能ユニットは、初期化が完了するまでエラーステータスになるのは当然です。 +注記: この機能は現在開発中です。 +診断グラフは「リンク」もサポートしますが、これはユニット間の接続にステータスが追加される場合があるためです。 +たとえば、多くの機能ユニットが初期化が完了するまでエラーステータスになるのは当然です。 -## オペレーションモードの可用性 +## 運用モードの可用性 -MRMでは、このノードは専用のメッセージに最上位の機能単位のステータスをパブリッシュします。 -そのため、診断グラフには次の名前の機能単位が含まれている必要があります。 -この機能はグラフの一般的な性質を損ない、将来的にはプラグインまたは別のノードに変更される可能性があります。 +MRM の場合、このノードは専用メッセージでトップレベルの機能ユニットのステータスをパブリッシュします。 +したがって、診断グラフには次の名前の機能ユニットが含まれている必要があります。 +この機能はグラフの普遍性を損ない、将来はプラグインまたは別のノードに変更される可能性があります。 - /autoware/operation/stop - /autoware/operation/autonomous @@ -39,40 +39,42 @@ MRMでは、このノードは専用のメッセージに最上位の機能単 ## インターフェイス -| インターフェイス種別 | インターフェイス名 | データ型 | 説明 | -| -------------------- | ------------------------------------- | ------------------------------------------------- | ---------------------------- | -| サブスクリプション | `/diagnostics` | `diagnostic_msgs/msg/DiagnosticArray` | 診断入力 | -| パブリッシャー | `/diagnostics_graph/unknowns` | `diagnostic_msgs/msg/DiagnosticArray` | グラフに含まれない診断 | -| パブリッシャー | `/diagnostics_graph/struct` | `tier4_system_msgs/msg/DiagGraphStruct` | 診断グラフ(静的部分) | -| パブリッシャー | `/diagnostics_graph/status` | `tier4_system_msgs/msg/DiagGraphStatus` | 診断グラフ(動的部分) | -| パブリッシャー | `/system/operation_mode/availability` | `tier4_system_msgs/msg/OperationModeAvailability` | オペレーションモードの可用性 | +|- インターフェースのタイプ | インターフェース名 | データタイプ | 説明 | +| ------------------------- | ------------------- | -------------------------------------- | --------------------------------- | +| `subscription` | `/diagnostics` | `diagnostic_msgs/msg/DiagnosticArray` |Diagnostics 入力 | +| `publisher` | `/diagnostics_graph/unknowns` | `diagnostic_msgs/msg/DiagnosticArray` | グラフに含まれない Diagnostics | +| `publisher` | `/diagnostics_graph/struct` | `tier4_system_msgs/msg/DiagGraphStruct` | Diagnostics グラフ (静的な部分) | +| `publisher` | `/diagnostics_graph/status` | `tier4_system_msgs/msg/DiagGraphStatus` | Diagnostics グラフ (動的な部分) | +| `publisher` | `/system/operation_mode/availability` | `tier4_system_msgs/msg/OperationModeAvailability` | 操作モードの可用性 | ## パラメータ -| パラメータ名 | データ型 | 説明 | -| --------------------------------- | -------- | ------------------------------------------ | -| `graph_file` | `string` | コンフィグファイルのパス | -| `rate` | `double` | 集計とトピック公開のレート | -| `input_qos_depth` | `uint` | 入力配列トピックのQoS深度 | -| `graph_qos_depth` | `uint` | 出力グラフトピックのQoS深度 | -| `use_operation_mode_availability` | `bool` | 運転モード利用可能パブリッシャーを使用する | +| パラメータ名 | データ型 | 説明 | +|---|---|---| +| `graph_file` | `string` | 設定ファイルのパス | +| `rate` | `double` | 集約とトピックの公開率 | +| `input_qos_depth` | `uint` | 入力配列トピックのQoS深度 | +| `graph_qos_depth` | `uint` | 出力グラフのQoS深度 | +| `use_operation_mode_availability` | `bool` | 操作モードの可用性パブリッシャーを使用 | ## 例 -これは診断グラフ構成の例です。構成は複数のファイルに分割できます。 +これは診断用グラフ設定の例です。設定は複数のファイルに分けることができます。 - [main.yaml](./example/graph/main.yaml) - [module1.yaml](./example/graph/module1.yaml) - [module2.yaml](./example/graph/module2.yaml) + ```bash ros2 launch diagnostic_graph_aggregator example-main.launch.xml ``` -シミュレーションではハードウェアチェックを無効化することで、グラフを部分的に編集して再利用できます。 +シミュレーションの一部変更を加えることでグラフを再利用できます。たとえば、シミュレーション用のハードウェアチェックを無効にします。 - [edit.yaml](./example/graph/edit.yaml) + ```bash ros2 launch diagnostic_graph_aggregator example-edit.launch.xml ``` @@ -88,3 +90,4 @@ ros2 launch diagnostic_graph_aggregator example-edit.launch.xml - [path](./doc/format/path.md) - [unit](./doc/format/unit.md) - [edit](./doc/format/edit.md) + diff --git a/system/diagnostic_graph_utils/README.md b/system/diagnostic_graph_utils/README.md index 0f546d2640a78..802be56fa3c19 100644 --- a/system/diagnostic_graph_utils/README.md +++ b/system/diagnostic_graph_utils/README.md @@ -1,13 +1,14 @@ -# diagnostic_graph_utils +## Diagnostic Graph Utils -本パッケージは、[diagnostic_graph_aggregator](../diagnostic_graph_aggregator/README.md)が公開する診断グラフに対するユーティリティです。 +このパッケージは、[diagnostic_graph_aggregator](../diagnostic_graph_aggregator/README.md) によって公開される診断グラフ用のユーティリティです。 -## ROSノード +## ROS ノード -- [dump](./doc/node/dump_ja.md) -- [converter](./doc/node/converter_ja.md) +- [dump](./doc/node/dump.md) +- [converter](./doc/node/converter.md) -## C++ライブラリ +## C++ ライブラリ - [DiagGraph](./include/diagnostic_graph_utils/graph.hpp) - [DiagGraphSubscription](./include/diagnostic_graph_utils/subscription.hpp) + diff --git a/system/dummy_diag_publisher/README.md b/system/dummy_diag_publisher/README.md index 8e3c10c930468..bd16b7f623324 100644 --- a/system/dummy_diag_publisher/README.md +++ b/system/dummy_diag_publisher/README.md @@ -2,52 +2,55 @@ ## 目的 -このパッケージは、デバッグや開発用のダミー診断データをアウトプットします。 +このパッケージは、デバッグや開発のためにダミーの診断データを出力します。 ## 入出力 ### 出力 -| 名前 | タイプ | 説明 | -| -------------- | ---------------------------------------- | -------- | -| `/diagnostics` | `diagnostic_msgs::msgs::DiagnosticArray` | 診断出力 | +| 名称 | 型 | 説明 | +| -------------- | ---------------------------------------- | ------------------- | +| `/diagnostics` | `diagnostic_msgs::msgs::DiagnosticArray` | Diagnostics出力 | ## パラメータ ### ノードパラメータ -パラメータ`DIAGNOSTIC_NAME`は、パラメータYAMLファイルに存在する名前でなければなりません。`status`パラメータがコマンドラインから指定された場合、`is_active`パラメータは自動的に`true`に設定されます。 +`DIAGNOSTIC_NAME` パラメータには、パラメータ YAML ファイルに存在する名前を設定する必要があります。コマンドラインから `status` パラメータが与えられた場合、自動的に `is_active` パラメータは `true` に設定されます。 -| 名称 | タイプ | 既定値 | 説明 | 再構成可能 | -| --------------------------- | ------ | ------ | -------------------------------------------- | ---------- | -| `update_rate` | int | `10` | タイマーコールバックの周期 [Hz] | false | -| `DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制的に更新するかどうか | true | -| `DIAGNOSTIC_NAME.status` | string | `"OK"` | ダミー診断パブリッシャーによる診断ステータス | true | +| 名 | 型 | 初期値 | 説明 | 設定変更可能 | +| --------------------------- | ------ | ------------- | --------------------------------------- | -------------- | +| `update_rate` | int | `10` | タイマーコールバック周期 [Hz] | false | +| `DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制更新するかどうか | true | +| `DIAGNOSTIC_NAME.status` | string | `"OK"` | Dummy Diagnostics Publisherによって設定されるDiagステータス | true | -### dummy_diag_publisher の YAML フォーマット +### YAML 形式(dummy_diag_publisher) -値が `default` の場合、既定値が設定されます。 +値が `default` の場合は、既定値が設定されます。 -| キー | タイプ | デフォルト値 | 説明 | -| ------------------------------------------ | ------ | ------------ | -------------------------------------------------------- | -| `required_diags.DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制アップデートするか否か | -| `required_diags.DIAGNOSTIC_NAME.status` | string | `"OK"` | ダミー診断パブリッシャーによって設定された診断ステータス | +| キー | タイプ | 既定値 | 説明 | +| ------------------------------------------ | ------ | --------- | ---------------------------------------- | +| `required_diags.DIAGNOSTIC_NAME.is_active` | bool | `true` | 強制更新するかどうか | +| `required_diags.DIAGNOSTIC_NAME.status` | string | `"OK"` | ダミーの診断パブリッシャーによって設定される診断ステータス | -## 想定事項/既知の制約事項 +## 想定事項/既知の制限事項 -まだありません。 +TBD. ## 使用方法 -### 起動 +### launch + ```sh ros2 launch dummy_diag_publisher dummy_diag_publisher.launch.xml ``` -### 再構成 +### 再設定 + ```sh ros2 param set /dummy_diag_publisher velodyne_connection.status "Warn" ros2 param set /dummy_diag_publisher velodyne_connection.is_active true ``` + diff --git a/system/dummy_infrastructure/README.md b/system/dummy_infrastructure/README.md index 4ee4765f17b13..db797d00b26d9 100644 --- a/system/dummy_infrastructure/README.md +++ b/system/dummy_infrastructure/README.md @@ -1,9 +1,10 @@ # dummy_infrastructure -こちらは、インフラストラクチャ通信用のデバッグノードです。 +インフラストラクチャとの通信をデバッグするためのノードです。 ## 使用方法 + ```sh ros2 launch dummy_infrastructure dummy_infrastructure.launch.xml ros2 run rqt_reconfigure rqt_reconfigure @@ -13,29 +14,30 @@ ros2 run rqt_reconfigure rqt_reconfigure ### 入力 -| 名称 | 種別 | 説明 | -| ----------------------- | ------------------------------------------------- | ------------------- | -| `~/input/command_array` | `tier4_v2x_msgs::msg::InfrastructureCommandArray` | V2Xインフラコマンド | +| 名前 | タイプ | 説明 | +| ------------------------- | ---------------------------------------------------- | ------------------------------------ | +| `~/input/command_array` | `tier4_v2x_msgs::msg::InfrastructureCommandArray` | インフラストラクチャのコマンド | ### 出力 -| 名前 | タイプ | 説明 | -| ---------------------- | ---------------------------------------------------- | ---------------------------------- | -| `~/output/state_array` | `tier4_v2x_msgs::msg::VirtualTrafficLightStateArray` | バーチャルトラフィックライトアレイ | +| Name | Type | Description | +| -------------------------------------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `~/output/state_array` | `tier4_v2x_msgs::msg::VirtualTrafficLightStateArray` | 仮想信号機アレイ | + +## パラメータ -## パラメーター +### ノードパラメータ -### ノードパラメーター +| 名前 | 型 | デフォルト値 | 説明 | +| ------------------- | ------ | ------------- | ------------------------------------------------- | +| `update_rate` | double | `10.0` | タイマーコールバック周期 [Hz] | +| `use_first_command` | bool | `true` | 計器 ID を考慮 | +| `use_command_state` | bool | `false` | コマンド状態を考慮 | +| `instrument_id` | string | `` | コマンド ID として使用 | +| `approval` | bool | `false` | 承認フィールドを ROS パラメータに設定 | +| `is_finalized` | bool | `false` | finalization が完了していない場合、`stop_line` で停止 | -| 名称 | 種別 | デフォルト値 | 説明 | -| ------------------- | ------ | ------------ | --------------------------------------------------------- | -| `update_rate` | double | `10.0` | タイマーコールバック周期 [Hz] | -| `use_first_command` | bool | `true` | インスト読み取り ID を考慮するかどうするか | -| `use_command_state` | bool | `false` | コマンドの状態を考慮するかどうするか | -| `instrument_id` | string | `` | コマンド ID として使用 | -| `approval` | bool | `false` | `approval` フィールドを ROS パラメータに設定する | -| `is_finalized` | bool | `false` | `finalization` が完了していない場合、一時停止線で停止する | +## 前提 / 既知の限界 -## 仮定 / 既知の限界 +未定 -未定です。 diff --git a/system/duplicated_node_checker/README.md b/system/duplicated_node_checker/README.md index e7c2adfedfc42..acf539c2f680e 100644 --- a/system/duplicated_node_checker/README.md +++ b/system/duplicated_node_checker/README.md @@ -2,36 +2,38 @@ ## 目的 -このノードは ROS 2 環境をモニタリングし、環境内のノード名の重複を検出します。 -結果は診断として公開されます。 +このノードはROS 2環境を監視し、環境内のノード名が重複しているのを検出します。 +結果は診断メッセージとしてパブリッシュされます。 + +### スタンドアロンでの起動 -### スタンドアロン起動 ```bash ros2 launch duplicated_node_checker duplicated_node_checker.launch.xml ``` -## インナーワーキング / アルゴリズム +## 内部動作/アルゴリズム -トピックステータスとその診断ステータスの対応は次のとおりです。 +トピックステータスの種類とそれに対応する診断ステータスを次に示します。 -| **重複ステータス** | **診断ステータス** | **説明** | -| ------------------ | ------------------ | -------------------- | -| `OK` | OK | 重複は検出されません | -| `重複検出` | エラー | 重複が検出されました | +| 複製状況 | 診断状況 | 説明 | +|---|---|---| +| `OK` | OK | 複製は検出されません | +| `複製が検出されました` | ERROR | 複製が検出されました | ## 入出力 ### 出力 -| 名称 | 型 | 説明 | -| -------------- | --------------------------------- | -------- | -| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断出力 | +| 名称 | 型 | 説明 | +| -------------- | ------------------------------------- | ---------------- | +| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断結果出力 | -## パラメーター +## パラメータ {{ json_to_markdown("system/duplicated_node_checker/schema/duplicated_node_checker.schema.json") }} -## 想定事項 / 制限事項 +## 想定事項 / 既知の限界事項 + +TBD. -未定 diff --git a/system/mrm_comfortable_stop_operator/README.md b/system/mrm_comfortable_stop_operator/README.md index 911b0888a6672..15845f4436de1 100644 --- a/system/mrm_comfortable_stop_operator/README.md +++ b/system/mrm_comfortable_stop_operator/README.md @@ -2,110 +2,75 @@ ## 目的 -MRM comfortable stop operatorは、MRM comfortable stopコマンドに従って快適な停止コマンドを生成するノードです。 +MRM comfortable stop operatorは、comfortable stop MRM注文に従って快適な停止コマンドを生成するノードです。 -## 内部動作 / アルゴリズム +## 仕組み / アルゴリズム ## 入出力 ### 入力 -| 名称 | 型 | 説明 | -| -------------------------------------- | ------------------------------------ | --------------- | -| `~/input/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM実行オーダー | +| お名前 | 型 | 説明 | +| ------------------------------------ | --------------------------------- | ---------------------- | +| `~/input/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM 実行命令 | ### 出力 -**自己位置推定** +Autoware 自律運転ソフトウェアの Planning モジュールは、SLAM と地図データを使用して、世界を理解し、自律走行に必要な経路計画を行います。 -自己位置推定モジュールは、センサからの測定値に基づいて、車両の現在の位置と姿勢を推定します。このモジュールは、以下を含むさまざまなセンサのデータを統合します。 +#### フローチャート -- GPS -- IMU -- 車輪速センサ -- カメラ +``` +Planning +├── Local Planning +│  ├── Trajectory Generation +│  └── Path Planning +├── Motion Planning +│  └── Behavior Planning +├── Dynamic Planning +│  └── Obstacle Avoidance +└── Global Planning +   └── Route Planning +``` -統合されたデータは、状態推定器を使用して、車両の現在の状態を推定するために使用されます。 +#### Planning モジュールの処理 -**経路計画** +1. **SLAM と地図データの融合:** Planning モジュールは、SLAM と地図データの両方を融合し、世界を理解します。このデータにより、Planning モジュールは自車位置を把握し、周囲の環境を認識することができます。 +2. **経路計画:** Planning モジュールは、経路計画を行います。これには、目的地への最適な経路を見つけ、経路上の障害物を回避することが含まれます。 +3. **動作計画:** Planning モジュールは、動作計画を行います。これには、自車の速度、加速度、操舵角を決定することが含まれます。 +4. **障害物回避:** Planning モジュールは、障害物回避を行います。これには、自車が障害物と衝突することを回避する経路を決定することが含まれます。 +5. **経路生成:** Planning モジュールは、経路生成を行います。これには、自車が目的地までたどる必要がある一連の点を作成することが含まれます。 +6. **データの出力:** Planning モジュールは、自車の制御系に経路と動作の情報を提供します。 -経路計画モジュールは、起点と終点の間の経路を計画します。このモジュールは、以下を含むさまざまな要因を考慮します。 +#### 追加情報 -- 交通規則 -- 地図データ -- 障害物 +* Planning モジュールは、'post resampling` 後のSLAM データを使用します。 +* Planning モジュールは、Autoware の他のモジュールと通信します。 +* Planning モジュールは、ROS によって実装されています。 -計画された経路は、経路追従モジュールに渡されます。 +| 名前 | タイプ | 説明 | +| ---------------------------------------- | --------------------------------------------------------- | ----------------------------------------- | +| `~/output/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRMの実行状況 | +| `~/output/velocity_limit` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | +| `~/output/velocity_limit/clear` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | -**経路追従** +## パラメータ -経路追従モジュールは、計画された経路に従って車両を制御します。このモジュールは、以下を使用して、車両のステアリングとアクセル/ブレーキを制御します。 +### ノードパラメータ -- 自車位置 -- 目標経路 -- センサからの測定値 - -**障害物回避** - -障害物回避モジュールは、車両の周囲の障害物を検出し、回避します。このモジュールは、以下を使用して、障害物を検出します。 - -- カメラ -- レーダー -- 超音波センサ - -障害物が検出されると、回避モジュールは、障害物を回避するための回避策を生成します。 - -**安全** - -安全モジュールは、車両の安全な動作を確保します。このモジュールは、以下を行います。 - -- モニタリングシステムの健全性 -- 障害物の存在の検出 -- 衝突の回避 - -**Autowareのアーキテクチャ** - -Autowareのアーキテクチャは、以下を含むモジュール構造に基づいています。 - -- Perception: センサデータの処理と物体認識 -- Planning: 経路の計画と経路追従 -- Control: 車両の制御 -- Safety: 安全の確保 - -これらのモジュールは、モジュール間インターフェースを使用して相互に通信します。 - -**Autowareの機能** - -Autowareは、以下を含むさまざまな機能を提供します。 - -- 車線逸脱防止 -- 衝突警告 -- 自動緊急ブレーキ -- アダプティブクルーズコントロール -- 自動運転 - -| 名前 | 型 | 説明 | -| -------------------------------------- | ----------------------------------------------------- | ---------------------- | -| `~/output/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM実行状態 | -| `~/output/velocity_limit` | `tier4_planning_msgs::msg::VelocityLimit` | 速度制限コマンド | -| `~/output/velocity_limit/clear` | `tier4_planning_msgs::msg::VelocityLimitClearCommand` | 速度制限クリアコマンド | - -## パラメーター - -### ノードパラメーター - -| 名称 | 型 | デフォルト値 | 説明 | -| ----------- | --- | ------------ | ----------------------------- | -| update_rate | int | `10` | タイマーコールバック頻度 [Hz] | +| 名称 | 種類 | デフォルト値 | 説明 | +| ----------- | ---- | ------------- | ----------------------------- | +| update_rate | int | `10` | タイマーコールバック頻度 [Hz] | ### コアパラメータ -| 名前 | 型 | デフォルト値 | 説明 | -| ---------------- | ------ | ------------ | -------------------------------------- | -| min_acceleration | double | `-1.0` | 快適な停止のための最低加速度 [m/s^2] | -| max_jerk | double | `0.3` | 快適な停止のための最大ジャーク [m/s^3] | -| min_jerk | double | `-0.3` | 快適な停止のための最小ジャーク [m/s^3] | +| 名前 | タイプ | デフォルト値 | 説明 | +|---|---|---|---| +| min_acceleration | double | `-1.0` | 快適な停止のための最小加速度 [m/s^2] | +| max_jerk | double | `0.3` | 快適な停止のための最大ジャーク [m/s^3] | +| min_jerk | double | `-0.3` | 快適な停止のための最小ジャーク [m/s^3] | -## 想定事項/既知の制限 +## 前提条件/既知の制限 TBD. + diff --git a/system/mrm_emergency_stop_operator/README.md b/system/mrm_emergency_stop_operator/README.md index 12eec956ca18e..a31891a48c136 100644 --- a/system/mrm_emergency_stop_operator/README.md +++ b/system/mrm_emergency_stop_operator/README.md @@ -1,75 +1,79 @@ -# mrm_emergency_stop_operator +## mrm_emergency_stop_operator ## 目的 -MRM emergency stop operatorは、緊急停止MRM順序に基づいて緊急停止コマンドを生成するノードです。 +MRM emergency stop operatorは、MRMの緊急停止命令に従って緊急停止コマンドを生成するノードです。 -## 内部動作/アルゴリズム +## 内部機構/アルゴリズム -## 入出力 +## 入力/出力 ### 入力 -| 名前 | タイプ | 説明 | -| ------------------------------------ | ------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| `~/input/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM 実行命令 | -| `~/input/control/control_cmd` | `autoware_control_msgs::msg::Control` | 制御コンポーネントの最後のノードから出力される制御コマンド。緊急停止コマンドの初期値に使用されます。 | +| 名前 | タイプ | 説明 | +|---|---|---| +| `~/input/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM 実行順序 | +| `~/input/control/control_cmd` | `autoware_control_msgs::msg::Control` | 制御コンポーネントの最後のノードから出力される制御コマンド。緊急停止コマンドの初期値として使用されます。 | ### 出力 -このドキュメントでは、AutowareのPlanningコンポーネントの技術的詳細について説明します。 +**自動運転ソフトウェア** -#### Planning Framework +**概要** -Planningコンポーネントは、次のようなサブコンポーネントで構成されています。 +本ドキュメントでは、Autowareのアーキテクチャの概要と、そのPlanningコンポーネントの設計について説明します。 -- **Motion Generator:** 自車位置と目標速度に基づいて、滑らかな軌跡を生成します。 -- **Path Planning:** 環境の障害物や道路構造を考慮しながら、軌跡を最適化します。 -- **Trajectory Planning:** 自車位置、目標速度、障害物に対して安全で快適な軌跡を作成します。 +**アーキテクチャ** -#### Dynamic Obstacle Avoidance +Autowareのアーキテクチャは、次の主要コンポーネントで構成されています。 -このモジュールは、周囲の動的障害物(車両、歩行者など)を検出し、衝突回避を計画します。以下のような戦略を使用します。 +* **Perception(知覚)コンポーネント:** センサーデータから周辺環境を認識します。 +* **Planning(計画)コンポーネント:** 自車位置に基づいて安全かつ効率的な経路を計画します。 +* **Control(制御)コンポーネント:** 計画された経路に従って車両を制御します。 -- **Velocity Smoothing:** 障害物との衝突を回避するために、速度逸脱量を最小限に抑えます。 -- **Acceleration Smoothing:** 障害物との衝突を回避するために、加速度逸脱量を最小限に抑えます。 -- **Lateral Avoidance:** 障害物との衝突を回避するために、横方向の回避動作を計画します。 +**Planningコンポーネント** -#### Static Obstacle Handling +Planningコンポーネントは、次のサブコンポーネントで構成されています。 -このモジュールは、静的障害物(道路標識、ガードレールなど)を考慮して、軌跡を安全かつ効率的に計画します。以下のアルゴリズムを使用します: +* **Global Planning(グローバル計画)モジュール:** グローバル経路を計画します。 +* **Local Planning(ローカル計画)モジュール:** ローカル経路を計画し、障害物を回避します。 +* **Motion Planning(運動計画)モジュール:** 安全かつ快適な車両の運動を計画します。 -- **'Post Resampling':** 障害物周辺の軌跡を再サンプリングして、より正確な衝突予測を行います。 -- **Rejection Sampling:** 障害物との衝突の可能性が最も低い軌跡をランダムに選択します。 +**グローバル計画** -#### その他の機能 +グローバル計画モジュールは、**'post resampling'**アルゴリズムを使用して、事前定義されたマップからグローバル経路を生成します。 -Planningコンポーネントには、以下を含むその他の機能もあります: +**ローカル計画** -- **Goal Planning:** 目的地に到達するための高レベルの軌跡を計画します。 -- **Velocity Planning:** 安全で快適な速度プロファイルを決定します。 -- **Safety Checks:** 軌跡が安全で、車両の制限内であることを確認します。 +ローカル計画モジュールは、**'D*LITE'**アルゴリズムを使用して、リアルタイムセンサーデータに基づいてローカル経路を計画します。 -| 名称 | タイプ | 説明 | -| ----------------------------------------- | ------------------------------------------- | ------------------ | -| `~/output/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM 実行ステータス | -| `~/output/mrm/emergency_stop/control_cmd` | `autoware_control_msgs::msg::Control` | 緊急停止コマンド | +**運動計画** + +運動計画モジュールは、**'Covariance Matrix Adaptation Evolution Strategy (CMA-ES)'**アルゴリズムを使用して、車両の運動を計画します。これにより、車両の安定性と快適性が向上します。 + +| 名称 | 型 | 説明 | +| ---------------------------------------- | -------------------------------------------- | ----------------------- | +| `~/output/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM実行状態 | +| `~/output/mrm/emergency_stop/control_cmd` | `autoware_control_msgs::msg::Control` | 緊急停止コマンド | ## パラメータ -### ノードパラメータ +### ノードのパラメータ -| 名称 | 種別 | デフォルト値 | 説明 | -| ----------- | ---- | ------------ | ------------------------------- | -| update_rate | int | `30` | タイマーコールバック周波数 [Hz] | +| Name | Type | Default value | Explanation | +| ----------- | ---- | ------------- | ----------------------------- | +| update_rate | int | `30` | Timer callback frequency [Hz] | -### コアパラメーター +### パラメータのコア -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------------- | ------ | ------------ | -------------------------------- | -| target_acceleration | double | `-2.5` | 緊急停止時の目標加速度 [m/s^2] | -| target_jerk | double | `-1.5` | 緊急停止時の目標ジャーク [m/s^3] | +--- -## 前提条件/既知の制限 +| 名前 | タイプ | 初期値 | 説明 | +| ------------------- | ------ | ------------- | -------------------------------------------------- | +| target_acceleration | double | `-2.5` | 緊急停止時の目標加速度 [m/s^2] | +| target_jerk | double | `-1.5` | 緊急停止時の目標ジャーク [m/s^3] | + +## 前提条件 / 既知の制限事項 未定。 + diff --git a/system/mrm_handler/README.md b/system/mrm_handler/README.md index e45554e0beb62..2b55f1f07e5ad 100644 --- a/system/mrm_handler/README.md +++ b/system/mrm_handler/README.md @@ -1,10 +1,10 @@ -# mrm_handler +## mrm_handler ## 目的 -MRM Handlerは、OperationModeAvailabilityに含まれるシステム障害状態から適切なMRMを選択するノードです。 +MRMハンドラは、OperationModeAvailabilityに格納されているシステム障害状態から適切なMRMを選択するノードです。 -## 内部動作 / アルゴリズム +## 内部の仕組み/アルゴリズム ### 状態遷移 @@ -14,75 +14,69 @@ MRM Handlerは、OperationModeAvailabilityに含まれるシステム障害状 ### 入力 -| 名称 | 種別 | 説明 | -| -------------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------- | -| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 車両が停止しているかどうか判断するために使用 | -| `/system/operation_mode/availability` | `tier4_system_msgs::msg::OperationModeAvailability` | operationModeAvailabilityに示されている適切なMRMをシステム利用可能なMRM動作から選択するために使用 | -| `/vehicle/status/control_mode` | `autoware_vehicle_msgs::msg::ControlModeReport` | 車両モード(自律運転または手動運転)をチェックするために使用 | -| `/system/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM緊急停止動作が利用可能かどうかをチェックするために使用 | -| `/system/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM快適停止動作が利用可能かどうかをチェックするために使用 | -| `/system/mrm/pull_over_manager/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRMプルオーバー動作が利用可能かどうかをチェックするために使用 | -| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | 現在の動作モードがAUTOまたはSTOPであるかどうかを確認するために使用 | +| 名前 | タイプ | 説明 | +| -------------------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------------------- | +| `/localization/kinematic_state` | `nav_msgs::msg::Odometry` | 車両が停止しているかどうかを判断するために使用されます。 | +| `/system/operation_mode/availability` | `tier4_system_msgs::msg::OperationModeAvailability` | operationModeAvailabilityに含まれるシステムのMRM動作から適切なMRMを選択します。 | +| `/vehicle/status/control_mode` | `autoware_vehicle_msgs::msg::ControlModeReport` | 車両モード(自動運転または手動運転)を確認するために使用されます。 | +| `/system/mrm/emergency_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM緊急停止動作が利用可能かどうかを確認するために使用されます。 | +| `/system/mrm/comfortable_stop/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM快適停止動作が利用可能かどうかを確認するために使用されます。 | +| `/system/mrm/pull_over_manager/status` | `tier4_system_msgs::msg::MrmBehaviorStatus` | MRM路肩停止動作が利用可能かどうかを確認するために使用されます。 | +| `/api/operation_mode/state` | `autoware_adapi_v1_msgs::msg::OperationModeState` | 現在の動作モードが自動運転または停止かを確認するために使用されます。 | -### 出力 +## 自動運転ソフトウェア -**自己位置推定(Self-Localization)** +### 目次 -自己位置推定は、'post resampling`を実行する前に、周囲の地図に対して車両の現在の位置('current pose`)を推定します。これにより、正確な自己位置を確保し、周囲の障害物を適切に把握できます。 +- [プランニング](#プランニング) +- [検出](#検出) +- [軌道制御](#軌道制御) -**パスプランニング(Path Planning)** +### プランニング -パスプランニングでは、現時点での自車位置から目標地点まで移動する最適なパスを生成します。障害物や交通状況などの情報を考慮して、安全で効率的な経路を特定します。 +プランニングは、自律走行車の経路を計画します。 -**モーションプランニング(Motion Planning)** +* **ナビゲーション**:地図情報を使用して、自律走行車の経路を計画します。 +* **ローカルパスプランニング**:周囲環境のセンサーデータを使用して、自律走行車の経路を微調整します。 +* **モーションプランニング**:衝突回避や快適性を考慮して、自律走行車の経路を最適化します。 -モーションプランニングは、生成されたパスに従って、車両の運動を制御します。加速度、速度などの車両の動作を決定し、障害物との衝突を回避する安全な動作を確保します。 +### 検出 -**障害物検出(Object Detection)** +検出は、自律走行車の周囲環境を認識します。 -障害物検出は、周囲の環境を監視し、車両の周囲にある静止または移動中の障害物を特定します。これにより、衝突の回避と安全な動作を確保できます。 +* **カメラ**:画像データを取得して、物体を検出します。 +* **レーダー**:電磁波を使用して、物体の位置と速度を測定します。 +* **LiDAR**:レーザーを使用して、周囲環境の詳細な3D地図を作成します。 -**センサー融合(Sensor Fusion)** +### 軌道制御 -センサー融合は、レーダー、LiDAR、カメラなどの複数のセンサーからのデータを統合し、より正確で完全な周囲環境の認識を行います。これにより、車両が周囲の状況をより適切に把握できます。 +軌道制御は、自律走行車の動きを制御します。 -**システム統合(System Integration)** +* **ステアリング**:自律走行車のステアリングを制御します。 +* **ブレーキ**:自律走行車のブレーキを制御します。 +* **アクセル**:自律走行車のアクセルを制御します。 -システム統合は、自己位置推定、パスプランニング、モーションプランニング、障害物検出、センサー融合などのさまざまなコンポーネントを組み合わせ、統一された自律走行システムを作成します。この統合により、安全で効率的な自律走行が可能になります。 +### 付録 -**Autoware** +- Autowareのチュートリアル +- `post resampling`処理 +- 自車位置の更新 +- 検出モジュールの構成 -Autowareは、オープンソースの自律走行ソフトウェアプラットフォームであり、自己位置推定、パスプランニング、モーションプランニング、障害物検出などのコンポーネントを含む、自律走行に必要な機能を包括的に提供しています。 - -**パフォーマンス評価** - -パフォーマンス評価では、自律走行システムの安全性、効率性、信頼性を測定します。これには、車両の動作、障害物の回避、交通状況への適応などの指標が含まれます。 - -**セーフティ(Safety)** - -安全は自律走行システムの最優先事項です。システムは障害物の検出、衝突の回避、安全な動作を確保するように設計されています。 - -**効率性(Efficiency)** - -効率性は、自律走行システムが目的地に安全かつ迅速に到着するために重要です。システムは、最適なパスを生成し、適切な速度を決定し、エネルギー消費を最小化するように設計されています。 - -**信頼性(Reliability)** - -信頼性は、自律走行システムがさまざまな状況下で予測可能かつ一貫して動作するために重要です。システムは、センサーの故障、天候の変化、交通状況の変化に耐えられるように設計されています。 - -| 名前 | 種類 | 説明 | -| --------------------------------------- | ------------------------------------------------- | ------------------------------------------------------- | -| `/system/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | MRMの適切な実行に必要な(ギアコマンドを送信) | -| `/system/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | MRMの適切な実行に必要な(ターンシグナルコマンドを送信) | -| `/system/fail_safe/mrm_state` | `autoware_adapi_v1_msgs::msg::MrmState` | MRM実行状態と選択されたMRM挙動を通知 | -| `/system/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM緊急停止用実行命令 | -| `/system/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM快適停止用実行命令 | -| `/system/mrm/pull_over_manager/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM停車用実行命令 | +| 名稱 | 型 | 説明 | +| --------------------------------------- | ------------------------------------------------- | ----------------------------------------------------- | +| `/system/emergency/gear_cmd` | `autoware_vehicle_msgs::msg::GearCommand` | 適切なMRMを実行するために必要(ギアコマンドを送信) | +| `/system/emergency/hazard_lights_cmd` | `autoware_vehicle_msgs::msg::HazardLightsCommand` | 適切なMRMを実行するために必要(ターンシグナルコマンドを送信) | +| `/system/fail_safe/mrm_state` | `autoware_adapi_v1_msgs::msg::MrmState` | MRM実行状態と選択されたMRM動作の通知 | +| `/system/mrm/emergency_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM緊急停止の実行命令 | +| `/system/mrm/comfortable_stop/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM快適停止の実行命令 | +| `/system/mrm/pull_over_manager/operate` | `tier4_system_msgs::srv::OperateMrm` | MRM寄道の執行命令 | ## パラメータ {{ json_to_markdown("system/mrm_handler/schema/mrm_handler.schema.json") }} -## 前提条件 / 制限事項 +## 前提条件 / 既知の限界 + +未定。 -未定 diff --git a/system/system_diagnostic_monitor/README.md b/system/system_diagnostic_monitor/README.md index b83ad1f0991b8..2a1fc94146feb 100644 --- a/system/system_diagnostic_monitor/README.md +++ b/system/system_diagnostic_monitor/README.md @@ -1,16 +1,17 @@ -# system_diagnostic_monitor +## システム診断モニター -このパッケージには、システム統合のための診断グラフの既定の設定とスクリプトが含まれています。 +このパッケージには、システム統合用の診断グラフとスクリプトのデフォルト設定が含まれています。 -## 設定 +## コンフィグ -| 名称 | 説明 | -| ------------------------------------------------- | ------------------------------------------------------ | -| [autoware-main.yaml](./config/autoware-main.yaml) | Autowareの基本モニタリングのための診断グラフ。 | -| [autoware-psim.yaml](./config/autoware-psim.yaml) | シミュレーター用に一部ユニットを無効にした診断グラフ。 | +| 名前 | 説明 | +| -------------------------------------------------- | ----------------------------------------------------------- | +| [autoware-main.yaml](./config/autoware-main.yaml) | Autowareの基本的なモニタリング用の診断グラフ。 | +| [autoware-psim.yaml](./config/autoware-psim.yaml) | シミュレーターでは一部ユニットを無効化した診断グラフ。 | ## スクリプト -| 名称 | 説明 | -| ---------------------------------------------------------------------- | ------------------------------------ | -| [component_state_diagnostics](./script/component_state_diagnostics.py) | コンポーネント状態を変換するノード。 | +| 名前 | 説明 | +| ---------------------------------------------------------------------- | --------------------------------------------------- | +| [component_state_diagnostics](./script/component_state_diagnostics.py) | コンポーネントの状態を診断に変換するノード。 | + diff --git a/system/system_monitor/README.md b/system/system_monitor/README.md index 82322f197c99c..9df8b86af634b 100644 --- a/system/system_monitor/README.md +++ b/system/system_monitor/README.md @@ -1,34 +1,35 @@ -# Autoware向けシステムモニタ +## Autoware向けシステムモニター -**Autowareのシステムモニタ機能のさらなる向上。** +**Autowareのシステムモニター機能のさらなる向上** -## 概要 +## 説明 -このパッケージは、システムのモニタリング用として次のノードを提供します。 +このパッケージは、システムのモニタリング用として以下のノードを提供します。 -- CPUモニタ -- HDDモニタ -- メモリモニタ -- ネットワークモニタ -- NTPモニタ -- プロセスモニタ -- GPUモニタ -- 電圧モニタ +- CPUモニター +- HDDモニター +- メモリーモニター +- ネットワークモニター +- NTPモニター +- プロセスマニター +- GPUモニター +- 電圧モニター -### サポート対象アーキテクチャ +### サポートされるアーキテクチャ - x86_64 - arm64v8/aarch64 ### 動作確認済みプラットフォーム -- PCシステムインテルCore i7 +- PCシステムintel core i7 - NVIDIA Jetson AGX Xavier -- Raspberry Pi4モデルB +- Raspberry Pi4 Model B ## 使用方法 -他のパッケージと同様に、colcon buildとlaunchを使用します。 +他のパッケージと同様に、colconを使用してビルドと起動を行います。 + ```sh colcon build @@ -36,100 +37,105 @@ source install/setup.bash ros2 launch system_monitor system_monitor.launch.xml ``` -プラットフォームによってCPUおよびGPU監視方法は異なります。
-CMakeは自動的にビルド環境に応じたビルド対象のソースを選択します。
-このパッケージをインテルプラットフォームでビルドする場合、インテルプラットフォームで動作するCPUモニターとGPUモニターがビルドされます。 +CPUおよびGPUのモニタリング方法は、プラットフォームによって異なります。
+CMakeは自動的に構築環境に基づいて構築するソースを選択します。
+このパッケージをIntelプラットフォームで構築する場合、Intelプラットフォーム上で実行されるCPUモニターとGPUモニターが構築されます。 -## システムモニターによって公開されるROSトピック +## システムモニタが公開するROSトピック 各トピックは1分間隔で公開されます。 -- [CPUモニター](docs/topics_cpu_monitor.md) -- [HDDモニター](docs/topics_hdd_monitor.md) -- [Memモニター](docs/topics_mem_monitor.md) -- [Netモニター](docs/topics_net_monitor.md) -- [NTPモニター](docs/topics_ntp_monitor.md) -- [Processモニター](docs/topics_process_monitor.md) -- [GPUモニター](docs/topics_gpu_monitor.md) -- [電圧モニター](docs/topics_voltage_monitor.md) - -[使用状況] ✓:サポート、-:サポートなし - -| ノード | メッセージ | Intel | arm64(tegra) | arm64(raspi) | メモ | -| ------------------ | ------------------------- | :---: | :----------: | :----------: | ------------------------------------------------------------------------------------------------------------------ | -| CPUモニター | CPU温度 | ✓ | ✓ | ✓ | | -| | CPU使用率 | ✓ | ✓ | ✓ | | -| | CPU負荷平均 | ✓ | ✓ | ✓ | | -| | CPUサーマルスロットリング | ✓ | - | ✓ | | -| | CPU周波数 | ✓ | ✓ | ✓ | 周波数の通知のみで、通常エラーは生成されません。 | -| HDDモニター | HDD温度 | ✓ | ✓ | ✓ | | -| | HDD通電時間 | ✓ | ✓ | ✓ | | -| | HDD総書き込みデータ量 | ✓ | ✓ | ✓ | | -| | HDD復旧エラー | ✓ | ✓ | ✓ | | -| | HDD使用率 | ✓ | ✓ | ✓ | | -| | HDDリードデータレート | ✓ | ✓ | ✓ | | -| | HDDライトデータレート | ✓ | ✓ | ✓ | | -| | HDDリードIOPS | ✓ | ✓ | ✓ | | -| | HDDライトIOPS | ✓ | ✓ | ✓ | | -| | HDD接続 | ✓ | ✓ | ✓ | | -| メモリモニター | メモリ使用率 | ✓ | ✓ | ✓ | | -| ネットワークモニタ | ネットワーク接続 | ✓ | ✓ | ✓ | | -| | ネットワーク使用率 | ✓ | ✓ | ✓ | 使用率の通知のみで、通常エラーは生成されません。 | -| | ネットワークCRCエラー | ✓ | ✓ | ✓ | 周期内のCRCエラー数が閾値に達すると警告が発生します。発生するCRCエラー数は、`ip`コマンドで確認できる値と同じです。 | -| | IPパケット再構成失敗 | ✓ | ✓ | ✓ | | -| NTPモニター | NTPオフセット | ✓ | ✓ | ✓ | | -| プロセスモニター | タスクの概要 | ✓ | ✓ | ✓ | | -| | 高負荷プロセス[0-9] | ✓ | ✓ | ✓ | | -| | 高メモリプロセス[0-9] | ✓ | ✓ | ✓ | | -| GPUモニター | GPU温度 | ✓ | ✓ | - | | -| | GPU使用率 | ✓ | ✓ | - | | -| | GPUメモリ使用率 | ✓ | - | - | | -| | GPUサーマルスロットリング | ✓ | - | - | | -| | GPU周波数 | ✓ | ✓ | - | インテルプラットフォームでは、現在のGPUクロックがGPUでサポートされているかどうかを監視します。 | -| 電圧モニター | CMOSバッテリーステータス | ✓ | - | - | RTCとBIOSのバッテリーの健全性 | +- [CPU Monitor](docs/topics_cpu_monitor.md) +- [HDD Monitor](docs/topics_hdd_monitor.md) +- [Mem Monitor](docs/topics_mem_monitor.md) +- [Net Monitor](docs/topics_net_monitor.md) +- [NTP Monitor](docs/topics_ntp_monitor.md) +- [Process Monitor](docs/topics_process_monitor.md) +- [GPU Monitor](docs/topics_gpu_monitor.md) +- [Voltage Monitor](docs/topics_voltage_monitor.md) + +[使用] ✓:サポートされ、-:サポートされていない + +| ノード | メッセージ | Intel | arm64(tegra) | arm64(raspi) | 備考 | +|---|---|---|---|---|---| +| CPU Monitor | CPU Temperature | ✓ | ✓ | ✓ | | +| | CPU Usage | ✓ | ✓ | ✓ | | +| | CPU Load Average | ✓ | ✓ | ✓ | | +| | CPU Thermal Throttling | ✓ | - | ✓ | | +| | CPU Frequency | ✓ | ✓ | ✓ | 周波数の通知のみで、通常エラーは生成されません。 | +| HDD Monitor | HDD Temperature | ✓ | ✓ | ✓ | | +| | HDD PowerOnHours | ✓ | ✓ | ✓ | | +| | HDD TotalDataWritten | ✓ | ✓ | ✓ | | +| | HDD RecoveredError | ✓ | ✓ | ✓ | | +| | HDD Usage | ✓ | ✓ | ✓ | | +| | HDD ReadDataRate | ✓ | ✓ | ✓ | | +| | HDD WriteDataRate | ✓ | ✓ | ✓ | | +| | HDD ReadIOPS | ✓ | ✓ | ✓ | | +| | HDD WriteIOPS | ✓ | ✓ | ✓ | | +| | HDD Connection | ✓ | ✓ | ✓ | | +| Memory Monitor | Memory Usage | ✓ | ✓ | ✓ | | +| Net Monitor | Network Connection | ✓ | ✓ | ✓ | | +| | Network Usage | ✓ | ✓ | ✓ | 使用量の通知のみで、通常エラーは生成されません。 | +| | Network CRC Error | ✓ | ✓ | ✓ | この期間の CRC エラーの数がしきい値に達すると、警告が発生します。発生する CRC エラーの数は、ip コマンドで確認できる値と同じです。 | +| | IP Packet Reassembles Failed | ✓ | ✓ | ✓ | | +| NTP Monitor | NTP Offset | ✓ | ✓ | ✓ | | +| Process Monitor | Tasks Summary | ✓ | ✓ | ✓ | | +| | High-load Proc[0-9] | ✓ | ✓ | ✓ | | +| | High-mem Proc[0-9] | ✓ | ✓ | ✓ | | +| GPU Monitor | GPU Temperature | ✓ | ✓ | - | | +| | GPU Usage | ✓ | ✓ | - | | +| | GPU Memory Usage | ✓ | - | - | | +| | GPU Thermal Throttling | ✓ | - | - | | +| | GPU Frequency | ✓ | ✓ | - | インテルプラットフォームの場合、現在の GPU クロックが GPU によってサポートされているかどうかを監視します。 | +| Voltage Monitor | CMOS Battery Status | ✓ | - | - | RTC および BIOS のバッテリの状態 ## ROSパラメータ [ROSパラメータ](docs/ros_parameters.md)を参照してください。 -## 注意 +## メモ -### Intelプラットフォーム用CPUモニター +### Intelプラットフォーム用CPUモニタ -サーマルスロットリングイベントはMSR(モデル固有レジスタ)の内容を読み取ることで監視でき、デフォルトではrootのみがMSRにアクセスできます。そのため、このパッケージでは、セキュリティリスクを可能な限り最小限に抑えるために、次のアプローチを提供しています。 +サーマルスロットリングイベントはMSR(モデル固有レジスタ)の内容を読み取ることで監視できますが、MSRにアクセスするのはデフォルトではrootのみが許可されています。そこでこのパッケージでは、セキュリティリスクを最小限に抑えるための以下のアプローチを提供します。 -- MSRにアクセスしてサーマルスロットリングステータスをCPUモニターにソケットプログラミングを使用して送信する「msr_reader」という小さなプログラムを提供する。 -- rootではなく、特定のユーザーとして「msr_reader」を実行する。 -- CPUモニターは、サーマルスロットリングステータスがソケット通信で送信されるため、非特権ユーザーとしてステータスを知ることができます。 +- MSRにアクセスし、ソケットプログラミングを使用してサーマルスロットリングステータスをCPUモニタに送信する「msr_reader」という小規模なプログラムを提供します。 +- rootではなく特定のユーザとして「msr_reader」を実行します。 +- サーマルスロットリングステータスはソケット通信で送信されるため、CPUモニタは権限のないユーザとしてそのステータスを知ることができます。 -### 開始前の手順 +### 開始前の注意事項 + +1. 「msr_reader」を実行するユーザを作成します。 -1. 「msr_reader」を実行するユーザーを作成します。 ```sh sudo adduser ``` -2. 対象システムに `msr` カーネルモジュールをロードする。
- `/dev/cpu/CPUNUM/msr` パスが出現する。 +2. ターゲットシステムにカーネルモジュール「msr」を読み込みます。 + 「/dev/cpu/CPUNUM/msr」パスが表示されます。 + ```sh sudo modprobe msr ``` -3. アクセス制御リスト(ACL)を使用して、読み取り専用アクセス権でMSRにユーザーアクセスを許可します。 +3. アクセス制御リスト (ACL) を使用して、ユーザーが読み取り専用権限で MSR にアクセスできるようにする。 + ```sh sudo setfacl -m u::r /dev/cpu/*/msr ``` -4. 'msr_reader'にcapabilityを割り当てます。msrカーネルモジュールにはrawioのcapabilityが必要です。 +4. MSRカーネルモジュールにはrawio機能が必要なため、'msr_reader'に機能を割り当てます。 + ```sh sudo setcap cap_sys_rawio=ep install/system_monitor/lib/system_monitor/msr_reader ``` -5. 作成したユーザとして「msr_reader」を実行し、汎用ユーザとしてsystem_monitorを実行します。 +5. 作成したユーザーとして `msr_reader` を実行し、汎用ユーザーとして `system_monitor` を実行します。 + ```sh su @@ -140,36 +146,40 @@ CMakeは自動的にビルド環境に応じたビルド対象のソースを選 [msr_reader](docs/msr_reader.md) -## HDDモニター +## HDD モニター -HDDの温度と寿命の監視には一般にS.M.A.R.T.情報が使用され、通常、diskデバイスノードへのアクセスはrootユーザーまたはdiskグループに制限されています。
-CPUモニターと同様に、このパッケージはセキュリティリスクをできるだけ最小限に抑えるアプローチを提供します。
+一般的に、SMART 情報は HDD 温度と HDD の使用寿命を監視するために使用され、通常は root ユーザーまたはディスクグループがディスクデバイスノードにアクセスできます。
+CPU モニターと同様に、このパッケージは可能な限りセキュリティリスクを最小化するアプローチを提供します。
-- 'hdd_reader'という小さなプログラムを提供し、S.M.A.R.T.情報にアクセスしてソケットプログラミングを使用してHDDモニターに一部のアイテムを送信します。 -- 'hdd_reader'を特定のユーザーとして実行します。 -- HDDモニターは、ソケット通信によって送信されるため、非特権ユーザーとして一部のS.M.A.R.T.情報を知ることができます。 +- ソケットプログラミングを使用して SMART 情報にアクセスし、その一部を HDD モニターに送信する 'hdd_reader' という名前の小さなプログラムを提供します。 +- 特定のユーザーとして 'hdd_reader' を実行します。 +- HDD モニターはソケット通信によって送信されるため、権限のないユーザーとしても SMART 情報の一部を知ることができます。 ### 開始前の手順 -1. 'hdd_reader'を実行するユーザーを作成します。 +1. 'hdd_reader' を実行するユーザーを作成します。 + ```sh sudo adduser ``` -2. ディスクグループにユーザーを追加します。 +2. ユーザーをディスクグループに追加する。 + ```sh sudo usermod -a -G disk ``` -3. SCSIカーネルモジュールがATA PASS-THROUGH (12)コマンドを送信するには `rawio` 機能が必要で、NVMeカーネルモジュールは管理コマンドを送信するには `admin` 機能が必要なので、`hdd_reader`に機能を割り当てます。 +3. SCSIカーネルモジュールがATA PASS-THROUGH (12) コマンドを送信するために`rawio`ケイパビリティを必要とし、NVMeカーネルモジュールが管理コマンドを送信するために`admin`ケイパビリティを必要とするため、`hdd_reader`にケイパビリティを割り当てます。 + ```sh sudo setcap 'cap_sys_rawio=ep cap_sys_admin=ep' install/system_monitor/lib/system_monitor/hdd_reader ``` -4. 作成したユーザーとして `hdd_reader` を実行し、一般的ユーザーとして `system_monitor` を実行します。 +4. 作成したユーザーで「hdd_reader」を実行し、汎用ユーザーとしてsystem_monitorを実行します。 + ```sh su @@ -180,21 +190,21 @@ CPUモニターと同様に、このパッケージはセキュリティリス [hdd_reader](docs/hdd_reader.md) -## インテルプラットフォームのGPUモニター +## Intel プラットフォームの GPU モニター -現在、インテルプラットフォームのGPUモニターは、NVML APIから情報にアクセスできるNVIDIA GPUのみをサポートしています。 +現在、Intel プラットフォームの GPU モニターは、NVML API で情報にアクセスできる NVIDIA GPU にのみ対応しています。 -また、CUDAライブラリのインストールが必要です。 -CUDA 10.0のインストール手順については、[NVIDIA CUDAインストールガイドfor Linux](https://docs.nvidia.com/cuda/archive/10.0/cuda-installation-guide-linux/index.html)を参照してください。 +また、CUDA ライブラリをインストールする必要があります。CUDA 10.0 のインストール手順については、[NVIDIA CUDA Installation Guide for Linux](https://docs.nvidia.com/cuda/archive/10.0/cuda-installation-guide-linux/index.html) を参照してください。 -## CMOSバッテリの電圧モニター +## CMOS バッテリーの電圧モニター + +一部のプラットフォームは RTC と CMOS 用の内蔵バッテリーを備えています。このノードは、cat /proc/driver/rtc の実行結果からバッテリーの状態を判断します。 +また、lm-sensors がインストールされている場合は、結果を使用できます。 +ただし、sensors の戻り値はチップセットによって異なるため、対応する電圧を抽出するための文字列を設定する必要があります。 +警告電圧とエラー電圧を設定する必要もあります。 +例えば、電圧が 2.9V 未満のときに警告し、2.7V 未満のときにエラーが発生するように設定する場合は、次のようになります。 +nct6106 チップセット上のセンサーの実行結果は次のとおりで、「in7:」は CMOS バッテリーの電圧です。 -一部のプラットフォームには、RTCとCMOS用の内蔵バッテリがあります。このノードは、cat /proc/driver/rtcの実行結果からバッテリの状態を判断します。 -また、lm-sensorsがインストールされていれば、結果を利用することが可能です。 -ただし、sensorsの戻り値はチップセットによって異なるため、対応する電圧を抽出するための文字列を設定する必要があります。 -また、警告とエラーの電圧を設定する必要があります。 -たとえば、電圧が2.9V未満になると警告し、2.7V未満になるとエラーを出す場合。 -チップセットnct6106でのsensorsの実行結果は次のとおりで、「in7:」はCMOSバッテリの電圧です。 ```txt $ sensors @@ -217,7 +227,8 @@ fan1: 2789 RPM (min = 0 RPM) fan2: 0 RPM (min = 0 RPM) ``` -次の通り、voltage_monitor.param.yaml の設定値です。 +`voltage_monitor.param.yaml` の設定値は以下の通りです。 + ```yaml /**: @@ -227,9 +238,10 @@ fan2: 0 RPM (min = 0 RPM) cmos_battery_label: "in7:" ``` -以下の2.7Vと2.90Vの値は仮説です。マザーボードとチップセットによって値は異なる場合があります。ただし、リチウム電池の電圧が2.7Vを下回った場合は、交換することをお勧めします。 -上記の例では、トピック/診断に出力されるメッセージは次のとおりです。 -電圧<2.9Vの場合: +上で示した 2.7 V と 2.90 V の値は仮定上のものです。マザーボードとチップセットによっては、この値は異なる場合があります。ただし、リチウム電池の電圧が 2.7 V を下回る場合は、交換することを推奨します。 +上記の例では、トピック /diagnostics に出力されるメッセージは次のとおりです。 +電圧が 2.9 V 未満の場合: + ```txt name: /autoware/system/resource_monitoring/voltage/cmos_battery @@ -240,7 +252,8 @@ fan2: 0 RPM (min = 0 RPM) value: Low Battery ``` -電圧 < 2.7V の場合: +電圧が2.7V未満の場合は次のとおりです。 + ```txt name: /autoware/system/resource_monitoring/voltage/cmos_battery @@ -251,7 +264,8 @@ fan2: 0 RPM (min = 0 RPM) value: Battery Died ``` -そうでない場合は、 +どちらでもない場合: + ```txt name: /autoware/system/resource_monitoring/voltage/cmos_battery @@ -262,11 +276,12 @@ fan2: 0 RPM (min = 0 RPM) value: OK ``` -CMOS バッテリー電圧が `voltage_error` または `voltage_warn` より低下した場合、警告となります。 -バッテリーが切れた場合、電源がオフになると RTC の動作が停止します。ただし、車両が走行できるため、これはエラーではありません。エラーが発生すると車両は停止しますが、すぐに停止する必要はありません。 -「Low Battery」または「Battery Died」の値で判断できます。 +CMOSバッテリー電圧がvoltage_errorやvoltage_warnを下回ると警告が発生します。 +バッテリーがなくなると、電源が切れたときにRTCの動作が停止します。ただし、車両が走行できるため、エラーではありません。車両はエラーが発生すると停止しますが、すぐに停止する必要はありません。 +「ローバッテリー」または「バッテリー切れ」の値によって判断できます。 + +## UMLダイアグラム -## UML 図 +[クラス図](docs/class_diagrams.md)を参照してください。 +[シーケンス図](docs/seq_diagrams.md)を参照してください。 -[クラス図](docs/class_diagrams.md) を参照してください。 -[シーケンス図](docs/seq_diagrams.md) を参照してください。 diff --git a/system/topic_state_monitor/README.md b/system/topic_state_monitor/README.md index 3bc1ee6976dd7..0eaa4eeae324d 100644 --- a/system/topic_state_monitor/README.md +++ b/system/topic_state_monitor/README.md @@ -2,89 +2,115 @@ ## 目的 -このノードは異常なタイムアウトや低周波などの入力トピックを監視します。 -トピックステータスの結果は診断として公開されます。 +このノードは、タイムアウトや低周波数などの異常について入力トピックを監視します。 +トピック状態の結果は、診断として公開されます。 -## 内部処理 / アルゴリズム +## 内部動作/アルゴリズム -トピックステータスの種類と対応する診断ステータスは次のとおりです。 +トピック状態のタイプと対応する診断状態は次のとおりです。 -| トピック状態 | 診断状態 | 説明 | -| ------------- | -------- | ---------------------------------------- | -| `OK` | OK | トピックに異常なし | -| `NotReceived` | ERROR | トピックが未受信 | -| `WarnRate` | WARN | トピックの受信頻度が低下 | -| `ErrorRate` | ERROR | トピックの受信頻度が大幅に低下 | -| `Timeout` | ERROR | トピックサブスクリプションが一定時間停止 | +| トピックのステータス | 診断ステータス | 説明 | +|---|---|---| +| `OK` | OK | トピックに異常なし | +| `NotReceived` | エラー | トピックがまだ受信されていない | +| `WarnRate` | 警告 | トピックの周波数が低下している | +| `ErrorRate` | エラー | トピックの周波数が大幅に低下している | +| `Timeout` | エラー | トピックのサブスクリプションが一定時間停止している | -## 入力 / 出力 +## 入出力 ### 入力 -| 名前 | タイプ | 説明 | -| ---------- | ------------ | ------------------------ | -| 任意の名前 | 任意のタイプ | 監視対象のトピックを購読 | +| 名前 | 種類 | 説明 | +| -------- | -------- | --------------------------------- | +| 任意の名前 | 任意の種類 | 監視する対象トピックを購読する | -### 出力 +#### 自動運転ソフトウェア +[ドキュメントのURL] -Autowareの自動運転ソフトウェアは、Perception、Planning、Controlの3つの主要なコンポーネントで構成されています。これらのコンポーネントは、次のタスクを実行します。 +### 概要 -**Perception** +本ドキュメントは、Autoware自動運転ソフトウェアのアーキテクチャ、コンポーネント/モジュール、およびインタフェースに関する技術仕様を提供します。 -- センサーからの生のデータを処理し、車載環境の3Dモデルを作成します。 -- 物体検出、物体分類、セグメンテーションなどのタスクを実行します。 +### アーキテクチャ -**Planning** +Autowareアーキテクチャは、以下を含む3つの主要層で構成されています。 -- 環境マップを使用し、自車位置を決定します。 -- 障害物を回避し、安全な経路を生成する、経路計画と軌跡生成を行います。 +- **Perception:** センサデータから周囲環境を認識します。 +- **Planning:** 自車の経路と速度を計画します。 +- **Control:** 計画を実行し、車両を制御します。 -**Control** +### コンポーネント/モジュール -- 経路に従って車両を制御し、加速、ブレーキング、ステアリングを行います。 -- 速度、加速度、ヨー角などの逸脱量を最小限に抑えます。 +#### Perception -**Autoware**では、Planningコンポーネントが以下を行います。 +- **カメラ:** 画像データの取得と特徴抽出手順 +- **LiDAR:** 3D点群データの取得と処理 -- Planningモジュールの主な機能は'post resampling'後のパス生成です。 -- パス生成は、'post resampling'後の以下の情報に基づいて行われます。 -- 'post resampling'後の自車位置と周囲環境のマップ -- 経路制約(速度制限、道路標識など) -- 障害物の検出結果と予測された経路 +#### Planning -**Autoware**では、以下のPlanningアルゴリズムが実装されています。 +- **Motion Planner:** 自車経路の生成 +- **Behavior Planner:** 自車の行動の決定 -- **ダイナミックウィンドウアプローチ(DWA):** リアルタイムで経路を生成し、障害物を回避するためのアルゴリズムです。 -- **モデル予測制御(MPC):** 制御入力のシーケンスを最適化して、 заданную経路を追従するためのアルゴリズムです。 +#### Control -| 名前 | 型 | 説明 | -| -------------- | --------------------------------- | ------------ | -| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断結果出力 | +- **Longitudinal Controller:** 加速度と減速度の制御 +- **Lateral Controller:** ステアリング角の制御 + +### インタフェース + +各コンポーネント/モジュールは、ROSメッセージインタフェース를 사용합니다. + +#### Perception + +- **Camera:** `sensor_msgs/Image` +- **LiDAR:** `sensor_msgs/PointCloud2` + +#### Planning + +- **Motion Planner:** `nav_msgs/Path` +- **Behavior Planner:** `autoware_msgs/BehaviorCommand` + +#### Control + +- **Longitudinal Controller:** `std_msgs/Float64` (加速度/減速度) +- **Lateral Controller:** `std_msgs/Float64` (ステアリング角) + +### その他の機能 + +- **Localization:** 自車位置の推定 +- **Mapping:** 環境マップの作成 +- **Visualization:** データの可視化とデバッグ + +| 名称 | タイプ | 説明 | +|---|---|---| +| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断出力 | ## パラメータ ### ノードパラメータ -| 名称 | 型 | デフォルト値 | 説明 | -| ----------------- | ------ | ------------ | ---------------------------------------------------------------------- | -| `topic` | 文字列 | - | ターゲット・トピック名 | -| `topic_type` | 文字列 | - | ターゲット・トピックの型 (トピックが変換でない場合に使用する) | -| `frame_id` | 文字列 | - | 変換親のフレーム ID (トピックが変換の場合に使用する) | -| `child_frame_id` | 文字列 | - | 変換子のフレーム ID (トピックが変換の場合に使用する) | -| `transient_local` | ブール | false | トピック・サブスクリプションの QoS ポリシー (Transient Local/Volatile) | -| `best_effort` | ブール | false | トピック・サブスクリプションの QoS ポリシー (Best Effort/Reliable) | -| `diag_name` | 文字列 | - | 診断の発行に使用される名前 | -| `update_rate` | double | 10.0 | タイマー・コールバック期間 [Hz] | +| 名 | 種別 | デフォルト値 | 説明 | +|---|---|---|---| +| `トピック` | 文字列 | - | 目標トピックの名前 | +| `トピック種別` | 文字列 | - | 目標トピックの種別(トピックが変換でない場合に使用) | +| `フレーム ID` | 文字列 | - | 変換親のフレーム ID(トピックが変換の場合に使用) | +| `子のフレーム ID` | 文字列 | - | 変換子のフレーム ID(トピックが変換の場合に使用) | +| `トランジェントローカル` | ブール | false | トピックサブスクリプションの QoS ポリシー(トランジェントローカル / 揮発性) | +| `ベスト प्रयास` | ブール | false | トピックサブスクリプションの QoS ポリシー(ベストエフォート / 信頼性) | +| `診断名` | 文字列 | - | 診断の公開に使用される名前 | +| `更新レート` | 倍精度浮動小数点数 | 10.0 | タイマーコールバックの周期 [Hz] | ### コアパラメータ -| 名称 | タイプ | デフォルト値 | 説明 | -| ------------- | ------ | ------------ | ------------------------------------------------------------------------------------------- | -| `warn_rate` | double | 0.5 | トピックレートがこの値を下回ると、トピックステータスは`WarnRate`になる | -| `error_rate` | double | 0.1 | トピックレートがこの値を下回ると、トピックステータスは`ErrorRate`になる | -| `timeout` | double | 1.0 | トピックサブスクリプションがこの時間を超えて停止すると、トピックステータスは`Timeout`になる | -| `window_size` | int | 10 | 周波数の計算用のターゲットトピックのウィンドウサイズ | +| 名称 | 型 | デフォルト値 | 説明 | +| ------------- | ------ | ------------- | ---------------------------------------------------------------------------------------------------------- | +| `warn_rate` | double | 0.5 | トピックレートがこの値より低い場合、トピックステータスが「WarnRate」になります | +| `error_rate` | double | 0.1 | トピックレートがこの値より低い場合、トピックステータスが「ErrorRate」になります | +| `timeout` | double | 1.0 | トピックサブスクリプションが「timeout」を超えて停止する場合、トピックステータスが「Timeout」になります | +| `window_size` | int | 10 | 周波数の計算に使用されるターゲットトピックのウィンドウサイズ | -## 想定条件 / 制約 +## 仮定 / 既知の限界 TBD. + diff --git a/system/velodyne_monitor/README.md b/system/velodyne_monitor/README.md index 5521e54916d4a..a228c92b3199e 100644 --- a/system/velodyne_monitor/README.md +++ b/system/velodyne_monitor/README.md @@ -2,32 +2,33 @@ ## 目的 -このノードは、Velodyne LiDAR のステータスを監視します。 -ステータスの結果は診断として公開されます。この診断を使用して LiDAR エラーを判定することは避けてください。 -詳細な理由については[前提条件/既知の制限事項](#assumptions--known-limits) をお読みください。 - -## 内部動作 / アルゴリズム - -Velodyne LiDAR のステータスは `http://[ip_address]/cgi/{info, settings, status, diag}.json` から取得できます。 - -異常ステータスと対応する診断ステータスのタイプは次のとおりです。 - -| 異常状態 | 診断ステータス | -| ---------------------------------------------------- | -------------- | -| 異常なし | OK | -| 基板の上面の温度が低すぎる | ERROR | -| 基板の上面の温度が低い | WARN | -| 基板の上面の温度が高すぎる | ERROR | -| 基板の上面の温度が高い | WARN | -| 基板の下面の温度が低すぎる | ERROR | -| 基板の下面の温度が低い | WARN | -| 基板の下面の温度が高すぎる | ERROR | -| 基板の下面の温度が高い | WARN | -| モーターの回転数(rpm)が低すぎる | ERROR | -| モーターの回転数(rpm)が低い | WARN | -| 接続エラー(Velodyne LiDARステータスを取得できない) | ERROR | - -## 入力 / 出力 +このノードはVelodyne LiDARのステータスを監視します。 +ステータスの結果は診断として公開されます。 +この診断を使用してLiDARエラーを判断しないように注意してください。 +詳細な理由については「前提条件/既知の制限事項」をお読みください。 + +## 内部処理/アルゴリズム + +Velodyne LiDARのステータスは`http://[ip_address]/cgi/{info, settings, status, diag}.json`から取得できます。 + +異常ステータスの種類とその対応する診断ステータスを以下に示します。 + +| 異常状態 | 診断状態 | +| --------------------------------------------------- | ----------------- | +| 異常なし | OK | +| トップボードの温度が非常に低い | ERROR | +| トップボードの温度が低い | WARN | +| トップボードの温度が非常に高い | ERROR | +| トップボードの温度が高い | WARN | +| ボトムボードの温度が非常に低い | ERROR | +| ボトムボードの温度が低い | WARN | +| ボトムボードの温度が非常に高い | ERROR | +| ボトムボードの温度が高い | WARN | +| モーターのRPM(回転数)が非常に低い | ERROR | +| モーターのRPM(回転数)が低い | WARN | +| ベロダインLiDARの接続エラー | ERROR | + +## 入出力 ### 入力 @@ -35,45 +36,50 @@ Velodyne LiDAR のステータスは `http://[ip_address]/cgi/{info, settings, s ### 出力 -| Name | Type | 説明 | -| -------------- | --------------------------------- | -------- | -| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断出力 | +| 名前 | 型 | 説明 | +| --------------- | ----------------------------------- | --------------- | +| `/diagnostics` | `diagnostic_msgs/DiagnosticArray` | 診断結果出力 | ## パラメータ ### ノードパラメータ -| 名前 | 型 | デフォルト値 | 説明 | -| --------- | ------ | ------------ | ----------------------------------------------------------------------------- | -| `timeout` | double | 0.5 | Velodyne LiDAR のステータスを取得するための HTTP リクエストのタイムアウト [s] | +| 名称 | 型 | デフォルト値 | 説明 | +| --------- | ------ | ------------- | --------------------------------------------------------- | +| `timeout` | double | 0.5 | Velodyne LiDARステータスの取得のためのHTTPリクエストに対するタイムアウト [秒] | -### 主要パラメータ +### コアパラメータ -| 名前 | 型 | デフォルト値 | 説明 | -| ----------------- | ------ | --------------- | ------------------------------------------------------------------------------------------------------------ | -| `ip_address` | 文字列 | "192.168.1.201" | ターゲット Velodyne LiDAR の IP アドレス | -| `temp_cold_warn` | double | -5.0 | Velodyne LiDAR の温度がこの値を下回ると、診断ステータスが WARN になります [°C] | -| `temp_cold_error` | double | -10.0 | Velodyne LiDAR の温度がこの値を下回ると、診断ステータスが ERROR になります [°C] | -| `temp_hot_warn` | double | 75.0 | Velodyne LiDAR の温度がこの値を超えると、診断ステータスが WARN になります [°C] | -| `temp_hot_error` | double | 80.0 | Velodyne LiDAR の温度がこの値を超えると、診断ステータスが ERROR になります [°C] | -| `rpm_ratio_warn` | double | 0.80 | モーターの回転数率(= 現在の回転数 / デフォルト回転数)がこの値を下回ると、診断ステータスが WARN になります | -| `rpm_ratio_error` | double | 0.70 | モーターの回転数率(= 現在の回転数 / デフォルト回転数)がこの値を下回ると、診断ステータスが ERROR になります | +| 名前 | 種類 | デフォルト値 | 説明 | +| ----------------- | ------ | --------------- | ------------------------------------------------------------------------------------------------------------------------- | +| `ip_address` | 文字列 | "192.168.1.201" | ターゲットVelodyne LiDARのIPアドレス | +| `temp_cold_warn` | double | -5.0 | Velodyne LiDARの温度がこの値より低い場合、診断ステータスがWARNになります [°C] | +| `temp_cold_error` | double | -10.0 | Velodyne LiDARの温度がこの値より低い場合、診断ステータスがERRORになります [°C] | +| `temp_hot_warn` | double | 75.0 | Velodyne LiDARの温度がこの値より高い場合、診断ステータスがWARNになります [°C] | +| `temp_hot_error` | double | 80.0 | Velodyne LiDARの温度がこの値より高い場合、診断ステータスがERRORになります [°C] | +| `rpm_ratio_warn` | double | 0.80 | モーターのrpmレート(=現在のrpm/デフォルトrpm)がこの値より低い場合、診断ステータスがWARNになります | +| `rpm_ratio_error` | double | 0.70 | モーターのrpmレート(=現在のrpm/デフォルトrpm)がこの値より低い場合、診断ステータスがERRORになります | ### 設定ファイル -いくつかの Velodyne モデルの設定ファイルは準備されています。 -`temp_***` パラメータは各データシートの動作温度を基準に設定されています。 -さらに、各モデルの `temp_hot_***` は動作温度より 20 高く設定されています。 -現在、`VLP-16.param.yaml` が最も低い仕様であるためデフォルト引数として使用されています。 +複数の Velodyne モデルの設定ファイルが用意されています。 + +`temp_***` パラメータは、各データシートの動作温度を参考として設定されています。 +さらに、各モデルの `temp_hot_***` は動作温度から 20 だけ高い値に設定されています。 +現在は、`VLP-16.param.yaml` が最も仕様が低いので、デフォルト引数として使用されています。 + +| モデル名 | コンフィグ名 | 動作温度 (℃) | +| -------------- | ------------------------- | --------------------------- | +| VLP-16 | VLP-16.param.yaml | -10 から 60 | +| VLP-32C | VLP-32C.param.yaml | -20 から 60 | +| VLS-128 | VLS-128.param.yaml | -20 から 60 | +| Velarray M1600 | Velarray_M1600.param.yaml | -40 から 85 | +| HDL-32E | HDL-32E.param.yaml | -10 から 60 | -| モデル名 | 設定名 | 実稼働温度 [℃] | -| -------------- | ------------------------- | -------------- | -| VLP-16 | VLP-16.param.yaml | -10 ~ 60 | -| VLP-32C | VLP-32C.param.yaml | -20 ~ 60 | -| VLS-128 | VLS-128.param.yaml | -20 ~ 60 | -| Velarray M1600 | Velarray_M1600.param.yaml | -40 ~ 85 | -| HDL-32E | HDL-32E.param.yaml | -10 ~ 60 | +## 想定/既知の制限事項 -## 前提 / 制限事項 +このノードは [http_client](https://github.com/microsoft/cpprestsdk) を使用し、GET メソッドでリクエスト結果を取得します。 +結果を取得するのに数秒かかり、GET リクエストが成功しない場合はタイムアウト例外を生成します。 +これは頻繁に発生し、診断アグリゲーターが古くなっていることを出力します。 +したがって、この結果をライダエラーの判断に使用することを停止し、ライダのステータスの確認にのみ監視することをお勧めします。 -このノードは[http_client](https://github.com/microsoft/cpprestsdk)を使用し、結果をGETメソッドで要求します。このノードは結果を取得するのに数秒かかります。GETリクエストが成功しない場合はタイムアウト例外を生成します。これは頻繁に発生し、診断アグリゲータが出力を古くしたと判断します。そのため、この結果をレーザスキャナのエラーを判断するために使用しなくなり、レーザスキャナのステータスを確認するためにのみ監視することをお勧めします。 diff --git a/tools/reaction_analyzer/README.md b/tools/reaction_analyzer/README.md index f5cdb9d061365..582bf47f286cf 100644 --- a/tools/reaction_analyzer/README.md +++ b/tools/reaction_analyzer/README.md @@ -1,152 +1,154 @@ -# Reaction Analyzer +# 反応アナライザー ## 説明 -reaction analyzerパッケージの主な目的は、ROSベースの自動運転シミュレーション環境内のさまざまなノードの反応時間を、事前に決定されたトピックをサブスクライブすることで測定することです。このツールは特に、急な障害物などの環境の変化に対する知覚、Plannining、制御パイプラインのパフォーマンスを評価するのに役立ちます。制御出力と知覚出力を両方を測定できるように、ノードを2つのrunning_mode(`planning_control`と`perception_planning`)に分割する必要がありました。 +Reaction Analyzerパッケージの主な目的は、ROSベースの自律走行シミュレーション環境内のさまざまなノードの反応時間を測定することです。このツールは、障害物出現などの環境内の動的な変化に対して、認識、計画、制御パイプラインがどのように反応するかを評価するのに特に役立ちます。制御出力と認識出力を測定するには、ノードを2つの実行モード(`planning_control`と`perception_planning`)に分ける必要がありました。 ![ReactionAnalyzerDesign.png](media%2FReactionAnalyzerDesign.png) -### Plannining制御モード +### Planning Control モード -このモードでは、reaction analyzerは、PredictedObjectsトピックとPointCloud2トピックのダミーパブリッシャーを作成します。テストの開始時に、自己位置の初期値と目標値を公開して、テスト環境を設定します。次に、自己車両の前に突然の障害物を産出します。障害物が発生すると、事前に決定されたトピックで、Planniningノードと制御ノードの応答メッセージの検索が開始されます。すべてのトピックが反応すると、各ノードの`spawn_cmd_time`に対する`reacted_times`を比較して、ノードの反応時間と統計を計算し、結果を格納するCSVファイルを作成します。 +このモードでは、Reaction AnalyzerはPredictedObjectsとPointCloud2トピックのダミーパブリッシャーを作成します。テストの開始時に、エゴカーの初期位置と目標位置をパブリッシュして、テスト環境を設定します。次に、エゴカーの前に突然障害物を発生させます。障害物が発生すると、あらかじめ定義されたトピックで、計画および制御ノードの反応メッセージの検索を開始します。すべてのトピックに反応すると、各ノードの`reacted_times`を`spawn_cmd_time`と比較してノードの反応時間と統計を計算し、結果を格納するCSVファイルを作成します。 -### 知覚Planniningモード +### Perception Planning モード -このモードでは、reaction analyzerはAWSIMから記録されたrosbagファイルを読み取り、rosbagを再生するためにrosbag内の各トピックのトピックパブリッシャーを作成します。`path_bag_without_object`と`path_bag_with_object`の2つのrosbagファイルが読み取られます。最初に、`path_bag_without_object`を再生して自己車両の初期位置と目標位置を設定します。`spawn_time_after_init`秒後、`path_bag_with_object`を再生して、自己車両の前に突然の障害物を産出します。障害物が発生すると、事前に決定されたトピックで、知覚ノードとPlanniningノードの応答メッセージの検索が開始されます。すべてのトピックが反応すると、各ノードの`spawn_cmd_time`に対する`reacted_times`を比較して、ノードの反応時間と統計を計算し、結果を格納するCSVファイルを作成します。 +このモードでは、Reaction AnalyzerはAWSIMから記録されたROSバッグファイルを読み取り、ROSバッグを再生するためのトピックパブリッシャーを各トピック内に作成します。`path_bag_without_object`と`path_bag_with_object`という2つのROSバッグファイルを読み取ります。最初に、`path_bag_without_object`を再生して、エゴカーの初期位置と目標位置を設定します。`spawn_time_after_init`秒後、`path_bag_with_object`を再生して、エゴカーの前に突然障害物を発生させます。障害物が発生すると、あらかじめ定義されたトピックで、認識および計画ノードの反応メッセージの検索を開始します。すべてのトピックに反応すると、各ノードの`reacted_times`を`spawn_cmd_time`と比較してノードの反応時間と統計を計算し、結果を格納するCSVファイルを作成します。 -#### Point Cloud Publisherのタイプ +#### Point Cloudパブリッシャーの種類 -知覚・センシングパイプラインのより優れた分析を得るために、reaction analyzerは3つの異なる方法(`async_header_sync_publish`、`sync_header_sync_publish`、または`async_publish`)でポイントクラウドメッセージを公開できます。(`T`はlidarの出力の周期です) +認識とセンシングパイプラインをより詳しく分析するために、Reaction Analyzerは異なる3つの方法でポイントクラウドメッセージをパブリッシュできます。`async_header_sync_publish`、`sync_header_sync_publish`、または`async_publish`。(`T`はLiDARの出力期間を表します) ![PointcloudPublisherType.png](media%2FPointcloudPublisherType.png) -- `async_header_sync_publish`:非同期ヘッダ時間と同期してポイントクラウドメッセージを公開します。つまり、lidarの出力はすべて同じ時間に公開されますが、ポイントクラウドメッセージのヘッダには位相差のために異なるタイムスタンプが含まれます。 -- `sync_header_sync_publish`:同期ヘッダ時間と同期してポイントクラウドメッセージを公開します。つまり、lidarの出力はすべて同じ時間に公開され、ポイントクラウドメッセージのヘッダには同じタイムスタンプが含まれます。 -- `async_publish`:非同期にポイントクラウドメッセージを公開します。つまり、lidarの出力はすべて異なる時間に公開されます。 +- `async_header_sync_publish`: ポイントクラウドメッセージを非同期ヘッダー時刻で同期してパブリッシュします。つまり、LiDARの各出力は同時にパブリッシュされますが、ポイントクラウドメッセージのヘッダーにはフェーズ差があるために異なるタイムスタンプが含まれます。 +- `sync_header_sync_publish`: ポイントクラウドメッセージを同期ヘッダー時刻で同期してパブリッシュします。つまり、LiDARの各出力は同時にパブリッシュされ、ポイントクラウドメッセージのヘッダーには同じタイムスタンプが含まれます。 +- `async_publish`: ポイントクラウドメッセージを非同期にパブリッシュします。つまり、LiDARの各出力は異なる時間にパブリッシュされます。 ## 使用法 -どちらのランニングモードでも定義する必要がある一般的なパラメータは、`output_file_path`、`test_iteration`、および`reaction_chain`リストです。`output_file_path`は、結果と統計が格納される出力ファイルのパスです。`test_iteration`は、実行されるテストの数を定義します。`reaction_chain`リストは、反応時間を測定する事前に定義されたトピックのリストです。 +両方の実行モードで定義する必要がある共通のパラメータは、`output_file_path`、`test_iteration`、および`reaction_chain`リストです。`output_file_path`は、結果と統計が格納される出力ファイルパスです。`test_iteration`は、実行されるテストの数を定義します。`reaction_chain`リストは、反応時間を測定する事前に定義されたトピックのリストです。 -**重要:** `reaction_chain`リストが正しく定義されていることを確認してください。 +**重要**: `reaction_chain`リストが正しく定義されていることを確認してください: -- `perception_planning`モードでは、`Control`ノードを定義しないでください。 +- `perception_planning`モードでは、`Control`ノードを定義**しないで**ください。 -### 事前に準備されたテスト環境 +### 準備されたテスト環境 -- デモテスト用マップは、[こちら](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip)のリンクからダウンロードできます。ダウンロード後、zipファイルを展開して、パスを以下のコマンドの`[MAP_PATH]`として使用します。 +- デモ用テストマップを [こちら](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip) のリンクからダウンロードしてください。ダウンロード後、zip ファイルを展開し、そのパスを以下で `[MAP_PATH]` として使用してください。 -#### 計画制御モード +#### プランニング制御モード + +- `reaction_chain` リストにプランニングノードと制御ノードのみ定義する必要があります。デフォルトパラメータを使用して、次のコマンドでテストを開始できます: -- 次の`reaction_chain`リストで、計画ノードと制御ノードのみを定義する必要があります。デフォルトのパラメータで、次のコマンドでテストを開始できます。 ```bash ros2 launch reaction_analyzer reaction_analyzer.launch.xml running_mode:=planning_control vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit map_path:=[MAP_PATH] ``` -コマンド実行後、`simple_planning_simulator` と `reaction_analyzer` が起動されます。テストが自動的に開始されます。テストの終了後、結果は定義した `output_file_path` に保存されます。 +コマンド実行後、`simple_planning_simulator`と`reaction_analyzer`が起動します。テストが自動的に開始されます。テスト完了後は、定義した`output_file_path`に結果が保存されます。 + +#### Perception Planningモード -#### 知覚プランニングモード +- Google Driveのリンク[こちら](https://drive.google.com/drive/folders/1eJMEdt4WbU-W6MPXlNTkIhZtwpof0HcO?usp=sharing)からrosbagファイルをダウンロードします。 +- zipファイルを解凍し、`.db3`ファイルのパスをパラメーター`path_bag_without_object`および`path_bag_with_object`に設定します。 +- 以下のコマンドでテストを開始できます: -- Google Drive から rosbag ファイルをダウンロードします。 - リンクは [こちら](https://drive.google.com/drive/folders/1eJMEdt4WbU-W6MPXlNTkIhZtwpof0HcO?usp=sharing)。 -- zip ファイルを展開し、`.db3` ファイルのパスをパラメーター `path_bag_without_object` と `path_bag_with_object` に設定します。 -- 以下のコマンドでテストを開始できます。 ```bash ros2 launch reaction_analyzer reaction_analyzer.launch.xml running_mode:=perception_planning vehicle_model:=sample_vehicle sensor_model:=awsim_labs_sensor_kit map_path:=[MAP_PATH] ``` -- 最初に perception_planning モードでツールを実行する際、初期化が予想より長引く場合があります。処理が完了するまでしばらくお待ちください。 +- ツールを `perception_planning` モードで初回実行すると、初期化に予想より時間がかかる場合があります。プロセスが完了するまでしばらくお待ちください。 -コマンドを実行すると、 `e2e_simulator` と `reaction_analyzer` が起動します。自動的にテストが開始されます。テストが完了すると、定義した `output_file_path` に結果が保存されます。 +コマンド後、 `e2e_simulator` と `reaction_analyzer` が起動します。自動的にテストが開始されます。テストが完了すると、結果は定義した `output_file_path` に保存されます。 -#### 準備されたテスト環境 +#### 準備したテスト環境 -**障害物なしのシーン:** +**対象物のないシーン:** ![sc1-awsim.png](media%2Fsc1-awsim.png) ![sc1-rviz.png](media%2Fsc1-rviz.png) -**障害物のあるシーン:** +**対象物のあるシーン:** ![sc2-awsim.png](media%2Fsc2-awsim.png) ![sc2-rviz.png](media%2Fsc2-rviz.png) ### カスタムテスト環境 -**カスタムテスト環境でリアクションアナライザを実行する場合は、パラメータの一部を再定義する必要があります。 -再定義する必要があるパラメータは `initialization_pose`, `entity_params`, `goal_pose`, `topic_publisher` (`perception_planning` モード用)パラメータです。** +**カスタムテスト環境でリアクションアナライザーを実行するには、いくつかのパラメーターを再定義する必要があります。再定義する必要があるパラメーターは、`initialization_pose`、`entity_params`、`goal_pose`、および`topic_publisher`(`perception_planning` モードの場合)のパラメーターです。** + +- `initialization_pose`、`entity_params`、`goal_pose` を設定するには: +- AWSIM 環境を実行します。AWSIM のチュートリアルは [こちら](https://autowarefoundation.github.io/AWSIM/main/GettingStarted/QuickStartDemo/) でご覧いただけます。 +- 次のコマンドで `e2e_simulator` を実行します。 -- `initialization_pose`, `entity_params`, `goal_pose` を設定するには: -- AWSIM 環境を実行します。AWSIM のチュートリアルは [こちら](https://autowarefoundation.github.io/AWSIM/main/GettingStarted/QuickStartDemo/) からご覧いただけます。 -- 次のコマンドで e2e_simulator を実行します。 ```bash ros2 launch autoware_launch e2e_simulator.launch.xml vehicle_model:=sample_vehicle sensor_model:=awsim_labs_sensor_kit map_path:=[MAP_PATH] ``` -- EGO が初期化された後、RViz の `2D Pose Estimate` ボタンを使用して、自車を希望の位置に配置できます。 -- 自車が希望の位置に配置された後、交通管制を利用してダミー障害物を配置してください。交通管制セクションには Esc キーを押してアクセスできます。 +- EGOが初期化されたら、RViz内の「2D Pose Estimate」ボタンを使用して、目的の場所に自車位置を配置できます。 +- EGOが所定の位置に配置されたら、交通管制を使用して、ダミー障害物を特定します。'ESC'キーを押して交通制御セクションにアクセスできます。 -**EGO とダミー車両を配置したら、これらのエンティティの位置を `reaction_analyzer.param.yaml` 内の地図フレームに書き込む必要があります。この方法:** +**EGOとダミー車両を特定したら、`reaction_analyzer.param.yaml`内のマップフレームで、これらのエンティティの位置を記述する必要があります。これを実現するには:** -- `/awsim/ground_truth/vehicle/pose` トピックから初期化ポーズを取得します。 -- `/perception/object_recognition/objects` トピックからエンティティのパラメータを取得します。 -- `/planning/mission_planning/goal` トピックから目標ポーズを取得します。 +- `/awsim/ground_truth/vehicle/pose`トピックから初期化ポーズを取得します。 +- `/perception/object_recognition/objects`トピックからエンティティパラメーターを取得します。 +- `/planning/mission_planning/goal`トピックからゴールポーズを取得します。 -**注:`initialization_pose` は `planning_control` モードでのみ有効です。** +**追伸: `initialization_pose`は`planning_control`モードだけに有効です。** + +- パラメーターが記録されたら、テストにROSバッグを記録する必要があります。ROSバッグを記録するには、次のコマンドを使用できます。 -- パラメータが記録された後、テスト用の ROS バッグを記録する必要があります。ROS バッグを記録するには、次のコマンドを使用できます。 ```bash ros2 bag record --all ``` -- オブジェクトがない状態とオブジェクトがある状態の 2 つの rosbag を記録する必要があります。トラフィックコントローラーを使用して、EGO ビークルの前にオブジェクトを生成するか削除できます。 +- オブジェクトなしとオブジェクトありの2つのROSバッグを記録する必要があります。交通管制を使用して、EGO車両の前面にオブジェクトを生成したり、削除したりできます。 -**注: 記録時に同じ環境で EGO ビークルの同じ位置を使用する必要があります。記録中に Autoware を実行する必要はありません。** +**注意: 同じ環境で同一のEGO車両位置でROSバッグを記録する必要があります。記録中にAutowareを実行する必要はありません。** -- Rosbag を記録したら、`path_bag_without_object` パラメータと `path_bag_with_object` パラメータに、記録された rosbag のパスを設定できます。 +- ROSバッグを記録したら、`path_bag_without_object`パラメータと`path_bag_with_object`パラメータを記録されたROSバッグのパスで設定できます。 ## 結果 -結果は `csv` ファイル形式で保存され、定義した `output_file_path` に書き込まれます。メッセージのヘッダータイムスタンプを使用して Autoware の各パイプラインを表示し、各ノードの `ノード遅延`、`パイプライン遅延`、および `合計遅延` をレポートします。 +結果は`csv`ファイル形式で保存され、定義した`output_file_path`に出力されます。メッセージのヘッダタイムスタンプを使用してAutowareの各パイプラインを示し、各ノードの`Node Latency`、`Pipeline Latency`、および`Total Latency`を報告します。 -- `ノード遅延`: 直前のノードの反応タイムスタンプと現在のノードの反応タイムスタンプの時差です。パイプライン内の最初のノードの場合、`パイプライン遅延` と同じです。 -- `パイプライン遅延`: メッセージの公開時間とパイプラインヘッダー時間の時差です。 -- `合計遅延`: メッセージの公開タイムスタンプと障害物の生成コマンドが送信されたタイムスタンプの時差です。 +- `Node Latency`: 前のノードと現在のノードのリアクションタイムスタンプの時間差。パイプラインの最初のノードの場合は、`Pipeline Latency`と同じです。 +- `Pipeline Latency`: メッセージの公開時間とPipeline Header時間の時間差。 +- `Total Latency`: メッセージの公開タイムスタンプと障害物出現コマンドが送信されたタイムスタンプの時間差。 ## パラメータ -| 名称 | タイプ | 説明 | -| ---------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ | -| `timer_period` | double | [s] メイン処理タイマーのピリオド。 | -| `test_iteration` | int | テストの繰り返し回数。 | -| `output_file_path` | string | テスト結果と統計情報を格納するディレクトリパス。 | -| `spawn_time_after_init` | double | [s] オブジェクトをスポーンする前の初期化後のタイムディレイ。 `perception_planning` モードでのみ有効。 | -| `spawn_distance_threshold` | double | [m] オブジェクトスポーンの距離しきい値。 `planning_control` モードでのみ有効。 | -| `poses.initialization_pose` | struct | 車両の初期姿勢で `x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。 `planning_control` モードでのみ有効。 | -| `poses.entity_params` | struct | エンティティ(障害物など)のパラメータで `x`, `y`, `z`, `roll`, `pitch`, `yaw`, `x_dimension`, `y_dimension`, `z_dimension` を含む。 | -| `poses.goal_pose` | struct | 車両のゴール姿勢で `x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。 | -| `topic_publisher.path_bag_without_object` | string | オブジェクトなしの ROS バッグファイルへのパス。 `perception_planning` モードでのみ有効。 | -| `topic_publisher.path_bag_with_object` | string | オブジェクトありの ROS バッグファイルへのパス。 `perception_planning` モードでのみ有効。 | -| `topic_publisher.spawned_pointcloud_sampling_distance` | double | [m] スポーンされたオブジェクトの点群のサンプリング距離。 `planning_control` モードでのみ有効。 | -| `topic_publisher.dummy_perception_publisher_period` | double | [s] ダミー知覚データの公開周期。 `planning_control` モードのみ有効。 | -| `topic_publisher.pointcloud_publisher.pointcloud_publisher_type` | string | PointCloud2 メッセージの公開方法を定義します。上記で説明したモード。 | -| `topic_publisher.pointcloud_publisher.pointcloud_publisher_period` | double | [s] PointCloud2 メッセージの公開周期。 | -| `topic_publisher.pointcloud_publisher.publish_only_pointcloud_with_object` | bool | デフォルトは false。オブジェクトのある点群メッセージのみを公開します。 | -| `reaction_params.first_brake_params.debug_control_commands` | bool | デバッグ公開フラグ。 | -| `reaction_params.first_brake_params.control_cmd_buffer_time_interval` | double | [s] 制御コマンドのバッファー処理のタイムインターバル。 | -| `reaction_params.first_brake_params.min_number_descending_order_control_cmd` | int | ブレーキトリガーの降順制御コマンドの最小数。 | -| `reaction_params.first_brake_params.min_jerk_for_brake_cmd` | double | [m/s³] ブレーキコマンドを発行するための最小ジャーク値。 | -| `reaction_params.search_zero_vel_params.max_looking_distance` | double | [m] 軌道上でゼロ速度を探すための最大探索距離。 | -| `reaction_params.search_entity_params.search_radius` | double | [m] スポーンされたエンティティの検索半径。自己位置とエンティティ位置間の距離。 | -| `reaction_chain` | struct | トピックとそのトピックのメッセージタイプを持つノードのリスト。 | - -## 制限 - -- 反応解析器は、`PublisherMessageType`、`SubscriberMessageType`、`ReactionType` などの制限があります。現時点では以下のリストをサポートしています。 - -- **Publisher メッセージ タイプ:** +| 名前 | 型 | 説明 | +| --------------------------------------------------------------------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `timer_period` | double | [s] メイン処理タイマーの周期。 | +| `test_iteration` | int | テストの反復回数。 | +| `output_file_path` | 文字列 | テスト結果と統計情報が保存されるディレクトリパス。 | +| `spawn_time_after_init` | double | [s] 物体をスポーンする前の初期化後の時間遅延。`perception_planning` モードでのみ有効。 | +| `spawn_distance_threshold` | double | [m] 物体をスポーンするための距離閾値。`planning_control` モードでのみ有効。 | +| `poses.initialization_pose` | 構造体 | 車両の初期ポーズ。`x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。`planning_control` モードでのみ有効。 | +| `poses.entity_params` | 構造体 | エンティティ(例:障害物)のパラメータ。`x`, `y`, `z`, `roll`, `pitch`, `yaw`, `x_dimension`, `y_dimension`, `z_dimension` を含む。 | +| `poses.goal_pose` | 構造体 | 車両の目標ポーズ。`x`, `y`, `z`, `roll`, `pitch`, `yaw` フィールドを含む。 | +| `topic_publisher.path_bag_without_object` | 文字列 | オブジェクトを含まない ROS バッグファイルへのパス。`perception_planning` モードでのみ有効。 | +| `topic_publisher.path_bag_with_object` | 文字列 | オブジェクトを含む ROS バッグファイルへのパス。`perception_planning` モードでのみ有効。 | +| `topic_publisher.spawned_pointcloud_sampling_distance` | double | [m] スポーンされたオブジェクトの点群のサンプル距離。`planning_control` モードでのみ有効。 | +| `topic_publisher.dummy_perception_publisher_period` | double | [s] ダミー知覚データのパブリッシング周期。`planning_control` モードでのみ有効。 | +| `topic_publisher.pointcloud_publisher.pointcloud_publisher_type` | 文字列 | PointCloud2 メッセージのパブリッシュ方法を定義します。上記で説明したモードがあります。 | +| `topic_publisher.pointcloud_publisher.pointcloud_publisher_period` | double | [s] PointCloud2 メッセージのパブリッシング周期。 | +| `topic_publisher.pointcloud_publisher.publish_only_pointcloud_with_object` | bool | デフォルトは false。オブジェクトを含む点群メッセージのみをパブリッシュします。 | +| `reaction_params.first_brake_params.debug_control_commands` | bool | デバッグパブリッシュフラグ。 | +| `reaction_params.first_brake_params.control_cmd_buffer_time_interval` | double | [s] コントロールコマンドのバッファリング時間間隔。 | +| `reaction_params.first_brake_params.min_number_descending_order_control_cmd` | int | ブレーキ作動のトリガーとなる降順制御コマンドの最小数。 | +| `reaction_params.first_brake_params.min_jerk_for_brake_cmd` | double | [m/s³] ブレーキコマンドを発行するための最小ジャーク値。 | +| `reaction_params.search_zero_vel_params.max_looking_distance` | double | [m] 軌道上のゼロ速度の最大探索距離 | +| `reaction_params.search_entity_params.search_radius` | double | [m] スポーンされたエンティティの検索半径。自己位置とエンティティのポーズとの距離。 | +| `reaction_chain` | 構造体 | トピックとそのトピックのメッセージ型を含むノードのリスト。 | + +## 制限事項 + +- Reaction analyzerには`PublisherMessageType`、 `SubscriberMessageType`、 `ReactionType`などいくつかの制限があります。現時点では、次のリストをサポートしています。 + +- **パブリッシャーメッセージタイプ:** - `sensor_msgs/msg/PointCloud2` - `sensor_msgs/msg/CameraInfo` @@ -160,7 +162,7 @@ ros2 bag record --all - `autoware_vehicle_msgs/msg/TurnIndicatorsReport` - `autoware_vehicle_msgs/msg/VelocityReport` -- **Subscriber メッセージ タイプ:** +- **サブスクライバーメッセージタイプ:** - `sensor_msgs/msg/PointCloud2` - `autoware_perception_msgs/msg/DetectedObjects` @@ -169,11 +171,12 @@ ros2 bag record --all - `autoware_planning_msgs/msg/Trajectory` - `autoware_control_msgs/msg/Control` -- **反応のタイプ:** +- **リアクションタイプ:** - `FIRST_BRAKE` - `SEARCH_ZERO_VEL` - `SEARCH_ENTITY` -## 将来の改善点 +## 今後の改善 + +- リアクションタイプを追加することで、リアクションアナライザーを改善できます。現時点でサポートされているリアクションタイプは`FIRST_BRAKE`、 `SEARCH_ZERO_VEL`、 `SEARCH_ENTITY`のみです。各メッセージタイプに対してリアクションタイプを追加することで、拡張できます。 -- 反応分析は、より多くの反応タイプを追加することで改善できます。現在サポートしているのは `FIRST_BRAKE`、`SEARCH_ZERO_VEL`、`SEARCH_ENTITY` だけです。メッセージ タイプごとに反応タイプを追加することで拡張できます。 diff --git a/vehicle/autoware_accel_brake_map_calibrator/README.md b/vehicle/autoware_accel_brake_map_calibrator/README.md index 5b3227d64aaff..11a74162c92e4 100644 --- a/vehicle/autoware_accel_brake_map_calibrator/README.md +++ b/vehicle/autoware_accel_brake_map_calibrator/README.md @@ -1,175 +1,181 @@ # accel_brake_map_calibrator -本ノードの役割は、`autoware_raw_vehicle_cmd_converter` ノードで使用される `accel_map.csv` / `brake_map.csv` を自動的に較正することです。 +このノードの役割は、`autoware_raw_vehicle_cmd_converter`ノードで使用される`accel_map.csv` / `brake_map.csv` を自動的に較正することです。 -基本マップ(デフォルトはlexusのもの)が、ロードされた運転データで反復的に更新されます。 +デフォルトでレクサスの基本マップがロードされた走行データで反復的に更新されます。 ## 較正方法 -### キャリブレータの起動 +### キャリブレーターの起動 + +Autowareを起動した後、次のコマンドで`autoware_accel_brake_map_calibrator`を実行し、自動運転を実施します。注: 自動運転時と同じ車両インターフェイスを使用できる場合(例: ジョイスティックを使用する場合)は、手動運転でデータを収集できます。 -Autoware の起動後、次のコマンドで `autoware_accel_brake_map_calibrator` を実行し、自律走行を行います。注:自律走行中に同じ車両インターフェイスを使用できる場合は、手動走行でもデータを収集できます(例:ジョイスティックの使用)。 ```sh ros2 launch autoware_accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true ``` -もしrosbagファイルを使用したい場合は、以下のコマンドを実行してください。 +ROSbagファイルを使用する場合は、以下のコマンドを実行してください。 + ```sh ros2 launch autoware_accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true use_sim_time:=true ros2 bag play --clock ``` -**キャリブレーション** - -パラメータ `progress_file_output` を true に設定してキャリブレーションすると、ログファイルが [autoware_accel_brake_map_calibrator ディレクトリ]/config/ に出力されます。キャリブレーション後は、[autoware_accel_brake_map_calibrator ディレクトリ]/config/accel_map.csv および [autoware_accel_brake_map_calibrator ディレクトリ]/config/brake_map.csv でアクセルマップとブレーキマップを確認できます。 +キャリブレーションでパラメータ`progress_file_output`をtrueに設定すると、ログファイルは[autoware_accel_brake_map_calibrator*ディレクトリ]/config/に出力されます。キャリブレーション後は、[autoware_accel_brake_map_calibrator*ディレクトリ]/config/accel_map.csvおよび[autoware_accel_brake_map_calibrator*ディレクトリ]/config/brake_map.csvでアクセルとブレーキのマップを確認することもできます。 ### キャリブレーションプラグイン -`rviz:=true` オプションを使用すると、RViz が以下のキャリブレーションプラグインと一緒に表示されます。 +`rviz:=true`オプションは、以下のようにキャリブレーションプラグイン付きのRVizを表示します。

-現在の状態(速度とペダル)がプラグインに表示されます。現在のセルの色は、現在のデータが有効か無効かに応じて緑色または赤色で変わります。次の条件を満たさないデータは無効と見なされ、推定には使用されません。これは、過激なデータ(ペダルが急速に移動しているときなど)がキャリブレーションの精度を低下させるためです。 +現在の状態(速度とペダル)はプラグインに表示されます。現在のセルの色は、現在のデータが有効/無効に応じて緑色/赤色に変化します。次のような条件を満たさないデータは無効とみなされ、推定に使用されません。積極的なデータ(例: ペダルが高速で動いている場合)が不十分なキャリブレーション精度を引き起こすためです。 -- 速度とペダルの状態がインデックス値から一定の範囲内にある -- ステア値、ペダル速度、ピッチ値などが対応するしきい値よりも小さい -- 速度がしきい値よりも大きい +- 速度とペダルの状態は、インデックス値からの特定の範囲内にある。 +- ステア値、ペダル速度、ピッチ値などが対応するしきい値よりも小さい。 +- 速度はしきい値より大きい。 詳細なパラメータは、パラメータセクションで説明されています。 -**注:**キャリブレーション中は、現在の状態が赤色か緑色かを気にしないでください。すべてのセルが赤色になるまでデータを取得し続ければ十分です。 +注意: キャリブレーション中は、現在の状態が赤または緑であるかどうかを心配する必要はありません。すべてのセルが赤くなるまでデータを収集し続けるだけです。 -マップ内の各セルの値は最初は灰色ですが、そのセル内の有効なデータの数が蓄積されるにつれて青色から赤色に変化します。マップの各セルが赤色に近くなるまでキャリブレーションを続けることをお勧めします。特に、停止付近の性能は 0 ~ 6 m/s の速度と +0.2 ~ -0.4 のペダル値に大きく依存するため、これらの領域に焦点を当てることが望ましいです。 +マップの各セルの値は最初はグレーで、セルの有効なデータの数が蓄積されると青から赤に変化します。マップの各セルが赤に近づくまでキャリブレーションを続行することをお勧めします。特に停止時の性能は0~6m/sの速度と+0.2~-0.4のペダル値の範囲に大きく依存するため、これらの領域に焦点を当てることが望まれます。 ### 診断 -`accel brake map_calibrator` はキャリブレーションのステータスに応じて診断メッセージを発行します。診断タイプ `WARN` は、現在のアクセル/ブレーキマップが不正確であると推定されることを示します。この状況では、アクセル/ブレーキマップの再キャリブレーションを実行することを強くお勧めします。 +`accel brake map_calibrator`は、キャリブレーションステータスに応じて診断メッセージを発行します。診断タイプ`WARN`は、現在のアクセル/ブレーキマップが不正確であると推定されることを示します。この状況では、accel/ブレーキマップの再キャリブレーションを実行することを強くお勧めします。 -| 状態 | 診断タイプ | 診断メッセージ | 説明 | -| ---------------------- | ---------- | --------------------------------------------------------- | --------------------------------------------------------- | -| キャリブレーション不要 | `OK` | "OK" | | -| キャリブレーション必要 | `WARN` | "アクセル/ブレーキマップのキャリブレーションが必要です。" | 現在のアクセル/ブレーキマップの精度は低いかもしれません。 | +| 状態 | 診断タイプ | 診断メッセージ | 説明 | +| ----------------------- | ---------------- | ------------------------------------------ | --------------------------------------------------- | +| キャリブレーション不要 | `OK` | "OK" | | +| キャリブレーション必要 | `WARN` | "アクセル/ブレーキマップのキャリブレーションが必要です。" | 現在のアクセル/ブレーキマップの精度は低いかもしれません。 | + +この診断ステータスは、次のROSトピックでも確認できます。 -この診断ステータスは、以下のROSトピックでも確認できます。 ```sh ros2 topic echo /accel_brake_map_calibrator/output/update_suggest ``` -診断タイプが `WARN` の場合、このトピックに `True` がパブリッシュされ、accel/brake マップの更新が提案されます。 +診断の種類が `WARN` の場合、True がこのトピックにパブリッシュされ、アクセル/ブレーキマップの更新が推奨されます。 -### accel / brake マップ精度の評価 +### アクセル / ブレーキマップ精度の評価 -マップの精度は、観測加速度と予測加速度の **2乗平均平方根誤差 (RMSE)** で評価されます。 +マップの精度は、観測加速度と予測加速度の **二乗平均平方根誤差 (RMSE)** で評価されます。 **用語:** -- `観測加速度`: ホイール速度の微分から計算される現在の車両の加速度。 +- `観測加速度`: 車輪速度の導関数として計算された現在の車両加速度。 + +- `予測加速度`: Autoware が期待する元のアクセル/ブレーキマップの出力。この値は現在のペダルと速度を使用して計算されます。 -- `予測加速度`: Autoware が期待する、accel/brake マップの元の出力。この値は、現在のペダルと速度を使用して計算されます。 +次のトピックで追加のエラー情報をチェックできます。 -以下のトピックで追加のエラー情報を確認できます。 +- `/accel_brake_map_calibrator/output/current_map_error` : `csv_path_accel/brake_map` パスに設定された元のマップのエラー。この値が大きい場合、元のマップは正確ではありません。 +- `/accel_brake_map_calibrator/output/updated_map_error` : このノードでキャリブレーションされたマップのエラー。この値が大きい場合、キャリブレーションの品質は低くなります。 +- `/accel_brake_map_calibrator/output/map_error_ratio` : 元のマップと更新されたマップのエラー比 (ratio = updated / current)。この値が 1 未満の場合、マップを更新することをお勧めします。 -- `/accel_brake_map_calibrator/output/current_map_error` : `csv_path_accel/brake_map` パスで設定された元のマップのエラー。この値が大きい場合、元のマップは正確ではありません。 -- `/accel_brake_map_calibrator/output/updated_map_error` : このノードで較正されたマップのエラー。この値が大きい場合、較正品質は低いです。 -- `/accel_brake_map_calibrator/output/map_error_ratio` : 元のマップと更新されたマップのエラー率 (比率 = 更新 / 現在のマップ)。この値が 1 未満の場合、マップを更新することが望ましいです。 +### キャリブレーションデータの視覚化方法 -### 較正データを視覚化する +キャリブレーションの処理は次のように視覚化できます。これらのスクリプトにはキャリブレーションのログ出力が必要なので、視覚化のためにキャリブレーションを実行中は `pedal_accel_graph_output` パラメーターを true に設定する必要があります。 -較正のプロセスは以下のように視覚化できます。これらのスクリプトには較正のログ出力が必要なので、視覚化のために較正を実行している間は `pedal_accel_graph_output` のパラメータを true に設定する必要があります。 +#### 加速度とペダル間の関係のグラフを視覚化 -#### アクセルと加速度の関係のグラフを視覚化する +次のコマンドは、キャリブレーションで使用されるデータのグラフを表示します。速度範囲の各グラフには、ペダルと加速度の関係の分布と、ピッチ角に応じた色の付いた生のデータポイントが表示されます。 -以下のコマンドで、較正で使用されたデータのプロットを表示します。各速度範囲のプロットでは、ペダルと加速度の関係が分布表示されており、ピッチ角に応じて色付けされた生のデータポイントが含まれています。 ```sh ros2 run autoware_accel_brake_map_calibrator view_plot.py ``` -#### 加速度/速度/ペダルのデータに関する統計を視覚化 +#### 加速度/速度/ペダル データに関する統計値を可視化する -以下のコマンドは、キャリブレーションの統計を示します。 +次のコマンドは、キャリブレーションの統計値を示します。 - 平均値 - 標準偏差 - データ数 -各地図セル内のすべてのデータについて。 +各マップセルの全データの値です。 + ```sh ros2 run autoware_accel_brake_map_calibrator view_statistics.py ``` -### キャリブレートされた加速 / ブレーキマップをいつでも保存する方法 +### アクセルとブレーキの較正済みマップの随時保存方法 + +以下のコマンドを使用して、アクセルとブレーキのマップを随時に保存できます。 -次のコマンドでいつでも加速およびブレーキマップを保存できます。 ```sh ros2 service call /accel_brake_map_calibrator/update_map_dir tier4_vehicle_msgs/srv/UpdateAccelBrakeMap "path: ''" ``` -AutowareでAccel_map.csv/brake_map.csvを読み込むデフォルトのディレクトリにaccelマップとブレーキマップを保存するには、RVizプラグイン(AccelBrakeMapCalibratorButtonPanel)を使用します。 +以下の手順で、Autowareが accel_map.csv/brake_map.csv を読み込む既定のディレクトリに、アクセルおよびブレーキマップを RViz プラグイン (AccelBrakeMapCalibratorButtonPanel) を使用して保存できます。 -1.「パネル」タブをクリックして、AccelBrakeMapCalibratorButtonPanelを選択します。 +1. _パネル_タブをクリックし、AccelBrakeMapCalibratorButtonPanel を選択します。 -![add_panel](./media/add_panel.png) + ![add_panel](./media/add_panel.png) -2.パネルを選択すると、ボタンがRVizの下部に表示されます。 +2. パネルを選択すると、ボタンが RViz の下部に表示されます。 -![calibrator_button_panel](./media/calibrator_button_panel.png) + ![calibrator_button_panel](./media/calibrator_button_panel.png) -3.ボタンを押すと、accel /ブレーキマップが保存されます。(キャリブレーターノードが実行されていない場合など、特定の状況ではボタンを押せません。) +3. ボタンを押すと、アクセル/ブレーキマップが保存されます。 + (キャリブレーターノードが実行中でないなどの状況では、ボタンを押せません。) -![push_calibration_button](./media/push_calibration_button.png) + ![push_calibration_button](./media/push_calibration_button.png) -## パラメータ +## パラメーター -## システムパラメータ +## システムパラメーター -| 名称 | タイプ | 説明 | デフォルト値 | -| :----------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- | -| update_method | string | マップのキャリブレーション手法を選択できます。"update_offset_each_cell" は、マップ上の各グリッドセルのオフセットを計算します。 "update_offset_total" は、マップの合計オフセットを計算します。 | "update_offset_each_cell" | -| get_pitch_method | string | "tf": tf からピッチを取得する、"none": ピッチ検証とピッチ補正を実行できません。 | "tf" | -| pedal_accel_graph_output | bool | true の場合、ペダルアクセルのログを出力します。 | true | -| progress_file_output | bool | true の場合、更新プロセスのログと CSV ファイルを出力します。 | false | -| default_map_dir | str | デフォルトのマップディレクトリ | [autoware_raw_vehicle_cmd_converter のディレクトリ]/data/default/ | -| calibrated_map_dir | str | キャリブレーションされたマップディレクトリ | [autoware_accel_brake_map_calibrator のディレクトリ]/config/ | -| update_hz | double | 更新の Hz | 10.0 | +| 名目 | 型 | 説明 | デフォルト値 | +| :----------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- | +| update_method | 文字列 | 地図較正手法を選択できます。"update_offset_each_cell" は地図上の各グリッドセルのオフセットを計算します。"update_offset_total" は地図の総オフセットを計算します。 | "update_offset_each_cell" | +| get_pitch_method | 文字列 | "tf": tfからピッチを取得、"none": ピッチ検証およびピッチ補正を実行できません | "tf" | +| pedal_accel_graph_output | ブール | trueの場合、アクセルグラフのログが出力されます。 | true | +| progress_file_output | ブール | trueの場合、更新プロセスのログとcsvファイルが出力されます。 | false | +| default_map_dir | 文字列 | デフォルトマップのディレクトリ | [directory of *autoware_raw_vehicle_cmd_converter*]/data/default/ | +| calibrated_map_dir | 文字列 | 校正済み地図のディレクトリ | [directory of *autoware_accel_brake_map_calibrator*]/config/ | +| update_hz | double | 更新のhz | 10.0 | ## アルゴリズムパラメータ -| 名称 | 種別 | 説明 | デフォルト値 | -| :----------------------- | :----- | :--------------------------------------------------------------------------------------------------------- | :----------- | -| initial_covariance | double | 初期加速度マップの共分散 (共分散が大きいほど更新速度が向上) | 0.05 | -| velocity_min_threshold | double | これより小さい速度は更新に使用されない。 | 0.1 | -| velocity_diff_threshold | double | 速度データがこのしきい値よりグリッド参照速度 (中央値) から離れている場合、関連データは更新に使用されない。 | 0.556 | -| max_steer_threshold | double | ステアリング角度がこの値より大きい場合、関連データは更新に使用されない。 | 0.2 | -| max_pitch_threshold | double | ピッチ角度がこの値より大きい場合、関連データは更新に使用されない。 | 0.02 | -| max_jerk_threshold | double | 自車加速度から計算された自車ジャークがこの値より大きい場合、関連データは更新に使用されない。 | 0.7 | -| pedal_velocity_thresh | double | ペダル移動速度がこの値より大きい場合、関連データは更新に使用されない。 | 0.15 | -| pedal_diff_threshold | double | 現在ペダル値がこのしきい値より前の値から離れている場合、関連データは更新に使用されない。 | 0.03 | -| max_accel | double | 速度ソースから計算される加速度の最大値。 | 5.0 | -| min_accel | double | 速度ソースから計算される加速度の最小値。 | -5.0 | -| pedal_to_accel_delay | double | 加速度への actuation_cmd との間の遅延時間 (更新ロジックで考慮)。 | 0.3 | -| update_suggest_thresh | double | RMSE 比率がこの値になる更新の提案フラグ (RMSE 比率: [新しいマップの RMSE] / [元のマップの RMSE])。 | 0.7 | -| max_data_count | int | 視覚化用。各グリッドのデータ数がこの値になると、グリッドの色が赤になる。 | 100 | -| accel_brake_value_source | string | 加速度/ブレーキソースとして actuation_status または actuation_command を使用するかどうか。 | status | - -## テストユーティリティースクリプト - -### 定常加速/制動コマンドテスト - -これらのスクリプトは、加速/制動マップ較正のテストに役立ちます。これらは、ユーザーがCLIを介して対話的に与える定数の加速/制動値を持つ`ActuationCmd`を生成します。 +| 名前 | タイプ | 説明 | デフォルト値 | +| :----------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| initial_covariance | double | 初期加速度マップの共分散(共分散が大きいほど、更新速度が速くなる) | 0.05 | +| velocity_min_threshold | double | この閾値より小さい速度は更新に使用されません。 | 0.1 | +| velocity_diff_threshold | double | 速度データがグリッド基準速度(中央値)からこの閾値以上離れている場合、関連データは更新に使用されません。 | 0.556 | +| max_steer_threshold | double | ステアリングアングルがこの値を超えると、関連データは更新に使用されません。 | 0.2 | +| max_pitch_threshold | double | ピッチアングルがこの値を超えると、関連データは更新に使用されません。 | 0.02 | +| max_jerk_threshold | double | 自己位置から計算された自己ジャークがこの値を超えると、関連データは更新に使用されません。 | 0.7 | +| pedal_velocity_thresh | double | ペダル移動速度がこの値を超えると、関連データは更新に使用されません。 | 0.15 | +| pedal_diff_threshold | double | 現在のペダル値が前の値からこの閾値以上離れている場合、関連データは更新に使用されません。 | 0.03 | +| max_accel | double | 速度ソースから計算された加速度の最大値。 | 5.0 | +| min_accel | double | 速度ソースから計算された加速度の最小値。 | -5.0 | +| pedal_to_accel_delay | double | 更新ロジックで考慮される、actuation_cmd から加速度までの遅延時間。 | 0.3 | +| update_suggest_thresh | double | RMSE 比が真の更新フラグになる閾値。 (RMSE 比: [新しいマップの RMSE] / [元のマップの RMSE] ) | 0.7 | +| max_data_count | int | 視覚化向け。各グリッドのデータ数がこの値になると、グリッドの色が赤くなります。 | 100 | +| accel_brake_value_source | string | 加速度/ブレーキのソースとして、actuation_status または actuation_command のどちらを使用するか。値 | status | + +## テストユーティリティスクリプト + +### 定常加/減速コマンドテスト + +これらのスクリプトは、加速度/ブレーキマップのキャリブレーションをテストするために役立ちます。これらは、ユーザーがCLIを介してインタラクティブに指定した定常加/減速度値を持つ`ActuationCmd`を生成します。 - accel_tester.py - brake_tester.py - actuation_cmd_publisher.py -`accel/brake_tester.py`は、CLIからターゲットの加速/制動コマンドを受け取ります。ターゲット値を`actuation_cmd_publisher.py`に送信し、これが`ActuationCmd`を生成します。次のコマンドを別のターミナルで実行して、これらのスクリプトを実行でき、以下のスクリーンショットのようになります。 +`accel/brake_tester.py`は、CLIからターゲット加速度/ブレーキコマンドを受信します。ターゲット値を`actuation_cmd_publisher.py`に送信し、それによって`ActuationCmd`が生成されます。次のコマンドを別の端末で実行してこれらのスクリプトを実行できます。以下にスクリーンショットを示します。 + ```bash ros2 run autoware_accel_brake_map_calibrator accel_tester.py @@ -179,42 +185,42 @@ ros2 run autoware_accel_brake_map_calibrator actuation_cmd_publisher.py ![actuation_cmd_publisher_util](./media/actuation_cmd_publisher_util.png) -## 校正手法 +## キャリブレーション方法 -2つのアルゴリズム、[update_offset_four_cell_around](#update_offset_four_cell_around-1)と[update_offset_each_cell](#update_offset_each_cell)が加速度マップ更新用に選択できます。詳細についてはリンクを参照してください。 +2つのアルゴリズム([update_offset_four_cell_around](#update_offset_four_cell_around-1)と[update_offset_each_cell](#update_offset_each_cell))が加速度マップ更新用に選択できます。詳細はリンクを参照してください。 ### データの前処理 -校正の前に、欠損または使用不能なデータ(例:ハンドル角が大きすぎる)をまず取り除く必要があります。以下のパラメーターは、除去するデータを決定するために使用されます。 +キャリブレーションの前に、不完全または使用できないデータ(例:ハンドル角度が大きすぎるなど)を最初に排除する必要があります。以下のパラメータは、削除するデータの決定に使用されます。 -#### パラメーター +#### パラメータ -| 名 | 説明 | デフォルト値 | -| ---------------------- | -------------------------- | ------------ | -| velocity_min_threshold | 最小速度を除外 | 0.1 | -| max_steer_threshold | 大きなステアリング角を除外 | 0.2 | -| max_pitch_threshold | 大きなピッチ角を除外 | 0.02 | -| max_jerk_threshold | 大きなジャークを除外 | 0.7 | -| pedal_velocity_thresh | 大きなペダリング速度を除外 | 0.15 | +| 名前 | 説明 | デフォルト値 | +|--------------------------|----------------------------------|---------------| +| velocity_min_threshold | 最小速度を除外 | 0.1 | +| max_steer_threshold | 大きな操舵角を除外 | 0.2 | +| max_pitch_threshold | 大きなピッチ角を除外 | 0.02 | +| max_jerk_threshold | 大きなジャークを除外 | 0.7 | +| pedal_velocity_thresh | 大きなペダル速度を除外 | 0.15 | ### update_offset_each_cell -各格子に十分近いデータを使用して、再帰的最小二乗法(RLS)手法で更新します。 +グリッドの近くに十分なデータを使用して、再帰的最小二乗法(RLS)手法で更新します。 -**利点** : 各グリッドに十分近いデータのみがキャリブレーションに使用されるため、各ポイントで正確な更新が可能です。 +**利点:** 各グリッドに十分に近いデータのみをキャリブレーションに使用するため、各ポイントで正確な更新が行えます。 -**欠点** : 除外するデータ量が多いため、キャリブレーションに時間がかかります。 +**欠点:** 除外するデータ量が多いため、キャリブレーションに時間がかかります。 #### パラメータ データの選択は、次のしきい値によって決定されます。 -| 名前 | 既定値 | -| ----------------------- | ------ | -| velocity_diff_threshold | 0.556 | -| pedal_diff_threshold | 0.03 | +| 名称 | デフォルト値 | +| ----------------------- | ------------- | +| velocity_diff_threshold | 0.556 | +| pedal_diff_threshold | 0.03 | -#### フォーミュラの更新 +#### 更新式 $$ \begin{align} @@ -226,20 +232,20 @@ $$ #### 変数 -| 変数名 | 記号 | -| ----------------- | ----------- | -| 共分散 | $p[n-1]$ | -| マップオフセット | $\theta[n]$ | -| forgetting factor | $\lambda$ | -| フィー | $x(=1)$ | -| 測定加速度 | $y$ | +| 変数名 | 記号 | +|---|---| +| 共分散 | $p[n-1]$ | +| マップオフセット | $\theta[n]$ | +| 減衰*係数* | $\lambda$ | +| フィー | $x(=1)$ | +| 計測加速度 | $y$ | ### update_offset_four_cell_around [1] -RLS(再帰的最小二乗法)により、新規取得データ周囲の 4 つのグリッドにおけるオフセットを更新します。この更新では、線形補間を考慮するため、適切な重み付けが適用されます。そのため、しきい値によるデータの除去を行う必要はありません。 +新しく取得したデータ周辺の4つのグリッドにおけるRLSによるオフセットの更新。線形補完を考慮することで、アップデートは適切な重み付けを考慮します。したがって、しきい値によりデータを削除する必要はありません。 -**利点:** 適切な重み付けを使用してデータ周囲の 4 つのグリッドにおいて更新を行うため、データが無駄になりません。 -**欠点:** データの極端なバイアスにより、精度の低下が発生する可能性があります。たとえば、図 2 の $Z_{RR}$ 付近でデータ $z(k)$ がバイアスされた場合、4 つの周囲点($Z_{RR}$、$Z_{RL}$、$Z_{LR}$、および $Z_{LL}$)で更新が実行されますが、$Z_{LL}$ の精度は期待できません。 +**利点**: 適切な重み付けによりデータ周辺の4つのグリッドに対してアップデートが実行されるため、データが無駄になりません。 +**欠点**: データの極端なバイアスにより、精度は低下する可能性があります。たとえば、図2でデータ$z(k)$が$Z_{RR}$付近でバイアスがかかっている場合、4つの周囲点($Z_{RR}$, $Z_{RL}$, $Z_{LR}$, $Z_{LL}$)で更新されますが、$Z_{LL}$の精度は期待できません。

@@ -248,10 +254,11 @@ RLS(再帰的最小二乗法)により、新規取得データ周囲の 4 #### 実装 -更新式については、[1] の式 (7)~(10) を参照してください。さらに、Anti-Windup については [1] の式 (17) および (18) が使用されます。 +更新された数式については[1]のeq.(7)-(10)を参照してください。さらに、[1]のeq.(17)、(18)がアンチ・ワインドアップに使用されます。 ### 参考資料 [1] [Gabrielle Lochrie, Michael Doljevic, Mario Nona, Yongsoon Yoon, Anti-Windup Recursive Least Squares Method for Adaptive Lookup Tables with Application to Automotive Powertrain Control Systems, IFAC-PapersOnLine, Volume 54, Issue 20, 2021, Pages 840-845](https://www.sciencedirect.com/science/article/pii/S240589632102320X) + diff --git a/vehicle/autoware_external_cmd_converter/README.md b/vehicle/autoware_external_cmd_converter/README.md index b45581cd767e1..fb9db7bdc8e27 100644 --- a/vehicle/autoware_external_cmd_converter/README.md +++ b/vehicle/autoware_external_cmd_converter/README.md @@ -1,73 +1,74 @@ # external_cmd_converter -`external_cmd_converter` は、アクセル/ブレーキマップを使用して目的のメカニカル入力を加速度と速度に変換するノードです。 +`external_cmd_converter` はアクセル/ブレーキマップを使用することで目的の機械的入力を加速度と速度に変換するノードです。 ## アルゴリズム -### 参照加速度と速度の計算方法 +### 目的の加速度と速度の計算方法 -参照加速度と速度は、外部制御コマンドのアクセルとブレーキ値から導出されます。 +目的の加速度と速度は外制御コマンドのアクセルとブレーキ値から導出されます。 -#### 参照加速度 +#### 目的の加速度 -参照加速度は、目的ペダル値と現在の速度に基づいて accel_brake_map から計算されます。 +目的の加速度は、desired_pedal の値と現在の速度に基づく accel_brake_map から計算されます。 $$ - ペダル_d = スロットル_d - ブレーキ_d, + pedal_d = throttle_d - brake_d, $$ $$ - acc_{ref} = Acc(ペダル_d, v_{x,現在}). + acc_{ref} = Acc(pedal_d, v_{x,current}). $$ -| パラメーター | 説明 | -| --------------- | --------------------------------------------------------------------------- | -| $throttle_d$ | 外部制御コマンドのアクセル値 (`~/in/external_control_cmd.control.throttle`) | -| $brake_d$ | 外部制御コマンドのブレーキ値 (`~/in/external_control_cmd.control.brake`) | -| $v_{x,current}$ | 現在縦速度 (`~/in/odometry.twist.twist.linear.x`) | -| Acc | accel_brake_map | +| パラメーター | 説明 | +|---|---| +| `$throttle_d$` | 外部制御コマンドのアクセル値 (`~/in/external_control_cmd.control.throttle`) | +| `$brake_d$` | 外部制御コマンドのブレーキ値 (`~/in/external_control_cmd.control.brake`) | +| `$v_{x,current}$` | 現在の縦速度 (`~/in/odometry.twist.twist.linear.x`) | +| Acc | acel_brake_map | -#### リファレンス速度 +#### 参照速度 -リファレンス速度は、現在の速度とリファレンス加速度に基づいて計算されます。 +参照速度は現在の速度と参照加速度に基づいて計算されます。 $$ v_{ref} = v_{x,current} + k_{v_{ref}} \cdot \text{sign}_{gear} \cdot acc_{ref}. $$ -| パラメータ | 説明 | -| -------------------- | ---------------------------------------------------------------------- | -| $acc_{ref}$ | 基準加速度 | -| $k_{v_{ref}}$ | 基準速度ゲイン | -| $\text{sign}_{gear}$ | ギアコマンド (`~/in/shift_cmd`) (Drive/Low: 1, Reverse: -1, その他: 0) | +| パラメータ | 説明 | +| -------------------- | --------------------------------------------------------------------- | +| $acc_{ref}$ | 参照加速度 | +| $k_{v_{ref}}$ | 参照速度ゲイン | +| $\text{sign}_{gear}$ | ギアコマンド (`~/in/shift_cmd`) (ドライブ/ロー: 1、リバース: -1、その他: 0) | ## 入力トピック -| 名称 | タイプ | 説明 | -| --------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------- | -| `~/in/external_control_cmd` | tier4_external_api_msgs::msg::ControlCommand | 目標`スロットル/ブレーキ/操舵角/操舵角速度`は、目的制御コマンドを計算するために必要。 | -| `~/input/shift_cmd"` | autoware_vehicle_msgs::GearCommand | 現在のギア状態。 | -| `~/input/emergency_stop` | tier4_external_api_msgs::msg::Heartbeat | 外部コマンドに対する緊急ハートビート。 | -| `~/input/current_gate_mode` | tier4_control_msgs::msg::GateMode | ゲートモード用のトピック。 | -| `~/input/odometry` | navigation_msgs::Odometry | オドメトリ内のツイストトピックが使用される。 | +| 名前 | 種類 | 説明 | +| ---------------------------- | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| `~/in/external_control_cmd` | `tier4_external_api_msgs::msg::ControlCommand` | target `throttle/brake/steering_angle/steering_angle_velocity`は目的の制御コマンドの計算に必要な制御コマンドです。 | +| `~/input/shift_cmd"` | `autoware_vehicle_msgs::GearCommand` | ギアの現在の指令 | +| `~/input/emergency_stop` | `tier4_external_api_msgs::msg::Heartbeat` | 外部コマンド用の非常心拍数 | +| `~/input/current_gate_mode` | `tier4_control_msgs::msg::GateMode` | ゲートモードのトピック | +| `~/input/odometry` | `navigation_msgs::Odometry` | オドメトリのツイストトピックを使用 | ## 出力トピック -| 名称 | タイプ | 説明 | -| ------------------- | ----------------------------------- | -------------------------------------------------- | -| `~/out/control_cmd` | autoware_control_msgs::msg::Control | 外部コマンドから変換したアッカーマン型制御コマンド | +| 名称 | タイプ | 説明 | +| ------------------- | ----------------------------------- | ------------------------------------------------------------------ | +| `~/out/control_cmd` | autoware_control_msgs::msg::Control | 選択された外部コマンドから変換されたアッカーマン制御コマンド | ## パラメータ -| パラメータ | タイプ | 説明 | -| ------------------------- | ------ | ------------------------------------------------------ | +| パラメータ | 型 | 説明 | +| ------------------------- | ------ | ----------------------------------------------------------- | | `ref_vel_gain_` | double | 基準速度ゲイン | | `timer_rate` | double | タイマーの更新レート | -| `wait_for_first_topic` | double | 最初のトピック受信後にタイムアウトチェックを行う場合 | -| `control_command_timeout` | double | 制御コマンドのタイムアウトチェック | -| `emergency_stop_timeout` | double | エマージェンシーストップコマンドのタイムアウトチェック | +| `wait_for_first_topic` | double | 最初のトピックを受信した後タイムアウトチェックを行うかどうか | +| `control_command_timeout` | double | ステアリングコマンドのタイムアウトチェック | +| `emergency_stop_timeout` | double | 緊急停止コマンドのタイムアウトチェック | -## 制限事項 +## 限界 + +未定義 -未定 diff --git a/vehicle/autoware_raw_vehicle_cmd_converter/README.md b/vehicle/autoware_raw_vehicle_cmd_converter/README.md index fe07738f28d59..79ba10ac0d1f4 100644 --- a/vehicle/autoware_raw_vehicle_cmd_converter/README.md +++ b/vehicle/autoware_raw_vehicle_cmd_converter/README.md @@ -2,37 +2,38 @@ ## 概要 -raw_vehicle_command_converter は、望ましいステアリングおよび加速度入力を具体的な車両制御コマンドに変換する、車両自動化システムにおける重要なノードです。この処理は、ルックアップテーブルとオプションのフィードバック制御システムの組み合わせによって実現されます。 +raw_vehicle_command_converter は、自動運転システムにおける重要なノードであり、希望するステアリングとアクセル入力を入力に特定の車両制御コマンドに変換する役割を果たしています。このプロセスは、ルックアップテーブルとオプションのフィードバック制御システムを組み合わせることで実現されます。 ### ルックアップテーブル -変換器の機能の中心は、CSV 形式のルックアップテーブルを使用することです。このテーブルは、スロットル/ブレーキペダル(車両制御インターフェイスによって異なります)と、さまざまな速度における対応する車両加速度との関係性をカプセル化します。変換器はこのデータを使用して、目標加速度を適切なスロットル/ブレーキ値に正確に変換します。 +コンバーターの機能の中心は、CSV 形式のルックアップテーブルを使用することです。このテーブルには、スロットル/ブレーキペダル(車両制御インターフェースによって異なります)と、さまざまな速度における対応する車両加速度の関係がカプセル化されています。コンバーターはこのデータを利用して、目標加速度を適切なスロットル/ブレーキ値に正確に変換します。 ![accel-brake-map-table](./figure/accel-brake-map-table.png) -### 基準データの作成 +### 参照データの作成 -ルックアップテーブルの基準データは、次の手順で生成されます。 +ルックアップテーブルの参照データは、次の手順で生成します。 -1. **データ収集**: 平坦な道路で、一定値のコマンド(例: スロットル/ブレーキペダル)が適用されて車両を加速または減速させます。 -2. **データ記録**: この段階で、IMU 加速度と車両速度の両方のデータが記録されます。 -3. **CSV ファイル生成**: コマンド値、車両速度、および結果として得られた加速度の関係を示す CSV ファイルが作成されます。 +1. **データの収集**: 平らな道路で、一定値のコマンド(例:スロットル/ブレーキペダル)を適用して車両を加速または減速させます。 +2. **データの記録**: この段階では、IMU 加速度と車両速度の両方のデータを記録します。 +3. **CSV ファイルの生成**: コマンド値、車両速度、および結果の加速度の関係を詳述した CSV ファイルを作成します。 -アクセルマップが作成されると、RawVehicleCmdConverter ノードを起動するときにロードされ、起動ファイルでファイルパスが定義されます。 +加速度マップが作成されたら、RawVehicleCmdConverter ノードを起動するときにロードする必要があり、ファイルパスは起動ファイルで定義されます。 ### 自動キャリブレーションツール -ルックアップテーブルのキャリブレーションと調整を容易にするために、自動キャリブレーションツールが用意されています。このツールの詳細と手順は [こちら](https://github.com/autowarefoundation/autoware.universe/blob/main/vehicle/autoware_accel_brake_map_calibrator/README.md) で確認できます。 +ルックアップテーブルのキャリブレーションと調整を容易にするために、自動キャリブレーションツールが用意されています。このツールの詳細と手順は [こちら](https://github.com/autowarefoundation/autoware.universe/blob/main/vehicle/autoware_accel_brake_map_calibrator/README.md) に記載されています。 ### 可変ギア比 (VGR) -これは、タイヤ角をステアリング角に変換するためのギア比です。一般的に、操作性を向上させるために、速度が上がるにつれて、またはステアリング角が小さくなるにつれて、ギア比が動的に大きくなります。特定の車両では、データが収集され、ギア比は次の公式で近似されました。 +これは、タイヤ角からステアリング角に変換するためのギア比です。一般的に、操作性を向上させるために、速度が増大するにつれて、またはステアリング角が小さくなるとギア比は動的に大きくなります。特定の車両については、データが取得され、ギア比は次の数式で近似されました。 $$ a + b \times v^2 - c \times \lvert \delta \rvert $$ -その車両の場合、係数は次のとおりでした。 +その車両では、係数は次のとおりでした。 + ```yaml vgr_coef_a: 15.713 @@ -42,28 +43,29 @@ vgr_coef_c: 0.042 ![vgr](./figure/vgr.svg) -`convert_steer_cmd_method: "vgr"`が選択されている場合、このノードはコントローラーからの制御コマンドを目的タイヤ角として受け取り、出力する目的操舵角を計算します。また、`convert_actuation_to_steering_status: true`の場合、このノードは`actuation_status`トピックを受信し、`steer_wheel_angle`から操舵タイヤ角を計算してパブリッシュします。 +`convert_steer_cmd_method: "vgr"` が選択されている場合、ノードはコントローラーからの制御コマンドを必要タイヤ角度として受信し、出力する必要ステアリング角度を計算します。また、`convert_actuation_to_steering_status: true` の場合、このノードは `actuation_status` トピックを受信し、`steer_wheel_angle` からステアタイヤ角度を計算してパブリッシュします。 ## 入力トピック -| 名称 | タイプ | 説明 | -| -------------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `~/input/control_cmd` | `autoware_control_msgs::msg::Control` | ターゲットの速度/加速度/ステアリング角度/ステアリング角度速度は、アクチュエータコマンドを計算するために必要です。 | -| `~/input/steering"` | `autoware_vehicle_msgs::msg::SteeringReport` | `convert_actuation_to_steering_status: false` の場合のみサブスクライブします。ステアリングフィードバック制御に使用されるステアリングの現在の状態 | -| `~/input/odometry` | `navigation_msgs::Odometry` | オドメトリの `twist` トピックが使用されます。 | -| `~/input/actuation_status` | `tier4_vehicle_msgs::msg::ActuationStatus` | アクチュエータステータスは、車両側に送信されるのと同じタイプのステータスを受信すると想定されています。たとえば、スロットル/ブレーキペダル/ステアリングホイール角度が送信された場合、同じタイプのステータスが受信されます。ステアリングホイール角度の場合は、このノードでステアリングタイヤ角度と VGR の計算に使用されます。 | +| 名前 | タイプ | 説明 | +| ------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `~/input/control_cmd` | autoware_control_msgs::msg::Control | target `velocity/acceleration/steering_angle/steering_angle_velocity` がactuation command の計算のために必要です。 | +| `~/input/steering"` | autoware_vehicle_msgs::msg::SteeringReport | `convert_actuation_to_steering_status: false` の場合にのみサブスクライブします。ステアリングの現在のステータスは、ステアリングフィードバック制御に使用されます。 | +| `~/input/odometry` | navigation_msgs::Odometry | オドメトリのtwistトピックが使用されています。 | +| `~/input/actuation_status` | tier4_vehicle_msgs::msg::ActuationStatus | アクチュエーションステータスは、車両側に送信されたのと同じタイプのステータスを受信すると想定されています。たとえば、スロットル/ブレーキペダル/ステアリングホイールの角度が送信された場合、同じタイプのステータスが受信されます。ステアリングホイールの角度の場合、このノードではステアリングタイヤの角度とVGRを計算するために使用されます。 | ## 出力トピック -| 名称 | タイプ | 説明 | -| -------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| `~/output/actuation_cmd` | `tier4_vehicle_msgs::msg::ActuationCommandStamped` | 車両が機械的入力を適用するためのアクチュエーションコマンド | -| `~/output/steering_status` | `autoware_vehicle_msgs::msg::SteeringReport` | `convert_actuation_to_steering_status: true` の場合のみ公開されます。ステアリングタイヤ角度はステアリングホイール角度から計算されて公開されます。 | +| 名前 | タイプ | 説明 | +| -------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `~/output/actuation_cmd` | tier4_vehicle_msgs::msg::ActuationCommandStamped | 車両が機械的な入力を与えるための作動コマンド | +| `~/output/steering_status` | autoware_vehicle_msgs::msg::SteeringReport | `convert_actuation_to_steering_status: true` の場合のみ公開。操舵輪角度から操舵タイヤ角が計算され、公開されます。 | -## パラメータ +## パラメーター {{ json_to_markdown("vehicle/autoware_raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json") }} -## 制限事項 +## 制限 + +現在のフィードバック実装はステアリング制御にのみ適用されています。 -現在のフィードバック実装は、操舵制御のみに適用されます。