autonomer cat

PHP:
int filter::fusion(int in_acc, int in_gyro)
{
    acc = in_acc;
    gyro = in_gyro;
    colton= (colton + gyro * 0.005) * 0.98 + acc * 0.02;
    out_angle = colton;
    return (out_angle);
};


Danke nochmal für den Code!
Hab ihn am Wochenende ausprobiert... 3h ist das Gyro gelaufen und hatte keinerlei Drift. Sehr einfach und effizient. Toller Tipp!

lg

deck
 
Eine Frage... nur zur Sicherheit:
Welche Gyro Achsen und welche ACC Achsen setzt man ein? Ich habe jetzt acc-z und gyro-y genommen um Roll zu filtern. D.h. Beschleunigung in der Senkechten und Rotation um die Querachse. Richtig?
 
Hallo Reiner,

Ich habe mich mal ein bisschen mit dieser Colton Filterung beschäftigt und muss sagen, dass meine Begeisterung wieder verflogen ist.

acc = in_acc;
gyro = in_gyro;
colton= (colton + gyro * 0.005) * 0.98 + acc * 0.02;
out_angle = colton;
return (out_angle);

Diesen Code kannst du auch so schreiben:

out_angle = in_gyro * 0.0049 + in_acc * 0.02

Da colton keine statische Variable ist, ist der Wert bei Start immer 0.
Sieht nach wenig aus, aber das ist es auch. Das ist nur eine einfache sehr massive Gewichtung zum acc. Das erklärt natürlich, warum nix mehr driftet, weil kaum noch Gyroanteil im outangle ist.

Schade....
 
tja, mein versuch das als das zu verstehen was es offenbar ist : nämlich ein komplemetärfilter, ist gescheitert.
ich bin zu weit weg von der mathematik, um das spektralverhalten dieses ausdrucks auf anhieb rechnen zu können.

gemacht hab ich folgendes : einen komplementärfilter "auf blöd" ausprobiert : also das gyro integriert auf einen hochpass, und den acc auf einen tiefpass, dann die beiden addiert. siehe da : es kommt praktisch das gleiche raus wie bei mr. colton

nur verstehe ich seine theoretischen andeutungen (mehr ist es ja nicht ) leider nicht... trotzdem : beim quadrocopter (und in versuchsaufbauten) funktioniert der fusionsansatz von colton hervorragend.

gefragt wäre jetzt ein junger elektroingenieur, der das noch rechnen kann ;-)
 
segelwinkel

segelwinkel

anderes thema :

mein boot ist soweit "elektrisch" fertig, kompass, kränkung, verklicker (hall), gps, der arduino, alles arbeitet prima. 2 winden für fock und groß.
bei der kursplanung wirds irgendwann um kreuzen gehen, dann wirds spannend, aber zunächst ein trivialeres problem :

am wind bis halb so etwa muß ich aus kompasskurs und verklickerwinkel auf den segeltrimm kommen. flattern, bauchbildung, stömungsfäden oder ähnliches kann ich nicht messen. ich muß einen segelwinkel blind vorgeben :

"geraten" : segelwinkel = mittelwert aus kurswinkel und verklicker ??? ( bei halb hätte ich dann z.b. 45° zum scheinbaren wind )
 
Eine Frage... nur zur Sicherheit:
Welche Gyro Achsen und welche ACC Achsen setzt man ein? Ich habe jetzt acc-z und gyro-y genommen um Roll zu filtern. D.h. Beschleunigung in der Senkechten und Rotation um die Querachse. Richtig?

ähmm,... nö : wenn ich z.b. beim quadrocopter den nickachsenwinkel haben möchte, nehme ich den acc und das gyro der nickachse.
 
Diesen Code kannst du auch so schreiben:

out_angle = in_gyro * 0.0049 + in_acc * 0.02

nein, weil im orginalausdruck : "colton= (colton + gyro * 0.005) * 0.98 + acc * 0.02;" integriert wird !
 
anderes thema :

mein boot ist soweit "elektrisch" fertig, kompass, kränkung, verklicker (hall), gps, der arduino, alles arbeitet prima. 2 winden für fock und groß.
bei der kursplanung wirds irgendwann um kreuzen gehen, dann wirds spannend, aber zunächst ein trivialeres problem :

am wind bis halb so etwa muß ich aus kompasskurs und verklickerwinkel auf den segeltrimm kommen. flattern, bauchbildung, stömungsfäden oder ähnliches kann ich nicht messen. ich muß einen segelwinkel blind vorgeben :

"geraten" : segelwinkel = mittelwert aus kurswinkel und verklicker ??? ( bei halb hätte ich dann z.b. 45° zum scheinbaren wind )

Ich denke, da hast du mehrere Möglichkeiten. Wenn du den Kurs vorgibst und eine Geschwindigkeitsmessung hast, kannst du den Trimm optimieren, bis Vmax erreicht ist. Einfache Feedbackschleife.
Da der Anstellwinkel des Segels vom Schnitt des Segels abhängt, ist die zweite Möglichkeit Vmax bei bestimmten Segelwinkel in Testläufen Vorab festzustellen (bei fixem Winkel zum Wind) und diesen Anstellwinkel des Segels dann als Konstante zu verwenden. Wird aber nicht immer stimmen. Erste Methode ist mMn sinnvoller, aber nur bei längeren sChlägen realisierbar, weil das System natürlich träge ist.

bzgl Colton: Wo wird da was integriert? Ist aber auch egal. Ich bin draufgekommen, dass die Rowberg Library, die ich verwende, schon Sensorfusion auf hohem Level macht. Nur muss dafür das System sehr genau kalibiert werden. Dazu habe ich inzwischen einen eigenen Code gefunden. Jetzt funktioniert es super.
 
bzgl Colton: Wo wird da was integriert? Ist aber auch egal. Ich bin draufgekommen, dass die Rowberg Library, die ich verwende, schon Sensorfusion auf hohem Level macht. Nur muss dafür das System sehr genau kalibiert werden. Dazu habe ich inzwischen einen eigenen Code gefunden. Jetzt funktioniert es super.[/QUOTE]

ich versteh das so :

colton= (colton + gyro * 0.005) * 0.98 + acc * 0.02;

die variable "colton" wird aufsummiert, und zwar um dy * dt. dt ist hier (200hz abtastfrequenz) 0.005, also 5 ms. damit gibts aus dem gyro (winkelgeschwindigkeit) einen winkel. bloß den hochpass, den sehe ich eben nicht ...
 
Das Herzstück für den foilenden Hydropter

Das Herzstück für den foilenden Hydropter

Hier sind die wesentlichen Bauteile für den autonomen Hydrofoiler.....den Hydropter;)

image (2).jpg
Messsensor für Windrichtung, -Geschwindigkeit und ARDUINO Controller board

image.jpg
ARDUCOPTER board für die Gyroregelung der Foils, GPS-Empfänger, Spannungsmessung und Telemetriesender/-Empfänger für Testzwecke.

Fehlen nur RC-Empfänger, Akku und Servos.
 
Ansicht hell / dunkel umschalten
Oben Unten