Ich arbeite derzeit an einem Gerät, das einen ständig eingeschalteten 3D-Beschleunigungsmesser (mit einer Skala von +-2 g) und einen 3D-Gyroskop-Sensor (mit einer Skala von +-250 g) verwendet.
Ich kann jeden möglichen Vektor (X, Y, Z) und ihre Beschleunigung (g's) und Winkelgeschwindigkeit (dps) sowie den Winkel, in dem sich das Gerät gerade befindet, ablesen. Aber mein Problem ist, dass, wenn das Gerät geneigt ist (0 g ohne Neigung), die Beschleunigung zwischen (abwärts) 0 g -> -1 g oder zwischen (aufwärts) 0 g -> 1 g liegt, je nachdem, in welchem Winkel sich das Gerät gerade befindet. Unten ist ein Bild, das hoffentlich die Idee klärt.
Das Gerät befindet sich in einem Auto und sollte die Beschleunigung messen, wenn das Auto langsamer wird (Bremse). Wenn sich das Gerät jedoch bereits in einer Neigung befindet, misst der Beschleunigungsmesser eine gewisse Beschleunigung, die durch die Neigung verursacht wird, was es schwierig macht, festzustellen, ob das Gerät wirklich eine gewisse Beschleunigung aufweist oder ob es nur die Neigung ist, die die Beschleunigung verursacht.
Die X- und Y-Achse erzeugen 0 g und die Z-Achse 1 g, wenn das Gerät nicht geneigt ist und sich auf einer ebenen Fläche befindet. Die Neigung bewirkt, dass der Messwert der X-Achse in Richtung 1 g geht, wenn die Neigung nach oben erfolgt, und auf -1 g, wenn die Neigung nach unten erfolgt. +-1g wird erreicht, wenn sich das Gerät auf 90* Grad von der ursprünglichen Position befindet
Ich habe mir den Kopf zerbrochen, wie ich die durch die Neigung verursachte Beschleunigung eliminieren und nur die tatsächliche Beschleunigung des Geräts messen kann, aber ich kann mir mit den folgenden Daten, die ich produzieren kann, einfach keinen Ausweg aus diesem Problem herausdenken.
Grundsätzlich denke ich, wenn ich nur die X-Achsen-Beschleunigung (Bild) messen könnte, auch wenn der Sensor wie im Bild geneigt ist.
Hoffentlich ist diese Nachricht aufgrund meiner Englischkenntnisse und der Art und Weise, wie ich versuche, mein Problem zu erklären, nicht zu schwer zu verstehen.
Nur eine Lösungsskizze.
Berücksichtigen Sie alle 3 Achsen.
Die Beschleunigung aufgrund der Schwerkraft beträgt unabhängig von der Neigung immer 1 G als Vektorsumme von X, Y, Z, unabhängig von der Neigung. Die Beschleunigung im Ruhezustand oder bei stetiger Bewegung kann man sich als Punkt auf einer Kugel mit Radius 1G vorstellen. (Wenn Sie perfekt horizontal sind, ist dieser Punkt (0, 0, -1), dh direkt unter Ihnen).
Beschleunigung durch Bremsen verzerrt die Kugel selbst; die Vektorsumme von X,Y,Z ist nicht mehr 1G.
So
gibt dir die Gesamtbeschleunigung. Wenn es gleich G ist, sind Sie in Ruhe; andernfalls beschleunigen Sie, und ist die Vektorsumme von G und der wahren Beschleunigung.
Sie müssen jetzt die wahre Beschleunigung finden, die normalerweise ein Vektor in Vorwärts- (oder Rückwärts-) Richtung ist, was den Unterschied zwischen erklärt und G. Sie müssen einen Punkt auf der G-Kugel von subtrahieren , um einen (hoffentlich eindeutigen Lösungs-) Vektor mit nur einer X-Komponente (vorwärts/rückwärts) zu finden. Das ist deine Beschleunigung. (Ich werde die Trigonometrie als einfaches Puzzle belassen, hoffentlich ist die Idee klar).
Es sei denn, Sie drehen oder rutschen auch, also brauchen Sie Eingaben von Lenkrad und ABS, um sicher zu sein; das wird zu einem Datenfusionsproblem. Dieser Ansatz liefert eine Schätzung der Beschleunigung. Um diese Schätzung auf Plausibilität zu überprüfen und zu verfeinern, kombinieren Sie sie mit anderen (ebenfalls unzuverlässigen) Datenquellen, wie in Phil Frosts Antwort, indem Sie einen Kalman-Filter verwenden.
Ihr Hauptfehler besteht darin, die Beschleunigung nicht als einen einzelnen Vektor zu behandeln. Wenn das Auto in Ruhe ist, wird dieser Vektor immer 1 g nach oben sein. Sehen Sie sich nicht nur die X-Komponente der Rohdaten des Beschleunigungsmessers an. Führen Sie die echte Vektorrechnung durch.
Aber mein Problem ist, dass, wenn das Gerät geneigt ist (0 g, wenn keine Neigung), die Beschleunigung zwischen (abwärts) 0 g -> -1 g oder zwischen (aufwärts) 0 g -> 1 g liegt.
Nein. Das ist der Punkt. Was Sie sagen, mag für die X-Komponente des Beschleunigungsmesserausgangs gelten, aber nicht für die Beschleunigung, wenn sich das Auto im Ruhezustand befindet.
Die ideale gemessene Beschleunigung ist immer die tatsächliche Beschleunigung des Autos (relativ zur Erde) plus 1 g Erdbeschleunigung. Letzteres ist immer in Aufwärtsrichtung. Wenn Sie die Ausrichtung des Autos kennen, können Sie dieses 1 g aufgrund der Schwerkraft abziehen, um die eigentlich gesuchte Beschleunigung zu finden.
Beachten Sie, dass bei solchen Messwerten erhebliche Fehler auftreten, insbesondere bei billigen MEMS-Sensoren. Während Sie in der Lage sein sollten, sich eine gute Vorstellung von kurzfristigen Ereignissen wie starkem Beschleunigen oder starkem Bremsen zu machen, sind diese Daten bei weitem nicht gut genug, um bestenfalls länger als ein paar Sekunden Trägheitsnavigation durchzuführen.
Wie andere Antworten angegeben haben, liefert der Beschleunigungsmesser einen dreidimensionalen Vektor, der die Summe der Schwerkraft und anderer Beschleunigungen auf das Auto aufgrund des Motors, der Bremsen oder anderer auf das Auto wirkender Kräfte ist. Ihr Ziel ist es dann, die Gravitationsbeschleunigung von der Ausgabe des Beschleunigungsmessers zu subtrahieren, um die verbleibenden anderen Kräfte zu finden.
Für die beste Genauigkeit können Sie nicht davon ausgehen, dass die Schwerkraft relativ zum Beschleunigungsmesser immer "unten" ist. Beispielsweise kann das Auto auf einem Hügel stehen. Alle Ihre Berechnungen müssen mit dreidimensionaler Vektormathematik durchgeführt werden, und Sie müssen eine Schätzung der Ausrichtung des Autos haben, damit Sie die Richtung des zu subtrahierenden Schwerkraftvektors kennen.
Ein Kalman-Filter ist hier ein gängiger Ansatz. Die Idee ist, alle Daten zu nehmen, die Sie haben, die die Ausrichtung des Autos verändern könnten, dann einen gewichteten Durchschnitt der Messungen durchzuführen, dies mit dem zu kombinieren, was Sie über die auf das Auto einwirkende Physik wissen, um zu einer probabilistischen Schätzung der zu gelangen neue Ausrichtung des Autos und welche Richtung "unten" ist.
Je mehr Daten Sie haben und je genauer Sie die Physik des Autos modellieren können, desto genauer kann diese Schätzung werden.
Wenn Sie beispielsweise einen Kreisel haben und messen, wie sich das Auto nach oben neigt, können Sie vorhersagen, dass sich der Schwerkraftvektor zum Heck des Autos drehen wird. Kurzfristig, zum Beispiel wenn das Auto gerade begonnen hat, einen Hügel hinaufzufahren, kann dies dazu beitragen, dass der Schwerkraftvektor schnell die richtige Ausrichtung einnimmt.
Sie können auch davon ausgehen, dass das Auto im Durchschnitt nicht bremst oder beschleunigt. Somit könnte eine tiefpassgefilterte Ausgabe des Beschleunigungsmessers in die Schätzung einfließen, welche Richtung "nach unten" ist. Dies ermöglicht eine Langzeitmessung ohne Trägheitsdrift.
Das Kombinieren von Daten aus dem Beschleunigungsmesser und dem Gyroskop zum Schätzen der Schwerkraftrichtung liefert somit eine genauere Schätzung als jede Messung allein.
Außerdem können Sie Ihr Wissen über den möglichen Betriebsbereich des Fahrzeugs einfließen lassen. Beispielsweise kann das Auto keine zu steilen Hügel hinauf- oder hinunterfahren. Wenn der Beschleunigungsmesser also solche extremen Winkel anzeigt, können Sie es weniger belasten, vorausgesetzt, der größte Teil seiner Leistung ist auf Bremsen oder Motor zurückzuführen, nicht auf die Schwerkraft.
Sie wissen, wenn der Fahrer auf die Bremse tritt, wird dies den Beschleunigungsvektor verschieben, und Sie können dies von der geschätzten "Abwärts" -Komponente subtrahieren.
Oder wenn Sie GPS- und Kartendaten haben, können Sie eine Schätzung der Neigung des Autos basierend auf dem Standort einbeziehen. Wenn Sie über hochgenaue Daten verfügen, wissen Sie möglicherweise genau, auf welchem Hügel sich das Fahrzeug befindet. Wenn Sie nur Daten mit geringer Genauigkeit haben, kann dies dennoch nützlich sein. Wenn sich das Auto beispielsweise in Kansas befindet, sind Hügel unwahrscheinlich. Wenn sich das Auto in San Francisco befindet, sind Hügel wahrscheinlicher und Sie geben dem Beschleunigungsmesser möglicherweise weniger Gewicht.
Wenn Sie Daten zum Kraftstoffverbrauch und zur Geschwindigkeit haben und wissen, dass beim Bergauffahren mehr Kraftstoff verbraucht wird, können Sie diese verwenden, um zu schätzen, dass das Auto basierend auf der Kraftstoffeffizienz nach oben oder unten geneigt ist.
Usw. Je mehr Sie wissen, desto besser kann Ihre Schätzung ausfallen.
Sie würden einen Fusionsalgorithmus benötigen und 3D-Beschleunigungsmesser, 3D-Gyro und 3D-Magnetsensoren verwenden. Mit diesem Fusionsalgorithmus erhält man die Lage, die Erdanziehungskraft hilft als Referenz um den Horizont zu erkennen - Nick-/Gier-/Rollwinkel. Die anderen beiden Sensoren Mag/Gyro helfen, die dynamische Bewegung herauszufiltern. Da Ihr Auto auch nach links / rechts abbiegt, wird die Zentrifugalkraft hinzugefügt. Sobald Sie die Haltung haben, können Sie den Gravitationsvektor subtrahieren und die resultierende Beschleunigung in allen drei Achsen zerlegen.
Als sehr einfacher Ansatz können Sie einen Hochpassfilter verwenden, um den konstanten Teil der Beschleunigung (der der Schwerkraft entspricht) zu eliminieren und den variablen Teil beizubehalten, der auf die Fahrzeugdynamik zurückzuführen ist. Angenommen raw
, es handelt sich um einen Vektor, der Ihre X-, Y- und Z-Messungen enthält, und acc
um die Fahrzeugbeschleunigung ohne Schwerkraft. Dann
void correct_for_gravity(float *raw, float *acc)
{
const float k = 0.9;
static float gravity[3];
gravity[0] = k * gravity[0] + (1 - k) * raw[0];
gravity[1] = k * gravity[1] + (1 - k) * raw[1];
gravity[2] = k * gravity[2] + (1 - k) * raw[2];
acc[0] = raw[0] - gravity[0];
acc[1] = raw[1] - gravity[1];
acc[2] = raw[2] - gravity[2];
}
Einzelne Komponenten von acc
sind immer noch von der Neigung betroffen, die Vektornorm jedoch nicht:
norm_acc = sqrt(acc[0]*acc[0] + acc[1]*acc[1] + acc[2]*acc[2]);
Natürlich ist dieses Verfahren nicht sehr genau, insbesondere wenn sich die Neigung schnell ändert. Das ist ungefähr so weit, wie naive Mathematik Sie bringt. Wenn Sie eine höhere Genauigkeit benötigen, lernen Sie, wie man einen Kalman-Filter verwendet.
Die Antwort liegt in der genauen Definition von „Verlangsamung“ .
Aus deiner Frage:
Das Gerät befindet sich in einem Auto und sollte die Beschleunigung messen, wenn das Auto langsamer wird (Bremse).
Verlangsamen ist jedoch nicht gleich Bremsen . Es gibt zwei mögliche Definitionen:
Dieser Unterschied ist sowohl bergauf als auch bergab signifikant. Bei Abfahrten erhöht sich die Geschwindigkeit des Autos, wenn die Bremsen nicht betätigt werden. Und an Steigungen kann sich die Geschwindigkeit auch ohne Bremsen verlangsamen.
Es stellt sich heraus, dass das Erkennen von 1. wesentlich schwieriger ist als 2. Definieren wir Achsen relativ zur Fahrzeugausrichtung: X: Vorne-Hinten-Richtung, Y: Links-Rechts-Richtung, Z: Oben-Unten-Richtung. Alle Achsen zum Auto ausgerichtet.
Lösungen:
Für Definition 1. ist der beste Ansatz, anzunehmen, dass sich die Geschwindigkeit des Autos nur in X-Richtung ändern kann. Dann ist die gemessene Beschleunigung a = g + v , wobei g die Beschleunigung aufgrund von Kräften ist, die der Schwerkraft entgegenwirken, und v die Beschleunigung aufgrund von Geschwindigkeitsänderungen. Sie können davon ausgehen, dass die Länge von g immer gleich 9,8 m/s² ist und dass v immer in X-Richtung liegt. Also (g_x + v_x, g_y, g_z) = (a_x, a_y, a_z) , was v_x = a_x - sqrt((9.8m/s²)² - g_y² - g_z²) ergibt . Dies funktioniert nur solange |v| kleiner als |g| ist, oder mit anderen Worten, die Beschleunigung aufgrund von Motor oder Bremsen ist kleiner als 1G. Sollte eine ziemlich sichere Annahme sein, es sei denn, Ihr Auto hat einen Raketenverstärker.
Für Definition 2. können Sie einfach die x-Achse direkt ablesen. Wenn das Auto nicht beschleunigt oder bremst, wirkt nur die Normalkraft der Fahrbahnoberfläche der Schwerkraft entgegen. Diese Kraft wirkt immer in z-Richtung relativ zum Auto, sodass sie den Messwert auf der x-Achse nicht ändert. Bremsen und Motor wirken nur in x-Richtung und sind in dieser Ablesung direkt sichtbar.
Es scheint, dass Sie ein "Overkill" -Gerät für Ihre Anwendung verwenden. Sie sollten ein Gerät verwenden, das nur die x- und y-Beschleunigung misst. Auf diese Weise hat die Neigung keinen messbaren Effekt. Obwohl die Gesamtbeschleunigung aufgrund der Neigung kleiner oder größer sein kann, misst das Gerät nur die x- und y-Komponenten der Beschleunigung auf der Ebene , auf der sich das Fahrzeug befindet.
PlasmaHH
Jumbojohn
Charansai
Herr Gerber
Jumbojohn
Chris H
Dmitri Grigorjew
Chris H
Heiße Licks
Benutzer253751
Herr Gerber