2.1. 概述
PH47代码框架为二次开发用户提供了丰富的,面向无人机飞行控制以及其他运动控制领域的功能特性,依托这些预设的功能特性,用户能够在短时间内开发出具体具备强大功能及可靠性的二次开发应用。此章节主要对二次开发特性进行了详细描述。
2.2. PH47代码框架的层级结构
PH7代码框架中由底层向上划分成4个逻辑层,分别为:驱动层driver、框架层frame、算法层algorithms、应用层application,结构如下:
2.2.1. 驱动层drive
实现对PH47框架适用硬件控制板(BBP,PH7,SinglePilot等)内部接口、设备,以及外设传感器、存储器、驱动设备等硬件设备的驱动实现及管理。
驱动层可供所有二次开发用户进行修改或扩充。
驱动层引用对象为mcu(片内硬件设备)或drv(外设)
2.2.2. 框架层frame
实现整个PH47框架的构建及各项系统级功能,并进行系统运行管理及控制。
框架层由于涉及整个PH47框架功能实现及管理,故不对用户开放。
框架层的引用对象为frm或core,此外该层还有多个子引用对象,如core.para、frm.log 等。
2.2.3. 算法层algorithms
实现飞行控制中包括姿态解算、控制、导航控制等各主要算法,以及基础的数学库的实现。
算法层向二次开发用户开放,主要面向中级以上二次开发者。
算法层通过algo对象引用。
2.2.4. 应用层application
应用层是二次开发过程中最重要的层,对二次用户开放。用户在本层对自己的应用控制逻辑及功能代码及进行设计及实现。
应用层通过app对象进行引用。
2.3. PH47代码框架的功能模块扩充与替换机制
PH47代码框架整体采用模块化方式进行搭建。二次开发用户对除框架层外各层的主要功能模块均可进行替换,从而为用户升级,替换预置功能模块提供了极大的自由度。
驱动层可通过追加或替换驱动模块的方式增加或替换默认硬件架构下的外部设备,如各种传感器或存储模块等。与之对应,BBP系列飞控板的模块化硬件硬件架构也为外设替换提供了很大的便利。
算法层同样可通过增加或替换方式对现有飞控软件的功能进行升级扩展。
2.4. PH47代码框架的系统级基础支撑功能
系统级基础支撑功能本身是飞行控制或导航控制等功能的直接实现,但为飞控导航功能提供了必需的运行条件的周边环境,是飞控软件系统中必不可少的组成部分。
2.4.1. PH47代码框架的遥测数据通讯系统
在飞控端及地面站(CSS)端对飞行姿态状态数据、调参参数、航点数据在内的上下行通讯机制进行了完善封装,二次开发用户只需要简单调用PH47框架提供函数即可实现数据的上下行传输(控制参数系统)。以及对调参参数、航点数据的获取发送及使用。
对飞控与飞控之间的空空数据通讯也进行了完善封装,用户可使用系统提供框架即函数,实现自有多机任务协同或组网控制功能。
除使用已有预设数据帧外,用户还可在PH47框架层面自定义下行传输数据,并使用CSS配合进行解析.以及自定义上行控制数据,上述数据帧的自定义均无须在mavlink协议层面进行。
各下行数据帧传送速率用户可单独设定,可在运行期间动态修改设定。
对于CSS发送的上行控制帧,除采用密文传输外,还进行真伪鉴别,有效防止上行控制被劫持情况发生。
2.4.2. PH47代码框架的数据总线系统
数据总线系统为PH47框架的核心模块之一,在整个框架内建立起了数据传输的通道,以及数据赋值、读取机制。二次用户只需通过简单调用函数即可实现对数据的读写,获取及设置数据时间戳、权限控制等功能(数据总线系统)。
除使用PH47框架预设的数据项外,还可追加用户自定义数据项扩充数据总线,数据项数目理论上无限制(实际取决于飞控板存储容量)。
2.4.3. 机载控制参数系统
参数系统为PH47框架的重要模块,PH47框架协同地面站(CSS)对参数上下行参数传输机制进行了完善封装。用户通过简单函数调用即可实现对参数的读写及存储。
除使用PH47框架预设的机载参数外,还可追加用户自定义机载参数,目前可使用最多参数数量为256个(可扩充,取决于飞控板存储容量)。
用户在地面站端(CSS)可批量下载机载参数、修改,以及单个或批量上行发送机载参数。
2.4.4. 导航及航点管理系统
航点系统为PH47框架的重要模块,与机载参数系统类似,用户可通过简单函数调用实现对航点的读写及存储。
用户在地面站端(CSS)可下载、设置、上传航点设置。目前可使用最多航点数量为256个(可扩充,取决于飞控板存储容量)。
2.4.5. 消息发送,处理机制
PH47内建了消息循环机制及消息响应函数,二次开发用户可采用Send及Post两种方式发送消息并进行相应处理
用户可追加自定义message。
2.4.6. 全局状态、错误、警告记录系统
PH47内置的全局状态、错误、警告记录系统为二次开发以及分析记录飞控工作状态提供了功能强大且方便的工具
PH47框架对全局状态、错误,及警告从设置,到传输,到记录分析全过程进行了封装,用户简单调用相应函数即可设置、获取状态值
用户可在预设全局状态、错误,及警告的基础上,添加自定义状态变量。
全局状态、错误,及警告记录采用SendMessage及消息循环机制,确保即使在较低的遥测数据记录频率下也不会丢失实际的状态记录信息
2.4.7. 时间控制相关功能
时间控制功能是PH47中一个轻量但有用的功能模块,以全局函数的形式提供了ms,us级时间获取,运行时间间隔计算,loop频率控制等功能。
2.4.8. 开发调试功能
提供TRACE宏用于在程序运行过程中输出运行调试信息(类似功能还有全局函数gPringf())
提供ASSERT宏用于真值确认
通过调试串口的命令行控制,可执行调试函数.同样,通过地面站(CSS)调试命令同样可执行调试函数
框架层预置CTestSuit类,专用于调试功能函数设计及运行
默认下行遥测数据中预设调试数据传送帧,共计可对20个float类型调试数据进行观察记录及分析.调试数据可设置为系统中任意变量.
提供CLedOutput类以Led闪烁编码方式显示状态,用于在全新硬件架构开发初期调试手段有限情况下表示系统状态
2.4.9. 飞行数据记录及HIL系统
飞行数据记录分由地面站遥测数据记录,及机载飞行数据记录两个独立系统构成,可同时使用或单独使用。
用户可自定义数据记录的类型以及记录频率
能够以250hz频率回放实际飞行纪录数据进行硬件半实物仿真,便于在室内模拟情况下进行飞控相关双方的开发调试
2.4.10. 多飞控板协作控制
2.5. PH47代码框架飞行控制功能
2.5.1. 姿态测量模块
姿态测量模块以最高处理速率(设计值1500hz)对当前飞控的姿态数据进行测量、滤波以及融合等处理,并将最终处理结果赋予数据总线中相应数据项。
2.5.2. 位置—速度测量模块
通过对GPS位置数据、地速、空速数据的协同处理,获取当前定位精度状况、滤波处理后的空速、地速数据,并对空速计算进行实时校准。
2.5.3. 输入控制器
输入控制器对用户操作输入控制数据进行一定条件下的约束及滤波处理,同时根据飞行状态、模式等对数据进行一定的补偿处理。
2.5.4. 姿态控制器
姿态控制器对固定翼或多轴飞行器实施增稳飞行控制,根据当前飞行姿态状态、用户操作输入等条件,对飞行姿态进行控制。
2.5.5. 高度—速度控制器
高度—速度控制器对飞行实施定高—定速控制,通过总体能量控制(TECS)算法通过对油门及俯仰角实施对高度速度的控制。
2.5.6. 位置控制器
位置控制器对航线飞行功能进行实现
2.5.7. 舵机输出控制器
将上述各种控制器输出的目标控制数据转换为对舵机、电机的Pwm控制数据。
2.5.8. 状态控制器
对包括起飞、巡航、降落整个飞行过程中的飞行状态数据处理。适时根据当前飞行姿态、位置、状态、飞行模式及阶段、用户操作等条件没,设定、切换各种飞行状态。
2.5.9. 起飞控制器
目前版本固件主要对固定翼弹射起飞进行全自主控制。
2.5.10. 飞行模式控制
2.5.11. Failure Safe 及紧急状态控制
Failure Safe 采用两级故障处理机制,对RC、GPS,遥测通讯,飞行高度、范围等条件进行故障检测,并根据两级故障处理机制,对出现上述故障情况下的飞行进行盘旋、切断动力滑翔、降低遥测通讯速率、切换遥测通讯通道、切换主副飞控等一系列应急处理措施。
更多文章请参见我的专栏:无人机飞控
感兴趣的朋友可以联系(VX:SG_Uav)加入群聊了解更多关于PH47代码框架内容。