Funktionieren bei Euch Kompass und Baro vernünftig ?

helste

Erfahrener Benutzer
Kurze Rückmeldung:
Habe nun LPF auf 42Hz, so wie vorher und die PID Werte von gestern eingestellt. Jetzt fliegt er wieder genauso wie gestern. War aber nur ein paar Sekunden Flug möglich, weil es zu regnen begonnen hat. Wenn es dann aufhört, probiere ich dann den Baro aus und melde mich mit einem Ergebnis.
 
@roberto

ich bin leider mit der einbindung eines billigen us-sensors beschäftigt gewesen und habe jetzt erst wieder zeit mit um die höhenregelung zu kümmern. mit schaltplan hätte ich ein paar stunden gebraucht, ohne hat es tage gebraucht um zu erkennen wo die unterschiede der ports zwischen mega und promini liegen. shit happens, man lert daraus. dafür gibt jetzt ein hc-sr04 den bodenabstand an. (wird sich zeigen ob er zu gebrauchen ist, ein srf08 per i2 liegt auch bereit)

falls du lust auf experimente hast, dann versuche doch mal den anhang einzubauen. die mittelwertroutine ist aus der version von alex mos. in bezug auf die vorhandene mittelwertroutine der originalen version muss ich mich korrigieren, sie glättet zwar den barowert, als ergebniss gibt sie aber einen vergleich der aktuellen messung mit der vor einer halben sekunde aus. hier sieht es recht anders aus. als parameter 6 sollte über 64 werte gemittelt werden, 5 sollten 32 werte sein.

gruß DeaconBlues



typedef struct avg_var16 {
int32_t buf; // internal bufer to store non-rounded average value
int16_t res; // result (rounded to int)
} t_avg_var16;

/* n=(1..16) */
void average16(struct avg_var16 *avg, int16_t cur, int8_t n) {
avg->buf+= cur - avg->res;
avg->res = avg->buf >> n;
}

#define UPDATE_INTERVAL 25000 // 25000 = 40hz update rate (20hz LPF on acc)
#define INIT_DELAY 4000000 // 4 sec initialization delay
#define PIDfaktorUpDown 4

void getEstimatedAltitude(){
static uint32_t deadLine = INIT_DELAY;
static t_avg_var16 avgAlt = {0,0};
int32_t temp32;
int16_t PidP = 0, PidI = 0, PidD = 0;

if (currentTime < deadLine) return;
deadLine = currentTime + UPDATE_INTERVAL;

average16(&avgAlt, BaroAlt, 6); // / 5 = 32 = 0,75 sec 6 = 64 = 1,5 sek // Mittelwert der Höhe

EstAltOld = EstAlt;
EstAlt = avgAlt.res;


//D
temp32 = conf.D8[PIDALT]*(EstAlt - EstAltOld); //
 

helste

Erfahrener Benutzer
So, war eben nochmal im Garten. ACC Mode geht jetzt gut. Kaum schalte ich auf Baro um, zuckt er rum. Ich denke, ich muss die ALT PID Werte nachjustieren.
 

helste

Erfahrener Benutzer
Das Zucken kommt vom D Wert der Höhe, also vom ACC Z.
Da kann ich bis 3 gehen. Ab 4 fängt er an zu zucken.
P ist auf 10 und I auf 0,100

Damit fliegt er jetzt ganz vernünftig, aber bezüglich Höhe halten hat sich nichts gravierendes verändert.
 
hi helste,

komme auch gerade aus dem garten, kann mir nach fliegen im Alt-Modus in 50cm bodenabstand das grinsen nicht verkneifen. p und i scheine ich zu haben, ich hoffe das es mit angepassten d noch besser läuft.

gruß DeaconBlues

@roberto vermutlich bringt die absenkung der PID-werte im Sinkflug nicht so viel, ich probiere aktuell wieder mit 1:1

@roberto MW-Faktor von 4 ist genau so gut, das sollten dann 16 werte sein die gemittelt werden.
 

upapa

Erfahrener Benutzer
Hallo Roberto,

habe am Abend bei nur noch schwachem Wind MultiWii_dev_20120606_NewBaroPID mit meiner CriusSE mit vier LiPo-Füllungen testen können. Die ALT PID-Werte wurden auf Deinen Vorgabewerten belassen. Der BARO-Code allein zeigt ein sanftes Regelverhalten, schwankt aber in der Höhe stärker als Deine ModeNR.5 - meist hält er die Höhe innerhalb von 1 ... 2 m, Höhenänderungen um ca. 5 m kamen aber auch vor.
Es scheint, als wären bei größeren Höhen (so etwa ab 10...15 m) die Schwankungen geringer. Kann aber auch eine Täuschung des Auges sein. :)
Schalte ich zum BARO den LEVEL-Mode hinzu, zuckelt der Kopter mit kurzen Gasstößen stetig und unaufhaltsam ins Blaue davon- sind also so gemeinsam nicht sinnvoll nutzbar.
Hatte bisher keine Gelegenheit, mit den ALT-PID-Werten zu spielen...

