目次

概要

概要

 WinSSMとは、スバル(SUBARU)の インプレッサ(IMPREZA) や レガシィ(LEGACY) などに搭載されている SSMP : Subaru Select Monitor Protocol を使って通信を行い、ECU : Engine Control Unit 情報を表示します。USBカメラにも対応しており、ECU情報の他に映像を記録できます。

 ソフトウェアの動作に最低限必要なものは、Windows系のコンピュータと OpenPort系のケーブル1本で済みます。そのため、電子/機械式の後付メータや他社製ロガーと異なり、とても簡単にシステムを構築できます。

機能一覧

  • ECU情報の表示
    • 最大値/最小値の保持 (ピークホールド)
    • 丸型メータ表示
    • 表示項目一覧
      • エンジン回転数 (rpm)
      • アクセル開度 (%)
      • 車体速度 (km/h)
      • ブースト圧 (kg/cm^2)
      • 水温 (C)
      • 吸気温度 (C)
      • ギアポジション (1〜6)
  • 簡易ラップタイム表示
  • カメラによる映像撮影及び録画
  • 各種情報とカメラ映像の合成 (スーパーインポーズ)
    • 必須表示 (表示を消すことができません)
      • ソフトウェア名及びバージョン
      • 現在の日時
    • 選択表示 (表示しないこともできます)
      • ECU情報
      • ラップタイム
  • ECU情報の CSV出力 *1

動作環境及び必要な機器

ソフトウェアのセットアップ

ソフトウェアのダウンロード

ダウンロードしたファイルを解凍する

  • 適当なフォルダを作成して、そこへダウンロードしたファイルを解凍してください
  • C:\WinSSM 辺りだと、後述するコンソールからの操作が楽になります (^^)
もちろんセットアップ先に関係なく、動画やCSVログの保存先は別ドライブにもできます
 
extract.png
 

クルマのセットアップ

OpenPortケーブル

ケーブル

  • あらかじめ PCにドライバをインストールしておいてください
 
OpenPort_00.jpg
 

コネクタの場所

  • 運転席下部にコネクタがあります (写真のペダルは関係ありません (^^;))
 
OpenPort_01.jpg
 

コネクタに差し込む

  • OpenPortのケーブルをコネクタに差し込みます
  • ケーブルが邪魔であれば、適当に固定しておくことをお勧めします
 
OpenPort_02.jpg
 

USBカメラ

  • ここでは USBカメラを例に進めます.
  • Windowsが認識できるカメラデバイスであれば、DVカメラなど他の物が使用できます
    試してはいませんが、ビデオキャプチャカードなども使用できるハズです。
  • カメラは必須ではありませんが、安いものでは数千円ですし、あると感激すると思いますよ (^^)
カメラを使用する方は、あらかじめ PCにドライバをインストールしておいてください

USBカメラを取り付ける : UVCAM編

  • 助手席のサンバイザーに固定しましたが、イマイチですね...
  • 振動が多いと落ちてしまいそうです...
 
Camera_01.jpg
 
Camera_00.jpg
 

USBカメラを取り付ける : GR-CAM130N2編

  • こちらも助手席のサンバイザーに固定しましたが、先ほどよりもっとしっかり固定できました
  • なかなか良さそうです
 
Camera_02.jpg
 
Camera_03.jpg
 

車載PC

  • ここではノートパソコンを例に進めます
  • AC電源が用意できるのであれば、デスクトップ型PCでも構いません (^^;

PCの設置とケーブル接続

  • 私はいつも助手席に置いています
  • 振動や衝撃によって PCが動いてしまうのであれば、PCの裏側にマジックテープを
    貼り付けると良いでしょう
  • ただしあまり振動が多い環境では HDDへ障害を与えてしまいますので、
    その場合は簡単な免振装置を作ることをお勧めします
 
PC_00.jpg
 

AC電源

  • WinSSMの開発では必須アイテムですが、ノートパソコンの稼働時間が長いのであれば必要ありません
  • ただしノートパソコンによっては、バッテリー駆動しているとフルに性能を
    発揮できないように設計されているものもあります
  • 動画保存など負荷が大きい場合には、あった方が良さそうです (^^)
 
PC_01.jpg
 

ソフトウェアの設定

  • 設定が多すぎて挫折しそうです、という声が聞こえてきそうですが...
  • 実際はそれほど難しい設定はありませんので、今は勘弁してください (^^;

winssm.cfgについて

  • WinSSMの設定はすべて winssm.cfgというファイルに書き込まれています
  • メモ帳などのテキストエディタを使用して、winssm.cfgのテキストファイルを書き換えてください
 
  • おまけとして、320x240(QVGA)解像度用の qvga.cfgと、後述するメータ表示のみを目的とした mfd.cfgを付けました。

スクリーンについて

  • WinSSMでは、スーパーインポーズのためのスクリーンという画面を持っています。表示や録画の解像度がそれぞれ異なっても、スムーズに表示するための仕組みです。標準では 640x480 (VGA)の解像度に設定されています。
  • 通常は特に書き換える必要はありません...
 
  • より解像度の大きい高画質のカメラを使用する場合には、カメラの解像度に合わせておくと良いでしょう (^^)
;------------------------------------------------------------------------------
;スクリーンサイズの設定
;------------------------------------------------------------------------------
;メータ合成など、内部処理用の解像度.
;モニタウィンドウや録画の解像度がスクリーンサイズと異なるときは、
;内部で自動的に拡大縮小処理が行われる
;0 < SCREEN_SIZE_X < 2048 pixel
;0 < SCREEN_SIZE_Y < 2048 pixel
SCREEN_SIZE_X   = 640
SCREEN_SIZE_Y   = 480

座標系

  • 画面中の左上が (0,0), 右下が (639,479) になっています
  • メータなどの表示位置を変更するときには、この範囲内に設定してください
 
screen.png
 

OpenPort (COMポート) の設定

デバイスマネージャで確認する

  • OpenPortの USBケーブルを PCに刺してから、デバイスマネージャを開いてください
  • COMポートのポート番号 (写真中では、COM4) を確認してください
 
device_manager.png
 

設定を変える

  • winssm.cfgの ECU_xxxの項目を変更しましょう
  • ほとんどテキストファイルのコメント通りですが、一応もう少し詳しく説明します (^^;
    • ECU_USE : ECUに接続する/しないを選択できます。接続しない場合は、メータが変化しません。主に開発用に用意されています
    • ECU_PORT : COMポートの番号を指定します
    • ECU_LOG : CSV出力をする/しないを選択できます。CSV出力の使い方については、後述します
 
;------------------------------------------------------------------------------
;OpenPortの設定
;------------------------------------------------------------------------------
;ECUに接続...
;0         : しない
;1         : する
;それ以外  : 起動しない
ECU_USE                        = 1

;OpenPortのポート(COM)番号
ECU_PORT                       = 4

;ログ出力を...
;0         : 行わない
;1         : 行う
;それ以外  : 起動しない
ECU_LOG                        = 0

シフトポジション表示の設定

シフトポジションの表示と座標

  • シフトポジションは、N, 1 〜 6の範囲で変化します
  • ECUから情報が取得できないため、エンジン回転数、車体速度、タイヤサイズから現在のギア比逆算して、最終的にシフトポジションを判断しています
    • MISSION_USE : シフトポジションの表示をする/しないを選択できます
    • MISSION_FONT : 文字の大きさを決めます. 数字が大きくなるほど文字が大きくなります
    • MISSION_X : 文字表示の X座標を決めます
    • MISSION_Y : 文字表示の Y座標を決めます
;------------------------------------------------------------------------------
;シフトポジション表示の設定
;------------------------------------------------------------------------------
;シフトポジション表示を...
;0          : しない
:1          : する
MISSION_USE                 = 1
MISSION_FONT                = 1.5
MISSION_X                   = 280
MISSION_Y                   = 450

タイヤサイズとギア比の設定

  • 標準では、IMPREZA WRX STi (GDB-F) の標準仕様に設定されています
  • 他の車種やタイヤを変えている方は、カタログなどを参考に適宜設定してください
  • ここの数値は、シフトポジション表示以外では使われていません
 
;タイヤの幅 (mm)
MISSION_TIRE_WIDTH          = 235

;タイヤの扁平率 (%)
MISSION_TIRE_FLAT           = 45

;タイヤの直径 (inch)
MISSION_TIRE_INCH           = 17

;ギア比
MISSION_FIRST               = 3.636
MISSION_SECOND              = 2.375
MISSION_THIRD               = 1.761
MISSION_FOURTH              = 1.346
MISSION_FIFTH               = 1.062
MISSION_SIXTH               = 0.842
MISSION_FINAL_GEAR_RATIO    = 3.900

メータ表示の設定

  • 次のメータ表示設定の項目は、それぞれ共通になっています。
    • エンジン回転数
    • アクセル開度
    • スピードメータ
    • 水温計
    • 吸気温計
 
  • 試す程度あれば、これらの項目は設定を変更する必要はないと思います (^^)

表示の有無

  • METER_xxx_USE : メータの表示をする/しないを選択できます
  • ECU_USEが 1のときは、メータ表示はしなくてもデータ自体は取得しています

メータのタイプ

  • メータの表示タイプを選択します
  • METER_xxx_TYPE
    • 0 : テキストのみ
    • 1 : 丸型メータ

メータの大きさ (直径)

  • 丸型メータの大きさ(直径)を設定します
  • METER_xxx_CIRCLE_SIZE

フォントサイズ

  • メータのフォントサイズを設定します
  • METER_xxx_CIRCLE_FONT

メータの中心座標

  • メータ表示位置の中心座標を設定します
  • METER_xxx_CIRCLE_X
  • METER_xxx_CIRCLE_Y

文字色

  • Red, Green, Blueの RGBを設定します。それぞれ 0 〜 255の範囲にしてください
  • 文字には縁取りがあります、反対色を設定してください
  • METER_FONT_RED
  • METER_FONT_GREEN
  • METER_FONT_BLUE
  • METER_FONT_EDGE_RED
  • METER_FONT_EDGE_GREEN
  • METER_FONT_EDGE_BLUE

メータの円の色

  • 文字色と同じように設定します
  • METER_CIRCLE_RED
  • METER_CIRCLE_GREEN
  • METER_CIRCLE_BLUE
  • METER_CIRCLE_EDGE_RED
  • METER_CIRCLE_EDGE_GREEN
  • METER_CIRCLE_EDGE_BLUE

最小/現在/最大値の色

  • いわゆるピークホールドの機能です
  • METER_CIRCLE_MIN_RED
  • METER_CIRCLE_MIN_GREEN
  • METER_CIRCLE_MIN_BLUE
  • METER_CIRCLE_MAX_RED
  • METER_CIRCLE_MAX_GREEN
  • METER_CIRCLE_MAX_BLUE
  • METER_CIRCLE_VALUE_RED
  • METER_CIRCLE_VALUE_GREEN
  • METER_CIRCLE_VALUE_BLUE

デフォルト設定

;------------------------------------------------------------------------------
;メータ表示の設定
;------------------------------------------------------------------------------

;メータ表示を...
;0          : しない
;1          : する
;それ以外   : 起動しない
;_USE

;メータのタイプ
;0          : 数値のみ
;1          : ゼロ指針の丸型メータ
;それ以外   : 起動しない
;_TYPE

;フォントサイズ
;0.0 < _FONT_SIZE < 10.0

;メータの大きさ
;0 < _CIRCLE_SIZE < 2048 pixel

;メータの中心位置
;0 < _CIRCLE_X < 2048 pixel
;0 < _CIRCLE_Y < 2048 pixel


;エンジン回転数
METER_RPM_USE               = 1
METER_RPM_TYPE              = 1
METER_RPM_CIRCLE_SIZE       = 60
METER_RPM_CIRCLE_FONT       = 0.6
METER_RPM_CIRCLE_X          = 190
METER_RPM_CIRCLE_Y          = 400

;アクセル開度
METER_THROTTLE_USE          = 1
METER_THROTTLE_TYPE         = 1
METER_THROTTLE_CIRCLE_SIZE  = 60
METER_THROTTLE_CIRCLE_FONT  = 0.6
METER_THROTTLE_CIRCLE_X     = 65
METER_THROTTLE_CIRCLE_Y     = 400

;スピードメータ
METER_VEHICLE_USE           = 1
METER_VEHICLE_TYPE          = 1
METER_VEHICLE_CIRCLE_SIZE   = 60
METER_VEHICLE_CIRCLE_FONT   = 0.6
METER_VEHICLE_CIRCLE_X      = 400
METER_VEHICLE_CIRCLE_Y      = 400

;ブースト計
METER_BOOST_USE             = 1
METER_BOOST_TYPE            = 1
METER_BOOST_CIRCLE_SIZE     = 45
METER_BOOST_CIRCLE_FONT     = 0.45
METER_BOOST_CIRCLE_X        = 295
METER_BOOST_CIRCLE_Y        = 370

;水温計
METER_COOLANT_USE           = 1
METER_COOLANT_TYPE          = 1
METER_COOLANT_CIRCLE_SIZE   = 45
METER_COOLANT_CIRCLE_FONT   = 0.45
METER_COOLANT_CIRCLE_X      = 510
METER_COOLANT_CIRCLE_Y      = 380

;吸気温計
METER_INTAKEAIR_USE         = 1
METER_INTAKEAIR_TYPE        = 1
METER_INTAKEAIR_CIRCLE_SIZE = 45
METER_INTAKEAIR_CIRCLE_FONT = 0.45
METER_INTAKEAIR_CIRCLE_X    = 590
METER_INTAKEAIR_CIRCLE_Y    = 430


;メータ部共通設定
;各種色設定
;METER_FONT         文字
;METER_FONT_EDGE    文字の縁
;METER_CIRCLE       丸形メータ
;METER_CIRCLE_EDGE  丸形メータの縁
;METER_CIRCLE_MIN   丸形メータの最小値
;METER_CIRCLE_MAX   丸形メータの最大値
;METER_CIRCLE_VALUE 丸型メータの現在値
;0 < _RED   < 255
;0 < _GREEN < 255
;0 < _BLUE  < 255

METER_FONT_TIME             = 0.4
METER_FONT_RED              = 255
METER_FONT_GREEN            = 255
METER_FONT_BLUE             = 255
METER_FONT_EDGE_RED         =   0
METER_FONT_EDGE_GREEN       =   0
METER_FONT_EDGE_BLUE        =   0
METER_CIRCLE_RED            = 255
METER_CIRCLE_GREEN          = 255
METER_CIRCLE_BLUE           = 255
METER_CIRCLE_EDGE_RED       =   0
METER_CIRCLE_EDGE_GREEN     =   0
METER_CIRCLE_EDGE_BLUE      =   0
METER_CIRCLE_MIN_RED        =  64
METER_CIRCLE_MIN_GREEN      =  64
METER_CIRCLE_MIN_BLUE       = 255
METER_CIRCLE_MAX_RED        = 255
METER_CIRCLE_MAX_GREEN      =  64
METER_CIRCLE_MAX_BLUE       =  64
METER_CIRCLE_VALUE_RED      = 255
METER_CIRCLE_VALUE_GREEN    = 255
METER_CIRCLE_VALUE_BLUE     =  64

ラップタイム表示の設定

  • メータ表示とほぼ同じような設定になっています
  • 標準では画面左上に表示されます
 
  • 合計時間とラップ時間の2つのみ表示できます
 
;------------------------------------------------------------------------------
;ラップタイム表示の設定
;------------------------------------------------------------------------------
;ラップタイム表示を...
;0          : しない
;1          : する
LAPTIME_USE                 = 1
LAPTIME_TOTAL_FONT          = 0.5
LAPTIME_TOTAL_X             = 5
LAPTIME_TOTAL_Y             = 15
LAPTIME_LAP_FONT            = 0.5
LAPTIME_LAP_X               = 5
LAPTIME_LAP_Y               = 30

モニタウィンドウの設定

  • モニタウィンドウの表示設定を選択できますが、後述するショートカットキー(起動中)でも設定を変更できます
;モニタウィンドウを...
;0          : 表示しない
;1          : 表示する
;それ以外   : 起動しない
VIEWER_USE      = 1

モニタウィンドウの更新ウェイト

  • 内部では FPS (ms)になるように調整されています
  • 高速な CPUやグラフィックボードではより速く表示できますが、通常は 100ms程度で十分でしょう
;モニタウィンドウの更新ウェイト (ms)
VIEWER_FPS      = 100

モニタウィンドウの解像度

  • 表示するウィンドウサイズになります
  • 通常はスクリーンサイズと同じに設定してください
  • それ以外のサイズですと、拡大縮小の処理が入るため若干CPU負荷が増えます
;モニタウィンドウの解像度
;0 < MONITOR_SIZE_X < 2048 pixel
;0 < MONITOR_SIZE_Y < 2048 pixel
;それ以外   : 起動しない
VIEWER_SIZE_X   = 640
VIEWER_SIZE_Y   = 480

カメラの設定

カメラを使う

  • WinSSM Version 1.0.0では、カメラは1台しか使用できません
;------------------------------------------------------------------------------
;カメラの設定
;------------------------------------------------------------------------------
;カメラを...
;0          : 使用しない
;1          : 1台使用する
;それ以外   : 起動しない
CAMERA_USE      = 0

カメラデバイスの設定

  • 通常は特に変更しないでください
  • より解像度の大きい高画質のカメラを使用する場合には、カメラの解像度に合わせておくと良いでしょう (^^)
;**************************************
;カメラ0
;**************************************
;デバイス番号
;-1         : 起動時に決める
;0 〜 255   : デバイス番号
;それ以外   : 起動しない
CAMERA_0_DEVICE = -1

;ビデオキャプチャ時の映像解像度
CAMERA_0_SIZE_X = 320
CAMERA_0_SIZE_Y = 240

録画の設定

録画をする

  • 録画をする場合は、RECORD_USEを 1にしてください
;------------------------------------------------------------------------------
;録画の設定
;------------------------------------------------------------------------------
;録画機能を...
;0          : 使用しない
;1          : 使用する
;それ以外   : 起動しない
RECORD_USE      = 0

録画コーデック

  • RECORD_CODEC : 通常は -1に設定し、起動時に選択するようにしてください
 
  • 無圧縮は、CPU負荷が小さい反面 HDD負荷が大きくなります
  • 一般に圧縮率が高いほど CPU負荷が大きくなり、HDD負荷が小さくなります
  • WinSSMのデモ映像のほとんどは無圧縮または Microsoft Video 1を使用しています
;録画コーデック
;-1         : 起動時に決める
;それ以外   : 起動しない
RECORD_CODEC    = -1
 
codec.png
 

録画解像度

  • CPUや HDD速度によって解像度を決めます
  • おおよそスクリーンサイズ〜スクリーンの 1/4サイズが最適です
  • 設定値の決め方については、次のフレームレートと併せて後述します
;録画解像度
;0 < RECORD_SIZE_X < 2048 pixel
;0 < RECORD_SIZE_Y < 2048 pixel
RECORD_SIZE_X   = 640
RECORD_SIZE_Y   = 480

フレームレート

  • 10fpsのときは 100ms、30fpsのときは 33.33msになります。
  • ただしマシンスペックよってはこのフレームレートが出ず、コマ落ちが発生することがあります。
  • 設定値の決め方については、後述します
;動画フレームウェイト (ms)
;10FPS = 100.0
;30FPS = 33.33
;1.0 <= RECORD_FPS <= 1000.0
RECORD_FPS      = 60

デバックモードの使い方

  • 0 : コンソールには何も表示しません
  • 1 : コンソールに各スレッドの処理時間を表示します
  • 2 : 1の内容に加えて、SSMのパケット情報を表示します
;------------------------------------------------------------------------------
;デバックモード
;------------------------------------------------------------------------------
;0          : 通常モード
;1          : デバックモード
;2          : もうちっと詳しく...
;それ以外   : 起動しない
DEBUG           = 0

ソフトウェアの使い方

ソフトウェアの起動方法

  • 基本的にコマンドプロンプトから起動します
  • アクセサリ → コマンドプロンプト
 
  • カレントフォルダを WinSSM (インストール先) にしてください
cd\winssm
 
command.png
 

表示だけの場合

  • 次をタイプしてください
winssm winssm.cfg

録画をする場合

  • 次をタイプしてください
  • 動画の保存形式に関わらず、拡張子を aviにしてください
winssm winssm.cfg movie.avi

CSVログを保存する場合

  • 次をタイプしてください
winssm winssm.cfg > log.csv
winssm winssm.cfg movie.avi > log.csv
 
start.png
 

ショートカットキー

  • モニタウィンドウで操作します
  • コンソールからはキー入力できませんので、ご注意ください
キー機能
[V]モニタ表示のオン/オフ
[R]ピークホールドのリセット
[S]ストップウォッチのスタート/ストップ
[L]ラップのスタートストップ
[Q]WinSSMの終了

WinSSMが動くと...

  • こんな感じになります [heart]
 
PC_02.jpg
 

録画設定のポイント

  • 録画処理に必要な時間を確認して、その後 RECORD_FPSを必要な時間+αに設定します
  1. RECORD_FPSを 1にする
    • 録画処理に必要な時間を求めるため、RECORD_FPSを 1に設定して THREAD_record()の待ち時間を無くします
  2. デバックモードを1にする
    • DEBUG = 1に設定して、各スレッドの処理時間を確認します.
    • 特に THREAD_record()の数値が録画に関する処理になります
    • ここの数値よりも RECORD_FPSを大きくしないと、録画ファイルの時間ずれの原因となります
  3. WinSSMを立ち上げます
  4. コンソール画面の THREAD_record()の値を確認します
  5. WinSSMを終了します
  6. RECORD_FPSを THREAD_record()の値よりやや大きい値に設定します
  7. WinSSMを立ち上げます
  8. 動画を確認します

GT-Rのような Multi Function Displayを作る!

  • 頑張ればパソコンのモニタやカーナビのモニタ、バックミラー取り付けタイプのモニタ、サンバイザーモニタなどに
    GT-Rのマルチファンクションディスプレイのような表示を出すことができます
 
GT-R.jpg
 
 
mfd.png
 

用意するもの

  1. WinSSMが動くPC
  2. NTSCのビデオ出力ができる PCが望ましいが、RGB -> NTSCのダウンスキャンコンバータでも良い
  3. ビデオ表示ができるモニタ (RGB入力があれば、NTSCのダウンスキャンコンバータなどはいらない)
 
backmirror.jpg
 
dvd7sv.jpg
 

winssm.cfgについて

  • サンプルとして WinSSM Version 1.0.0 RELEASEには、mfd.cfgを付けました
 
start_mfd.png
 

セッティング

  • 運転席から見やすい場所にモニタを設置する
  • そのほかは WinSSMと同じ
mfd.cfgの場合でも、ECU_xxxの設定を変更する必要があります。忘れずに書き換えてください


*1 EXCELなどの表計算ソフトウェアに簡単に取り込むことができます。FAQ : ログファイルをグラフ表示したい