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.

Skillbox tövsiyə edir: Praktik kurs "Mobil Developer PRO".

Giriş

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ı.

Həmçinin lazımdır google chrome-un son versiyası.

Kopteri başa düşmək

Parrot ARDrone-un necə işlədiyini anlamağa çalışaq. Bu helikopterdə dörd mühərrik var.

Node.js və ARDrone proqramlarından istifadə edərək kopterin səslə idarə olunmasını proqramlaşdırırıq

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.

Node.js və ARDrone proqramlarından istifadə edərək kopterin səslə idarə olunmasını proqramlaşdırırıq

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:

Node.js və ARDrone proqramlarından istifadə edərək kopterin səslə idarə olunmasını proqramlaşdırırıq

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.

Node.js və ARDrone proqramlarından istifadə edərək kopterin səslə idarə olunmasını proqramlaşdırırıq

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:

const http = require("http");
const drone = require("dronestream");
 
const server = http.createServer(function(req, res) {
 
require("fs").createReadStream(__dirname + "/public/video.html").pipe(res);
 });
 
drone.listen(server);
 
server.listen(4000);

Və budur HTML kodu, biz onu ümumi qovluğun içərisinə yerləşdiririk.

<!doctype html>
 <html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <title>Stream as module</title>
 <script src="/dronestream/nodecopter-client.js" type="text/javascript" charset="utf-8"></script>
 </head>
 <body>
 <h1 id="heading">Drone video stream</h1>
 <div id="droneStream" style="width: 640px; height: 360px"> </div>
 
<script type="text/javascript" charset="utf-8">
 
new NodecopterStream(document.getElementById("droneStream"));
 
</script>
 
</body>
</html>

Ön kameradan videoya baxmaq üçün localhost:8080-ə işə salın və qoşulun.

Node.js və ARDrone proqramlarından istifadə edərək kopterin səslə idarə olunmasını proqramlaşdırırıq

Faydalı məsləhətlər

  • Bu dronu qapalı yerdə uçurun.
  • Uçuşdan əvvəl həmişə dronunuza qoruyucu örtüyü taxın.
  • Batareyanın dolu olub olmadığını yoxlayın.
  • Pilotsuz uçan aparat qəribə davranırsa, onu basılı tutun və çevirin. Bu hərəkət helikopteri təcili rejimə keçirəcək və rotorlar dərhal dayanacaq.

Hazır kod və demo

DEMO CANLI

YÜKLƏ

baş verdi!

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?

Skillbox tövsiyə edir:

Mənbə: www.habr.com

Добавить комментарий