On-vehicle movie overlaying vehicle information using CANUSB

I overlaid various vehicle information (i.e. speed, rpm, and so on) extracted by CANUSB on my on-vehicle movie.

HS-CAN Data

At first, I tried to use information posted by Madox.NET, but unfortunately HS-CAN Data extracted by my RX-8 look totally different from Madox’s one.

I’m not sure why there are big differences. But one possible reason is that Madox’s RX-8 is AT. My RX-8 is 2007 5MT model.

  • RPM: ID 0x201, (data[0] * 256 + data[1]) / 4
  • Vehicle Speed(km/h): ID 0x201, (data[4] * 256 + data[5] – 10000) / 100
  • Accel Throttle Position(0 – 255): ID 0x201, data[6]
  • Hand Brake(on/off): ID 0x212, (data[4] & 0x40)
  • Foot Brake(on/off): ID 0x212, (data[5] & 0x08)
  • Declutching(on/off): ID 0x231, (data[0] & 0xf0)
  • Engine Coolant Temp(degree celsius): ID 0x240, data[3] – 40
  • Intake Air Temp(degree celsius): ID 0x250, data[3] – 40

Here is what I analyzed.

I want to extract some more information such as steering column angle, but I haven’t yet.

Overlaying

I used Apple’s Quartz Composer for overlaying information.

CAN + Quartz Composer + 車載動画 = PS4動画?

CANデータを使った動画、もう少し派手めに…ということで、作ってみました。 といっても、CANのデータからいちいち速度などの情報を手で入力していては日がくれてしまうので、それらを自動でレンダリングする術を考えなければなりません。

今回は、Quartz Composerのカスタムパッチを作ることでCANログをQuartz Composerに取り込むことにしました。

Quartz Composer?

Quartz Composerは、いわゆるビジュアルプログラミング環境です。Mac OS Xの開発環境(無料)に同梱されています。

これを使うと簡単にモーショングラフィクスを作成できるのですが、当然のことながらCANデータログを読み込んでくれるようなパッチはありませんので、それを自作することにしました。

昔はカスタムパッチの作成手順は公開されていなかったので面倒でしたが、今はオフィシャルの情報をたどると簡単に作ることができます。 Objective-C 2.0のプロパティなどを使うことで、パッチのポートの宣言なども煩雑にならずにできるようになりました。

Quartz Composerのオフラインレンダリング

QuickTime 7の時代には、QuickTime PlayerをPro版にするとQuartz Composerのパッチを動画として書きだすことができました。 Mac OS X 10.6になってQuickTimeはQuickTime Xに刷新されましたが、一応オプションでQuickTime 7をインストールすることができます。

最初はこれでなんとかなるかと思っていたのですが、どうやらカスタムパッチを含むコンポジションの場合は、セキュリティなどの問題でQuartz Composer以外では無効にされてしまうようです。

Appleのデベロッパ向けのサイトにQuartz Composer Offline Renderingというサンプルコード(最初の10フレームを書き出す)があるのですが、どうもコードが古いせいか、きちんと静止画を書きだすことができませんでした。色味などがおかしい…。

しかし、Leopard時代から書き出し関係で新しいメソッドが用意されており、そちらに書き換えるとうまく静止画を書き出すことができました。それらを30fpsで全フレームをレンダリングし、最後にフレームをまとめて動画にする、というようにプログラムを書き換えました。

このOffline Renderingに関してはそこそこ需要があるような気がするので(そもそもQuickTime 7を入れたくないですし、Proにするのが無料じゃないですし)、次のエントリでまとめて説明、配布しようと思います。

まとめ

CANデータを車載動画にかぶせるようなものを作るため、Quartz Composerのカスタムパッチを作成してレンダリングしてみました。

今回の動画は、ビデオカメラで撮影した動画を運転終了後にCANのログと重ねあわせましたが、USB接続のWebカメラなどを使えばリアルタイムレンダリングも可能だと思います。

これで生放送とかしても面白そうですね。