平台架构与运行链路

SwiftWing 仿真平台采用“上层算法—统一控制接口—机型控制器—MAVROS—PX4 SITL—Gazebo”的分层结构。开发单机路径规划、轨迹跟踪或多机编队算法时,通常只需要读取状态并持续发布期望速度或姿态,不需要直接修改 PX4。

single_demo / multi_demo
  状态读取 + 算法计算
          │
          │ /control_signal/vector 或 /control_signal/att
          ▼
uav_controller
  起飞 / 模式管理 / 速度向量到姿态与纵向控制量
          │
          │ MAVROS setpoint + service
          ▼
MAVROS ── PX4 SITL ── Gazebo Classic
  ▲                         │
  └──── 位姿、速度、IMU ────┘

源码目录

目录 主要内容 典型修改场景
uav_controller/ 固定翼、垂起固定翼、多旋翼控制封装 修改控制律、模式流程或 MAVROS 接口
single_demo/ 单机状态接口、GVF 和五类轨迹示例 开发新的单机规划/制导算法
multi_demo/ 路径跟踪、领航—跟随、一致性编队 修改队形、通信拓扑或编队控制器
px4_launch/ 单机与 6 机 PX4/MAVROS/Gazebo 启动 改机型、初始位姿、端口或实例数量
docker/ 固定环境的容器构建模板 复现实验环境

运行时分层

1. 仿真与飞控层

px4_launch/*.launch 创建 Gazebo 世界、PX4 SITL 实例和 MAVROS 节点。PX4 负责姿态、角速度、执行机构混控与飞行模式;Gazebo 提供动力学和真值状态。

2. 状态与通信层

MAVROS 把 PX4 状态转换为 ROS 消息。get_local_pose.py 还会从 /gazebo/model_states 提取仿真真值,并发布 /vision_pose/pose/vision_speed/speed。多机模式为每架无人机增加 /uavN 命名空间。

3. 机型控制层

  • vector_fw.py:固定翼自动起飞、OFFBOARD 管理、期望速度向量到姿态/纵向控制量的转换。
  • vector_vtol.py:先以多旋翼模式爬升,再切换到固定翼模式执行上层命令。
  • rotor.py:多旋翼自动起飞、OFFBOARD 切换和速度设定值转发。

4. 算法层

single_demomulti_demo 读取位置、速度、姿态等状态,计算期望量,再通过统一控制话题交给机型控制层。算法层不直接向 MAVROS 发送设定值,这一边界使同一算法更容易在固定翼、垂起固定翼和多旋翼之间复用。

三条主要调用链

固定翼速度控制

轨迹脚本
  → uav.control_send(cmd, "vel")
  → /control_signal/vector
  → FW_class.uav.vel_control_cb()
  → VectorControlPlane.Vec2Ori()
  → VectorControlPlane.tecsControl()
  → uav.MotionControl("att", ...)
  → /mavros/setpoint_raw/attitude

垂起固定翼速度控制

轨迹脚本
  → /control_signal/vector
  → vector_vtol.DesireVelCB()
  → 多旋翼爬升
  → FlyModeTrans("plane")
  → Vec2Ori() + tecsControl()
  → MotionControl("att", ...)

多机编队

每架无人机状态
  → DesirePath / Follower / ConsensusFollow
  → 二维加速度需求
  → AngleCal() 转为滚转角与轴向加速度
  → uav.control_send(..., "att")
  → 对应 /uavN/control_signal/att

选择开发入口

目标 建议入口
快速验证新路径规划算法 复制 single_demo/scripts/circle_track.py
只发送期望速度 single_demo/scripts/uav_lib/spawn_uav.pycontrol_send()
设计新的固定翼速度—姿态转换 FW_class.pyVectorControlPlane
修改垂起转换流程 vector_vtol.pyVTOL_class.py
修改轨迹导航向量场 single_demo/scripts/gvf_lib/
开发编队控制 multi_demo/scripts/swarm_lf/
增加无人机数量 同步修改 PX4 launch、算法 launch、命名空间和端口

继续阅读坐标系、话题与服务,可先建立上层算法与底层控制之间的数据约定。