跳转至

UDP_20100_PX4SilRecv 模块文档

所属工具箱:RflySim Model

UDP_20100_PX4SilRecv 模块外观

简介

一句话描述:监听指定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)

特性项
支持的数据类型 doublesingleuint32_tint32_tfloat
直接馈通(Direct Feedthrough)
采样时间 离散
代码生成支持

数据通信协议

本模块基于UDP协议通信,监听端口规则为端口号 = 20100 + CopterID + 1,即对应20101++2系列端口,使用自定义结构体格式封装数据:

  1. 接收数据整体封装格式:

    typedef struct _netDataShortShort {
        uint32_t TargetType tg; //目标端口标识
        int len; //传输结构体总长度,固定为120
        char payload[112]; //有效数据负载,存储`outHILStateData`结构体
    }netDataShortShort;
    
  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可视化界面接收用户交互控制指令

使用示例

相关使用示例请参考以下路径:

[RflySim安装路径]/RflySimAPIs/4.RflySimModel/0.ApiExps/3.ExtCtrlAPI/1.ExtCtrlAPI-UDP20100/Readme.pdf

请在上述路径中查看 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 latLonGPS Orin Altitude需要和RflySim可视化界面中设置的起飞原点经纬度高度完全一致,否则会导致本地NED位置计算结果错误。

更新日志

  • v4.1.0 (2024-01-15): 初始发布UDP_20100_PX4SilRecv模块,支持监听UDP 20101++2系列端口读取PX4仿真飞控状态数据,输出完整飞ros状态结构体数据。