Beschleunigung bei eingeschaltetem Gerät


13

Ich arbeite derzeit an einem Gerät, das einen 3D-Beschleunigungsmesser (mit Skala + -2 g) und einen 3D-Gyroskop-Sensor (mit Skala + -250 g) verwendet.

Ich kann jeden möglichen Vektor (X, Y, Z) und deren Beschleunigung (gs) und Winkelrate (dps) sowie den Winkel ablesen, in dem sich das Gerät gerade befindet. Aber mein Problem ist, dass, wenn das Gerät auf Neigung ist (0 g, wenn keine 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 die Idee hoffentlich klärt.

Hoffentlich hilft das

Das Gerät befindet sich in einem Auto und sollte die Beschleunigung messen, wenn das Auto langsamer wird (Bremse). Befindet sich das Gerät jedoch bereits in der Neigungsposition, misst der Beschleunigungsmesser eine Beschleunigung, die durch die Neigung verursacht wird. Dies macht es schwierig, festzustellen, ob das Gerät tatsächlich eine Beschleunigung aufweist oder nur die Neigung, die die Beschleunigung verursacht.

X- und Y-Achse erzeugen 0 g und die Z-Achse ist 1 g, wenn das Gerät keine Neigung aufweist und sich auf einer ebenen Oberfläche befindet. Die Neigung bewirkt, dass der Messwert der X-Achse in Richtung 1 g geht, wenn die Neigung nach oben und -1 g nach unten gerichtet ist. Der Wert + -1g ist erreicht, wenn sich das Gerät in einem Winkel von 90 ° zur ursprünglichen Position befindet

Ich habe mir überlegt, wie ich die durch die Neigung verursachte Beschleunigung eliminieren und nur die tatsächliche Beschleunigung des Geräts messen kann, aber mit den folgenden Daten, die ich erzeugen kann, kann ich diesem Problem nicht aus dem Weg gehen.

Grundsätzlich denke ich, wenn ich nur die Beschleunigung der X-Achse (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 allzu schwer zu verstehen.


2
Warum messen Sie nicht einfach, wenn keine interessante Beschleunigung stattfindet, und verwenden dies als Vergleichspunkt?
PlasmaHH

Ich denke, das würde nicht funktionieren. Wenn das Gerät perfekt stillsteht, sind die X- und Y-Achse 0g und die Z-Achse 1g. Tilt bewirkt, dass der X-Achsen-Messwert je nach Tilt zwischen -1g und 1g liegt, wie ich bereits sagte. Durch das Bremsen nimmt der X-Achsen-Messwert ab (negative Beschleunigung, sodass das Auto langsamer wird). Wenn das Gerät zum Beispiel schon nach unten gekippt ist, liegt es also etwas zwischen 0g - (-1g) wie kann ich feststellen, dass dies keine Beschleunigung durch Bremsen ist?
Jumbojohn

Warum berechnen Sie nicht die Gesamtbeschleunigung von drei Achsen anstatt nur der Y-Achse? Ich denke, das ist etwas Grundlegendes, um alle drei Achsen richtig zu betrachten !? So etwas wie dieses
Charansai

Das LSM6DSM hat kein Magnetometer. Woher haben Sie diese Informationen? Ich glaube, Sie verwenden tatsächlich die X-NUCLEO-IKS01A1-Platine von ST, die sowohl über den LSM6DSM-Gyro / Beschleunigungsmesser als auch über einen LIS3MDL-Magnetometer verfügt.
MrGerber

@MrGerber Danke, dass Sie das bemerkt haben. Es war mein Fehler, weil ich das Datenblatt des Sensors falsch gelesen habe.
Jumbojohn

Antworten:


18

Nur eine Skizze einer Lösung.

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. Sie können sich die Beschleunigung in Ruhe oder in stetiger Bewegung als Punkt auf einer Kugel mit dem Radius 1G vorstellen. (Wenn Sie vollkommen horizontal sind, liegt dieser Punkt (0, 0, -1) dh direkt unter Ihnen).

Beschleunigung durch Bremsen verzerrt die Kugel selbst; Die Vektorsumme von X, Y, Z wird nicht länger 1G sein.

So

A=X2+Y.2+Z2

EIN

EINEIN , um eine (hoffentlich eindeutige) zu finden Lösungsvektor mit nur einer X-Komponente (vorwärts / rückwärts). Das ist deine Beschleunigung. (Ich lasse die Trigonometrie als einfaches Puzzle, hoffentlich ist die Idee klar).

Wenn Sie nicht auch drehen oder schleudern, benötigen Sie zur Sicherheit Eingaben von Lenkrad und ABS. das wird ein Datenfusionsproblem. Dieser Ansatz liefert eine Schätzung der Beschleunigung. Um diese Schätzung zu überprüfen und zu verfeinern, kombinieren Sie sie mit anderen (auch unzuverlässigen) Datenquellen, wie in Phil Frosts Antwort, und verwenden Sie einen Kalman-Filter.


Eigentlich habe ich noch nie mit Beschleunigungsmessern / Gyroskopen gearbeitet, daher ist das Gesamtbild nicht ganz klar, wie diese Dinge funktionieren, und Mathe ist keine meiner Stärken. Ich würde mich über Tipps / Erläuterungen freuen, danke.
Jumbojohn

Ich habe zwar den starken Verdacht, dass die Fehlerquoten wichtig sein werden. Vergessen Sie auch nicht, dass durch vertikale Beschleunigung die Kugel verzerrt wird (z. B. Geschwindigkeitsstöße, Schlaglöcher), sodass Sie diese je nach Anwendung möglicherweise lösen müssen.
Chris H

Aber die Schwerkraft ist nicht konstant, wenn Sie genau genug hinsehen . Während die höchste Straße in den USA nur $ g $ um etwa 0,1% reduziert, macht der Übergang von den Polen zum Äquator einen Unterschied von 0,5%. Auch die Geologie kann diese Größenordnung beeinflussen . Wahrscheinlich kein Game-Changer, aber vernachlässigen Sie nicht die Kalibrierung
Chris H

Sie müssen lediglich den Radius der G-Kugel entsprechend Ihrer Position ändern oder messen, bevor Sie den Motor einschalten. Das ist kein Problem. Ich bin damit einverstanden, dass Unebenheiten wahrscheinlich neben den Kufen und dem Lenken behandelt werden müssen.
Brian Drummond

Vor dem Starten des Motors zu kalibrieren, ist das, woran ich gedacht habe. Die Kalibrierung war jedoch schnell, wenn der Builder nicht der Endbenutzer ist.
Chris H

9

Ihr Hauptfehler besteht darin, die Beschleunigung nicht als einen einzigen Vektor zu behandeln. Wenn das Auto in Ruhe ist, beträgt dieser Vektor immer 1 g nach oben. Betrachten Sie nicht nur die X-Komponente der Rohdaten des Beschleunigungsmessers. Mach die echte Vektor-Mathematik.

Aber mein Problem ist, dass die Beschleunigung zwischen (abwärts) 0g -> - 1g oder zwischen (aufwärts) 0g -> 1g liegt, wenn das Gerät geneigt ist (0g, wenn keine Neigung vorliegt).

Nein, das ist der Punkt. Was Sie sagen, mag für die X-Komponente der Beschleunigungsmesser-Ausgabe zutreffen, gilt jedoch nicht für die Beschleunigung, wenn das Auto in Ruhe ist.

Die ideale gemessene Beschleunigung ist immer die tatsächliche Beschleunigung des Fahrzeugs (relativ zur Erde) plus die Beschleunigung von 1 g aufgrund der Schwerkraft. Letzteres ist immer in Aufwärtsrichtung. Wenn Sie die Ausrichtung des Fahrzeugs kennen, können Sie diese 1 g aufgrund der Schwerkraft abziehen, um die tatsächlich gesuchte Beschleunigung zu ermitteln.

Es ist zu beachten, dass bei solchen Ablesungen, insbesondere bei billigen MEMS-Sensoren, erhebliche Fehler auftreten. Sie sollten zwar in der Lage sein, eine gute Vorstellung von kurzfristigen Ereignissen wie starkem Beschleunigen oder starkem Bremsen zu bekommen, diese Daten sind jedoch bei weitem nicht gut genug, um eine Trägheitsnavigation für höchstens ein paar Sekunden durchzuführen.


Befindet sich die (gemessene) Erdbeschleunigung nicht in der Aufwärtsrichtung? Wie in der Abbildung ist der Messwert, den Sie von dem Gerät erhalten, das sich in der Schwerkraft der Erde in Ruhe befindet, derselbe wie der, den Sie außerhalb eines Gravitationsfeldes erhalten würden, jedoch in der (gerätebezogenen) Aufwärtsrichtung beschleunigt?
Psmears

@psmears: Ja, du hast recht. Die Kraft ist abwärts, aber die scheinbare Beschleunigung ist aufwärts. Fest.
Olin Lathrop

5

Wie andere Antworten angegeben haben, liefert der Beschleunigungsmesser einen dreidimensionalen Vektor, der die Summe der Schwerkraft und anderer Beschleunigung auf das Fahrzeug aufgrund des Motors, der Bremsen oder anderer auf das Fahrzeug einwirkender Kräfte ist. Ihr Ziel ist es dann, die Gravitationsbeschleunigung vom Ausgang des Beschleunigungsmessers zu subtrahieren, um die verbleibenden anderen Kräfte zu finden.

Für die beste Genauigkeit kann man nicht davon ausgehen, dass die Schwerkraft im Verhältnis zum Beschleunigungsmesser immer "unten" ist. Beispielsweise kann sich das Auto auf einem Hügel befinden. 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, die Sie haben, die die Orientierung des Autos verändern könnten, zu nehmen, dann einen gewichteten Durchschnitt der Messungen durchzuführen und diesen mit dem zu kombinieren, was Sie über die Physik wissen, die auf das Auto einwirkt, um eine probabilistische Schätzung des zu erhalten neue Ausrichtung des Autos und welcher Weg ist "down".

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 die Neigung des Autos messen, können Sie vorhersagen, dass sich der Schwerkraftvektor in Richtung des Hecks des Autos drehen wird. Kurzfristig, wenn das Auto gerade erst einen Hügel hinaufgefahren ist, kann dies dazu beitragen, dass der Schwerkraftvektor schnell die richtige Ausrichtung annimmt.

Sie können auch davon ausgehen, dass das Auto im Durchschnitt nicht bremst oder beschleunigt. Somit kann ein tiefpassgefiltertes Ausgangssignal des Beschleunigungsmessers in die Schätzung einfließen, welche Richtung "abwärts" ist. Dies liefert eine Langzeitmessung, die keiner Trägheitsdrift unterliegt.

Die Kombination der Daten von Beschleunigungsmesser und Gyroskop zur Schätzung der Schwerkraftrichtung liefert somit eine genauere Schätzung als jede Messung allein.

Sie können weiter einbeziehen, was Sie über den möglichen Betriebsbereich des Fahrzeugs wissen. Zum Beispiel kann das Auto keine zu steilen Hügel hinauf oder hinunter fahren. Wenn der Beschleunigungsmesser solche extremen Winkel anzeigt, können Sie ihn möglicherweise weniger belasten, vorausgesetzt, der größte Teil seiner Leistung wird durch Bremsen oder Motor, nicht durch Schwerkraft verursacht.

Wenn der Fahrer auf die Bremse tritt, verschiebt dies den Beschleunigungsvektor, und Sie können diesen von der geschätzten Abwärtskomponente abziehen.

Wenn Sie über GPS- und Kartendaten verfügen, können Sie auch eine Schätzung der Neigung des Autos basierend auf dem Standort vornehmen. Wenn Sie genaue Daten haben, wissen Sie möglicherweise genau, auf welcher Steigung sich das Fahrzeug befindet. Wenn Sie nur Daten mit geringer Genauigkeit haben, kann dies dennoch nützlich sein. Befindet sich das Auto beispielsweise in Kansas, sind Hügel unwahrscheinlich. Befindet sich das Auto in San Francisco, sind Hügel wahrscheinlicher und Sie können dem Beschleunigungsmesser weniger Gewicht geben.

Wenn Sie Daten zum Kraftstoffverbrauch und zur Geschwindigkeit haben und wissen, dass mehr Kraftstoff verbraucht wird, wenn Sie bergauf fahren, können Sie dies verwenden, um zu schätzen, dass das Auto auf der Grundlage der Kraftstoffeffizienz nach oben oder unten geneigt ist.

Und so weiter. Je mehr Sie wissen, desto besser kann Ihre Schätzung sein.


3

Sie benötigen einen Fusionsalgorithmus und verwenden 3D-Beschleunigungsmesser, 3D-Gyro und 3D-Magnetsensoren. Mit diesem Fusionsalgorithmus erhalten Sie die Fluglage, wobei die Erdschwerkraft als Referenz für die Ermittlung des Horizonts dient - Neigungs- / Gier- / Rollwinkel. Die beiden anderen Sensoren mag / gyro helfen dabei, die dynamische Bewegung herauszufiltern. Da sich Ihr Auto auch nach links / rechts dreht, wird die Zentrifugalkraft addiert. Sobald Sie die Haltung haben, können Sie den Gravitationsvektor subtrahieren und die resultierende Beschleunigung in allen drei Achsen zerlegen.


3

Als sehr grundlegende Methode können Sie einen Hochpassfilter verwenden, um den konstanten Teil der Beschleunigung (der der Schwerkraft entspricht) zu eliminieren und den variablen Teil, der auf die Fahrdynamik zurückzuführen ist, beizubehalten. Annehmenraw handelt sich um einen Vektor, der Ihre X-, Y- und Z-Messungen enthält, und es acchandelt sich 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];
}

