PX4 软件在环与 WSL 2#
适用于 Linux 的 Windows 子系统版本 2 使用一个虚拟机,该虚拟机具有与 Windows 主机不同的 IP 地址。这意味着 PX4 无法使用“localhost”(PX4 的默认行为)找到 AirSim。
您会注意到,在 Windows 上,ipconfig
会为 WSL 返回一个新的以太网适配器,如下所示(请注意 vEthernet 名称中包含 (WSL)
)
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 . . . . . . . . . :
此地址 172.31.64.1
是 WSL 2 可以用来访问 Windows 主机系统的地址。
从这个 PX4 更改请求(对应于 v1.12.0-beta1 或更高版本)开始,SITL 模式下的 PX4 现在可以连接到不同(远程)IP 地址上的 AirSim。要启用此功能,请确保您拥有包含此修复的 PX4 版本,并在 Linux 中设置以下环境变量
export PX4_SIM_HOST_ADDR=172.31.64.1
注意: 请务必将上述地址 172.31.64.1
更新为与您的 ipconfig
命令所显示内容匹配。
使用防火墙配置打开传入 TCP 端口 4560 和传入 UDP 端口 14540。
现在在 Linux 端运行 ip address show
并复制 eth0 inet
地址,它应该类似于 172.31.66.156
。这是 Windows 需要知道的才能找到 PX4 的地址。
编辑您的 AirSim 设置 文件并添加 LocalHostIp
,以告诉 AirSim 使用 WSL 以太网适配器地址而不是默认的 localhost
。这将导致 AirSim 在该适配器上打开 TCP 端口,该端口是 PX4 应用程序将寻找的地址。同时通过将 ControlIp
设置为魔术字符串 remote
,告诉 AirSim 连接 ControlIp
UDP 通道。这会解析到 TCP 套接字中找到的 WSL 2 远程 IP 地址。
{
"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
}
}
}
}
有关更多信息,请参阅 PX4 锁步。“气压计”设置让 PX4 正常工作,因为默认的 AirSim 气压计会产生太多噪音。此设置将其稍微抑制了一下。
如果您的本地仓库不包含 此 PX4 提交,请编辑 ROMFS/px4fmu_common/init.d-posix/rcS
中的 Linux 文件,并确保它正在寻找 PX4_SIM_HOST_ADDR
环境变量并将其传递给 PX4 模拟器,如下所示
# 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
注意: 根据您使用的 PX4 版本,此代码可能已存在。
注意: 请耐心等待消息
INFO [simulator] Simulator connected on TCP port 4560.
与 localhost
相比,建立远程连接可能需要更长的时间。
现在您可以继续执行 设置 PX4 软件在环 中所示的步骤。