Amazon Web Services ブログ

AWS IoT FleetWise ビジョンシステムデータ (プレビュー) の発表

本日、AWS IoT FleetWise が車両のビジョンシステムデータ収集をサポートすることを発表します。この機能により、顧客はカメラ、LiDAR、レーダー、その他のビジョンサブシステムからのメタデータ、オブジェクトリストと検出データ、画像やビデオを収集できます。現在プレビューで利用可能なこの新機能は、既存の AWS IoT FleetWise の機能を拡張し、顧客がデータからより多くの価値とコンテキストを抽出し、より接続された、便利な車両を構築できるようにします。

現代の車両には複数のビジョンシステムが搭載されています。ビジョンシステムの例には、先進運転支援(ADAS)のユースケースを可能にする周囲視界カメラとレーダーの配列や、半自動運転のユースケースで運転者の注意を支援する運転者およびキャビン監視システムが含まれます。これらのシステムのほとんどは、車両上でセンサーフュージョンやAI/ML による推論のための洗練されたアルゴリズムを使用して、ある程度の計算を行います。

ビジョンシステムは、構造化された(数字、テキスト)および非構造化された(画像、ビデオ)形式で大量のデータを生成します。この課題により、車両の干渉を最小限に抑えながら、特定のイベントに関連する複数の車両センサーのモダリティからデータを同期させることが困難になります。たとえば、データサイエンティストが車両カメラによって検出された道路状況の正確さを分析する場合、テレメトリデータ(例:速度とブレーキ圧)、構造化されたオブジェクトリストとメタデータ、非構造化された画像/ビデオデータを確認することが望まれます。これらすべてのデータポイントを整理し、同じイベントに関連付けることは重労働です。通常、車両の操作への干渉を最小限に抑えるために関心のあるデータポイントのみを収集し、メタデータを追加し、データを同期させるために追加のソフトウェアと計算能力が必要です。

AWS IoT FleetWise のビジョンシステムデータを使用すると、自動車会社はカメラ、レーダー、LiDAR などの車両ビジョンシステムからデータを簡単に収集し、整理できます。これは、構造化されたビジョンシステムデータ、メタデータ、テレメトリデータをクラウド内で同期させ、顧客がイベントの完全な画像ビューを組み立て、洞察を得ることを容易にします。いくつかのシナリオは以下の通りです:

  • 急ブレーキイベントが発生した際に何が起こったかを理解するために、顧客はイベントが発生する前後のデータを収集したいと考えます。収集されるデータには、推論(例:障害物が検出された)、タイムスタンプとカメラ設定(メタデータ)、および車両周辺で発生したこと(例:画像、ビデオ、バウンディングボックスと検出オーバーレイを備えた光/レーダーマップ)が含まれる場合があります。
  • 顧客は、交通の妨げとなる事故、山火事、障害物など、道路上の異常なイベントに関心があります。顧客は、多数の車両にわたってテレメトリデータとオブジェクトリストデータを大規模に収集し始め、その後、異常なイベント(例:大きな高速道路上での速度が0)を示す一連の車両に焦点を当て、それらの車両からビジョンシステムデータを収集します。

AWS IoT FleetWise を使用してビジョンシステムデータを収集する際、顧客は帯域幅とデータサイズを最適化するためにデータ収集キャンペーンでイベントを指定するなど、サービスの高度な機能とインターフェースを活用できます。顧客は、車両のビジョンシステム、その属性、およびテレメトリセンサーを定義してモデリングすることから AWS で始めることができます。車両に展開された顧客のエッジエージェントは、CAN ベースの車両センサー(例:バッテリー温度)からのデータと、ビジョンシステムセンサーを含む車両サブシステムからのデータを収集します。顧客は、標準センサーとビジョンシステムの両方からデータ信号を同時に収集するために、同じイベントベースまたは時間ベースのデータ収集キャンペーンを使用できます。クラウド内では、顧客は定義された車両属性およびその他のメタデータ、テレメトリデータ、および構造化されたビジョンシステムデータの統合ビューを見ることができ、Amazon Simple Storage Service(Amazon S3)内で非構造化ビジョンシステムデータを表示するためのリンクがあります。データは、車両、キャンペーン、およびイベント識別子を使用して同期されたままです。その後、顧客は AWS Glue などのサービスを使用して、下流の分析のためにデータを統合できます。

