11

移動中の車の加速度を計算しようとしているiPhoneアプリに取り組んでいます。同様のアプリがこれを達成しましたが(Dynolicious)、違いは、このアプリがドラッグストリップではなく、一般的な市街地走行中に使用されるように設計されていることです。

これは、Dynoliciousが幸運にも回避できたという1つの大きな懸念につながります。それは丘です。はい、丘。

これには、キャリブレーションと実際の運転という2つの重要な段階があります。

私たちの最初の実行は単純で、結果に苦しみました。キャリブレーション段階では、電話の平均力を取得し、実行中は、現在の力から平均力を差し引いて、このフレームの現在の加速度を取得しました。これに伴う問題は、典型的な車が前進する力よりもはるかに多くの力を受けることです-曲がるところから穴に至るまでのすべてが、実際に起こっていることと値が同期しなくなる原因になりました。

次の実行は、画面が車の後ろを向くようにiPhoneを向ける必要があるという条件を追加することでした。この方法を使って、z軸の力だけを追跡しようとしましたが、重力のためにiPhoneを真っ直ぐに向けない限り、明らかに問題が発生します。

後で三角法を使って、重力を方程式から外すことができたので、車は実際にiPhoneで非常によく読み取られていました。

坂にぶつかるまで。車の角度が変わるとすぐに、意味のない加速と減速が発生し、再び同期がとれなくなりました。

数学で私よりもはるかに賢い人と話すことは、私が認めたいよりも長い間実装しようとしてきた解決策につながります。手順は次のとおりです。

1)キャリブレーション中に、重力をサイズではなくベクトルとして測定します。そのベクトルを保存します。2)車が最初に前進するとき、動きのベクトルを取り、重力を引きます。これを前進の勢いとして使用します。(今のところ、これが難しいユーザーの場合は無視して、数学に集中しましょう:) 3)前方ベクトルと重力ベクトルから、平面を作成します。4)力を受けるときはいつでも、横方向の力などを取り除くために、それを前記平面に投影します。5)次に、その力、既知の重力の大きさ、および既知の前進運動の方向を使用して、基本的に三角形を解き、前進ベクトルを取得します。

この新しいシステムで最も困難を引き起こしている問題は、ステップ5ではありません。これは、すべての数値が適切に見えるようになっています。難しいのは、実際には順方向ベクトルの検出です。重力を超える大きさのベクトルを選び、そこから平均して重力を引いています。(iPhoneの加速度計が少しずれているという理由だけで、力を使用していないことを確認するためにエラーチェックを行っています。これは私が望むよりも頻繁に発生します)。しかし、私が使用しているこれらのベクトルをプロットすると、実際には約20〜30度の角度で変化するため、いくつかの強い不正確さが生じる可能性があります。その結果、アプリは以前よりもさらに不正確になります。

つまり、基本的に-数学とiPhoneの頭脳はすべて-明白なエラーはありますか?潜在的に優れたソリューションはありますか?何か役に立つ経験はありますか?

賞:解決策につながる最初の回答に250ドルの報奨金を提供します。

4

5 に答える 5

10

ジャイロが必要です。それ以外の場合は、丘の上に加速車の複数の構成があり、加速度計でまったく同じ読み取り値が生じる可能性があります。それらを区別することは完全に不可能です。そのため、慣性航法システムはジャイロと加速度計を組み合わせています。

これができない理由はアインシュタインによって与えられました!ローカル測定を使用すると、重力と加速度を区別できません。あなたはいくつかの有用な非局所的な情報を持っています-ここの重力と数ヤード先の重力が同じ値を持っているという仮定。しかし、「平行移動」と呼ばれるものを実行する手段がなければ、2つの異なる場所で重力を比較することはできません。これはジャイロが行うことです。

250ドルを忘れてください、しかし私はあなたが私があなたを節約している研究開発時間の量のために私にビールを与えるべきだと思います。:-)

于 2010-04-28T21:39:05.373 に答える
3

これを解決するには、可能であれば、車の外部にあるものを参照する必要があります。おそらくGPSを使用して高度ゲインを測定するのが最も直接的なアプローチです。つまり、測定された標高ゲインを使用して丘の傾斜を計算し、これを使用して加速度測定を補正します。

他の人が述べているように、非常に深いレベルでは、重力と加速度を区別する方法はありません。これは等価原理として知られています(そしてアインシュタインの最も重要な洞察の1つでした)。したがって、この問題を解決するには、加速度計の出力以上のものを知る必要があり、これが問題を困難にします。問題へのさまざまなアプローチについては、ここを参照してください。

GPS信号や写真など、車の外部にあるものを参照して、車の外にあるものの位置の変化や地球の磁場などを測定することをお勧めします。これは、多くの金属の近くで行われるためです。 (車)地球のフィールドは測定が難しい可能性があり、参照オブジェクト(太陽など)の連続写真は明らかに難しいので、GPSが最善の策のようです。

外部参照が必要な理由の詳細:

1)常に「オン」である、2)常に同じ大きさである(この状況の場合)という重力の独自の機能を使用できるかどうかを検討する価値があります。しかし、あなたが知っているのが総加速度だけである場合、2つの寄与を確実に分離することはできません。下の写真が示すように、重力の大きさを知るだけでは十分ではありません...下の写真は、結果として生じる加速度(黒いベクトル)を測定する電話の基準座標系に描かれ、大きな色の矢印は可能な重力ベクトルです、一致する色の小さい矢印は対応する加速度ベクトルです。ですから、あなたは、知らずに、角度を付けずに、問題を解決するのに十分な情報を持っていないことがわかります。

