Genauigkeit des Android-Beschleunigungsmessers (Trägheitsnavigation)


109

Ich habe versucht, ein Trägheitsnavigationssystem für ein Android-Telefon zu implementieren, was angesichts der Genauigkeit des Beschleunigungsmessers und der konstanten Schwankung der Messwerte schwierig ist.

Zunächst stellte ich das Telefon auf eine ebene Fläche und nahm 1000 Beschleunigungsmesser-Messwerte in X- und Y-Richtung (parallel zum Tisch, sodass keine Schwerkraft in diese Richtungen wirkt). Ich habe dann diese Messwerte gemittelt und diesen Wert verwendet, um das Telefon zu kalibrieren (diesen Wert von jedem nachfolgenden Messwert abzuziehen).

Ich habe das System dann getestet, indem ich es erneut auf den Tisch gelegt und 5000 Beschleunigungsmesser-Messwerte in X- und Y-Richtung abgetastet habe. Angesichts der Kalibrierung würde ich erwarten, dass sich diese Beschleunigungen in jeder Richtung (ungefähr) zu 0 addieren. Dies ist jedoch nicht der Fall, und die Gesamtbeschleunigung über 5000 Iterationen liegt bei weitem nicht bei 0 (Durchschnitt um 10 auf jeder Achse).

Mir ist klar, dass es schwierig sein kann, dies zu beantworten, ohne meinen Code zu sehen, aber im Allgemeinen ...

Ist dies nur ein Beispiel dafür, wie ungenau die Beschleunigungsmesserwerte auf einem Mobiltelefon (HTC Desire S) sind, oder ist es wahrscheinlicher, dass ich einige Fehler in meiner Codierung gemacht habe?


1
webvr-polyfill ist eine großartige Inspirationsquelle: github.com/borismus/webvr-polyfill/tree/master/src Schauen Sie sich an, wie sie einen VR-Sensor mithilfe von Beschleunigungsmesserdaten polyfillieren
SC

Antworten:


128

Sie erhalten die Position, indem Sie die Linearbeschleunigung zweimal integrieren, aber der Fehler ist schrecklich. In der Praxis ist es nutzlos.

Hier ist eine Erklärung, warum (Google Tech Talk) um 23:20 Uhr . Ich kann dieses Video nur empfehlen.

Es ist nicht das Rauschen des Beschleunigungsmessers, das das Problem verursacht, sondern das weiße Rauschen des Kreisels , siehe Unterabschnitt 6.2.3 Ausbreitung von Fehlern. (Übrigens benötigen Sie auch die Gyroskope.)

Für die Positionierung in Innenräumen habe ich Folgendes nützlich gefunden:

RSSI-basierte Lokalisierung und Verfolgung in Innenräumen mit Sigma-Point Kalman Smoothers

Fußgängerverfolgung mit schuhmontierten Trägheitssensoren

Verbesserung der Leistung von Schrittzählern mit einem einzigen Beschleunigungsmesser

Ich habe keine Ahnung, wie diese Methoden in realen Anwendungen funktionieren würden oder wie man sie in eine schöne Android-App verwandelt.

Eine ähnliche Frage ist dies .

AKTUALISIEREN:

Anscheinend gibt es eine neuere Version als die oben genannte Oliver J. Woodman, "Eine Einführung in die Trägheitsnavigation", seine Doktorarbeit:

Fußgängerlokalisierung für Innenräume


2
Mir ist klar, dass dies lange her ist, aber ich habe eine Folgefrage. Die Kamera in Android JB verfügt über eine Panorama-Funktion, mit der Sie ein Panoramabild aufnehmen können, indem Sie das Telefon entweder drehen oder linear um eine Achse bewegen. Dazu muss die Position des Telefons relativ genau verfolgt werden - zumindest besser als der im Video, auf den diese Antwort verweist, erwähnte 20-cm / s-Fehler. Wie macht es das? Gibt es eine Möglichkeit, die Qualität der Trägheitsverfolgung zu verbessern? Oder verwendet es eine clevere Bildverarbeitung, um nur die Kamera zu verwenden?
Tom

