工具链协议汇总
一、仿真平台基本协议(全流程通用)¶

上述图展示了 RflySim 平台中运动仿真模块与各类外部接口间的典型数据流交互关系,涵盖了自驾仪软件/硬件在环模块、三维仿真引擎、控制器与传感器回传路径等。为支撑这一交互体系,RflySim 平台定义了一系列标准化协议,包括控制指令下发、传感器数据回传、配置驱动执行、日志记录等。下表汇总了这些基础协议及其适用平台与核心功能。
| 协议名称 | 对接平台或模块 | 功能描述 |
|---|---|---|
| [UDP/TCP通信端口] | RflySim 主程序、控制模块、回传模块 | 统一指定仿真通信使用的端口号范围,通常由RflySim主程序如CopterSim内部分配,暴露给上层控制器等外部程序的端口配置见对应接口中的port字段 |
| [UDP控制指令协议] | Simulink、Python控制器 | 实时下发控制指令(如期望姿态、速度、轨迹点),支持多机广播或单机控制 |
| [UDP传感器回传协议] | Python/ROS客户端 | 实时回传仿真IMU、GPS、图像等传感器数据 |
| [自动化仿真配置协议] | RflySim主程序配置生成/控制指令生成 | 标准结构化任务与仿真场景配置格式,支持一键启动和批量实验自动化 |
| [日志记录协议] | 仿真数据记录系统 | 以时间戳对飞行状态、传感器数据、控制命令等进行结构化记录,支持导出为CSV等格式 |
二、RflySim 对接无人系统 / 机器人相关平台协议¶
RflySim 支持对接多个主流无人系统平台及其通信中间件,包括飞控板 PX4、机器人操作系统 ROS1/ROS2、动捕系统 VRPN 等。以下协议为系统间无缝互操作提供基础保障,是系统集成和软硬联调的重要桥梁。
| 协议名称 | 适用平台 | 功能描述 |
|---|---|---|
| [MAVLink] | PX4, ArduPilot, QGroundControl | 轻量化飞控通信协议,支持位置/姿态/状态传输与控制命令下发 |
| [VRPN (Virtual-Reality Peripheral Network)] | 动作捕捉系统(如OptiTrack、NOKOV) | 提供稳定的6DoF位姿传输,支持MATLAB、Simulink等平台订阅与闭环控制 |
| [ROS Topic / Service / Action] | ROS1, ROS2 | 发布-订阅消息机制、服务调用、行为树决策机制等,连接感知-决策-控制全链条 |
| [DDS (Data Distribution Service)] | ROS2(Foxy/Galactic 等) | 高性能实时通信中间件,提供多节点可靠低延迟传输支撑 |
三、网络通信与组网协议(针对无人系统集群控制开发)¶
在多机集群控制和分布式协同研究中,网络通信效率和协议灵活性至关重要。本节整理了 RflySim 平台支持的主流通信协议,包括 Redis、MQTT、NS-3 等,以及平台自定义的粗粒度网络结构模拟机制。
| 协议名称 | 主要用途 | 功能描述 |
|---|---|---|
| 自定义组网通信 | 多机编队、异构系统联合控制 | 通过UDP广播/单播结合自定义消息结构实现控制器之间的信息交换 |
| [MQTT] | 云端/边缘低带宽环境下的多机通信 | 基于主题的发布订阅机制,支持QoS控制与断线重连 |
| Redis 发布-订阅 | 局域网内高效多机状态广播与命令同步 | 键值对存储结合频道订阅机制,低延迟、结构简单,适合快速实验 |
| [自定义粗粒度组网仿真] | 通信策略验证与延迟测试 | 构建简化网络拓扑与通信策略,测试抗丢包/抗延迟能力 |
| [NS-3 协议栈仿真] | 仿真集群中的网络行为建模 | 可构建TCP/IP、UDP、802.11等网络协议模型用于通信行为测试 |
四、用户引导¶
不同类型的开发者在使用 RflySim 时将面向不同的接口模块。本节按使用目标将典型用户分为控制算法开发者、感知决策开发者以及集群与组网研究者,并为其分别提供推荐接口与使用路径,助力高效集成与快速验证。
1. 控制算法开发者(使用 Simulink / Python 实现飞控控制)¶
| 应用目标 | 示例接口 |
|---|---|
| 下发控制命令 | 使用 Simulink / Python 实现控制逻辑,并经 UDP 向仿真平台下发指令 |
| 接收飞行状态与传感器数据 | 监听回传端口(如14550/14600),实时接收 /imu, /gps, /odom 等数据流 |
| 使用真实飞控/硬件联调 | 通过 QGroundControl 连接 PX4,结合 MAVLink 实现仿真与实物统一控制流程 |
2. 感知与决策模块开发者(使用 Python + ROS1 / ROS2)¶
| 应用目标 | 示例接口 |
|---|---|
| 感知数据发布/订阅(图像、IMU) | 使用 VisionCaptureApi.py 将仿真图像/IMU发布为 ROS Topic,进行YOLO识别、SLAM等任务 |
| 控制指令回传 | 订阅感知结果,根据决策策略生成控制指令,再通过 UDP/MAVLink 接口回传至仿真平台 |
3. 无人集群控制与组网研究者¶
| 应用目标 | 示例接口 |
|---|---|
| 多机信息同步/命令广播(组网通信) | 使用 Redis/MQTT 实现多节点共享目标状态与路径信息,保持集群一致性 |
| 仿真环境中验证通信协议行为(组网仿真) | 使用 NS-3 模拟信道损耗/带宽/干扰等,评估通信机制对集群任务执行的影响 |
| 多机协同规划/调度(集中式、分布式控制) | 利用自定义组网通信接口在 Python 中实现中心调度器或局部协同策略 |
附:典型工作流模板¶
通信端口与协议细节¶
RflySim 平台使用统一规划的 UDP/TCP 端口体系和硬件串口,支持硬件飞控 HIL、PX4 SITL、三维引擎、视觉传感器和多机并行仿真。
编号规则
表中的 n 表示 CopterID,通常从 1 开始。++(n-1) 表示按飞机编号递增,++2*(n-1) 表示每架飞机间隔 2 个端口。
| 通信类别 | 接口/协议 | 默认端口或串口 | 数据方向 | 用途 |
|---|---|---|---|---|
| HITL 串口 | /dev/ttyUSBn 或 COMn |
波特率 921600 |
飞控与 CopterSim 双向 | 硬件在环 MAVLink 和 HIL 数据 |
| PX4 SITL MAVLink | TCP | 4561++(n-1) |
PX4 SITL 到 CopterSim/QGC | PX4 SITL 主 MAVLink 链路 |
| PX4 SITL 传感器 HIL | UDP | 17540++(n-1) |
CopterSim 到 PX4 | HIL 传感器输入 |
| PX4 SITL 执行器 HIL | UDP | 16540++(n-1) |
PX4 到 CopterSim | 电机/舵面控制输出 |
| 状态返回 | UDP | 20101++2*(n-1) |
CopterSim 到外部程序 | 飞控状态、MAVLink 数据或控制回传 |
| 外部控制接收 | UDP | 20100++2*(n-1) |
外部程序到 CopterSim/PX4 | Python、Simulink 或外部控制输入 |
| 真值数据输出 | UDP | 30101++2*(n-1) |
CopterSim 到外部程序 | 位姿、速度、欧拉角、传感器真值等 |
| 故障/综合模型控制 | UDP | 30100++2*(n-1) |
外部程序到 CopterSim/模型 | 故障注入、模型参数、综合模型输入 |
| 低层桥接 | UDP | 40100++2*(n-1) |
PX4、CopterSim、外部程序 | 底层 PX4 数据桥接 |
| QGroundControl | UDP/TCP | UDP 14550,TCP 18570++(n-1) |
QGC 与飞控双向 | 地面站连接 |
| 三维场景同步 | UDP | 20008、20009、20010++(n-1) |
CopterSim/Python 到 RflySim3D | 场景命令、载具位姿、对象状态 |
| 视觉图像流 | 共享内存或 UDP | 由 Config.json 配置 |
RflySim3D 到视觉程序 | RGB、深度、分割、点云等数据 |
端口配置
视觉数据流若使用 UDP,需要在 Config.json 的 SendProtocol 中配置 IP 与端口。外部控制端口可通过 Config.json、Simulink 模块参数或 Python 接口参数修改,但同一架飞机的同一方向数据不应被多个进程同时监听。
主要数据链路¶
| 链路 | 典型消息 | 说明 |
|---|---|---|
| 飞控执行器到模型 | mavlink_hil_actuator_controls |
PX4 输出电机、舵机等执行器控制量,进入模型的 inPWMs |
| 模型传感器到飞控 | mavlink_hil_sensor、mavlink_hil_gps |
CopterSim/Simulink 模型输出 IMU、气压计、磁力计、GPS |
| Python/Simulink 外部控制 | Offboard 控制、位置/速度/姿态控制结构体 | 通过 20100 系列端口进入 CopterSim 或 PX4 桥接模块 |
| 真值与日志输出 | VehileInfo60d、outCopterData |
通过 30101 系列端口输出到 Python、Simulink 或日志系统 |
| RflySim3D 场景交互 | 位姿包、控制台命令、碰撞/传感器反馈 | 20008、20009、20010 系列端口承担场景同步 |
协议主题索引¶
| 主题 | 关键内容 | 建议查阅 |
|---|---|---|
| MAVLink / MAVROS | PX4/APM、QGC、ROS 间的模式切换、解锁、setpoint、状态回传 | Python SDK、ROS/ROS2 接口 |
| ROS / DDS | 高频状态、传感器、控制闭环和 ROS2 底层实时通信 | ROS/ROS2 接口、视觉通信协议 |
| MQTT | 低频状态、任务指令、监控面板和云端协同 | comm 网络通信、集群控制 |
| NS-3 | 节点编号、链路质量、时延、丢包、带宽和路由策略 | 集群通信和组网仿真 |
| Log / Sensor / Ctrl / Coa | 日志、传感器、外部控制、协同控制主题 | PHM、Simulink 工具箱、Swarm SDK |
MAVLink 与 MAVROS 接口映射¶
外部控制、ROS 桥接和地面站联调通常同时涉及 MAVLink 消息和 MAVROS 话题/服务。下表列出常用映射关系,便于在 Python、ROS1/ROS2 或 MAVROS 节点中定位对应的数据链路。
| 类别 | MAVLink 消息 | MAVROS 话题/服务 | 功能说明 |
|---|---|---|---|
| 状态与位置信息 | HEARTBEAT |
/mavros/state |
系统连接状态、飞行模式和解锁状态 |
| 状态与位置信息 | SYS_STATUS |
/mavros/battery |
电池电量、电源状态和传感器状态 |
| 状态与位置信息 | GPS_RAW_INT |
/mavros/global_position/raw/fix |
GPS 原始经纬度、卫星数量等数据 |
| 状态与位置信息 | GLOBAL_POSITION_INT |
/mavros/global_position/global |
全球位置、高度和姿态相关信息 |
| 状态与位置信息 | LOCAL_POSITION_NED |
/mavros/local_position/pose |
本地 NED 坐标系位置与姿态 |
| 状态与位置信息 | ATTITUDE |
/mavros/imu/data |
IMU 解算后的四元数姿态 |
| 控制命令 | COMMAND_LONG |
/mavros/cmd/command |
起飞、返航、复位等通用命令 |
| 控制命令 | SET_MODE |
/mavros/set_mode |
切换 OFFBOARD、AUTO.MISSION 等飞行模式 |
| 控制命令 | MANUAL_CONTROL |
/mavros/rc/override |
模拟遥控器控制输入 |
| 控制命令 | RC_CHANNELS_OVERRIDE |
/mavros/rc/override |
覆盖遥控器通道 |
| 参数管理 | PARAM_REQUEST_LIST |
/mavros/param/get |
获取参数列表或指定参数值 |
| 参数管理 | PARAM_SET |
/mavros/param/set |
设置 PX4 参数 |
| 任务管理 | MISSION_REQUEST_LIST |
/mavros/mission/pull |
下载当前任务航点列表 |
| 任务管理 | MISSION_ITEM_INT |
/mavros/mission/push |
上传任务航点 |
| 传感器数据 | HIGHRES_IMU |
/mavros/imu/data |
高精度加速度、角速度和磁力计数据 |
| 传感器数据 | RAW_IMU |
/mavros/imu/data_raw |
原始未滤波 IMU 数据 |
| 传感器数据 | OPTICAL_FLOW |
/mavros/px4flow/raw/optical_flow_rad |
PX4Flow 光流速度估计 |
| 控制输出 | POSITION_TARGET_LOCAL_NED |
/mavros/setpoint_position/local |
局部位置或速度 setpoint |
| 控制输出 | SERVO_OUTPUT_RAW |
/mavros/actuator_control |
电机、舵机等 PWM 输出通道 |
| 系统状态信息 | STATUSTEXT |
/mavros/diagnostics |
系统文本状态和诊断信息 |
| 系统状态信息 | TIMESYNC |
/mavros/time_reference |
Companion Computer 与飞控时间同步 |
NS-3 组网仿真要点¶
NS-3 通信仿真需要明确节点编号与 CopterID 的映射关系,并同步记录链路延迟、丢包率、带宽、路由策略和飞行日志时间戳。做集群任务评估时,应同时保存飞行状态和网络状态,否则难以判断任务失败是控制问题还是通信链路问题。
端口冲突排查¶
netstat -ano | findstr ":14550"
netstat -ano | findstr ":20100"
netstat -ano | findstr ":30100"
netstat -ano | findstr ":40100"
发现端口被占用后,可结束对应 PID,或修改脚本/配置中的端口。自动化测试和批量仿真建议在启动前统一清理残留进程。