“无人机”一词通常指任何无人驾驶飞机。这些飞行器有时被称为“无人机”(UAV),可以执行从军事行动到包裹递送等一系列令人印象深刻的任务。无人机可以像飞机一样大,也可以像手掌一样小。最初为军事和航空航天行业开发的无人机因其带来的安全性和效率的提高而成为主流。这些机器人无人机在没有飞行员的情况下运行并具有不同程度的自主性。无人机的自主性水平可以范围从远程驾驶(人类控制其运动)到高级自主,这意味着它依赖于传感器和探测器系统来计算其运动。
由于无人机可以远程控制,并且可以在不同的距离和高度飞行,因此它们是承担世界上一些最艰巨工作的理想人选。他们可以在飓风过后协助寻找幸存者,在恐怖局势期间让执法部门和军队密切关注天空,并在地球上一些最极端的气候条件下推进科学研究。无人机甚至进入了我们的家,成为业余爱好者的娱乐和摄影师的重要工具。
无人机有多种用途:
==================================================== ===================
这个项目背后的主要动机是我对探索小型无人机的各种控制方案的好奇心。《微型无人机语音控制系统的设计与开发》一文讲述了无线电、GCS、手势、语音、操纵杆、PC、FPV和自主等各种无人机控制方法。在论文Design and Development of an Android Application for Voice Control of Micro Unmanned Aerial Vehicles中,观察到medium
无线电和手势无人机控制方法的态势感知处于一定水平,而语音控制方法的态势感知能力较高。在这个项目中,我们将致力于基于视觉的手势控制,稍后我们将进行语音控制以及其他高级控制。
该项目的动机还源于需要在低成本可移植和可扩展的嵌入式平台中实现这些不同的控制方法,该平台具有边缘计算,而不依赖于外部资源的工作。
==================================================== ===================
==================================================== ===================
DJI Tello是一款小型无人机,将DJI和Intel I的强大技术结合到一个非常小的封装中。它是一款轻巧、有趣且易于使用的无人机,是在投资更昂贵的选择之前学习无人机驾驶技巧的完美工具。Tello 拥有来自英特尔的 14 核处理器,其中包括板载Movidius Myriad 2 VPU(视频处理单元)用于高级成像和视觉处理。它配备了高质量的图像处理器,用于拍摄照片和视频。该相机具有 5MP (2592x1936) 照片和 HD720 视频。无人机的最长飞行时间为 13 分钟。这款令人难以置信的小型无人机可放在您的手掌中,仅重约 80 克(包括螺旋桨和电池)。您可以通过 Tello 应用程序或连接到 Tello 应用程序的受支持蓝牙遥控器直接控制 Tello。该无人机可通过 Python、C++、Scratch 和 DroneBlocks 进行编程。
眼镜
为项目准备 Tello Drone
Tello 无人机 SDK提供了有关如何通过 Tello 命令对无人机进行编程以完成任务的大量信息,但在功能上有所限制。Tello SDK 通过 Wi-Fi UDP 端口连接飞行器,用户可以通过文本命令控制飞行器。我们使用 Wi-Fi 在 Tello 和 M5Stack 模块之间建立连接。开机后,Tello 充当软 AP Wi-Fi (192.168.10.1) 通过端口 8889 接受命令。
Tello SDK 包括三种基本命令类型。
控制命令 (xxx)
如果命令成功,则返回“ok”。
如果命令失败,则返回“错误”或信息性结果代码。
Set Command (xxx a) 设置新的子参数值
如果命令成功,则返回“ok”。
如果命令失败,则返回“错误”或信息性结果代码。
读取命令 (xxx?)
返回子参数的当前值。
尽管 Tello 非常灵活,我们可以通过许多不同的轴来控制无人机,但在这个项目中,我们将使用以下命令。
全套命令请参考SDK 。
作为一项安全功能,如果 15 秒内没有命令,Tello 将自动着陆。
Tello API
我们将使用自定义 C++ API ctello ,它允许我们通过 UDP 与 DJI Tello 无人机通信。
==================================================== ===================
手势命令
为了使用视觉手势控制我们的 Tello 无人机,我们将使用手势检测。6 种基本手势被考虑用于控制(怠速、起飞/着陆、前进、后退、左、右)。
Takeoff
起飞命令是通过使用竖起大拇指的手势发出的。
Land
使用拇指向下的手势发出 Land 命令。
通过使用张开手掌手势发出前进命令。
通过使用闭合的拳头手势发出向后命令。
使用拇指向左手势发出向左命令。
使用拇指向右手势发出向右命令。
==================================================== ===================
在Edge Impulse Studio的帮助下,我们将使用机器学习构建在微控制器上运行的手势识别系统。
为项目准备 Edge Impulse Studio
==================================================== ===================
数据采集
为了为我们的机器学习模型收集数据,我们将使用智能手机上的摄像头传感器。为了让您的机器学习模型能够看到,捕获这些对象的大量示例图像非常重要。在训练模型时,这些示例图像用于让模型区分它们。
Data Acquisition
”选项卡。Collecting images
并授予对相机的访问权限。takeoff
,在相机前显示手势,然后单击Capture
开始采样。Collected data
training dataset
和atest dataset.
Dashboard section
”并向下滚动至“ Danger Zone
”。Rebalance datasheet
”,自动将数据集拆分为训练和测试,比例为 80/20。Data collected
。==================================================== ===================
手势模型训练
由于我们已经获取了所有数据,是时候训练数据集以适应手势模型了,Edge Impulse 使我们无需编写任何代码就可以更轻松地生成模型。
有了训练集,我们就可以设计一个冲动。脉冲获取原始图像,使用预处理块来处理图像,然后使用学习块对新数据进行分类。预处理块总是为相同的输入返回相同的值,而学习块从过去的经验中学习。
Impulse Design
”选项卡。Image data
为我们填充了该部分。image width
of48x48
和 Resize 模式为Squash
。Add a processing block
并选择Image
。Add a learning block
并选择Transfer Learning (Images)
。Output features
块将具有我们获得的所有标签。Save Impulse
以保存配置。Image
标签。Save parameters
。这会将您发送到Transfer learning
屏幕。Generate features
。Feature explorer
加载。这是我们数据集中所有数据的图。处理完所有数据后,就该开始训练神经网络了。神经网络是一组算法,松散地模仿人脑,旨在识别模式。我们在这里训练的网络将信号处理数据作为输入,并尝试将其映射到四个类之一。
那么神经网络如何知道要预测什么?神经网络由多层神经元组成,所有神经元相互连接,每个连接都有一个权重。输入层中的一个这样的神经元将是 X 轴的第一个峰值的高度(来自信号处理块),而输出层中的一个这样的神经元将是takeoff
(其中一个类)。在定义神经网络时,所有这些连接都是随机初始化的,因此神经网络将进行随机预测。在训练期间,我们然后获取所有原始数据,要求网络进行预测,然后根据结果对权重进行微小的更改(这就是标记原始数据很重要的原因)。
这样,经过多次迭代,神经网络就会学习;并且最终将在预测新数据方面变得更好。
Transfer learning
标签。Number of training cycles
至20
、Learning rate
至0.0005
和Minimum confidence rating
至0.60
。您可以使用这些值来调整训练模型的准确性。Start training
。Training Output
部分被填充。==================================================== ===================
手势模型测试
Model Testing
标签。Classify all
。Feature explorer
,我们可以了解是否有任何标签被错误分类,并使用更多的训练数据来重新训练我们的模型,以便更好地分类这些数据。Live classification
。您的设备应在 下显示为在线Classify new data
。将 Sensor 设置为Camera
,单击Start sampling
,开始采集样本。==================================================== ===================
手势模型部署
通过设计、训练和验证的冲动,您可以将此模型部署回您的设备。这使得模型在没有互联网连接的情况下运行,最大限度地减少延迟,并以最低的功耗运行。Edge Impulse 可以将完整的脉冲(包括信号处理代码、神经网络权重和分类代码)打包到单个 C++ 库中,您可以将其包含在嵌入式软件中。
Deployment
标签。C++ library
。Build firmware
选择您的开发板下Build
。这将导出冲动,并构建一个将在开发板上一步运行的库。==================================================== ===================
现在我们已经准备好我们的无人机和手势模型,让我们在代码中将所有内容连接在一起。
本项目教程的部分提供了完整的接口代码。Code
在此处获取代码:https ://github.com/crisdeodates/Tello_EI_vision_gesture_control
运行以下命令:
$ git clone https://github.com/crisdeodates/Tello_EI_vision_gesture_control
$ cd Tello_EI_vision_gesture_control
$ APP_CAMERA=1 make -j4
现在将您的笔记本电脑连接到 Tello Wifi 并执行二进制文件以启动控件。
$ ./build/Tello_EI_vision_gesture_control 0
==================================================== ===================
现在让我们测试一下手势控制,看看它的效果如何。
以下是起飞和降落视觉手势的快速测试。
==================================================== ===================
尽管推理引擎无法准确分类某些手势,但总体性能令人满意。此外,在某些情况下,手势命令被错误分类。
我们相信这些问题可以通过添加更多的训练数据集并使模型更加灵活来得到更好的解决。
该模型已经针对低功耗、资源受限的模块(例如 ESP32-CAM)进行了优化。
==================================================== ===================
==================================================== ===================
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !