RflySim Model-仿真模型相关模块库¶
RflySim Model 库提供了一套完整的无人机仿真建模工具,包括六自由度动力学模型、电机模型、力模型、地面模型以及多种通信接口模块,支持从单无人机到多无人机的全场景仿真。

模块列表¶
动力学模型¶
| 模块 | 功能描述 |
|---|---|
| 6DOF | 六自由度刚体动力学模型,计算无人机位置、速度、姿态、角速度等运动状态 |
| Copter Force Model | 多旋翼气动力模型,计算旋翼产生的拉力、扭矩和阻力 |
| Copter Motor Model | 多旋翼电机模型,模拟电机动态响应和转速特性 |
| Ground Model | 地面交互模型,模拟起落架与地面的接触力和摩擦力 |
通信接口¶
| 模块 | 功能描述 |
|---|---|
| UDP 20100 PX4SIL Recv | PX4SIL UDP 数据接收接口,接收端口 20100 的 PX4 仿真数据 |
| UDP 30100 TrueSim Recv | TrueSim UDP 数据接收接口,接收端口 30100 的高精度仿真数据 |
| UDP 40100 RflyPX4 Recv | RflyPX4 UDP 数据接收接口,接收端口 40100 的 RflySim PX4 数据 |
| PX4SIL IntFloat Send | PX4SIL 整型/浮点数据发送接口,向 PX4 发送整型和浮点型控制数据 |
| PX4 Fault Params Send | PX4 故障参数发送接口,向飞控发送故障注入参数 |
输出接口¶
| 模块 | 功能描述 |
|---|---|
| 3D Output | 三维可视化输出接口,向 RflySim3D 发送位置和姿态数据 |
| Sensor Output | 传感器数据输出接口,输出各类传感器的模拟数据 |
使用场景¶
单机仿真¶
- 动力学建模:使用 6DOF 模块搭建无人机刚体动力学模型
- 电机建模:配合 Copter Motor Model 和 Copter Force Model 构建完整的多旋翼动力系统
- 地面交互:使用 Ground Model 模拟起落架与地面的接触
硬件在环仿真¶
- PX4SIL 接口:使用 UDP 20100/30100/40100 接收模块与 CopterSim 通信
- 控制数据发送:使用 PX4SIL IntFloat Send 向飞控发送控制指令
- 三维可视化:使用 3D Output 将仿真数据发送到 RflySim3D 显示
故障注入仿真¶
- 故障参数发送:使用 PX4 Fault Params Send 向飞控注入各类故障参数
- 传感器故障:通过 Sensor Output 模拟传感器故障数据
使用注意事项¶
动力学建模¶
- 参数准确性:6DOF 模块的质量、转动惯量等参数需要与实际无人机匹配,否则仿真结果会失真
- 坐标系约定:模块使用 NED(北东下)坐标系和机体坐标系,输入输出数据需符合该约定
- 初始条件:设置合理的初始位置、速度、姿态,避免初始状态冲突导致仿真发散
- 数值稳定性:仿真步长不宜过大,建议固定步长不超过 1ms,保证数值积分稳定性
通信接口¶
- 端口配置:UDP 接收/发送模块的端口号需与 CopterSim 配置匹配,避免通信失败
- 网络设置:确保防火墙允许相应端口的 UDP 通信,特别是多机仿真场景
- 数据同步:通信模块的采样时间需与 Simulink 模型步长一致,避免数据错位
- 超时处理:接收模块需设置合理的超时机制,防止因通信中断导致仿真卡死
故障注入¶
- 参数范围:故障参数需在合理范围内,过大或过小的值可能导致仿真崩溃
- 故障时机:合理选择故障注入时机,避免在关键控制阶段注入严重故障
- 恢复机制:设计故障恢复逻辑,测试系统的容错能力和自恢复能力
- 安全边界:设置仿真安全边界,当状态超出安全范围时自动终止仿真
统一建模接口与模型模板¶
RflySim 综合模型通常由输入接口、动力学/执行机构/环境模块、传感器输出模块和三维显示输出模块组成。接口命名在多旋翼、固定翼、车船、VTOL、直升机和自定义模型之间保持一致,便于替换模型而不修改上层控制链路。
统一输入接口¶
| 接口 | 类型 | 用途 |
|---|---|---|
inPWMs |
PWM/归一化控制量 | 来自 PX4、遥控器或外部控制器的执行机构输入 |
inCopterData |
载具状态结构 | 用于解锁状态、模式、控制状态和仿真同步 |
inFloatsCollision / inCollision20d |
浮点数组 | 碰撞、接触、地形等外部状态 |
inSILInts |
8 维 int | 软件在环整数输入 |
inSILFloats |
20 维 float | 软件在环浮点输入 |
inFromUE |
UE/RflySim3D 输入 | 三维场景或传感器返回的交互信息 |
TerrainIn15d |
15 维地形输入 | 地形高度、法向、接触点等地面模型信息 |
inCtrlExt / inDoubCtrls |
外部控制输入 | 自定义控制器或上位机输入 |
inSIL28d |
28 维 SIL 输入 | 综合 SIL 模型输入接口 |
inPWMs 是 16 维执行器控制量输入,数值已归一化到 -1 到 1。它对应飞控回传的 MAVLink mavlink_hil_actuator_controls_t.controls,可在 QGroundControl 的 MAVLink Analyze 工具中查看实时变化。软件在环时,PX4 SITL 通过 TCP 4561++ 系列端口把电机控制指令发送到运动模型;硬件在环时,飞控通过串口把同类 MAVLink 指令送入模型。

