AWS IoT FleetWiseでCANデータベースファイルを使って、車両モデルとデコーダーマニフェストを作成する

AWS IoT FleetWiseでCANデータベースファイルを使って、車両モデルとデコーダーマニフェストを作成する

DBCファイルを利用した、シグナルカタログとデコード情報の登録を試します。
Clock Icon2025.04.16

AWS IoT FleetWiseは、車両のセンサーデータやCAN(Controller Area Network)バス上のシグナルデータを効率的に収集・活用できるサービスです。

今回は、CANデータベースファイル(DBCファイル)を利用して、AWS IoT FleetWise上で車両モデルとデコーダーマニフェストを作成する流れを試してみます。DBCファイルを活用することで、既存の車両シグナル定義をそのままクラウドに取り込むことができ、デコード情報の再利用や管理が容易になります。

試してみる

次のような流れで試します。

  • CANデータベースファイル(DBCファイル)を作成する
  • マネジメントコンソールから車両モデルを作成する
  • マネジメントコンソールからデコーダーマニフェストを作成する
  • AWS CLIからデコーダーマニフェストを作成する

CANデータベースファイル(DBCファイル)を作成する

次のような内容でDBCファイル、example.dbcを作成します。
ExampleSignalというシグナルを定義しています。

VERSION ""

NS_ :
    NS_DESC_
    CM_
    BA_DEF_
    BA_
    VAL_
    CAT_DEF_
    CAT_
    FILTER
    BA_DEF_DEF_
    EV_DATA_
    ENVVAR_DATA_
    SGTYPE_
    SGTYPE_VAL_
    BA_DEF_SGTYPE_
    BA_SGTYPE_
    SIG_TYPE_REF_
    VAL_TABLE_
    SIG_GROUP_
    SIG_VALTYPE_
    SIGTYPE_VALTYPE_
    BO_TX_BU_
    BA_DEF_REL_
    BA_REL_
    BA_DEF_DEF_REL_
    BU_SG_REL_
    BU_EV_REL_
    BU_BO_REL_
    SG_MUL_VAL_

BS_:

BU_: ECU1 ECU2

BO_ 100 ExampleMessage: 8 ECU1
 SG_ ExampleSignal : 0|8@1+ (1,0) [0|255] ""  ECU2

マネジメントコンソールから車両モデルを作成する

マネジメントコンソールから車両モデルを作成します。
名前と説明を入力し次に進めます。
※ 説明はオプションと記載されてますが、説明を入力しないと最後の確認画面で作成する際にエラーになるため、入力しておきます。

Screenshot 2025-04-16 at 10.13.06

シグナルを追加するは、いったん何も選択せず、次に進めます。
シグナルをインポート画面で ファイルを選択 からdbcファイルを選択し、アップロードします。
画面下部にインポートされたシグナルが表示されます。

Screenshot 2025-04-16 at 10.55.54

次に進めると、車両モデルの属性を追加できます。

Screenshot 2025-04-16 at 10.56.06

最後に確認画面が表示されるので内容を確認し、車両モデルを作成します。

Screenshot 2025-04-16 at 10.56.15

作成が完了すると、車両モデルの画面が表示されます。

Screenshot 2025-04-16 at 10.56.33

マネジメントコンソールからデコーダーマニフェストを作成する

デコーダーマニフェストのタブを開き、デコーダーマニフェストを作成 をクリックします。

Screenshot 2025-04-16 at 12.12.59

デコーダーマニフェスト作成画面が開いたら、名前を入力し、次に進みます。

Screenshot 2025-04-16 at 12.13.36

ネットワークインターフェイスを設定します。

  • ネットワークインターフェイスタイプはCAN_INTERFACEを選択
    • マネジメントコンソールでは他にOBD_INTERFACEを選択できます
    • 次の場合にはAWS CLIなどからデコーダーマニフェストの作成が必要です
      • CANのプロトコル名やプロトコルバージョンなどオプショナルなプロパティを設定する場合
      • 車両ミドルウェアネットワークインターフェイスやカスタムデコードインターフェイスを選択する場合
    • 参考: AWS IoT FleetWise デコーダーマニフェストを作成する - AWS IoT FleetWise
  • ネットワークインターフェイス名はcan0と入力します
  • ネットワークインターフェイスIDはもともと生成されていた値そのままを用います
  • シグナルはExampleSignalを選択します
  • ファイルをアップロードからDBCファイルをアップロードします

DBCファイルをアップロードすることで、シグナルのデコーダー情報を設定されます。

Screenshot 2025-04-16 at 12.40.32

