simple_flight#

Wenn Sie nicht wissen, was ein Flugregler tut, sehen Sie sich What is Flight Controller? an.

AirSim verfügt über einen integrierten Flugregler namens simple_flight, der standardmäßig verwendet wird. Sie müssen nichts weiter tun, um ihn zu verwenden oder zu konfigurieren. AirSim unterstützt auch PX4 als weiteren Flugregler für fortgeschrittene Benutzer. In Zukunft planen wir auch die Unterstützung von ROSFlight und Hackflight.

Vorteile#

Der Vorteil der Verwendung von simple_flight ist, dass keinerlei zusätzliche Einrichtung erforderlich ist und es "einfach funktioniert". Außerdem verwendet simple_flight eine schaltbare Uhr, was bedeutet, dass Sie die Simulation anhalten können und die Dinge nicht den Launen einer hochvariablen, niedrigpräzisen Uhr ausgeliefert sind, die das Betriebssystem bereitstellt. Darüber hinaus ist simple_flight einfach, plattformübergreifend und besteht zu 100 % aus header-only C++-Code ohne Abhängigkeiten, was bedeutet, dass Sie buchstäblich zwischen dem Simulator und dem Flugregler-Code innerhalb desselben Codebases wechseln können!

Design#

Normalerweise werden Flugregler für die Ausführung auf tatsächlicher Hardware von Fahrzeugen entwickelt, und ihre Unterstützung für die Ausführung in Simulatoren variiert stark. Sie sind oft für Nicht-Experten ziemlich schwierig zu konfigurieren und haben typischerweise einen komplexen Build, dem meist plattformübergreifende Unterstützung fehlt. All diese Probleme haben eine bedeutende Rolle beim Design von simple_flight gespielt.

simple_flight wurde von Grund auf als Bibliothek mit einer sauberen Schnittstelle konzipiert, die sowohl auf dem Fahrzeug als auch im Simulator funktionieren kann. Das Kernprinzip ist, dass der Flugregler keine Möglichkeit hat, einen speziellen Simulationsmodus anzugeben, und daher auch keine Möglichkeit hat zu wissen, ob er als Simulation oder als echtes Fahrzeug läuft. Wir betrachten Flugregler daher einfach als eine Sammlung von Algorithmen, die in einer Bibliothek verpackt sind. Ein weiterer wichtiger Schwerpunkt ist die Entwicklung dieses Codes als abhängigkeitsfreier, header-only, reiner Standard-C++11-Code. Das bedeutet, dass keine spezielle Kompilierung erforderlich ist, um simple_flight zu kompilieren. Sie kopieren einfach seinen Quellcode in jedes Projekt, das Sie wünschen, und es funktioniert einfach.

Steuerung#

simple_flight kann Fahrzeuge steuern, indem es die gewünschten Eingaben als Winkelgeschwindigkeit, Winkelposition, Geschwindigkeit oder Position entgegennimmt. Jede Steuereachse kann mit einem dieser Modi angegeben werden. Intern verwendet simple_flight eine Kaskade von PID-Reglern, um schließlich Aktuatorsignale zu generieren. Das bedeutet, dass der Positions-PID den Geschwindigkeits-PID antreibt, der wiederum den Winkelpositions-PID antreibt, der schließlich den Winkelgeschwindigkeits-PID antreibt.

Zustandsschätzung#

In der aktuellen Version verwenden wir die Grundwahrheit des Simulators für unsere Zustandsschätzung. Wir planen, in naher Zukunft einen komplementären Filter-basierten Zustandsschätzer für Winkelgeschwindigkeit und Ausrichtung unter Verwendung von 2 Sensoren (Gyroskop, Beschleunigungsmesser) hinzuzufügen. Langfristig planen wir die Integration einer weiteren Bibliothek zur Schätzung von Geschwindigkeit und Position unter Verwendung von 4 Sensoren (Gyroskop, Beschleunigungsmesser, Magnetometer und Barometer) mithilfe eines Extended Kalman Filters (EKF). Wenn Sie Erfahrung in diesem Bereich haben, ermutigen wir Sie, sich mit uns zu beschäftigen und beizutragen!

Unterstützte Boards#

Derzeit haben wir simple_flight-Schnittstellen für das simulierte Board implementiert. Wir planen, es für das Pixhawk V2-Board und möglicherweise für das Naze32-Board zu implementieren. Wir gehen davon aus, dass unser gesamter Code unverändert bleibt und die Implementierung hauptsächlich das Hinzufügen von Treibern für verschiedene Sensoren, die Handhabung von ISRs und die Verwaltung anderer Board-spezifischer Details umfassen würde. Wenn Sie Erfahrung in diesem Bereich haben, ermutigen wir Sie, sich mit uns zu beschäftigen und beizutragen!

Konfiguration#

Damit AirSim simple_flight verwendet, können Sie dies in settings.json wie unten gezeigt angeben. Beachten Sie, dass dies der Standard ist, sodass Sie dies nicht explizit tun müssen.

"Vehicles": {
    "SimpleFlight": {
      "VehicleType": "SimpleFlight",
    }
}

Standardmäßig ist ein Fahrzeug, das simple_flight verwendet, bereits scharfgeschaltet, weshalb Sie seine Propeller drehen sehen würden. Wenn Sie dies jedoch nicht wünschen, setzen Sie DefaultVehicleState auf Inactive, wie hier gezeigt

"Vehicles": {
    "SimpleFlight": {
      "VehicleType": "SimpleFlight",
      "DefaultVehicleState": "Inactive"
    }
}

In diesem Fall müssen Sie entweder manuell scharfschalten, indem Sie die RC-Sticks in die nach unten/innen gerichtete Position bringen, oder die APIs verwenden.

Aus Sicherheitsgründen verbieten Flugregler die API-Steuerung, es sei denn, ein menschlicher Bediener hat deren Verwendung über einen Schalter an seiner Fernbedienung zugestimmt. Auch wenn die RC-Steuerung verloren geht, sollte das Fahrzeug aus Sicherheitsgründen die API-Steuerung deaktivieren und in den Schwebemodus wechseln. Um die Dinge etwas zu vereinfachen, ermöglicht simple_flight standardmäßig die API-Steuerung ohne menschliche Zustimmung über RC und auch dann, wenn kein RC erkannt wird. Sie können dies jedoch mit der folgenden Einstellung ändern

"Vehicles": {
    "SimpleFlight": {
      "VehicleType": "SimpleFlight",

      "AllowAPIAlways": true,
      "RC": {
        "RemoteControlID": 0,      
        "AllowAPIWhenDisconnected": true
      }
    }
}

Schließlich verwendet simple_flight standardmäßig eine schaltbare Uhr, was bedeutet, dass die Uhr fortschreitet, wenn der Simulator sie zum Fortschreiten auffordert (im Gegensatz zur Wanduhr, die sich streng nach dem Verstreichen der Zeit fortbewegt). Das bedeutet, dass die Uhr angehalten werden kann, z. B. wenn der Code auf einen Haltepunkt trifft, und es gibt keine Varianz bei der Uhr (Uhr-APIs, die von Betriebssystemen bereitgestellt werden, können erhebliche Varianz aufweisen, es sei denn, es handelt sich um ein "Echtzeit"-Betriebssystem). Wenn Sie möchten, dass simple_flight stattdessen eine Wanduhr verwendet, verwenden Sie die folgenden Einstellungen

  "ClockType": "ScalableClock"