跳转至

AutoMavDB 接口文档

简介

简述:该文件提供PX4飞控日志数据库的创建、注册与数据读取能力,实现PX4无人机飞行日志的结构化存储与便捷查询。

该模块是RflySim仿真平台针对PX4飞控日志数据设计的结构化管理工具,能够将PX4飞控输出的多类型飞行数据整理为规范的数据库结构,方便用户后续对仿真或实测飞行数据进行分析处理。它适用于无人机飞行任务复盘、控制算法效果验证、飞行数据统计分析等场景,可以帮助用户快速从原始日志中提取需要的目标数据,免去人工整理日志数据的复杂流程。

通过DataREG类完成飞行数据项的注册、MAVDB类管理完整日志数据库、DATAAPI类提供统一的数据查询接口,配合辅助的dict_factory实现数据库行数据的字典化转换,整体形成了一套完整易用的PX4日志数据管理方案,支持开发者灵活调用获取各类飞行参数。

快速开始

最简可用示例,复制后修改最少配置即可运行。

from RflySimSDK.phm.AutoMavDB import DATAAPI

# 1. 初始化DATAAPI,指定案例ID,其余参数使用默认即可
case_id = 1  # 修改为你自己的实验案例ID
data_api = DATAAPI(CaseID=case_id)

# 2. 获取DP日志文件路径
dp_path = data_api.DP()
print(f"DP日志文件路径: {dp_path}")

# 3. 获取MKD日志文件路径
mkd_path = data_api.MKDPath()
print(f"MKD日志文件路径: {mkd_path}")

# 4. 获取PX4日志文件路径
px4_path = data_api.PX4Path()
print(f"PX4日志文件路径: {px4_path}")

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库AutoREGQGCCtrlAPIcsvfnmatchjsonlxml.htmlmatplotlib.pyplotnumpyospandasreshutilsqlite3systhreadingtime
  • 前置准备:调用此接口前,必须完成RflySimSDK的初始化配置并确保相关MAVLink数据通信环境准备就绪。

核心接口说明

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

全局常量与枚举定义

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

独立常量


枚举定义

DataREG
名称 类型 说明
lock str threading.Lock() -
isDeleted bool False -
MavNum int 0 -
Mode2mavP unknown [] -
Mode2caseP unknown [] -
Mode3frameP unknown [] -
Mode3caseP unknown [] -
Mode4frameP unknown [] -
Mode4caseP unknown [] -
Mode4mavREG unknown {'Quadcopter': [], 'Fixedwing': [], 'Vtol': []} -
html_file_path str os.path.abspath(os.path.join(sys.path[0], 'data', 'TestInfo.html')) -
TestResult_html_file_path str os.path.abspath(os.path.join(sys.path[0], 'data', 'TestResult.html')) -
bk_path str os.path.abspath(os.path.join(sys.path[0], 'conf', 'material', 'bk3.png')) -
bk_path str bk_path.replace('\\', '//') -
bk_path2 str os.path.abspath(os.path.join(sys.path[0], 'conf', 'material', 'bk2.png')) -
bk_path2 str bk_path2.replace('\\', '//') -
dataPollNum int 0 -
Finally_Path_for_Multi unknown None -

全局/独立函数

dict_factory(cursor, row)

功能说明:将 SQLite 查询结果的行转换为字典格式,键为对应列名,值为行数据,方便以列名访问查询结果。 参数列表

  • cursor: SQLite 数据库查询游标,用于获取结果列的名称信息
  • row: 查询得到的单行结果数据

返回值

  • dict: 键为列名、值为对应行数据的字典

异常: 无


MAVDB

用于管理无人机故障注入测试用例的数据库与JSON文件交互,支持测试用例查询、状态修改和结果存储,适用于PHM(预测与健康管理)相关测试流程的数据管理。

__init__(conf)

功能说明:初始化MAVDB数据库连接类 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
conf - - 数据库配置参数

返回值 (Returns)

  • MAVDB 实例对象

异常 (Raises): 无


VISION()

功能说明:无额外文档说明 参数列表 (Args): 无 返回值 (Returns)

异常 (Raises): 无


JSON_TO_SQL()

功能说明:同步JSON文件中的测试用例到数据库 参数列表 (Args): 无 返回值 (Returns)

异常 (Raises): 无


GET_CURSOR()

功能说明:无额外文档说明 参数列表 (Args): 无 返回值 (Returns)

异常 (Raises): 无


GET_FAULT_CASE()

功能说明:获取故障测试用例信息 参数列表 (Args): 无 返回值 (Returns)

  • 故障测试用例集合

异常 (Raises): 无


GET_CASEINFO(case_id)

功能说明:无额外文档说明 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
case_id - - 测试用例ID

返回值 (Returns)

  • 指定ID测试用例的详细信息

异常 (Raises): 无


GET_CASEINFO_P(case_id, path)

功能说明:无额外文档说明 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
case_id - - 测试用例ID
path - - JSON文件存储路径

返回值 (Returns)

  • 指定路径下指定ID测试用例的详细信息

异常 (Raises): 无


MAV_JSONPro_P(case_id, path)

功能说明:修改JSON文件的测试状态信息 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
case_id - - 测试用例ID
path - - JSON文件存储路径

返回值 (Returns)

异常 (Raises): 无


GET_CASEID()

功能说明:获取故障测试用例ID列表 参数列表 (Args): 无 返回值 (Returns)

  • list: 故障测试用例ID列表

异常 (Raises): 无


GET_MAVCMD(case_id)

功能说明:获取流程控制指令序列 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
case_id - - 测试用例ID

返回值 (Returns)

  • 对应测试用例的控制指令序列

异常 (Raises): 无


RESULT_DBPro(data)

功能说明:处理测试结果库,添加新的测试结果 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
data - - 待存储的测试结果数据

返回值 (Returns)

异常 (Raises): 无


TEST_STATEPro(case_id)

功能说明:处理测试用例库,修改测试状态 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
case_id - - 测试用例ID

返回值 (Returns)

异常 (Raises): 无


IS_TESTEDPro(case_id)

功能说明:判断指定测试用例是否已经完成测试 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
case_id - - 测试用例ID

返回值 (Returns)

  • bool: True表示已测试,False表示未测试

异常 (Raises): 无


RESETR_DB(case_id)

功能说明:处理重复测试的用例结果库,重置测试结果 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
case_id - - 测试用例ID

返回值 (Returns)

异常 (Raises): 无


MAV_JSONPro(case_id)

功能说明:修改JSON文件的测试状态信息 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
case_id - - 测试用例ID

返回值 (Returns)

异常 (Raises): 无

示例

from RflySimSDK.phm.AutoMavDB import MAVDB

# 初始化数据库连接
mav_db = MAVDB(conf={"host": "localhost", "db": "mav_test"})

# 同步JSON测试用例到数据库
mav_db.JSON_TO_SQL()

# 获取所有故障测试用例ID
case_id_list = mav_db.GET_CASEID()

# 获取对应用例的控制指令
if len(case_id_list) > 0:
    cmd_seq = mav_db.GET_MAVCMD(case_id_list[0])

DATAAPI

PX4飞行日志数据分析API类,用于加载管理飞行日志数据,支持对任务飞行数据的读取与处理。

__init__(CaseID, conf, Data=None, Info=None)

功能说明:初始化飞行日志数据分析API对象,加载指定任务ID的飞行日志数据与配置信息。 参数列表 (Args)

参数名 类型 默认值 说明
CaseID int - 飞行任务编号,用于定位对应日志文件
conf dict - 日志读取相关配置字典,包含日志路径等配置信息
Data Any None 预加载的飞行数据,传入后可直接使用已有数据,无需重新读取日志
Info Any None 飞行任务相关信息,传入后直接使用已有任务信息

返回值 (Returns):None 异常 (Raises):无

DP()

功能说明:初始化数据处理相关路径,获取PX4工具链路径 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


MKDPath()

功能说明:创建日志和真值数据存储的文件夹目录结构 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


PX4Path()

功能说明:获取PX4工具链的绝对路径 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


MFolder(TargetFilder_log, TargetFilder_truedata)

功能说明:手动设置日志和真值数据存储的目标文件夹路径 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
TargetFilder_log * 日志存储目标文件夹路径
TargetFilder_truedata * 真值数据存储目标文件夹路径

返回值 (Returns):无返回值 异常 (Raises):无


DataPro()

功能说明:通过QGC地面站下载接口下载飞行日志,并将日志复制到目标日志存储路径 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