次に進めると、デコーダーマニフェストの確認画面が表示されるため、内容を確認し、作成します。

Screenshot 2025-04-16 at 12.15.01

作成が完了すると、デコーダーマニフェストの画面が表示されます。

Screenshot 2025-04-16 at 12.15.12

AWS CLIからデコーダーマニフェストを作成する

次は先ほどマネジメントコンソールで作成したデコーダーマニフェストと同様のものをAWS CLIから作成してみます。
AWS CLIではデコーダーマニフェストを作成し、その後DBCファイルをimportすることでデコーダー情報を設定します。

まずはデコーダーマニフェストを作成します。model-manifest-arnには、先程マネジメントコンソールから作成した車両モデルのARNを指定します。

マネジメントコンソールからデコーダーマニフェストを作成した際との違いとして、AWS CLIでは、canInterfaceにprotocolNameやprotocolVersionを指定できます。シグナルのデコード情報は、DBCファイルをimportするため、ここでは設定しません。
また、今回は試しませんが、DBCファイルを使わずにデコード情報を定義したり、CAN以外のネットワークインターフェイスを定義することも可能です。

aws iotfleetwise create-decoder-manifest \
  --name example_decoder2 \
  --model-manifest-arn arn:aws:iotfleetwise:us-east-1:{アカウント番号}:model-manifest/test_car \
  --network-interfaces '[
    {
      "interfaceId": "can_interface",
      "type": "CAN_INTERFACE",
      "canInterface": {
        "name": "can0",
        "protocolName": "CAN",
        "protocolVersion": "2.0b"
      }
    }
  ]'

DBCファイルをimportしてデコーダーマニフェストを作成する場合、import-decoder-manifestコマンドを使います。networkInterfaceのところにはデコーダーマニフェスト作成時に指定したinterfaceIdを指定します。canDbcFilesにはDBCファイルをBASE64エンコードした内容を指定します。

aws iotfleetwise import-decoder-manifest \
  --name example_decoder2 \
  --network-file-definitions canDbc="{networkInterface=can_interface,canDbcFiles=[$(base64 -b 0 -i ./example.dbc)],signalsMap={ExampleSignal=ExampleSignal}}"

作成したデコーダーマニフェストを確認してみます。

aws iotfleetwise get-decoder-manifest \
  --name example_decoder2

statusがDRAFTになっています。AWS CLIからデコーダーマニフェストを作成した場合は、ステータスがDRAFT状態になります。DRAFT状態の場合には、デコーダーマニフェストを紐づけた車両モデルから車両を作成できませんが、デコーダーマニフェストの更新が可能なようです。一方で、マネジメントコンソールからデコーダーマニフェストを作成した場合にはステータスがACTIVE状態になります。ACTIVE状態の場合には、車両モデルから車両を作成できますが、デコーダーマニフェストの更新ができなくなります。

{
    "name": "example_decoder2",
    "arn": "arn:aws:iotfleetwise:us-east-1:600032830501:decoder-manifest/example_decoder2",
    "description": "",
    "modelManifestArn": "arn:aws:iotfleetwise:us-east-1:600032830501:model-manifest/test_car",
    "status": "DRAFT",
    "creationTime": "2025-04-16T14:03:34.852000+09:00",
    "lastModificationTime": "2025-04-16T14:03:55.712000+09:00"
}

登録されたデコード情報を確認してみます。

aws iotfleetwise list-decoder-manifest-signals --name example_decoder2

canSignalには、DBCファイルに定義されていたシグナル定義と同等の内容が登録されていそうです。

{
    "signalDecoders": [
        {
            "fullyQualifiedName": "ExampleSignal",
            "type": "CAN_SIGNAL",
            "interfaceId": "can_interface",
            "canSignal": {
                "messageId": 100,
                "isBigEndian": false,
                "isSigned": false,
                "startBit": 0,
                "offset": 0.0,
                "factor": 1.0,
                "length": 8,
                "name": "ExampleSignal"
            }
        }
    ]
}

さいごに

マネジメントコンソールとAWS CLIそれぞれでDBCファイルを用いたデコーダーマニフェストの作成を試しました。DBCファイルを用いることでデコード情報を再利用できるため便利です!
現時点では、マネジメントコンソールからできることは限られているようなので、AWS CLIを併用するのが良さそうです。

VSSデータのimportでもシグナルカタログの登録ができます。CANデータ以外のシグナルデータも含めて定義する場合やノードでの階層化なども可能なので、本格的に活用する場合はVSSを使うのが良さそうです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.