Mampiasa ny Node.js sy ARDrone izahay amin'ny fanaraha-maso ny feo amin'ny copter

Mampiasa ny Node.js sy ARDrone izahay amin'ny fanaraha-maso ny feo amin'ny copter

Amin'ity lesona ity dia hijery ny famoronana programa ho an'ny drone miaraka amin'ny fifehezana feo amin'ny fampiasana Node.js sy Web speech API. Copter - Parrot ARDrone 2.0.

Mampahatsiahy izahay: ho an'ny mpamaky rehetra ny "Habr" - fihenam-bidy 10 roubles rehefa misoratra anarana amin'ny taranja Skillbox rehetra mampiasa ny code promotional "Habr".

Skillbox dia manoro hevitra: Mazava ho azy "Mobile Developer PRO".

fampidirana

Mahagaga ny drones. Tena tiako ny milalao miaraka amin'ny quad-ko, maka sary sy horonan-tsary, na miala voly fotsiny. Fa ny fiara tsy mataho-dalana (UAV) dia ampiasaina mihoatra noho ny fialamboly. Miasa amin'ny sinema izy ireo, mianatra glacier, ary ampiasain'ny miaramila sy ny solontenan'ny sehatry ny fambolena.

Amin'ity lesona ity dia hijery ny famoronana programa ahafahanao mifehy drone isika. mampiasa baiko feo. Eny, ny copter dia hanao izay lazainao azy. Any amin'ny faran'ny lahatsoratra dia misy fandaharana efa vita sy horonan-tsary momba ny fanaraha-maso UAV.

vy

Mila ireto manaraka ireto isika:

  • Parrot ARDrone 2.0;
  • tariby Ethernet;
  • microphone tsara.

Ny fampandrosoana sy ny fitantanana dia hatao amin'ny toeram-piasana miaraka amin'ny Windows/Mac/Ubuntu. Izaho manokana dia niasa tamin'ny Mac sy Ubuntu 18.04.

rindrambaiko

Ampidino ny kinova farany an'ny Node.js avy amin'ny vohikala ofisialy.

Ilaina koa kinova farany an'ny Google Chrome.

Fahatakarana ny copter

Andeha hojerentsika ny fomba fiasan'ny Parrot ARDrone. Manana motera efatra ity copter ity.

Mampiasa ny Node.js sy ARDrone izahay amin'ny fanaraha-maso ny feo amin'ny copter

MΓ΄tΓ΄ mifanohitra miasa amin'ny lalana mitovy. Ny mpivady iray dia mihodina manaraka ny fihodin'ny famantaranandro, ny iray mifanohitra amin'ny famantaranandro. Ny drone dia mihetsika amin'ny alΓ lan'ny fanovana ny zoron'ny fironany amin'ny tany, ny fanovana ny hafainganan'ny fihodinan'ny motera sy ny hetsika maro hafa azo atao.

Mampiasa ny Node.js sy ARDrone izahay amin'ny fanaraha-maso ny feo amin'ny copter

Araka ny hitantsika eo amin'ny kisary etsy ambony, ny fanovana ny masontsivana isan-karazany dia mitarika ho amin'ny fiovan'ny lalan'ny fihetsiky ny copter. Ohatra, ny fampihenana na fampitomboana ny hafainganam-pandehan'ny fihodinan'ny rotors havia sy havanana dia mamorona horonana. Izany dia ahafahan'ny drone manidina mandroso na mihemotra.

Amin'ny alΓ lan'ny fanovana ny hafainganam-pandeha sy ny lΓ lan'ny motera, dia mametraka zoro mitongilana izay ahafahan'ny copter mivezivezy amin'ny lalana hafa. Raha ny marina, ho an'ny tetikasa amin'izao fotoana izao dia tsy ilaina ny mianatra aerodynamics, mila mahatakatra ny fitsipika fototra fotsiny ianao.

Ahoana ny fiasan'ny Parrot ARDrone

Ny drone dia hotspot Wi-Fi. Mba handraisana sy handefasana baiko amin'ny copter dia mila mifandray amin'io teboka io ianao. Misy fampiharana maro samihafa ahafahanao mifehy ny quadcopters. Toa toy izao izany rehetra izany:

Mampiasa ny Node.js sy ARDrone izahay amin'ny fanaraha-maso ny feo amin'ny copter

