Urang program kontrol sora tina copter ngagunakeun Node.js na ARDrone

Urang program kontrol sora tina copter ngagunakeun Node.js na ARDrone

Dina tutorial ieu urang bakal nempo nyieun program pikeun drone jeung kontrol sora maké Node.js jeung Web ucapan API. Copter - Parrot ARDrone 2.0.

Kami ngingetan: pikeun sakabéh pamiarsa "Habr" - diskon 10 rubles nalika enrolling dina sagala Tangtu Skillbox ngagunakeun "Habr" kode promosi.

Skillbox nyarankeun: Kursus praktis "Pamekar Mobile PRO".

perkenalan

Drones endah pisan. Abdi resep pisan maén sareng quad kuring, nyandak poto sareng pidéo, atanapi ngan ukur senang-senang. Tapi kandaraan hawa unmanned (UAVs) dipaké pikeun leuwih ti ngan hiburan. Aranjeunna damel di bioskop, diajar glaciers, sareng dianggo ku militér sareng wawakil sektor pertanian.

Dina tutorial ieu kami bakal ningali nyiptakeun program anu ngamungkinkeun anjeun ngadalikeun drone. ngagunakeun paréntah sora. Leres, copter bakal ngalakukeun naon anu anjeun nyarioskeun. Dina ahir artikel aya program siap-dijieun jeung video kontrol UAV.

beusi

Urang peryogi di handap ieu:

  • Parrot ARDrone 2.0;
  • kabel Ethernet;
  • mikropon alus.

Pangwangunan sareng manajemén bakal dilaksanakeun dina workstation sareng Windows/Mac/Ubuntu. Pribadi, kuring damel sareng Mac sareng Ubuntu 18.04.

software

Unduh versi panganyarna tina Node.js tina situs resmi.

Ogé diperlukeun versi panganyarna tina Google Chrome.

Ngartos copter

Hayu urang coba ngartos kumaha Parrot ARDrone jalan. Ieu copter boga opat motor.

Urang program kontrol sora tina copter ngagunakeun Node.js na ARDrone

Motor lawan jalan dina arah anu sarua. Hiji pasangan muterkeun saarah jarum jam, hiji deui sabalikna jarum jam. Drone gerak ku cara ngarobah sudut inclination relatif ka beungeut bumi, ngarobah laju rotasi motor jeung sababaraha gerakan maneuverable lianna.

Urang program kontrol sora tina copter ngagunakeun Node.js na ARDrone

Sakumaha urang tiasa tingali dina diagram di luhur, ngarobah rupa parameter ngabalukarkeun parobahan arah gerak copter nu. Contona, ngurangan atawa ngaronjatkeun kagancangan rotasi tina rotors kénca jeung katuhu nyiptakeun roll a. Hal ieu ngamungkinkeun drone ngapung maju atanapi mundur.

Ku cara ngarobah laju jeung arah motor, urang nyetel sudut Dengdekkeun nu ngidinan copter pikeun pindah ka arah séjén. Sabenerna, pikeun proyék ayeuna henteu kedah diajar aerodinamika, anjeun ngan ukur kedah ngartos prinsip dasar.

Kumaha Parrot ARDrone jalan

Drone mangrupikeun hotspot Wi-Fi. Dina raraga pikeun nampa sarta ngirim Paréntah ka copter nu, anjeun kudu nyambung ka titik ieu. Aya loba aplikasi béda nu ngidinan Anjeun pikeun ngadalikeun quadcopters. Éta sadayana katingali sapertos kieu:

Urang program kontrol sora tina copter ngagunakeun Node.js na ARDrone

Pas drone disambungkeun, buka terminal jeung telnet 192.168.1.1 - ieu téh IP copter urang. Pikeun Linux anjeun tiasa nganggo Linux Busybox.

Arsitéktur aplikasi

Kode urang bakal dibagi kana modul handap:

  • panganteur pamaké kalawan API ucapan pikeun deteksi sora;
  • nyaring paréntah sareng ngabandingkeun sareng standar;
  • ngirim paréntah ka drone;
  • siaran video hirup.

API tiasa dianggo salami aya sambungan Internét. Pikeun mastikeun ieu, urang tambahkeun sambungan Ethernet.

Waktosna pikeun nyiptakeun aplikasi!

Kodeu

Kahiji, hayu urang nyieun hiji folder anyar jeung pindah ka dinya ngagunakeun terminal.

Teras urang ngadamel proyék Node nganggo paréntah di handap ieu.

Kahiji, urang install gumantungna diperlukeun.

npm install 

Kami bakal ngadukung paréntah di handap ieu:

  • berangkat;
  • badarat;
  • ka luhur - drone naék satengah méter sareng ngalayang;
  • handap - ragrag satengah méter sarta freezes;
  • ka kénca - mana satengah méter ka kénca;
  • ka katuhu - mana satengah méter ka katuhu;
  • rotasi - rotates jarum jam 90 derajat;
  • maju - maju satengah méter;
  • balik - balik deui satengah méter;
  • Eureun.

Ieu kodeu anu ngamungkinkeun anjeun nampi paréntah, nyaring sareng ngontrol drone.

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

Sareng ieu mangrupikeun kode HTML sareng JavaScript anu ngadangukeun pangguna sareng ngirim paréntah ka server 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>

Sareng ogé kode JavaScript pikeun damel sareng paréntah sora, ngirimkeunana ka server 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'
 });
};

Ngajalankeun aplikasi

program nu bisa dijalankeun saperti kieu (hal anu penting pikeun mastikeun yén copter disambungkeun ka Wi-Fi jeung kabel Ethernet disambungkeun ka komputer).

Buka localhost:3000 dina browser teras klik Mimitian Pangenal.

Urang program kontrol sora tina copter ngagunakeun Node.js na ARDrone

Urang nyoba ngadalikeun drone jeung senang.

Nyiarkeun pidéo tina drone

Dina proyék éta, jieun file énggal sareng salin kode ieu di dinya:

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

Sareng ieu mangrupikeun kode HTML, kami nempatkeun éta di jero folder umum.

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

Jalankeun sareng sambungkeun ka localhost:8080 pikeun ningali pidéo tina kaméra hareup.

Urang program kontrol sora tina copter ngagunakeun Node.js na ARDrone

petunjuk mantuan

  • Ngapung drone ieu jero rohangan.
  • Salawasna pasang panutup pelindung dina drone anjeun sateuacan angkat.
  • Pariksa lamun batréna geus dieusian.
  • Lamun drone behaves aneh, tahan eta jeung flip eta leuwih. Peta ieu bakal nempatkeun copter kana modeu darurat sarta rotors bakal eureun langsung.

Kode siap jeung demo

DEMO hirup

ngundeur

Kajadian!

Nulis kode lajeng ningali mesin ngawitan taat bakal masihan anjeun pelesir! Ayeuna kami parantos terang kumaha carana ngajarkeun drone pikeun ngadangukeun paréntah sora. Nyatana, langkung seueur kamungkinan: pangenal raray pangguna, penerbangan otonom, pangenal sikep sareng seueur deui.

Naon anu anjeun tiasa nyarankeun pikeun ningkatkeun program?

Skillbox nyarankeun:

sumber: www.habr.com

Tambahkeun komentar