跳转至

RflySim Model-仿真模型相关模块库


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

RflySim 统一建模框架


模块列表

动力学模型

模块 功能描述
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 模拟传感器故障数据

使用注意事项

动力学建模

  1. 参数准确性:6DOF 模块的质量、转动惯量等参数需要与实际无人机匹配,否则仿真结果会失真
  2. 坐标系约定:模块使用 NED(北东下)坐标系和机体坐标系,输入输出数据需符合该约定
  3. 初始条件:设置合理的初始位置、速度、姿态,避免初始状态冲突导致仿真发散
  4. 数值稳定性:仿真步长不宜过大,建议固定步长不超过 1ms,保证数值积分稳定性

通信接口

  1. 端口配置:UDP 接收/发送模块的端口号需与 CopterSim 配置匹配,避免通信失败
  2. 网络设置:确保防火墙允许相应端口的 UDP 通信,特别是多机仿真场景
  3. 数据同步:通信模块的采样时间需与 Simulink 模型步长一致,避免数据错位
  4. 超时处理:接收模块需设置合理的超时机制,防止因通信中断导致仿真卡死

故障注入

  1. 参数范围:故障参数需在合理范围内,过大或过小的值可能导致仿真崩溃
  2. 故障时机:合理选择故障注入时机,避免在关键控制阶段注入严重故障
  3. 恢复机制:设计故障恢复逻辑,测试系统的容错能力和自恢复能力
  4. 安全边界:设置仿真安全边界,当状态超出安全范围时自动终止仿真

统一建模接口与模型模板

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 维执行器控制量输入,数值已归一化到 -11。它对应飞控回传的 MAVLink mavlink_hil_actuator_controls_t.controls,可在 QGroundControl 的 MAVLink Analyze 工具中查看实时变化。软件在环时,PX4 SITL 通过 TCP 4561++ 系列端口把电机控制指令发送到运动模型;硬件在环时,飞控通过串口把同类 MAVLink 指令送入模型。

inPWMs 与 MAVLink 控制链路

inCopterData 关键维度

inCopterData 为 32 维 double 数据,前 8 维保存 PX4/CopterSim 状态,9-24 维保存 RC 通道,25-32 维监听 rfly_px4 uORB 消息。

维度 含义
1 PX4 解锁标志位
2 接收到的 RC 通道总数;无可用 RC 通道时为 0
3 仿真模式标志:0=HITL1=SITL2=SimNoPX4
4 CopterSim 中的 3D fixed 标志位
5 PX4 VTOL_STATE 标志位
6 PX4 LANDED_STATE 标志位
9-24 ch1-ch16 RC 通道信号
25-32 rfly_px4 uORB 扩展消息

外部输入结构体

inSILIntsinSILFloats 通过 30100++2 系列端口输入,是综合模型的重要入口。

struct PX4SILIntFloat {
    int checksum;          // 1234567897
    int CopterID;
    int inSILInts[8];
    float inSILFLoats[20];
};

inFromUE 来自 RflySim3D/RflySimUE5,可用于地面交互、碰撞引擎和蓝图数据回传。

struct UEToCopterDataD {
    int checksum;          // 1234567899
    int CopterID;
    double inFromUE[32];
};

inCtrlExt1-inCtrlExt5 要求输入为 28 维 float,inDoubCtrls 要求输入为 28 维 double,均通过 30100++2 系列端口接收。前者常用于故障注入、参数修改和小规模扩展控制,后者适合综合模型中需要双精度外部输入的场景。

外部控制输入接口

inDoubCtrls 为 28 维 double 输入,适合大场景综合模型仿真:

struct DllInDoubCtrls {
    int checksum;          // 1234567897
    int CopterID;
    double inDoubCtrls[28];
};

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 库的索引文档。各模块的详细使用说明请参考对应模块的独立文档页面。