Programoni kontrollin me zë dronin duke përdorur Node.js dhe ARDrone

Programoni kontrollin me zë dronin duke përdorur Node.js dhe ARDrone

Në këtë tutorial do të analizojmë krijimin e një programi për dronin me kontroll me zë në Node.js dhe Web Speech API. Droni është Parrot ARDrone 2.0.

KujtojmĂ«: pĂ«r tĂ« gjithĂ« lexuesit e "Habra" — zbritje prej 10,000 rublej pĂ«r regjistrimin nĂ« çdo kurs Skillbox me kodin promocional "Habr".

Skillbox rekomandon: Kurs praktik «Programues i celularëve PRO».

Hyrje

Dronët janë të mahnitshëm. Më pëlqen shumë të luaj me dronin tim, duke regjistruar fotografi dhe video ose thjesht duke u argëtuar. Mirëpo, pajisjet pa pilot (BPL) përdoren jo vetëm për argëtim. Ato punojnë në kinematografi, studjojnë glaciere, përdoren nga ushtria dhe përfaqësuesit e sektorit bujqësor.

NĂ« kĂ«tĂ« tutorial do tĂ« analizojmĂ« krijimin e njĂ« programi qĂ« do t'ju lejojĂ« tĂ« kontrolloni dronin duke pĂ«rdorur komandat me zĂ«. Po, droni do tĂ« bĂ«jĂ« atĂ« qĂ« i thoni. NĂ« fund tĂ« artikullit — programi i gatshĂ«m dhe video pĂ«r kontrollet BPL.

Pajisjet

Na nevojitet e siguiente:

  • Parrot ARDrone 2.0;
  • KablĂ« Ethernet;
  • mikrofon i mirĂ«.

Zhvillimi dhe menaxhimi do të bëhet në stacione pune me Windows/Mac/Ubuntu. Personalish kam punuar me Mac dhe Ubuntu 18.04.

Software

Shkarkoni versionin më të fundit të Node.js nga faqja zyrtare.

Kërkohet gjithashtu versioni më i fundit i Google Chrome.

Mësojmë rreth copter-it

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

Programoni kontrollin me zë dronin duke përdorur Node.js dhe ARDrone

Motoret pĂ«rballĂ« punojnĂ« nĂ« njĂ« drejtim. NjĂ« çift rrotullohet nĂ« drejtimin e akrepave tĂ« orĂ«s, tjetra – nĂ« drejtim tĂ« kundĂ«rt. Droni lĂ«viz duke ndryshuar kĂ«ndin e pjerrĂ«sisĂ« nĂ« raport me sipĂ«rfaqen e tokĂ«s, ndryshimin e shpejtĂ«sisĂ« sĂ« rrotullimit tĂ« motorĂ«ve dhe lĂ«vizje tĂ« tjera manovruese.

Programoni kontrollin me zë dronin duke përdorur Node.js dhe ARDrone

Siç shohim në diagramin e mësipërm, ndryshimi i parametrave të ndryshëm çon në një ndryshim të drejtimit të lëvizjes së copter-it. Për shembull, zvogëlimi ose rritja e shpejtësisë së rrotatorëve të majtë dhe të djathtë krijon pjerrësi. Kjo i lejon dronit të fluturojë përpara ose prapa.

Duke ndryshuar shpejtësinë dhe drejtimin e lëvizjes së motorëve, ne vendosim këndet e pjerrësisë që lejojnë copter-in të lëvizë në drejtime të tjera. Në fakt, për projektin aktual nuk është e nevojshme të studiohet aerodinamika, thjesht duhet të kuptohet parimi bazë.

Si funksionon Parrot ARDrone

Droni është një pikë akses Wi-Fi. Për të marrë dhe dërguar komandat në copter, është e nevojshme të lidhemi me këtë pikë. Ka shumë aplikacione të ndryshme që lejojnë menaxhimin e copterëve. Kjo duket kështu:

