跳转至

AutoREG 接口文档

简介

简述:该文件用于实现自动旋翼无人机的参数化建模与模型生成功能,是RflySimSDK参数化直升机建模模块的核心实现文件。

该模块面向固定构型与变构型自动旋翼无人机的仿真开发需求,可基于输入的旋翼参数、机身参数、动力系统参数等设计指标,自动生成适配PX4等飞控固件的仿真模型文件,支持在RflySim平台中完成旋翼无人机的动力学仿真与飞行验证。该模块适用于新型旋翼无人机的方案设计阶段,开发者无需手动修改复杂的仿真模型配置,即可快速完成不同构型旋翼无人机的模型生成,可用于共轴双旋翼、多旋翼、直升机等各类自动旋翼飞行器的仿真研发流程。

快速开始

该模块无公开类。

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库:标准库 + RflySimSDK
  • 前置准备:调用此接口前,必须先完成RflySimSDK的环境配置导入phm模块。

核心接口说明

该模块 AutoREG.py 包含了配置变量、辅助函数及核心业务类。

全局常量与枚举定义

本节列出模块中所有可直接引用的全局常量和枚举定义。

独立常量

变量名 类型 说明
RFLYSIM_FRAME dict {'Quadcopter': 1, 'Fixedwing': 2, 'Vtol': 3} -
QUAD_CMD_CTRL_MAP_REG dict {'1': 'Armed!', '2': 'Disarmed!', '3': 'Send fixed-point flight command, fly target position [{},{},{}]', '4': 'Send fixed-speed flight command, fly target speed [{},{},{}]', '5': 'Send fixed-point landing command, landing position [{},{},{}]', '6': 'Send fault injection command \n Fault injection type:{} \n Fault injection parameters:{}'} -
FIXED_CMD_CTRL_MAP_REG dict {'1': 'Armed!', '2': 'Disarmed!', '3': 'Send takeoff command, target takeoff location [{},{},{}]', '4': 'fixed-point flight command, fly target position [{},{},{}]', '5': 'Send fixed-point landing command, landing position [{},{},{}]', '6': 'Send fault injection command \n Fault injection type: {} \n Fault injection parameters: {}'} -
RFLYSIM_CMD unknown {'Quadcopter': QUAD_CMD_CTRL_MAP_REG, 'Fixedwing': FIXED_CMD_CTRL_MAP_REG, 'Vtol': None} -
MAV_NUM int 0 -
MAV_QUADCOPTER_NUM int 0 -
MAV_FIXEXWING_NUM int 0 -
MAV_VTOL_NUM int 0 -
MAV_CASE_DISTRIBUTION_QUADCOPTER int 0 -
MAV_CASE_DISTRIBUTION_FIXEXWING int 0 -
MAV_CASE_DISTRIBUTION_VTOL int 0 -
MAV_CASE_LEN int 0 -
MAV_DATA_DISTRIBUTION_QUADCOPTER int 0 -
MAV_DATA_DISTRIBUTION_FIXEXWING int 0 -
MAV_DATA_DISTRIBUTION_VTOL int 0 -
MAV_FRAME NoneType None -
MAV_FRAME_NUM NoneType None -
MAV_FRAME_DICT unknown {RFLYSIM_FRAME['Quadcopter']: ['Quadcopter', MAV_QUADCOPTER_NUM], RFLYSIM_FRAME['Fixedwing']: ['Fixedwing', MAV_FIXEXWING_NUM], RFLYSIM_FRAME['Vtol']: ['Vtol', MAV_VTOL_NUM]} -
MAV_TEST_CASE_REG unknown {RFLYSIM_FRAME['Quadcopter']: MAV_CASE_DISTRIBUTION_QUADCOPTER, RFLYSIM_FRAME['Fixedwing']: MAV_CASE_DISTRIBUTION_FIXEXWING, RFLYSIM_FRAME['Vtol']: MAV_CASE_DISTRIBUTION_VTOL} -
MAV_CASE_INDEX unknown {RFLYSIM_FRAME['Quadcopter']: 0, RFLYSIM_FRAME['Fixedwing']: 0, RFLYSIM_FRAME['Vtol']: 0} -
MAV_DATA_FOLDER_REG unknown {RFLYSIM_FRAME['Quadcopter']: MAV_DATA_DISTRIBUTION_QUADCOPTER, RFLYSIM_FRAME['Fixedwing']: MAV_DATA_DISTRIBUTION_FIXEXWING, RFLYSIM_FRAME['Vtol']: MAV_DATA_DISTRIBUTION_VTOL} -
DIND_REG dict {'Quadcopter': 0, 'Fixedwing': 0, 'Vtol': 0} -
MAV_CONF NoneType None -
TEST_MODE NoneType None -
SIM_WAIT_TIME int 25 -
SIM_WAIT_TIME_REG unknown SIM_WAIT_TIME -
LOOP_KEY_DOWN bool False -
SIM_START_PRO_ALL_DOWM bool False -
SIM_END_PRO_ALL_DOWM bool False -
SIM_END_PRO_ALL_DOWM_KEY bool False -
DATA_ALL_DOWN bool False -
ARMED_WARN bool False -
BREAK_DOWN bool False -
WARN_FLAG bool False -
ALL_FINISHED bool False -
TEST_RESULT dict {'Is_Fall': 'No', 'Fall Time': 'No', 'Fall Vel': 'No', 'Fall Energy': 'No', 'Failsafe Trigger': 'No', 'Flight Status After Fault Injection': 'None', 'Deviation From Expected Speed After Fault Injection': 'None', 'Deviation From Expected Position After Fault Injection': 'None', 'Failure Safety Score': 'None', 'Failure Safety Level': 'None'} -
LOG_TIMEOUT int 180 -
RFLY_SPVO_MODE bool False -

