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?
Hallo, was heißt bei Dir "Position"? Ich werde die 28500 Google-Treffer bei mpu6050 example code nicht sichten... Gruß aus Berlin Michael
Die Position bedeutet zweimaliges Integrieren. Vergiss das mal. Das Programm dazu ist dafuer maximal trivial Neue Pos:= Alte Pos + Messwert;
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.
Was glaubt ihr wie Uboote navigieren? GPS unter Wasser ? :D
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.