Annotationless認識機能の評価#
perception_online_evaluatorを利用して、Autowareの認識機能(perception)を、アノテーションなしで評価する。
以下のPRの機能を持つAutowareが必要。 https://github.com/autowarefoundation/autoware.universe/pull/6556
評価方法#
launch を立ち上げると以下のことが実行され、評価される。
- launch で評価ノード(annotationless_perception_evaluator_node)とlogging_simulator.launch、ros2 bag playコマンドを立ち上げる
- bag から出力されたセンサーデータを autoware が受け取って、perception モジュールが認識を行う
- perception_online_evaluator が /perception/perception_online_evaluator/metricsに診断結果を出力する
- 評価ノードが topic を subscribe して、各基準を満たしているかを判定して結果をファイルに記録する
- bag の再生が終了すると自動で launch が終了して評価が終了する
評価結果#
perception_online_evaluatorが出力するtopicは以下のサンプルのような形式となっている。 topicサンプル
topic の subscribe 1 回につき、認識クラス毎に以下に記述する判定結果が出力される。
全てのクラスで正常となった場合、テストは正常となる。
正常#
判定には、シナリオまたはlaunchの引数で指定された以下の2つの値を利用する。
- 閾値
- 合格範囲(閾値を補正する係数)
/perception/perception_online_evaluator/metrics のstatus.name毎に以下のルールに従い成否の判定が行われる。
閾値が設定されてない項目(min, max, mean)に関しては常に正常と判定される。指定があるもののみが評価対象になる。
min#
閾値×下限値 <= minの最小値 <= 閾値×上限値であれば正常とする。
max#
閾値×下限値 <= maxの最大値 <= 閾値×上限値であれば正常とする。
下限値は0.0にすることを推奨
mean#
閾値×下限値 <= meanの平均値 <= 閾値×上限値であれば正常とする。
metric_value#
閾値×下限値 <= metric_valueの値 <= 閾値×上限値であれば正常とする。
metric_valueは現在の値だけで判定され、min, max, meanのmetricsの値を更新しない。
イメージ図を以下に示す
異常#
正常の条件を満たさないとき
評価ノードが使用する Topic 名とデータ型#
Subscribed topics:
| Topic name | Data type | 
|---|---|
| /perception/perception_online_evaluator/metrics | diagnostic_msgs/msg/DiagnosticArray | 
Published topics:
| Topic name | Data type | 
|---|---|
| N/A | N/A | 
logging_simulator.launch に渡す引数#
- localization: false
- planning: false
- control: false
- use_perception_online_evaluator: true
simulation#
シミュレーション実行に必要な情報を述べる。
入力 rosbag に含まれるべき topic#
| topic 名 | データ型 | 
|---|---|
| /pacmod/from_can_bus | can_msgs/msg/Frame | 
| /localization/kinematic_state | nav_msgs/msg/Odometry | 
| /sensing/gnss/ublox/fix_velocity | geometry_msgs/msg/TwistWithCovarianceStamped | 
| /sensing/gnss/ublox/nav_sat_fix | sensor_msgs/msg/NavSatFix | 
| /sensing/gnss/ublox/navpvt | ublox_msgs/msg/NavPVT | 
| /sensing/imu/tamagawa/imu_raw | sensor_msgs/msg/Imu | 
| /sensing/lidar/concatenated/pointcloud | sensor_msgs/msg/PointCloud2 | 
| /sensing/lidar/*/velodyne_packets | velodyne_msgs/VelodyneScan | 
| /tf | tf2_msgs/msg/TFMessage | 
CAN の代わりに vehicle の topic を含めても良い。
| topic 名 | データ型 | 
|---|---|
| /localization/kinematic_state | nav_msgs/msg/Odometry | 
| /sensing/gnss/ublox/fix_velocity | geometry_msgs/msg/TwistWithCovarianceStamped | 
| /sensing/gnss/ublox/nav_sat_fix | sensor_msgs/msg/NavSatFix | 
| /sensing/gnss/ublox/navpvt | ublox_msgs/msg/NavPVT | 
| /sensing/imu/tamagawa/imu_raw | sensor_msgs/msg/Imu | 
| /sensing/lidar/concatenated/pointcloud | sensor_msgs/msg/PointCloud2 | 
| /sensing/lidar/*/velodyne_packets | velodyne_msgs/VelodyneScan | 
| /tf | tf2_msgs/msg/TFMessage | 
| /vehicle/status/control_mode | autoware_auto_vehicle_msgs/msg/ControlModeReport | 
| /vehicle/status/gear_status | autoware_auto_vehicle_msgs/msg/GearReport | 
| /vehicle/status/steering_status | autoware_auto_vehicle_msgs/SteeringReport | 
| /vehicle/status/turn_indicators_status | autoware_auto_vehicle_msgs/msg/TurnIndicatorsReport | 
| /vehicle/status/velocity_status | autoware_auto_vehicle_msgs/msg/VelocityReport | 
入力 rosbag に含まれてはいけない topic#
| topic 名 | データ型 | 
|---|---|
| /clock | rosgraph_msgs/msg/Clock | 
clock は、ros2 bag play の--clock オプションによって出力しているので、bag 自体に記録されていると 2 重に出力されてしまうので bag には含めない
evaluation#
評価に必要な情報を述べる。
シナリオフォーマット#
サンプル参照
評価結果フォーマット#
サンプル参照
以下に、それぞれの評価の例を記述する。 注:結果ファイルフォーマットで解説済みの共通部分については省略する。
{
  "Frame": {
    "Ego": {},
    "OBJECT_CLASSIFICATION": {
      // 認識したクラス
      "Result": { "Total": "Success or Fail", "Frame": "Success or Fail" }, // TotalとFrameの結果は同じ。他の評価とデータ構造を同じにするために同じ値を出力している
      "Info": {
        "name_min_max_mean": { "min": "最小値", "max": "最大値", "mean": "平均値" },
        "name_metric_value": { "metric_value": "値"},
        ...
      },
      "Metrics": {
        "name_min_max_mean": {
          "min": "minの最小値",
          "max": "maxの最大値",
          "mean": "meanの平均値"
        },
        ...
      }
    }
  }
}
項目の意味は以下の図を参照