inCopterData 关键维度¶
inCopterData 为 32 维 double 数据,前 8 维保存 PX4/CopterSim 状态,9-24 维保存 RC 通道,25-32 维监听 rfly_px4 uORB 消息。
| 维度 | 含义 |
|---|---|
1 |
PX4 解锁标志位 |
2 |
接收到的 RC 通道总数;无可用 RC 通道时为 0 |
3 |
仿真模式标志:0=HITL,1=SITL,2=SimNoPX4 |
4 |
CopterSim 中的 3D fixed 标志位 |
5 |
PX4 VTOL_STATE 标志位 |
6 |
PX4 LANDED_STATE 标志位 |
9-24 |
ch1-ch16 RC 通道信号 |
25-32 |
rfly_px4 uORB 扩展消息 |
外部输入结构体¶
inSILInts 和 inSILFloats 通过 30100++2 系列端口输入,是综合模型的重要入口。
struct PX4SILIntFloat {
int checksum; // 1234567897
int CopterID;
int inSILInts[8];
float inSILFLoats[20];
};
inFromUE 来自 RflySim3D/RflySimUE5,可用于地面交互、碰撞引擎和蓝图数据回传。
inCtrlExt1-inCtrlExt5 要求输入为 28 维 float,inDoubCtrls 要求输入为 28 维 double,均通过 30100++2 系列端口接收。前者常用于故障注入、参数修改和小规模扩展控制,后者适合综合模型中需要双精度外部输入的场景。