1
@ Tom Ich glaube letzteres, das Telefon verkettet die Bilder rein durch Bildverarbeitungsalgorithmen. Was lässt Sie denken, dass das Telefon seine Position verfolgen muss, um ein Panoramabild zu erzeugen? Das war in den 90ern mit gewöhnlichen Kameras möglich und natürlich hatten wir damals keine Beschleunigungsmesser in den Kameras :) Natürlich wurden die Bilder auf gewöhnlichen PCs verkettet. Aber Sie brauchen die Position dafür nicht, Bildverarbeitungsalgorithmen sind ausreichend. Hoffe das hilft.
Ali

Es ist ganz anders als bei dem alten Job, bei dem einige Bilder manuell aufgenommen und später zusammengefügt werden. Es verfolgt seine Position irgendwie in Echtzeit. Es ist ein wenig schwierig zu erklären, ohne es zu demonstrieren. Sie müssen keine Bilder manuell aufnehmen - das Telefon entscheidet, wann Sie sich weit genug bewegt haben, um ein weiteres aufzunehmen. Während Sie die Bilder aufnehmen, wird unten eine kleine Leiste mit einer Vorschau des Panoramas angezeigt. Wenn Sie die Kamera beispielsweise zu weit nach unten richten, ertönt ein Piepton und ein Aufwärtspfeil zeigt an, dass Sie sie wieder nach oben bewegen müssen.
Tom

2
Tatsächlich scheint es Bildverarbeitung zu verwenden - das Starten eines Panoramas und das anschließende Winken der Hand vor der Kamera verwirren das Positionsverfolgungssystem ziemlich stark!
Tom

@ Tom OK. Ich denke, es wird hauptsächlich Bildverarbeitung verwendet (wie Ihr letzter Kommentar ebenfalls andeutet), aber es wird wahrscheinlich mit der Verfolgung der Ausrichtung (aber nicht der Position) kombiniert .
Ali

19

Ich denke nur laut nach und habe noch nicht mit einer Android-Beschleunigungsmesser-API gespielt.

Um die Navigation von Beschleunigungsmessern aus zu erhalten, benötigen Sie traditionell zunächst einen 6-Achsen-Beschleunigungsmesser. Sie benötigen Beschleunigungen in X, Y und Z, aber auch Rotationen in Xr, Yr und Zr. Ohne die Rotationsdaten verfügen Sie nicht über genügend Daten, um einen Vektor zu erstellen, es sei denn, Sie gehen davon aus, dass das Gerät seine Einstellung niemals ändert, was ziemlich einschränkend wäre. Niemand liest sowieso die AGB.

Oh, und Sie wissen, dass INS mit der Rotation der Erde driftet, richtig? Das gibt es also auch. Eine Stunde später klettern Sie auf mysteriöse Weise auf einem 15 ° -Hang in den Weltraum. Dies setzt voraus, dass Sie ein INS hatten, das in der Lage ist, den Standort so lange aufrechtzuerhalten, was ein Telefon noch nicht kann.

Ein besserer Weg, Beschleunigungsmesser - auch mit einem 3-Achsen-Beschleunigungsmesser - für die Navigation zu verwenden, wäre die Einbindung in GPS, um das INS zu kalibrieren, wann immer dies möglich ist. Wo GPS zu kurz kommt, macht INS ein gutes Kompliment. GPS kann Sie plötzlich 3 Blocks entfernt abschießen, weil Sie zu nahe an einen Baum gekommen sind. INS ist nicht großartig, aber zumindest weiß es, dass Sie nicht von einem Meteor getroffen wurden.

