iPhone 5Sの加速度計、ジャイロスコープ、M7、デジタルコンパス、およびその他のセンサーのエラーだけでなく、





新しいiPhone 5Sの未較正センサーの問題について多くの人が聞いています。ネイティブiOS 7コンパスに組み込まれた「レベル」ツールは、テーブルなどの平らな面にデバイスを置くと数度の偏差を示します。



要するに、センサーの向きの問題は、ある程度まで、すべてのiOSデバイスに常に存在します。 以前は、レベル測定を可能にする組み込みのモバイルOSアプリケーションがないため、問題はそれほど頻繁に観察されませんでした。 原則はどこでも同じであるため、加速度計を備えた他のモバイルデバイスでも同様の問題が発生します。さまざまなモーションセンサーと方向センサーを扱う必要のある開発者は、この経験を熟知している必要があります。



ほぼ最初から開発者がAPIを利用できるようになってから、加速度計、ジャイロスコープ、デジタルコンパスセンサーを使用してアプリケーションを開発してきました-最も人気のあるiOSコンパスの作成者として、加速度計と他のセンサーの精度の調整に関する問題に遭遇しました数年前。



問題を解決する方法は非常に簡単であり、重力センサー、運動センサー、磁場センサーを何らかの方法で使用するアプリケーションとゲームアプリケーションの両方に既に組み込まれています。キャリブレーションは、自分とユーザーを尊重する開発者が世話をする必要があります アプリケーションの難易度と解決するタスクに応じて、開発者の技術的な観点から、ソリューションの実装は単純でも複雑でもあります。 しかし、原則は誰にとっても同じです。



開発者とアプリケーションユーザーに、それがどのように機能するのか、これらのエラーの原因、加速度計の問題についてあまり心配する必要がない理由、「欠陥のある」デバイスを交換するためにストアに走る必要がない理由を理解することを勧めます。センサーエラーは他の方法で解決されます。



どうでしたか



4年以上前、私はiOSにバンドルされている2次元コンパスの通常のアナログではなく、3次元空間で機能し、ビデオに重ねられた仮想ラベルをリアルタイムで高精度に組み合わせた拡張現実を使用したコンパスを開発するという課題に直面しました。



オブジェクトの仮想マークをカメラから受信した画像内の実際の位置と組み合わせるには、モバイルデバイスで使用可能なすべてのモーションセンサーを使用する必要があります。



重力ベクトルを決定するため、または簡単に言えば、デバイスのどの部分が見下ろしているかを見つけるために、加速度計が必要です。 デジタルコンパスセンサーまたは磁力計は、デバイスが北を向いている側を見つけるために、基点の向きを決めるために必要です。 後に、デバイスの回転を決定するジャイロスコープが登場し、それに応じて、3次元空間での完全な方向の精度を大幅に向上させることができました。



アプリケーションが開発され、新しいセンサーを使用する機会が現れると、センサーに固有の個々の欠陥がほとんどすぐに現れました。



すべてのデバイスで判明したように、センサーは一定の誤差内で変化する不均一なデータを出力し、偏差がより多く、どこかより少ない場合-さまざまな非自明な要因がセンサーの読み取りに影響します。



当時この分野で経験のなかった人たちの最初の反応は、iPhone 5Sにセンサーが正しく取り付けられていないという記事に記載されているものと似ていましたが、問題をさらに研究することで、メーカーが何かを修正できると期待せずに開発を続けましたが、目的の各センサーの機能を考慮します。



その結果、実際の使用に適したかなり正確なツールが、精度に問題のあるハイテク玩具から得られました-最も重要なのは、各センサーの特性に直接従う正確な使用方法を知る必要があることです。



加速度計



標準のコンパスが1方向のみで動作するのとは異なり、私のアプリケーションは可能な方向のいずれかで動作し、ジャイロスコープが出現する前であっても初期段階で動作するはずだったため、加速度計の非常に奇妙な機能が発見されました。



各デバイスで加速度計にわずかな偏差があるという事実に加えて、同じ物理デバイス内では、この偏差は異なるデバイスの向きによって異なります-たとえば、通常の縦向きでは、実際の重力軸からの偏差は1° 、180°回転させた場合、逆向きのポートレートでは4°になります。



解決策は、6つの可能な方向のそれぞれについて個別に加速度計を較正する機能を追加することでした。ジャイロスコープの外観は新しい機会を提供しました-モーションセンサーの較正は、それらを使用するすべての適切なアプリケーションで既に利用可能です。



