hallo komma
gelten die werte auch für eine standard r234 oder sind das werte aus der baro version von roberto?
acc_lpf_factor - ist das mit dem low pass filter beim arduino gleich zu setzen?
verstehe da die werte nicht. beim arduino für 'define MPU6050_LPF_***HZ' gehen von default 256 bis runter auf 5 Hz. ich bin beim nanowii wie gesagt bisher immer default 256 Hz geflogen, bei harter lagerung der FC.
acc_hardware - wofür steht dieser wert bitte?
looptime - wofür steht dieser wert bitte?
grüsse,
der skyfreak
Hi skyfreak!!
Deine Fragen sind sehr berechtigt und tauchen nur durch die mangelhafte Beschreibung von mwii und ungenügende Dokumentation von naze32 auf!
Thema Filter:
Zu den Filtern. Im Flug gibt es immer Gerappel und Störeinflüsse, die das Sensorergebnis verfälschen (Gyro & ACC, wobei ACC besonders empfindlich ist). Deswegen gibt es Filtermethoden. Je nachdem, was man mit den Werten machen will/muss braucht man ggf. unterschiedlich starke Filterungen. Die mwii verwendet überwiegend einfache Lowpassfilter und Komplementärfliter für die Kombination von Werten mit verschiedenen Datenquellen (z.B GYRO u ACC, Baro u ACC usw). Kalmanfilter sind zu aufwändig, ausserdem müsste man bei denen auch Parameter einstellen ("Gain").
Das ist noch nicht verwirrend genug, deswegen gibt es von der Lokalisation her, 2 Filterarten:
1. Hardwarefilter: Das ist ein Filter, der direkt auf dem jeweiligen Sensorchip durchgeführt wird. (z.B Bosch BMA180, BMA020, MPU6050, ADXL usw. haben sowas). Den hast Du z.B bei der mwii mit #define MPU6050_LPF_42HZ eingestellt. Dabei gibt es die Besonderheit, dass dieser Wert für Gyro und ACC gilt, da die MPU beide Sensoren hat (Gyro und Acc). Der Wert von 42 Hz ist bei Deinem Naze voreingestellt und lässt sich nicht beeinflussen.
2. Softwarefilter: Diese sind entsprechend in der Datenverarbeitung nachgeschaltet und entsprechend den Erfordernissen angepasst. Die kannst Du einstellen:
acc_lpf_factor dieser ist für die Datenfusion von ACC und Gyro zuständig. Da das Gyro der schnelle Anteil ist und das ACC nur zur Gyrodriftkorrektur verwendet wird, kann der ACC Filter hoch gewählt werden. Das Naze32 setzt dafür keinen Wert, es ist aber sehr zu empfehlen den, wie bei der mwii, auf 100 zu setzen. Also so:
set acc_lpf_factor = 100
save
acc_lpf_for_velocity dieser ist für die Datenfusion von ACC und Baro zuständig. Da das ACC den schnellen Part übernimmt und von dem langsamen Baro korrigiert wird, ist der Faktor kleiner (Default: 10 - erst mal so lassen. Höher als 15 dürfte sinnlos sein).
Thema looptime:
Das Problem: der Naze rappelt schneller durch den code als die mwii erwartet. Eigentlich sollte das kein Problem sein, wenn man die vergangene Zeit immer bestimmt und per Fliesskommaarithmetik mit den jeweiligen Steuergrössen in Verbindung bringt. Da dieses aufwändig ist, hat man das bei der mwii gelassen und geht von einer Verarbeitungsgeschwindigkeit von 3-5ms pro Durchlauf aus. Deswegen ist es sinnvoll die looptime auf 3ms zu setzen (wird in us angegeben). Also so:
set looptime = 3000
save
Das beeinflusst indirekt auch die software lpf, da auch dort die Ausführungszeit eine Rolle spielt.
In der Gui siehst Du Zappelwerte von ca. 3000-4000 da nicht bei jedem Durchlauf alle Programmteile durchlaufen werden. D.h. man müsste vorher wissen wieviel Zeit der nächste Durchlauf brauchen würde und dann entsprechend mehr oder weniger bremsen. Diese Glaskugel ist nicht programmiert, deswegen schwankt die cycletime und ist nicht auf 3000 festgenagelt. Schwankende Cycletime bringt nach meinen Beobachtungen v.a Probleme auf der Gierachse, d.h. das Heck steht eben nicht wie angenagelt. Es liegt also nicht immer an der Mechanik. Das könnte man durch Einbeziehung der tatsächlichen Laufzeit in den Pid Kontroller abstellen. Einer sollte das mal programmieren...
Thema set acc_hardware:
Zum Naze32 rev4: Da der Timecop die MPU hasst (Zitat Zeile 189 config.c: " cfg.mpu6050_scale = 1; // fuck invensense") hat er direkt 2 Accelerometer verbaut. Diese Abneigung dürfte 2 Gründe haben: 1. In der Startphase hatte invense mit der MPU Fertigungs-/Revisionsprobleme, so dass Sensoren mit unterschiedlichen Skalierungen auftauchten, was natürlich zu Problemen führte. 2. Sie geben/gaben ihren DMP Code nur kostenpflichtig ab. Wie dem auch sei, Deine Naze hat 2 ACC:
MPU6050(Gyro&ACC) und MMA8452(nur ACC). Du kannst sie so auswählen:
set acc_hardware = X
save
X bedeutet: 0=autodetect 2=MPU6050 3=MMA8452 (Default "0" bevorzugt MMA8452)
Nach Wechsel des ACC musst Du in die GUI und erneut auf ACC Calibration klicken. Danach musst Du den Naze einmal stromlos machen und neustarten, da beim Start einige Acc abhängig Konstanten berechnet werden, die sonst nicht mehr passen. Ich verwende die MPU6050, weil ich da halbwegs weiss woran ich bin. Wer noch eine "Montags" - MPU hat (davon gehe ich nicht aus) fährt mit Autodetect (default) wahrscheinlich besser (dann wird der MMA8452 bevorzugt).
Ich hoffe, das stimmt so alles, und es bringt etwas Licht ins Dunkel.
LG
Rob