前回の加速度ログを取ったとき、一緒にGPSのログをスマホのアプリで取っていました。
エンジンの回転数は速度と比例関係にあるかと思います(クラッチを切っているときを除く)。
これを使って、回転数の推定が正しいかどうか確認してみます。
GPSログ
いつもこのアプリでツーリングのログを取っています。
apps.apple.comいくつか設定項目がありますが、今回大事なこととして、
- 速度も記録する
- 記録の間隔はできるだけ短く(最短1秒まで設定できました)
という2点があります。
速度は、GPSの位置情報さえ記録できていれば計算はできると思いますが、計算しておいてもらえればそれが楽です。
GPSログデータ
ZweiteGPSで取ったログは、いくつかの形式で出力できます。
等々。
CSV形式が一番簡単に解析できますが、出力したものを見てみると、位置情報しか残っていませんでした…
KML形式データをCSV変換するのが一番やりやすそうでした。
変換は以下のサイトを使わせてもらいました。
こんな感じでCSVデータが得られました。
ここから、時刻と速度のデータを取り出します。
テキストエディタでとりあえず開きました。
<br />
をカンマに置換すれば処理しやすそうです。
置換後、エクセルで開きました。
ここから時刻と速度の列だけ取り出します。
色々と加工して、最終的に以下のようなCSVデータを作成しました。
t[sec],速度[km/h] 0,0 14,1.1 18,1.1 21,1.8 24,1.8 29,1.4 34,2.5 35,4 36,7.2 37,7.6 38,6.8 39,7.2 40,5 42,14.8 43,19.1 44,21.6 ...
グラフにするとこんな感じ。
※このGPSログは、目的地(いつも行くカフェ)からの往路全体を記録しています。前回の加速度ログは、この往路の一部だけで記録しています。
停止しているところは1秒間隔ではデータ記録していないようです。
このデータと回転数データを比較していきます。
回転数と速度の関係
エンジンが回転してから動力がホイールに伝わるまで、色々とギヤ等が間に入ってきます。タイヤの径も速度に影響してきます。
幸い、車種ごとに回転数 ⇔ 速度の変換表を出してくれるサイトがありました。
この表から、ギアごとの回転数 ⇔ 速度の関係が出てきます。
ギア | 速度[km/h] / 回転数[rpm] |
---|---|
1速 | 5.01 x 10-3 |
2速 | 7.85 x 10-3 |
3速 | 1.05 x 10-2 |
4速 | 1.32 x 10-2 |
5速 | 1.61 x 10-2 |
グラフ作成
※9/28記載
以下のグラフ作成は間違いがありました。
読まないでください… (´;ω;`)
次回の記事で正しくグラフ作成&検証しています。
前回までのFFT結果から、時間ごとのピーク周波数を抜き出してみます。これが回転数に対応ことになるかと思います。
まずは前回と同様のデータ取り込み。
>> [gData ovrn] = read_adxl345_log_bin_2byte("adxl345_log_002.bin"); Header detected, Ver:1, Size:8 Rate:1600[Hz], Range:2[G] >> gFFT = fft_slice(gData(:,2), 512); >> x = gData(512:512:end,1);
次に、max
を使って、時間ごとのピーク周波数を出します。
max
は、2次元配列に使うと、列ごとの最大値を持った行ベクトルを返します。
今回で言うと、gFFT(freq, t)
からgPeak(t)
が生成できます。
最終的に列ベクトルにしておきたいので、.'
を付けて転置します。
>> gPeak = max(abs(gFFT)).';
plot
でプロットします。
>> plot(x, gPeak); >> xlabel("t[s]"); >> ylabel("freq[Hz]");
ちょっと汚いですね…
とりあえずこれで進めることとします。
これに、先ほどの回転数→速度の係数を全ギアについてかけてみます。
>> gear1 = gPeak * 60 * 5.01*10^-3; >> gear2 = gPeak * 60 * 7.85*10^-3; >> gear3 = gPeak * 60 * 1.05*10^-2; >> gear4 = gPeak * 60 * 1.32*10^-2; >> gear5 = gPeak * 60 * 1.61*10^-2;
60を掛けているのは、[Hz] → [rpm]の変換のためです。
これに速度グラフを重ねます。
まず先ほど作ったGPS速度データのcsvファイルを読み込みます。
>> vel = dlmread("20200816-154637.json_exp_2.csv", ",", 1, 0);
ギアごとの推定速度と、GPSからの速度をplot
でグラフ化します。
>> plot(x, gear1, x, gear2, x, gear3, x, gear4, x, gear5, vel(:,1), vel(:,2));
色々気になるところがありますが、まず時間軸範囲を加速度データがある部分だけにします。
>> axis([0 400 0 300]);
時間軸の基準を特に合わせるようなことをしていないので、調整が必要です。
グラフを見たところ、なんとなく走り出しの時刻で合わせられそうな気がします。
グラフを拡大して見てみます。
>> plot(x, gear1, "*-", x, gear2, x, gear3, x, gear4, x, gear5, vel(:,1), vel(:,2), "*-"); >> axis([0 50 0 100]); >> xticks([0:1:50]);
マーカーも付けるようにしました。
また、グラフウィンドウの"グリッド"をクリックして、グリッド表示もしました。横軸刻みも変えました。
加速度データでは21秒、GPS速度データでは40秒に動き始めているようなので、GPS速度データの時刻を19秒分引いてやれば良さそうな感じです。
>> plot(x, gear1, "*-", x, gear2, x, gear3, x, gear4, x, gear5, vel(:,1) - 19, vel(:,2), "*-"); >> axis([0 400 0 300]);
こんなグラフになりましたが、1速での推定からしてGPS速度データを超えています。
原因として今考えられるのは、
- 加速度センサIC(ADXL345)のタイミングで加速度サンプリングしてもらっていますが、これがどれほどの周期精度を持つのか、要確認です。
グラフを見ても、最初のほうの時刻では加速度データとGPSデータが合っているようですが、後半の急に落ち込んでいるところの時刻がずれているように見えます。 CPUクロックはちゃんとした水晶を使っているので、これで補正することを考えます。 - Vツインだから? ドラッグスター250のエンジンはVツインなので、ピーク周波数が実際の回転数の2倍のところに出るのかもしれません。
それでもギア5速としたときの推定速度が200km/hまで行っているのが不可解…
続く
まだ解析の余地があると思うので、同じデータで引き続き解析してみます。