目录
- 一. 引言
- 二. UCOS-III操作系统简介
- 三. 设计水下四旋翼的多任务系统
- 四. 硬件电路设计
一. 引言
上一篇我们写了四旋翼的飞行原理,这一篇我们继续做准备工作,主要是讲解一下操作系统,我们的代码是基于操作系统实现的。为什么要用操作系统呢电脑可以同时运行多个程序,得益于操作系统的运转。对于单片机来说是一样的,使用操作系统的单片机可以同时运行多个程序。你能忍受你的电脑同时只能运行Word或浏览器或其他什么东东的单个程序吗不能,那么为什么你可以忍受单片机只有一个main函数呢在此之前你的功能单一简单,或者是你不知道还有操作系统这个东西。如果你一直都让你心爱的板子裸奔的话,从今天开始希望你能给它装备上强大的武器——嵌入式操作系统,它可以最大限度的发挥CPU的性能,实现多任务运行,在实时性要求高的场合它是最为适用的。
如果之前没有操作系统基础的童鞋不要气馁,操作系统很难,但是你不需要纠结于难的部分,只把它当成一个工具就行了。就像你用电脑,你需要明白Win10系统内部怎么运行么要自己去实现win10系统么是不需要,会用就行了!手里边有STM32的板子的建议去学一下原子哥的FreeRTOS或UCOS-III操作系统的教程,边学边练。实在不会也没关系,后面的文章我会淡化操作系统,它只是一个框架,我们更关注的是核心代码部分。
二. UCOS-III操作系统简介
嵌入式操作系统有很多,常用的有FreeRTOS和UCOS-II、UCOS-III操作系统。笔者不做过多研究与讲解,只简单介绍它的使用。使用操作系统首先一件事是移植操作系统,移植的过程会稍微麻烦,不同的板子会不一样。本项目使用的自主开发的基于STM32F767IGT芯片的主控器,笔者直接使用了正点原子的阿波罗开发板移植好的工程模板,可以点击下载。
操作系统的知识点很多,我们重点需要理解任务的创建、挂起、删除,任务调度,任务优先级,时间片轮转调度等内容。在我的代码里面没有使用信 量与消息传递机制,使用的都是全局变量,实际上很不规范也不安全,这种设计方法不推荐使用。以笔者的体会,STM32的操作系统不好用,技术要求很高。使用嵌入式操作系统只是一个过渡,笔者后期将会将主要算法集中于树莓派、英伟达等高性能Linux主板上,将STM32作为驱动板。这种上下层控制器的好处是用户只需专注于应用与算法,不需要耗费过多精力于底层实现,当然硬件成本也会高出许多。
三. 设计水下四旋翼的多任务系统
下面我们设计水下四旋翼的多任务系统。四旋翼是一个典型的完整的机器人架构,包含了实现一个机器人所需的全部核心要素,从通信、传感、控制、电源到硬件电路、机械等,如果你从头到尾搭建起了一个四旋翼(包括自己写代码与调试),你将能够胜任一般的机器人设计应用场合了。
这里我们创建5个任务,开始任务(StartTask),通信任务(RadioLinkTask),传感任务(SensorTask),姿态控制任务(StabilizationTask),数据传输任务(TransmissionTask)。系统的层次如图所示,如我之前说的,操作系统只是一个工具,我们的核心是在应用层——应用程序。操作系统能够向下最大程度的发挥CPU的功能,向上最高效最稳定的实现用户的应用程序。开始任务负责创建其他所有任务,完事之后将自己挂起(就是自己不再起作用了)。通信任务(RadioLinkTask)负责与遥控器通讯,解析遥控器的数据、按照指令动作。传感任务(SensorTask)负责解析所有传感器的数据,包括原始数据读取、滤波、融合。姿态控制任务(StabilizationTask)负责三轴姿态角与高度环的PID计算,输出控制量并进行电机控制。数据传输任务(TransmissionTask)包括上传和下传——上传四旋翼的所有当前状态(姿态、油门、电量等信息),同时解析地面站下传的数据进行相应动作或调整参数。
四. 硬件电路设计
其实这一节应该放在上面,先设计硬件再设计软件,不过无所谓啦。硬件电路的介绍主要是列出使用的器件和使用的STM32的板载资源。如下表所示是使用的硬件清单。
硬件连接示意图如图所示。

如果你不是做水下四旋翼只想做空中的四旋翼,上面的硬件框架与软件框架你一样可以用的。只不过不需要考虑防水、密封等,反而简单多了。
从下一章开始我们开始写代码,依次实现遥控器通信、传感器数据融合、姿态控制、数据传输等功能。都看到这里了,点个赞再走呗!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!