okay als ich danach gegoogelt hatte kam nur beschleunigungssensor raus, sorry das detail ist mir entgangen
okay als ich danach gegoogelt hatte kam nur beschleunigungssensor raus, sorry das detail ist mir entgangen
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Zum Raspi kann ich nix sagen, aber für den Sensor gibt es, für Arduino, die Kalman-Bibiliothek.
Hier z.B. gibts dazu was.
Grüssle, Sly
..dem Inschenör ist nix zu schwör..
Danke, habe ich mir mal durchgelesen und man kann das ganze Wohl auch recht gut annähern über den Complementary Filter angle = 0.98 *(angle+gyro*dt) + 0.02*acc
Aber wie bekomme ich allgemein erst einmal den Winkel?
Einfach die Differenz des Gyro Z-Achse zum Zeitpunkt 0 und Zeitpunkt 1?
In Prinzip, Ja. Aber.... Erst muss der Gyro "kalibriert" werden. Bei Stilstand soll so eine Gyro auch Drehrate 0 ausgeben, tut es aber nicht. Da sind "offsets" anwesend, und damit fangt die erste Fehler an. Kalibrieren aber ist einfach : Drehrate erfassen bei Stillstand, und diesen Wert is ihre offset. Ihre Berechnung wird dan : (Angle + (gyro-offset)*dt
Den Winkel bei Anfang wird einfach 0 genommen, oder wen ein Kompass forhanden ist, auch mal die Himmelrichtung. Ihre "dt" (samplezeit) muss auch relatif kurz sein : 10 ms (100 Hz) ist moglich bei diese MPU6050.
Das zweite teil mit den "acc" ist nicht so einfach : bei drehen um eine Senkrechte, andert sich die acc nicht, keine von 3 Achsen !! Nur ein Kompass kann hier weiter helfen, ist auch relatif complex. Suche auch mal nach IMU (Kris Winer algoritme)
Du solltest ein Magnetometer baustein verwenden. Leider is das MPU6050 kein 9-achse IMU. Diese kan die Richtung gegen das Lokales (Erd-)Magnetisches Feld bestimmen. Leider ist das nicht immer ein Ortogonales Achse-system gerade zu das Raum wo dein Robot sich befindet. Ferromagnetische materialen in die Nähe (Stahl/Eisen) oder Elektrische Spüle konnen die gemessen Richtung ändern.
Ich habe mal versucht den ersten Teil der Formel umzusetzen.
Hier mal mein bisheriger code. Allerdings ändert sich der WInkel selbst im Ruhezustand stark, da der Winkkel-Offset nicht immer 0 ist
Ich nutze folgende Bibliothek um die Sensorwerte abzufragen https://github.com/Tijndagamer/mpu60...050/mpu6050.py
Code:#!/usr/bin/python import time from mpu6050 import mpu6050 mpu = mpu6050(0x68) gyro_data = mpu.get_gyro_data() angle = 0 dt = 0 offset = gyro_data['z'] while 1: gyro_data = mpu.get_gyro_data() gyroZ = gyro_data['z'] angle = angle + (gyroZ-offset)*dt print gyroZ dt += 0.01 time.sleep(0.01)
Sie sind auf den guten Weg, aber siehe ich 2 Fehler :
1. In welche Einheit wird ausgelesen ? 16 bit, oder schon in °/sekunde, oder rad/sekunde.... Abhangig von setup von MPU, kan es sein das 16 bit 250°/sek darstellen, oder 500° oder.. Sag mal, nach umrechnen in einer float bekommen wir das dan in °/s.
2. Ihre dt bleibt immer 0.01, da wird nicht summiert !! Zeitinterval ist doch immer gleich !
3. Versuch auch noch mit timer zu arbeiten, time.sleep ist blockierend.
Danke
1. Es sind °/sekunde
2. Da lag der Fehler, vielen dank. jetzt bekomme ich einigermaßen einen brauchbaren Winkel
3. Das werde eich mir einmal anschauen wie man damit arbeitet.
Lesezeichen