Air 的 PX4 设置

PX4 软件栈是一款开源且非常流行的飞行控制器,支持多种飞控板和传感器,并内置任务规划等高级功能。请访问 px4.io 了解更多信息。

警告

虽然所有版本的 AirSim 都经过 PX4 测试以确保兼容性,但设置 PX4 并非易事。除非您至少具备中级 PX4 协议栈的使用经验,否则我们建议您使用 simple_flight ,它现在是 AirSim 的默认设置。

支持的硬件

以下 Pixhawk 硬件已通过 Air 测试:

  1. Pixhawk PX4 2.4.8
  2. PixFalcon
  3. PixRacer
  4. Pixhawk 2.1
  5. Pixhawk 4 mini from Holybro
  6. Pixhawk 4 from Holybro

PX4 固件 1.11.2 版本也适用于 Pixhawk 4 设备。

设置 PX4 硬件在环

为此,您需要使用上面列出的支持设备之一。如果要进行手动飞行,您还需要遥控器和发射器。

  1. 请确保您的遥控接收器已与遥控发射器配对。将遥控发射器连接到飞控的遥控端口。更多信息请参阅您的遥控器手册和 PX4文档 。
  2. 下载 QGroundControl ,启动它并将你的飞行控制器连接到 USB 端口。
  3. 使用 QGroundControl 刷写最新的 PX4 飞行控制器协议栈。另请参阅 初始固件设置视频 。
  4. 在 QGroundControl 中,选择 HIL Quadrocopter X 机架,配置 Pixhawk 以进行 HIL 仿真。PX4 重启后,检查是否已选择“HIL Quadrocopter X”。
  5. 在 QGroundControl 中,转到“无线电(Radio)”选项卡并进行校准(确保遥控器已开启,并且接收器显示绑定指示灯)。
  6. 进入“飞行模式(Flight Mode)”选项卡,选择其中一个遥控器开关作为“模式通道(Mode Channel)”。然后,为该开关的两个位置分别设置(例如)“稳定(Stabilized)飞行模式”和“姿态(Attitude)飞行模式”。
  7. 前往 QGroundControl 的“调校”部分,并设置合适的数值。例如,对于 Fly Sky 的 FS-TH9X 遥控器,以下设置可提供更真实的操控感:悬停油门Throttle = mid+1 mark ,横滚和俯仰灵敏度 = mid-3 mark,高度和位置控制灵敏度 = mid-2 mark。
  8. 在 Air 设置 文件中,将 PX4 指定为您的载具配置,如下所示:
        {
            "SettingsVersion": 1.2,
            "SimMode": "Multirotor",
            "ClockType": "SteppableClock",
            "Vehicles": {
                "PX4": {
                    "VehicleType": "PX4Multirotor",
                    "UseSerial": true,
                    "LockStep": true,
                    "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模拟器使用的是 TCP 协议,因此我们需要添加"UseTcp": true,。另外,我们还启用了 LockStep 功能,更多信息请参阅 PX4 LockStep 文档。气压计Barometer设置能够让 PX4 正常工作,因为 Air 默认的气压计会产生过多的噪声。此设置可以稍微降低噪声,从而使 PX4 更快地锁定 GPS 信号。

完成上述设置后,您应该可以使用遥控器 (Remote Control, RC) 操控 Air 飞行。通常,您可以通过将遥控器的两根摇杆向下并向内拉合来启动飞行器。初始设置完成后,您无需再使用 QGroundControl。通常,稳定 Stabilized 模式(而非手动 Manual 模式)能为初学者提供更好的飞行体验。请参阅 PX4 基础飞行指南 。

您还可以通过 Python API 控制无人机。

请参阅 演示视频 和 Unreal Air 设置视频 ,其中展示了本文档中的所有设置步骤。

设置 PX4 软件在环(Software-in-Loop)

PX4 SITL 模式不需要您使用 Pixhawk 或 Pixracer 等单独的设备。事实上,PX4 团队推荐使用这种方式将 PX4 与模拟器配合使用。然而,这种方式的设置确实比较复杂。请参阅 此专门页面 了解如何在 SITL 模式下设置 PX4。

常见问题解答

无人机飞行不正常,总是“乱飞”。

造成这种情况的原因有很多。首先,请确保无人机在启动模拟器时不会从高处坠落。如果您创建了自定义的引擎环境,并且玩家起始点设置得过高,则可能会出现这种情况。似乎当这种情况发生时,PX4 的内部校准会出错。

您 还应该使用 QGroundControl ,并确保您可以在 QGroundControl 中正确解锁和起飞。

最后,在极少数情况下,这也可能是机器性能问题,请检查您的 硬盘性能 。

我们的代码已使用 PX4 固件 进行测试。我们尚未测试 Arducopter 或其他 MAVLink 实现。部分飞行 API 会在 MAV_CMD_DO_SET_MODE 消息中使用 PX4 自定义模式(例如 PX4_CUSTOM_MAIN_MODE_AUTO)。

它找不到我的 Pixhawk 硬件

检查 settings.json 文件中是否存在这样一行:"SerialPort":"*,115200"。这里的星号表示“查找任何看起来像 Pixhawk 设备的串口”,但这并非适用于所有类型的 Pixhawk 硬件。因此,在 Windows 系统中,您可以使用设备管理器找到实际的 COM 端口,在Ports (COM & LPT) 下查找,插入设备并查看显示的新 COM 端口。假设您看到一个名为USB Serial Port (COM5)的新端口。那么,请将 SerialPort 设置更改为:"SerialPort":"COM5,115200"。

在 Linux 系统中,可以通过运行 ls /dev/serial/by-id 命令来查找设备。如果看到类似 usb-3D_Robotics_PX4_FMU_v2.x_0-if00 的设备名称,就可以使用该名称进行连接,例如:SerialPort":"/dev/serial/by-id/usb-3D_Robotics_PX4_FMU_v2.x_0-if00"。需要注意的是,这个长名称实际上是指向实际名称的符号链接。使用 ls -l ... 命令可以找到该符号链接,它通常类似于 /dev/ttyACM0,因此也可以使用 SerialPort":"/dev/ttyACM0,115200"。但是,这种映射方式与 Windows 类似,它是自动分配的,并且可能会发生变化。而长名称即使在实际的 TTY 串口设备映射发生变化时仍然有效。

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

如果 PX4 尚未计算出返航位置,您就尝试起飞,就会发生这种情况。PX4 会在接收到 GPS 信号后报告返航位置,届时您将看到以下消息:

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

但在此之前,PX4 仍会拒绝起飞指令。

当我发出指令让无人机执行某项任务时,它总是会降落。

例如,您使用命令 DroneShell moveToPosition -z -20 -x 50 -y 0,程序会执行该命令,但当无人机到达目标位置时,它却开始降落。这是 PX4 在离线模式完成后默认的行为。要让无人机悬停,请设置以下 PX4 参数:

param set COM_OBL_ACT 1

我收到消息长度不匹配的错误。

您可能需要在 QGC 中将 MAV_PROTO_VER 参数设置为“始终使用版本 1(Always use version 1)”。请参阅 此问题 了解更多详情。