模块一:基础概念与仿真控制链路

学习目标:

前置条件:

 

01 课程导学与整体目标

本文档采用以下控制路线:

整体关系可以这样理解:QGC 看飞控状态,ROS 2 发控制目标,Pegasus 把 PX4 的执行器输出作用到 Isaac Sim 里的无人机。

02 仿真模型加载查看资产情况

在 Isaac Sim 里,可以直接改无人机 USD prim 的位置,比如在界面里拖动模型,或者用脚本设置 /World/quadrotor 的 transform。

这种方式适合检查资产:

但这不算飞行控制。直接拖模型没有飞控闭环:

因此,控制无人机时应使用飞控链路。

03 Isaac Sim、Pegasus、PX4、QGC、ROS 2 的角色分工

Isaac Sim 是 NVIDIA 的机器人仿真平台。在无人机仿真里,它主要负责:

Isaac Sim 能加载无人机模型,但它不会自动让模型具备 PX4 飞控逻辑。想让模型像现实世界无人机一样飞行,需要 Pegasus 和 PX4。

Pegasus Simulator 是 Isaac Sim 上的无人机仿真插件。它主要做这些事:

可以先把 Pegasus 理解成:

QGroundControl 通常简称 QGC,是无人机地面站。它通过 MAVLink 连接 PX4。调试过程中建议保持 QGC 打开,便于查看飞控状态和告警信息。

QGC 常用来:

QGroundControl 界面

ROS 2 在这个链路里负责外部自动控制。它不直接控制 Isaac Sim 的模型,而是通过 /fmu/in/* 话题把控制目标发给 PX4,再由 PX4 控制无人机。

在本文档的流程中,Pegasus 主要负责:

有两种接入方式:

接入方式典型场景说明
由 Pegasus 创建无人机简单场景、单独加载无人机调用 Multirotor(DRONE_PRIM, DRONE_ASSET_USD, ...)
绑定已有无人机 primUSD 场景里已经有 /World/quadrotor脚本调用 Multirotor(..., attach_existing=True) 绑定已有 prim。这个能力需要你的 Pegasus 版本或本地修改支持

04 PX4 基础架构与控制条件

PX4 Autopilot 是开源飞控软件。它可以跑在真实飞控硬件上,也可以用 SITL 形式跑在电脑里。SITL 是 Software In The Loop。仿真和实机使用同一套飞控逻辑,区别在于数据来源:实机来自真实传感器,仿真来自 Isaac Sim 和 Pegasus。

在 Isaac Sim + Pegasus + PX4 里:

PX4 内部常见模块:

模块作用简要记忆
Commander管理解锁、上锁、飞行模式、安全状态无人机不能飞时,先看 preflight check
Estimator融合 IMU、GPS、视觉或仿真位姿,得到状态估计local position 无效时,Offboard 位置控制很难正常工作
Controllers位置、速度、姿态、角速度控制外部给位置目标,PX4 内部会逐级转成姿态和执行器输出
Navigator任务、返航、降落等高级导航逻辑自动任务、返航、降落会涉及它
MAVLinkPX4 和 QGC、仿真器、外部程序通信QGC 通常通过 MAVLink 连接 PX4
uORBPX4 内部发布订阅总线ROS 2 无法直接控制 uORB,而是通过桥接消息交互

想让 PX4 控制无人机,至少要有这些东西:

条件说明
飞控软件PX4-Autopilot,仿真时通常运行 PX4 SITL
无人机动力学Pegasus 根据多旋翼模型在 Isaac Sim 中施加力和力矩
通信链路MAVLink 或 uXRCE-DDS / ROS 2 bridge
状态估计PX4 需要知道本地位置、姿态、速度
控制目标QGC 手动命令,或 ROS 2 发送的 Offboard setpoint
安全状态通过 preflight check,进入正确模式并 arm

05 QGC、MAVLink、uXRCE-DDS、ROS 2 Bridge 通信链路

QGC 发的是飞控命令。PX4 会先判断命令能不能执行,再通过控制器输出执行器命令。这个过程更接近真实飞机。

PX4 内部用 uORB。ROS 2 用 DDS。两边不能直接传输数据,需要桥接器进行连接。

PX4 和 ROS 2 通信常用 uXRCE-DDS:

ROS2 DDS XRCE DDS 通信链路

常见输入输出话题:

方向话题消息作用
ROS 2 -> PX4/fmu/in/offboard_control_modepx4_msgs/msg/OffboardControlMode声明外部控制模式
ROS 2 -> PX4/fmu/in/trajectory_setpointpx4_msgs/msg/TrajectorySetpoint发送位置、速度、加速度、yaw setpoint
ROS 2 -> PX4/fmu/in/vehicle_commandpx4_msgs/msg/VehicleCommand切模式、arm、land、disarm
PX4 -> ROS 2/fmu/out/vehicle_local_positionpx4_msgs/msg/VehicleLocalPositionPX4 本地位置估计
PX4 -> ROS 2/fmu/out/vehicle_statuspx4_msgs/msg/VehicleStatus飞行模式、解锁状态

Isaac Sim ROS 2 Bridge 可以把仿真数据发布到 ROS 2,例如:

06 常见控制方式对比

控制方式适合做什么不适合做什么
直接移动模型检查 USD 资产、起始位置、传感器位置不能说明飞控链路正常,也不能训练真实飞行控制
QGC 手动控制检查 PX4 是否 Ready To Fly,训练 arm、takeoff、land不适合自动任务和程序化路径控制
PX4 Offboard 控制用 ROS 2 或外部程序发 setpoint 自动飞行需要 local position 有效,且必须持续发布 setpoint

Offboard 是 PX4 给外部计算机控制用的模式。外部程序持续发送 setpoint,比如位置、速度、姿态目标,PX4 再根据这些目标控制无人机。

最常见的 Offboard 流程是:

  1. ROS 2 节点持续发布 OffboardControlMode
  2. ROS 2 节点持续发布 TrajectorySetpoint
  3. ROS 2 节点发送 VehicleCommand,把 PX4 切到 Offboard。
  4. ROS 2 节点发送 arm 命令。
  5. PX4 接收目标点并控制无人机。

需要注意的是持续发布。PX4 不接受只发送一次 setpoint 的外部控制。setpoint 或 Offboard 控制模式停止后,PX4 会认为外部链路中断,并退出 Offboard 或触发 failsafe。

PX4 Offboard 控制链路