Beschleunigung, wenn das Gerät geneigt ist

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.

Hoffentlich hilft das

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.

Warum messen Sie nicht einfach, wenn keine interessante Beschleunigung auftritt, und verwenden dies als Vergleichspunkt?
Ich denke, das würde nicht funktionieren. Wenn das Gerät vollkommen ruhig steht, sind die X- und Y-Achse 0 g und die Z-Achse 1 g. Die Neigung bewirkt, dass die X-Achsenablesung je nach Neigung zwischen -1 g und 1 g liegt, wie ich bereits sagte. Das Bremsen bewirkt, dass der auf der X-Achse gemessene Wert abnimmt (negative Beschleunigung, sodass das Auto langsamer wird). Wenn das Gerät zum Beispiel schon nach unten geneigt ist, also etwas zwischen 0 g - (-1 g), wie kann ich feststellen, dass dies keine Beschleunigung durch Bremsen ist?
Warum berechnen Sie nicht die Gesamtbeschleunigung von drei Achsen statt nur der Y-Achse? Ich denke, das ist etwas grundlegendes, um alle drei Achsen zu berücksichtigen, oder!? So etwas
Das LSM6DSM hat kein Magnetometer. Woher haben Sie diese Informationen? Ich denke, Sie verwenden tatsächlich das X-NUCLEO-IKS01A1-Board von ST, das sowohl den LSM6DSM-Gyro- / Beschleunigungsmesser als auch einen LIS3MDL-Magnetometer enthält.
@MrGerber Danke, dass du das bemerkt hast. Es war mein Fehler, das Datenblatt des Sensors falsch gelesen zu haben.
Dies würde wahrscheinlich besser zu Physics.se passen, da die Physik wahrscheinlich der schwierigste Teil ist (und die meisten anderen kniffligen Sachen im Code erledigt werden).
@PlasmaHH Wenn das möglich wäre, könnte das OP den Beschleunigungsmesser wohl einfach so positionieren, dass überhaupt keine Neigung auftritt.
@DmitryGrigoryev und nur auf der Ebene fahren? Sie können kalibrieren, wenn der Motor nicht läuft
Ich werde anmerken, dass viele Beschleunigungsmesser nicht auf Frequenzen unter etwa 1 Hz ansprechen.
Beschleunigung ist ein Vektor, es sind keine drei separaten Teile. Messen Sie einfach die Richtung der Schwerkraft, wenn sich das Gerät nicht bewegt, und ziehen Sie sie dann von Ihren Messungen ab.
@immibis Ein Vektor im dreidimensionalen Raum wird als Vektorsumme von drei Vektoren auf jeder Achse (X, Y, Z) beschrieben. Im Ruhezustand beträgt die Summe der drei Messwerte des Beschleunigungssensors 1 g.

Antworten (7)

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

EIN = X 2 + Y 2 + Z 2

gibt dir die Gesamtbeschleunigung. Wenn es gleich G ist, sind Sie in Ruhe; andernfalls beschleunigen Sie, und EIN 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 EIN und G. Sie müssen einen Punkt auf der G-Kugel von subtrahieren EIN , 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.

Eigentlich habe ich noch nie mit Beschleunigungsmessern / Gyroskopen gearbeitet, daher ist das Gesamtbild nicht ganz klar, wie diese Dinge funktionieren, und Mathematik gehört nicht zu meinen stärksten Fähigkeiten, daher würde ich mich über Tipps / Erläuterungen freuen, danke.
Obwohl richtig, habe ich den starken Verdacht, dass die Fehlerspannen wichtig sein werden. Vergessen Sie auch nicht, dass die vertikale Beschleunigung die Kugel verzerrt (z. B. Bremsschwellen, Schlaglöcher), sodass Sie dies je nach Anwendung möglicherweise lösen müssen.
Aber die Schwerkraft ist nicht konstant, wenn man genau hinschaut . Während die höchste Straße in den USA $g$ nur um etwa 0,1 % reduziert, macht der Weg von den Polen zum Äquator einen Unterschied von 0,5 % aus. Auch die Geologie kann einen Unterschied in dieser Größenordnung ausmachen . Wahrscheinlich kein Game-Changer, aber vernachlässigen Sie nicht die Kalibrierung
Sie müssen nur den Radius der G-Kugel entsprechend Ihrem Standort ändern oder vor dem Einschalten des Motors messen. das ist kein Thema. Ich stimme zu, dass Unebenheiten wahrscheinlich neben Kufen und Lenkung gehandhabt werden müssen.
Kalibrieren vor dem Starten des Motors ist so eine Sache, an die ich gedacht habe. Die Kalibrierung musste jedoch schnell sein, wenn der Erbauer nicht der Endbenutzer ist.
Hoffentlich ändert sich G nicht allzu sehr, bevor es Zeit zum Auftanken ist!

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.

Wird die (gemessene) Erdbeschleunigung nicht in Richtung "oben" sein? Wie in, ist der Messwert, den Sie von dem in der Erdanziehungskraft ruhenden Gerät erhalten, derselbe, den Sie außerhalb eines Gravitationsfelds erhalten würden, aber in der (geräterelativen) "Aufwärts" -Richtung beschleunigen würden?
@psmears: Ja, du hast Recht. Die Kraft ist nach unten, aber die scheinbare Beschleunigung ist nach oben. Fest.

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 accum 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 accsind 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:

  1. Die Geschwindigkeit des Autos relativ zum Boden nimmt ab.
  2. Die Autobremsen werden angezogen.

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:

  1. 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.

  2. 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.