AWS IoT FleetWiseのチュートリアルをRaspberry Piを使ってやってみた

AWS IoT FleetWiseのチュートリアルをRaspberry Piを使ってやってみた

Raspberry Piはなんぼあってもいいですからね
Clock Icon2025.04.17

大阪オフィスの小倉です。

AWS IoT FleetWiseに入門するために、Raspberry Piを使ったチュートリアルを試してみました。

AWS IoT FleetWiseは、車のセンサー等からクラウドにデータを収集するマネージドサービスです。

Raspberry Piは説明不要ですね。あなたの家にも2、3個転がっていると思います(?)

事前準備

今回実施するチュートリアルの内容は以下です。

Raspberry Pi Tutorial

チュートリアルの前提条件として、A CAN 'Hat' for Raspberry Pi with an MCP2515 CAN controller such as... と書かれており、Raspberry Pi以外に CAN controllerが必要そうなのですが、今回これは仮想CANソフト(can-utils)で代用します。

用意したもの

  • Raspberry Pi Zero 2 W
    • 電源ケーブル
    • MicroUSB対応のHub(マウスとキーボードの接続用)
    • USBマウスとキーボード
    • MicroHDMI - HDMIケーブル(Raspberry Piからのディスプレイ出力用)
  • MicroSDカード
  • AWSアカウント(バージニアリージョンを使用)
  • 手元のPC

Raspberry Pi Zero 2 Wは、Micro HDMIで外部ディスプレイに繋いでおいたり、USB Hub経由でマウス、キーボードを繋げるようにしておくと安心です。

やってみる

1.Raspberry Piの設定

以下を見ながら進めます

Step 1: Setup the Raspberry Pi

https://cdimage.ubuntu.com/ubuntu/releases/20.04/release/ から、Raspberry Pi Generic (64-bit ARM) preinstalled server image のリンクを探し、Raspberry Pi用Ubuntu20.04を手元のPCダウンロードします。

ダウンロード後、Balena Etcherを使ってMicroSDカードにイメージを書き込んだ後、Raspberry Piにセットし起動します。

起動後、まずはWifiでネットワークに接続できるようにします。接続先の設定は、/etc/netplan/50-cloud-init.yamlを参考に、/etc/netplan/99-cloud-init.yamlを新たに作成しました。

network:
    wifis:
        wlan0:
            dhcp4: true
            optional: true
            access-points:
                <ssid>:
                    password: "<password>"
    version: 2

(※Raspberry Pi Zero 2 Wで使えるWifiは2.4GHz 802.11 b/g/nです)

一度Raspberry Piを再起動して、ネットワークに接続されることを確認しておきます。

ネットワークに接続できたら、ドキュメント通りソフトウェアのアップデートと、unzipのインストールを行います。

sudo apt update \
&& sudo apt upgrade -y \
&& sudo apt install -y unzip

ドキュメントの手順6〜8-ⅰまでは、CAN HATの設定のようですが、ここを仮想CANで代用します。
can-utilsをインストールします。

https://github.com/linux-can/can-utils

sudo apt install can-utils

仮想CANモジュールをロードします

sudo modprobe vcan

ロードできたか、lsmod | grep vcanで確認します。

vcan                   16384  0 

vcan0という名前で、仮想CANインターフェースを追加し、その後アクティブ化します。

sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

ip link show dev vcan0で確認します。

3: vcan0: <NOARP,UP,LOWER_UP> mtu 72 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/can

ここまで実施したらチュートリアルの8-ⅲに戻り、Pythonスクリプトを動かします。
作成したインターフェース名vcan0に書き換えた以下を実行すると、
スクリプトで生成されたデータがターミナル上に表示されます。

cd ~/aws-iot-fleetwise-deploy/tools/cansim
python3 cansim.py -i vcan0
2025-04-15 12:19:39.530766 Set AMBIENT_AIR_TEMPERATURE to 26
2025-04-15 12:19:39.530887 Set ENGINE_COOLANT_TEMPERATURE to 86
2025-04-15 12:19:39.531008 Set THROTTLE_POSITION to 200
2025-04-15 12:19:39.531129 Set ECM_DTC1 to True
2025-04-15 12:19:39.531252 Set ECM_DTC3 to 175
2025-04-15 12:19:39.531402 Set ECM_DTC3 to 1: ['0x01', '0xAA', '0xBB', '0x6']
...

なお、私の場合は実行時にModuleNotFoundError: No module named 'tenacity'となり失敗したため、
追加でpip3 install tenacityを行うことで動作するようになりました。

2.開発用EC2の準備

以下の通りに進めます。私の場合はバージニアリージョンでEC2を起動しました。

Step 2: Launch your development machine

3.FleetWise Edge Agentのコンパイル

