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?
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
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?
>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.
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.
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
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
Naja, die Koordinatentransformationen fuer Translation und Rotation sind
eine Sache, die Rekalibration mit positions- und
nichtpositions-Sensordaten eine Andere.
>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.
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.
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