ゲーム開発者はそれを少し簡単にする必要がありました-ゲームでは1つまたは2つのデバイスの向きをサポートするのに十分ですが、ジャイロセンサーを使用してもユーザーにキャリブレーションを使用できるようにする必要性を無視することはまだ不可能です。



iOS 7のコンパスに組み込まれた「レベル」では、画面をタップするだけでキャリブレーションが実行されます。画面をタッチするだけで、デバイスの現在位置が基準または「ゼロ」位置と見なされます。



コンパスとGPS / GLONASS(と思われますが)



ジャイロスコープが登場する前は、主要なポイントの水平面内の向きを担当するセンサーはデジタルコンパスセンサーでした。これは、すべてのセンサーの外的要因に最も敏感であり、したがって精度に最大の問題がありました。



コンパスは、デバイスの回転に合わせてドライバーレベルで継続的に較正されます。デバイスが受信するデータが多いほど、結果はより正確になりますが、それでもエラーが発生します。



残念ながら、コンパスの精度の問題に対する絶対的な解決策は、キャリブレーションによってのみ不可能です。 精度は向上しますが。 iOS 7では、ビルトインコンパスは以前のバージョンのOSよりもさらに厳しいキャリブレーションを備えています。 これで、ユーザーが必要なアクションを実行するまで、キャリブレーション画面は画面全体を閉じます。 古いバージョンでは、画面に重ならない小さなメッセージがありました。



コンパスのキャリブレーションと一定のデータフィルタリングでさえも、不均一な磁場の状況では特に役立ちません。結局、通常、コンパスのキャリブレーション後、人はデバイスの軸の周りではなく、自分の軸の周りを向きます。他の磁気条件。



強い磁場、金属物、活線の近くでは、電磁放射に対する感度が非常に高いため、磁力計の測定値は不安定です-これは、あらゆる種類の電子充填材がますます詰め込まれている部屋や機械で特に顕著です。



さらに、地理的な北を表示するためにコンパスが必要な場合、GPSとGLONASSを使用して位置を特定する精度が重要になります。これは、座標を使用して、地球上の特定の地点で磁気偏角または磁気極とサーバー極の方向の差を判断するためです。



磁気コンパスは、磁気干渉のない野外条件で路上で適切かつ正確に機能しますが、それでも、方位角測定ごとにコンパスのキャリブレーションが望ましいです。



北極への方向は、通常は路上でも、GPSの精度で最も正確に決定されます。



たとえば、Wi-Fiまたは無線アンテナを互いに正しく向ける必要がある場合、または正確な測定を行う必要がある場合など、必要な場所で精度をさらに向上させるには、以下で説明するように、アプリケーション側でのより深いサポートが既に必要です。



ジャイロスコープ、ジャイロコンパス、カーモード



部屋、車、ボート、またはその他の車両で、さらに高い精度と向きの安定性が必要な場合、従来の磁気コンパスは適切ではありません-進行方向またはジャイロスコープのいずれかで向きが必要です。



したがって、私のアプリケーションでは、これらの機能の両方を実装しました-さまざまな車両で使用するために、他のすべてのための「車」モードと「ジャイロコンパス」モードがあります。



車モードでは、すべてがシンプルです-移動コースが使用されますが、これはGPSとGLONASSの精度にのみ依存するため、歩行中、自転車、車、ボート、飛行機などで方向が非常に正確に決定されます。



ジャイロコンパスを使用すると、状況はより簡単になり、多少複雑になります。



ジャイロコンパスモードでは、外部のランドマーク(太陽、月、星、地理オブジェクト、木の苔のような側面)を使用して、初期方向を正確に設定したり、現在の方向を修正したりできます。



これは単にユーザーに対して行われます。 リアルタイムでビデオに重ねられたマーカー、またはコンパスダイヤル上のオブジェクトを指す矢印は、オブジェクトの実際の位置またはその方向と組み合わされます。 数千行の数式に基づく複雑な数学はすべて、アプリケーションレベルでは表示されません。



ほぼ同じアクションが、現代の軍用機、船舶にサービスを提供するパイロットまたは要員によって実行されます-慣性航法システムのチェックとその後のキャリブレーションは、飛行の開始時とその間に実行されます。



ジャイロコンパスは、コンパスの精度と基点の方向の問題に対する理想的な解決策のように思えますが、ここにも落とし穴があります。



産業用および軍事用の慣性航法システムでは、現在のモバイルデバイスとは対照的に、複雑なセンサー全体が空間内の位置を正確に決定するために使用され、読み取り値の誤差を補正できます。