Was Sie tun könnten, ist, die Beschleunigungsmesserdaten des Telefons und viele davon zu protokollieren. Wie Wochen wert. Vergleichen Sie es mit guten (ich meine wirklich guten) GPS-Daten und verwenden Sie Datenerfassung, um die Korrelation von Trends zwischen Beschleunigungsmesserdaten und bekannten GPS-Daten herzustellen. (Pro-Tipp: Sie sollten den GPS-Almanach tagelang mit guter Geometrie und vielen Satelliten überprüfen. An manchen Tagen haben Sie möglicherweise nur 4 Satelliten und das reicht nicht aus.) Möglicherweise können Sie dies bei einer Person feststellen läuft mit dem Handy in der Tasche, protokollieren die Beschleunigungsmesserdaten ein ganz bestimmtes Muster. Basierend auf der Datenerfassung erstellen Sie mit diesem Benutzer ein Profil für dieses Gerät und welche Geschwindigkeit dieses Muster darstellt, wenn GPS-Daten vorhanden sind. Sie sollten in der Lage sein, Kurven zu erkennen, Treppen zu steigen und sich hinzusetzen (Kalibrierung auf 0 Geschwindigkeitszeit! ) und verschiedene andere Aufgaben. Wie das Telefon gehalten wird, müsste vollständig als separate Dateneingabe behandelt werden. Ich rieche ein neuronales Netzwerk, das für das Data Mining verwendet wird. Mit anderen Worten, etwas Blindes für die Bedeutung der Eingaben. Der Algorithmus würde nur nach Trends in den Mustern suchen und nicht wirklich auf die tatsächlichen Messungen des INS achten. Alles was es wissen würde isthistorically, when this pattern occurs, the device is traveling and 2.72 m/s X, 0.17m/s Y, 0.01m/s Z, so the device must be doing that now.Und es würde das Stück entsprechend vorwärts bewegen. Es ist wichtig, dass es völlig blind ist, da das Einstecken eines Telefons in die Tasche möglicherweise in einer von 4 verschiedenen Ausrichtungen und in 8 verschiedenen Ausrichtungen ausgerichtet ist, wenn Sie die Taschen wechseln. Und es gibt auch viele Möglichkeiten, Ihr Telefon zu halten. Wir sprechen hier über viele Daten.

Sie werden offensichtlich immer noch viel Drift haben, aber ich denke, Sie würden auf diese Weise besseres Glück haben, da das Gerät weiß, wann Sie aufgehört haben zu gehen, und die Positionsdrift kein Fortbestehen sein wird. Es weiß, dass Sie aufgrund historischer Daten stillstehen. Herkömmliche INS-Systeme verfügen nicht über diese Funktion. Die Drift setzt sich bei allen zukünftigen Messungen und Verbindungen exponentiell fort. Ungottlose Genauigkeit oder eine sekundäre Navigation, die in regelmäßigen Abständen überprüft werden muss, ist bei herkömmlichen INS von entscheidender Bedeutung.

Jedes Gerät und jede Person müsste ein eigenes Profil haben. Es sind viele Daten und viele Berechnungen. Jeder geht mit unterschiedlichen Schritten unterschiedliche Geschwindigkeiten und steckt seine Telefone in unterschiedliche Taschen usw. Um dies in der realen Welt zu implementieren, müsste die Zahlenkalkulation sicherlich serverseitig erfolgen.

Wenn Sie GPS für die anfängliche Basislinie verwendet haben, besteht ein Teil des Problems darin, dass GPS im Laufe der Zeit tendenziell eigene Migrationen aufweist, die jedoch nicht fortbestehen. Setzen Sie einen Empfänger an einen Ort und protokollieren Sie die Daten. Wenn es keine WAAS-Korrekturen gibt, können Sie leicht Standortkorrekturen erhalten, die in zufällige Richtungen 100 Fuß um Sie herum driften. Mit WAAS vielleicht bis zu 6 Fuß. Vielleicht haben Sie mit einem Submeter-RTK-System auf einem Rucksack tatsächlich mehr Glück, um zumindest den ANN-Algorithmus herunterzufahren.

Sie werden mit dem INS nach meiner Methode immer noch eine Winkeldrift haben. Das ist ein Problem. Aber wenn Sie so weit gegangen sind, um eine ANN zu erstellen, um über Wochen hinweg GPS- und INS-Daten unter n Benutzern zu verteilen, und diese tatsächlich bis zu diesem Punkt zum Laufen gebracht haben, haben Sie offensichtlich bisher nichts gegen Big Data. Gehen Sie diesen Weg weiter und verwenden Sie mehr Daten, um die Winkeldrift zu beheben: Menschen sind Gewohnheitstiere. Wir machen so ziemlich die gleichen Dinge wie auf Gehwegen, durch Türen, Treppen hoch und machen keine verrückten Dinge wie über Autobahnen, durch Wände oder von Balkonen.

