IMU MPU6050 Funktion prüfen

gregor

New member
Moin zusammen!
Ich versuche mich langsam an die Wiederinbetriebnahme des Mähers heran zu tasten. Samt Umstieg von Azurit auf Sunray.
Odometrie funktioniert.
ESP32 mit WLAN funktioniert, BT irgendwie noch nicht...
Die uBlox Base hat sich binnen einer Woche auf 3cm genau eingemessen und ich hab diese Position im Base-Empfänger hinterlegt. Sie sendet alle 1/4sek zum Rover. Der Rover hat gelegentlich auch mal einen Fix. Aber nach 2m bleibt er wieder stehen, weil er keine Position mehr hat.
Hier würde ich nun gern die IMU in Betrieb setzen. Nachdem ich feststellte, das die GY801 nicht mehr unterstützt wird, hab ich nen MPU6050 geordert und eingebaut. Diese wird auch erkannt und zur Kalibration wird 15x gepiepst. Nun wüsste ich aber ziemlich gerne, ob die auch funktioniert... Mit der Sunray-App habe ich scheinbar nicht so ohne weiteres die Möglichkeit, alle Sensoren auf Funktion zu prüfen.. Das IMU-Testprogramm imuahrs.ino ist nur für den AtMega und die Sensoren ADXL345B, HMC5883L, L3G4200D gebaut...
Gibt es ein kleines separates Testprogramm für die MPU6050 (auf dem Ardumower)? Bzw. wo könnte ich in der Sunray ein print(x,y,z) einbauen? Wie heißen die Variablen, wie oft wird die IMU abgefragt?
VG, Gregor
 
Ich kann mich irren, schon etwas länger her, aber die IMU Ausgabe bekommst du direkt im seriellen Monitor ausgegeben, wenn der Mower die Winkeländerung erfährt. Versuch mal den Mower zu kippen wenn du mit den seriellen Monitor dran bist, ich meine dann kommen sofort die Werte

Vergiss es, das habe mit irgendeinem Sketch gemacht, nicht mit Sunray
 
Die uBlox Base hat sich binnen einer Woche auf 3cm genau eingemessen und ich hab diese Position im Base-Empfänger hinterlegt. Sie sendet alle 1/4sek zum Rover.
Ich hab diese Jahr für mich festgestellt, dass es gar nicht nötig ist, die Korrekturdaten mit einer so hohen Rate zu senden. Mit einer Rate von 0,5 hat es die Base ganz schön ausgelastet und teilweise sogar überlastet, so dass gar keine Daten mehr kamen. Sende derzeit nur alle 2 Sekunden, das ist vollkommen ausreichend.
 
-----------------------------------------------------
UBLOX::begin serial
using gps driver: UBLOX
trying to connect to ublox f9p...
NOTE: if GPS is not responding either set 'GPS_CONFIG=false' in config.h or perform GPS wire fix (see Wiki)
trying baud 115200
ERROR: GPS receiver is not responding
trying baud 38400
GPS receiver found!
ublox f9p: sending GPS rover configuration...
idx=0...OK
idx=1...OK
idx=2...OK
config sent successfully
sizeof Point=4
map dump - mapCRC=0
points:
perimeter pts: 0
exclusion pts: 0
exclusions: 0
dock pts: 0
mow pts: 0
free pts: 0
mowPointsIdx=0 dockPointsIdx=0 freePointsIdx=0 wayMode=3
probing for ESP8266 (NOTE: will fail for ESP32)...
WIFI (ESP8266) not found! If you have ESP8266 and the problem persist, you may need to flash your ESP to firmware 2.2.1
MPU ID=0x68
MPU6050/9150 found
using imu driver: MpuDriver

WARN: PID unmet cycle time Ta=5.41 TaMax=0.07
WARN: PID unmet cycle time Ta=5.41 TaMax=0.07
batTemp=0.0 cpuTemp=0
==> changeOp:ImuCalibration->Idle
IMU gyro calibration (robot must be static)... 1
[Ardumower steht völlig ruhig]

0:0:12 ctlDur=0.00 op=ImuCalibration->Idle freem=81815 sp=2 bat=0.00(0.00) chg=0.00(0.00) tg=0.00,0.00 x=0.00 y=0.00 delta=0.00 tow=203670000 lon=0.00000000 lat=0.00000000 h=0.0 n=0.00 e=0.00 d=0.00 sol=0 age=0.00
ublox chka error, msgclass=1, msgid=43, msglen=18: 4F!=10
IMU gyro calibration (robot must be static)... 2
IMU gyro calibration (robot must be static)... 3
IMU gyro calibration (robot must be static)... 4
IMU gyro calibration (robot must be static)... 5
0:0:17 ctlDur=0.02 op=ImuCalibration->Idle freem=81815 sp=2 bat=26.76(0.00) chg=0.03(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.00 tow=203676200 lon=0.00000000 lat=0.00000000 h=0.0 n=0.00 e=0.00 d=0.00 sol=0 age=1.14
IMU gyro calibration (robot must be static)... 6
IMU gyro calibration (robot must be static)... 7
IMU gyro calibration (robot must be static)... 8
IMU gyro calibration (robot must be static)... 9
IMU gyro calibration (robot must be static)... 10
0:0:22 ctlDur=0.02 op=ImuCalibration->Idle freem=81815 sp=2 bat=26.78(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.00 tow=203681200 lon=0.00000000 lat=0.00000000 h=0.0 n=0.00 e=0.00 d=0.00 sol=0 age=1.09
IMU gyro calibration (robot must be static)... 11
IMU gyro calibration (robot must be static)... 12
IMU gyro calibration (robot must be static)... 13
IMU gyro calibration (robot must be static)... 14
IMU gyro calibration (robot must be static)... 15
==> changeOp:Idle
OP_IDLE
IMU tilt: ypr=-35.69,-44.80,115.98 rollChange=110.18 pitchChange=-42.56
[Ardumower steht die ganze Zeit völlig ruhig]

0:0:27 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.79(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=-0.76 tow=203686200 lon=0.00000000 lat=0.00000000 h=0.0 n=0.00 e=0.00 d=0.00 sol=0 age=0.84
0:0:32 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.75 tow=203691200 lon=0.00000000 lat=0.00000000 h=0.0 n=0.00 e=0.00 d=0.00 sol=0 age=0.29
0:0:37 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.81(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.79 tow=203696200 lon=0.00000000 lat=0.00000000 h=0.0 n=0.00 e=0.00 d=0.00 sol=0 age=0.74
0:0:42 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.81(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.79 tow=203701200 lon=-49.99598749 lat=59.82961312 h=15949.4 n=0.00 e=0.00 d=0.00 sol=0 age=0.49
0:0:47 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.81(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.81 tow=203706200 lon=-58.69070706 lat=53.47577495 h=13768.8 n=0.00 e=0.00 d=0.00 sol=0 age=0.72
0:0:52 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.81(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.80 tow=203711200 lon=-59.13237247 lat=53.58124583 h=13806.5 n=0.00 e=0.00 d=0.00 sol=0 age=0.21
0:0:57 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.81(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.80 tow=203716200 lon=-58.50262758 lat=53.01024971 h=13601.8 n=0.00 e=0.00 d=0.00 sol=0 age=0.43
0:1:2 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.81(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.79 tow=203721200 lon=-58.55625459 lat=52.98905781 h=13594.2 n=0.00 e=0.00 d=0.00 sol=0 age=0.60
0:1:7 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.80 tow=203726200 lon=-58.98182375 lat=53.09231233 h=13631.3 n=0.00 e=0.00 d=0.00 sol=0 age=0.31
[Ardumower wird ca 30° hinten angehoben]
batTemp=0.0 cpuTemp=0
0:1:12 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.41 tow=203731200 lon=-57.61375267 lat=52.44385393 h=13397.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.95
0:1:17 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.40 tow=203736200 lon=-58.15368358 lat=53.20203333 h=13670.7 n=0.00 e=0.00 d=0.00 sol=0 age=0.27
0:1:22 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.38 tow=203741200 lon=-58.89119647 lat=53.23407954 h=13682.2 n=0.00 e=0.00 d=0.00 sol=0 age=0.23
0:1:27 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.64 tow=203746200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.86
[Ardumower wird auf 90° angehoben]
0:1:32 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.52 tow=203751200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.84
0:1:37 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.63 tow=203756200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.75
IMU tilt: ypr=2.99,-82.83,63.34 rollChange=23.02 pitchChange=2.38
[Ardumower wird wieder abgestellt = 0°]

0:1:42 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.45 tow=203761200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.45
0:1:47 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.48 tow=203766200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.24
0:1:52 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.03(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.80 tow=203771200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.16
0:1:57 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.81 tow=203776200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.32
[Ardumower wird nach rechts gedreht]
IMU tilt: ypr=108.52,-85.41,-43.46 rollChange=-59.67 pitchChange=0.97

0:2:2 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=1.02 tow=203781200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.03
0:2:7 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.84 tow=203786200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.01
batTemp=0.0 cpuTemp=0
0:2:12 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.83 tow=203791200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=1.37
0:2:17 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.05(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.84 tow=203796200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.18
0:2:22 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.84 tow=203801200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.12
[Ardumower wird wieder nach links gedreht]
IMU tilt: ypr=1.19,-82.40,64.76 rollChange=44.59 pitchChange=3.95

0:2:27 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.80(0.00) chg=0.03(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.73 tow=203806200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.28
0:2:32 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.79(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.74 tow=203811200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.01
0:2:37 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.79(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.81 tow=203816200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.88
0:2:42 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.79(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.81 tow=203821200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.12
0:2:47 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.79(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.83 tow=203826200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.33
0:2:52 ctlDur=0.02 op=Idle freem=81815 sp=2 bat=26.79(0.00) chg=0.04(0.05) tg=0.00,0.00 x=0.00 y=0.00 delta=0.81 tow=203831200 lon=x.x9194543 lat=xx.x3623484 h=338.6 n=0.00 e=0.00 d=0.00 sol=0 age=0.99

[/ISPOILER]
 
Das Anheben ist glaube ich noch recht neu. Was aber schon in älteren Versionen drin ist, ist das Abschalten über Pitch und Roll. Die Werte sind aber ziemlich groß, ich glaube, man kann den Mower fast auf die Seite legen, bevor er abschaltet.
Gehen die Richtungen denn?
 
Einfacher IMU-Test: Roboter in die Hand nehmen (so dass er keinen Kontakt zum Boden hat) und in der Luft um die Hochachse (Yaw) drehen. Wenn das Roboter-Symbol (die Kerbe zeigt zur Roboter-Vorderseite) in der App die Drehung ebenfalls durchführt funktioniert alles einwandfrei.

 
Ich habe aus der Arduino-Bibliothek "Adafruit MPU6050" das Example "plotter" verwendet und habe Darstellungen gesehen, die mir nicht so ganz eingängig waren.
AccelY von -9,6 bis +10,2 --> okay
AccelX von +23,6 bis +24,7 --> hä?
AccelZ von +2,3 bis +2,5 --> hä?
GyroY konstant bei -0,74 bis 0,75G
GyroX stärkster Ausschlag bei Bewegung entlang der Z-Achse mit Offset von -0,1G
GyroZ stärkster Ausschlag bei Bewegung entlang der X-Achse mit Offset von -0,6G

Ich habe noch ein neues Modul gekauft, dass mir zumindest brauchbare Werte liefert (ich hatte es noch nicht im ArduMower eingebaut, ich hatte noch Angst vor der "kalibrierung")

Insbesondere Unterscheiden sich die Werte für den "Factory Trim", der eben auch im Rahmen einer Selbstkalibrierung gesetzt werden kann erheblich. Kann das der Fehler für die "komischen" Werte sein?

Neues Modul:
MPU6050 Registers
Das Datenbyte in Register 13 war: 0x4E
Das Datenbyte in Register 14 war: 0x50
Das Datenbyte in Register 15 war: 0xB4
Das Datenbyte in Register 16 war: 0x48
Das Datenbyte in Register 17-106 war: 0x00
Das Datenbyte in Register 107 war: 0x40
Das Datenbyte in Register 108-116 war: 0x00
Das Datenbyte in Register 117 war: 0x68
1658626233667.png

altes Modul:
MPU6050 Registers
Das Datenbyte in Register 13 war: 0x8D
Das Datenbyte in Register 14 war: 0x6E
Das Datenbyte in Register 15 war: 0x8E
Das Datenbyte in Register 16 war: 0xCE
Das Datenbyte in Register 17-106 war: 0x00
Das Datenbyte in Register 107 war: 0x40
Das Datenbyte in Register 108-116 war: 0x00
Das Datenbyte in Register 117 war: 0x68

1658626134572.png
 
Ich konnte nun die FactoryTrim Werte des zweiten ins erste Modul übertragen. Es zeigt sich keine Verbesserung an den Messwerten. Das Modul hat interessanter Weise wohl mechanisch einen an der Waffel...
 
Oben