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) 如果你按照我上面所说的一步一步地实验到这里,你的无人机肯定已经坠落过了——至少好几次。我已经无数次地把我的无人机的保护外壳给它粘回机身上,直到它彻底解体,随后我只好再买了一个新的。我不得不说,其实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请求。 <html> < language=’java’> function call(name) { var xhr = new (); xhr.open(‘GET’, name, true); xhr.send(); } </> <body> <a onclick=”call(‘takeoff’);”>Takeoff</a> <a onclick=”call(‘land’);”>Land</a> </body> </html> 从无人机上导出视频流 我发现把无人机上的摄像头拍摄的视频导出的最佳方法就是:建立一个持续的连接,并把摄像头拍摄的PNG图片发送到我的网站的网页上。通过使用AR无人机的库(见下面的代码),网页服务器不断地把无人机摄像头拍摄的PNG画面拉取出来。 var pngStream = client.getPngStream(); pngStream .on(‘error’, console.log) .on(‘data’, function(pngBuffer) { sendPng(pngBuffer); } function sendPng(buffer) { res.write(‘–daboundarynContent-Type: image/pngnContent-length: ‘ + buff er.length + ‘nn’); res.write(buffer); }); 对从无人机获取的图像进行人脸识别 微软的Azure Face API系统很容易上手,且功能强大。你上传你朋友的照片给它,这个系统就能识别出他们是谁。它也能猜测人物的年龄和性别。我发现这两个功能的识别准确率是惊人的高。整个识别的延迟大概是200毫秒。识别1000次请求花费1.5美元。对我而言,这个价格对于这种应用是相当合理的。下面是我的代码,它实现了发送图片给API来做人脸识别的功能。 var oxford = require(‘project-oxford’), oxc = new oxford.Client(CLIENT_KEY); loadFaces = function() { chris_url = “https://media.licdn.com/mpr/mpr/shrinknp_400_400/AAEAAQAAAAAAAALyAAAAJGMyNmIzNWM0LTA5MTYtNDU4Mi05YjExLTgyMzVlMTZjYjEwYw.jpg”; lukas_url = “https://media.licdn.com/mpr/mpr/shrinknp_400_400/p/3/000/058/147/34969d0.jpg”; oxc.face.faceList.create(‘myFaces’); oxc.face.faceList.addFace(‘myFaces’, {url => chris_url, name=> ‘Chris’}); oxc.face.faceList.addFace(‘myFaces’, {url => lukas_url, name=> ‘Lukas’}); } oxc.face.detect({ path: ‘camera.png’, analyzesAge: true, analyzesGender: true }).then(function (response) { if (response.length > 0) { drawFaces(response, filename) } }); (责任编辑:本港台直播) |