upapa
 

Roberto

Erfahrener Benutzer
Hi Junx!

Zu allererst: Herzlichen Dank an alle für eure Experimentierfreudigkeit und dass Ihr die EIER dazu habt! (Musste mal in dieser Deutlichkeit gesagt werden!)

Komme auch grad vom Testen, Geilomat, ich glaube das ist der richtige Weg!

@Helste: "Wir haben 13:0 gewonnen. Jetzt sind wir Meister." Schwere Gratulation von mir, das hört sich wie eine Hinrichtung für den SV Mattersburg an!
"Kaum schalte ich auf Baro um, zuckt er rum."
Dein ACC scheint besser zu sein als mein BMA! Die errechneten Werte werden einfach, willkürlich durch 40 geteilt (irgendwas musste ich doch machen), so dass 20 die Hälfte ist. Teile einfach durch 100 dann ist 50 die Hälfte und Du kannst feiner justieren. Also statt unter IMU "ACCZD -= (int32_t)conf.D8[PIDALT]*(abs(AccZHighest)+abs(AccZLowest))*(AccZHighest-abs(AccZLowest))/40;" , schreibst Du ACCZD -= (int32_t)conf.D8[PIDALT]*(abs(AccZHighest)+abs(AccZLowest))*(AccZHighest-abs(AccZLowest))/100;
"bezüglich Höhe halten hat sich nichts gravierendes verändert". Kann ich nicht ganz bestätigen, ich brauche z.B mehr "P" und ein stärkeres Eingreifen des "P". Da kommt gleich noch mehr, wenn ich meine Flugerfahrungen seziere.

@DeaconBlues: "falls du lust auf experimente hast, dann versuche doch mal den anhang einzubauen." Da C für mich neu ist, verstehe ich den Code noch nicht vollständig - ich ahne aber, was da abgeht :) . Auf Platt: Und wat de Buur net kennt, fret he nich. (Was der Bauer nicht kennt, frisst er nicht) - egal ich probiers trotzdem. Ich Lade nur Änderungen hier hoch, die ich auch komplett verstehe. Du bist mir mit Deinen C Kenntnissen deutlich vorraus. Ich bin nur ein Pitbull der sich festgebissen hat. Mit meinem jetzigen Verständniss sieht es für mich so aus: Entweder zeitnah relativ verrückte Werte oder alle 0,8-1,5 Sek alte, weniger verrückte Werte und eine schöne Kurve. Doch was bringt die Kurvenkosmetik, wenn nur das Ergebnis zählt (wie im Fussball s.o, s.u)? Ich bin jetzt den Weg gegangen möglichst schnell, alle verrückten Werte umzusetzen in der Hoffnung, dass die Trägheit des Copters (ges. Gewicht, Motoranlaufgeschwindigkeit, Massenträgheit der Propeller usw.) quasi daraus einen "natürlichen", fliegbaren Mittelwert bildet.

