$30 off During Our Annual Pro Sale. View Details »

OBD2 x RaspberryPiで車両情報を蓄積&BIで分析できるようにする

OBD2 x RaspberryPiで車両情報を蓄積&BIで分析できるようにする

下記イベントでの登壇内容です。
https://abeja-innovation-meetup.connpass.com/event/232996/

Hiroyuki Ootaguro

January 28, 2022
Tweet

More Decks by Hiroyuki Ootaguro

Other Decks in Technology

Transcript

  1. 2021年01月21日
    大田黒 紘之
    https://abeja-innovation-meetup.connpass.com/event/232996/
    ABEJA TechLT #3
    OBD2 x RaspberryPiで
    車両情報を蓄積&BIで分析できるようにする

    View Slide

  2. Confidential
    ABEJA Advent Calendar 2021の1日目の記事。
    https://qiita.com/xecus/items/c96bec764e20946059a0
    元ネタ 社内勉強会用

    View Slide

  3. Confidential
    自己紹介
    大田黒 紘之
    @xecus , Born in Chiba 1994
    ■東京都立産業技術高専 医療福祉工学科
    コース (2009/4 - 2014/3)
    メカトロニクスとか数値計算周りを専攻。
    人工衛星開発も一部。
    ■首都大学東京に編入
    電気電子工学、半導体周りを専攻(量子効
    果デバイスとか)
    ■ABEJA 2015年〜
    ・Insight for Retail (IoT x AI利活用プロダク
    ト)の立ち上げ・拡販
    ・AIプロダクト事業部 プラットフォーム
    グループMGR (2022年1月現在)
    社内勉強会用

    View Slide

  4. Confidential
    8月にTOYOTA RAIZEを納車しました 社内勉強会用

    View Slide

  5. Confidential
    突然ですが....
    世界で一つだけのMyドライブレコーダーを作りた
    い!!
    (OBD2車両情報+ AI Enabled Camera = ???)
    社内勉強会用

    View Slide

  6. Confidential
    何がやりたいか
    6
    ドライブ
    レコーダー
    <従来のドライブレコーダー>
    SD
    Card
    <今考えているドライブレコーダー案>
    ドライブ
    レコーダー
    SD
    Card
    動画
    ストレージ AI推論による
    意味づけ
    車両情報
    (運転情報)
    BIツ
    ール

    事故が起きた時に自分・警察・保険会社が見る
    (それ以外のシーンではほとんど使わない)
    ECU
    車を運転し続けるという体験をアップデートできる
    Something
    GPS
    社内勉強会用

    View Slide

  7. Confidential
    ①現状のドライブレコーダーが持つ特性とデータの利活用の問題
    【容量観点】
    ・SDカード数時間分しか持たない。消され続けるデータ。過去を振り返る事はできない。
    【データ利活用観点】
    ・動画を確認する時に、結構めんどくさい(SDカード抜いて、変換アダプター経由でPCに...)
    ・映像をAI/MLに解析させる事で「意味情報」をもっと利活用できるのでは?
    【記憶媒体の問題】
    ・SDカードは書き換え寿命があるので、いつか壊れる。ファイルシステム壊れたらデータはお釈迦になる。。。
    課題感
    8
    社内勉強会用

    View Slide

  8. Confidential
    ②「ドライブレコーダー」という存在・役割をアップデートできるのではないか?
    もともと、当たり屋の裁判かなにかで、「ぶつかっていないという証拠が無い以上、事故は成立する」という判例が
    出て、「自分の身は自分で守るしか無い」という業界の流れから普及したと推測。
    (カメラで映像が取得できていれば十分という状況)
    ★IoTでBigDataでAIな時代&21世紀なので、もっとなんかできるのでは?
    ★「身を守る為のローカル映像記録システム」の次の役割は何か??
    課題感
    9
    社内勉強会用

    View Slide

  9. Confidential
    課題解決のアプローチ
    10
    ・ビジョン思考とデザイン思考を組み合
    わせて、アプローチしてみる。
    ・自分自身ソフトウェアエンジニアなの
    で、プロトタイピングをしながら進めて
    みる
    (仲間募集中です!笑)
    https://diamond.jp/articles/-/195874?page=2
    社内勉強会用

    View Slide

  10. Confidential
    機能の指向性
    11
    ● ①細かい車両情報(OBD)を蓄積&BIツールで分析できるようにする (オレオレドラレコ基本機能)
    ● ②撮影した動画をクラウド上で見ることができる(オレオレドラレコ基本機能)
    ● ③車の維持が楽になる世界
    ○ 時間・走っている場所毎のガソリン消費量や燃費変動の見える化。ガソスタレコメンド。
    ○ 車の部品のリアルタイム故障検知・予測(車のオルタネータが劣化してきた、BAT電圧低い等)
    ○ オイル交換やオイルフィルター交換等の目安と近くのお店をレコメンドしてくれる世界
    ● ④車と家族の思い出を振り返られるような世界
    ■ GPSを用いた走行ログの蓄積と可視化。動画と連携。携帯のアプリから見る事ができる。
    ● ⑤解像度の高い運転危険情報が見えるようになる世界
    ○ 動画情報の意味解析を通じて、地域ごとのヒヤリハット情報等を蓄積化 & カーナビ反映
    ○ 例:地域ごとの危険イベントの集計・見える化
    ● ⑥企業やドライバーが環境に配慮できる世界観
    ○ 低炭素社会実現の為のCo2排出量の見える化 (SDGs, ESG文脈でもありそう)
    個人
    社会
    社内勉強会用

    View Slide

  11. Confidential
    OBD2
    12
    ● OBD = On Board Diagnosis (車の自己診断機能)
    ● CAN通信というプロトコルを拡張している
    ● OBDの歴史は深い
    ○ 1971年 FI(Fuel Injection: 電子制御式燃料噴射装置)搭
    載車の登場
    ○ 1980年代 自己診断機能で修理しやすく
    ○ 1982年 自己診断機能の統一化からOBDの誕生 =>
    OBDのベースに
    ○ 1996年 OBD-IIの登場 (20年以上前からある枯れたプ
    ロトコル)
    ● めっちゃいろんなデータが取れる
    ○ https://en.wikipedia.org/wiki/OBD-II_PIDs
    仮説:OBDを使えば、超細かい車両情報が
    ドライブレコーダーに記録できるかも
    社内勉強会用

    View Slide

  12. Confidential
    OBD2
    13
    ※OBD端子の位置はメーカー・車種に依存 (TOYOTA RAIZEは運転席の足元に)
    社内勉強会用

    View Slide

  13. Confidential
    OBD-IIを利活用するには
    14
    ECUや周辺コンポーネントのCANバスがOBD用物理ポートから出ているので、
    そこを拝借して、データの送受信を行う (結構怖いw)
    社内勉強会用
    http://make.bcde.jp/raspberry-pi/obd2canで自動車と通信ハード編/
    https://monoist.itmedia.co.jp/mn/articles/0807/09/news140.html

    View Slide

  14. Confidential
    OBD-IIを利活用するには
    15
    オレオレレコーダープログラム
    On RaspberryPi
    オレオレプロトコルスタック
    ここをうまくや
    ってくれる物理
    層周りのハード
    ウェアが必要
    社内勉強会用

    View Slide

  15. Confidential
    OBD2 (CANBUS)の通信ハードウェア
    16
    MCP2515
    CANコントローラー
    MCP2551
    CANトランシー
    バーIC
    https://docs.longan-labs.cc/1030001/
    CANコントローラのICを使い、RaspberryPiやMCUと通信できるようにする
    ※カニチップ(Ethernetコントローラー)みたいなもん
    社内勉強会用
    https://diary.freebbs.biz/archives/cat23/raspberrypi_spi.php

    View Slide

  16. Confidential
    OBDコネクタからCANバスへのアクセス
    17
    社内勉強会用
    CANコントロー
    ラーモジュール
    (UART制御)
    USB⇔UART変

    モジュール
    社内勉強会用

    View Slide

  17. Confidential
    OBD2
    18
    社内勉強会用

    View Slide

  18. Confidential
    OBD2フレームの解析
    19
    ECU (PID: 0x7E8)からサービスID(0x01)・データPID(0x0C: EngineSpeed)のリクエストに対す
    る応答。データLengthは4Byte
    データは 0x0D190000(00) → (0x0D ✕ 256 + 0x19) / 4 = 838 Rpm
    社内勉強会用

    View Slide

  19. Confidential
    システム全体像
    20
    社内勉強会用
    Raspberry
    Pi
    車両情報等
    BIツールで
    振り返り

    View Slide

  20. Confidential
    RaspberryPi ⇔ 車両部分
    21
    CAN通信モジュール
    USB⇔CAN変換
    社内勉強会用
    USB⇔Serial変換
    (FT234等)
    Serial⇔CAN通信
    (Seeed社 Serial CAN-
    BUS Module)
    MCP
    2551
    MCP
    2515
    CAN通信モジュール
    RaspberryPi
    CAN通信モジュール
    OBD情報取得
    プログラム
    (obd_recorder.go)
    /mnt/usb_memory
    Engine_rpm.jsonl
    xxxx.jsonl
    CAN通信モジュール
    OBD2端子
    ECU #1
    ECU #1
    ECU #1
    車両側
    /dev/tty
    USB0

    View Slide

  21. Confidential
    RaspberryPi ⇔ クラウド(GCP)部分
    22
    CAN通信モジュール
    RaspberryPi
    CAN通信モジュール
    /mnt/usb_memory
    CAN通信モジュール
    GCP (クラウド側)
    Streaming Insert
    Engine_rpm.jsonl
    xxxx.jsonl
    Service
    Account
    ※数時間程度のざくっとプロトタイピング。下記プラグインを利用
    https://github.com/fluent-plugins-nursery/fluent-plugin-bigquery
    社内勉強会用
    OBD情報取得
    プログラム
    (obd_recorder.go)
    car_dataset
    engine_rpm_table
    xxxx_table

    View Slide

  22. Confidential
    データ取得の様子@京葉市川パーキングエリア
    23
    社内勉強会用

    View Slide

  23. Confidential
    BIツール(Redash) x OBDデータ
    24
    ● 現在取得できているデータ
    ○ エンジン回転数(RPM)
    ○ エンジン負荷(%)
    ○ アクセルの位置(%)
    ○ 冷却材の温度(C)
    ○ 大気の圧力(kPA) →高度情報取れる
    ○ インテークの温度
    ○ インテークの圧力
    ○ バッテリーの電圧
    ○ Short Time Fuel Trim (短期燃料トリム)
    ○ Long Time Fuel Trim (長期燃料トリム)
    ○ エンジン始動からの経過時間
    社内勉強会用

    View Slide

  24. Confidential
    WebカメラをRaspberryPiに接続
    25
    ● ドンキカメラ
    ○ MJPG
    ■ 1280x720 30FPS
    ○ YUYV
    ■ 640x360 30FPS
    社内勉強会用

    View Slide

  25. Confidential
    ProtoTyping部分
    26
    RaspberryPi
    CAN通信モジュール
    video_recorder.py
    /mnt/usb_memory/videos
    CAN通信モジュール
    GCP
    Streaming Insert
    YYYYMMDD-HHMMSS.mp4
    Service
    Account
    video_uploader.py
    社内勉強会用

    View Slide

  26. Confidential
    OpenCVでWebカメラの映像を保存 (video_recorder.py)
    27
    ● OpenCVのVideoCaptureとVideoWriterを用い
    て、60秒おきにファイル書き出しを実施
    ● 動画中に撮影時間をputTextを記載
    社内勉強会用

    View Slide

  27. Confidential
    保存した動画のGCSアップロード (video_uploader.py)
    28
    ● VideoRecorderの出力するmp4ファイルを随
    時GCSへ動機
    ● (FluentdやEmbulk等で、ファイルの
    TIMESTAMPからパスをいい感じに調節しなが
    らアップロードできるならそちらに切り替えた
    い)
    社内勉強会用

    View Slide

  28. Confidential
    ProtoTyping部分
    29
    社内勉強会用

    View Slide

  29. Confidential
    実際にGCSに溜まったファイル
    30
    社内勉強会用

    View Slide

  30. Confidential
    オレオレドライブレコーダーの映像解析 (Segmentation適用)
    31
    ● 映像データの意味付け
    ○ ObjectDetection
    ■ https://github.com/open-
    mmlab/mmdetection
    ○ Segmentation
    ■ https://github.com/open-
    mmlab/mmsegmentation
    社内勉強会用

    View Slide

  31. Confidential
    困り毎
    32
    ● OpenCVのVideoCapture & VideoWriterの負荷が高すぎて、フレーム欠損する
    ○ 30FPS取れていない(体感半分程度)
    ○ 仮説①:ライブラリがシングルコア活用の為、コア1つ1つの性能が微妙なRaspberryPiではすぐ頭打ちが
    来る...?
    ■ RaspberryPi 4なら行ける説
    ○ 仮説②:USB周りのデータ転送レートが遅い
    ■ リアルタイムカーネルに切り替えて解決している感...?
    ■ http://tnoho.com/web/webrtc/689
    社内勉強会用

    View Slide

  32. Confidential
    最後に
    34
    ● 利活用に関して皆様からアイデアを頂きたくです!
    ○ Slackでコメントいただけますと嬉しくです!
    ○ どなたか、一緒に発展させていきませんか?!
    ● 今後の展望?トライ?
    ○ GPSセンサーの装着
    ■ GNSS受信キットを買った!
    ○ ドライブレコーダー映像 x AI
    ■ 取得動画のセグメンテーションや動画Caption付け
    ○ ABEJA Platform上への実装
    社内勉強会用

    View Slide