Nehmen wir also an, Sie nehmen eine Seite von Big Brother und beginnen, Daten darüber zu speichern, wohin die Leute gehen. Sie können mit der Zuordnung beginnen, wo Personen laufen sollen. Es ist eine ziemlich sichere Wette, dass der Benutzer, wenn er anfängt, Treppen hochzugehen, sich an derselben Treppe befindet wie die Person vor ihr. Nach 1000 Iterationen und einigen Anpassungen der kleinsten Quadrate weiß Ihre Datenbank ziemlich genau, wo sich diese Treppen befinden. Jetzt können Sie die Winkeldrift und die Position korrigieren, wenn die Person zu laufen beginnt. Wenn sie diese Treppe erreicht, den Flur hinuntergeht oder einen Bürgersteig hinunterfährt, kann jede Abweichung korrigiert werden. Ihre Datenbank würde Sektoren enthalten, die mit der Wahrscheinlichkeit gewichtet sind, dass eine Person dorthin gehen würde oder dass dieser Benutzer in der Vergangenheit dorthin gegangen ist. Geodatenbanken sind dafür mit optimiertdivide and conquernur sinnvolle Sektoren zuzuweisen. Es wäre wie bei MIT-Projekten, bei denen der mit einem Laser ausgestattete Roboter mit einem schwarzen Bild beginnt und das Labyrinth in Erinnerung malt, indem er jede Runde macht und beleuchtet, wo sich alle Wände befinden.

Bereiche mit hohem Verkehrsaufkommen würden ein höheres Gewicht erhalten, und Bereiche, in denen noch nie jemand ein Gewicht von 0 erhalten hat. Bereiche mit höherem Verkehr haben eine höhere Auflösung. Sie würden im Wesentlichen eine Karte von überall erhalten, wo sich jemand befunden hat, und sie als Vorhersagemodell verwenden.

Es würde mich nicht wundern, wenn Sie mit dieser Methode feststellen könnten, welchen Platz eine Person in einem Theater einnimmt. Bei genügend Benutzern, die ins Theater gehen, und einer ausreichenden Auflösung würden Sie Daten haben, die jede Zeile des Theaters abbilden und wie breit jede Zeile ist. Je mehr Personen einen Ort besuchen, desto höher ist die Wiedergabetreue, mit der Sie vorhersagen können, dass sich diese Person befindet.

Außerdem empfehle ich Ihnen dringend, ein (kostenloses) Abonnement für das GPS World-Magazin zu erhalten, wenn Sie an der aktuellen Forschung zu solchen Dingen interessiert sind. Jeden Monat mache ich mich daran.


"Wenn es möglich ist, GPS anzuschließen, um das INS zu kalibrieren. Wenn GPS zu kurz kommt, macht INS ein gutes Kompliment." Dafür ist Kalman-Filterung gedacht, wie ich es verstehe. Es kombiniert die Stärken jeder Methode, um die Schwächen der anderen aufzuheben
Endolith

8

Ich bin mir nicht sicher, wie groß Ihr Offset ist, weil Sie vergessen haben, Einheiten einzuschließen. ("Ungefähr 10 auf jeder Achse" sagt nicht viel .: P) Das heißt, es ist immer noch wahrscheinlich auf Ungenauigkeiten in der Hardware zurückzuführen.

Der Beschleunigungsmesser eignet sich beispielsweise zum Bestimmen der Ausrichtung des Telefons in Bezug auf die Schwerkraft oder zum Erkennen von Gesten (Schütteln oder Stoßen des Telefons usw.).

Der Versuch, mit dem Beschleunigungsmesser eine Dead Reckoning-Methode durchzuführen, führt jedoch zu einer Menge zusammengesetzter Fehler. Andernfalls müsste der Beschleunigungsmesser wahnsinnig genau sein, und dies ist kein häufiger Anwendungsfall. Daher bezweifle ich, dass Hardwarehersteller dafür optimieren.


Danke für die Antwort. Die Beschleunigungsmesser zeigen im Stillstand sowohl auf der X- als auch auf der Y-Achse etwa -0,8 ms ^ -2 an, daher habe ich dies als Versatz verwendet. Mit dem "Ungefähr 10" -Bit meinte ich, dass über 5000 Iterationen, bei denen jede der Beschleunigungen auf einer einzelnen Achse vom Sensor addiert wurde, nicht ungefähr 0 ms ^ -2 betrugen (wie wenn es gleichmäßig über und unter dem Versatz schwanken würde Wert), sondern neigte dazu, die Beschleunigung mehr in eine Richtung zu registrieren, was sich nach doppelter Integration zur Positionsbestimmung herausstellte, als sich das Telefon in einer Minute um 3 m bewegte.
Woodstock365