代替テキスト

あなたができるかもしれない他のことは、重力ベクトルの角度を見つけるためにジャイロからの出力を統合することです。つまり、フラットから始めて、累積された小さな変化に基づいて重力がどこにあると思うかを常に追跡していると仮定します。ただし、これはエラーが発生しやすく、計算のエラーは時間とともに急速に蓄積されます。また、ジャイロにアクセスできることも前提としています。

したがって、唯一の良い解決策は外部情報を使用することです。

于 2010-04-29T04:23:53.250 に答える
1

いくつかの考え:

  • 重力ベクトル量であり、大きさではありません。
  • 重力による加速度と他の力による加速度は区別できません(角を曲がるときと車を転がすときの違いもわかりません)。
  • 2つの加速度計を使用すると運が良くなる可能性がありますが、その場合は2台の電話が必要になります。

私の場合は、「これは丘では機能しません。テストにはまっすぐで平らな道路を使用してください」という免責事項を作成します。

PS:私は答えに対する現金報酬が好きです、私は確かにそれをmeta.stackoverflow.comに提案として投稿します:P

于 2010-04-28T21:39:44.210 に答える
1

これはあなたの問題を完全に解決するわけではありませんが、うまくいけば、あなたがやろうとしていたことを解決するでしょう。これを完全に行うには、最終的には他の機器が必要になると思います。tom10が提案したGPSは私にとって最良の選択肢のように聞こえますが(ジャイロが利用できないため)、GPS座標の遅延時間や不正確さなどの問題が予想されます(iPhoneGPSがどれほど正確かはわかりません) )。

まず、iPhoneは車全体にしっかりと取り付けられていると思います。上下にカーブがなく、左右にカーブがないスロープの場合、キャリブレーションのために次の操作を行うことができます。

較正

  1. 荒れの程度がそれほど変化しないような表面を見つけます。
  2. 車が道路に対して動いていないときの加速度ベクトルを見つけます。この完全なベクトル(x、y、およびzコンポーネント)をv1として記録します。g = | v1 | 重力の大きさであり、全体を通して同じままである必要があります。
  3. 坂道をまっすぐ進み始めます(横ではなく、上り坂または下り坂で、もちろん平らな面も素晴らしいです)。
  4. この完全な加速度ベクトルをv2として記録します。
  5. v2 - v1(重力を差し引く)をとって、前進運動を示すベクトルであるv3を見つけます。
  6. v4 = v3 x(v1 x v3 )を見つけます。ここで、xはベクトル外積です
  7. v4の単位ベクトルを見つけます。v5 = v4 / | v4 |

v5は、車が完全に平らな面にあるときに重力が指す方向を指します。これで、少なくとも、ある種の斜面にいるかどうか、およびその斜面の角度を知ることができます。これは、次の方法で実行できます。

  1. 現在の加速度ベクトルaを記録します。
  2. av1の内積を求めます。c= av1
  3. cが(gに等しいのではなく)gより小さい場合、車は坂道にあります。傾斜の角度はtheta=arccos(c / g)です。

ただし、ここで問題が発生します。左または右にカーブ/バンキングするのではなく、上下の傾斜に制限したとしても、傾斜が下降しているか上昇しているかはわかりません。傾斜の角度だけです。最初に、 v1v3の内積をとることで、車が坂を上り下りしているかどうかを確認できます(正の値は下り坂を示し、負の値は上り坂を示します)。

ただし、勾配が増加または減少するにつれて、総加速度ベクトルの大きさが減少するか増加するかという事実を使用して、これを推測できる場合がありますが、確実ではありません。たとえば、傾斜の角度(シータ)が0度(またはそれに十分に近い)であり、現在はそうではなく、 v3の単位ベクトルへの全体的な加速度の射影(内積)が減少している場合、そうすれば、車が坂を上っていると推測するかもしれません。繰り返しますが、これは単なる推測であり、非常に間違っている可能性があります。私はできると言いますが、私が言いたいのは、それが時々間違っているということです。

これは、加速度計を使用するだけのシステムから抜け出すことを想像できる限りの情報です。幸運を!

于 2010-04-29T19:20:25.717 に答える
0

@ザガザーディアン、

したがって、私が理解しているあなたの本質的な問題は、順方向ベクトルを検出することです。あなたはこれらを選ぶことができます:

  1. たとえば、0.2秒ごとに5秒間速度をサンプリングし、次のn秒間はサンプリングをオフに切り替えて、リソースが占有されないようにします。これらのデータポイントからできることは、速度の変化率を識別することができるようになることです(データポイントを使用して導関数を見つけるための簡単な数値的方法があります)。しかし、これはあなたに方向性を与えないので、本当の意味であなたに加速を与えることはありません。AFAIK、加速度計は方向も生成します。つまり、軸/重力の1つに対してどれだけ傾いているかを示します。

角度を検出するには、次の図を参照してください: Angles and Hills http://lh6.ggpht.com/_p7FIkTnaSc4/S9kkKF7oECI/AAAAAAAABYg/D1tbxNQXo0E/s288/Hill.png

別の可能な方法は、丘を登っている間に余分な力を見つけることです。余分な力を考えると、角度を見つけることができるかもしれません。余分な力の垂直成分は対抗することであり、反対方向の垂直成分、g。

于 2010-04-29T06:23:54.637 に答える