Nos programmata vocis imperium coptri utentes Node.js et ARDrone

Nos programmata vocis imperium coptri utentes Node.js et ARDrone

In hoc doceo videbimus programmata fuci creando cum vocis potestate utentes Node.js et sermonis API interreti. Copter - Parrot ARDrone 2.0.

admonemus; omnibus legentibus "Habr" - discount 10 rublorum cum scribendo in quavis Skillbox utens "Habr" codice promotivo.

Skillbox commendat: Cursus practicus "Mobile Developer PRO".

introduction

Fuci mirabiles. Vere fruor ludere cum quad mea, imagines et videos accipiens, vel tantum ludis. Sed vehicula aerea inanibus (UAVs) pluribus quam iustis oblectamentis adhibentur. In cinematographico, studio molibus laborant, et a militaribus et repraesentativis regiones agriculturae utuntur.

In hoc doceo videbimus rationem creandi quae te fucum regere sinet. voce utens imperat. Imo faciet copter quod tu narras. In fine articuli programmata prompta facta est et video imperii UAV.

ferrum

Sequenti opus est:

  • Psittacus ARDrone 2.0;
  • Aer cable;
  • bonum tortor ligula.

Progressio et procuratio in operibus Windows/Mac/Ubuntu exercebuntur. Personaliter cum Mac et Ubuntu 18.04 laboravi.

software

Download novissimam versionem Node.js from situs officialis.

Etiam opus novissima versio Google Chrome.

Intellectus copter

Conemur intelligere quomodo opera Parrot ARDrone. Hic coptra quattuor motores habet.

Nos programmata vocis imperium coptri utentes Node.js et ARDrone

Eadem directione operantur contraria motorum. Unum par horologico, alterum counterclockwise gyrat. Fucus movetur mutando angulum inclinationis respectu superficiei terrae, mutando celeritatem rotationis motorum et plurium aliorum motuum discurrendorum.

Nos programmata vocis imperium coptri utentes Node.js et ARDrone

Ut videre est in schemate supra, varias varias parametros mutando ducit ad directionem motus aeris. Exempli gratia rotationis sinistrae et dextrae velocitatem decrescentes vel augentes rotors volumen creat. Hoc fucum vel retro vel retro avolare permittit.

Mutando velocitatem et directionem motorum constituimus angulos beniculos, qui coptra in alias partes movere permittunt. Profecto in praesenti incepto opus non est studere aerodynamica, vos iustus postulo ut elementa elementa intellegamus.

Ut Parrot ARDrone operatur

Fucus Wi-FI hotspot est. Ad mandatum coptri accipiendum et mittendum, hoc loco coniungere debes. Multae variae applicationes sunt quae te quadcopters regere permittunt. Res omnes sic spectat:

Nos programmata vocis imperium coptri utentes Node.js et ARDrone

Cum fucus coniungitur, terminalem et telnet aperi 192.168.1.1 - hoc IP coptri est. Pro Linux uti potes Linux Busybox.

Applicationem architectura

Codex noster in modulos sequentes dividetur:

  • usor interface cum loquela API pro voce detectio;
  • eliquare imperia et cum vexillo comparare;
  • mandata ad fucum mittens;
  • Vivamus eget molestie lacus.

API laborat modo dum nexus interreti est. Hoc ut fiat, nexum Aer addimus.

Tempus est applicationem creare!

Code

Primum, novam folder faciamus et ad eam terminatio utens commutandum.

Tunc Node inceptis mandatis infra utentes creamus.

Primum, debitas clientelas instituimus.

install npm 

Mandata sequentia adiuvabimus;

  • takeoff;
  • appulsum;
  • fucus surgit dimidii metri et uncis;
  • deorsum — dimidius metri cadit et coit;
  • ad lævam - vadit dimidium metri ad sinistram;
  • ad dextram - vadit dimidium metri ad dextram;
  • gyratio - in horologio horologico 90 gradus;
  • procedat - goes forward dimidium metri;
  • retro - redit dimidium metri;
  • prohibere.

Hic est signum quod tibi permittit ut mandata accipias, ea colas et fucum domas.

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

Et hic est codice HTML et JavaScript qui auscultat utentem et mandatum servo Nodi mittit.

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

Atque etiam in codice JavaScript ad operandum voce praecipit, eos ad Nodum servo mittit.

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

Deductis ad applicationem

Progressio sic deduci potest (id est magni momenti efficere ut coptra cum Wi-Fi et funis Ethernet cum computatorio iunctus sit).

Aperi localhost: 3000 in navigatro et deprime Recognitio Committitur.

Nos programmata vocis imperium coptri utentes Node.js et ARDrone

Conamur fucum regere et laeti sumus.

Lorem video a fucus

In documento, fasciculum novum crea et hunc codicem ibi imita:

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

Et hic est HTML codicem, eum intra folder publici ponimus.

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

Launch et connect ad localhost: 8080 ad videndum videndum e camera anteriore.

Nos programmata vocis imperium coptri utentes Node.js et ARDrone

benevolens innuit

  • Fuge hac fucum intus.
  • Semper operculum tutelae in fuco tuo pone priusquam auferas.
  • Reprehendo si altilium oneratur.
  • Si fucus mirum in modum se gerit, eam deprimit et superinducite. Haec actio coptram in modum subitis ponet et rotors statim cessabunt.

Promptus codice ac demo

VIVERE DEMO

Download

Accidit!

Codicis scripturae ac deinde machinae vigilantes incipiunt: parere tibi placuere dabo! Nunc figuratum est quomodo docere fucum audire iubeat. Re vera, sunt multo plura possibilitates: usus vultus agnitio, volatus sui iuris, gestus cognitio et multo magis.

Quid suadeas ut propositum emendes?

Skillbox commendat:

Source: www.habr.com

Add a comment