Programoni kontrollin me zë dronin duke përdorur Node.js dhe ARDrone

Pasi droni Ă«shtĂ« i lidhur, hapim terminalin dhe shkruajmĂ« telnet 192.168.1.1 — kjo Ă«shtĂ« adresa IP e copter-it. PĂ«r Linux mund tĂ« pĂ«rdorim Linux Busybox.

Arkitektura e aplikacionit

Kodi ynë do të ndahet në modula të mëposhtëm:

  • interfaci i pĂ«rdoruesit me API pĂ«r njohjen e zĂ«rit;
  • filtrimi i komandave dhe pĂ«rputhja me standardin;
  • dĂ«rgimi i komandave nĂ« dron;
  • transmetimi i drejtpĂ«rdrejtĂ« i videos.

API-eja funksionon në rast se ka një lidhje interneti. Për ta siguruar këtë, shtojmë një lidhje përmes Ethernet.

ËshtĂ« koha tĂ« krijojmĂ« aplikacionin!

Të programojmë

Së pari, krijojmë një dosje të re dhe kalojmë në të duke përdorur terminalin.

Pastaj krijojmë një projekt Node, duke përdorur komandat më poshtë.

Së pari, instalojmë varësitë e nevojshme.

npm install 

Do të mbështesim komandat e mëposhtme:

  • ngritje;
  • ulje;
  • lart — droni ngrihet njĂ« metĂ«r dhe qĂ«ndron nĂ« ajĂ«r;
  • poshtĂ« — zbret njĂ« metĂ«r dhe qĂ«ndron nĂ« ajĂ«r;
  • majtas majtas nĂ« gjysmĂ« metri;
  • majtas djathtas nĂ« gjysmĂ« metri;
  • kthesa — kthehet nĂ« drejtim tĂ« dikasterit pĂ«r 90 gradĂ«;
  • pĂ«rpara — mvaret pĂ«rpara nĂ« gjysmĂ« metri;
  • mbrapa — mvaret mbrapa nĂ« gjysmĂ« metri;
  • ndal.

Ja kodi që lejon pranimin e komandave, filtrimin e tyre dhe kontrollin e dronit.

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();
// anulo emergjencën
drone.disableEmergency();
// shprehja
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('komanda e pranuar ', req.body);
    console.log('komandat ekzistuese', commands);
    let command = req.body.command.replace(/ /g,'');
    if(commands.indexOf(command) !== -1) {
        switch(command.toUpperCase()) {
            case "TAKEOFF":
                console.log('duke u ngritur droni');
                drone.takeoff();
            break;
            case "LAND":
                console.log('duke ulur dronin');
                drone.land();
            break;
            case "UP":
                console.log('duke ngritur dronin gjysmë metri');
                drone.up(0.2);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "DOWN":
                console.log('duke zbritur dronin gjysmë metri');
                drone.down(0.2);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "GOLEFT":
                console.log('duke lëvizur dronin majtas 1 metër');
                drone.left(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },1000);
            break;
            case "GORIGHT":
                console.log('duke lëvizur dronin djathtas 1 metër');
                drone.right(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },1000);
            break;
            case "TURN":
                console.log('duke e kthyer dronin');
                drone.clockwise(0.4);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "GOFORWARD":
                console.log('duke lëvizur dronin përpara me 1 metër');
                drone.front(0.1);
                setTimeout(() => {
                    drone.stop();
                    clearTimeout();
                },2000);
            break;
            case "GOBACKWARD":
                console.log('duke lëvizur dronin prapa 1 metër');
                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);

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>Aplikacioni i Shënimeve me Kontroll të Zërit</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>Dron me kontroll të zërit</h1>
            <p class="page-description">Një aplikacion i vogël që ju lejon të kontrolloni dron AR duke përdorur zë</p>
 
            <h3 class="no-browser-support">Na vjen keq, shfletuesi juaj nuk mbështet Web Speech API. Provoni të hapni këtë demo në Google Chrome.</h3>
 
            <div class="app">
                <h3>Jepni urdhrin</h3>
                <div class="input-single">
                    <textarea id="note-textarea" placeholder="Krijoni një shënim të ri duke shkruar ose duke përdorur njohjen e zërit." rows="6"></textarea>
                </div>    
                <button id="start-record-btn" title="Filloni regjistrimin">Filloni njohjen</button>
                <button id="pause-record-btn" title="Pauzoni regjistrimin">Pauzoni njohjen</button>
                <p id="recording-instructions">Shtypni <strong>Filloni njohjen</strong> butonin dhe lejoni qasje.</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>

