Bidh sinn a’ prògramadh smachd guth air a’ chopair a’ cleachdadh Node.js agus ARDrone

Bidh sinn a’ prògramadh smachd guth air a’ chopair a’ cleachdadh Node.js agus ARDrone

San oideachadh seo seallaidh sinn ri bhith a’ cruthachadh prògram airson drone le smachd guth a’ cleachdadh Node.js agus Web speech API. Copter - Parrot ARDrone 2.0.

Tha sinn a ’cur nar cuimhne: airson a h-uile leughadair de "Habr" - lasachadh de 10 rubles nuair a chlàraicheas tu ann an cùrsa sam bith Skillbox a 'cleachdadh a' chòd adhartachaidh "Habr".

Tha Skillbox a’ moladh: Cùrsa practaigeach "Mobile Developer PRO".

Ro-ràdh

Tha drones iongantach. Tha e a’ còrdadh rium gu mòr a bhith a’ cluich leis a’ quad agam, a’ togail dhealbhan agus bhideothan, no dìreach a’ faighinn spòrs. Ach bithear a’ cleachdadh carbadan-adhair gun luchd-obrach (UAVan) airson barrachd air dìreach dibhearsain. Bidh iad ag obair ann an taigh-dhealbh, a’ sgrùdadh eigh-shruthan, agus bidh iad gan cleachdadh leis an arm agus riochdairean bhon roinn àiteachais.

San oideachadh seo seallaidh sinn ri bhith cruthachadh prògram a leigeas leat smachd a chumail air drone. cleachdadh òrdughan gutha. Seadh, nì an coptair na dh’iarras tu air a dhèanamh. Aig deireadh an artaigil tha prògram deiseil agus bhidio de smachd UAV.

Iarann

Feumaidh sinn na leanas:

  • Parrot ARDrone 2.0;
  • Ethernet càball;
  • microfòn math.

Thèid leasachadh agus riaghladh a dhèanamh air ionadan-obrach le Windows/Mac/Ubuntu. Gu pearsanta, bha mi ag obair le Mac agus Ubuntu 18.04.

Bathar-bog

Luchdaich a-nuas an tionndadh as ùire de nod. Ceanglaichean làraich.

Cuideachd a dhìth Google chrome tionndadh as ùire a.

A 'tuigsinn an copter

Feuchaidh sinn ri tuigsinn mar a tha Parrot ARDrone ag obair. Tha ceithir motaran aig a’ chopair seo.

Bidh sinn a’ prògramadh smachd guth air a’ chopair a’ cleachdadh Node.js agus ARDrone

Bidh motaran aghaidh ag obair san aon taobh. Bidh aon phaidhir a’ tionndadh deiseal, am fear eile tuathal. Bidh an drone a’ gluasad le bhith ag atharrachadh ceàrn claonaidh an coimeas ri uachdar na talmhainn, ag atharrachadh astar cuairteachaidh nan motaran agus grunn ghluasadan eile a ghabhas gluasad.

Bidh sinn a’ prògramadh smachd guth air a’ chopair a’ cleachdadh Node.js agus ARDrone

Mar a chì sinn anns an dealbh gu h-àrd, ag atharrachadh diofar pharamadairean a 'leantainn gu atharrachadh ann an stiùireadh gluasad a' chopair. Mar eisimpleir, le bhith a 'lùghdachadh no a' meudachadh astar cuairteachaidh nan rotors clì is deas a 'cruthachadh rolla. Leigidh seo leis an drone itealaich air adhart no air ais.

Le bhith ag atharrachadh astar agus stiùireadh nan motaran, bidh sinn a’ suidheachadh ceàrnan teilt a leigeas leis a’ chopair gluasad gu stiùiridhean eile. Gu fìrinneach, airson a ’phròiseact gnàthach chan eil feum air sgrùdadh aerodynamics, feumaidh tu dìreach na prionnsapalan bunaiteach a thuigsinn.

Mar a tha Parrot ARDrone ag obair

Tha an drone na àite teth Wi-Fi. Gus òrdughan fhaighinn agus a chuir chun copter, feumaidh tu ceangal ris a’ phuing seo. Tha mòran thagraidhean eadar-dhealaichte ann a leigeas leat smachd a chumail air quadcopters. Tha e uile a’ coimhead rudeigin mar seo:

Bidh sinn a’ prògramadh smachd guth air a’ chopair a’ cleachdadh Node.js agus ARDrone

