PX4 Software-in-Loop mit WSL 2#

Das Windows-Subsystem für Linux Version 2 verwendet eine virtuelle Maschine mit einer separaten IP-Adresse von Ihrem Windows-Host. Dies bedeutet, dass PX4 AirSim nicht über "localhost" finden kann, was das Standardverhalten für PX4 ist.

Sie werden feststellen, dass ipconfig unter Windows einen neuen Ethernet-Adapter für WSL zurückgibt, wie hier gezeigt (beachten Sie, dass vEthernet den Namen (WSL) hat).

Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::1192:f9a5:df88:53ba%44
   IPv4 Address. . . . . . . . . . . : 172.31.64.1
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :

Diese Adresse 172.31.64.1 ist die Adresse, die WSL 2 verwenden kann, um Ihren Windows-Host zu erreichen.

Ab diesem PX4-Änderungsantrag (korreliert mit Version v1.12.0-beta1 oder neuer) kann PX4 im SITL-Modus nun eine Verbindung zu AirSim über eine andere (entfernte) IP-Adresse herstellen. Um dies zu aktivieren, stellen Sie sicher, dass Sie eine PX4-Version mit dieser Korrektur haben und setzen Sie die folgende Umgebungsvariable in Linux:

export PX4_SIM_HOST_ADDR=172.31.64.1

Hinweis: Stellen Sie sicher, dass Sie die obige Adresse 172.31.64.1 an die von Ihrem ipconfig-Befehl angezeigte Adresse anpassen.

Öffnen Sie den eingehenden TCP-Port 4560 und den eingehenden UDP-Port 14540 über Ihre Firewall-Konfiguration.

Führen Sie nun auf der Linux-Seite ip address show aus und kopieren Sie die eth0 inet-Adresse. Diese sollte in etwa 172.31.66.156 lauten. Dies ist die Adresse, die Windows benötigt, um PX4 zu finden.

Bearbeiten Sie Ihre AirSim-Einstellungen und fügen Sie LocalHostIp hinzu, um AirSim anzuweisen, die Ethernet-Adapteradresse von WSL anstelle des Standardwerts localhost zu verwenden. Dadurch wird AirSim den TCP-Port auf diesem Adapter öffnen, auf den die PX4-Anwendung wartet. Weisen Sie AirSim außerdem an, den UDP-Kanal ControlIp zu verbinden, indem Sie ControlIp auf den magischen String remote setzen. Dies löst die Remote-IP-Adresse von WSL 2 auf, die sich im TCP-Socket befindet.

{
    "SettingsVersion": 1.2,
    "SimMode": "Multirotor",
    "ClockType": "SteppableClock",
    "Vehicles": {
        "PX4": {
            "VehicleType": "PX4Multirotor",
            "UseSerial": false,
            "LockStep": true,
            "UseTcp": true,
            "TcpPort": 4560,
            "ControlIp": "remote",
            "ControlPortLocal": 14540,
            "ControlPortRemote": 14580,
            "LocalHostIp": "172.31.64.1",
            "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
            }
        }
    }
}
Weitere Informationen finden Sie unter PX4 LockStep. Die Einstellung "Barometer" hält PX4 zufrieden, da das Standard-AirSim-Barometer etwas zu viel Rauschen erzeugt. Diese Einstellung dämpft dies etwas ab.

Wenn Ihr lokales Repository diesen PX4-Commit nicht enthält, bearbeiten Sie die Linux-Datei in ROMFS/px4fmu_common/init.d-posix/rcS und stellen Sie sicher, dass sie nach der Umgebungsvariable PX4_SIM_HOST_ADDR sucht und diese wie folgt an den PX4-Simulator weitergibt:

# If PX4_SIM_HOST_ADDR environment variable is empty use localhost.
if [ -z "${PX4_SIM_HOST_ADDR}" ]; then
    echo "PX4 SIM HOST: localhost"
    simulator start -c $simulator_tcp_port
else
    echo "PX4 SIM HOST: $PX4_SIM_HOST_ADDR"
    simulator start -t $PX4_SIM_HOST_ADDR $simulator_tcp_port
fi

Hinweis: Dieser Code ist möglicherweise bereits vorhanden, abhängig von der von Ihnen verwendeten PX4-Version.

Hinweis: Bitte haben Sie Geduld beim Warten auf die Nachricht.

INFO  [simulator] Simulator connected on TCP port 4560.

Es kann etwas länger dauern, die Remote-Verbindung herzustellen als mit localhost.

Sie können nun mit den Schritten fortfahren, die unter Einrichtung von PX4 Software-in-Loop beschrieben sind.