ProHoster > блог > интернет вести > Ние програмираме гласовна контрола на коптерот користејќи Node.js и ARDrone
Ние програмираме гласовна контрола на коптерот користејќи Node.js и ARDrone
Во ова упатство ќе погледнеме како креираме програма за беспилотно летало со гласовна контрола со помош на Node.js и Web говор API. Copter - Parrot ARDrone 2.0.
Потсетуваме:за сите читатели на „Хабр“ - попуст од 10 рубли при запишување на кој било курс Skillbox користејќи го промотивниот код „Хабр“.
Дроновите се неверојатни. Навистина уживам да си играм со мојот кварт, да фотографирам и видеа или едноставно да се забавувам. Но, беспилотните летала (UAVs) се користат за повеќе од само забава. Тие работат во кино, ги проучуваат глечерите и ги користат војската и претставниците на земјоделскиот сектор.
Во овој туторијал ќе погледнеме како креираме програма која ќе ви овозможи да контролирате дрон. користејќи гласовни команди. Да, коптерот ќе го направи тоа што ќе му кажете да го направи. На крајот од статијата има готова програма и видео за контрола на UAV.
Железо
Ни треба следново:
Папагал ARDrone 2.0;
Етернет кабел;
добар микрофон.
Развојот и управувањето ќе се вршат на работни станици со Windows/Mac/Ubuntu. Лично, работев со Mac и Ubuntu 18.04.
Ајде да се обидеме да разбереме како функционира Parrot ARDrone. Овој хеликоптер има четири мотори.
Спротивните мотори работат во иста насока. Еден пар се ротира во насока на стрелките на часовникот, а другиот спротивно од стрелките на часовникот. Дронот се движи со менување на аголот на наклон во однос на површината на земјата, менување на брзината на ротација на моторите и неколку други маневрирачки движења.
Како што можеме да видиме на дијаграмот погоре, менувањето на различни параметри доведува до промена во насоката на движење на коптерот. На пример, со намалување или зголемување на брзината на ротација на левиот и десниот ротор се создава ролна. Ова му овозможува на дронот да лета напред или назад.
Со менување на брзината и насоката на моторите, поставуваме агли на навалување што му овозможуваат на коптерот да се движи во други насоки. Всушност, за сегашниот проект нема потреба од проучување на аеродинамиката, само треба да ги разберете основните принципи.
Како функционира Parrot ARDrone
Дронот е Wi-Fi hotspot. За да примате и испраќате команди до коптерот, треба да се поврзете на оваа точка. Постојат многу различни апликации кои ви дозволуваат да контролирате квадкоптери. Сето тоа изгледа вака:
Штом дронот ќе се поврзе, отворете го терминалот и телнетот 192.168.1.1 - ова е IP-а на коптерот. За Linux можете да користите Linux Busybox.
Архитектура на апликацијата
Нашиот код ќе биде поделен на следните модули:
кориснички интерфејс со говорен API за откривање глас;
филтрирање команди и споредување со стандард;
испраќање команди до дронот;
видео пренос во живо.
API работи се додека има интернет конекција. За да го обезбедиме ова, додаваме етернет конекција.
Време е да креирате апликација!
Код
Прво, ајде да создадеме нова папка и да се префрлиме на неа користејќи го терминалот.
Потоа креираме проект Node користејќи ги командите подолу.
Прво, ги инсталираме потребните зависности.
npm инсталирај
Ние ќе ги поддржиме следните команди:
Соблечи;
слетување;
нагоре - дронот се крева половина метар и лебди;
надолу - паѓа половина метар и замрзнува;
лево - оди половина метар лево;
десно - оди половина метар десно;
ротација - ротира во насока на стрелките на часовникот за 90 степени;
напред - оди напред половина метар;
назад - се враќа половина метар назад;
запре.
Еве го кодот кој ви овозможува да прифаќате команди, да ги филтрирате и да го контролирате дронот.
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);
И тука е HTML и JavaScript кодот што го слуша корисникот и испраќа команда до серверот 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>
И, исто така, JavaScript код за работа со гласовни команди, испраќајќи ги до серверот 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'
});
};
Стартување на апликацијата
Програмата може да се стартува на следниов начин (важно е да бидете сигурни дека коптерот е поврзан на Wi-Fi и кабелот за етернет е поврзан со компјутерот).
Отворете localhost:3000 во прелистувачот и кликнете Start Recognition.
Се обидуваме да го контролираме дронот и сме среќни.
Емитување видео од дрон
Во проектот, креирајте нова датотека и копирајте го овој код таму:
Пишувањето код и потоа гледањето како машината почнува да се покорува ќе ви донесе задоволство! Сега сфативме како да научиме дрон да слуша гласовни команди. Всушност, има многу повеќе можности: препознавање на лицето на корисникот, автономни летови, препознавање гестови и многу повеќе.
Што можете да предложите за подобрување на програмата?