Continental AG は運転者の利便性機能の開発を進めています

コンチネンタルAGは、自動運転のための先駆的な技術とサービスを開発しています。「コンチネンタルは、クラウドでの自動車ソフトウェア開発を加速する技術の開発においてAWS と緊密に協力してきました。AWS IoT FleetWise のビジョンシステムデータを使用することで、カメラと動作計画データを簡単に収集し、自動駐車支援を改善し、フリート全体の監視と報告を可能にすることができます。」

Yann Baudouin, Head of Data Solutions – Engineering Platform and Ecosystem, Continental AG

HL Mando は、ドライバーの安全性とパーソナライゼーションを向上させる機能を開発しています。

HL Mando は、自動車業界向けの部品とソフトウェアのトップサプライヤーです。「Mando では、運転や操作が容易な車両を作る技術革新に取り組んでいます。私たちのソリューションは、車両のテレメトリーデータおよび車両カメラデータを効率的に収集する能力に依存しています。AWS IoT FleetWise を通じて収集するデータを使用して、ドライバーの安全性とパーソナライゼーションを向上させることができる車両ソフトウェア機能の改善を楽しみにしています」

Seong-Hyeon Cho, Vice Chairman/CEO, HL Mando

ThunderSoft は自動車およびフリートソリューションを開発しています

ThunderSoft は、自動車会社や企業に知的なオペレーティングシステムや技術を提供しています。「ThunderSoft は、全世界の次世代のコネクテッド車技術を推進するために努力しており、AWS との連携を続けることを楽しみにしています。AWS IoT FleetWise からのビジョンシステムデータの登場により、私たちはお客様に対して先進的運転支援システム(ADAS)やフリート管理のための革新的なソリューションを提供することができるようになります」

Pengcheng Zou, CTO, ThunderSoft

解決策の概要

ADAS のユースケースを例に、ビジョンシステムデータの収集プロセスを見てみましょう。ADAS エンジニアが生産車両に衝突回避システムを展開していると想像してください。このシステムが車両の衝突を回避する方法の一つは、特定のシナリオ(例えば、別の車両との追突の危険が迫っている場合)で自動的にブレーキをかけることです。

このシステムに使用されるソフトウェアはすでに厳格なテストを経ていますが、エンジニアは現行世代および次世代の車両向けにソフトウェアを継続的に改善したいと考えています。この場合、エンジニアは衝突が検出されたすべてのシナリオを確認したいと思います。事故中に何が起こったかを理解するために、エンジニアは衝突が検出される前後の画像とテレメトリーデータで構成されるビジョンデータを見ます。S3 バケットに入ったら、エンジニアはデータを視覚化、分析、ラベル付けすることができます。

前提条件

始める前に、以下が必要です:

  • サポートされているリージョンでのコンソール、CLI およびプログラムによるアクセス権を持つ AWS アカウント
  • AWS IoT FleetWise および Amazon S3 リソースを作成およびアクセスするための権限。
  • AWS IoT FleetWise ビジョンシステムデモガイドに記載されている手順に従い、「Playback ROS2 data」の章の終わりまでを完了させる。
  • (オプション)Galactic バージョンの ROS 2 をサポートする ROS 2 環境。ビジョンシステムデータのプレビュー期間中、AWS IoT FleetWise リファレンスエッジエージェントは ROS 2 ミドルウェアをサポートしており、ビジョンシステムの信号を収集します。

ウォークスルー

ステップ1:車両をモデル化する

  • ファイル ros2-nodes.json を作成して、シグナルカタログを作成します。このファイル内の名前や説明は自由に変更してください。
{
 "name": "fw-vision-system-catalog",
    "description": "vision-system-catalog",
    "nodes": [
      {
        "branch": {
          "fullyQualifiedName": "Types"
        }
      },
      {
        "struct": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage"
        }
      },
      {
        "struct": {
          "fullyQualifiedName": "Types.std_msgs_Header"
        }
      },
      {
        "struct": {
          "fullyQualifiedName": "Types.builtin_interfaces_Time"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.builtin_interfaces_Time.sec",
          "dataType": "INT32",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.builtin_interfaces_Time.nanosec",
          "dataType": "UINT32",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.std_msgs_Header.stamp",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.builtin_interfaces_Time"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.std_msgs_Header.frame_id",
          "dataType": "STRING",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage.header",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.std_msgs_Header"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage.format",
          "dataType": "STRING",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage.data",
          "dataType": "UINT8_ARRAY",
          "dataEncoding": "BINARY"
        }
      },
      {
        "branch": {
          "fullyQualifiedName": "Vehicle",
          "description": "Vehicle"
        }
      },
      {
        "branch": {
          "fullyQualifiedName": "Vehicle.Cameras",
          "description": "Vehicle.Cameras"
        }
      },
      {
        "branch": {
          "fullyQualifiedName": "Vehicle.Cameras.Front",
          "description": "Vehicle.Cameras.Front"
        }
      },
      {
        "sensor": {
          "fullyQualifiedName": "Vehicle.Cameras.Front.Image",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage"
        }
      },
      {
        "struct": {
          "fullyQualifiedName": "Types.std_msgs_msg_Float32"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.std_msgs_msg_Float32.data",
          "dataType": "FLOAT",
          "dataEncoding": "TYPED"
        }
      },
      {
        "sensor": {
          "fullyQualifiedName": "Vehicle.Speed",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.std_msgs_msg_Float32"
        }
      },
      {
        "branch": {
          "fullyQualifiedName": "Vehicle.Airbag",
          "description": "Vehicle.Airbag"
        }
      },
      {
        "sensor": {
          "fullyQualifiedName": "Vehicle.Airbag.CollisionIntensity",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.std_msgs_msg_Float32"
        }
      },
      {
        "struct": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_Imu"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_Imu.header",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.std_msgs_Header"
        }
      },
      {
        "struct": {
          "fullyQualifiedName": "Types.geometry_msgs_Quaternion"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.geometry_msgs_Quaternion.x",
          "dataType": "DOUBLE",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.geometry_msgs_Quaternion.y",
          "dataType": "DOUBLE",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.geometry_msgs_Quaternion.z",
          "dataType": "DOUBLE",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.geometry_msgs_Quaternion.w",
          "dataType": "DOUBLE",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_Imu.orientation",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.geometry_msgs_Quaternion"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_Imu.orientation_covariance",
          "dataType": "DOUBLE_ARRAY",
          "dataEncoding": "TYPED"
        }
      },
      {
        "struct": {
          "fullyQualifiedName": "Types.geometry_msgs_Vector3"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.geometry_msgs_Vector3.x",
          "dataType": "DOUBLE",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.geometry_msgs_Vector3.y",
          "dataType": "DOUBLE",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.geometry_msgs_Vector3.z",
          "dataType": "DOUBLE",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_Imu.angular_velocity",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.geometry_msgs_Vector3"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_Imu.angular_velocity_covariance",
          "dataType": "DOUBLE_ARRAY",
          "dataEncoding": "TYPED"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_Imu.linear_acceleration",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.geometry_msgs_Vector3"
        }
      },
      {
        "property": {
          "fullyQualifiedName": "Types.sensor_msgs_msg_Imu.linear_acceleration_covariance",
          "dataType": "DOUBLE_ARRAY",
          "dataEncoding": "TYPED"
        }
      },
      {
        "sensor": {
          "fullyQualifiedName": "Vehicle.Acceleration",
          "dataType": "STRUCT",
          "structFullyQualifiedName": "Types.sensor_msgs_msg_Imu"
        }
      }
    ]
}
JSON
aws iotfleetwise create-signal-catalog --cli-input-json file://ros2-nodes.json
Bash
  • AWS IoT FleetWise は、ビジョンシステムと CAN バスのデータを同時に収集することができます。また、任意の vss-json ファイルから CAN シグナルを追加することで、シグナルカタログを更新することも可能です。ファイル内の name フィールドが作成したシグナルカタログと一致していることを確認してください。