+1 für die Verwendung des Luftfahrtnavigationsbegriffs "Dead Reckoning". Obwohl Dead Reckoning eher für die Navigation mit einer Kamera als für ein INS gilt.
RyanJMcGowan

7

Der Android-Beschleunigungsmesser ist digital. Er erfasst die Beschleunigung mit der gleichen Anzahl von "Eimern". Nehmen wir an, es gibt 256 Eimer und der Beschleunigungsmesser kann von -2 g bis + 2 g erfassen. Dies bedeutet, dass Ihre Ausgabe in Bezug auf diese "Buckets" quantisiert wird und um einen Satz von Werten springt.

Um einen Android-Beschleunigungsmesser zu kalibrieren, müssen Sie viel mehr als 1000 Punkte abtasten und den "Modus" finden, um den der Beschleunigungsmesser schwankt. Ermitteln Sie dann die Anzahl der digitalen Punkte anhand der Schwankung der Ausgabe und verwenden Sie diese für Ihre Filterung.

Ich empfehle die Kalman-Filterung, sobald Sie den Modus und die +/- Schwankung erhalten.


1
Ich suchte nach Kalibrierungsmethoden. Ihr Vorschlag scheint das zu sein, was ich brauche. Ich muss nur bestätigen. Wenn ich den Modus gefunden habe, sagen wir, es ist 0,5. Ich habe nicht die Meldung "Dann ermitteln Sie die Anzahl der digitalen Punkte, um wie viel die Ausgabe schwankt, und verwenden Sie diese für Ihre Filterung." Könnten Sie bitte näher darauf eingehen?
Nazerke

1
Angenommen, Ihr Beschleunigungsmesser hat 256 Ausgangspunkte und schwankt zwischen den Messwerten um 0,015 m / s ^ 2. Wenn Sie Ihr Gerät auf den Tisch legen, kann Ihre Leistung sogar um ein Vielfaches von 0,015 m / s ^ 2 schwanken. Angenommen, Sie erhalten einen Wert von 0 +/- (X * 0,015). Sie müssen X finden (was eine gerade Zahl wäre). Zum Beispiel kann mein X 3 sein. In diesem Fall würde ich Änderungen in der Beschleunigungsmesseranzeige ignorieren, die weniger als 0,045 m / s betragen ^ 2
Alex Stone

Also sind Android-Handys Beschleunigungsmesser noch nicht so gut ... richtig?
Techsin

4

Mir ist klar, dass dies ziemlich alt ist, aber das vorliegende Problem wird in KEINER der gegebenen Antworten angesprochen.

Was Sie sehen, ist die lineare Beschleunigung des Geräts einschließlich der Wirkung der Schwerkraft. Wenn Sie das Telefon auf eine ebene Fläche legen, meldet der Sensor die Beschleunigung aufgrund der Schwerkraft, die ungefähr beträgt 9.80665 m/s2, und gibt somit die 10 an, die Sie sehen. Die Sensoren sind ungenau, aber sie sind nicht so ungenau! Sehen Sie hier einige nützliche Links und Informationen über den Sensor , den Sie nachher sein können.


17
Nein - ich denke, Sie haben die Frage falsch verstanden: "... Messwerte in X- und Y-Richtung (parallel zur Tabelle, also keine Schwerkraft in diese Richtungen)". Die 9,8 / s2 wären auf der Z-Achse.
Teekanne7

0

Sie gehen davon aus, dass die Beschleunigungsmesserwerte in X- und Y-Richtung, in diesem Fall ausschließlich Hardware-Rauschen, eine Normalverteilung um Ihren Durchschnitt bilden würden. Anscheinend ist das nicht der Fall.

Sie können versuchen, diese Werte in einem Diagramm darzustellen und festzustellen, ob ein Muster auftritt. Wenn nicht, ist das Rauschen statistisch zufällig und kann nicht kalibriert werden - zumindest nicht für Ihre spezielle Telefonhardware.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.