Isu tinoronga kutonga kwezwi kwecopter tichishandisa Node.js uye ARDrone

Isu tinoronga kutonga kwezwi kwecopter tichishandisa Node.js uye ARDrone

Muchidzidzo ichi tichatarisa kugadzira chirongwa che drone ine izwi rekutonga uchishandisa Node.js uye Webhu kutaura API. Copter - Parrot ARDrone 2.0.

Tinoyeuchidza: kune vese vaverengi veHabr - a 10 ruble mutengo paunenge uchinyoresa mune chero Skillbox kosi uchishandisa iyo Habr promo kodhi.

Skillbox inokurudzira: Nzira inoshanda "Mobile Developer PRO".

Nhanganyaya

Drones zvinoshamisa. Ndinofarira kutamba nequad yangu, kutora mafoto nemavhidhiyo, kana kungonakidzwa. Asi motokari dzemuchadenga dzisina kurongwa (UAVs) dzinoshandiswa kune zvinopfuura kungovaraidza. Ivo vanoshanda mumabhaisikopo, kudzidza glaciers, uye vanoshandiswa nemauto nevamiriri vechikamu chekurima.

Muchidzidzo ichi tichatarisa kugadzira chirongwa chinozobvumidza iwe kudzora drone. uchishandisa mirairo yezwi. Hongu, copter ichaita zvaunoiudza kuti iite. Pakupera kwechinyorwa pane yakagadzirira-yakagadzirwa chirongwa uye vhidhiyo yeUAV control.

Iron

Tinoda zvinotevera:

  • Parrot ARDrone 2.0;
  • Ethernet tambo;
  • maikorofoni yakanaka.

Kubudirira uye manejimendi zvichaitwa pamabasa ekushanda neWindows/Mac/Ubuntu. Ini pachangu, ndakashanda neMac uye Ubuntu 18.04.

Software

Dhawunirodha yazvino vhezheni yeNode.js kubva pamutemo nzvimbo.

Zvakare zvinodiwa yazvino vhezheni yeGoogle Chrome.

Kunzwisisa copter

Ngatiedzei kunzwisisa kuti Parrot ARDrone inoshanda sei. Copter iyi ine mota ina.

Isu tinoronga kutonga kwezwi kwecopter tichishandisa Node.js uye ARDrone

Anopikisa mota anoshanda munzira imwechete. Peya imwe inotenderera newachi, imwe ichitenderedza wachi. Iyo drone inofamba nekushandura kona yekurerekera kune pamusoro penyika, ichichinja kumhanya kwekutenderera kwemamotor uye mamwe akati wandei anofambiswa mafambiro.

Isu tinoronga kutonga kwezwi kwecopter tichishandisa Node.js uye ARDrone

Sezvatinoona mudhayagiramu iri pamusoro, kushandura maparamendi akasiyana-siyana kunotungamira kune shanduko munzira yekufamba kwecopter. Semuenzaniso, kuderedza kana kuwedzera kutenderera kwekutenderera kwekuruboshwe uye kurudyi rotors kunogadzira roll. Izvi zvinobvumira drone kubhururuka mberi kana kumashure.

Nekuchinja kumhanya uye kutungamira kwemamotor, tinoisa makona anotenderedza anobvumira copter kufamba kune mamwe mativi. Chaizvoizvo, kune purojekiti yazvino hapana chikonzero chekudzidza aerodynamics, iwe unongoda kunzwisisa izvo zvakakosha misimboti.

Iyo Parrot ARDrone inoshanda sei

Iyo drone ndeye Wi-Fi hotspot. Kuti ugamuchire uye utumire mirairo kune copter, unofanirwa kubatanidza kune ino. Kune akawanda akasiyana maapplication anotendera iwe kudzora maquadcopter. Zvose zvinotaridzika seizvi:

Isu tinoronga kutonga kwezwi kwecopter tichishandisa Node.js uye ARDrone

Kana drone yangobatanidzwa, vhura iyo terminal uye telnet 192.168.1.1 - iyi ndiyo IP yecopter. Kune Linux iwe unogona kushandisa Linux Busybox.

Application architecture

Kodhi yedu ichakamurwa kuita mamodule anotevera:

  • mushandisi interface nekutaura API yekuona inzwi;
  • kusefa mirairo uye kuenzanisa nechiyero;
  • kutumira mirairo kune drone;
  • live vhidhiyo kutepfenyura.

Iyo API inoshanda chero paine Internet yekubatanidza. Kuti tive nechokwadi cheizvi, tinowedzera kubatana kweEthernet.

Yasvika nguva yekugadzira application!

Code

Kutanga, ngatigadzire dhairekitori idzva tochinjira kwariri tichishandisa terminal.

Zvadaro tinogadzira chirongwa cheNode tichishandisa mirairo iri pasi apa.

Kutanga, isu tinoisa zvinodiwa zvinoenderana.

npm installβ€Š

Tichatsigira mirairo inotevera:

  • bvisa;
  • kumhara;
  • kumusoro - iyo drone inokwira hafu yemamita uye hovers;
  • pasi - inowira hafu yemamita uye inotonhora;
  • kuruboshwe - inoenda hafu yemamita kuruboshwe;
  • kurudyi - inoenda hafu yemamita kurudyi;
  • kutenderera - kutenderera wachi 90 madhigirii;
  • mberi - inoenda mberi hafu yemamita;
  • kumashure - inodzokera shure hafu yemamita;
  • stop.

Heino kodhi iyo inokutendera iwe kugamuchira mirairo, kusefa uye kutonga iyo 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);

Uye heino HTML neJavaScript kodhi inoteerera mushandisi uye inotumira murairo kuNode server.

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

Uye zvakare JavaScript kodhi yekushanda nemirairo yezwi, uchivatumira kuNode server.

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

Kutangisa application

Iyo purogiramu inogona kutangwa sezvinotevera (zvakakosha kuve nechokwadi chekuti copter yakabatana neWi-Fi uye tambo yeEthernet yakabatana pakombuta).

Vhura localhost:3000 mubrowser uye tinya Start Recognition.

Isu tinoronga kutonga kwezwi kwecopter tichishandisa Node.js uye ARDrone

Isu tinoedza kudzora drone uye tinofara.

Kutepfenyura vhidhiyo kubva kune drone

Muchirongwa, gadzira faira idzva uye kopi iyi kodhi ipapo:

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

Uye heino HTML kodhi, tinoiisa mukati meruzhinji folda.

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

Tanga uye ubatanidze kune localhost:8080 kuona vhidhiyo kubva kumberi kamera.

Isu tinoronga kutonga kwezwi kwecopter tichishandisa Node.js uye ARDrone

Mazano anobatsira

  • Bvuura drone iyi mumba.
  • Gara uchiisa chivharo chekudzivirira pane drone yako usati wasimuka.
  • Tarisa kana bhatiri rakachajwa.
  • Kana iyo drone ichiita zvisinganzwisisike, ibate pasi uye ipindure pamusoro. Ichi chiito chichaisa copter mune emergency mode uye ma rotors anomira nekukasira.

Yakagadzirira kodhi uye demo

LIVE DEMO

DOWNLOAD

Zvakaitika!

Kunyora kodhi uye wozoona muchina uchitanga kuteerera zvinokupa iwe mufaro! Iye zvino tafunga nzira yekudzidzisa drone kuteerera mirairo yezwi. Muchokwadi, pane zvakawanda zvinogoneka: kuzivikanwa kwechiso kwemushandisi, ndege dzinozvimiririra, kuzivikanwa kwemaoko uye zvimwe zvakawanda.

Chii chaungakurudzira kuvandudza chirongwa?

Skillbox inokurudzira:

Source: www.habr.com

Voeg