Cho luath ‘s a bhios an drone ceangailte, fosgail an inneal-crìochnachaidh agus telnet 192.168.1.1 - is e seo IP an copter. Airson Linux faodaidh tu a chleachdadh Busybox airson Linux.

Iarrtas ailtireachd

Bidh an còd againn air a roinn anns na modalan a leanas:

  • eadar-aghaidh cleachdaiche le API cainnt airson lorg guth;
  • criathradh òrdughan agus coimeas ri inbhe;
  • a 'cur òrdughan chun an drone;
  • craoladh bhidio beò.

Bidh an API ag obair fhad ‘s a tha ceangal eadar-lìn ann. Gus seo a dhèanamh, cuiridh sinn ceangal Ethernet ris.

Tha an t-àm ann tagradh a chruthachadh!

Còd

An toiseach, cruthaichidh sinn pasgan ùr agus atharraichidh sinn thuige a’ cleachdadh an inneal-crìochnachaidh.

An uairsin cruthaichidh sinn pròiseact Node a’ cleachdadh na h-òrdughan gu h-ìosal.

An toiseach, bidh sinn a 'stàladh nan eisimeileachd a tha a dhìth.

stàlaich npm 

Bheir sinn taic do na h-òrdughan a leanas:

  • Thoir dhìot;
  • tighinn air tìr;
  • suas - tha an drone ag èirigh leth mheatair agus a 'dol;
  • sìos - a 'tuiteam leth mheatair agus a' reothadh;
  • air an taobh chlì - a 'dol leth mheatair air an taobh chlì;
  • air an làimh dheis - a 'dol leth mheatair air an làimh dheis;
  • cuairteachadh - a 'tionndadh deiseal 90 ceum;
  • air adhart - a 'dol air adhart leth mheatair;
  • air ais - a 'dol air ais leth mheatair;
  • stad.

Seo an còd a leigeas leat gabhail ri òrdughan, sìoladh iad agus smachd a chumail air an 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);

Agus seo an còd HTML agus JavaScript a bhios ag èisteachd ris an neach-cleachdaidh agus a 'cur òrdugh gu frithealaiche 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>

Agus cuideachd còd JavaScript gus obrachadh le òrdughan gutha, gan cur gu frithealaiche 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'
 });
};

Cuir air bhog an tagradh

Faodar am prògram a chuir air bhog mar a leanas (tha e cudromach dèanamh cinnteach gu bheil an copter ceangailte ri Wi-Fi agus gu bheil an càball Ethernet ceangailte ris a’ choimpiutair).

Fosgail localhost: 3000 sa bhrobhsair agus cliog Tòisich Aithneachadh.

Bidh sinn a’ prògramadh smachd guth air a’ chopair a’ cleachdadh Node.js agus ARDrone

Bidh sinn a’ feuchainn ri smachd a chumail air an drone agus tha sinn toilichte.

A 'craoladh bhidio bho drone

Anns a 'phròiseact, cruthaich faidhle ùr agus dèan lethbhreac den chòd seo an sin:

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

Agus seo an còd HTML, bidh sinn ga chuir am broinn am pasgan poblach.

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

Cuir air bhog agus ceangail ri localhost: 8080 gus bhidio fhaicinn bhon chamara aghaidh.

Bidh sinn a’ prògramadh smachd guth air a’ chopair a’ cleachdadh Node.js agus ARDrone

Beachdan feumail

  • Fly an drone seo a-staigh.
  • Cuir an còmhdach dìon air an drone agad an-còmhnaidh mus toir thu dheth.
  • Dèan cinnteach a bheil am bataraidh air a ghearradh.
  • Ma bhios an drone gad ghiùlan fhèin gu neònach, cùm sìos e agus thoir thairis e. Cuiridh an gnìomh seo am copter ann am modh èiginn agus stadaidh na rotors sa bhad.

Còd deiseil agus demo

BEAN DEMO

DOWNLOAD

Thachair!

Bheir sgrìobhadh còd agus an uairsin coimhead air an inneal a ’tòiseachadh a’ gèilleadh toileachas dhut! A-nis tha sinn air faighinn a-mach ciamar a theagasg sinn drone gus èisteachd ri òrdughan gutha. Gu dearbh, tha tòrr a bharrachd chothroman ann: aithne aghaidh neach-cleachdaidh, tursan-adhair fèin-riaghailteach, aithneachadh gluasad-bodhaig agus mòran a bharrachd.

Dè as urrainn dhut a mholadh airson am prògram adhartachadh?

Tha Skillbox a’ moladh:

Source: www.habr.com

Cuir beachd ann