@upapa: Meine Defaultwerte sind leider nicht erflogen oder ausgiebig getestet. Da müssen wir alle selbst ran. Deswegen ist Dein Feedback auch so wertvoll. "Schalte ich zum BARO den LEVEL-Mode hinzu, zuckelt der Kopter mit kurzen Gasstößen stetig" Auch Dein ACC scheint besser zu sein als meiner (mit was für nem ScheiX fliege ich eigentlich?) an Deiner Stelle, würde ich dass, was ich Helste geraten habe auch probieren.

Meine Testergebnisse:
Das neue "I" zu verändern bringt nicht wirklich was. Also I auf 0,100 (Ergebnis wie DeaconBlues). Mit "D" auf 0, also z.B Althold nur auf Gyromodus, hat es schon gut funktioniert, aber ich brauche noch mehr "P" (>255 also >"25,5", also mehr als Helste) und ein stärkeres Eingreifen der errechneten Werte. Der alte Code konnte +-210 "Gasklicks" ändern (PD+I), der neue nur +-150.
Also statt:
Code:
 "BaroP = conf.P8[PIDALT]*(BaroP-BaroDiff)/50;               // P of Baro a P of 5 in the GUI means 50"
werde ich nun:
Code:
BaroP = conf.P8[PIDALT]*(BaroP-BaroDiff)/25;      // P of Baro a P of 2,5 in the GUI means 25"
probieren. Damit habe ich bei einem "P" von 2,5 jetzt 100% der errechneten Werte (vorher "P"=5,0).
Das Limit der Regelung werde ich auch auf 250 vergrössern. Also statt +-150 jetzt +-250.
Also statt:
Code:
BaroP = constrain(BaroP,-150,+150);                         // Limit Baro P to +/- 150
Jetzt:
Code:
BaroP = constrain(BaroP,-250,+250);                         // Limit Baro P to +/- 250
ACCZ werde ich wie Helste und upapa empfohlen auch auf "/100" setzen.
Code:
   ACCZD -= (int32_t)conf.D8[PIDALT]*(abs(AccZHighest)+abs(AccZLowest))*(AccZHighest-abs(AccZLowest))/100; // conf.D8[PIDALT] Is scalefactor for ACCZ, if it is = 100 then this is 1:1 Passthrough
Dass ACCZ lasse ich weiterhin auf +-150 begrenzt, d.h. die errechnete ACCZ Korrektur kann die errechnete Altitude P Korrektur nicht ganz ausstechen (150 vs 250). Bin mal gespannt, was das gibt. Testet es selbst auch aus! Der Code ist im Fluss!

LG

ROB

Ps: 3 Enten (1xEnte,2xErpel) sind immer sehr interessiert an meinen Flugkünsten und watscheln immer zu mir hin, (die Ente ist immer am weitesten weg) sobald ich meinen Copter starte! Dass ich keine Brotkrumen dabei habe, sollten die langsam auch verstanden haben. Der dreisteste aus dem Trio dackelt (sorry, "ERPELT") noch nicht mal ab, wenn ich einen Sturzflug mit dem Quad auf Ihn mache. So ein Gaui 330 kann einen gestandenen Erpel in keiner Weise schocken. Mal sehen, ob ich aus dem Keycam 640X irgendwas Video ein Fahandungsfoto machen kann......
Hey, ihr Tierschützer - wer beschützt mich? Ich schaffe es einfach nicht den Erpel in Angst und Schrecken zu versetzen - im Gegenteil - ich muss ihn mir vom Hals halten!


Pp.s: Gomez hat endlich nach 72Min das gegnerische Tor gefunden - da wird der SV Mattersburg neidisch!
Mann, poste ich langsam das Spiel ist vorbei und Deutschland hat gewonnen.... gloreiche 1:0, dafür bekommen die Millionen.


Hier ist er: http://www.youtube.com/watch?v=zoK3ZtiVk58
 

helste

Erfahrener Benutzer
So, ich habe mal wieder getestet.
Die äußeren Bedingungen sind gut. 21°, wenig Wind, kein Regen, also ideal.
Ich habe mal die oben genannten Codeänderungen eingespielt.
Den LPF habe ich noch mal auf 22Hz runter gesetzt. Nun sehen meine Werte so wie unten gezeigt aus.