Raha vantany vao mifandray ny drone dia sokafy ny terminal ary ny telnet 192.168.1.1 - ity no IP an'ny copter. Ho an'ny Linux dia azonao ampiasaina Linux Busybox.

Architecture fampiharana

Ny kaodinay dia hozaraina amin'ireto modules manaraka ireto:

  • mpampiasa interface tsara miaraka amin'ny lahateny API mba hamantarana ny feo;
  • baiko sivana ary mampitaha amin'ny fenitra iray;
  • mandefa baiko amin'ny drone;
  • fandefasana video mivantana.

Ny API dia miasa raha mbola misy fifandraisana Internet. Mba hahazoana antoka izany dia manampy fifandraisana Ethernet izahay.

Fotoana hamoronana fampiharana izao!

fehezan-dalΓ na

Voalohany, andao hamorona lahatahiry vaovao ary mifindra amin'ny fampiasana ny terminal.

Avy eo dia mamorona tetikasa Node izahay amin'ny fampiasana ny baiko etsy ambany.

Voalohany, mametraka ny fiankinan-doha ilaina isika.

npm installβ€Š

Hanohana ireto baiko manaraka ireto izahay:

  • Esory;
  • fipetrahana;
  • miakatra - miakatra antsasaka metatra ny drΓ΄na ary mitsambikina;
  • midina - milatsaka antsasaky ny metatra ary mivaingana;
  • miankavia - mandeha antsasaka metatra miankavia;
  • miankavanana - mandeha antsasaka metatra miankavanana;
  • fihodinana - mihodina 90 degre manaraka ny fihodin'ny famantaranandro;
  • mandroso - mandroso antsasa-metatra;
  • miverina - miverina amin'ny antsasaky ny metatra;
  • MijanΓ²na.

Ity ny kaody ahafahanao manaiky baiko, manivana azy ireo ary mifehy ny 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);

Ary ity ny code HTML sy JavaScript izay mihaino ny mpampiasa ary mandefa baiko amin'ny 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>

Ary koa kaody JavaScript hiasa amin'ny baiko feo, mandefa azy ireo any amin'ny mpizara 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'
 });
};

Famoahana ny fampiharana

Ny programa dia azo atomboka toy izao manaraka izao (zava-dehibe ny hahazoana antoka fa mifandray amin'ny Wi-Fi ny copter ary mifandray amin'ny ordinatera ny tariby Ethernet).

Sokafy ny localhost:3000 ao amin'ny navigateur ary tsindrio ny Start Recognition.

Mampiasa ny Node.js sy ARDrone izahay amin'ny fanaraha-maso ny feo amin'ny copter

Miezaka mifehy ny drone izahay ary faly.

Mandefa lahatsary avy amin'ny drone

Ao amin'ny tetikasa, mamorona rakitra vaovao ary kopia ity code ity:

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

Ary ity ny code HTML, apetrakay ao anaty lahatahiry ho an'ny daholobe.

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

Alefaso ary mifandray amin'ny localhost: 8080 raha hijery horonan-tsary avy amin'ny fakantsary eo aloha.

Mampiasa ny Node.js sy ARDrone izahay amin'ny fanaraha-maso ny feo amin'ny copter

Torohevitra mahasoa

  • Alefaso an-trano ity drone ity.
  • Apetraho eo amin'ny dronenao foana ny sarony alohan'ny hiaingana.
  • Jereo raha voaloa ny bateria.
  • Raha toa ka hafahafa ny fihetsiky ny drone dia tazony ary atsipazo. Ity hetsika ity dia hametraka ny copter amin'ny fomba maika ary hijanona avy hatrany ny rotors.

Kaody vonona sy demo

LIVE DEMO

DOWNLOAD

Nitranga!

Ny fanoratana kaody ary avy eo mijery ilay milina manomboka mankatΓ² dia hanome anao fahafinaretana! Ankehitriny dia fantatsika ny fomba hampianarana drone hihaino baiko feo. Raha ny marina, betsaka kokoa ny zavatra azo atao: ny fahafantarana ny tavan'ny mpampiasa, ny sidina tsy miankina, ny fanekena ny fihetsika ary ny maro hafa.

Inona no azonao atolotra hanatsarana ny programa?

Skillbox dia manoro hevitra:

Source: www.habr.com

Add a comment