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.