Ich arbeite an einer Anwendung, bei der ich die Position eines mobilen Benutzers in einem Gebäude verfolgen möchte, in dem GPS nicht verfügbar ist. Der Benutzer beginnt an einem bekannten festen Ort (genau innerhalb von 5 Zentimetern), an welchem Punkt der Beschleunigungsmesser in dem Telefon aktiviert werden soll, um irgendwelche weiteren Bewegungen in Bezug auf diesen festen Ort zu verfolgen. Meine Frage ist, in der aktuellen Generation Smartphones (iPhones, Android-Handys, etc), wie genau kann man erwarten, in der Lage, einige Körper Position basierend auf dem Beschleunigungsmesser diese Telefone in der Regel kommen mit ausrüsten?
Bestimmte Beispiele wären gut, zum Beispiel "Wenn ich 50 Meter X vom Startpunkt, 35 Meter Y vom Startpunkt und 5 Meter Z vom Startpunkt entfernt bin, kann ich erwarten, dass mein Standort innerhalb von + angenähert wird / - 80 Zentimeter auf den meisten aktuellen Smartphones "oder was auch immer.
Ich habe nur ein oberflächliches Verständnis von Techniken wie Kalman-Filtern, um die Drift zu korrigieren, aber wenn solche Techniken für meine Anwendung relevant sind und jemand die Qualität der Korrekturen beschreiben möchte, die ich durch solche Techniken erhalten könnte, wäre das ein Plus .
Wenn Sie die Beschleunigungsmesserwerte zweimal integrieren, erhalten Sie eine Position, aber der Fehler ist schrecklich. Es ist in der Praxis nutzlos.
Hier ist eine Erklärung warum (Google Tech Talk) um 23:20 Uhr.
Ich habe eine ähnliche Frage beantwortet
Ich weiß nicht, ob dieser Thread noch offen ist oder ob Sie diesen Ansatz noch versuchen, aber ich könnte zumindest etwas dazu sagen, wenn ich bedenke, dass ich dasselbe versucht habe.
Wie Ali gesagt hat .... es ist schrecklich! Der kleinste Messfehler in Beschleunigungssensoren erweist sich nach doppelter Integration als reduktionsfrei. Und aufgrund der ständigen Zunahme und Abnahme der Beschleunigung während des Gehens (mit jedem Fußschritt in der Tat) sammelt sich dieser Fehler schnell im Laufe der Zeit.
Entschuldige die schlechten Nachrichten. Ich wollte es auch nicht glauben, bis ich es selbst ausprobiere ... Unerwünschte Messungen herauszufiltern funktioniert auch nicht.
Ich habe einen anderen Ansatz möglicherweise plausibel, wenn Sie daran interessiert sind, mit Ihrem Projekt fortzufahren. (Ansatz, den ich für meine Diplomarbeit für meinen Computer-Engineering-Abschluss befolgte) ... durch Bildverarbeitung!
Sie folgen grundsätzlich der Theorie für optische Mäuse. Optischer Fluss, oder wie von einer Ansicht bezeichnet, Ego-Motion. Die Bildverarbeitungsalgorithmen in Androids NDK implementiert. Sogar implementiert OpenCV durch den NDK, um Algorithmen zu vereinfachen. Sie konvertieren Bilder in Graustufen (um unterschiedliche Lichtempfindlichkeiten auszugleichen), implementieren dann eine Schwellenwertbildung, Bildverbesserung auf den Bildern (um Bilder während des Gehens zu verwischen), dann Eckenerkennung (erhöhen Sie die Genauigkeit für die Gesamtergebnisschätzungen) und passen dann die Vorlage an macht den tatsächlichen Vergleich zwischen Bildrahmen und schätzt die tatsächliche Verschiebung in der Anzahl der Pixel.
Sie gehen dann durch Versuch und Irrtum, um zu schätzen, welche Menge von Pixeln die Entfernung darstellt, und multiplizieren Sie mit diesem Wert, um die Pixelverschiebung in die tatsächliche Verschiebung zu konvertieren. Dies funktioniert jedoch bis zu einer gewissen Bewegungsgeschwindigkeit, wobei das eigentliche Problem darin besteht, dass Kamerabilder für genaue Vergleiche aufgrund von Gehen immer noch zu unscharf werden. Dies kann durch Einstellen der Kamera-Shutter-Geschwindigkeiten oder ISO (ich spiele immer noch damit herum) verbessert werden.
Also hoffe das hilft ... sonst google nach Egomotion für Echtzeitanwendungen. Irgendwann wirst du das richtige Zeug bekommen und das Jibberish herausfinden, das ich dir gerade erklärt habe. genieße:)
Der optische Ansatz ist gut, aber OpenCV bietet einige Feature-Transformationen. Sie haben dann Übereinstimmung (OpenCV bietet dies).
Ohne einen zweiten Bezugspunkt (2 Kameras) können Sie aufgrund der Tiefe nicht rekonstruieren, wo Sie sich gerade befinden. Im besten Fall kann man eine Tiefe pro Punkt schätzen, eine Bewegung annehmen, die Annahme basierend auf ein paar Frames bewerten und bei jeder Tiefe und Bewegung neu erraten, bis es Sinn macht. Das ist nicht so schwer zu programmieren, aber es ist nicht stabil, kleine Bewegungen der Dinge in der Szene vermasseln es. Ich habe es versucht:)
Mit einer zweiten Kamera ist es gar nicht so schwer. Aber Handys haben sie nicht.
Tags und Links android geolocation accelerometer