基于RK3399+STM32+PID的四轴飞行器跟踪与控制系统设计
系统硬件的总体方案设计要设计一款具有跟踪功能且飞行稳定的四轴飞行器跟踪系统,首先要保证系统硬件平台的功能稳定。系统各模块具有不同功能,所以需要根据各模块功能与性能,进行芯片的选取与硬件电路设计,使系统在经济性、生产工艺、功能需求等工程指标上得到优化,在一定程度上提高系统的稳定性和可靠性。
本文将四轴飞行器跟踪系统的硬件平台根据功能和设计需求不同分成三个单元进行设计,在确保各个单元在独立运行的前提下,完成互相之间任务合作。
第一部分为四轴飞行器控制单元,该部分硬件主要完成对四轴飞行器机体的稳定控制、遥控信号接收和执行追踪目标指令并执行的工作,是四轴飞行器跟踪功能的执行部分。第二部分是遥控管理单元,该部分主要完成对四轴飞行器发来的信息接收、跟踪目标选取和发送遥控信号的工作,是四轴飞行器跟踪功能的管理部分。第三部分为目标跟踪单元,该部分硬件主要完成搭载目标跟踪算法和嵌入式操作系统,并将图像信息实时回传给遥控管理单元,完成四轴飞行器跟踪功能的算法处理。系统的整体硬件框图如图 2-1 所示。

从图 2-1 中可以看出,飞行控制单元和目标追踪系统之间采用有线传输方式,而它们和飞行器管理系统之间采用无线通信方式。这符合一般四轴飞行器的操作模式。其中飞行控制系统负责控制飞行器平稳飞行,在系统中相当于人类的小脑功能。其在系统工作中会持续获取传感器信息,稳定飞行器自身姿态、保持与飞行器管理系统的联系。是跟踪系统的执行机构,也是无人机保护自己的最后一道屏障。目标跟踪系统负责完成对特定目标的跟踪功能,在系统中相当于人类大脑的功能。其在接到管理系统指令后,会将人为选定的特定目标物信息带入跟踪算法,以完成对目标物的实时跟踪,并在环境允许情况下,将图像实时回传给飞行器管理系统。期间,如果出现目标丢失等特殊情况,系统会有一定的改错和保护机制,确保自身安全和提高目标跟踪的稳定性。飞行器管理系统完成对跟踪目标的选择及接收飞行器回传的图像和信息功能,其在整个系统中相当于家长的角色。该系统实时对飞行器飞行状态进行掌控,用户可以根据飞行器的状态紧急恢复手动控制功能。
2.2 四轴飞行器控制单元的硬件设计
为了确保四轴飞行器跟踪系统的稳定性,首要任务是确保飞行控制平台运行的稳定性。四轴飞行器控制平台的设计主要是主控芯片及外围电路模块、飞行量拾取模块,通信及飞行稳定控制模块组成。下面分别对以上模块进行详细介绍。
2.2.1 主控芯片的选取
飞行器控制芯片是飞行器控制系统最为重要的部分,大部分控制代码都要在其内部完成,这其中包含许多浮点运算,而且为了让系统更加有序、高效的运行,还要在主控芯片内部移植一款嵌入式实时操作系统,这种飞行器控制系统的设计方法是现阶段被广泛采用的。目前,ST 公司推出的 STM32 系列微控制器在四轴飞行器控制领域被广泛的应用,在很多公司的飞行控制系统中都取得了很好的表现,所以本系统采用 STM32 系列作为系统的主控芯片。
其次从计算量和片内 ROM 空间考虑,需要一款内部带有 FPU 且片内存储空间较大的 32 位微处理器,那么基于 M4 内核的 4 系列 STM32 芯片就是我们的首要选择。
虽然本系统需要的外设及传感器有很多,但大多数接口都不复杂,而且没有图像显示和外接存储芯片的需求,所以对待芯片的外部 I/O 数量没有硬性需求,适量即可。所以从经济角度考虑选取 405 系列作为主控芯片就是很好的选择。
STM32F405 芯片内部是基于 ARM 公司的 CORTEX-M4 架构设计的,是一款具有内部 FPU 单元的 32 位处理器。其内部具有 1M 字节的 FLASH 和 192kB 的
SRAM 存储器,可以满足带有一般的实时操作系统运行,并且可以最大外接
26MHz 的晶振,经过 PLL 倍频后可以使内部时钟具有很高的频率,可以加快代码的运行速度。并且 STM32F405 接口资源丰富,有大量的外部通讯接口,可以满足飞行器控制单元所需传感器的接口要求和控制单元的设计需求。

2.2.4 飞行姿态获取模块的硬件设计
陀螺仪作为四轴飞行器的核心传感部件,负责输出四轴飞行器运行时的角速度和加速度,可以说近些年来四轴飞行器的兴起与发展,都得力于基于 MEMS
技术的陀螺仪的发展。它也成为了四轴飞行控制系统的重要组成部分之一。
飞行器控制单元在此处选用 MPU6500 作为四轴飞行器的角速度传感器。
MPU6500 系列采用 MEMS 工艺设计与制作,是世界上第一款集成了九轴传感器的运动解决方案新芯片,常被用于游戏体验和运动感知等消费产品上。其内部具有嵌入式 3 轴 MEMS 陀螺仪、3 轴微机电系统加速度计和数字运动处理器硬件加速器引擎和一些外围通信接口。本文选用的 MPU6500 采取 SPI 总线通讯协议与主控 MCU 进行通信。飞行姿态获取模块的硬件设计电路图如图 2-4 所示。

从图 2-4 中可以看出,飞行器姿态获取传感器 MPU6500 和主控芯片采用 SPI
通信协议传输数据,整个芯片只有四个数据引脚需要与主控芯片连接,并且通过
MOSI 和 MISO 两个引脚传输数据与命令。虽然 MPU6500 系列速度传感器内部结构很复杂,但现阶段 MEMES 技术以逐渐成熟,芯片集成化也越来越高,所以其芯片的硬件电路设计并不复杂,只在一些引脚上加入滤波电容即可。
2.3 遥控管理单元的硬件设计
本文主要实现飞行器的自主跟踪功能,但是要真正实现完全无人控制的自主跟踪较为困难,在移动物体较多的场景,必须人为选取跟踪目标,而且,在遇到位置错误或意外情况时需要对飞行器的控制进行人为干预,保证飞行器自身和周围事物的安全。所以本系统设计了实现上述功能的遥控管理单元。本单元除了完成对无人机传输的图像进行转发和处理外,还拥有对无人机的最高控制权限,可以在任何情况下人为接触飞行器自主跟踪飞行功能。
2.3.1 遥控管理单元主控模块的硬件设计
因为此部分要实现的功能、需要的芯片资源和对芯片处理能力的要求与飞行器控制系统相似,除了需要外接 LCD 接口和用于数据存储的 SRAM 芯片外,无太大区别,所以在此部分还是选用 STM32F4 系列 IO 口数目较多的 STM43F407
系列芯片做为系统的主控芯片。此部分的电路设计和飞行控制单元的主控模块的硬件设计相似,在这里就不做过多赘述。遥控管理单元主控模块的原理图如图 2-8
所示。
主控单元模块主要负责接收四轴飞行的姿态、位置、以及其它飞行相关信息,同时还要完成对目标跟踪单元通过 WiFi 模块传来的图像进行处理。在工作方式上,该模块具有两种模式,一种是配合计算机,完成图像信息和飞行器信息的显示和传输工作,另一种是独立自主的工作方式,将图像和飞行器信息实时显示在模块自身 LCD 中,同时可以完成对飞行器的控制工作。
在手动操作模式下,用户可以通过遥控旋钮,实现对飞行器的人为控制。并可以从主控单元外接的 LCD 上,读取飞行相关的姿态信息与状态,方便用户对飞行器的管理。
即使 STM32F407 的 IO 口数目众多,也无法满足遥控管理单元的全部外围模块的需求,所以在进行此模块的硬件设计时,将同样通信接口的传感器采用模块化的设计方式,可以共用部分接口,节约了系统资源,提高了效率。