モバイルデバイスでは、通常、各センサーのコピーが1つしか存在しないため、エラー補正が不可能になり、エラーが蓄積されます。



ジャイロコンパスを較正する瞬間から、または技術的な観点から見ると、基準「ゼロ」位置を決定する瞬間から、より多くの時間が経過するほど、ジャイロスコープの向きの周期的な変位で表される累積誤差が大きくなります。



以下のビデオは問題を示しています。



「ジャイロコンパス」モードのコンパスはビデオで撮影され、サーバーに正確に設定され、テーブルに固定されたデバイスで実行されます。 デバイスが時間とともに静止しているという事実にもかかわらず、シフトが発生します。 00:09に0°から359°にシフトします。 01:21に358°に減少します。 03:03には、すでに357°の方位角が表示されています。







エラーの蓄積は、センサーの個別の性質により発生します。たとえば、上のビデオのように、モニターの電源ファンの小さな振動やテーブルの横にあるコンピューターの振動がジャイロスコープの読み取り値に影響を与えるなど、いくつかのポイントでイベントを見逃す可能性があります。 もちろん、センサーは時間とともに進歩し、より高い解像度を取得しますが、データの離散性は残ります。 したがって、心拍や脈拍などの取るに足らないものが測定値に影響を与える可能性があります。



このようなセンサーのマイクロメカニカルシステムは、周囲温度などの非自明な要因の影響も受けます。通常の開発者はこの温度を利用できませんが、OSドライバーのレベルでセンサーデータを修正するために考慮されます。



この場合、ジャイロの向きはコンパスセンサーよりもはるかに正確です-180度回転すると、センサーは、たとえばコンパスが干渉していると言うことができるように、回転が150度ではなく同じ180度であると報告します。



ジャイロにはこのような機能があり、デバイスをツールとして使用するとき、または独自のアプリケーションやゲームを開発するときは、このことを考慮する必要があります。



しかし、新しいM7モーションコプロセッサはどうでしょうか。



M7の発表で、モバイルデバイスがより大きな慣性ナビゲーションシステムに近づくことを望んでいましたが、残念ながら、この新しいコプロセッサはわずかに異なるタスクを解決します。



まず、M7はGPSやその他のセンサーを使用する際のバッテリー消費を削減するように設計されています。 アプリケーションの起動時にこの計算が最初から開始されないという事実により、衛星からのデータの計算に費やされる時間が短くなります。 さらに、他のセンサーからのデータは、アプリケーションが実行されていないときでもバックグラウンドで収集されます。これは、バッテリー消費の削減にも役立ちます。



たとえば、上記のジャイロスコープにエラーが蓄積されている状況を示すビデオでは、ジャイロコンパスモードのコンパスは、M7を既に使用している新しいiPhone 5Sで機能します。



モバイルデバイスを信頼できますか?



答えはイエスです。使用するセンサーの機能を知り、考慮します。



開発者は自分で結論を導きます。



最後まで読みたいと思っているユーザーのために、私は自分自身にいくつかのアドバイスを与えることを許可します。



デバイスの変更は特に必要ありません。 良くないかもしれません。 そして、誰が使用したテーブルの表面が重力ベクトルに厳密に垂直であると言ったでしょうか?



触覚制御のあるゲームで、加速度計またはジャイロスコープのエラーがはっきりと目立つ場合は、設定またはキャリブレーションメニューの一時停止モードを確認してください。



「レベル」ツールを実装するすべての関連アプリケーションでは、「ゼロ」位置を指定するキャリブレーションが必要です-当然、組み込みアプリケーションにもあります。



磁気コンパスは、自然の中でハイキングする場合にのみ機能します。 デバイス、コンピューター、スピーカー、加熱バッテリー、または車両の近くの方向を絶対に正確に決定しようとして不可能を達成することを期待しないでください。 このアプリケーション用に特別に設計されたものと、タスクに最適なモードを使用してください。



磁気コンパスを使用する場合、測定値はキャリブレーション直後に、デバイスがかなりの距離に移動するまで関連することに注意してください-脊椎の軸に沿って90°回転すると、すでに再キャリブレーションが必要な場合があります。



「レベル」や「ジャイロコンパス」などのアプリケーションを使用する場合、センサーの読み取り値は約1から2分間関連することに注意してください。これは測定を行うのに十分です-エラーの蓄積を避けるため、各測定の前にキャリブレーションを繰り返して測定の精度を高めます。



コメントのPS Ovechayutの質問。



All Articles