Damit fliegt der Kopter zum einen mal sehr gut und stabil, lässt sich auch durch plötzliche Lenkbewegungen und zurückschnappen lassen des rechten Hebels, nicht übermäßig aufschaukeln und damit bin ich absolut mal zufrieden.

Kommen wir nun zur Baroeinstellung. Mit dieser aktuellen Einstellung hält der Kopter die Höhe beimSchweben sehr konstant in einem Bereich von ca. 1m. Zwischendurch kommt es mal vor, dass er auf eine Schwankung von ca. 2m kommt. Er zuckt nicht und macht auch nicht auf Jojo. Sieht also alles mal sehr gut aus.
Ich kann aber jetzt schwer beurteilen, ob der D Wert irgendwas bringt.
Zuerst habe ich ihn mal auf 0 gesetzt und da hat es auch schon sehr gut ausgeschaut. Dann auf 10 und da hat er zu zucken angefangen. Bei 8 hat er auch noch ganz leicht gezuckt und bei 6 passt es jetzt. Könnte es noch mit 7 probieren, aber das wird kaum einen großen Unterschied machen.
Ich lasse es jetzt mal so und werde damit mal mehr testen, wenn ich dann etwas mehr Platz habe. Morgen fahre ich eh wieder zum Sportplatz und da kann ich dann mal probieren, wie sich das bei flotterem Rundflug verhält.
 

Anhänge

Joachim08

Erfahrener Benutzer
Hallo zusammen,

ich kann und konnte die vergangenen Tage leider nicht testen.
Ich fliege in ein paar Stunden nach Shanghai und komme erst am
kommenden Wochenende zurück. Dann will ich weiter testen.
Bei helste sieht es ja ganz gut aus. Kann vielleicht jemand das passende
sketch einstellen ? Vielen Dank !

Tschöööööööööö

Joachim

P.S: Mal sehen was Shanghai an RC zu bieten hat......
 
Nachdem ich dem Luftdrucksensor nur begrenzt getraut habe und die Funktion der Höhenregelung erst einmal ohne die ganzen Schwierigkeiten des Luftdrucksensors prüfen wollte habe ich mir Freitag einen billigen US-Sensor eingebaut. Damit ist, so wie mir meine KontrollLeds am Kopter zeigten, eine recht passable Regelung möglich. Der Test mit der Treppe oder Rampe steht noch aus, aber ich bin guter Dinge. Die Pid werte sind noch nicht optimal, aber es sieht gut aus.

Außerhalb des Messbereiches des US-Sensors hat der Baro das Sagen. Beim heutigen Veruch in ca 6m Höhe den Copter in den BaroMode zu versetzen entschied sich die Regelung für einen Sturzflug nach unten. Den KontrollLeds nach war dieses Richtig, sie sagten das der Copter zu hoch war und sinken solle. Mit dem Schwanken der BaroWerte hat dieses nichts mehr zu tun, das spielt sich im Bereich von + - 1m ab.

Vermutung ist natürlich das der Propellerwind das absolute Messergebniss restlos verfälscht. Der Sensor ist zwar in Schaumstoff aus einem Mikrofon verpackt, aber dieses scheint nicht zu reichen. Den Senor von der IMU zu nehmen und einen geeingeten Platz zu suchen fällt genauso aus wie die IMU umzusetzen. Vermutlich werde ich um ein Gehäuse für die Elektronik nicht vorbeikommen.

Aber es geht voran.

Gruß DeaconBlues
 

Roberto

