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 软件在环 中所示的步骤。