Einzelkomponenten von acc sind immer noch von der Neigung betroffen, aber die Vektornorm ist nicht:

norm_acc = sqrt(acc[0]*acc[0] + acc[1]*acc[1] + acc[2]*acc[2]);

Natürlich ist diese Methode nicht sehr genau, insbesondere wenn sich die Neigung mit hoher Geschwindigkeit ändert. Dies ist ungefähr so ​​weit wie naive Mathematik Sie bekommt. Wenn Sie eine bessere Präzision benötigen, lernen Sie die Verwendung eines Kalman-Filters.


1

Die Antwort liegt in der genauen Definition von "Verlangsamung" .

Aus Ihrer Frage:

Das Gerät befindet sich in einem Auto und sollte die Beschleunigung messen, wenn das Auto langsamer wird (Bremse).

Allerdings ist nicht gleich Bremsen verlangsamt . Es gibt zwei mögliche Definitionen:

  1. Die Geschwindigkeit des Autos gegenüber dem Boden nimmt ab.
  2. Die Fahrzeugbremsen werden betätigt.

Dieser Unterschied ist bei Steigungen und Gefällen signifikant. Bei Abfahrten erhöht sich die Geschwindigkeit des Fahrzeugs, wenn die Bremsen nicht betätigt werden. Bei Steigungen kann sich die Geschwindigkeit verlangsamen, auch wenn nicht gebremst wird.

