大部分无人机都要靠手机或手持遥控器控制。
总而言之,不管是转向还是拍照……都离不开双手来控制。
如果能让无人机听懂我们的诉求,根据语音提示来行动,那就太棒了。
之前曾有一款名叫 XEagle 的语音控制无人机在 Kickstarter 上众筹。
有了它之后,运动爱好者和户外工作人员获得了极大的解放。因为 XEagle 无需双手就能操控,其语音控制、智能手表一键控制、智能避障等功能,不仅将无人机的操控极简化,还能进行自动跟踪拍摄。
不过我们今天的重点不 XEagle,而是要给大家介绍如何构建无人机语音模块。
先来看一段演示:
当然,不是所有无人机都提供了类似的 SDK。所以目前这个方案主要支持的是 Parrot minidrone 系列产品。
相关 Python 和 JS 代码:
https://github.com/IoToutpost/dronecontrol
硬件需求:
1、Cargo 或 Mambo 这类支持蓝牙遥控的 Parrot minidrone 无人机。
2、负责把 AWS 云服务连接到无人机的 树莓派 。
软件需求:
1、配置遥控用的 Alexa 框架。
2、配置 lambda 将 Alexa 语音命令连接到 AWS。
关于AWS的 lambda 请访问:
https://aws.amazon.com/lambda/
3、在树莓派上安装这个 kickass 库(由@amymcgovern创建):
https://github.com/amymcgovern/pyparrot
这个库提供了python-api 来通过蓝牙连接无人机。
主要流程:
1、调用 AWS lambda 函数,该函数接收操作请求并将事件发送到队列(AWS SQS)。
关于 AWS 的 SQS 消息队列服务请访问:
https://aws.amazon.com/cn/sqs/
2、树莓派上的 DroneService 轮询 SQS 并处理事件
3、DroneService 通过蓝牙向 Parrot 无人机发送移动指令。
DroneService:
无人机服务是一个做以下工作的微循环程序:
轮询AWS的SQS,如果消息可用,则提取有效信息并调用相应的方法。
例如:”TakeOffDroneIntent” -> takeOff()
该方法调用 pyparrot 库来执行无人机的动作,如“向上移动”、“向下移动”、“着陆”。
Alexa 技能:
这个技能包支持6种类型的语言表达:
TakeOffDroneIntent: 无人机起飞
LandDroneIntent: 无人机降落
RotateDroneIntent: 无人机旋转+90或-90度。
位置:RotationType(2个值:[+ 90,-90])
定位精度:“顺时针” -> 90,“逆时针” -> -90。
DroneMovementIntent: 无人机在6个可能的方向上移动。
位置:DirectionType(6个值:[“向上”,“向下”,“向左”,“向右”,“向前”,“向后”])
HoverDroneIntent: 徘徊一次。
FlightPlanIntent: 无人机在 flight_plan 中调用硬编码的飞行计划
构建模型将各种话语指向这个任务集合。
一些提示和计划:
队列应该只有一个执行者和一个发布者,它不适用于多个树莓派轮询相同的队列。
除了AWS,其他云计算提供商也有类似的语音识别、消息队列服务。
该项目未来计划在树莓派中添加面部识别以支持“请无人机来找我”类型的用例,以及支持无人机内部通信。
小结:
以上内容只是用语音代替了双手,遥控器依然需要。之前也有其他人用 Alexa 实现了类似功能,但 IoT前哨站 认为改进的空间依然很大,希望大家可以继续创新。让无人机变得更加人性化!
作者:长空无名
本文内容来自IoT前哨站,转载请注明作者和出处。