inDoubCtrls 为 28 维 double 输入,适合大场景综合模型仿真:
TerrainIn15d 维度¶
| 维度 | 含义 |
|---|---|
1 |
地形高度,NED 坐标系下向为正 |
2 |
haslop,是否有坡度 |
3 |
螺距,单位 rad |
4 |
偏航,单位 rad |
5 |
hasFric,是否有摩擦 |
6 |
FrictionFactor,摩擦系数 |
7 |
isMoveObj,是否为移动对象 |
8 |
objVx,移动对象 X 向速度 |
9 |
objVy,移动对象 Y 向速度 |
10 |
objYaw,移动对象偏航角 |
11-15 |
预留 |
统一输出接口¶
| 接口 | 类型 | 用途 |
|---|---|---|
HILSensor30d |
30 维 double | IMU、气压计、磁力计等 HIL 传感器输出 |
HILGPS30d / MavHILGPS |
GPS 数据 | GPS 位置、速度、时间戳等输出 |
ExtToPX4 |
外部到 PX4 数据 | 发送给 PX4 的扩展控制或传感器数据 |
VehileInfo60d |
60 维 double | 载具真值状态、姿态、速度和辅助信息 |
outCopterData |
CopterSim 输出结构 | DLL 模型输出到 CopterSim 或外部日志 |
ExtToUE4 |
UE 输出 | 发送给 RflySim3D/UE 的载具位姿、显示和对象信息 |
HIL 传感器输出¶
HILSensor30d 对应 MAVLink mavlink_hil_sensor_t,包含三轴加速度、三轴角速度、三轴磁场、绝对气压、差压、气压高度、温度和字段更新位掩码。软件在环时通过 TCP 4561++ 系列端口发送给 PX4 SITL;硬件在环时通过串口发送给飞控。
| 字段 | 含义 | 单位或备注 |
|---|---|---|
time_usec |
时间戳 | 微秒,可同步到 UNIX 时间或系统启动时间 |
xacc / yacc / zacc |
三轴加速度 | m/s^2 |
xgyro / ygyro / zgyro |
三轴角速度 | rad/s |
xmag / ymag / zmag |
三轴磁场强度 | 高斯 |
abs_pressure |
绝对气压 | 毫巴 |
diff_pressure |
差压或空速相关气压 | 毫巴 |
pressure_alt |
气压高度 | 米 |
temperature |
温度 | 摄氏度 |
fields_updated |
更新字段位掩码 | 位 0 对应 xacc,位 12 对应温度,位 31 表示仿真中完成完整状态重置 |
HIL GPS 输出¶
HILGPS30d / MavHILGPS 对应 MAVLink mavlink_hil_gps_t,包含经纬高、水平/垂直精度、地速、NED 速度、地面航向、定位状态和可见卫星数量。
| 字段 | 含义 | 单位或备注 |
|---|---|---|
time_usec |
时间戳 | 微秒 |
lat / lon |
WGS84 纬度、经度 | 1e-7 deg |
alt |
海拔高度 | 毫米,向上为正 |
eph / epv |
水平/垂直定位精度 | 厘米,未知时为 65535 |
vel |
GPS 地速 | cm/s,未知时为 65535 |
vn / ve / vd |
NED 北、东、地速度 | cm/s |
cog |
地面航向 | 0.01 deg,未知时为 65535 |
fix_type |
定位类型 | 0-1 无定位,2 二维定位,3 三维定位 |
satellites_visible |
可见卫星数 | 未知时为 255 |
真值与日志输出¶
VehileInfo60d 包含载具 ID、类型、仿真时间、NED 速度、NED 位置、欧拉角、四元数、电机转速、机体系加速度、机体系角速度和 GPS 位置。outCopterData 为 32 维 double 自定义日志输出,可写入本地 CopterSim CSV 日志,也可通过 30101 系列端口输出到外部程序。
| 字段 | 含义 | 维度 |
|---|---|---|
copterID |
无人机 ID | 1 |
vehicleType |
载具类型 | 1 |
runnedTime |
当前仿真时间戳 | 1 |
VelE |
NED 坐标系速度,北、东、下 | 3 |
PosE |
NED 坐标系位置,北、东、下 | 3 |
AngEuler |
滚转、俯仰、偏航欧拉角 | 3 |
AngQuatern |
姿态四元数 | 4 |
MotorRPMS |
1-8 号电机转速 | 8 |
AccB |
机体系三轴加速度 | 3 |
RateB |
机体系三轴角速度 | 3 |
PosGPS |
经度、纬度和高度 | 3 |
outCopterData 输出到本地日志前,需要在 C:\PX4PSP\CopterSim 下创建对应飞机编号的 CopterSim*.csv 文件,其中 * 为飞机 ID。
固定翼模型模板¶
固定翼模型的核心是把舵面、电机、气动状态和环境扰动转换为机体系力/力矩,再由 6DOF 模块积分得到载具运动。
| 模块 | 说明 |
|---|---|
ControlChannelMappingModel |
将飞控通道映射到舵面和油门 |
Actuator Model |
舵机动态、限幅、死区和速率限制 |
Motor Model |
螺旋桨推力、反扭矩、转速动态 |
GroundSupportModel |
地面支撑、滑跑、接地和碰撞处理 |
Weather Model |
风速、风向、阵风和空气密度 |
Aerodynamic Forces and Moments |
升力、阻力、侧力和三轴气动力矩 |
6DOF |
刚体六自由度积分 |
3DOutput / SensorOutput |
三维显示输出和飞控传感器输出 |
气动力计算通常按空速、迎角、侧滑角、气动系数、动压、舵面偏转和力臂依次计算,最后与发动机推力、重力、地面力和扰动力合成为 6DOF 输入。
固定翼模型的典型子模块实现顺序为:读取模型参数,映射 inPWMs 舵面/油门通道,计算舵机动态响应,结合空速计算动力系统推力,计算空气密度和气动状态,再将气流坐标系下的力/力矩转换到机体系并输入 6DOF。
最小模型模板¶
最小模型模板适合快速搭建新的载具动力学。它保留与 RflySim/PX4 对接所需的最小输入输出,并将执行机构、力/力矩、地面和传感器模块拆成可替换子系统。
| 模块 | 作用 |
|---|---|
Motor Model |
将控制输入转换为执行机构输出 |
Force and Moment Model |
根据执行机构、重力、环境和载荷计算总力/力矩 |
GroundSupport |
地面高度、接地判断和支撑反力 |
6DOF |
姿态、速度、位置积分 |
SensorOutput |
生成 HIL 传感器数据 |
GPS Model |
生成 GPS 位置、速度和时间戳 |
Environment Model |
风、空气密度、扰动等环境输入 |
最小系统模板中,MotorNonlinearDynamic1~8 分别描述每个电机的非线性动态过程。静态过程把 PWM/油门转换为期望转速,动态过程用电机响应时间常数逼近期望转速;Force and Moment Model 再根据电机布局、旋向和力臂计算总拉力与三轴力矩。
Gazebo 模型接口模块¶
| 模块 | 说明 |
|---|---|
ESC_ALL / ESC |
电调响应、限幅和电机命令转换 |
MOTOR_ALL / MOTOR |
电机转速、推力和反扭矩模型 |
LIFTDRAG_ALL / LIFTDRAG |
升阻力气动模型 |
转换 Gazebo 模型时要统一坐标系、单位、转动方向、通道顺序和力矩正方向。
Simulink/DLL 与 ROS 转发¶
综合模型可以通过 Simulink 或 DLL 与 ROS 系统交换数据。关键数据结构包括:
| 数据结构 | 大小 | 方向 | 说明 |
|---|---|---|---|
SOut2Simulator |
168 字节 | Simulink/DLL 到仿真器 | 综合模型输出状态、传感器或控制数据 |
SILIntFloat |
120 字节 | 仿真器/ROS 到 Simulink/DLL | 8 个整数和 20 个浮点输入 |
运行时通常先启动 PX4、CopterSim、RflySim3D 和综合模型,再由综合模型监听 20100/30100/40100 系列端口,将状态或传感器结果转发到 ROS 话题,并接收 ROS 节点回写的控制或任务结果。
相关资源¶
注意:本文档为 RflySim Model 库的索引文档。各模块的详细使用说明请参考对应模块的独立文档页面。