Einrichten einer Multi-Vehicle PX4-Simulation#
Der PX4 SITL Stack wird mit einem Shell-Skript namens sitl_multiple_run.sh geliefert, das mehrere Instanzen der PX4-Binärdatei ausführt. Dies würde es dem SITL-Stack ermöglichen, Verbindungen von mehreren AirSim-Fahrzeugen über mehrere TCP-Ports ab Port 4560 zu empfangen. Das bereitgestellte Skript ermöglicht uns jedoch nicht die Anzeige der PX4-Konsole. Wenn Sie die Instanzen manuell ausführen und die Konsole jeder Instanz anzeigen möchten (empfohlen), lesen Sie diesen Abschnitt
Einrichten mehrerer Instanzen von PX4 Software-in-Loop#
Hinweis Sie müssen PX4 mit make px4_sitl_default none_iris bauen, wie hier gezeigt, bevor Sie versuchen, mehrere PX4-Instanzen auszuführen.
-
Gehen Sie von Ihrem Bash-Terminal (oder Cygwin) in das PX4 Firmware-Verzeichnis und führen Sie das Skript
sitl_multiple_run.shaus, während Sie die Anzahl der benötigten Fahrzeuge angeben
Dies startet mehrere Instanzen, die auf TCP-Ports von 4560 bis 4560+i lauschen, wobei 'i' die Anzahl der angegebenen Fahrzeuge/Instanzen istcd PX4-Autopilot ./Tools/sitl_multiple_run.sh 2 # 2 here is the number of vehicles/instances -
Sie sollten eine Bestätigungsmeldung erhalten, die besagt, dass alte Instanzen gestoppt und neue Instanzen gestartet wurden
killing running instances starting instance 0 in /cygdrive/c/PX4/home/PX4/Firmware/build/px4_sitl_default/instance_0 starting instance 1 in /cygdrive/c/PX4/home/PX4/Firmware/build/px4_sitl_default/instance_1 -
Bearbeiten Sie nun die AirSim-Einstellungen, um sicherzustellen, dass Sie die passenden TCP-Port-Einstellungen für die angegebene Anzahl von Fahrzeugen haben und dass beide Fahrzeuge nicht am selben Punkt spawnen.
Diese Einstellungen würden beispielsweise zwei PX4Multirotors spawnen, von denen einer versucht, sich mit PX4 SITL an Port
4560zu verbinden, und der andere an Port4561. Außerdem wird sichergestellt, dass die Fahrzeuge bei0,1,0und0,-1,0spawnen, um Kollisionen zu vermeiden
Sie können mehr als zwei Fahrzeuge hinzufügen, müssen aber sicherstellen, dass Sie den TCP-Port für jedes (d.h. Port für Fahrzeug 3 wäre{ "SettingsVersion": 1.2, "SimMode": "Multirotor", "Vehicles": { "Drone1": { "VehicleType": "PX4Multirotor", "UseSerial": false, "UseTcp": true, "TcpPort": 4560, "ControlPortLocal": 14540, "ControlPortRemote": 14580, "X": 0, "Y": 1, "Z": 0 }, "Drone2": { "VehicleType": "PX4Multirotor", "UseSerial": false, "UseTcp": true, "TcpPort": 4561, "ControlPortLocal": 14541, "ControlPortRemote": 14581, "X": 0, "Y": -1, "Z": 0 } } }4562usw.) anpassen und den Spawn-Punkt ändern. -
Starten Sie nun Ihre Unreal AirSim-Umgebung. Sie sollte sich über TCP mit SITL PX4 verbinden. Wenn Sie die Instanzen mit der PX4-Konsole sichtbar ausführen, sollten Sie viele Nachrichten von jedem SITL PX4-Fenster sehen. Insbesondere die folgenden Meldungen zeigen an, dass AirSim korrekt 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 Meldungen nicht sehen, überprüfen Sie Ihre Port-Einstellungen.
-
Sie sollten auch in der Lage sein, QGroundControl im SITL-Modus zu verwenden. Stellen Sie sicher, dass keine Pixhawk-Hardware angeschlossen ist, da QGroundControl diese sonst verwenden würde. Beachten Sie, dass wir, da wir keine physische Platine haben, keinen RC direkt daran anschließen können. Die Alternativen sind entweder die Verwendung eines Xbox 360 Controllers oder das Anschließen Ihres RC über USB (z.B. im Falle eines FrSky Taranis X9D Plus) oder über ein Trainer-USB-Kabel an Ihren PC. Dies lässt Ihren RC wie einen Joystick erscheinen. Sie müssen in QGroundControl zusätzliche Einstellungen vornehmen, um einen virtuellen Joystick für die RC-Steuerung zu verwenden. Sie müssen dies nicht tun, es sei denn, Sie planen, eine Drohne manuell in AirSim zu fliegen. Autonomes Fliegen über die Python-API erfordert keinen RC. Siehe
Keine Fernsteuerung.
Starten von SITL-Instanzen mit der PX4-Konsole#
Wenn Sie Ihre SITL-Instanzen starten und die PX4-Konsole anzeigen möchten, müssen Sie die Shell-Skripte verwenden, die Sie hier finden, anstatt sitl_multiple_run.sh. So würden Sie vorgehen
Hinweis Dieses Skript geht ebenfalls davon aus, dass PX4 mit make px4_sitl_default none_iris gebaut wurde, wie hier gezeigt, bevor Sie versuchen, mehrere PX4-Instanzen auszuführen.
- Gehen Sie von Ihrem Bash-Terminal (oder Cygwin) in das PX4-Verzeichnis und holen Sie sich die Skripte (legen Sie sie in einem Unterverzeichnis namens Scripts im PX4-Verzeichnis ab, wie gezeigt)
Hinweis Die Shell-Skripte erwarten, dass die Verzeichnissecd PX4 mkdir -p Scripts cd Scripts wget https://github.com/microsoft/AirSim/raw/main/PX4Scripts/sitl_kill.sh wget https://github.com/microsoft/AirSim/raw/main/PX4Scripts/run_airsim_sitl.shScriptsundFirmwareim selben übergeordneten Verzeichnis liegen. Möglicherweise müssen Sie die Skripte auch ausführbar machen, indem Siechmod +x sitl_kill.shundchmod +x run_airsim_sitl.shausführen. -
Führen Sie das Skript
sitl_kill.shaus, um alle aktiven PX4 SITL-Instanzen zu beenden./sitl_kill.sh -
Führen Sie das Skript
run_airsim_sitl.shaus und geben Sie an, welche Instanz Sie im aktuellen Terminalfenster ausführen möchten (die erste Instanz wird mit 0 nummeriert)./run_airsim_sitl.sh 0 # first instance = 0Sie sollten sehen, wie die PX4-Instanz startet und auf die AirSim-Verbindung wartet, wie es bei einer einzelnen Instanz der Fall wäre.
4. Öffnen Sie ein neues Terminal, wechseln Sie in das Scripts-Verzeichnis und starten Sie die nächste Instanz______ __ __ ___ | ___ \ \ \ / / / | | |_/ / \ V / / /| | | __/ / \ / /_| | | | / /^\ \ \___ | \_| \/ \/ |_/ px4 starting. INFO [px4] Calling startup script: /bin/sh /cygdrive/c/PX4/home/PX4/Firmware/etc/init.d-posix/rcS 0 INFO [dataman] Unknown restart, data manager file './dataman' size is 11798680 bytes INFO [simulator] Waiting for simulator to connect on TCP port 4560cd PX4 cd Scripts ./run_airsim_sitl.sh 1 # ,2,3,4,..,etc -
Wiederholen Sie Schritt 4 für so viele Instanzen, wie Sie starten möchten
-
Führen Sie Ihre Unreal AirSim-Umgebung aus. Sie sollte sich über TCP mit SITL PX4 verbinden (vorausgesetzt, Ihre settings.json-Datei hat die richtigen Ports).