PX4 Software-in-Loop einrichten#
Die PX4 Software bietet eine "Software-in-Loop" (SITL) Simulationsversion ihres Stacks, die unter Linux läuft. Wenn Sie Windows verwenden, können Sie die Cygwin Toolchain verwenden oder das Windows-Subsystem für Linux nutzen und der PX4 Linux Toolchain-Einrichtung folgen.
Wenn Sie WSL2 verwenden, lesen Sie bitte diese zusätzlichen Anweisungen.
Beachten Sie, dass Sie die Anwendung px4 jedes Mal neu starten müssen, wenn Sie die Unreal-App beenden.
-
Befolgen Sie in Ihrem Bash-Terminal diese Schritte für Linux und befolgen Sie alle Anweisungen unter
NuttX based hardware, um die Voraussetzungen zu installieren. Wir haben auch unsere eigene Kopie der PX4 Build-Anweisungen beigefügt, die etwas prägnanter darlegt, was wir genau benötigen. -
Holen Sie sich den PX4-Quellcode und bauen Sie die posix SITL-Version von PX4
Und finden Sie die neueste stabile Version von https://github.com/PX4/PX4-Autopilot/releases und checken Sie den Quellcode dieser Version aus, zum Beispielmkdir -p PX4 cd PX4 git clone https://github.com/PX4/PX4-Autopilot.git --recursive bash ./PX4-Autopilot/Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools cd PX4-Autopilotgit checkout v1.11.3 -
Verwenden Sie den folgenden Befehl, um die PX4-Firmware im SITL-Modus zu bauen und zu starten
Wenn Sie die ältere Version v1.8.* verwenden, verwenden Sie stattdessen diesen Befehl:make px4_sitl_default none_irismake posix_sitl_ekf2 none_iris. -
Sie sollten eine Nachricht sehen, dass die SITL PX4-App darauf wartet, dass der Simulator (AirSim) eine Verbindung herstellt. Sie sehen auch Informationen darüber, welche Ports für die Mavlink-Verbindung zur PX4-App konfiguriert sind. Die Standardports haben sich kürzlich geändert, überprüfen Sie sie daher genau, um sicherzustellen, dass die AirSim-Einstellungen korrekt sind.
INFO [simulator] Waiting for simulator to connect on TCP port 4560 INFO [init] Mixer: etc/mixers/quad_w.main.mix on /dev/pwm_output0 INFO [mavlink] mode: Normal, data rate: 4000000 B/s on udp port 14570 remote port 14550 INFO [mavlink] mode: Onboard, data rate: 4000000 B/s on udp port 14580 remote port 14540Hinweis: Dies ist auch eine interaktive PX4-Konsole. Geben Sie
helpein, um die Liste der Befehle anzuzeigen, die Sie hier eingeben können. Es handelt sich hauptsächlich um Low-Level-PX4-Befehle, aber einige davon können für das Debugging nützlich sein. -
Bearbeiten Sie nun die AirSim-Einstellungen, um sicherzustellen, dass Sie übereinstimmende UDP- und TCP-Porteinstellungen haben
Beachten Sie, dass der PX4{ "SettingsVersion": 1.2, "SimMode": "Multirotor", "ClockType": "SteppableClock", "Vehicles": { "PX4": { "VehicleType": "PX4Multirotor", "UseSerial": false, "LockStep": true, "UseTcp": true, "TcpPort": 4560, "ControlPortLocal": 14540, "ControlPortRemote": 14580, "Sensors":{ "Barometer":{ "SensorType": 1, "Enabled": true, "PressureFactorSigma": 0.0001825 } }, "Parameters": { "NAV_RCL_ACT": 0, "NAV_DLL_ACT": 0, "COM_OBL_ACT": 1, "LPE_LAT": 47.641468, "LPE_LON": -122.140165 } } } }[simulator]TCP verwendet, weshalb wir hinzufügen müssen:"UseTcp": true,. Beachten Sie, dass wir auchLockStepaktivieren, siehe PX4 LockStep für weitere Informationen. Die EinstellungBarometerhält PX4 zufrieden, da der standardmäßige AirSim-Barometer etwas zu viel Rauschen erzeugt. Diese Einstellung dämpft dies etwas ab, was es PX4 ermöglicht, schneller einen GPS-Lock zu erreichen. -
Öffnen Sie den eingehenden TCP-Port 4560 und den eingehenden UDP-Port 14540 über Ihre Firewall-Konfiguration.
-
Starten Sie nun Ihre Unreal AirSim-Umgebung. Sie sollte sich über TCP mit SITL PX4 verbinden. Sie sollten eine Menge Nachrichten vom SITL PX4-Fenster sehen. Insbesondere die folgenden Nachrichten zeigen an, dass AirSim ordnungsgemäß verbunden ist und die GPS-Fusion stabil ist
INFO [simulator] Simulator connected on UDP port 14560 INFO [mavlink] partner IP: 127.0.0.1 INFO [ecl/EKF] EKF GPS checks passed (WGS-84 origin set) INFO [ecl/EKF] EKF commencing GPS fusionWenn Sie diese Nachrichten nicht sehen, überprüfen Sie Ihre Port-Einstellungen.
-
Sie sollten QGroundControl auch im SITL-Modus verwenden können. Stellen Sie sicher, dass keine Pixhawk-Hardware angeschlossen ist, da QGroundControl sonst diese stattdessen verwendet. Beachten Sie, dass wir keine physische Platine haben, sodass eine RC-Fernsteuerung nicht direkt daran angeschlossen werden kann. Alternativen sind daher entweder die Verwendung eines XBox 360 Controllers oder die Verbindung Ihrer RC über USB (z. B. im Falle eines FrSky Taranis X9D Plus) oder über ein Trainer-USB-Kabel zu Ihrem PC. Dies lässt Ihre RC wie einen Joystick erscheinen. Sie müssen zusätzliche Einstellungen in QGroundControl vornehmen, um einen virtuellen Joystick für die RC-Steuerung zu verwenden. Dies ist nur erforderlich, wenn Sie planen, eine Drohne manuell in AirSim zu fliegen. Der autonome Flug über die Python-API erfordert keine RC. Siehe
Keine Fernsteuerungunten.
GPS-Ursprung festlegen#
Beachten Sie, dass die obigen Einstellungen im Abschnitt params der Datei settings.json bereitgestellt werden
"LPE_LAT": 47.641468,
"LPE_LON": -122.140165,
Der PX4 SITL-Modus muss konfiguriert werden, um den Home-Standort korrekt zu erhalten. Der Home-Standort muss auf dieselben Koordinaten gesetzt werden, die in OriginGeopoint definiert sind.
Sie können auch Folgendes im SITL PX4-Konsolenfenster ausführen, um zu überprüfen, ob diese Werte korrekt gesetzt sind.
param show LPE_LAT
param show LPE_LON
Sanfte Übergänge im Offboard-Modus#
Beachten Sie, dass die obige Einstellung im Abschnitt params der Datei settings.json bereitgestellt wird
"COM_OBL_ACT": 1
Dies weist die Drohne an, nach jedem Abschluss eines Offboard-Steuerungsbefehls automatisch zu schweben (die Standardeinstellung ist Landung). Das Schweben ermöglicht einen sanfteren Übergang zwischen mehreren Offboard-Befehlen. Sie können diese Einstellung überprüfen, indem Sie den folgenden PX4-Konsolenbefehl ausführen
param show COM_OBL_ACT
Home-Position überprüfen#
Wenn Sie DroneShell verwenden, um Befehle auszuführen (arm, takeoff, etc.), sollten Sie warten, bis die Home-Position gesetzt ist. Sie werden sehen, wie die PX4 SITL-Konsole diese Meldung ausgibt
INFO [commander] home: 47.6414680, -122.1401672, 119.99
INFO [tone_alarm] home_set
Nun sollte der DroneShell-Befehl 'pos' diese Position melden und die Befehle sollten von PX4 akzeptiert werden. Wenn Sie versuchen abzuheben, ohne eine Home-Position zu haben, sehen Sie die Meldung
WARN [commander] Takeoff denied, disarm and re-try
Nachdem die Home-Position gesetzt wurde, überprüfen Sie die lokale Position, die vom 'pos'-Befehl gemeldet wird
Local position: x=-0.0326988, y=0.00656854, z=5.48506
Wenn die z-Koordinate groß ist, wie hier, funktioniert das Abheben möglicherweise nicht wie erwartet. Das Zurücksetzen von SITL und Simulation sollte dieses Problem beheben.
WSL 2#
Das Windows-Subsystem für Linux Version 2 läuft in einer virtuellen Maschine. Dies erfordert eine zusätzliche Einrichtung – siehe zusätzliche Anweisungen.
Keine Fernsteuerung#
Beachten Sie, dass die obige Einstellung im Abschnitt params der Datei settings.json bereitgestellt wird
"NAV_RCL_ACT": 0,
"NAV_DLL_ACT": 0,
Dies ist erforderlich, wenn Sie planen, den PX4 im SITL-Modus ohne Fernsteuerung zu fliegen, z. B. nur mit Python-Skripten. Diese Parameter verhindern, dass PX4 jedes Mal den "Failsafe-Modus" auslöst, wenn ein Bewegungsbefehl abgeschlossen ist. Sie können den folgenden PX4-Befehl verwenden, um zu überprüfen, ob diese Werte korrekt gesetzt sind
param show NAV_RCL_ACT
param show NAV_DLL_ACT
HINWEIS: Tun Sie dies NICHT bei einer echten Drohne, da es zu gefährlich ist, ohne diese Failsafe-Maßnahmen zu fliegen.
Parameter manuell setzen#
Sie können auch Folgendes in der PX4-Konsole ausführen, um alle diese Parameter manuell zu setzen
param set NAV_RCL_ACT 0
param set NAV_DLL_ACT 0
Einrichtung der Multi-Fahrzeug-Simulation#
Sie können mehrere Drohnen im SITL-Modus mit AirSim simulieren. Dies erfordert jedoch die Einrichtung mehrerer Instanzen des PX4-Firmware-Simulators, um für die Verbindung jedes Fahrzeugs auf einem separaten TCP-Port (4560, 4561 usw.) lauschen zu können. Bitte sehen Sie sich diese dedizierte Seite für Anweisungen zur Einrichtung mehrerer PX4-Instanzen im SITL-Modus an.
Verwendung von VirtualBox Ubuntu#
Wenn Sie den obigen posix_sitl in einer VirtualBox Ubuntu-Maschine ausführen möchten, hat diese eine andere IP-Adresse als localhost. In diesem Fall müssen Sie die Einstellungsdatei bearbeiten und UdpIp und SitlIp auf die IP-Adresse Ihrer virtuellen Maschine setzen und LocalIpAddress auf die Adresse Ihres Host-Rechners setzen, auf dem die Unreal Engine ausgeführt wird.
Fernsteuerung#
Es gibt mehrere Optionen, um die simulierte Drohne mit einer Fernsteuerung oder einem Joystick wie einem Xbox-Gamepad zu fliegen. Siehe Fernsteuerungen