0

私は実験的なプログラムをやっています。車のダッシュボードにサポート付きで固定されたスマートフォンがあり、旅行中にアプリケーションから慣性センサーから値を読み取りました。

正確には、各登録の加速度計データ時間 (一定間隔) を秒単位で読み取りました。

そこで、垂直加速度から垂直変位に移行したいと思います。これを行うには、二重積分を行う必要があります。

オイラー法をやってみました。次のような初期状態から:

v0=0.v0=0これは時間ゼロでの初期速度です。

x0=0.x0=0これは時間ゼロの初期位置です。

定義、

deltaT=registrationinterval.deltaT=registrationinterval(私の場合は0.04秒)

次に、登録が行われるたびに、次のことを行います。

vi=vi−1+ayi∗deltaT.vi=vi−1+ayi∗deltaT

xi=xi−1+vi∗deltaT.xi=xi−1+vi∗deltaT

ここでi、現在およびi-1前例を表します。

しかし、私が得たグラフはあまり現実的ではありません。実際には、速度と変位の両方が増加するだけであり、代わりに、垂直方向の変位が加速度グラフに似たものとして出てくるという効果が得られました。

この手順を適用すると、エラーも大きくなります。グラフが成長するだけで、垂直方向の振動が見られない可能性がありますか?

また、カルマンフィルターを事前に適用して信号をきれいにすることもできますが、解決策になる可能性がありますか?

それとも、積分の方法を変えて、ルンゲ・クッタからオイラーに切り替える必要がありますか? (ただし、最後に、どのように設定できるかについてはまったくわかりません)。

または誰かが私を助けることができるアルゴリズムを知っていますか?

役立つ場合は、登録されたデータの例を次に示します。

4

1 に答える 1

0

Euler と Runge Kutta はどちらも数値積分器です。統合する方程式の種類によっては、一方が他方よりも正確になる場合がありますが、どちらも同じ定量的結果を与えるはずです。一方が速度を上げ続け、もう一方が速度を上げない場合は、バグがあります。

これはプログラミングの問題というより物理の問題だと思います。

このデータから、垂直加速度計のデータには、地球の表面で約 9.8 m/s^2 である重力による加速度が含まれているように見えます。もちろん、あなたの車は道路に支えられているので、実際に加速しているわけではありません。

使用している方程式は、他の力が働いていないことを前提としているため、車の速度と位置が常に増加していることを正しく示しています (車をヘリコプターから落とした場合のように)。しかし、他にも作用する力 (タイ​​ヤを押し上げる道路) があるため、それらの力をモデル化する方法を見つける必要があります。

できることの 1 つは、最初の数回の測定値をベースラインとして平均し (9.8 m/s^2 近くになるはずです)、その後の測定値からその値を差し引くことです。車が坂を上ったり下ったりすると、センサーの値はベースラインに対して変化し、それらの差が重要になります。

それは良い最初の近似です。しかし、丘を上り下りすると、電話機は重力場に対して水平でなくなるため、重力の一部が水平センサーに反映されます。正確な結果を得るには、それを考慮する必要があります。

于 2016-12-31T17:18:59.630 に答える