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.

  1. Gehen Sie von Ihrem Bash-Terminal (oder Cygwin) in das PX4 Firmware-Verzeichnis und führen Sie das Skript sitl_multiple_run.sh aus, während Sie die Anzahl der benötigten Fahrzeuge angeben

    cd PX4-Autopilot
    ./Tools/sitl_multiple_run.sh 2    # 2 here is the number of vehicles/instances 
    Dies startet mehrere Instanzen, die auf TCP-Ports von 4560 bis 4560+i lauschen, wobei 'i' die Anzahl der angegebenen Fahrzeuge/Instanzen ist

  2. 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

  3. 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 4560 zu verbinden, und der andere an Port 4561. Außerdem wird sichergestellt, dass die Fahrzeuge bei 0,1,0 und 0,-1,0 spawnen, um Kollisionen zu vermeiden

    {
        "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
            }
        }
      }
    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 4562 usw.) anpassen und den Spawn-Punkt ändern.

  4. 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 fusion

    Wenn Sie diese Meldungen nicht sehen, überprüfen Sie Ihre Port-Einstellungen.

  5. 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.

  1. 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)
    cd 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.sh
    Hinweis Die Shell-Skripte erwarten, dass die Verzeichnisse Scripts und Firmware im selben übergeordneten Verzeichnis liegen. Möglicherweise müssen Sie die Skripte auch ausführbar machen, indem Sie chmod +x sitl_kill.sh und chmod +x run_airsim_sitl.sh ausführen.
  2. Führen Sie das Skript sitl_kill.sh aus, um alle aktiven PX4 SITL-Instanzen zu beenden

    ./sitl_kill.sh

  3. Führen Sie das Skript run_airsim_sitl.sh aus 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 = 0

    Sie sollten sehen, wie die PX4-Instanz startet und auf die AirSim-Verbindung wartet, wie es bei einer einzelnen Instanz der Fall wäre.

    ______  __   __    ___
    | ___ \ \ \ / /   /   |
    | |_/ /  \ 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 4560
    4. Öffnen Sie ein neues Terminal, wechseln Sie in das Scripts-Verzeichnis und starten Sie die nächste Instanz
    cd PX4
    cd Scripts
    ./run_airsim_sitl.sh 1  # ,2,3,4,..,etc

  4. Wiederholen Sie Schritt 4 für so viele Instanzen, wie Sie starten möchten

  5. 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).