• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

sz2のブログ一覧

2023年02月15日 イイね!

低レート(低速)なメーター用OBD2データ通信をなめらかに補間する方法

タイトルの件
拙作のメーター用Webアプリなのですが、

メーターをなめらかに動くように見せるためには、いわゆる30とか60fpsとか言われているように1秒間に30から60回画面を書き換える必要があります。

実際のところ描画にはWebGLを使っている関係上GPUアクセラレーションの恩恵を受けることができるので、描画性能的には割と安いスマホでも60fps出すのはそんなに困難ではありません。(pixi.js様々)

問題なのはECUとかセンサーユニットからデータを取得する方で、秒間60回もデータを取るのはかなり大変です。

特にOBD2-ELM327は通信がかなり遅く、手元のBluetooth ELM327アダプタだと、大体1回の通信で80msの時間がかかります。(USB接続のものならばもう少し早いですが、それでも20~40msはかかります。)
OBD2の通信では原則1回の通信で1種類の車両情報を通信するだけですので、車速・エンジン回転数・水温・ブースト圧を通信しようとすると320msになり、1秒間に3.1回になります。この更新頻度でメーターの画面更新をするなら3.1fpsになりほぼコマ送り状態になってしまいます(*1)。

というわけなので、通信が遅い場合でも表示はなめらかに見せる(見せかける)ために、補完方法を実装しております。

補間方法を説明する動画が↓になります。
真ん中のタコメータの液晶グラフ表示(黒)は生のセンサ情報(240ms間隔)、赤い針が補間後の値になります。



最初のケースでは補間なしですので、240ms間隔の更新になりコマ送り状態です。

次にあるのが以前から実装しているのは線形補間で、
これはセンサ情報の到達頻度を事前集計した上で、現在とその一つ前のセンサ情報値から内挿で補完する方法です。
これを使えば240ms間隔のセンサ情報頻度でも見かけ上なめらかな表示にすることができます。
しかしこの方法は一つ難点がありまして、なめらかに表示できる代わりに補間値がセンサ情報更新間隔(ここでは240ms)だけ遅延します。実際上の動画でも、液晶グラフ表示の回転数に対して赤い針の回転数が遅れているのがわかります。

そこで今回新規に実装するのがPIDコントローラ(を模したjavascriptライブラリ)になります。と言っても実際はほとんど積分ゲインのみ使用しています。
これを使うと、補間値とセンサ値の差が蓄積されるほどセンサ値の増減速度(針の速度)が増えていくようになります。するとなめらかな動きを維持したまま、センサ情報と補間値の差を小さくすることができます。実際上の動画でも液晶表示に追従して針が動いているのがわかります。
ただこの方式も当然完全ではなく、センサ値の増減が入れ替わる瞬間(増えていた回転数が下がり始める瞬間)に補間値が行き過ぎるオーバーシュートが出ます。

グラフで説明すると下図のとおりです。
線形補間法はなめらかに(直線に)値が更新されていますが生の値(青)より遅れて更新、PID補間は生の値に追従していますがオーバーシュートが出ているのがわかります。


(*1)ただ一応ELM327には1回の通信で最大6種類のPID通信が可能な場合があるようで、(データシート p.45によればJ1979対応のECUでCAN通信を行っている場合、らしい)拙作のプログラムでも現在実装を試みているところであり、これが使えれば問題はいくらか緩和します。ただしECUやOBDIIアダプタによっては使えないこともあるようです。)
Posted at 2023/02/15 06:14:46 | コメント(0) | トラックバック(0) | 日記
2023年02月05日 イイね!

メーターダッシュボードWebアプリの更新(3.5-beta2)

機能追加
・ELM327やArduinoへの通信手段として、シリアルポート直接制御以外に、TCPソケットを介した通信にも対応
(シリアル通信をTCPソケットでトンネルするアプリや、Wifi接続のELM327アダプターとか、UART-LAN/Wifi変換をしたArduinoボードとの通信を想定しています。)

機能追加の目的は、Raspberry piを使わないでAndroid単体でWebsocketGaugeServerを動作させることです。
元々WebsocketGaugeServerの動作にはPCかRaspberryといったLinux動作環境が必要なのですが、RadpberryPiは未だに高騰と入手困難が解決せず、代わりにAndroidでLinux互換環境を実現するtermuxを試してみたところ、前回のブログで書いた通り動いてくれそうでした。
ただtermuxではシリアルポートにアクセスするのが困難で、ネットワーク通信しかできないので、今回のようなTCP通信経由のシリアルポートアクセスを実装したわけです。

ArduinoへのWebsocketGaugeServerへのインストールは、後ほどまとめてupするつもりです。

Posted at 2023/02/05 15:44:01 | コメント(0) | トラックバック(0) | メーター | 日記

プロフィール

「一時帰国中にELM327のテスト http://cvw.jp/b/2575675/48215452/
何シテル?   01/19 22:06
車関係のソフトウエアを作っていますが車は持っていません。 ・15年前、インプレッサSTI(丸目GDB,2000年式)を購入。この時車載PCなるものに手を出...
みんカラ新規会員登録

ユーザー内検索

<< 2023/2 >>

   1234
567891011
121314 15161718
19202122232425
262728    

ブログカテゴリー

リンク・クリップ

メーター製作① 
カテゴリ:その他(カテゴリ未設定)
2023/02/20 21:24:47
とりあえず公開します 
カテゴリ:その他(カテゴリ未設定)
2018/02/05 19:47:22
自作デジタルメーター マルチファンクションディスプレイ(MFD)もどき HTML5+Canvas  
カテゴリ:その他(カテゴリ未設定)
2016/02/29 22:19:20

愛車一覧

スバル インプレッサ WRX STI スバル インプレッサ WRX STI
手放しましたすみません。

過去のブログ

2025年
01月02月03月04月05月06月
07月08月09月10月11月12月
2024年
01月02月03月04月05月06月
07月08月09月10月11月12月
2023年
01月02月03月04月05月06月
07月08月09月10月11月12月
2022年
01月02月03月04月05月06月
07月08月09月10月11月12月
2018年
01月02月03月04月05月06月
07月08月09月10月11月12月
2017年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ
© LY Corporation