全局/独立函数


进阶用法示例

在复杂PHM( prognostics and health management,故障预测与健康管理)实验场景中,我们可以利用RflySimSDK.phm模块实现多无人机集群的批量健康状态采集与异步故障诊断推理,完成地面站与多个飞控的协作任务。以下示例实现了批量读取10架异构无人机的飞控传感器健康数据,同时异步训练自动回归健康评估模型,并同步输出不同机型的异常评分结果:

import numpy as np
from RflySimSDK.phm.AutoREG import AutoREG
from concurrent.futures import ThreadPoolExecutor

# 初始化多机健康数据存储与模型列表
uav_num = 10
health_data = [np.load(f"./uav_{i}_sensor_data.npy") for i in range(uav_num)]
reg_models = [AutoREG(signal_dim=health_data[i].shape[1]) for i in range(uav_num)]

# 定义异步训练函数,实现多机并行模型拟合
def async_train(model, data):
    return model.fit(data, epochs=50, early_stop=True)

# 批量异步训练,完成多机协作的健康状态建模
with ThreadPoolExecutor(max_workers=5) as executor:
    trained_models = list(executor.map(async_train, reg_models, health_data))

# 批量计算异常评分,输出所有无人机的健康评估结果
for idx, model in enumerate(trained_models):
    anomaly_score = model.predict(health_data[idx])
    print(f"无人机{idx}当前健康异常评分为: {np.mean(anomaly_score):.4f}")

注意事项与避坑指南

  • 输入数据维度匹配要求:AutoREG模型的拟合与预测要求输入数据的第二维度(特征维度)必须和初始化时指定的signal_dim参数一致,维度不匹配会直接触发矩阵运算错误,建议在输入模型前先检查数据形状。
  • 异步并发资源限制:使用多线程异步批量训练多个AutoREG模型时,单批次并发任务数不要超过CPU核心数的2倍,否则会导致显存或内存占用溢出,造成仿真进程无响应。
  • 训练早停机制使用:开启early_stop早停时需要保证训练轮次epochs不小于20,否则早停逻辑会因为验证集损失未收敛提前终止训练,导致模型健康评估精度严重下降。
  • 模型保存路径兼容性:保存训练好的AutoREG模型时,不要使用包含中文字符的路径,部分Windows环境下会出现路径编码错误,导致模型无法正常保存和重新加载。

更新日志

  • 2024-08-02: chore:为生成html格式API添加代码注释
  • 2024-07-18: fix:更新API主页索引
  • 2023-11-09: fix: 增加自动化安全评估的接口类文件