AirSim 的 PX4 设置#
PX4 软件栈是一个开源且非常流行的飞行控制器,支持各种电路板和传感器,并内置了更高层次任务(例如任务规划)的功能。请访问 px4.io 获取更多信息。
警告:虽然所有 AirSim 版本都经过 PX4 测试以确保支持,但设置 PX4 并非易事。除非您至少具有 PX4 栈的中级经验,否则我们建议您使用 simple_flight,它现在是 AirSim 中的默认设置。
支持的硬件#
以下 Pixhawk 硬件已通过 AirSim 测试
PX4 固件的 1.11.2 版也适用于 Pixhawk 4 设备。
设置 PX4 硬件在环#
为此,您需要上面列出的受支持设备之一。对于手动飞行,您还需要遥控器 + 发射器。
- 确保您的遥控接收器与遥控发射器绑定。将遥控发射器连接到飞行控制器的遥控端口。有关更多信息,请参阅您的遥控手册和 PX4 文档。
- 下载 QGroundControl,启动它并将您的飞行控制器连接到 USB 端口。
- 使用 QGroundControl 刷写最新的 PX4 飞行栈。另请参阅 初始固件设置视频。
- 在 QGroundControl 中,通过选择 HIL Quadrocopter X 机架来配置您的 Pixhawk 进行 HIL 模拟。PX4 重启后,检查是否确实选择了“HIL Quadrocopter X”。
- 在 QGroundControl 中,转到“无线电”选项卡并校准(确保遥控器已打开且接收器显示绑定指示器)。
- 转到“飞行模式”选项卡,选择遥控器的一个开关作为“模式通道”。然后为开关的两个位置设置(例如)稳定模式和姿态飞行模式。
- 转到 QGroundControl 的“调整”部分并设置适当的值。例如,对于 Fly Sky 的 FS-TH9X 遥控器,以下设置提供了更逼真的感觉:悬停油门 = 中间 + 1 格,横滚和俯仰灵敏度 = 中间 - 3 格,高度和位置控制灵敏度 = 中间 - 2 格。
- 在 AirSim 设置文件中,为您的车辆配置指定 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 [simulator]
正在使用 TCP,这就是为什么我们需要添加:"UseTcp": true,
。请注意,我们还启用了 LockStep
,有关更多信息,请参阅 PX4 LockStep。Barometer
设置使 PX4 正常工作,因为默认的 AirSim 气压计会产生太多噪音。此设置稍微抑制了噪音,使 PX4 能够更快地实现 GPS 锁定。
完成上述设置后,您应该能够使用遥控器 (RC) 在 AirSim 中飞行。您通常可以通过将遥控器的两个操纵杆同时向下并向内拉来武装无人机。初始设置后,您不再需要 QGroundControl。通常,稳定模式(而不是手动模式)为初学者提供更好的体验。请参阅 PX4 基本飞行指南。
您还可以通过 Python API 控制无人机。
请参阅 演练演示视频 和 虚幻 AirSim 设置视频,其中展示了本文档中的所有设置步骤。
设置 PX4 软件在环#
PX4 SITL 模式不需要您拥有单独的设备,例如 Pixhawk 或 Pixracer。事实上,这是 PX4 团队推荐的将 PX4 与模拟器一起使用的方式。然而,这确实更难设置。请参阅 此专用页面 以设置 SITL 模式下的 PX4。
常见问题#
无人机飞行不正常,它只是“发疯”。#
有几个原因可能导致这种情况。首先,确保您的无人机在启动模拟器时不会从很高的地方坠落。如果您创建了自定义的虚幻环境并且玩家起始位置设置得太高,则可能会发生这种情况。似乎当这种情况发生时,PX4 中的内部校准会变得混乱。
您还应该使用 QGroundControl 并确保您可以在 QGroundControl 中正确武装和起飞。
最后,在某些罕见情况下,这也可能是机器性能问题,请检查您的硬盘性能。
我可以使用 Arducopter 或其他 MavLink 实现吗?#
我们的代码已使用 PX4 固件进行测试。我们尚未测试 Arducopter 或其他 MavLink 实现。一些飞行 API 确实在 MAV_CMD_DO_SET_MODE 消息中使用了 PX4 自定义模式(例如 PX4_CUSTOM_MAIN_MODE_AUTO)
它没有找到我的 Pixhawk 硬件#
检查您的 settings.json 文件中是否有这一行 "SerialPort":"*,115200"。这里的星号表示“查找任何看起来像 Pixhawk 设备的串行端口”,但这并非总是适用于所有类型的 Pixhawk 硬件。因此,在 Windows 上,您可以使用设备管理器找到实际的 COM 端口,查看“端口 (COM & LPT)”,插入设备并查看出现的新 COM 端口。假设您看到一个名为“USB 串行端口 (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 串行设备映射更改也会起作用。
警告 [指挥官] 起飞被拒绝,解除武装并重试#
如果您在 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”。请参阅 此问题 以获取更多详细信息。