平台架构与运行链路¶
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_demo 和 multi_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.py 的 control_send() |
| 设计新的固定翼速度—姿态转换 | FW_class.py 的 VectorControlPlane |
| 修改垂起转换流程 | vector_vtol.py 与 VTOL_class.py |
| 修改轨迹导航向量场 | single_demo/scripts/gvf_lib/ |
| 开发编队控制 | multi_demo/scripts/swarm_lf/ |
| 增加无人机数量 | 同步修改 PX4 launch、算法 launch、命名空间和端口 |
继续阅读坐标系、话题与服务,可先建立上层算法与底层控制之间的数据约定。