
Dans ce didacticiel, nous allons voir comment créer un programme de drone à commande vocale sur Node.js et l'API Web Speech. Copter - Parrot ARDrone 2.0.
Nous vous rappelons: pour tous les lecteurs de «Habr» - une remise de 10 000 roubles lors de l'inscription à un cours Skillbox en utilisant le code promo «Habr».
Skillbox recommande: Cours pratique "Mobile Developer PRO" .
Présentation
Les drones sont incroyables. J'aime vraiment jouer avec mon copter, enregistrer des photos et des vidéos, ou tout simplement m'amuser. Mais les véhicules aériens sans pilote (UAV) ne sont pas utilisés uniquement pour le divertissement. Ils travaillent au cinéma, étudient les glaciers, sont utilisés par les militaires et les représentants du secteur agricole.
Dans ce tutoriel, nous allons voir comment créer un programme qui vous permet de contrôler un drone. en utilisant des commandes vocales. Oui, l'hélicoptère fera ce que vous lui direz. À la fin de l'article - le programme fini et le drone de contrôle vidéo.
Le fer
Nous avons besoin des éléments suivants:
- Parrot ARDrone 2.0;
- Câble Ethernet
- bon micro.
Le développement et la gestion seront effectués sur des postes de travail avec Windows / Mac / Ubuntu. Personnellement, j'ai travaillé avec Mac et Ubuntu 18.04.
Logiciels
Téléchargez la dernière version de Node.js sur le
site officiel .
Besoin également de la
dernière version de Google Chrome .
Nous traitons avec l'hélicoptère
Essayons de comprendre comment fonctionne Parrot ARDrone. Cet hélicoptère a quatre moteurs.

Les moteurs opposés fonctionnent dans une seule direction. Une paire tourne dans le sens horaire, l'autre dans le sens antihoraire. Le drone se déplace en raison d'un changement de l'angle d'inclinaison par rapport à la surface de la terre, d'un changement de la vitesse de rotation des moteurs et de quelques mouvements de manœuvre supplémentaires.

Comme nous le voyons dans le diagramme ci-dessus, la modification de divers paramètres entraîne un changement dans le sens de déplacement de l'hélicoptère. Par exemple, une diminution ou une augmentation de la vitesse de rotation des rotors gauche et droit crée un roulement. Cela permet au drone de voler vers l'avant ou vers l'arrière.
En changeant la vitesse et la direction de mouvement des moteurs, nous réglons l'angle d'inclinaison, permettant à l'hélicoptère de se déplacer dans d'autres directions. En fait, il n’est pas nécessaire d’étudier l’aérodynamique pour le projet en cours, cela vaut simplement la peine de comprendre les principes de base.
Comment fonctionne Parrot ARDrone
Le drone est un point d'accès Wi-Fi. Pour recevoir et envoyer des commandes à l'hélicoptère, vous devez vous connecter à ce point. Il existe de nombreuses applications diverses qui vous permettent de contrôler les hélicoptères. Tout ressemble à ceci:

Une fois le drone connecté, ouvrez le terminal et telnet 192.168.1.1 est l'IP de l'hélicoptère. Pour Linux, vous pouvez utiliser
Linux Busybox .
Architecture d'application
Notre code sera divisé en modules suivants:
- interface utilisateur avec API vocale pour la détection vocale;
- filtrage des commandes et comparaison avec la norme;
- envoyer des commandes au drone;
- diffusion vidéo en direct.
L'API fonctionne sous réserve d'une connexion Internet. Pour le fournir, nous ajoutons une connexion Ethernet.
Il est temps de créer une application!
Kodim
Tout d'abord, créez un nouveau dossier et basculez vers celui-ci à l'aide du terminal.
Créez ensuite un projet Node à l'aide des commandes ci-dessous.
Pour commencer, définissez les dépendances requises.
installation de npmNous soutiendrons les équipes suivantes:
- décoller;
- atterrissage;
- en haut - le drone monte d'un demi-mètre et gèle;
- vers le bas - tombe d'un demi-mètre et gèle;
- à gauche - va à gauche d'un demi-mètre;
- à droite - va à droite d'un demi-mètre;
- rotation - tourne de 90 degrés dans le sens des aiguilles d'une montre;
- en avant - avance d'un demi-mètre;
- retour - remonte d'un demi-mètre;
- arrêter
Voici le code qui vous permet de recevoir des commandes, de les filtrer et de contrôler le 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();
Et voici le code HTML et JavaScript qui écoute l'utilisateur et envoie la commande au serveur 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>
Et plus de code JavaScript pour travailler avec les commandes vocales en les envoyant au serveur Node.
try { var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; var recognition = new SpeechRecognition(); } catch(e) { console.error(e); $('.no-browser-support').show(); $('.app').hide(); }
Lancez l'application
Le programme peut être lancé comme suit (il est important de s'assurer que l'hélicoptère est connecté au Wi-Fi et que le câble Ethernet est connecté à l'ordinateur).
Ouvrez localhost: 3000 dans le navigateur et cliquez sur Démarrer la reconnaissance.

Nous essayons de contrôler le drone et nous réjouissons.
Diffuser une vidéo depuis le drone
Dans le projet, créez un nouveau fichier et copiez-y ce code:
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 voici le code HTML, on le place dans le dossier public.
<!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>
Nous commençons et nous nous connectons à localhost: 8080 pour regarder la vidéo de la caméra frontale.

Conseils utiles
- Contrôlez ce drone à l'intérieur.
- Mettez toujours le capuchon de protection sur le drone avant le décollage.
- Vérifiez si la batterie est chargée.
- Si le drone se comporte étrangement, maintenez-le enfoncé et retournez-le. Cette action mettra l'hélicoptère en mode d'urgence et les rotors s'arrêteront immédiatement.
Code prêt et démonstration
Démo en directTELECHARGER
Ça s'est avéré!
Écrivez un code, puis regardez comment la voiture commence à obéir, vous apprécierez! Maintenant, nous avons compris comment apprendre au drone à écouter les commandes vocales. En fait, il y a beaucoup plus de possibilités: reconnaissance faciale de l'utilisateur, vols autonomes, reconnaissance gestuelle et bien plus encore.
Que pouvez-vous offrir pour améliorer le programme?
Skillbox recommande: