-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Rotation um Hochachse (Yaw) auf Nick & Roll übertragen

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544

    Rotation um Hochachse (Yaw) auf Nick & Roll übertragen

    Anzeige

    Hi,

    ich bin momentan wieder etwas am programmieren und möchte nun den Level-Mode meiner Kopter (also ACC-gestützte Winkelerfassung durch Komplementärfilter) "verbessern" bzw. korigieren.
    Angenommen die Platine (also die Sensoren) sind um 45° nach vorne geneigt (Nick) und die Roll-Achse ist waagrecht (0°). Wenn ich jetzt die Platine um 90° um die Hochachse drehe, ist die Platine um 45° in Roll-Richtung geneigt und um 0° in Nick-Richtung. Ich glaube, das fällt auch unter die Kategorie "Gimbal Lock"?!
    Die Accelerometer-Sensoren erfassen dies zwar, aber da es ja ein Komplementärfilter ist, dauert es entsprechend lange, bis die Werte wieder stimmen (so ca. 1-2Sek.).
    Jetzt dachte ich mir, ich nehme die Differenz der beiden Winkel (Nick & Roll), multipliziere diese mit dem Gyro-Wert der Hochachse und subtrahiere die Werte dann von den Winkeln... Tja, aber irgendwie funktionierts nur immer in eine Richtung...
    Hier mal der Code:
    Code:
       Angle_diff = Gyro_xangle - Gyro_yangle
    
       Angle_diff = Angle_diff * Gyroz
       Angle_diff = Angle_diff / 1600000
    
       Gyro_xangle = Gyro_xangle - Angle_diff
       Gyro_yangle = Gyro_yangle - Angle_diff
    Gyro_xangle ist der Roll-Winkel, berechnet aus dem Gyro-Integral & ACC-Winkel, Gyro_yangle ist der Nick-Winkel.
    Gyroz ist die Drehrate um die Hochachse.

    Ich bin mir sicher, dass es so ähnlich funktioniert denn wenn ich den Sensor erst nach vorne neige (Nick) und dann von oben gesehen gegen den Uhrzeigersinn drehe (um 90°), dann stimmt alles! Aber bei einer anderen Reihenfolge stimmts nicht mehr...
    Kann mir jemand evtl. einen Tipp geben, was ich falsch mache?

    Vielen Dank & Gruß
    Chris

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    24558
    Alter
    39
    Beiträge
    1.356
    Hallo,
    was heißt es funktioniert immer nur in eine richtung?

    Ich würde erstmal prüfen lassen welcher wert größer ist, und davon dann den (kleineren) Anderen abziehen. Oder wenigstens sicher stellen das ich nicht "in Minus" rechne, wenn es nicht passieren soll.

    Leider sieht man auch nicht welcher Variablen-Typ jeweils angelegt wurde.

    Ob die Rechnung überhaupt dafür passt kann ich leider nicht beurteilen.
    "Es ist schwierig, jemanden dazu zu bringen, etwas zu verstehen, wenn er sein Gehalt dafür bekommt, dass er es nicht versteht" [Upton Sinclair] gez-boykott

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hi,

    es funktioniert nur, wenn ich zuerst Nicke und Roll waagrecht ist...
    Hm ich hab schon alles mögliche probiert, aber ich werd deinen Tipp trotzdem mal versuchen!
    Gyro_xangle & Gyro_yangle & Angle_diff sind als Single deklariert, Gyroz ist ein Long.

    Gruß
    Chris

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hi,

    also ich habs probiert, aber auch das funktioniert nicht...
    Das Problem ist einfach, dass es nur für bestimmte Drehungen / Konstellationen funktioniert, aber eben nicht für alle. Wenn ihr noch nen Tipp habt, immer her damit
    Ich werd mich jetzt mal mit nem dicken Block Papier auf den Schreibtisch setzen und alles mal aufschreiben...

    Gruß
    Chris

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Wenn ich das richtig sehe, willst du vorausrechnen, dass bei Drehung um die Vertikale die x- und y-Neigungswinkel ineinander übergehen. Und zwar umso schneller/mehr je schneller die Winkelgeschwindigkeit um die Vertikale.

    Wie wärs dann mit sowas?
    Code:
    Angle_diff = Gyro_xangle - Gyro_yangle
    
    Angle_diff = Angle_diff * Gyroz
    Angle_diff = Angle_diff / 1600000
    
    Gyro_xangle = Gyro_xangle - Angle_diff 
    Gyro_yangle = Gyro_yangle + Angle_diff
    Mit Gyroz = 1600000 tauschen xangle und yangle die Werte.
    Das müsste so abgestimmt sein, dass bei gyroz = 1600000 von einer Messung zur nächsten 90° Drehung ausgehen.

    Bin mir nicht sicher, ob das Sinn macht, aber Vorzeichenwechsel müsste man auch berücksichtigen.
    Geändert von ichbinsisyphos (19.03.2013 um 15:00 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hi,

    ja genau so will ich das machen
    Mit Addition / Subtraktion hab ichs auch schon probiert, aber dann stimmts wieder nicht...
    Durch die Division durch 1600000 erreiche ich, dass der Übergang genau richtig proportioniert ist.

    Ich hab jetzt mal aufgeschrieben, welche Vorzeichen bei welcher Drehung / Winkel vorliegen:
    Nicken nach vorne ist positiv, Rollen nach links ist positiv und Yawen im UZS ist positiv.
    Jetzt bräuchte ich eine Art Wertetabelle, damit ich die Zusammenhänge rausfinden kann, allerdings ist mir noch nicht eingefallen, wie ich das gut leserlich aufschreiben kann.

    Gruß
    Chris

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Na gut, dann positive Drehrichtung um die Vertikale (Uhrzeigersinn):

    positiver Nick- wird zu positivem Rollwinkel. Anders ausgedrückt eine Neigung nach vorne wird zu einer nach links.

    Code:
    y+ -> x+
    y- -> x-
    x+ -> y-
    x- -> y+
    y wird zu x bei Vorzeichenerhalt und x wechselt zu y jedes Mal das Vorzeichen. Wichtig wär, zu verstehen, was dazwischen abgeht, aber dazu fehlt mir im Moment die Vorstellungskraft.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hi,

    ich habs jetzt mal aufgeschrieben (so wie du):
    Code:
    Rotation im UZS:
    Nick --> Roll      Roll --> Nick
    +           +         +          -
    -           -         -          +
    
    Rotation gegen UZS:
    Nick --> Roll      Roll --> Nick
    +           -          +          +
    -           +          -          -
    Jetzt muss ich noch versuchen, das ganze irgendwie zeitsparend in den Code zu integrieren!
    Danke schonmal für die Hilfe

    Gruß
    Chris

    EDIT:
    Allerdings hab ich jetzt noch keinen Plan, wie ich das programmieren soll... Ich war eigentlich auch der Meinung, dass das ohne große Fallunterscheidungen gehen sollte.. Aber da hab ich mich wohl getäuscht!
    Vorschläge bzgl. der Umsetzung sind weiterhin willkommen
    Geändert von Che Guevara (19.03.2013 um 16:59 Uhr)

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Code:
    k = Gyroz / 1600000
    
    xtemp =  (y-x)*k + x
    y = -(y+x)*k + y
    x = xtemp
    Mir ist übrigens grad erst aufgefallen, dass (x,y) -> (-y, x) eine Drehung eines Vektors um 90° beschreibt. Heißt für den Fall besonders, dass das für 90° stimmt, dazwischen nicht, die Winkelfunktionen sind natürlich nicht linear im Winkel.

    Außerdem frag ich mich, ob es nicht genauso gut oder besser wäre, den Komplementärfilter so einzustellen, dass er neue Werte schneller annimmt. Was genau erhoffst du dir von der Vorgehensweise? Verpfuscht du dir damit nicht die Trägheitsnavigation?


    edit: ok, vergessen wir den anderen Ansatz, das sind keine Winkel ...
    Geändert von ichbinsisyphos (19.03.2013 um 19:02 Uhr)

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hi,

    danke für den Code, werde ich dann später gleich noch ausprobieren!
    Es muss / soll ja auch nicht 100%ig genau stimmen, das geht schon alleine wegen dem Gyro-Drift nicht Aber eine Annäherung reicht auch für den Fall.
    Nunja, der Komp. Filter ist momentan so eingestellt, dass Störungen des ACCs ABSOLUT keinen Einfluss auf den Winkel haben, das ist für mich sehr wichtig, da ich einen Kompass verbaut habe der einen absolut-stimmigen Winkel braucht Trotzdem ist der Filter ja nicht träge, er arbeitet voll und ganz zu meiner Zufriedenheit.

    Wie läufts eig. mit deinem Projekt? Hast du den schon angefangen?

    Gruß
    Chris

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Probleme mit Servo bei Kamera Nick/Roll
    Von jevermeister im Forum Mechanik
    Antworten: 8
    Letzter Beitrag: 21.06.2011, 08:00
  2. CHR-6d Board Gyro,ACC,Nick,Roll,Kalman Filter,Inbetriebnahme
    Von mirco99 im Forum Sensoren / Sensorik
    Antworten: 32
    Letzter Beitrag: 21.10.2010, 16:54
  3. Code auf Atiny2313 übertragen
    Von Stuebsel im Forum Assembler-Programmierung
    Antworten: 17
    Letzter Beitrag: 17.09.2010, 13:51
  4. Probleme beim Übertragen auf Controller
    Von loukumas im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 19.02.2008, 01:56
  5. Transformation für Yaw Pitch und Roll
    Von Ghuzdan im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 0
    Letzter Beitrag: 22.06.2006, 00:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •