Mobility Technologies Co., Ltd. CPUのアーキテクチャはx86/x64とは限らない 7 Webの場合 IoTデバイスの場合 CPU アーキテクチャ x86/x64 ARM (が多い) n CPUアーキテクチャとは主に2種類ある n x86/x64 : サーバ、パソコン n ARM : IoTデバイス、スマートフォン n 難しい箇所 n MacOSやクラウドの仮想マシンでコンパイルしたバイナリは動かない n →クロスコンパイルが必要 n どうやってクロスコンパイルするか n Go⾔語やRustが開発しやすい n →JapanTaxiドライブレコーダではメモリ管理に厳格なRust⾔語を採⽤
Mobility Technologies Co., Ltd. プログラムのサイズに制限がある 8 Webの場合 IoTデバイスの場合 プログラムの サイズ 気にしたこと無い。 磁気ディスクやSSDの容量は 100 Gbyte以上ある。 フラッシュディスクは16Gbyte〜 64Gbyte程度 n 難しい箇所 n プログラムのコンパイル後のサイズを気にする必要がある n ライブラリは潤沢には使えない n →他のモジュールと同じライブラリを使う n 開発⾔語は複数使えない n →Rust⾔語のみ
Mobility Technologies Co., Ltd. n 難しい箇所 n ネットワークは常に切れる想定で開発する必要がある n リトライを仕込む n サーバ側でどこまで処理したかを管理し、再接続時にレジュームできるようにする n ハマった箇所 n 無線通信が⼲渉する n Wifiの2.4GHz帯の電波は、他のwifi機器やbluetooth機器と⼲渉する n →デバイス間のチャンネル調整が必要 n 無線電波が弱い n →天井がないと電波が反射が少ない ネットワークは切れることがある 9 Webの場合 IoTデバイスの場合 通信品質 安定 たまにパケットが落ちるぐらい 不安定 場所によって切れる
Mobility Technologies Co., Ltd. 電⼒は有限である 12 n 難しい箇所 n 消費電⼒を抑える n エンジンがオンの場合はよいが、オフの場合はバッテリーの電⼒を⽤いた動作になる n ⻑時間の起動はバッテリーあがりを引き起こす可能性がある n ⾞との調整が必要 n 最⼤起動時間を決めて、それ以内に処理を終わらせるようにする Webの場合 IoTデバイスの場合 消費電⼒ え?なんですかそれ? 省電⼒を⼼がける。 起動時間を気にする。
Mobility Technologies Co., Ltd. n 難しい箇所 n エラー内容をサーバに返す前に死なれると何が起きていたかわからない n ログにしかエラー内容は出⼒されない n デバイスに接続してログを確認するしかない n SSHサーバは⼊っていないため、SSH接続はできない n タクシー⾞両に⾏きコンソールケーブルを接続して参照する必要あり ログは⾒ることができない 13 Webの場合 IoTデバイスの場合 ログの参照 Cloud watch ポチー ssh ポチー 現地にいってデバイスに物理接 続
Mobility Technologies Co., Ltd. n 難しい箇所 n OTA(Over The Air)による⾃⼰アップデートシステムの整備が必須 n デバイス側がオンラインになったときに、アップロードプログラムを確認し、あれば⾃ ⾝を更新する仕組み n すべてのモジュール更新がOTAでできるわけではない n インストールメディアをいれたSDカードを持ってタクシー⾞両に⾏き、SDカードをド ライブレコーダに指してインストール作業が必要 n 数百台の作業になることもあり、⼈海戦術となる アップデートは⼀⼤イベント 14 Webの場合 IoTデバイスの場合 デプロイの⽅法 git pull ポチー OTA (Over The Air) or ⼈海戦術
Mobility Technologies Co., Ltd. n Webのデータ収集とIoTデバイスのデータ収集は必要なスキルセットが違う! n バイナリデータの扱い n クロスコンパイル・組み込みプログラミング n ハードウェアの知識 n ネットワークの知識 n 電源への配慮 n ログ参照やアップデートへの考慮 n 時計への配慮 まとめ 16