Hallo,
Ich habe ein MPU9250 das einen Gyro, Magnet und Beschleunigungssensor hat (alle in 3 Achsen Ausführung). Zum ansprechen verwende ich die FaBo9Axis_MPU9250 library.
Werte messen und Ausgeben funktioniert also. Da ich das Board als Kompassensor verwenden möchte muss ich aus den einzelnen Werten für die X, Y und Z Achsen einen Winkel berechnen. Das Problem dabei ist, dass der Sensor mit der einfachen Methode die nur die X und Y Achse des Magnetometers verwendet, falsche Werte liefert, sobalt der Sensor nicht mehr gerade ist.
Ich habe schon einiger Versuche unternommen das zu Korrigieren aber meine Werte sind alles andere als richtig.
Hier ist mein letzter Versuch:
import math
import FaBo9Axis_MPU9250
mpu = FaBo9Axis_MPU9250.MPU9250()
mpu.configAK8963(0x02, 0x01) # konfigurert den Sensor
def getHeading():
accel = mpu.readAccel()
magnet = mpu.readMagnet()
az = accel['z']
ax = accel['x']
ay = accel['y']
roll = math.asin(ay)
pitch = math.asin(ax)
cosRoll = math.cos(roll)
sinRoll = math.sin(roll)
cosPitch = math.cos(pitch)
sinPitch = math.sin(pitch)
if(roll > 0.78 or roll < -0.78 or pitch > 0.78 or pitch < -0.78):
return -1000
xh = magnet['x'] * cosPitch + magnet['z'] * sinPitch
yh = magnet['x'] ' sinRoll * sinPitch + magnet['y'] * cosRoll - magnet['z'] * sinRoll * cosPitch
heading = math.atan(yh/xh)
return heading
ausrichtung = getHeading()
if ausrichtung == -1000:
magnet = mpu.readMagnet()
ausrichtung = math.atan(magnet['y']/magnet['x'])
ausrichtung += 0.069 # Magnetische Deklination (Fehler im Magnetfeld)
if ausrichtung < 0:
ausrichtung += 2 * math.pi
if ausrichtung > 2 * math.pi:
ausrichtung -= 2 * math.pi
ausrichtungGrad = math.degrees(ausrichtung)
pritn("Ausrichtung: " + str(ausrichtungGrad))
Alles anzeigen
Wie schon oben geschrieben ergeben die Werte keinen Sinn egal mit welcher Methode ich es versuche.
Hoffentlich hat das schon von euch schon jemand gemacht und weiß wie das richtig geht mir fällt nichts mehr ein.