专栏名称: 董老师在硅谷
硅谷工程师,关注创业趋势,大数据,在线教育,社交自媒体。分享技术,体验职场,书写成长,欢迎交流,一起进步。
目录
相关文章推荐
中工网  ·  好消息!北京小客车指标有新变化 ·  昨天  
中工网  ·  好消息!北京小客车指标有新变化 ·  昨天  
北京生态环境  ·  区生态环境一周动态 ·  昨天  
北京吃货小分队  ·  这些top首店,终于都开到北京了 ·  3 天前  
北京吃货小分队  ·  北京3月活动指南 · 第一波市集回归 | ... ·  2 天前  
51好读  ›  专栏  ›  董老师在硅谷

200美元“造”出一台可由语音控制外加能进行人脸识别的自主飞行无人机

董老师在硅谷  · 公众号  ·  · 2016-11-17 16:46

正文

继“如何用100美元和TensorFlow来造一个能‘看’东西的机器人” 之后,Lukas又一最新力作。

结合深度学习和便宜硬件的更多探奇。

在“造”出能进行 物体识别的机器人 后,下一步就很清晰了,我要“造”一个能飞的东西!我决定搞一个能自主飞行的无人机,并要它能识别人脸和响应语音指令。

选择一台成品无人机

开始“黑入”一台无人机的最难的部分就是如何开始。我最初的选择是用零件组装一台无人机。但和我完成的大部分的DIY项目一样,从零开始一般都耗费了太多的时间,还不如直接买一个成品。实话实说,我自己组装的无人机从来没有正常的飞行过。而买一台成品机就既省事又省钱。

绝大部分无人机厂商都宣称提供API接口,但对于业余玩家来说就没有一个明确的最佳选择。大部分能提供貌似可用的API接口的无人机都要超过1000美元。这对于入门级的玩家来说就太贵了。

但经过搜索,我发现 Parrot AR 无人机2.0版 (见图1)是一个低端可“黑”入无人机的极佳选择。新的售价是200美元,不过很多人在买了以后就不怎么再玩了,所以在eBay上花130美元或更少就能买到一个不错的二手货。

图1:我车库里的无人机收藏。最左边的就是Parrot AR无人机。图片由Lukas Biewald授权使用

论飞行稳定性,Parrot AR型不如更贵的 Parrot Bebop 2型 (550美元)。但是Parrot AR型所带的叫 node-ar-drone 的node.js客户端库是非常好用的。

Parrot AR型的另外一个优点是它非常皮实、耐摔。在测试自主飞行代码的时候,我的无人机频繁地撞到墙、家具、植物甚至是我们家的客人,并坠落。但它还是依旧能正常飞行。

比起“造”能在地上跑的机器人,“造”无人机最不爽的一点就是它的电池可用时间太短了。基本上是充电几小时,飞行十几分钟。所以我建议多买两块电池,循环充电使用。

给我的无人机开发程序

我经过实践发现,Javascript内在的事件驱动的特性使得它成为一种非常好的控制无人机的语言。请相信我,无人机飞行的时候,是有非常多的异步事件发生。我写Node.JS的时间并不长,但在这个项目过程中,我对它的印象非常深刻。上一次我正儿八经地为机器人写程序用的是C语言。处理C语言的线程和异常是一件非常让人头疼的事,所以我尽量避免再使用它。我希望有人能为其他的机器人平台开发出JavaScript的接口,因为这会让为机器人开发程序(完全无法预知会发生什么事)变得更简单更有趣。

架构设计

我决定在我的笔记本上运行控制逻辑,同时在云端运行机器学习的部分。这种架构设计比在 树莓派 板上直接运行神经网络的延迟要低。我认为这种架构对于业余无人机项目而言是合适的。

微软、谷歌、IBM和亚马逊都提供快速且便宜的机器学习API。最终我选择了 微软的认知服务API 来完成这个项目,因为它是唯一提供定制化的人脸识别功能的API。

图2里展示了整个无人机项目的系统架构。

图2:智能无人机的系统架构。图片由Lukas Biewald授权使用

开始动手

默认地,Parrot AR无人机2.0版自己可以提供一个无线网络,供客户端接入,但是这个功能却极度烦人。每次你要实验点东西,你都需要从本地网络断开,再连到无人机的无线网里。好消息是,有一个叫 ardrone-wpa2 的项目,非常有用,用它你可以“黑”进无人机,并让无人机连到你自己的无线网络里。

Telnet 到无人机操作系统上并游荡一番是挺有趣的。Parrot无人机使用的是一个简化版的Linux操作系统。你上次Telnet到某个系统上是什么时间哪?下面的命令例子就演示了如何打开一个终端并直接登录到无人机的操作系统上。

% script/connect “The Optics Lab” -p “particleorwave” -a 192.168.0.1 -d 192.168.7.43

% telnet 192.168.7.43

通过命令行来控制飞行

在安装了node库之后,下一步就是生成一个node.js的命令行运行环境,然后就可以开始控制你的无人机了:

var arDrone = require(‘ar-drone’);

var client = arDrone.createClient({ip: ‘192.168.7.43’});

client.createRepl();

drone> takeoff()

true

drone> client.animate(‘yawDance, 1.0)

如果你按照我上面所说的一步一步地实验到这里,你的无人机肯定已经坠落过了——至少好几次。我已经无数次地把我的无人机的保护外壳给它粘回机身上,直到它彻底解体,随后我只好再买了一个新的。我不得不说,其实Parrot AR型在没有保护外壳的时候飞行得更好。但这种方式会使无人机变得很危险。因为没有保护外壳的话,一旦无人机撞到东西,它的螺旋桨就会直接打到物体上,并留下刮痕。

从网页上控制无人机飞行

为无人机开发一个基于网页的控制页面挺简单且效果不错。用如下所示的express.js框架就可以搭建一个很小巧的网页服务器。

var express = require(‘express’);

app.get(‘/’, function (req, res) {

res.sendFile(path.join(__dirname + ‘/index.html’));

});

app.get(‘/land’, function(req, res) {

client.land();

});

app.get(‘/takeoff’, function(req, res) {

client.takeoff();

});

app.listen(3000, function () {

});

我用下面的代码来通过一个按钮发送 AJAX 请求。







请到「今天看啥」查看全文