Hallo Zusammen,
Michael hatte ja hier
bascomforum.de/index.php?threa…ighlight=mpu6050#post1647
vor einiger Zeit gezeigt, wie man die Beschleunigungen und Drehraten aus einem MPU6050 auslesen kann.
Nun besitzen Accelerometer und Gyroscope einzeln betrachtet verschiedene Nachteile. Accelerometer z.B. können die Lage im Raum nur genau bestimmen, wenn sie relativ ruhig im Raum stehen, jede äußere Erschütterung beeinflusst sehr stark das Messergebnis. Gyroscope hingegen besitzen z.B. eine Sensordrift, d.h. auch wenn sich der Sensor absolut bewegungslos im Raum befindet, werden sich die ermittelten Werte mit der Zeit verändern (wegdriften). Die Nachteile der einzelnen Sensoren kann man umgehen indem man ihre Messwerte miteinander verrechnet, fusioniert. Das kann man mit ein paar „komplizierteren“ Berechnungen von Hand machen. Der MPU6050 besitzt neben den eigentlichen Sensoren auch einen „Digital Motion Processor“ (DMP). Dieser nimmt einen die Sensorfusion der Accelerometer- und Gyroscopwerte quasi on Board ab.
Leider ist die Nutzung des DMP in den Datenblättern nur sehr unzureichend dokumentiert. Aber in C bzw. Arduino gibt es hierzu einige Beispiele. Ein Video zur Anschauung ist z.B. hier zu finden…
youtube.com/watch?v=nlXqIe9-R7s
Der Arduino Code und auch das Processing Script zur Visualisierung am PC ist im Github im unter dem Video angegeben Link verfügbar. Dort finden sich noch viele weitere Libs, die für dieses Projekt irrelevant sind.
Der Pfad zu dem Code auf den ich mich im Folgenden beziehen möchte lautet… i2cdevlib / Arduino / MPU6050 / examples / MPU6050_DMP6 / so wie es auch im Video erklärt ist.
Da ich in Bascom nichts vergleichbares finden konnte, hab ich mich, aus purem Interesse der Umsetzbarkeit, mal ran gemacht und den Arduino Code quick and dirty nach Bascom übersetzt. Der Code macht nichts weiter als massenweise Registerwerte zu setzen um den MPU6050 richtig zu initialisieren um letztendlich die fusionierten Werte aus dem DMP zu erhalten. Diese Winkelwerte werden dann auf der UART ausgegeben (getrennt nach High- und Lowbyte als Character). Zur Visualisierung kann das Processing Script wie im Youtube Video zu sehen und im Link zu finden ist verwendet werden. Hierzu wäre dann natürlich die Processing Software(processing.org/download/ ) zu installieren und dort wie ebenfalls angegeben die Toxi-Libs eingebunden werden.
Für Interessierte stell ich den Code nachfolgend zur Verfügung, vielleicht kann das ja mal jemand gebrauchen.
Viel Spaß…
rakohr
Michael hatte ja hier
bascomforum.de/index.php?threa…ighlight=mpu6050#post1647
vor einiger Zeit gezeigt, wie man die Beschleunigungen und Drehraten aus einem MPU6050 auslesen kann.
Nun besitzen Accelerometer und Gyroscope einzeln betrachtet verschiedene Nachteile. Accelerometer z.B. können die Lage im Raum nur genau bestimmen, wenn sie relativ ruhig im Raum stehen, jede äußere Erschütterung beeinflusst sehr stark das Messergebnis. Gyroscope hingegen besitzen z.B. eine Sensordrift, d.h. auch wenn sich der Sensor absolut bewegungslos im Raum befindet, werden sich die ermittelten Werte mit der Zeit verändern (wegdriften). Die Nachteile der einzelnen Sensoren kann man umgehen indem man ihre Messwerte miteinander verrechnet, fusioniert. Das kann man mit ein paar „komplizierteren“ Berechnungen von Hand machen. Der MPU6050 besitzt neben den eigentlichen Sensoren auch einen „Digital Motion Processor“ (DMP). Dieser nimmt einen die Sensorfusion der Accelerometer- und Gyroscopwerte quasi on Board ab.
Leider ist die Nutzung des DMP in den Datenblättern nur sehr unzureichend dokumentiert. Aber in C bzw. Arduino gibt es hierzu einige Beispiele. Ein Video zur Anschauung ist z.B. hier zu finden…
youtube.com/watch?v=nlXqIe9-R7s
Der Arduino Code und auch das Processing Script zur Visualisierung am PC ist im Github im unter dem Video angegeben Link verfügbar. Dort finden sich noch viele weitere Libs, die für dieses Projekt irrelevant sind.
Der Pfad zu dem Code auf den ich mich im Folgenden beziehen möchte lautet… i2cdevlib / Arduino / MPU6050 / examples / MPU6050_DMP6 / so wie es auch im Video erklärt ist.
Da ich in Bascom nichts vergleichbares finden konnte, hab ich mich, aus purem Interesse der Umsetzbarkeit, mal ran gemacht und den Arduino Code quick and dirty nach Bascom übersetzt. Der Code macht nichts weiter als massenweise Registerwerte zu setzen um den MPU6050 richtig zu initialisieren um letztendlich die fusionierten Werte aus dem DMP zu erhalten. Diese Winkelwerte werden dann auf der UART ausgegeben (getrennt nach High- und Lowbyte als Character). Zur Visualisierung kann das Processing Script wie im Youtube Video zu sehen und im Link zu finden ist verwendet werden. Hierzu wäre dann natürlich die Processing Software(processing.org/download/ ) zu installieren und dort wie ebenfalls angegeben die Toxi-Libs eingebunden werden.
Für Interessierte stell ich den Code nachfolgend zur Verfügung, vielleicht kann das ja mal jemand gebrauchen.
Viel Spaß…
rakohr