2. PH47代码框架二次开发功能特性

news2024/9/28 14:34:09

2.1. 概述

PH47代码框架为二次开发用户提供了丰富的,面向无人机飞行控制以及其他运动控制领域的功能特性,依托这些预设的功能特性,用户能够在短时间内开发出具体具备强大功能及可靠性的二次开发应用。此章节主要对二次开发特性进行了详细描述。

2.2. PH47代码框架的层级结构

PH7代码框架中由底层向上划分成4个逻辑层,分别为:驱动层driver、框架层frame、算法层algorithms、应用层application,结构如下:
PH47代码框架逻辑层
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代码框架内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2173805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sentinel原理源码分析系列(一)-总述

背景 微服务是目前java主流开发架构,微服务架构技术栈有,服务注册中心,网关,熔断限流,服务同学,配置中心等组件,其中,熔断限流主要3个功能特性,限流,熔断&…

云原生之运维监控实践-OpenEuler22.03SP3上安装Prometheus与Grafana实现主机状态监测

背景 如果没有监控,那么最好的情况是没有问题发生,最糟糕的情况则是问题发生了但没有被发现。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章,当时使用的是 docker-compose 在单台机器上部署若依…

NutUI 单元测试:从 jest 到 vitest

NutUI Vue 自 3.0 版本起,开始使用 vite 作为项目的构建工具,单元测试工具则依然使用 jest。而后 vite 官方团队开源了 vitest 作为 vite 的首选测试框架和 jest 的替代品。 本文主要介绍 NutUI 从 jest 到 vitest 的迁移过程,以及后续对于单…

电商系统开发全攻略:基于Spring Boot的在线商城

2 相关技术 2.1 Springboot框架介绍 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring…

Go 项目开发常用设计模式

设计模式就某些编码场景下的最佳实践,用来解决常见的软件设计问题。Go 语言不是面向对象语言,但是可以使用结构体、接口等类型实现面向对象语言的特性,想要弄懂设计模式,要熟练的使用 Go 语言接口类型 和结构体类型 设计模式总体上…

关于Chrome浏览器F12调试,显示未连接到互联网的问题

情况说明 最近笔者更新下电脑的Chrome浏览器,在调试前端代码的时候,遇到下面一个情况: 发现打开调试面板后,页面上显示未连接到互联网,但实际电脑网络是没有问题的,关闭调试面板后,网页又能正…

Python 爬虫 根据ID获得UP视频信息

思路: 用selenium库对网页进行获取,然后用bs4进行分析,拿到bv号,标题,封面,时长,播放量,发布时间 先启动webdriver.,进入网页之后,先等几秒,等加…

chatglm本地服务器大模型量化cpu INT4 INT8 half float运行、多卡多GPU运行改这一条指令就行啦!

一、ChatGLM3的几种推演方式 ChatGLM3常规方案的GPU推演中half和float是两种最常用的格式,half格式占13GB显存,float格式占40GB显存。此外还提供了几种GPU量化格式的推演:INT4和INT8量化。 CPU版本的ChatGLM3推演: model Auto…

Java 常用的一些Collection的实现类

Java 常用的一些Collection的实现类 Collection 1.集合基础 Java 集合框架是一个强大的工具,它提供了一套标准化的接口和类,用于存储和操作集合数据。Collection 接口是这个框架的核心,它定义了一系列通用的集合操作。 2.Collection接口方法 …

既然有HTTP协议,为什么还要有RPC?

既然有HTTP协议,为什么还要有RPC? ​ 既然有HTTP协议,为什么还要有RPC? 有点既生瑜何生亮的味道。 第一次接触RPC我就很懵,平时我HTTP协议用得好好的,为什么还需要RPC协议? 于是我去百度&am…

最详细!适合AI大模型零基础入门的学习路线+学习方法+学习资料,全篇干货,建议收藏!

前言 随着ChatGPT的横空出世,大模型时代正式来临。千亿甚至万亿参数的大模型陆续出现,各大企业、高校纷纷推出自己的大模型,这标志着通用智能时代的到来。对于零基础的初学者来说,如何快速入门AI大模型,抓住这个时代的…

通过管道和共享存储映射实现进程通信

1.IPC方法 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区&a…

物联网智能项目全面解析

目录 引言 一、物联网概述 1.1 什么是物联网 1.2 物联网的历史与发展 二、物联网智能项目分类 三、关键组件与技术 3.1 传感器和执行器 3.2 连接技术 3.3 数据处理与分析 3.4 用户界面 四、物联网智能项目案例分析 4.1 智能家居 4.2 智慧城市 4.3 工业物联网 4.4…

孩子英语不好,能学编程吗?

随着编程教育的普及,越来越多的家长开始关注孩子的编程学习。然而,不少家长提出了这样的疑问:“孩子的英语不好,是否还能学编程?”毕竟,编程语言是基于英语的,代码中也充斥着大量的英语单词和短…

数据结构-3.6.队列的链式实现

队列可以理解为单链表的阉割版&#xff0c;相比单链表而言&#xff0c;队列只有在添加和删除元素上和单链表有区别 一.队列的链式实现&#xff1a; 1.图解&#xff1a; 2.代码&#xff1a; #include<stdio.h> ​ typedef struct LinkNode //链式队列结点 {int data;st…

【韩顺平Java笔记】第1章

0-1可以看视频&#xff0c;下面记录主要内容 2. 就业方向 Java基础又叫JavaSE&#xff0c;Java有三个主要的就业方向&#xff1a; JavaEE软件工程师&#xff1a;电商&#xff0c;团购&#xff0c;众筹&#xff0c;sns&#xff08;社交网络&#xff09;&#xff0c;教育&…

纠删码参数自适应匹配问题ECP-AMP实验方案(一)

摘要 关键词&#xff1a;动态参数&#xff1b;多属性决策&#xff1b;critic权重法&#xff1b;DBSCA聚类分析 引言 云服务存储系统是一种基于互联网的数据存储服务&#xff0c;它可以为用户提供大规模、低成本、高可靠的数据存储空间。云服务存储系统的核心技术之一是数据容…

winsoft公司Utils组件功能简介

Winsoft Utils Library 2.3 是一个为 Delphi 和 C Builder&#xff08;版本 7 到 12 Athens&#xff09;设计的实用工具库。它提供了一系列组件和类&#xff0c;旨在简化和增强开发过程。以下是一些主要功能和特点&#xff1a; 1.组件集合&#xff1a;包含多种实用组件&#x…

AB plc设备数据 转profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 网关采集AB PLC数据 2 5 用PROFINET IO协议转发数据 4 6 案例总结 7 1 案例说明 设置网关采集AB PLC数据把采集的数据转成profinet IO协议转发给其他系统。 2 VFBOX网关工作原理 VFBOX网关是协议转换网关&#xff0…

如果再回到从前——备忘录模式

文章目录 如果再回到从前——备忘录模式如果再给我一次机会……游戏存进度备忘录模式备忘录模式基本代码游戏进度备忘 如果再回到从前——备忘录模式 如果再给我一次机会…… 时间&#xff1a;5月6日18点  地点&#xff1a;小菜、大鸟住所的客厅  人物&#xff1a;小菜、…