设置 PX4 软件在环#

PX4 软件提供了一个在 Linux 中运行的“软件在环”仿真 (SITL) 版本。如果你使用的是 Windows,可以使用 Cygwin 工具链,或者使用 适用于 Linux 的 Windows 子系统并遵循 PX4 Linux 工具链设置。

如果您使用的是 WSL2,请阅读这些附加说明

请注意,每次停止 Unreal 应用程序时,都必须重新启动 px4 应用程序。

  1. 在你的 bash 终端中,按照 Linux 的这些步骤,并遵循 NuttX based hardware 下的所有说明来安装先决条件。我们还提供了我们自己的 PX4 构建说明,它更简洁地说明了我们到底需要什么。

  2. 获取 PX4 源代码并构建 PX4 的 posix SITL 版本

    mkdir -p PX4
    cd PX4
    git clone https://github.com/PX4/PX4-Autopilot.git --recursive
    bash ./PX4-Autopilot/Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools
    cd PX4-Autopilot
    然后从 https://github.com/PX4/PX4-Autopilot/releases 找到最新的稳定版本并检出与该版本匹配的源代码,例如
    git checkout v1.11.3

  3. 使用以下命令在 SITL 模式下构建并启动 PX4 固件

    make px4_sitl_default none_iris
    如果您使用的是旧版本 v1.8.*,请改用此命令:make posix_sitl_ekf2 none_iris

  4. 您应该会看到一条消息,提示 SITL PX4 应用程序正在等待模拟器 (AirSim) 连接。您还将看到有关为 PX4 应用程序配置的 mavlink 连接端口的信息。默认端口最近已更改,请仔细检查它们以确保 AirSim 设置正确。

    INFO  [simulator] Waiting for simulator to connect on TCP port 4560
    INFO  [init] Mixer: etc/mixers/quad_w.main.mix on /dev/pwm_output0
    INFO  [mavlink] mode: Normal, data rate: 4000000 B/s on udp port 14570 remote port 14550
    INFO  [mavlink] mode: Onboard, data rate: 4000000 B/s on udp port 14580 remote port 14540

    注意:这也是一个交互式 PX4 控制台,键入 help 以查看您可以在此处输入的命令列表。它们大多是低级 PX4 命令,但其中一些对于调试可能很有用。

  5. 现在编辑 AirSim 设置文件,确保您有匹配的 UDP 和 TCP 端口设置

    {
        "SettingsVersion": 1.2,
        "SimMode": "Multirotor",
        "ClockType": "SteppableClock",
        "Vehicles": {
            "PX4": {
                "VehicleType": "PX4Multirotor",
                "UseSerial": false,
                "LockStep": true,
                "UseTcp": true,
                "TcpPort": 4560,
                "ControlPortLocal": 14540,
                "ControlPortRemote": 14580,
                "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 [simulator] 正在使用 TCP,这就是我们需要添加:"UseTcp": true, 的原因。请注意,我们还启用了 LockStep,有关更多信息,请参阅 PX4 LockStepBarometer 设置使 PX4 保持良好状态,因为默认的 AirSim 气压计会产生太多噪音。此设置将其限制了一点,从而使 PX4 能够更快地实现 GPS 锁定。

  6. 使用防火墙配置打开入站 TCP 端口 4560 和入站 UDP 端口 14540。

  7. 现在运行您的 Unreal AirSim 环境,它应该通过 TCP 连接到 SITL PX4。您应该会看到 SITL PX4 窗口中显示大量消息。特别是,以下消息告诉您 AirSim 已正确连接且 GPS 融合稳定

    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

    如果您没有看到这些消息,请检查您的端口设置。

  8. 您还应该能够将 QGroundControl 与 SITL 模式一起使用。确保没有插入 Pixhawk 硬件,否则 QGroundControl 会选择使用它。请注意,由于我们没有物理板,遥控器无法直接连接到它。因此,替代方案是使用 Xbox 360 控制器,或者使用 USB(例如,对于 FrSky Taranis X9D Plus)或使用训练器 USB 线缆将遥控器连接到您的 PC。这使您的遥控器看起来像一个操纵杆。您需要在 QGroundControl 中进行额外设置才能使用虚拟操纵杆进行遥控。除非您打算在 AirSim 中手动驾驶无人机,否则您不需要这样做。使用 Python API 的自主飞行不需要遥控器,请参阅下面的 No Remote Control

设置 GPS 原点#

请注意,上述设置在 settings.json 文件的 params 部分中提供

    "LPE_LAT": 47.641468,
    "LPE_LON": -122.140165,

PX4 SITL 模式需要配置以使返航点正确。返航点需要设置为与 OriginGeopoint 中定义的坐标相同。

您还可以在 SITL PX4 控制台窗口中运行以下命令,以检查这些值是否已正确设置。

param show LPE_LAT
param show LPE_LON

平滑 Offboard 转换#

请注意,上述设置在 settings.json 文件的 params 部分中提供

    "COM_OBL_ACT": 1

这会告诉无人机在每个 Offboard 控制命令完成后自动悬停(默认设置为降落)。悬停是多个 Offboard 命令之间更平滑的过渡。您可以通过运行以下 PX4 控制台命令来检查此设置

param show COM_OBL_ACT

检查返航点#

如果您使用 DroneShell 执行命令(布防、起飞等),则应等到设置了返航点。您将看到 PX4 SITL 控制台输出此消息

INFO  [commander] home: 47.6414680, -122.1401672, 119.99
INFO  [tone_alarm] home_set

现在 DroneShell 的 'pos' 命令应该报告此位置,并且 PX4 应该接受这些命令。如果您在没有返航点的情况下尝试起飞,您将看到消息

WARN  [commander] Takeoff denied, disarm and re-try

设置返航点后,检查 'pos' 命令报告的局部位置

Local position: x=-0.0326988, y=0.00656854, z=5.48506

如果 z 坐标很大,那么起飞可能无法按预期工作。重置 SITL 和模拟应该可以解决这个问题。

WSL 2#

适用于 Linux 的 Windows 子系统版本 2 在虚拟机中运行。这需要额外的设置 - 请参阅附加说明

无遥控器#

请注意,上述设置在 settings.json 文件的 params 部分中提供

    "NAV_RCL_ACT": 0,
    "NAV_DLL_ACT": 0,

如果您打算在没有遥控器的情况下(例如,仅使用 python 脚本)驾驶 SITL 模式的 PX4,则需要此项。这些参数阻止 PX4 在每次移动命令完成时触发“故障安全模式开启”。您可以使用以下 PX4 命令检查这些值是否已正确设置

param show NAV_RCL_ACT
param show NAV_DLL_ACT

注意:在真实的无人机上请勿这样做,因为在没有这些故障安全措施的情况下飞行太危险了。

手动设置参数#

您还可以在 PX4 控制台中运行以下命令来手动设置所有这些参数

param set NAV_RCL_ACT 0
param set NAV_DLL_ACT 0

设置多机仿真#

您可以使用 AirSim 在 SITL 模式下模拟多架无人机。但是,这需要设置多个 PX4 固件模拟器实例,以便能够监听每个飞行器在单独 TCP 端口(4560、4561 等)上的连接。有关在 SITL 模式下设置 PX4 多个实例的说明,请参阅此专用页面

使用 VirtualBox Ubuntu#

如果您想在 VirtualBox Ubuntu 机器中运行上述 posix_sitl,那么它将具有与 localhost 不同的 IP 地址。因此,在这种情况下,您需要编辑 设置文件,并将 UdpIp 和 SitlIp 更改为您的虚拟机的 IP 地址,并将 LocalIpAddress 设置为运行 Unreal 引擎的主机机器的地址。

遥控器#

有多种选项可以使用遥控器或操纵杆(如 Xbox 游戏手柄)来驾驶模拟无人机。请参阅遥控器