旋翼无人机飞控的软件设计

1 飞控软件的基本模块

无人机能够飞行主要是依靠传感器系统获取位姿信息并反馈到微处理器进行控制系统的运算。所以飞控软件设计主要负责搭建合理软件流程,使各功能模块协调有效的工作。

一个飞控系统的基本工作主要有:

1、CPU接收遥控器的操作指令和传感器信号;

2、传感器的数据处理和数据融合算法运算,得到位置、姿态信息;

3、根据控制指令完成相应的控制器(姿态、位置)计算,得出控制量并输出到电机驱动;

2 软件设计方法的讨论

刚接触飞控的时候,实验室在设计之初,为了方便快捷,软件系统的编写采用前后台操作的方式。这个方式的应用程序是在放在mian主函数里面无限循环,调用相应的处理子函数。这称为后台程序。而前台程序指的就是中断程序处理异步触发事件的程序。故前台程序称为中断级程序,而后台程序称为任务级程序。因此有些固定周期执行的任务都要靠中断服务程序来完成,以保证时间的精确性。但是在中断处理程序中只标记事件的发生,不做任何处理,转而由后台系统调度处理,这是为了避免在中断程序执行时间过长影响后续和其他中断事件。

这种设计方法的优点:

1、实现简单,特别是对于笔者这样的编程渣,照着stm32的库函数写代码,也可简单实现;

2、类似单片机的编程,没有OS,因此对CPU的性能要求不算高,不太关注ROM/RAM;

3、如果设计得当,相较于带OS的飞控,系统运行更加稳定,听说很多工业级的飞控是不带OS的;

缺点:

由于是用在飞行控制系统中,对整个系统的实时性有着很高的要求,如果逻辑和时序出现偏差,将出现无法估计的严重后果。而在初始开发过程中,发现采用此前后台系统带来两大问题:

1、设计不当的话,比如某个周期的函数执行超时,后面所有的程序都会受到影响。如果飞控程序执行时间变得不够准确,不利于对飞行器的控制,严重时发生飞机失控的现象。

2、移植性和扩展性差,给整个程序后续改动和维护带来不便,由于各种任务都是相关的子函数,往往一个任务需要调用多个子函数。在程序改动或者维护的时候变得非常繁琐复杂。经常由于忽略某一细节而导致功能无法实现,最后导致程序的可读性降低,不利于他人做程序修改。

最近几年也接触了一些开源飞控,看了有关带OS的飞控设计。这种设计方法是在某一操作系统上进行二次开发,OS通过一个内核的调度来管理CPU,使得所有的模块也就是任务都能正常运行,达到相对意义的“并行”。同时采用基于优先级的可剥夺性调度算法来保证实时性。RTOS 将应用层软件分成多个任务,简化了应用软件的设计,同时使得飞行控制的实时性得到保证。

个人偏好,其实比较喜欢裸机的方案。飞控其实说到底不是一个软件功能特别复杂的产品,所以从开发角度来讲,事先定义好相应的功能,没必要经常的扩展设计,裸机代码在平时的调试也有一定的优势。飞控在整个飞行平台的开发中,可以专注于负责飞行部分,可与其他设备进行通信,接收飞行指令即可。

在这里插入图片描述
在这里插入图片描述

3 完整的飞控系统组成模块

当设计一个商业飞控的软件时,就不仅仅是让飞机飞起来那么简单了,也就是说软件模块除了基本要素外,还需有其他扩展,如下图所示。

在这里插入图片描述

4 飞控数据流分析

当熟悉了飞控系统中常用的软件模块,那这些模块互相之间又是怎样的关系?又是如何互相通信,各自需要什么数据来完成飞行任务?

以pixhawk飞控的原生固件为例,如下图所示。这图是很早期的代码记录下来的,与最新的代码相比,有些误差,不过差不多,能解释问题,所以笔者懒得更新,重新画图了。

在这里插入图片描述

这里补充一下,
在这里插入图片描述

  1. PX4飞控 - Pixhawk原生固件

开源PX4飞控相对复杂多了,很多软件的细节笔者也不甚了解,所以就简单描述下。
在这里插入图片描述

PX4飞控从软件架构上可以分为四层。在每一层里,各个驱动程序或上层的控制/估计算法都是一个独立模块,能够在运行期间互相通信。这种模块化的设计不仅有助于支持更多机型(因为不存在特定机型的主循环),同时使得代码具有高度的可移植性。

应用层:该层是整个飞控系统运行的核心。飞控日常飞行所用到的模块基本上都在这层,包括姿态控制,状态估计,导航模块等等来完成多旋翼和固定翼完全自主的航点飞行。应用层可以使用其他的控制软件,如APM:Plane、APM:Copter,但必须运行于中间层之上。
中间层: 通讯的中间层运行于操作系统之上,提供设备驱动和一个微对象请求代理(micro object request broker ,uORB)用于飞控上运行的单个任务之间的异步通信。
NuttX操作系统层:提供给用户操作环境,进行底层的任务调度。
底层驱动层: 提供系统运行所需要的硬件驱动,如一些传感器、执行器等。

综上,飞控的裸机方案设计,常用的是分时调度机制。将整个系统时间分成若干时间片,用ID进行标识(通常用频率标志),每个时间片内执行相应的功能模块。这就需要事先合理的分配各个软件任务,保证在相应的时间片内不能超时。
在这里插入图片描述

飞行模式与状态机设计

以上描述了飞控设计必要的功能模块,以及互相之间的数据流是如何工作的。接下来就是有关飞行模式与状态机的设计。

飞行模式,按照功能需求,进行自定义设计。飞行模式与飞控内部的状态切换以及控制器切换具有密切联系,因此需要事先拟定好,有哪些飞行模式。进而,根据飞行模式,设计状态机,即各种飞行模式之间如何进行切换,包括由地面的加锁状态,到空中的状态如何进行切换。

在这里插入图片描述

有关飞行模式与状态机的设计,有个视频讲解:

https://www.bilibili.com/video/av45087166/

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于四旋翼无人机飞控系统代码的实现和仿真,目前有多种方法和工具可供选择。其中,常用的方法包括使用开源飞控软件和使用专业仿真软件。 一种常见的方法是使用开源飞控软件,如ArduPilot和PX4。这些软件提供了完整的飞控系统代码,包括飞行控制算法、传感器数据处理、通信协议等。你可以根据自己的需求选择合适的硬件平台,如Arduino或Raspberry Pi,然后将开源飞控软件烧录到硬件上。通过配置和调试参数,你可以实现四旋翼无人机飞行控制和导航功能。此外,这些开源软件还提供了仿真环境,可以在计算机上进行飞行仿真,以验证飞控系统的性能和稳定性。 另一种方法是使用专业仿真软件,如MATLAB/Simulink和ROS(机器人操作系统)。这些软件提供了丰富的工具和库,用于建模、仿真和控制四旋翼无人机。你可以使用MATLAB/Simulink进行系统建模和控制算法设计,并使用Simulink中的飞行仿真工具进行飞行仿真。而ROS提供了一套完整的机器人开发框架,包括传感器数据处理、导航算法、通信协议等。你可以使用ROS中的相关软件包和工具,快速搭建和测试四旋翼无人机飞行控制系统。 无论使用哪种方法,实现四旋翼无人机飞控系统代码的过程都需要一定的编程和控制理论知识。你需要了解飞行控制算法、传感器数据处理、通信协议等相关知识,并根据具体需求进行代码编写和调试。同时,为了保证飞行安全和稳定性,你还需要进行充分的测试和验证,包括地面测试和飞行测试。 总结起来,实现四旋翼无人机飞控系统代码的方法包括使用开源飞控软件和使用专业仿真软件。无论选择哪种方法,都需要具备一定的编程和控制理论知识,并进行充分的测试和验证。希望这些信息对你有所帮助。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [基于串级 PID 控制算法的四旋翼无人机控制系统设计与实现](https://blog.csdn.net/qingfengxd1/article/details/126212805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值