siehe auch: (evtl. Links zu anderen verwandten Seiten einfügen...) TableOfContents

Mathematik rund um einen Quadrokopter

Berechnungen, die ein µProzessor durchführen muss, um einen Quadro in der Luft zu halten

BRDass ein Quadrokopter nicht einfach so in der Luft bleibt, und schongarnicht Eigenständig fliegen kann, wissen wir spätestens, seit wir die Funktion eines Gyros kennen. Die Motoren müssen auch wissen, wann sie wie schnell drehen müssen, um z.B. Vorwärts zu fliegen, oder um keine Überschläge zu machen. Das alles übernimmt bei der Flight-Ctrl der kleine schwarze Käfer namens ATMEGA644(P). Was geht aber in diesem Käfer vorsich, und wie errechnet er die Drehzahlen, damit das Ufo in der Luft bleibt ? Das werde ich heute mal mit ein paar einfachen Mathematischen Formeln versuchen zu erklären. BRBR Dazu erstmal ein paar Worte zu den Verwendeten Kurzbezeichnungen in der Formelübersicht:BRBR Null_Gyro_x => Bezeichnet den Nullwert des Gyros. Also der Wert, den der ATMEGA als Wert kennt, wenn sich der Gyro in Neutrallage befindet (keine Bewegung) BRMess_Gyro_x => Bezeichnet den Messwert, der vom Analog-Digitalwandler des ATMEGA geliefert wirdBR Diff_Gyro_x => Bezeichnet den Differnzwert des Gyros, wenn er sich in Bewegung befindet (Relativ zur Neutrallage)BR Verstärkung_Gyro_x => Bezeichnet den Verstärkungsfaktor des Gyros, mit dem der Mikrokopter härter oder weicher gemacht werden kannBRBR Stick_x => Geberwert, der von der Fernsteuerung übergeben wird BRGyromix_x => Berechneter Wert, aus Stickvorgabe und Gyro-DifferenzwertBR Motorx => Motor-Nummerierung (1 - 4 für 4 Motore)BRBR Alle Formeln in diesem Beispiel bauen aufeinander auf.BRBR Gyrowerte berechnen (Nick/Roll/Yaw) im Differential-Modus: BRBR Diff_Gyro_nick = (Null_Gyro_nick - Mess_Gyro_nick) * Verstärkung_Gyro_nickBR Diff_Gyro_roll = (Null_Gyro_roll - Mess_Gyro_roll) * Verstärkung_Gyro_rollBR Diff_Gyro_yaw = (Null_Gyro_yaw - Mess_Gyro_yaw) * Verstärkung_Gyro_yawBRBR Gyros auf die Kanäle Mischen: BRBR Gyromix_nick = Stick_nick - Diff_Gyro_nick (Wirkrichtungsumkehr: Gyro_nick = Stick_nick + Diff_Gyro_nick)BR Gyromix_roll = Stick_roll - Diff_Gyro_roll (Wirkrichtungsumkehr: Gyro_roll = Stick_roll + Diff_Gyro_roll) BRGyromix_yaw = Stick_yaw - Diff_Gyro_yaw (Wirkrichtungsumkehr: Gyro_yaw = Stick_yaw + Diff_Gyro_yaw)BRBR Kanalmischung auf die Motoren:BRBR Pitch:BRBR Motor1 = Stick_pitchBR Motor2 = Stick_pitchBR Motor3 = Stick_pitchBR Motor4 = Stick_pitch BRBR Yaw: BRBR Motor1 = Motor1 - Gyromix_yaw BRMotor2 = Motor2 + Gyromix_yawBR Motor3 = Motor3 - Gyromix_yawBR Motor4 = Motor4 + Gyromix_yaw BRBRNick:BRBR Motor1 = Motor1 - Gyromix_nick BRMotor3 = Motor3 + Gyromix_nick BRBR Roll: BRBR Motor2 = Motor2 - Gyromix_rollBR Motor4 = Motor4 + Gyromix_roll BRBR Bei diesem Berechnungsbeispiel wurde folgende Motoranordnung angenommen:BRBR Motor1 = vornBR Motor2 = rechtsBR Motor3 = hintenBR Motor4 = links BRBR Mit hilfe dieser Formeln ist es möglich in Nahezu jeder Programmiersprache einen Flugfähigen Quadrokopter zu bekommen.BRBR /!\ ToDo: hier gibt es noch etwas zu tun. ACC-Berechnungen einfügen. Formelbeispiel Kalman-Filter. Formelbeispiel PID-Regelung für Heading-Hold.

BR