aws iotfleetwise update-signal-catalog --cli-input-json file://<can-nodes>.json
Bash
  • vehicle-model.json という名前のモデルマニフェストを作成してください。あなたのモデルマニフェストは、以下に示すシグナル(下記で詳細に説明された完全修飾名)から構成されるべきです。
    • Vehicle.Cameras.Front.Image
    • Vehicle.Speed
    • Vehicle.Acceleration
    • Vehicle.Airbag.CollisionIntensity
{

"name": "fw-vision-system-model",

"signalCatalogArn": "<signal-catalog-ARN>",

"description": "Vehicle model to demonstrate FleetWise vision system data",

"nodes": ["Vehicle.Cameras.Front.Image","Vehicle.Speed","Vehicle.Airbag.CollisionIntensity","Vehicle.Acceleration"]

}
JSON
aws iotfleetwise create-model-manifest --cli-input-json file://vehicle-model.json
Bash
  • モデルマニフェストを更新し、active: に設定してください。
aws iotfleetwise update-model-manifest --name fw-vision-system-model --status ACTIVE
Bash
  • デコーダマニフェストファイル decoder-manifest.json を作成します。JSON を適切なモデルマニフェスト ARN に反映するように調整します。もし CAN シグナルも使用している場合は、AWS IoT FleetWise のドキュメントを参照して、ビジョンシステムと CAN シグナルの両方が含まれる例のデコーダマニフェストを参照してください。デコーダマニフェストを作成した後、デコーダマニフェストを active ステータスに更新する必要があります。
{
    "name": "fw-vision-system-decoder-manifest",
    "modelManifestArn": "<your model manifest arn>",
    "description": "decoder manifest to demonstrate vision system data",
    "networkInterfaces":[
  {
    "interfaceId": "10",
    "type": "VEHICLE_MIDDLEWARE",
    "vehicleMiddleware": {
      "name": "ros2",
      "protocolName": "ROS_2"
    }
  },
],

"signalDecoders":[	
  {
    "fullyQualifiedName": "Vehicle.Cameras.Front.Image",
    "type": "MESSAGE_SIGNAL",
    "interfaceId": "10",
    "messageSignal": {
      "topicName": "/carla/ego_vehicle/rgb_front/image_compressed:sensor_msgs/msg/CompressedImage",
      "structuredMessage": {
        "structuredMessageDefinition": [
          {
            "fieldName": "header",
            "dataType": {
              "structuredMessageDefinition": [
                {
                  "fieldName": "stamp",
                  "dataType": {
                    "structuredMessageDefinition": [
                      {
                        "fieldName": "sec",
                        "dataType": {
                          "primitiveMessageDefinition": {
                            "ros2PrimitiveMessageDefinition": {
                              "primitiveType": "INT32"
                            }
                          }
                        }
                      },
                      {
                        "fieldName": "nanosec",
                        "dataType": {
                          "primitiveMessageDefinition": {
                            "ros2PrimitiveMessageDefinition": {
                              "primitiveType": "UINT32"
                            }
                          }
                        }
                      }
                    ]
                  }
                },
                {
                  "fieldName": "frame_id",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "STRING"
                      }
                    }
                  }
                }
              ]
            }
          },
          {
            "fieldName": "format",
            "dataType": {
              "primitiveMessageDefinition": {
                "ros2PrimitiveMessageDefinition": {
                  "primitiveType": "STRING"
                }
              }
            }
          },
          {
            "fieldName": "data",
            "dataType": {
              "structuredMessageListDefinition": {
                "name": "listType",
                "memberType": {
                  "primitiveMessageDefinition": {
                    "ros2PrimitiveMessageDefinition": {
                      "primitiveType": "UINT8"
                    }
                  }
                },
                "capacity": 0,
                "listType": "DYNAMIC_UNBOUNDED_CAPACITY"
              }
            }
          }
        ]
      }
    }
  },
  {
    "fullyQualifiedName": "Vehicle.Speed",
    "type": "MESSAGE_SIGNAL",
    "interfaceId": "10",
    "messageSignal": {
      "topicName": "/carla/ego_vehicle/speedometer:std_msgs/msg/Float32",
      "structuredMessage": {
        "structuredMessageDefinition": [
          {
            "fieldName": "data",
            "dataType": {
              "primitiveMessageDefinition": {
                "ros2PrimitiveMessageDefinition": {
                  "primitiveType": "FLOAT32"
                }
              }
            }
          }
        ]
      }
    }
  },
  {
    "fullyQualifiedName": "Vehicle.Airbag.CollisionIntensity",
    "type": "MESSAGE_SIGNAL",
    "interfaceId": "10",
    "messageSignal": {
      "topicName": "/carla/ego_vehicle/collision_intensity:std_msgs/msg/Float32",
      "structuredMessage": {
        "structuredMessageDefinition": [
          {
            "fieldName": "data",
            "dataType": {
              "primitiveMessageDefinition": {
                "ros2PrimitiveMessageDefinition": {
                  "primitiveType": "FLOAT32"
                }
              }
            }
          }
        ]
      }
    }
  },
  {
    "fullyQualifiedName": "Vehicle.Acceleration",
    "type": "MESSAGE_SIGNAL",
    "interfaceId": "10",
    "messageSignal": {
      "topicName": "/carla/ego_vehicle/imu:sensor_msgs/msg/Imu",
      "structuredMessage": {
        "structuredMessageDefinition": [
          {
            "fieldName": "header",
            "dataType": {
              "structuredMessageDefinition": [
                {
                  "fieldName": "stamp",
                  "dataType": {
                    "structuredMessageDefinition": [
                      {
                        "fieldName": "sec",
                        "dataType": {
                          "primitiveMessageDefinition": {
                            "ros2PrimitiveMessageDefinition": {
                              "primitiveType": "INT32"
                            }
                          }
                        }
                      },
                      {
                        "fieldName": "nanosec",
                        "dataType": {
                          "primitiveMessageDefinition": {
                            "ros2PrimitiveMessageDefinition": {
                              "primitiveType": "UINT32"
                            }
                          }
                        }
                      }
                    ]
                  }
                },
                {
                  "fieldName": "frame_id",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "STRING"
                      }
                    }
                  }
                }
              ]
            }
          },
          {
            "fieldName": "orientation",
            "dataType": {
              "structuredMessageDefinition": [
                {
                  "fieldName": "x",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                },
                {
                  "fieldName": "y",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                },
                {
                  "fieldName": "z",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                },
                {
                  "fieldName": "w",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                }
              ]
            }
          },
          {
            "fieldName": "orientation_covariance",
            "dataType": {
              "structuredMessageListDefinition": {
                "name": "listType",
                "memberType": {
                  "primitiveMessageDefinition": {
                    "ros2PrimitiveMessageDefinition": {
                      "primitiveType": "FLOAT64"
                    }
                  }
                },
                "capacity": 9,
                "listType": "FIXED_CAPACITY"
              }
            }
          },
          {
            "fieldName": "angular_velocity",
            "dataType": {
              "structuredMessageDefinition": [
                {
                  "fieldName": "x",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                },
                {
                  "fieldName": "y",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                },
                {
                  "fieldName": "z",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                }
              ]
            }
          },
          {
            "fieldName": "angular_velocity_covariance",
            "dataType": {
              "structuredMessageListDefinition": {
                "name": "listType",
                "memberType": {
                  "primitiveMessageDefinition": {
                    "ros2PrimitiveMessageDefinition": {
                      "primitiveType": "FLOAT64"
                    }
                  }
                },
                "capacity": 9,
                "listType": "FIXED_CAPACITY"
              }
            }
          },
          {
            "fieldName": "linear_acceleration",
            "dataType": {
              "structuredMessageDefinition": [
                {
                  "fieldName": "x",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                },
                {
                  "fieldName": "y",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                },
                {
                  "fieldName": "z",
                  "dataType": {
                    "primitiveMessageDefinition": {
                      "ros2PrimitiveMessageDefinition": {
                        "primitiveType": "FLOAT64"
                      }
                    }
                  }
                }
              ]
            }
          },
          {
            "fieldName": "linear_acceleration_covariance",
            "dataType": {
              "structuredMessageListDefinition": {
                "name": "listType",
                "memberType": {
                  "primitiveMessageDefinition": {
                    "ros2PrimitiveMessageDefinition": {
                      "primitiveType": "FLOAT64"
                    }
                  }
                },
                "capacity": 9,
                "listType": "FIXED_CAPACITY"
              }
            }
          }
        ]
      }
    }
  }
]
}
JSON
aws iotfleetwise create-decoder-manifest --cli-input-json file://decoder-manifest.json

aws iotfleetwise update-decoder-manifest —name fw-vision-system-decoder-manifest —status ACTIVE
Bash

ステップ2:車両の作成

  • 上記のモデルマニフェストおよびデコーダマニフェストを使用して車両を作成します。事前のステップで作成したプロビジョニングされた AWS IoT のモノと同じ名前を使用してください。
aws iotfleetwise create-vehicle --vehicle-name FW-VSD-ROS2-<provisioned-identifier>-vehicle --model-manifest-arn <Your model manifest ARN> --decoder-manifest-arn <Your decoder manifest ARN>
Bash

ステップ3:キャンペーンの作成

  • AWS IoT FleetWise があなたの S3 バケットにアクセスできるようにするために、ここにある指示に従ってアクセスポリシーを設定します(「すべてのキャンペーンのバケットポリシー」を参照)。
  • 検出された衝突イベントに基づいてデータを収集するイベントベースのキャンペーンを作成し、トリガー前の5秒間とトリガー後の5秒間のデータを含めます。
{
    "name": "fw-vision-system-collectCollision",
    "description": "Collect 10 seconds of data from a subset of signals if vehicle detected a collision - 5 pretrigger seconds, 5 posttrigger seconds",
    "signalCatalogArn": "<your signal catalog>",
    "targetArn": "<your target>",
        "signalsToCollect": [
        {
            "name": "Vehicle.Cameras.Front.Image",
            "maxSampleCount": 1000,
            "minimumSamplingIntervalMs": 10
        },
        {
            "name": "Vehicle.Speed",
            "maxSampleCount": 1000,
            "minimumSamplingIntervalMs": 10
        },
        {
            "name": "Vehicle.Acceleration",
            "maxSampleCount": 1000,
            "minimumSamplingIntervalMs": 10
        },
        {
            "name": "Vehicle.Airbag.CollisionIntensity",
            "maxSampleCount": 1000,
            "minimumSamplingIntervalMs": 10
        }
    ],
    "postTriggerCollectionDuration": 5000,
    "collectionScheme": {
        "conditionBasedCollectionScheme": {
            "conditionLanguageVersion": 1,
            "expression": "$variable.`Vehicle.Airbag.CollisionIntensity` > 1",
            "minimumTriggerIntervalMs": 10000,
            "triggerMode": "ALWAYS"
        }
    },
    "dataDestinationConfigs": [
        {
            "s3Config": {
                "bucketArn": "<your S3 bucket>",
                "dataFormat": "PARQUET",
                "storageCompressionFormat": "NONE",
                "prefix": "collisionData"
            }
        }
    ]
}
JSON
aws iotfleetwise create-campaign --cli-input-json file://campaign.json
Bash
  • 別のキャンペーンを作成して、タイムイベントとして10秒間のデータを収集します。
{
    "name": "fw-vision-system-collectTimed",
    "description": "Collect 10 seconds of data from a subset of signals",
    "signalCatalogArn": "<Your signal catalog ARN>",
    "targetArn": "<Your vehicle ARN>",
        "signalsToCollect": [
        {
            "name": "Vehicle.Cameras.Front.Image",
            "maxSampleCount": 500,
            "minimumSamplingIntervalMs": 10
        },
        {
            "name": "Vehicle.Speed",
            "maxSampleCount": 500,
            "minimumSamplingIntervalMs": 10
        },
        {
            "name": "Vehicle.Acceleration",
            "maxSampleCount": 500,
            "minimumSamplingIntervalMs": 10
        },
        {
            "name": "Vehicle.Airbag.CollisionIntensity",
            "maxSampleCount": 500,
            "minimumSamplingIntervalMs": 10
        }
    ],
    "postTriggerCollectionDuration": 5000,
    "collectionScheme": {
        "timeBasedCollectionScheme": {
            "periodMs": 10000
        }
    },
    "dataDestinationConfigs": [
        {
            "s3Config": {
                "bucketArn": "<Your S3 bucket>",
                "dataFormat": "PARQUET",
                "storageCompressionFormat": "NONE",
                "prefix": "timeData"
            }
        }
    ]
}
JSON
aws iotfleetwise create-campaign --cli-input-json file://campaign-timed.json
Bash
  • すべてのキャンペーンを承認していることを確認してください!
