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

Skillbox rekomandon: Kurse praktike "Zhvilluesi i celularit PRO".

Paraqitje

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.

Gjithashtu e nevojshme versioni më i fundit i Google Chrome.

Kuptimi i helikopterit

Le të përpiqemi të kuptojmë se si funksionon Parrot ARDrone. Ky helikopter ka katër motorë.

Ne programojmë kontrollin zanor të helikopterit duke përdorur Node.js dhe ARDrone

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.

Ne programojmë kontrollin zanor të helikopterit duke përdorur Node.js dhe ARDrone

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:

Ne programojmë kontrollin zanor të helikopterit duke përdorur Node.js dhe ARDrone

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 programojmë kontrollin zanor të helikopterit duke përdorur Node.js dhe ARDrone

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:

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);

Dhe këtu është kodi HTML, ne e vendosim atë brenda dosjes publike.

<!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>

Nisni dhe lidheni me localhost:8080 për të parë videon nga kamera e përparme.

Ne programojmë kontrollin zanor të helikopterit duke përdorur Node.js dhe ARDrone

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

Kodi dhe demonstrimi i gatshëm

DEMO LIVE

SHKARKO

Ndodhi!

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?

Skillbox rekomandon:

Burimi: www.habr.com

Shto një koment