I droni sò incredibili. Mi piace veramente ghjucà cù u mo quad, piglià foto è video, o solu divertevi. Ma i veiculi aerei senza pilota (UAV) sò usati per più di l'intrattenimentu. U travagliu in u cinema, studia i glaciers, è sò usati da i militari è rapprisintanti di u settore agriculu.
In questu tutoriale, avemu da circà à creà un prugramma chì vi permetterà di cuntrullà un drone. usendu cumandamenti di voce. Iè, l'copter farà ciò chì dite di fà. À a fine di l'articulu ci hè un prugramma prontu è video di cuntrollu UAV.
Ferru
Avemu bisognu di i seguenti:
Parrot ARDrone 2.0;
cable Ethernet;
bonu microfonu.
U sviluppu è a gestione seranu realizati nantu à stazioni di travagliu cù Windows / Mac / Ubuntu. In modu persunale, aghju travagliatu cù Mac è Ubuntu 18.04.
Software
Scaricate l'ultima versione di Node.js da situ ufficiali.
Pruvemu di capisce cumu funziona Parrot ARDrone. Stu copter hà quattru mutori.
I mutori opposti travaglianu in a listessa direzzione. Una coppia gira in senso orario, l'altra in senso antiorario. U drone si move cambiendu l'angolo di inclinazione relative à a superficia di a terra, cambiendu a velocità di rotazione di i mutori è parechji altri movimenti manuvrabili.
Comu pudemu vede in u diagramma sopra, cambià parechji paràmetri porta à un cambiamentu in a direzzione di u muvimentu di l'copter. Per esempiu, a diminuzione o l'aumentu di a velocità di rotazione di i rotori di manca è di diritta crea un rollu. Questu permette à u drone di vulà in avanti o in daretu.
Cambiendu a vitezza è a direzzione di i mutori, avemu stabilitu anguli d'inclinazione chì permettenu à l'copter di spustà in altre direzzione. In verità, per u prughjettu attuale ùn ci hè bisognu di studià l'aerodinamica, basta à capisce i principii basi.
Cumu funziona Parrot ARDrone
U drone hè un hotspot Wi-Fi. Per riceve è mandà cumandamenti à l'copteru, avete bisognu di cunnette à questu puntu. Ci hè parechje applicazioni diverse chì permettenu di cuntrullà i quadcopters. Tuttu pare qualcosa cusì:
Appena u drone hè cunnessu, apre u terminal è telnet 192.168.1.1 - questu hè l'IP di l'copter. Per Linux pudete aduprà Linux Busybox.
Architettura di l'applicazione
U nostru codice serà divisu in i seguenti moduli:
interfaccia d'utilizatore cù API di voce per a rilevazione di voce;
cumandamenti di filtru è paragunà cù un standard;
mandendu cumandamenti à u drone;
trasmissione video in diretta.
L'API funziona sempre chì ci hè una cunnessione Internet. Per assicurà questu, aghjunghjemu una cunnessione Ethernet.
Hè ora di creà una applicazione!
Codice
Prima, creemu un novu cartulare è cambiassi cù u terminal.
Allora creamu un prughjettu Node cù i cumandamenti sottu.
Prima, installemu e dipendenze necessarie.
npm install
Supporteremu i seguenti cumandamenti:
vai ti ne;
sbarcu;
up - u drone s'alza una mità di metru è passa;
falà - cade un mezu metru è si congela;
à manca - va un mezu metru à manca;
à a diritta - va un mezu metru à a diritta;
rotazione - gira in senso orario 90 gradi;
avanti - avanza un mezu metru;
back - torna à mezu metru;
ferma.
Eccu u codice chì permette di accettà cumandamenti, filtrà è cuntrullà u 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);
È quì hè u codice HTML è JavaScript chì sente à l'utilizatore è manda un cumandamentu à u servitore 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>
È ancu codice JavaScript per travaglià cù cumandamenti di voce, mandendu à u servitore 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'
});
};
Lanciatu di l'applicazione
U prugramma pò esse lanciatu cum'è seguitu (hè impurtante per assicurà chì u copter hè cunnessu à Wi-Fi è u cable Ethernet hè cunnessu à l'urdinatore).
Aprite localhost:3000 in u navigatore è cliccate Start Recognition.
Pruvemu di cuntrullà u drone è sò felici.
Trasmissione di video da un drone
In u prughjettu, crea un novu schedariu è copià stu codice quì:
Lanciate è cunnette à localhost: 8080 per vede u video da a camera frontale.
Tips Tips
Vola stu drone in casa.
Mettite sempre a tappa protettiva nantu à u vostru drone prima di cullà.
Verificate se a bateria hè carica.
Se u drone si cumporta in modu stranu, tenete premutu è girallu. Questa azzione metterà l'copteru in modu d'emergenza è i rotori si fermanu immediatamente.
Scrive u codice è poi fighjulà a macchina chì principia à ubbidisce vi darà piacè! Avà avemu capitu cumu insignà à un drone à sente i cumandamenti di voce. In fatti, ci sò assai più pussibulità: ricunniscenza faciale d'utilizatori, voli autonomi, ricunniscenza di gestu è assai di più.