MPU6050-Sensorfusing

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • MPU6050-Sensorfusing

      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
      Dateien
    • Das ist ein sehr interessantes Thema.
      Der MPU6050 kann seine Sensorwerte intern so verarbeiten, dass ein sauberes Signal für die Lage im Raum entsteht.
      Ich habe hier den MPU6500, der genau das gleiche kann, der Sensor im Video ist so einer.

      Im Video das Teapot-Ergebnis, der Atmega2560 läuft mit der obigen Software von rakohr.

      Welche Anwendung könnte man daraus entwickeln?

    • Gefällt mir auch gut, eine Anwendung wäre ein spinnenförmiger Laufroboter. Die Beine könnten auf unterschiedlichen Höhen aufsetzen, der Körper würde immer waagrecht bleiben.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------