ProHoster > Blog > internet xəbərləri > Node.js və ARDrone proqramlarından istifadə edərək kopterin səslə idarə olunmasını proqramlaşdırırıq
Node.js və ARDrone proqramlarından istifadə edərək kopterin səslə idarə olunmasını proqramlaşdırırıq
Bu dərslikdə biz Node.js və Web nitq API-dən istifadə edərək səslə idarə olunan dron üçün proqram yaratmağa baxacağıq. Helikopter - Parrot ARDrone 2.0.
Xatırladırıq:"Habr" ın bütün oxucuları üçün - "Habr" promosyon kodundan istifadə edərək hər hansı bir Skillbox kursuna yazılarkən 10 000 rubl endirim.
Dronlar heyrətamizdir. Kvadratımla oynamaqdan, foto və video çəkməkdən və ya sadəcə əylənməkdən çox zövq alıram. Lakin pilotsuz uçuş aparatları (PUA) sadəcə əyləncə üçün deyil, daha çox istifadə olunur. Onlar kinoda işləyir, buzlaqları öyrənir və hərbçilər və kənd təsərrüfatı sektorunun nümayəndələri tərəfindən istifadə olunur.
Bu dərslikdə sizə dronu idarə etməyə imkan verəcək proqram yaratmağa baxacağıq. səs əmrlərindən istifadə etməklə. Bəli, helikopter dediyinizi edəcək. Məqalənin sonunda PUA nəzarətinin hazır proqramı və videosu var.
Dəmir
Bizə aşağıdakılar lazımdır:
Parrot ARDrone 2.0;
Ethernet kabeli;
yaxşı mikrofon.
İnkişaf və idarəetmə Windows/Mac/Ubuntu ilə iş stansiyalarında həyata keçiriləcək. Şəxsən mən Mac və Ubuntu 18.04 ilə işləmişəm.
Software
Node.js-in ən son versiyasını buradan endirin rəsmi saytı.
Parrot ARDrone-un necə işlədiyini anlamağa çalışaq. Bu helikopterdə dörd mühərrik var.
Qarşılıqlı mühərriklər eyni istiqamətdə işləyir. Bir cüt saat yönünün əksinə, digəri isə saat yönünün əksinə fırlanır. Pilotsuz təyyarə yerin səthinə nisbətən meyl bucağını dəyişdirərək, mühərriklərin fırlanma sürətini və bir neçə başqa manevr edilə bilən hərəkətləri dəyişdirərək hərəkət edir.
Yuxarıdakı diaqramda gördüyümüz kimi, müxtəlif parametrlərin dəyişdirilməsi kopterin hərəkət istiqamətinin dəyişməsinə səbəb olur. Məsələn, sol və sağ rotorların fırlanma sürətinin azaldılması və ya artırılması rulon yaradır. Bu, dronun irəli və ya geri uçmasına imkan verir.
Mühərriklərin sürətini və istiqamətini dəyişdirərək, biz kopterin başqa istiqamətlərdə hərəkət etməsinə imkan verən əyilmə bucaqlarını təyin edirik. Əslində, hazırkı layihə üçün aerodinamika öyrənməyə ehtiyac yoxdur, sadəcə əsas prinsipləri başa düşmək lazımdır.
Parrot ARDrone necə işləyir
Dron Wi-Fi qaynar nöqtəsidir. Kopterə əmrləri qəbul etmək və göndərmək üçün bu nöqtəyə qoşulmaq lazımdır. Kvadrokopterləri idarə etməyə imkan verən çoxlu müxtəlif proqramlar var. Hamısı belə görünür:
Pilotsuz təyyarə qoşulan kimi terminalı açın və telnet 192.168.1.1 - bu kopterin IP-sidir. Linux üçün istifadə edə bilərsiniz Linux Busybox.
Tətbiq arxitekturası
Kodumuz aşağıdakı modullara bölünəcək:
səsin aşkarlanması üçün nitq API ilə istifadəçi interfeysi;
əmrlərin süzülməsi və standartla müqayisə edilməsi;
pilotsuz təyyarəyə əmrlərin göndərilməsi;
canlı video yayımı.
API İnternet bağlantısı olduğu müddətdə işləyir. Bunu təmin etmək üçün biz Ethernet bağlantısı əlavə edirik.
Tətbiq yaratmağın vaxtı gəldi!
Kod
Əvvəlcə yeni qovluq yaradaq və terminaldan istifadə edərək ona keçək.
Sonra aşağıdakı əmrlərdən istifadə edərək Node layihəsi yaradırıq.
Əvvəlcə tələb olunan asılılıqları quraşdırırıq.
npm yükləyin
Aşağıdakı əmrləri dəstəkləyəcəyik:
çıxarmaq;
eniş;
yuxarı - dron yarım metr qalxır və uçur;
aşağı - yarım metr düşür və donur;
sola - yarım metr sola gedir;
sağa - yarım metr sağa gedir;
fırlanma - saat yönünde 90 dərəcə fırlanır;
irəli - yarım metr irəli gedir;
geri - yarım metr geri gedir;
dayan.
Budur, əmrləri qəbul etməyə, onları süzgəcdən keçirməyə və dronu idarə etməyə imkan verən kod.
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);
Və burada istifadəçini dinləyən və Node serverinə əmr göndərən HTML və JavaScript kodu.
<!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>
Həm də səs əmrləri ilə işləmək, onları Node serverinə göndərmək üçün JavaScript kodu.
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'
});
};
Tətbiqin işə salınması
Proqramı aşağıdakı kimi işə salmaq olar (kopterin Wi-Fi-a və Ethernet kabelinin kompüterə qoşulduğuna əmin olmaq vacibdir).
Brauzerdə localhost:3000-i açın və Tanınmağa başlayın.
Biz pilotsuz təyyarəni idarə etməyə çalışırıq və xoşbəxtik.
Drondan video yayımlanır
Layihədə yeni bir fayl yaradın və bu kodu ora köçürün:
Kod yazmaq və sonra maşının itaət etməyə başlamasına baxmaq sizə həzz verəcək! İndi biz dronu səsli əmrləri dinləməyi necə öyrətəcəyimizi anladıq. Əslində, daha çox imkanlar var: istifadəçi üzünün tanınması, avtonom uçuşlar, jestlərin tanınması və daha çox.
Proqramı təkmilləşdirmək üçün nə təklif edə bilərsiniz?