aws iotfleetwise update-campaign --name fw-rich-sensor-collectCollision --action APPROVE

aws iotfleetwise update-campaign --name fw-rich-sensor-collectTimed --action APPROVE
Bash

ステップ4: Amazon S3 でデータを確認する 

AWS IoT FleetWise は、データを Amazon S3 にロードするのに最大 15 分かかります。S3 バケットには、次の 3 種類のファイルが表示されます。1/ 生データまたは iON ファイルで、AWS IoT FleetWise がデコードするデータのバイナリブロブが含まれています。これらのファイルは、エラーを深く調査するために使用できます。2/ 非構造化データファイルで、収集された画像/ビデオのバイナリが含まれています。3/ 処理済みデータ(構造化データ)ファイルで、デコードされたメタデータ、オブジェクトリスト、テレメトリデータが含まれており、対応する非構造化データファイルへのリンクが含まれています。

さらに進めるには、以下のことができます。

  • キャンペーン ID、イベント ID、および車両 ID を使用して、AWS Glue を使ってデータを join します。
  • AWS Glue Crawler を使用してデータをカタログ化し、検索可能にします。

Amazon Athena でアドホッククエリを使用してデータを探索し、興味のあるシーンを特定します。

データは、興味のあるシーンから次のバージョンのモデルと車両ソフトウェアを開発するための視覚化、ラベリング、再シミュレーションのためのダウンストリームツールに渡すことができます。例えば、Foxglove Studio などのサードパーティソフトウェアを使用して、Amazon S3 に保存されている画像を使用して衝突前後に何が起こったかを視覚化することができます。Amazon Rekognition は、衝突時に存在した追加のオブジェクトを自動的に発見してラベル付けするために使用できます。Amazon SageMaker Groundtruth は、アノテーションと人が関わるワークフローのために使用でき、衝突回避ソフトウェアの正確さと関連性を向上させることができます。今後のブログでは、ワークフローのこの部分のオプションを探る予定です

まとめ 

この記事では、AWS IoT FleetWise ビジョンシステムデータが、高度な車両センサーシステムからデータを簡単に収集・整理し、イベントの包括的なビューを構築し、洞察を得ることを可能にする方法を紹介しました。この新機能は、自動車顧客のデータ駆動型ユースケースの範囲を拡大します。次に、ADAS 開発のサンプルユースケースを使用して、条件ベースのキャンペーンを作成するプロセスを説明しました。これは ADAS システムの改善に役立ち、Amazon S3 でそのデータにアクセスする方法を示しました。

詳しくは、AWS IoT FleetWise のサイトをご覧ください。皆様のフィードバックや質問をお待ちしております。

この記事は Akshay Tandon と Matt Pollock によって書かれた Announcing AWS IoT FleetWise vision system data (Preview) の日本語訳です。この記事は IoT Solutions Architect の 井上 昌幸 が翻訳しました。

著者


Akshay Tandon
は、Amazon Web Services の AWS IoT FleetWise チームでプリンシパル・プロダクト・マネージャーを務めています。彼は自動車と製品に関するすべてに情熱を注いでおり、顧客の声を聞き、彼らのニーズを満たすための革新的な製品やサービスを想像することを楽しんでいます。Amazon では、AlexaのAI/ML 分野とAmazon トランスポーテーション・サービスのフリートマネジメント分野で製品イニシアティブを率いてきました。彼は 10 年以上の製品管理経験を持っています。


Matt Pollock
は、Amazon Web Services でシニア・ソリューション・アーキテクトとして働いており、現在は自動車の OEM やサプライヤーと協力しています。テキサス州オースティンを拠点とし、2005 年以来、さまざまな業界におけるデジタルと物理システムのインターフェースで顧客と協力してきました。技術的に困難な問題に対するスケーラブルなソリューションを構築していないときは、娘にひどい冗談を言って楽しんでいます。