Forum: Mikrocontroller und Digitale Elektronik IMU Positionsbestimmung mit Mikrocontroller


von Markus (Gast)


Lesenswert?

Heutzutage gibt es ja sehr günstige Beschleunigungssensoren wie z.B. die 
MPU-6050:

https://www.sparkfun.com/products/11028

Gibt es irgendwo ein Code-Beispiel in C mit dem man die Position 
bestimmen kann? Kennt jemand ein gut lesbares, übersichtliches Programm?

von Michael U. (amiga)


Lesenswert?

Hallo,

was heißt bei Dir "Position"?
Ich werde die 28500 Google-Treffer bei
mpu6050 example code
nicht sichten...

Gruß aus Berlin
Michael

von Pandur S. (jetztnicht)


Lesenswert?

Die Position bedeutet zweimaliges Integrieren. Vergiss das mal.
Das Programm dazu ist dafuer maximal trivial

Neue Pos:= Alte Pos + Messwert;

von Georg (Gast)


Lesenswert?

Oh D. schrieb:
> Die Position bedeutet zweimaliges Integrieren

Dazu muss man aber erstmal eine Startposition haben. Ich fürchte, das 
ist für den TO keineswegs trivial, es hört sich so an als will er 
einschalten und die Position ablesen.

Georg

von Horst S. (Gast)


Lesenswert?

Kurze Frage:
Nach meiner Kenntnis werden die Beschleunigungssensoren (Rauschen) in 
den IMU-Bausteinen als Unterstützung für die Gyros (Drift) zur 
Lagekontrolle verwendet. Allerdings ist die kartesische 
Positionsbestimmung über Beschleunigungssensorik ziemlich buggy.

Ist das nicht mehr so? Geht das mittlerweile besser?

von Markus (Gast)


Lesenswert?

>Neue Pos:= Alte Pos + Messwert;

So einfach ist es nicht. Nicht umsonst haben die IMUs außer dem 
Bechleunigungssensor auch einen Drehratensensor. Wenn sich das dreht, 
muss die Rotationsrichtung ebenfalls bestimmt werden und das 
Bezugssystem für die Beschleunigungsintegration über die 3D Drehung des 
Bezugssystems korrigiert werden. Weil das Ganze einiges an 
Matrixmultiplikation und Vektorrechnung benötigt, suche ich nach einem 
fertigen Code-Beispiel, bevor ich das alles selber implementiere.

von Pandur S. (jetztnicht)


Lesenswert?

Dann nimm doch als Ausgangsposition einfach Null (0,0,0). Und falls eine 
Bewegung sein soll, nur eine translatorische.  Also lass den Sensor auf 
dem tisch.
Wohin bewegt er sich ?

Daraus ist ersichtlich die zweimalige Integration geht sowieso nicht. 
Was man machen kann, ist zusammen mit einer Hoeheninformation per 
Barometersensor und einer Positionsinformation per GPS etwas zu rechnen.

Den Doppelintegrator muss man kontinuierlich anpassen, dh neu 
referenzieren.

Nicht nur muss man den Beschleunigungssensor dauernd neu referenzieren, 
sondern auch den Drehratensensor, mit einem Kompass.

Der Drehratensensor auf dem Tisch misst dopplet integriert auch eine 
zufaellige Drehung.

von Markus (Gast)


Lesenswert?

Georg schrub:
>> Die Position bedeutet zweimaliges Integrieren
>Dazu muss man aber erstmal eine Startposition haben. Ich fürchte, das
>ist für den TO keineswegs trivial, es hört sich so an als will er
>einschalten und die Position ablesen.

Ja, zugebenermaßen war meine Fragestellung etwas unpräzisse. Aber wenn 
Du den Thread weiter verfolgst, siehst Du, dass es dem ein oder anderen 
gelingt, praxisgerecht zu absrahieren. Ich weiß, das ist nicht jedem 
gegeben.

Im ersten Schritte ist mir zwar die Genauigkeit nicht so wichtig, es 
gibt aber interessante Ergebnisse dazu:

"Accurate Position Tracking Using Inertial Measurement Units"

http://www.pnicorp.com/wp-content/uploads/Accurate-PositionTracking-Using-IMUs.pdf

von Georg (Gast)


Lesenswert?

Markus schrieb:
> Weil das Ganze einiges an
> Matrixmultiplikation und Vektorrechnung benötigt, suche ich nach einem
> fertigen Code-Beispiel, bevor ich das alles selber implementiere.

Bevor du was implementierst, solltest du zuerst klären, ob die 
Genauigkeit des Sensors auch nur annähernd ausreicht für ein 
Inertialsystem. Ich glaube eher, dass die Position, die durch 
Integrationen errechnest, innnerhalb von Minuten völlig unbrauchbar 
wird.

Inertialsysteme waren früher mal für Interkontinentalflüge üblich, aber 
auf Basis von Laserkreiseln o.ä., jedenfalls Sensoren die um 
Grössenordnungen präziser waren als ein MEMS-Sensor, und trotzdem sind 
sie ausgestorben, seit es GPS gibt. Zumindest fliegt niemand mehr 
danach.

Was du dir vorstellst gibt es möglicherweise noch in 
Interkontinentalraketen, aber das reicht auch nur um eine Grossstadt so 
ungefähr zu treffen. In Cruise Missiles erfolgt ständig ein Abgleich mit 
gespeicherten Daten des Geländes, sonst kämen die auch nicht ans Ziel.

Georg

von Pandur S. (jetztnicht)


Lesenswert?

Naja, die Koordinatentransformationen fuer Translation und Rotation sind 
eine Sache, die Rekalibration mit positions- und 
nichtpositions-Sensordaten eine Andere.

von Markus (Gast)


Lesenswert?

>Inertialsysteme waren früher mal für Interkontinentalflüge üblich, aber
>auf Basis von Laserkreiseln o.ä., jedenfalls Sensoren die um
>Grössenordnungen präziser waren als ein MEMS-Sensor, und trotzdem sind
>sie ausgestorben, seit es GPS gibt. Zumindest fliegt niemand mehr
>danach.

Ausgestorben sind sie nicht. Northrop Grumman verkauft immer noch viele 
Laserkreisel für die Flugnavigation.

von Markus (Gast)


Lesenswert?

Oh Doch (jetztnicht)
>Naja, die Koordinatentransformationen fuer Translation und Rotation sind
>eine Sache, die Rekalibration mit positions- und
>nichtpositions-Sensordaten eine Andere.

Klar, die IMUs triften. Ich erinnere mich aber an eine Demo auf der 
Embedded Systems vor ca. 4 Jahren; bei der man mit einer IMU in der 
Halle rumlaufen konnte und die danach am Stand wieder recht genau die 
Postion angezeigt hat.

von Max M. (max_m1)


Lesenswert?

Was glaubt ihr wie Uboote navigieren?

GPS unter Wasser ? :D

von Markus (Gast)


Lesenswert?

Nun, weiter mit der ursprünglichen Frage:
>Gibt es irgendwo ein Code-Beispiel in C mit dem man die Position
>bestimmen kann? Kennt jemand ein gut lesbares, übersichtliches Programm?

https://github.com/reckonMe/reckonMe

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.