これも以下の通りで問題ありません。依存関係のインストールに多少時間が掛かります。

Step 3: Compile Edge Agent

4.AWS IoT認証情報のプロビジョニング

これも以下の通りで問題ありません。

Step 4: Provision AWS IoT credentials

この手順を実行すると、AWS IoTにモノ、証明書、ポリシー等が作成されます。モノはFleetWiseで管理する車両と後ほどリンクします。
vscode-drop-1744859436975-ff6sqzcwc15.png
vscode-drop-1744859443652-4lhf0sd721i.png

5.FleetWise Edge Agentのデプロイ

Step 5: Deploy Edge Agent

Step5の手順3を実行すると、FleetWiseのEdge Agentがサービスとしてインストールされますが、fwe@0 didn't start correctly. Please check the logs below:というエラーが表示されます。

これはEdge Agentがcan0というインターフェースを使用するように設定されているためです。
Step5手順3のスクリプトで作成された、/etc/aws-iot-fleetwise/config-0.jsonnetworkInterfacescan0からvcan0に修正します。

{
  "version": "1.0",
  "networkInterfaces": [
    {
      "interfaceId": "1",
      "type": "canInterface",
      "canInterface": {
        "interfaceName": "vcan0",  // 恐らくこっちは今回使われないので変更不要かも
        "protocolName": "CAN",
        "protocolVersion": "2.0A"
      }
    },
    {
      "interfaceId": "0",
      "type": "obdInterface",
      "obdInterface": {
        "interfaceName": "vcan0",  // can0 -> vcan0に修正
        "pidRequestIntervalSeconds": 5,
        "dtcRequestIntervalSeconds": 5,
        "broadcastRequests": true,
        "obdStandard": "J1979"
      }
    }
  ],

変更後、~/aws-iot-fleetwise-deployディレクトリでsudo ./tools/install-fwe.shを実行することで、正常にインストール、起動します。

ubuntu@ubuntu:~/aws-iot-fleetwise-deploy$ sudo ./tools/install-fwe.sh
Stopping fwe@0
Starting and enabling fwe@0
fwe@0 started successfully

6.Raspberry Piにキャンペーンを展開

Step 6: Deploy a campaign to the Raspberry Pi

こちらの手順のdemo.shを実行すると、

  • AWS IoT FleetWiseの各リソース作成
  • Amazon Timestreamの作成
  • デバイスからのデータ収集を待機
  • 収集データをHTML出力

がまとめて実行されます。

HTMLは以下のようなものが出力されます。
vscode-drop-1744859507574-ye2lrjpqb19.png

また、AWSIoTの設定でログ出力を有効化していると、CloudWatch LogsのAWSIotLogsV2ロググループから、Raspberry PiがTopicにPublishしているログが観測できました。
checkinが車両ステータス、signalsがキャンペーンによって車両から収集されるデータを送信しているものになります。
vscode-drop-1744859497865-31w892s4ydw.png

(補足)HTMLの出力に失敗した場合

私の場合はdemo.shの実行時に以下のエラーが出力され、HTMLが作成できないことがありました。
Raspberry Piからデータを送信できておらず、Timestreamに格納されなかったようです。

An error occurred (ValidationException) when calling the Query operation: line 1:66: Column 'vehicleName' does not exist
WARNING: Could not save timestream results for fwdemo-rpi, was any data collected?
Error: No output files saved, was any data collected on any vehicles?

私のケースではRaspberry Piで実行しているpython3 cansim.py -i vcan0のスクリプトを再起動させることで、データが送信されるようになりましたので、もし同様のエラーに遭遇した方は試してみてください。(Edge Agentの再起動なども有効かもしれません)

demo.shは、リソース作成〜HTML出力までまとめて行う為、再度実行する場合は、

  • クリーンアップスクリプトの実行で、FleetWise関連リソースを削除
    • cd ~/aws-iot-fleetwise-edge/tools/cloud && ./clean-up.sh
  • 作成されたAmazon TimestreamのテーブルとDBをマネジメントコンソールから削除
  • 再度、展開スクリプト(demo.sh)をドキュメント通りに実行

の手順でやり直すことができます。

7.クリーンアップ

Step 7: Clean up

チュートリアル完了後は、こちらの手順でリソースを削除しましょう。
Amazon Timestreamは削除されないので、自分で削除しておいてください。

まとめ

仮想CANを使ってRaspberry PiでFleetWise Edgeを動作させることができました。
特にデバイス側については詳しい同僚に聞きながらになりましたが、チュートリアルを通して、AWS IoT FleetWiseについての理解をかなり深めることができたと思います。

また、手元の実デバイスで動かせるのも楽しいですね。

Raspberry Piはいくらあっても困らないので、皆さんも試してみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.