Els drons són increïbles. M'agrada molt jugar amb el meu quad, fer fotos i vídeos, o simplement divertir-me. Però els vehicles aeris no tripulats (UAV) s'utilitzen per a més que només entreteniment. Treballen al cinema, estudien les glaceres i són utilitzats per militars i representants del sector agrícola.
En aquest tutorial veurem com crear un programa que us permetrà controlar un drone. utilitzant ordres de veu. Sí, l'copter farà el que li dius que faci. Al final de l'article hi ha un programa preparat i un vídeo de control d'UAV.
Ferro
Necessitem el següent:
Parrot ARDrone 2.0;
cable Ethernet;
bon micròfon.
El desenvolupament i la gestió es realitzaran en estacions de treball amb Windows/Mac/Ubuntu. Personalment, vaig treballar amb Mac i Ubuntu 18.04.
Intentem entendre com funciona Parrot ARDrone. Aquest helicòpter té quatre motors.
Els motors oposats funcionen en la mateixa direcció. Un parell gira en sentit horari i l'altre en sentit contrari. El drone es mou canviant l'angle d'inclinació respecte a la superfície de la terra, canviant la velocitat de gir dels motors i altres moviments maniobrables.
Com podem veure al diagrama anterior, el canvi de diversos paràmetres comporta un canvi en la direcció del moviment de l'copter. Per exemple, disminuir o augmentar la velocitat de rotació dels rotors esquerre i dret crea un rotllo. Això permet que el drone voli cap endavant o cap enrere.
En canviar la velocitat i la direcció dels motors, establim angles d'inclinació que permeten que l'copter es mogui en altres direccions. De fet, per al projecte actual no cal estudiar aerodinàmica, només cal entendre els principis bàsics.
Com funciona Parrot ARDrone
El drone és un punt d'accés Wi-Fi. Per rebre i enviar ordres a l'copter, heu de connectar-vos a aquest punt. Hi ha moltes aplicacions diferents que us permeten controlar quadcopters. Tot sembla una cosa així:
Tan bon punt el drone estigui connectat, obriu el terminal i telnet 192.168.1.1: aquesta és la IP de l'heptero. Per a Linux es pot utilitzar Linux Busybox.
Arquitectura d'aplicacions
El nostre codi es dividirà en els següents mòduls:
interfície d'usuari amb API de veu per a la detecció de veu;
ordres de filtratge i comparació amb un estàndard;
enviant ordres al drone;
emissió de vídeo en directe.
L'API funciona sempre que hi hagi connexió a Internet. Per garantir-ho, afegim una connexió Ethernet.
És hora de crear una aplicació!
Codi
Primer, creem una carpeta nova i canviem-hi mitjançant el terminal.
A continuació, creem un projecte Node utilitzant les ordres següents.
Primer, instal·lem les dependències necessàries.
npm instal·lar
Admetarem les ordres següents:
treure;
aterratge;
amunt - el dron s'aixeca mig metre i planeja;
avall - cau mig metre i es congela;
a l'esquerra - va mig metre a l'esquerra;
a la dreta - va mig metre a la dreta;
rotació: gira en sentit horari 90 graus;
endavant - avança mig metre;
enrere - retrocedeix mig metre;
Atura.
Aquí teniu el codi que us permet acceptar ordres, filtrar-les i controlar el drone.
const express = require('express');
const bodyparser = require('body-parser');
var arDrone = require('ar-drone');
const router = express.Router();
const app = express();
const commands = ['takeoff', 'land','up','down','goleft','goright','turn','goforward','gobackward','stop'];
var drone = arDrone.createClient();
// disable emergency
drone.disableEmergency();
// express
app.use(bodyparser.json());
app.use(express.static(__dirname + '/public'));
router.get('/',(req,res) => {
res.sendFile('index.html');
});
router.post('/command',(req,res) => {
console.log('command recieved ', req.body);
console.log('existing commands', commands);
let command = req.body.command.replace(/ /g,'');
if(commands.indexOf(command) !== -1) {
switch(command.toUpperCase()) {
case "TAKEOFF":
console.log('taking off the drone');
drone.takeoff();
break;
case "LAND":
console.log('landing the drone');
drone.land();
break;
case "UP":
console.log('taking the drone up half meter');
drone.up(0.2);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "DOWN":
console.log('taking the drone down half meter');
drone.down(0.2);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "GOLEFT":
console.log('taking the drone left 1 meter');
drone.left(0.1);
setTimeout(() => {
drone.stop();
clearTimeout();
},1000);
break;
case "GORIGHT":
console.log('taking the drone right 1 meter');
drone.right(0.1);
setTimeout(() => {
drone.stop();
clearTimeout();
},1000);
break;
case "TURN":
console.log('turning the drone');
drone.clockwise(0.4);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "GOFORWARD":
console.log('moving the drone forward by 1 meter');
drone.front(0.1);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "GOBACKWARD":
console.log('moving the drone backward 1 meter');
drone.back(0.1);
setTimeout(() => {
drone.stop();
clearTimeout();
},2000);
break;
case "STOP":
drone.stop();
break;
default:
break;
}
}
res.send('OK');
});
app.use('/',router);
app.listen(process.env.port || 3000);
I aquí hi ha el codi HTML i JavaScript que escolta l'usuari i envia una ordre al servidor Node.
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Voice Controlled Notes App</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/shoelace-css/1.0.0-beta16/shoelace.css">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<h1>Voice Controlled Drone</h1>
<p class="page-description">A tiny app that allows you to control AR drone using voice</p>
<h3 class="no-browser-support">Sorry, Your Browser Doesn't Support the Web Speech API. Try Opening This Demo In Google Chrome.</h3>
<div class="app">
<h3>Give the command</h3>
<div class="input-single">
<textarea id="note-textarea" placeholder="Create a new note by typing or using voice recognition." rows="6"></textarea>
</div>
<button id="start-record-btn" title="Start Recording">Start Recognition</button>
<button id="pause-record-btn" title="Pause Recording">Pause Recognition</button>
<p id="recording-instructions">Press the <strong>Start Recognition</strong> button and allow access.</p>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="script.js"></script>
</body>
</html>
I també codi JavaScript per treballar amb ordres de veu, enviant-les al servidor Node.
try {
var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
var recognition = new SpeechRecognition();
}
catch(e) {
console.error(e);
$('.no-browser-support').show();
$('.app').hide();
}
// other code, please refer GitHub source
recognition.onresult = function(event) {
// event is a SpeechRecognitionEvent object.
// It holds all the lines we have captured so far.
// We only need the current one.
var current = event.resultIndex;
// Get a transcript of what was said.
var transcript = event.results[current][0].transcript;
// send it to the backend
$.ajax({
type: 'POST',
url: '/command/',
data: JSON.stringify({command: transcript}),
success: function(data) { console.log(data) },
contentType: "application/json",
dataType: 'json'
});
};
Inicieu l'aplicació
El programa es pot llançar de la següent manera (és important assegurar-se que l'copter està connectat a Wi-Fi i el cable Ethernet està connectat a l'ordinador).
Obriu localhost:3000 al navegador i feu clic a Inicia el reconeixement.
Intentem controlar el dron i estem contents.
Emissió de vídeo des d'un dron
Al projecte, creeu un fitxer nou i copieu-hi aquest codi:
Inicieu i connecteu-vos a localhost:8080 per veure el vídeo des de la càmera frontal.
Consells Útils
Vola aquest dron a l'interior.
Col·loqueu sempre la funda protectora al vostre drone abans d'enlairar-vos.
Comproveu si la bateria està carregada.
Si el drone es comporta de manera estranya, manteniu-lo premut i gireu-lo. Aquesta acció posarà l'copter en mode d'emergència i els rotors s'aturaran immediatament.
Escriure codi i veure com la màquina comença a obeir et donarà plaer! Ara hem descobert com ensenyar a un drone a escoltar ordres de veu. De fet, hi ha moltes més possibilitats: reconeixement facial d'usuari, vols autònoms, reconeixement de gestos i molt més.