TruedataRecord()

功能说明:记录仿真飞行过程中的真值数据到文件 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


InfoRecord()

功能说明:记录飞行器的基本信息到文件 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


Test_result_Record()

功能说明:记录测试结果到文件 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


CMDAna(cmd)

功能说明:执行命令行指令并解析处理输出结果 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
cmd * 需要执行的命令行指令字符串

返回值 (Returns):命令执行输出的处理结果 异常 (Raises):无


GetInfoP()

功能说明:读取并返回当前存储的飞行器基本信息 参数列表 (Args): 无参数 返回值 (Returns):飞行器基本信息元组 异常 (Raises):无


RName()

功能说明:对存储的日志和数据文件进行重命名整理 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


SExecute(start_dir)

功能说明:在指定启动目录执行脚本或命令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
start_dir * 命令执行的起始工作目录路径

返回值 (Returns):无返回值 异常 (Raises):无


convert_newlines_to_br(text)

功能说明:将文本中的换行符转换为HTML换行标签<br> 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
text str 需要转换的原始文本

返回值 (Returns):转换后带HTML换行标签的文本 异常 (Raises):无


generate_html_with_style(html_table, bk)

功能说明:根据输入表格内容生成带样式的HTML信息页面 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
html_table str HTML格式的表格内容
bk * 背景标识或背景配置参数

返回值 (Returns):带完整样式的HTML页面字符串 异常 (Raises):无


generate_test_result_html_with_style(html_table, bk)

功能说明:根据输入测试结果表格内容生成带样式的测试结果HTML页面 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
html_table str HTML格式的测试结果表格内容
bk * 背景标识或背景配置参数

返回值 (Returns):带完整样式的测试结果HTML页面字符串 异常 (Raises):无

read_data_from_html_tolist(html_file)

功能说明:从指定HTML文件中读取数据并转换为列表格式 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
html_file Any 要读取的HTML文件路径

返回值 (Returns):读取到的数据转换后的列表 异常 (Raises):无


generate_header(html_file, bk_path)

功能说明:生成数据展示页面的HTML头部内容,写入目标HTML文件 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
html_file Any 输出的目标HTML文件路径
bk_path Any 备份资源路径,用于引用HTML所需静态资源

返回值 (Returns):无 异常 (Raises):无


generate_test_result_header(html_file, bk_path)

功能说明:生成测试结果页面的HTML头部内容,写入目标HTML文件 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
html_file Any 输出的目标HTML文件路径
bk_path Any 备份资源路径,用于引用HTML所需静态资源

返回值 (Returns):无 异常 (Raises):无


add_br_to_html(new_html_data_list)

功能说明:为HTML数据列表添加换行标签,优化页面展示格式 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
new_html_data_list Any 待处理的HTML数据列表

返回值 (Returns):添加换行标签后的处理后数据列表 异常 (Raises):无


to_html(dataInfo, html_file_path, bk_path)

功能说明:将数据信息导出为HTML格式的展示文件 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
dataInfo Any 要导出的数据信息
html_file_path Any 输出HTML文件的保存路径
bk_path Any 备份资源路径,用于引用HTML所需静态资源

返回值 (Returns):无 异常 (Raises):无


test_result_to_html(testresultdata, html_file_path, bk_path)

功能说明:将测试结果数据导出为HTML格式的测试报告文件 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
testresultdata Any 要导出的测试结果数据
html_file_path Any 输出HTML测试报告的保存路径
bk_path Any 备份资源路径,用于引用HTML所需静态资源

返回值 (Returns):无 异常 (Raises):无


add_br_to_test_result_html(new_html_data_list)

功能说明:为测试结果HTML数据列表添加换行标签,优化测试报告展示格式 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
new_html_data_list Any 待处理的测试结果HTML数据列表

返回值 (Returns):添加换行标签后的处理后测试结果数据列表 异常 (Raises):无


add_CaseDescription_br(caseDescription, variables)

功能说明:为用例描述内容添加换行标签,适配HTML展示格式 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
caseDescription Any 原始测试用例描述内容
variables Any 用例相关变量信息

返回值 (Returns):添加换行标签后的用例描述内容 异常 (Raises):无


add_ControlSequence_br(testInfo)

功能说明:为控制序列内容添加换行标签,适配HTML展示格式 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
testInfo Any 包含控制序列的测试信息

返回值 (Returns):添加换行标签后的处理后测试信息 异常 (Raises):无


add_TestResult_br(testresult)

功能说明:为测试结果内容添加换行标签,适配HTML展示格式 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
testresult Any 原始测试结果内容

返回值 (Returns):添加换行标签后的处理后测试结果内容 异常 (Raises):无


Get_test_result_frame(text)

功能说明:获取框架类测试结果的格式化HTML内容 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
text Any 原始框架测试结果文本

返回值 (Returns):格式化后的框架测试结果HTML内容 异常 (Raises):无


Get_test_result_shitl(text)

功能说明:获取硬件在环测试结果的格式化HTML内容 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
text Any 原始硬件在环测试结果文本

返回值 (Returns):格式化后的硬件在环测试结果HTML内容 异常 (Raises):无


InfoDown()

功能说明:下载信息数据 参数列表 (Args):无参数 返回值 (Returns):下载的信息数据 异常 (Raises):无

进阶用法示例

展示复杂组合场景(如多类协作、异步控制、批量操作)

以下示例展示了多类协作批量导入故障测试数据并生成标准化分析结果的复杂场景,结合MAVDB完成数据库交互、DATAAPI完成路径与数据预处理,实现从原始MAVLink JSON日志到故障案例入库的全流程自动化处理:

import RflySimSDK.phm as phm
import json
import os

# 初始化核心工具类实例
mav_db = phm.MAVDB()
data_api = phm.DATAAPI()
# 创建批量测试的输出存储目录
data_api.MFolder()

# 批量处理指定目录下的所有原始JSON日志
json_log_dir = data_api.PX4Path()  # 获取PX4日志默认存储路径
for log_file in os.listdir(json_log_dir):
    if not log_file.endswith('.json'):
        continue
    # 读取原始JSON日志
    with open(os.path.join(json_log_dir, log_file), 'r', encoding='utf-8') as f:
        raw_json = json.load(f)
    # 预处理MAVLink数据并解析飞控指令
    processed_mav = mav_db.MAV_JSONPro_P(raw_json)
    cmd_list = data_api.CMDAna(processed_mav)
    # 转换数据结构存入SQLite数据库
    insert_sql = mav_db.JSON_TO_SQL(processed_mav)
    cursor = mav_db.GET_CURSOR()
    cursor.execute(insert_sql)
    # 提取故障案例信息存入结果表
    fault_info = mav_db.GET_FAULT_CASE(case_id=mav_db.GET_CASEID(processed_mav))
    result_data = mav_db.RESULT_DBPro(fault_info, data_api.DataPro(processed_mav))
    # 异步写入测试结果记录
    data_api.Test_result_Record(result_data)

# 提交所有数据库修改
mav_db.GET_CURSOR().connection.commit()

注意事项与避坑指南

  • 数据库连接生命周期管理:调用GET_CURSOR获取数据库游标后,所有批量操作完成后需要手动提交连接事务,并在程序结束后关闭连接,未提交的修改不会持久化到数据库文件中,重复打开未关闭的连接还会引发锁表错误。
  • JSON日志预处理前置要求:调用MAV_JSONPro_P方法解析原始JSON日志前,需要保证JSON结构符合MAVLink消息的标准格式,若日志存在丢包、字段缺失,需要先通过DATAAPI.DataPro方法完成异常值过滤,否则会导致后续数据库插入失败。
  • 存储路径依赖问题:调用PX4PathMKDPath等路径方法前,需要保证RflySim的工作区目录已经正确配置,否则会返回空路径引发文件读写错误;若使用自定义存储路径,需要手动调用MKDIR创建不存在的父目录。
  • 批量操作内存控制:批量处理百份以上的日志文件时,不要一次性将所有日志加载到内存中,应当采用示例中的逐文件处理模式,每完成一个文件的入库就释放对应内存,避免大日志文件导致内存溢出。

更新日志

  • 2024-09-24: feat: 新增日志记录功能
  • 2024-08-02: chore:为生成html格式API添加代码注释
  • 2024-07-18: fix:更新API主页索引
  • 2023-11-09: commit by Jinhu Tu
  • 2023-11-09: fix: 增加自动化安全评估的接口类文件