UDP_20100_PX4SilRecv 模块文档¶
所属工具箱:RflySim Model

简介¶
一句话描述:监听指定UDP 20101++2系列端口,接收PX4软件在环仿真输出的飞控状态数据并解析输出。
该模块属于RflySim Model接口库,用于PX4软件在环仿真场景下Simulink算法与PX4飞控的状态数据交互,主要配合PX4 SITL仿真流程与外部自定义控制算法开发使用。模块会根据设置的CopterID自动对应到20101起始的对应UDP端口,接收CopterSim发送的PX4飞控解算得到的完整飞控状态数据,包括原始GPS信息、位置、速度、姿态等,解析后以结构体形式输出,供Simulink中的自定义控制算法调用。
该模块多用于基于RflySim工具链的外部控制器开发验证场景,开发者可基于该模块获取PX4飞控输出的全量状态信息,结合自定义控制逻辑生成控制指令,实现扩展控制算法的仿真验证,支持多机仿真场景下对应指定无人机的状态数据接收。
端口说明¶
输入端口(Inputs)¶
本模块无输入端口。
输出端口(Outputs)¶
| 端口名 | 数据类型 | 维度 | 说明 |
|---|---|---|---|
time_boot_ms |
double |
1×1 |
消息时间戳,单位为毫秒 |
copterID |
double |
1×1 |
无人机ID,从1开始编号 |
GpsPos |
double |
1×3 |
估计GPS位置,格式为[纬度, 经度, 高度],纬度、经度单位为度,高度单位为米 |
GpsVel |
double |
1×3 |
估计GPS速度,NED坐标系,单位为m/s |
gpsHome |
double |1×3` |
家点GPS位置,格式为[纬度, 经度, 高度],纬度、经度单位为度,高度单位为米 | |
relative_alt |
double |
1×1 |
相对高度,单位为米 |
hdg |
double |
1×1 |
航向角,NED坐标系,单位为度,范围0~360 |
satellites_visible |
double |
1×1 |
可见卫星数量 |
fix_type |
double |
1×1 |
GPS定位类型,3为定点定位(精度良好) |
AngEular |
double |
1×3 |
估计姿态欧拉角 [滚转, 俯仰, 偏航],单位为rad |
localPos |
double |
1×3 |
估计局部位置,NED坐标系,单位为m |
localVel |
double |
1×3 |
估计局部速度,NED坐标系,单位为m/s |
pos_horiz_accuracy |
double |
1×1 |
GPS水平定位精度,单位为m |
pos_vert_accuracy |
double |
1×1 |
GPS垂直定位精度,单位为m |
注:原始输出结构体中的预留字段默认不对外输出,若需要可通过自定义配置获取 [待确认]
参数配置(Parameters)¶
双击模块打开的 Mask 对话框中可配置以下参数:
| 参数名 | 类型 | 默认值 | 可选值/范围 | 说明 |
|---|---|---|---|---|
CopterID |
int |
1 |
1~255 |
无人机ID,用于标识需要监听的特定无人机 |
GPS Orin latLon (degree) |
double vector |
[31.0, 121.0] |
任意合法经纬度 | GPS原点的经纬度,格式为[纬度,经度],单位为度 |
GPS Orin Altitude (m) |
double |
10.0 |
任意合法高度 | GPS原点的高度,单位为米 |
Sample Time (s) |
double |
0.01 |
>0 |
模块采样时间,单位为秒 |
参数设置说明¶
CopterID¶
本模块为单无人机监听模块,CopterID用于确定需要监听的无人机对应的UDP端口,端口号为 20100 + 2*CopterID,即对于ID为1的无人机,监听端口为20102。
GPS Orin latLon (degree)¶
该参数定义仿真环境中GPS原点的经纬度,用于将ENU局部坐标系转换为WGS84全球经纬度坐标,需与仿真环境配置保持一致。
GPS Orin Altitude (m)¶
该参数定义仿真环境中GPS原点的海拔高度,用于高度转换计算,需与仿真环境配置保持一致。
Sample Time (s)¶
该参数指定模块在Simulink仿真中的采样周期,单位为秒,通常PX4飞控状态更新频率为100Hz,推荐设置为0.01s。
模块特性(Block Characteristics)¶
| 特性项 | 值 |
|---|---|
| 支持的数据类型 | double、single、uint32_t、int32_t、float |
| 直接馈通(Direct Feedthrough) | 否 |
| 采样时间 | 离散 |
| 代码生成支持 | 是 |
数据通信协议¶
本模块基于UDP协议通信,监听端口规则为端口号 = 20100 + CopterID + 1,即对应20101++2系列端口,使用自定义结构体格式封装数据:
-
接收数据整体封装格式:
-
负载数据
outHILStateData格式:struct outHILStateData{ uint32_t time_boot_ms; //消息时间戳,单位ms uint32_t copterID; //飞机ID,从1开始编号 int32_t GpsPos[3]; //GPS估计位置:纬度/经度单位为度*1e7,高度单位为m*1e3,向上为正 int32_t GpsVel[3]; //GPS估计速度,NED系,单位为m/s*1e2即cm/s int32_t gpsHome[3]; //返航点GPS位置,单位同GpsPos int32_t relative_alt; //相对高度,单位同GpsPos高度 int32_t hdg; //航向角,NED系,单位为deg*1000,范围0~360 int32_t satellites_visible; //可见卫星数量 int32_t fix_type; //GPS定位类型,3表示定点定位(精度良好) int32_t resrveInit; //预留整数位 float AngEular[3]; //估计欧拉角,单位rad float localPos[3]; //估计局部位置,NED系,单位m float localVel[3]; //估计局部速度,NED系,单位m/s float pos_horiz_accuracy; //GPS水平定位精度,单位m float pos_vert_accuracy; //GPS垂直定位精度,单位m float resrveFloat; //预留浮点位 }
相关模块¶
| 模块名 | 说明 |
|---|---|
UDP_20100_PX4ControlSend |
通过UDP 20100++2系列端口发送外部控制指令给PX4仿真飞控 |
UDP_RflySim_Send |
向RflySim可视化界面发送飞行器状态数据 |
UDP_RflySim_Recv |
从RflySim可视化界面接收用户交互控制指令 |
使用示例¶
相关使用示例请参考以下路径:
请在上述路径中查看
Readme.pdf获取完整的示例说明与操作步骤。
注意事项与常见问题¶
- 初始化顺序:需先启动PX4 SITL仿真或RflySim平台的任务,再启动包含该模块的Simulink仿真,否则模块会无法监听到UDP端口数据,导致所有输出保持初始零值。
- 端口对应规则:该模块监听
20101 + 2*(CopterID-1)端口,多机仿真场景下请为每架飞机配置唯一的CopterID,避免不同飞机的UDP数据监听冲突。 - 坐标系匹配:模块输出的位置、速度数据均符合NED坐标系约定,若你使用ENU坐标系开发,需要自行对输出数据做坐标系转换。
- GPS数据单位:输出中原始GPS位置、GPS速度、相对高度、航向角均为定标后的整型值:纬度经度单位为
deg*1e7,高度单位为mm,速度单位为cm/s,航向单位为deg*1e-3,使用时需要按照对应比例还原物理量。 - 采样时间匹配:模块的
Sample Time参数建议和PX4飞控的状态更新周期(通常为250Hz即0.004s)匹配,设置过大会导致数据更新不及时,设置过小会产生不必要的重复数据读取。 - 防火墙拦截问题:若启动后模块无法接收数据,请检查系统防火墙是否拦截了MATLAB/Simulink的UDP网络访问权限,放行后即可正常监听。
- 原点参数一致性:模块配置的
GPS Orin latLon和GPS Orin Altitude需要和RflySim可视化界面中设置的起飞原点经纬度高度完全一致,否则会导致本地NED位置计算结果错误。
更新日志¶
v4.1.0(2024-01-15): 初始发布UDP_20100_PX4SilRecv模块,支持监听UDP 20101++2系列端口读取PX4仿真飞控状态数据,输出完整飞ros状态结构体数据。