Arduino------------------------------------>Arduino远程指令二次解译代码
communication_module------------------>无线通信模块驱动代码
Flight_Control----------------------------->开源飞控优化代码
Training------------------------------------>目标检测算法训练代码
Test----------------------------------------->目标检测算法部署代码
本团队设计了一套基于手势操作无人机的方案与设计。手势识别一直是自然交互技术领域的一个重要研究方向,传统的手势识别算法鲁棒性差、精度低,成熟的手势识别又依赖于一些昂贵的设备,比如数据手套。随着目标检测算法取得了巨大成功,手势识别领域开启了新的研究方向。基于深度学习的手势识别算法应用越来与受到青睐,然而在EAIDK610等嵌入式移动设备上,需要针对其有限的计算能力设计满足实时性的目标检测模型。为达到预期设计目标,本团队采用如下设计思路: (1) 选取合适的手部骨骼点检测算法进行部署 由于设备的计算能力有限,本文选取谷歌开源的手势骨骼点检测算法作为本项目的骨骼点检测模块。该算法与mediapipe框架相结合可以实现较低的计算复杂度和内存占用,同时保证算法的准确性和稳定性。该算法能够准确地检测手部骨骼点,而且对于不同的手势和手型都能够有良好的适应性。在部署过程中,本文会对所选算法进行模型压缩和优化,以适应设备的资源限制。这可能包括移除冗余参数、量化模型权重以减少内存占用,并采用轻量级的神经网络架构来提高运行速度。 (2) 设计满足实时行的手势识别算法 本作品设计了一种基于计算手骨骼二维坐标点的弯曲度等几何特征来进行手势分类的方法。通过捕获手部动作,本文提取手掌和手指的关键节点,在每个时间步上记录它们的坐标点。接下来,本文计算手指关节点之间的距离、角度以及手指之间连接线的弧长等几何特征,并结合这些特征来描述手势形状。为了实现实时性,本文选择不使用深度学习技术。相较于深度学习需要大量的数据和复杂的计算过程,本文的方法更加轻量级和高效。通过仅依赖于手骨骼坐标点的几何特征,本文能够快速地进行实时的手势分类。 (3) 对四旋翼无人机进行硬件适配 通过在无人机上加装ESP8266模块,并改进飞控代码以适配手势远程控制。该方案的关键是将ESP8266模块与现有的无人机飞控系统进行连接。ESP8266模块是一种低成本、高性能的Wi-Fi模块,可以实现无线通信。通过在无人机上集成ESP8266模块,本文可以实现与地面设备(如手机、电脑或边缘计算设备)的无线连接。同时在飞控代码方面,本文对原有的飞控程序进行了改进,添加了手势识别和通信协议解析的功能。 通过上面的设计思路可以实现将EAIDK610边缘计算设备连接至无人机wifi热点,利用socket和UDP协议进行通信,一旦识别到特定手势,将对应的指令发送给无人机。这些指令可以是飞行方向、高度、速度以及其他飞行参数的控制命令。
本作品的设计框架基于EAIDK610设备,结合了开源的骨骼点检测算法和手势识别算法。通过这些算法,本文可以实时检测人体的手部动作,并准确地识别特定的手势。在实际应用中,本文将该框架部署在EAIDK610设备上,然后,本文通过连接esp8266控制arduino开发板,利用其PWM输出功能来控制无人机的输入通道。 当EAIDK610检测到特定的手势时,它会发送控制指令给esp8266模块,这些指令包含了特定手势所对应的操作。接着esp8266将解析这些指令并将其传递给连接的arduino开发板。Arduino开发板根据接收到的指令进行解析,并通过适当的PWM波信号控制无人机的输入通道,从而实现对无人机的控制。整个过程实现了人体手势与无人机控制之间的有效交互。系统总体设计框架如图所示:
(1) 嵌入式AI开发平台 本作品选用EAIDK610作为AI算法的部署平台。EAI610主芯片采用具备高性能Arm SoC的RK3399,同时搭载OPEN AILAB嵌入式AI开发平台 AID(包含支持异构计算库HCL、嵌入式深度学习框架Tengine、以及轻量级嵌入式计算机视觉加速库BladeCV)。为AI应用提供简洁、高效、统一的 API 接口,加速终端 AI 产品的场景化应用落地。其外形及接口设计如下图所示:
(2) APM2.8无人机开源飞行控制器 APM2.8(ArduPilot Mega 2.8)是一款基于开源飞行控制系统的无人机飞控板。它是由ArduPilot社区开发的,作为ArduPilot项目的一个主要组件之一,旨在为多种类型的无人机提供可靠的飞行控制。APM2.8内部集成了强大的处理器、传感器和通信模块,以实现稳定的飞行和高级的导航功能。它基于Atmel AVR系列的8位微控制器,并通过添加外围设备扩展板来支持GPS导航、遥控器接收器、电池监测等功能。APM2.8飞控的接线图如下图所示:
(3) 微控制器模块 对于微控制器的选择,首先处理器性能功能需要满足设计预期,还能配备足够完善的接口设备外设等,方便本文初期的探索性学习。同时能输出多路PWM信号连接到无人机飞控,控制无人机的飞行姿态。因此本系统选用功能强大,简单易用的Arduino结合ESP8266模块作为无人机的远程指令解析模块,其提供的各类接口如下图所示。
Arduino的3、5、6、9、10分别作为pwm波形的输出,连接到apm2.8的1~5输入通道。从而实现对无人机的俯仰角、油门、翻滚角、航向角的控制。 (4) ESP8266无线模块 ESP8266是一款低成本、高集成度的Wi-Fi模块,由乐鑫公司开发,具有强大的网络通信能力,可用于各种应用领域。ESP8266通过内置的Wi-Fi模块,可以轻松地连接到无线网络,并实现与其他设备的互联互通。它支持2.4GHz频段的Wi-Fi标准,包括802.11 b/g/n。尽管尺寸小巧,ESP8266内部集成了处理器、存储器、Wi-Fi芯片和各种接口,具备强大的计算和通信能力。ESP8266在设计中考虑了低功耗需求,适用于需要长时间运行或依赖电池供电的应用。ESP8266提供多个GPIO引脚,可以用于连接传感器、执行控制操作,以及和其他外部设备进行通信。ESP8266使用基于C语言的开发环境,提供了丰富的API和函数库,使得开发者能够轻松地进行编程和控制。它也支持通过串口与其他设备进行通信。本项目的ESP8266模块如下图所示。
本作品使用ESP8266做无人机远程控制指令解析的前端模块,将接受到的手势指令解析输出为GPIO逻辑输出,本作品中通过将ESP8266的D0、D1、D2、D3接到Arduino的A1、A2、A3、A4输入口。通过GPIO的高低电平的逻辑输出,将指令发送到Arduino进行二次解译。该如下表所示。
(5) 四旋翼无人机平台 四旋翼无人机是一种以四个电动机驱动的垂直起降飞行器,也被称为四轴飞行器。它采用了旋翼作为主要升力装置,并通过电调控制电动机的转速,以实现悬停、横滚、俯仰和偏航等飞行动作。本作品采用的四旋翼无人机结构如下图所示。
(1) 无人机解锁控制 在无人机开启后,无人机处于为解锁的保护状态,当无人机未解锁是的地面站显示状态如下图所示:
对于无人机的解锁操作,本文设计了如下图5-7的手势,当两只手保持ok姿势10秒后,无人机解锁。
解锁后的无人机无刷电机开始怠速转动,同时地面站信息显示已解锁,如下图所示:
(2) 无人机飞行姿态控制 在无人机解锁后,可以通过手势对无人机的飞行姿态进行控制,从而完成对无人机的起飞、前进、后退,转向、下降等操作。在解锁后无人机处于低油门的自稳模式。此时翻滚角、偏航角、俯仰角舵机量居中,油门最低。如下图所示:
由于自稳模式的飞行模式与手势控制难以匹配,在自稳模式下,手势无法控制无人机的飞行姿态,本文需要做一次无人机前进的手势,将无人机的飞行模式转换为悬停模式。无人机前进的动作设计为两只手模拟手枪向上的姿势。如下图:
此时无人机切换为悬停模式,地面站的参数显示如下,第五通道的舵机量变为悬停模式对应的舵机量。如下图所示:
切换悬停模式后、无人机已经可以通过EAIDK-610终端的手势远程控制无人机进行飞行姿态的变换,针对无人机的起飞、下降、左转、右转、前进、后退、左飞、右飞设计的交互式手势如下图所示:
本文作品考虑到了多种种容易引发飞行事故的情况、当wifi连接断开后,ESP8266会检测到连接中断,此时1s内如果没有重新连接发送确认帧数据,则ESP8266会自动启动无人机的紧急制动。无人机会自动将油门降低并降落。本文模拟wifi断开的情况,1s后的地面站显示数据如下图5-13,无人机油门变为最低,并且对无人机上锁。
并且针对无人机上锁手势,本文处于安全考虑,要求无人机先进行紧急制动在进行上锁。无人机的紧急制动与上锁手势设计如下图所示: