Hi!
Eigentlich kann ich keine anständige Einstellungsanleitung für meine eigene Version schreiben, da ich programmiere, mit halbwegs passenden Werten teste und den Unterschied beobachte, wieder programmiere usw. D.h. ein richtiges Finetuning meiner eigenen Version auf meiner Gummischüssel (Gaui 330) habe ich eigentlich aus reinem Zeitmangel nie gemacht!
Die MultiWii_2_1_NewBaroPIDVario3 hat eingige andere/geänderte Funktionen als die originale 2.1 Version.
Änderungen:
========
1. Geänderte Hardware-Baro-Sensorauswertung (insbes. Timing!) für BMP und MS Baro.
-----------------------------------------------------------------------------------------------------
Beide Baros liefern jetzt fast exakt alle 30ms einen wirklich neuen Wert (+/- 1-2ms). Die originale Version frass sich bekanntermassen (vom Chef Alex bestätigt - Link fehlt mir jetzt) nach einer gewissen Zeit fest. Mit den Datenblättern vor Augen fallen Abweichungen zu den vorgeschriebenen Timings auf. Manches war viel zu knapp (Sensor "überschlägt" sich quasi früher oder später), anderes zu lang bemessen. Leichtere (MS) und tiefgreifendere (BMP) Änderungen ergaben bei mir eine Lösung. AKtuell laufen beide Sensoren über 2h (beide getestet, Test danach abgebrochen - irgendwann muss es mal gut sein) stabil.
2.Bodenhöhe
---------------
Nach Stromgabe/Reset werden 150 verschiedene Barowerte zur Bestimmung der Bodenhöhe ermittelt (150*30ms=4500 ca 4,5 Sek). In dieser Zeit ist kein Start möglich und die GUI "friert" dabei ein. Alle folgenden Barowerte werden auf diese Höhe "Null" bezogen.
3. Geänderter Althold Algorithmus
======================
3.1 Das Ändern der zu haltenden Höhe mittels des Gasknüppels:
--------------------------------------------------------------------------
In der original 2.1 wurde nach Überschreiten des in der config.h definierten ALT_HOLD_THROTTLE_NEUTRAL_ZONE (Std: 20 jetzt 40) sofort eine neue zu haltenden Höhe definiert inklusive des Gaswertes. Tatsachen: Ein Durchlauf dauert irgendwas zwischen 2 und 6 ms, ein echter, neuer Barowert ist nicht vor 30ms zu bekommen. Eine echte Höhenänderung ist vor 5 Barowerten bei dem MS reine Spekulation (150ms). Sorry, ich habe die "Regeln" nicht gemacht - nur beobachtet. D.h. der Pilot bewegt den Gasknüppel aus der Neutralzone heraus, also z.B um "20 Ticks" (ca. eine "Raste") und sofort (< 6ms) wird eine neue Althold - Höhe mit Gaswert bestimmt. Das Problem bei diesem Vorgehen liegt auf der Hand. Der Copter hat in max. 6 ms (realistisch 3-4ms) kaum seine Position in der Höhe geändert und der langsame Baro (mind 5 Werte erforderlich) kann diese nicht - wirkliche - Höhenänderung, auch noch nicht registriert haben. D.h. bisher war viel Lotterie im Spiel! Die Hauptlösung für dieses Dilemma heisst m.E ZEIT.
Jetzt wird so vorgegangen:
Wenn der Gasknüppel ausserhalb der "ALT_HOLD_THROTTLE_NEUTRAL_ZONE" (Stdwert:40 ca. +/- 2 Rasten) bewegt wird, wird Althold ausgeschaltet und die Bewegungsgeschwindigkeit des Gasknüppels registriert. Wenn Ruhe am Gasknüppel eingekehrt ist, wird nach einer Zeit "AltHoldBlindTime" (Stdwert: 0.8 Sek) Althold wieder eingeschaltet. Neben der neuen Höhe und des Gaswertes wird auch eine neue Neutralzone für den Gasknüppel definiert. Diese Werte sind in der config.h zugänglich. Die Standardwerte stellen eher Obergrenzen dar. Eine Reduktion von "ALT_HOLD_THROTTLE_NEUTRAL_ZONE" auf z.B 20 und von AltHoldBlindTime auf z.B 500000 (0,5 Sek) kann durchaus angenehmer sein. Unter 0,3 Sek sollte m.E eher kontraproduktiv sein - müsste man mal testen.
3.2 Andere Alt PID:
----------------------
Für das eigentliche Höhehalten müssen nur 2 Werte eingestellt werden (P und I). Nur das "P" kennt die tatsächliche Zielhöhe, das "I" kennt sie nicht und ist eine Variometerbremse (mit Acc) d.h. schnelle Höhenänderungen (Pendeln etc) werden bekämpft. Mit dem "D" wird das Gas angehoben bei Verkippung des Kopters. Die Beziehung für D ist (noch) linear.
Die Defaultwerte (Alt PIDs) sind: P 10,0 // I 0,030 // D 80 und stellen auch eher die Obergrenzen dar. D.h. man kann sie zunächst übernehmen und dann je nach Ergebnis, vermutlich nach unten, anpassen. Alternativ, alles auf null und mit einem Parameter beginnen. z.B P bis es gut pendelt, dann I hochdrehen bis das Pendeln weg ist. Dann zur Kompensation des Höhenverlustes bei Vorwärtsflug D hochdrehen. Der Baro muss von allen Seiten gut mit Schaumstoff eingepackt sein (Turbulenzen und lichtdicht).
Die Parameter:
P: Das P ist weitgehend gleich geblieben, also das P von "MultiWii_2_1_NewBaroPIDVario2b" kann man eigentlich weiter verwenden oder als Ausgangspunkt nehmen. Die Barowerte werden jetzt etwas stärker gefiltert.
I: Das I ist weiterhin die Variometerbremse, nur deutlich verändert!! Jetzt wird ein winkelkorrigiertes ACCZ mit einbezogen. Nunchuk ist wahrscheinlich eher untauglich.
Die erfolgreiche ACC Integration basiert auf der Arbeit von "mahowik" und letztlich auf der Arbeit von Alexmos.(
http://www.multiwii.com/forum/viewt...id=22e534b79f1c3f45c5d923c5d2358f1b&start=120)
D: Das D hat nichts mehr mit dem ACC zu tun. Da in der jetzigen ACC Integration intern eine Winkelkorrektur durchgeführt wird, fällt der ehemalige, angenehme Nebeneffekt des Anhebens der Motorgeschwindigkeit bei Verkippung weg. Daher kann man hier einstellen, wie stark das Gas bei Verkippung des Copters angehoben wird. Ein zu kleiner Wert fällt durch zu starkes Absacken im Vorwärtsflug auf. Das Höhehalten erst im Schweben (+2m !) einstellen mit leichten Bewegungen, dann das D im Flug nachstellen.
3.3 Sicherheitsfunktion:
---------------------------
Wird der Copter, bei eingeschaltetem AltHold, durch irgend etwas auf den Rücken geworfen (Propellerbruch etc), wird das Althold während des "Rückenfluges" deaktiviert. D.h. ein zusätzliches "in die Erde bohren" kommt nicht vor.
4. Position Hold Override "Bigbretl" Mod (GPS erforderlich)
=====================================
http://fpv-community.de/showthread....o-vern%FCnftig&p=189218&viewfull=1#post189218
http://fpv-community.de/showthread....o-vern%FCnftig&p=191585&viewfull=1#post191585
"Wäre es nicht auch möglich, bei Pos hold eine "Übersteuerung" zu programmieren, die beim Auslassen des Nick und Roll Stick für eine sek.
dann die neue Position hält. Bislang kann man zwar das PH übersteuern, aber bei Neutralstellung will er wieder zurück zur alten Position.
Wenn man dies wegbekäme könnte man auch ständig mit PH fliegen."
Genau das ist umgesetzt.
In der Config.h kann man es durch Auskommentieren von:
//#define PositionHoldOverride // Uncomment to activate
aktivieren. Bei Bedarf können diese Parameter geändert werden:
/*Parameters for Position hold Override You see here the default values. Uncomment and change if you want */
//#define PosHoldBlindTime 300000 // Time in microseconds (def. 0.3 sec) before PH is re-engaged after returning to Stickcenter
//#define BlindZonePitch 30 // Defines the Blindzone around Pitchaxiscenter
//#define BlindZoneRoll 30 // Defines the Blindzone around Rollaxiscenter
LG
Rob
Bislang erfolgreich getestete Setups:
Boards:
ATAVRSBIN1 & ATAVRSBPR1
CRIUS ALL IN ONE PRO v1.0
CriusSE
Drotek AiO (MPU6050, HMC5883, MS5611)
Drotek 10DOF MPU6050, HMC5883, MS5610
Freeimu v0.4.3
Freeimu v0.3.5MS
GY-86 Board
MultiWii SE V2.0 (HobbyKing)
Einzelsensoren:
BMA180, BMA150
MPU6050
MS5611 Baro.
BMP085 Baro
Nicht funktionierende Setups:
http://www.flyingeinstein.com/ Hardware, da geändert I2C Adressen. Lösungsvorschlag:
http://www.multiwii.com/forum/viewtopic.php?f=8&t=2371&p=22930#p22930
http://www.multiwii.com/forum/viewtopic.php?f=8&t=2371&start=150#p23119