Po ashtu, ky është kodi JavaScript për të punuar me komandat me zë, 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();
 }
// kodi tjetër, ju lutemi referojuni burimit në GitHub
recognition.onresult = function(event) {
// ngjarja është një objekt SpeechRecognitionEvent.
// Ajo përmban të gjitha rreshtat që kemi kapur deri tani.
 // Ne na nevojitet vetëm aktuali.
 var current = event.resultIndex;
// Merrni një transkript të asaj që u tha.
var transcript = event.results[current][0].transcript;
// dërgojeni në backend
$.ajax({
 type: 'POST',
 url: '/command/',
 data: JSON.stringify({command: transcript}),
 success: function(data) { console.log(data) },
 contentType: "application/json",
 dataType: 'json'
 });
};

Fillojmë aplikacionin

Programin mund ta filloni në këtë mënyrë (është e rëndësishme të siguroni që droni të jetë i lidhur me Wi-Fi dhe kablli Ethernet të jetë i lidhur me kompjuterin).

Hapni localhost:3000 në shfletues dhe klikoni Start Recognition.

Programoni kontrollin me zë dronin duke përdorur Node.js dhe ARDrone

Provojmë të kontrollojmë dronin dhe gëzohemi.

Transmetimi i videos nga droni

Në projekt krijojmë një skedar të ri dhe kopjojmë 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);

Këtu është kodi HTML, vendoseni brenda dosjes public.

<!doctype html>
 <html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <title>Shkarko si modul</title>
 <script src="/dronestream/nodecopter-client.js" type="text/javascript" charset="utf-8"></script>
 </head>
 <body>
 <h1 id="heading">Përmbledhja e videos me drone</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>

Filloni dhe lidhuni me localhost:8080 për të parë videon nga kamera frontale.

Programoni kontrollin me zë dronin duke përdorur Node.js dhe ARDrone

Këshilla të dobishme

  • Kontrolloni dronin nĂ« ambiente tĂ« brendshme.
  • GjithmonĂ« vendosni kapakun mbrojtĂ«s mbi dron para se tĂ« fluturoni.
  • Kontrolloni nĂ«se bateria Ă«shtĂ« e ngarkuar.
  • NĂ«se droni sillet çuditshĂ«m, mbani poshtĂ« dhe pĂ«rmbyseni. Kjo dotĂ« e çojĂ« dronin nĂ« mĂ«nyrĂ«n emergjente dhe rotorĂ«t do tĂ« ndalojnĂ« menjĂ«herĂ«.

Kodi i gatshëm dhe demonstrimi

LIVE DEMO

SHKARKO

Kemi arritur!

Shkrimi i kodit dhe pastaj të shohësh si makina fillon të përgjigjet do t'ju sjellë kënaqësi! Tani kemi mësuar si të mësojmë dronin të dëgjojë urdhra me zë. Në të vërtetë, mundësitë janë shumë më të shumta: njohja e fytyrës së përdoruesit, fluturimet autonome, njohja e gjesteve dhe shumë më tepër.

ÇfarĂ« mund tĂ« ofroni pĂ«r pĂ«rmirĂ«simin e programit?

Skillbox rekomandon:

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster