ProHoster > Blog > ахбори интернет > Мо бо истифода аз Node.js ва ARDrone назорати овозии коптерро барномарезӣ мекунем
Мо бо истифода аз Node.js ва ARDrone назорати овозии коптерро барномарезӣ мекунем
Дар ин дарс мо ба сохтани барнома барои бесарнишин бо назорати овоз бо истифода аз Node.js ва Web суханронии API назар хоҳем кард. Коптер - Parrot ARDrone 2.0.
Дронҳо аҷибанд. Ман воқеан аз бозӣ бо чоргонаи худ, аксбардорӣ ва видео ё танҳо вақтхушӣ лаззат мебарам. Аммо ҳавопаймоҳои бесарнишин (UAV) на танҳо барои фароғат истифода мешаванд. Онхо дар кино кор мекунанд, пирьяххоро меомузанд ва аз онхо харбиён ва намояндагони сохахои хочагии кишлок истифода мебаранд.
Дар ин дарс мо эҷод кардани барномаеро дида мебароем, ки ба шумо имкон медиҳад, ки дронро идора кунед. бо истифода аз фармонҳои овозӣ. Бале, коптер он чизеро, ки шумо ба он мефармоед, иҷро мекунад. Дар охири мақола барномаи омода ва видеои идоракунии UAV мавҷуд аст.
Iron
Мо ба инҳо ниёз дорем:
Parrot ARDrone 2.0;
кабели Ethernet;
микрофони хуб.
Таҳия ва идоракунӣ дар истгоҳҳои корӣ бо Windows/Mac/Ubuntu амалӣ карда мешаванд. Шахсан ман бо Mac ва Ubuntu 18.04 кор кардам.
Дрон як нуқтаи дастрасии Wi-Fi мебошад. Барои қабул ва фиристодани фармонҳо ба коптер, шумо бояд ба ин нуқта пайваст шавед. Бисёр барномаҳои гуногун мавҷуданд, ки ба шумо имкон медиҳанд, ки квадрокоптерҳоро идора кунед. Ҳамааш чунин ба назар мерасад:
Ҳамин ки дрон пайваст шуд, терминал ва telnet 192.168.1.1 -ро кушоед - ин IP-и коптер аст. Барои Linux шумо метавонед истифода баред Linux Busybox.
Архитектураи барнома
Рамзи мо ба модулҳои зерин тақсим мешавад:
интерфейси корбар бо API сухан барои муайян кардани овоз;
филтр кардани фармонҳо ва муқоиса бо стандарт;
фиристодани фармонҳо ба дрон;
пахши мустақими видео.
API то он даме, ки пайвасти интернет вуҷуд дорад, кор мекунад. Барои таъмини ин, мо пайвасти Ethernet илова мекунем.
Вақти сохтани барнома расидааст!
Кодекс
Аввалан, биёед папкаи нав эҷод кунем ва бо истифода аз терминал ба он гузарем.
Сипас, мо бо истифода аз фармонҳои зер лоиҳаи Node эҷод мекунем.
Аввалан, мо вобастагии заруриро насб мекунем.
насб
Мо фармонҳои зеринро дастгирӣ мекунем:
гирифтан;
фуруд омадан;
боло - ҳавопаймои бесарнишин ним метр баланд мешавад ва парвоз мекунад;
поён - ним метр меафтад ва ях мекунад;
ба чап - ним метр ба тарафи чап меравад;
ба рост — ним метр ба тарафи рост меравад;
гардиш - бо ақрабаки соат 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'
});
};