邻章科技11月21日讯:继“如何用100美元和 TensorFlow 来造一个能‘看’东西的机器人” 之后,Lukas 又一力作。 在“造”出能进行物体识别的机器人后,下一步就很清晰了,我要“造”一个能飞的东西!我决定搞一个能自主飞行的无人机,并要它能识别人脸和响应语音指令。 - 选择一台成品无人机 开始“黑入”一台无人机的最难的部分就是如何开始。我最初的选择是用零件组装一台无人机。但和我完成的大部分的 DIY 项目一样,从零开始一般都耗费了太多的时间,还不如直接买一个成品。实话实说,我自己组装的无人机从来没有正常的飞行过。而买一台成品机就既省事又省钱。 绝大部分无人机厂商都宣称提供 API 接口,但对于业余玩家来说就没有一个明确的选择。大部分能提供貌似可用的 API 接口的无人机都要超过1000美元。这对于入门级的玩家来说就太贵了。 但经过搜索,我发现 Parrot AR.Drone 2.0 无人机版(见图1)是一个低端可“黑”入无人机的极佳选择。新的售价是200美元,不过很多人在买了以后就不怎么再玩了,所以在 eBay 上花130美元或更少就能买到一个不错的二手货。 图1:我车库里的无人机收藏。最左边的就是Parrot AR.Drone 2.0 无人机。图片由 Lukas Biewald 授权使用 论飞行稳定性,Parrot AR.Drone 型不如更贵的 Parrot Bebop 2 型(550美元)。但是 Parrot AR.Drone 型所带的叫 node-ar-drone 的 node.js 客户端库是非常好用的。 Parrot AR型的另外一个优点是它非常皮实、耐摔。在测试自主飞行代码的时候,atv,我的无人机频繁地撞到墙、家具、植物甚至是我们家的客人,并坠落。但它还是依旧能正常飞行。 比起“造”能在地上跑的机器人,“造”无人机最不爽的一点就是它的电池可用时间太短了。基本上是充电几小时,飞行十几分钟。所以我建议多买两块电池,循环充电使用。 - 给我的无人机开发程序 我经过实践发现,Java 内在的事件驱动的特性使得它成为一种非常好的控制无人机的语言。请相信我,无人机飞行的时候,是有非常多的异步事件发生。我写 Node.JS 的时间并不长,但在这个项目过程中,我对它的印象非常深刻。上一次我正儿八经地为机器人写程序用的是 C 语言。处理 C 语言的线程和异常是一件非常让人头疼的事,所以我尽量避免再使用它。我希望有人能为其他的机器人平台开发出 Java 的接口,因为这会让为机器人开发程序(完全无法预知会发生什么事)变得更简单更有趣。 - 架构设计 我决定在我的笔记本上运行控制逻辑,同时在云端运行机器学习的部分。这种架构设计比在树莓派板上直接运行神经网络的延迟要低。我认为这种架构对于业余无人机项目而言是合适的。 微软、谷歌、IBM 和亚马逊都提供快速且便宜的机器学习 API。最终我选择了微软的认知服务 API 来完成这个项目,因为它是提供定制化的人脸识别功能的 API。 图2里展示了整个无人机项目的系统架构。 图2:智能无人机的系统架构。图片由 Lukas Biewald 授权使用 - 开始动手 默认地,Parrot AR.Drone 2.0 版自己可以提供一个无线网络,供客户端接入,但是这个功能却极度烦人。每次你要实验点东西,你都需要从本地网络断开,再连到无人机的无线网里。好消息是,有一个叫 ardrone-wpa2 的项目,非常有用,用它你可以“黑”进无人机,并让无人机连到你自己的无线网络里。 Telnet 到无人机操作系统上并游荡一番是挺有趣的。Parrot 无人机使用的是一个简化版的 Linux 操作系统。你上次 Telnet 到某个系统上是什么时间哪?下面的命令例子就演示了如何打开一个终端并直接登录到无人机的操作系统上。 % /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) (责任编辑:本港台直播) |