Erfahrener Benutzer
@Helste:
Das mit dem ACC funktioniert in dieser Version nur mit dem BMA 020. Ich hatte angenommen, dass alle ACC bei 1G einen Wert von "64" bekommen. Das ist aber leider nicht so. Die meisten ACC's bekommen bei der MWII für 1G einen Wert im 200er Bereich. Das ist auch der Grund, warum der Code bei allen ACC's, ausser dem BMA020, so "abgeht". Da ich hier nur noch einen Nunchuk herumliegen habe, sind meine Testmöglichkeiten deutlich eingeschränkt.
Versuche doch mal bitte die alte "ACCZD" Zeile durch diese Variante zu ersetzen:
Code:
ACCZD -= (int32_t)conf.D8[PIDALT]*(abs(AccZHighest)+abs(AccZLowest))*(constrain (AccZHighest-abs(AccZLowest),-10,+10))/acc_1G;
Und dann mit dem D mal vorsichtig hoch. Es wäre schliesslich schön, wenn die ACCZ Kompensation nicht nur auf dem BMA läuft. Tja, sonst bleibt nur D=0 :(. An dem "P" Code habe ich auch noch minimal gefrickelt, damit die Motoren nicht so abrupte Änderungen bekommen. Mal sehen, ob es gut läuft.

@DeaconBlues
"Außerhalb des Messbereiches des US-Sensors hat der Baro das Sagen. Beim heutigen Veruch in ca 6m Höhe den Copter in den BaroMode zu versetzen entschied sich die Regelung für einen Sturzflug nach unten."

Das kann doch wohl nicht meine Testversion sein!


@Joachim08: Nimm den Quad mit nach Shanghai!

LG

ROB
 

helste

Erfahrener Benutzer
Danke Rob.
Ich war gerade im Garten. Kopter auf 4-5m Höhe gestellt, Baro ein und fertig. Hands free vom feinsten. War fast kein Wind, daher stand der Kopter da, als hätte man GPS und Flow Sensor und was weiß ich was verbaut. Höhenkorridor: +/- 1m, aber meistens nur 0,5m bzw. wenige cm.

Vielleicht war es Zufall, aber ich habe das über 5 Minuten so laufen lassen. Musste nur alle 15-20 Sekunden mal den Drift durch den ganz leichten Wind korrigieren. Der Rest war hands free.
Ich mach dann mal ein Video davon. Ist echt genial. Ich glaube, die letzte Programmzeile von oben hat es gebracht.
 

Joachim08

Erfahrener Benutzer
Hallo zusammen,

bin gerade noch in Shanghai und komme morgen zurück. Wäre es möglich das jemand die Änderungen in
einen Sketch einpflegt ? Ich bin da zu unbeholfen und habe jetzt den Überblick verloren.
. Ich würde es gerne am Wochenende mit meinem MS
Baro testen.

Vielen Dank und beste Grüße

Joachim
 

helste

Erfahrener Benutzer
@thunder1902, nein, das kann ich nicht. Ist top secret;-)

Ich weiß nicht, ob Dir das was bringt, weil das ja bei jedem Kopter anders ist. Bei Meinem musste ich sogar massive Änderungen durchführen,
nachdem ich bloß die Motoren weiter nach innen gerückt und die Ausleger um ca. 11cm gekürzt hatte.

So sieht es nun bei mir aus.
 

Anhänge

Roberto

Erfahrener Benutzer
@Helste: Sehr schönes Video! Fussball habe ich mir Gestern auch nicht gegeben. Momentan ist so viel "verschlimmbessert", dass ich wahrscheinlich zuerst auf die Forumsversion hier zurück gehen muss, bevor es weiter gehen kann. Hat die Änderung bei dem ACC was bei Dir gebracht? Irgendwie habe ich den Eindruck mein BMA020 ist auf der Z Achse viel zu grob und unempfindlich. Ich habe jetzt einen universelleren ACC Code am Start, der die ACC Werte (aller möglichen ACC Sensoren) auf die Erdbeschleunigung normalisiert (Fliesskomma). Den BMA020 scheint man für diese Zwecke vergessen zu können. Das direkte Durchgeben der Barowerte an die Motoren, geht mir noch zu sehr an die Mechanik (Motorwärme) und auf den Akkuverbrauch - mal sehen, ob de "DeaconBlues / Alexmos" Mittelwertcode was bringt.
@Joachim08: Stay tuned, frickeling in progress..

LG
Rob
 
FPV1

Banggood

Oben Unten