问题排查

这份文档按现象排查。先确认你使用的是 Ubuntu 20.04 + ROS 2 Foxy。代码尽量兼容 Ubuntu 24.04 和 26.04,但这两个系统没有完整测试。

01 Pegasus 插件在 Isaac Sim 里找不到

先检查 extension 路径是不是加错了。应该添加 Pegasus 的 extensions 目录,不是 pegasus.simulator 子目录。

常见路径:

再检查 Pegasus 是否安装到了 Isaac Sim 自己的 Python 环境:

如果没有输出,重新安装:

安装 Pegasus 插件时应使用 Isaac Sim 自带的 Python,不应使用 conda Python 或系统 Python。Isaac Sim 查找插件时使用的是自己的 Python 环境。

02 Pegasus UI 能打开,但启动 PX4 backend 失败

先看 Pegasus UI 里的 PX4 路径。路径要指向 PX4-Autopilot 根目录,例如:

然后在终端检查 PX4 是否能单独编译:

如果这里失败,应先处理 PX4 依赖或源码版本,再检查 Pegasus 配置。

03 QGroundControl 连不上 PX4

按这个顺序查:

可以用下面命令看 PX4 进程:

如果 PX4 没启动,回到 Pegasus UI 检查 PX4 路径和 backend 配置。

04 QGroundControl 报 Not Ready 或不能 Arm

QGC 的提示通常比终端更直接。常见原因:

不应跳过这些检查。应先确认官方 Iris 可以 arm,再替换为比赛无人机。

05 看不到 /fmu/* 话题

先 source ROS 2 和 px4_msgs 工作空间:

再查话题:

如果没有输出,检查 Micro XRCE-DDS Agent:

还要确认 PX4 侧 uXRCE-DDS Client 正在运行。没有 Agent,ROS 2 通常收不到 PX4 的 /fmu/out/* 数据,也发不进 /fmu/in/* 控制话题。

06 有 /fmu/*,但 /fmu/out/vehicle_local_position 没数据

不同 PX4 / px4_msgs 版本的话题名可能不同。先查:

可能出现:

分别试:

如果两个都没有数据,通常是 PX4 没有有效 local position,或者 XRCE-DDS 链路还没通。

07 运行 run_control_menu.sh 报 Python 或 ROS 2 错误

先退出 conda:

再运行:

脚本默认使用 /usr/bin/python3,并优先 source:

如果你的 px4_msgs 不在 ~/px4_ros_ws,可以手动指定:

08 Offboard 进不去

PX4 不是收到一次目标点就进入 Offboard。它要求外部控制器持续发布 setpoint。

检查三件事:

如果话题频率断断续续,或者先切模式再发 setpoint,PX4 可能拒绝 Offboard。正确顺序是:

09 move 1 0 0 后无人机不动

move 不是起飞命令。它只是在当前目标点基础上修改目标位置。

先执行:

如果无人机已经通过 QGC 起飞,先用:

还要确认 PX4 当前已经进入 OFFBOARD,并且 local position 有数据。

10 高度方向反了

控制菜单使用 PX4 local / NED 坐标:

所以上升是 z 变小,不是变大。

例子:

如果把 ENU 的 z=+1 直接发给 PX4,飞机通常会往下走。

11 px4_msgs 版本不匹配

典型现象:

PX4 v1.14.x 推荐使用:

如果你换了 PX4 版本,px4_msgs 分支也要一起换。

12 QGroundControl AppImage 打不开

Ubuntu 20.04 常见原因是缺 libfuse2

然后重新授权并启动:

如果仍然打不开,再检查 AppImage 是否有执行权限。

13 Isaac Sim 路径不对

run_import_asset.sh 默认会找常见 Isaac Sim 路径。如果你的 Isaac Sim 不在默认位置,手动指定:

ISAACSIM_BIN 应该指向 Isaac Sim 启动程序,不是 Python,也不是安装目录。

14 比赛无人机 USD 能显示,但不能飞

这通常不是 ROS 2 控制代码的问题。先用官方 Iris 验证 Pegasus、PX4、QGC 链路。如果 Iris 能飞,但比赛无人机不能飞,重点查 USD 和 Pegasus 绑定:

能显示只说明 USD 加载成功。能飞还需要 Pegasus 找到可控制的机体和旋翼结构。

15 最小排查顺序

遇到问题时,不应直接修改代码。建议按以下顺序排查:

前一步未通过时,不应跳到下一步。按顺序检查可以更快判断问题所在层级。