设置 PX4 软件在环#
PX4 软件提供了一个在 Linux 中运行的“软件在环”仿真 (SITL) 版本。如果你使用的是 Windows,可以使用 Cygwin 工具链,或者使用 适用于 Linux 的 Windows 子系统并遵循 PX4 Linux 工具链设置。
如果您使用的是 WSL2,请阅读这些附加说明。
请注意,每次停止 Unreal 应用程序时,都必须重新启动 px4
应用程序。
-
在你的 bash 终端中,按照 Linux 的这些步骤,并遵循
NuttX based hardware
下的所有说明来安装先决条件。我们还提供了我们自己的 PX4 构建说明,它更简洁地说明了我们到底需要什么。 -
获取 PX4 源代码并构建 PX4 的 posix SITL 版本
然后从 https://github.com/PX4/PX4-Autopilot/releases 找到最新的稳定版本并检出与该版本匹配的源代码,例如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
git checkout v1.11.3
-
使用以下命令在 SITL 模式下构建并启动 PX4 固件
如果您使用的是旧版本 v1.8.*,请改用此命令:make px4_sitl_default none_iris
make posix_sitl_ekf2 none_iris
。 -
您应该会看到一条消息,提示 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 命令,但其中一些对于调试可能很有用。 -
现在编辑 AirSim 设置文件,确保您有匹配的 UDP 和 TCP 端口设置
请注意 PX4{ "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 } } } }
[simulator]
正在使用 TCP,这就是我们需要添加:"UseTcp": true,
的原因。请注意,我们还启用了LockStep
,有关更多信息,请参阅 PX4 LockStep。Barometer
设置使 PX4 保持良好状态,因为默认的 AirSim 气压计会产生太多噪音。此设置将其限制了一点,从而使 PX4 能够更快地实现 GPS 锁定。 -
使用防火墙配置打开入站 TCP 端口 4560 和入站 UDP 端口 14540。
-
现在运行您的 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
如果您没有看到这些消息,请检查您的端口设置。
-
您还应该能够将 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 游戏手柄)来驾驶模拟无人机。请参阅遥控器