ProHoster > Blog > lajme në internet > Ne programojmë kontrollin zanor të helikopterit duke përdorur Node.js dhe ARDrone
Ne programojmë kontrollin zanor të helikopterit duke përdorur Node.js dhe ARDrone
Në këtë tutorial do të shikojmë krijimin e një programi për një dron me kontroll zanor duke përdorur Node.js dhe API të fjalimit në ueb. Copter - Parrot ARDrone 2.0.
Kujtojmë:për të gjithë lexuesit e "Habr" - një zbritje prej 10 rubla kur regjistroheni në çdo kurs Skillbox duke përdorur kodin promovues "Habr".
Dronët janë të mahnitshëm. Më pëlqen shumë të luaj me kuadratin tim, të bëj foto dhe video ose thjesht të argëtohem. Por mjetet ajrore pa pilot (UAV) përdoren për më shumë sesa thjesht argëtim. Ata punojnë në kinema, studiojnë akullnajat dhe përdoren nga ushtria dhe përfaqësues të sektorit bujqësor.
Në këtë tutorial do të shikojmë krijimin e një programi që do t'ju lejojë të kontrolloni një dron. duke përdorur komandat zanore. Po, helikopteri do të bëjë atë që ju i thoni të bëjë. Në fund të artikullit ka një program dhe video të gatshme të kontrollit të UAV.
hekur
Ne kemi nevojë për sa vijon:
Parrot ARDrone 2.0;
kabllo Ethernet;
mikrofon i mirë.
Zhvillimi dhe menaxhimi do të kryhet në stacionet e punës me Windows/Mac/Ubuntu. Personalisht, kam punuar me Mac dhe Ubuntu 18.04.
Программное обеспечение
Shkarkoni versionin më të fundit të Node.js nga faqen zyrtare.
Le të përpiqemi të kuptojmë se si funksionon Parrot ARDrone. Ky helikopter ka katër motorë.
Motorët kundërshtarë punojnë në të njëjtin drejtim. Njëra palë rrotullohet në drejtim të akrepave të orës, tjetra në drejtim të kundërt. Droni lëviz duke ndryshuar këndin e prirjes në raport me sipërfaqen e tokës, duke ndryshuar shpejtësinë e rrotullimit të motorëve dhe disa lëvizje të tjera të manovrueshme.
Siç mund ta shohim në diagramin e mësipërm, ndryshimi i parametrave të ndryshëm çon në një ndryshim në drejtimin e lëvizjes së helikopterit. Për shembull, ulja ose rritja e shpejtësisë së rrotullimit të rotorit majtas dhe djathtas krijon një rrotull. Kjo lejon dronin të fluturojë përpara ose prapa.
Duke ndryshuar shpejtësinë dhe drejtimin e motorëve, ne vendosim kënde të pjerrësisë që lejojnë helikopterin të lëvizë në drejtime të tjera. Në fakt, për projektin aktual nuk ka nevojë të studioni aerodinamikën, thjesht duhet të kuptoni parimet themelore.
Si funksionon Parrot ARDrone
Droni është një pikë e nxehtë Wi-Fi. Për të marrë dhe dërguar komanda në helikopter, duhet të lidheni në këtë pikë. Ka shumë aplikacione të ndryshme që ju lejojnë të kontrolloni kuadrot. Gjithçka duket diçka si kjo:
Sapo të lidhet droni, hapni terminalin dhe telnetin 192.168.1.1 - kjo është IP e helikopterit. Për Linux mund të përdorni Linux Busybox.
Arkitektura e aplikacionit
Kodi ynë do të ndahet në modulet e mëposhtme:
ndërfaqja e përdoruesit me API të të folurit për zbulimin e zërit;
filtrimi i komandave dhe krahasimi me një standard;
dërgimi i komandave në dron;
transmetim live video.
API funksionon për sa kohë që ka një lidhje interneti. Për ta siguruar këtë, ne shtojmë një lidhje Ethernet.
Është koha për të krijuar një aplikacion!
Kodi
Së pari, le të krijojmë një dosje të re dhe të kalojmë në të duke përdorur terminalin.
Pastaj krijojmë një projekt Node duke përdorur komandat e mëposhtme.
Së pari, ne instalojmë varësitë e kërkuara.
instaloni npm
Ne do të mbështesim komandat e mëposhtme:
ngritje;
ulje;
lart - droni ngrihet gjysmë metri dhe rri pezull;
poshtë - bie gjysmë metri dhe ngrin;
në të majtë - shkon gjysmë metri në të majtë;
në të djathtë - shkon gjysmë metri në të djathtë;
rrotullim - rrotullohet në drejtim të akrepave të orës 90 gradë;
përpara - shkon përpara gjysmë metri;
mbrapa - kthehet gjysmë metër;
ndaloni.
Këtu është kodi që ju lejon të pranoni komanda, t'i filtroni dhe të kontrolloni dronin.
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);
Dhe këtu është kodi HTML dhe JavaScript që dëgjon përdoruesin dhe dërgon një komandë në serverin 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>
Dhe gjithashtu kodin JavaScript për të punuar me komandat zanore, duke i dërguar ato në serverin 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'
});
};
Nisja e aplikacionit
Programi mund të nisë si më poshtë (është e rëndësishme të siguroheni që helikopteri të jetë i lidhur me Wi-Fi dhe kablloja Ethernet të jetë e lidhur me kompjuterin).
Hapni localhost:3000 në shfletues dhe klikoni Start Recognition.
Ne përpiqemi të kontrollojmë dronin dhe jemi të lumtur.
Transmetimi i videos nga një dron
Në projekt, krijoni një skedar të ri dhe kopjoni këtë kod atje:
Nisni dhe lidheni me localhost:8080 për të parë videon nga kamera e përparme.
Këshilla të dobishme
Fluturoni këtë dron në ambiente të mbyllura.
Gjithmonë vendosni mbulesën mbrojtëse në dronin tuaj përpara se të niseni.
Kontrolloni nëse bateria është e ngarkuar.
Nëse droni sillet në mënyrë të çuditshme, mbajeni dhe kthejeni përmbys. Ky veprim do ta vendosë helikopterin në modalitetin e urgjencës dhe rotorët do të ndalojnë menjëherë.
Shkrimi i kodit dhe më pas shikimi i makinës që fillon të bindet do t'ju japë kënaqësi! Tani kemi kuptuar se si t'i mësojmë një dron të dëgjojë komandat zanore. Në fakt, ka shumë më tepër mundësi: njohja e fytyrës së përdoruesit, fluturimet autonome, njohja e gjesteve dhe shumë më tepër.
Çfarë mund të sugjeroni për të përmirësuar programin?