2.4 目标跟踪单元的硬件设计
本单元是跟踪算法的运行平台,同时还需要完成对目标信息的采集和数据传输工作,对硬件的图像处理性能有较高的要求。一般的带有实时操作系统的嵌入式平台很难适应该部分的需求,所以本文采用了搭载嵌入式 Ubuntu 的大型嵌入式系统,通过移植 OpenCV 实现的目标跟踪算法,完成系统功能。
2.4.1 系统主控芯片的选择
通过上述描述,常规的智能芯片都已无法满足设计需求,而常用的 ARM9
和 ARM11 系列处理器过于陈旧且部分已停产也无法满足设计需求,选用性能更好的处理器才是正确选择,例如以 ARM 公司的 CORTEX-A 系列为内核的微处理器。此部分处理器通常是智能设备、个人 PDA 设备和手机的主控芯片。通常这类芯片都被国外芯片厂商垄断,恰逢在本人毕业期间,某些中国企业购买国外芯片的渠道被破坏,这让从事这一领域工作的工程师感觉,选取一款国内自主设计的只能芯片就很有必要了。
目前,国内在这一领域比较突出的产品有,华为的海思系列、瑞芯的 RK3399、全志系列和联发科的一些型号芯片。其中华为的海思直接面向企业级用户,个人开发难度较大。珠海全志科技 A64 系列资料较少,只有零星文档可以参考,也主要面向企业级用户。而瑞芯的 RK3399 对待个人开发者较为友好,有自己的开源社区,个人开发者可以在上面获取相应的芯片资料、bootloader 资料、片内外设驱动以及操作系统移植的相关资料。对高校的个人开发人员是一个很好的选择。
RK3399 内部采用-Big.Little 架构,其内部包含双核 Cortex-A72 和四核
Cortex-A53 架构,是一款高性能低能耗的高性能 64 位处理器。通常被应用于电脑、个人移动设备和数字媒体处理设备上。
RK3399 和许多具有高性能的嵌入式设备一样,内部集成了 H.264/H.265/VP9
的 4K 高清视频单元、高性能的 JPEG 编码器和特殊图像处理单元。其内部还集成了完全匹配 OpenCL 和 DirectX 11.1 的 3D 高性能 GPU 处理器。同时在外接芯片内存和存储芯片部分,RK3399 配有高性能双通道的外部存储器接口,包括
DDR3/DDR3L/LPDDR3/LPDDR4 类型的内存芯片,能够保证外接大容量存储芯片。并且其外围接口资源丰富,可以为应用提供灵活的支持。其芯片内部的资源相当的丰富。通过查阅福州瑞芯公司的官方 Design_Guide 手册,可以得到不同应用场景的芯片设计结构图,其中根据本文描述系统的特性与技术需求,选用手册中的 Tablet Apllication Block Diagtam 作为系统基础设计范例,在其中进行相应的改进与扩展。
在目标跟踪单元中用到的主要有 DDR3\EMMC\WIFI\USB\display panel\MIPI
CAMERA 等模块的硬件设计。RK3399 采用 BGA 封装,芯片底部共有 828 个引脚,所以不可能一一介绍,所以,在本文对该部分硬件系统的描述上,选取重要部分单独描述。下面就按以上模块分别对该系统进行简单介绍。
5.1 系统总体软件设计描述
本文将四轴飞行器跟踪与控制系统的软件设计分成三个单元,即飞行控制单元的软件设计、目标跟踪单元的软件设计和飞行器遥控管理单元的软件设计。三个部分各司其职,互相配合的完成对目标物体的跟踪与四轴飞行器控制工作。其中飞行控制单元的软件设计选用 keil 编译器和 FreeRTOS 嵌入式实时操作系统为基础,控制代码采用 C 语言编写,主要完成飞行器姿态控制的工作。目标跟踪单元的软件设计选用 arm-linux-gcc 编译器和搭载 OpenCV 的 Ubuntu 操作系统为基础,采用 C++语言和一些脚本语言对目标跟踪算法和进程进行编写,完成对跟踪目标运动方向和距离的识别。遥控管理单元从功能上将其分为两部分进行软件设计,一部分为下位机遥控通讯模块,该部分选用 Keil 编译器和 FreeRTOS 嵌入式实时操作系统为基础,信息传输和遥控代码采用 C 语言编写,完成接收跟踪模块发来的图像数据和与上位机通讯任务。另一部分为上位机显示和管理模块,该部分选用 VS2013 和 Windows 操作系统为基础,显示与控制代码采用 MFC 下的 C++
语言编写,主要完成跟踪目标的选择以及飞行器飞行相关信息的显示工作。
5.2 飞行控制单元的软件设计
飞行控制单元的软件设计主要集中在完成姿态解算和控制算法的工作,为了建立算法运行平台和保证算法运行的稳定,还需要在该部分系统的硬件设计的基础上,通过移植嵌入式实时操作系统 FreeRTOS 和编写相关硬件外设的驱动函数,保证整个飞行控制单元的稳定运行。
5.2.1 飞行控制单元算法运行环境搭建
由于四轴飞行器自身传感器众多,而且需要处理的遥控数据也较多,所以一般的裸机程序就无法满足飞行控制单元对稳定性的需求,移植实时嵌入式系统
FreeRTOS,将飞行控制单元要完成的功能以 task()函数方式编写,通过系统内部任务调度器按优先级或时间片调度方式控制,保证整体单元的所有任务平稳运行。FreeRTOS 系统移植流程图如图 5-1 所示。

5.5.2 四轴飞行器跟踪系统的测试
本文最后针对四轴飞行器的整体跟踪性能进行了测试,待追踪目标选为颜色较实验室背景色差别较大的绿色写字板,通过旋转板面,将写字板绿色一面朝上放置,通过拉动下方轮子使其移动,观察写字板上空飞行器的跟踪状况。四轴飞行器跟踪性能测试过程如图 5-9 所示。

从图 5-9 所示试验中得出,随着人为缓缓拉动写字板,四轴飞行器也伴随着向写字板运动方向缓缓移动,由实验结果可知,本文设计的系统对特征简单物体的跟踪性能较好。依据相同原理,在实验室中对复杂目标进行跟踪实验,分对速度为 0.8m/s 和 1.5m/s 的待跟踪目标进行跟踪,获得表 5-2 和表 5-3 的实验结果。

信迈提供RK3399+STM32软硬一体化方案。