Es stellt sich heraus, dass das Erkennen von 1. deutlich schwieriger ist als 2. Definieren wir die Achsen in Bezug auf die 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 eine Beschleunigung aufgrund von Kräften ist, die der Schwerkraft entgegenwirken, und v eine Beschleunigung aufgrund einer Geschwindigkeitsänderung ist. Sie können annehmen, dass die Länge von g immer 9,8 m / s² beträgt und dass v immer in X-Richtung ist. Also (g_x + v_x, g_y, g_z) = (a_x, a_y, a_z) , was v_x = a_x - sqrt ((9,8 m / s² )² - g_y² - g_z²) ergibt . Dies funktioniert nur solange | v | ist kleiner als | g |oder mit anderen Worten, die Beschleunigung aufgrund von Motor oder Bremsen beträgt weniger als 1 G. Sollte eine ziemlich sichere Annahme sein, es sei denn, Ihr Auto hat einen Raketenverstärker.

  2. Für die Definition 2. können Sie einfach die X-Achse direkt ablesen. Wenn das Auto nicht beschleunigt oder bremst, ist die einzige Schwerkraft, die auf es einwirkt, die Normalkraft der Fahrbahn. Diese Kraft ist immer in der z-Richtung relativ zum Auto, so dass sich der x-Achsen-Messwert nicht ändert. Bremsen und Motor wirken nur in x-Richtung und sind in dieser Ablesung direkt sichtbar.


0

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 in der Ebene, in der sich das Fahrzeug befindet.

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.