Waxaan ku barnaajinaa xakamaynta codka kobtarka anagoo adeegsanayna Node.js iyo ARDrone

Waxaan ku barnaajinaa xakamaynta codka kobtarka anagoo adeegsanayna Node.js iyo ARDrone

Casharradan waxaan ku eegi doonaa abuurista barnaamij loogu talagalay diyaarad aan duuliye lahayn oo leh koontaroolka codka iyadoo la adeegsanayo Node.js iyo Web Speech API. Copter - Parrot ARDrone 2.0.

Waxaan xusuusineynaa: dhammaan akhristayaasha "Habr" - qiimo dhimis ah 10 rubles marka la qorayo koorso kasta oo Skillbox ah iyadoo la adeegsanayo koodhka xayeysiinta "Habr".

Skillbox waxay ku talinaysaa: Koorso wax ku ool ah "Developer Mobile PRO".

Horudhac

Diyaaradaha aan duuliyaha lahayn waa yaab. Runtii aad ayaan ugu raaxeeyaa la ciyaarida quad-kayga, sawiro iyo muuqaalo ka qaadayo, ama kaliya madadaalo. Laakiin baabuurta aan duuliyaha lahayn (UAVs) ayaa loo isticmaalaa wax ka badan maaweelada oo kaliya. Waxay ka shaqeeyaan shineemo, waxay bartaan glaciers, waxaana isticmaala ciidamada iyo wakiilada qaybta beeraha.

Casharradan waxaan ku eegi doonaa abuurista barnaamij kuu ogolaanaya inaad xakameyso diyaaradda aan duuliyaha lahayn. iyadoo la isticmaalayo amarrada codka. Haa, kobteriyuhu wuxuu samayn doonaa waxaad u sheegto inuu sameeyo. Dhamaadka maqaalka waxaa jira barnaamij diyaarsan iyo fiidiyoow xakameyn UAV ah.

Birta

Waxaan u baahanahay kuwan soo socda:

  • Parrot ARDrone 2.0;
  • fiilada Ethernet;
  • makarafoon wanaagsan.

Horumarinta iyo maaraynta waxaa lagu fulin doonaa goobaha shaqada ee Windows/Mac/Ubuntu. Shakhsi ahaan, waxaan la shaqeeyay Mac iyo Ubuntu 18.04.

Software

Ka soo deji nuqulkii ugu dambeeyay ee Node.js goobta rasmiga ah.

Sidoo kale loo baahan yahay nooca ugu dambeeyay ee Google Chrome.

Fahamka kobterka

Aan isku dayno inaan fahanno sida Parrot ARDrone u shaqeeyo. Copter-kani waxa uu leeyahay afar matoor.

Waxaan ku barnaajinaa xakamaynta codka kobtarka anagoo adeegsanayna Node.js iyo ARDrone

Matoorada iska soo horjeeda waxay u shaqeeyaan isla jiho. Labada lamaane waxay u wareegaan saacada, ka kalena saacada ka soo horjeeda. Drone-ku waxay ku dhaqaaqdaa iyadoo beddesha xagasha u janjeerta marka loo eego dusha sare ee dhulka, beddesha xawaaraha wareegga matoorada iyo dhaqdhaqaaqyo kale oo badan oo la maareyn karo.

Waxaan ku barnaajinaa xakamaynta codka kobtarka anagoo adeegsanayna Node.js iyo ARDrone

Sida aan ku arki karno jaantuska sare, beddelidda cabbirrada kala duwan waxay keenaysaa isbeddel ku yimaada jihada dhaqdhaqaaqa kobter-ka. Tusaale ahaan, hoos u dhaca ama kordhinta xawaaraha wareeg ee wareegyada bidix iyo midig waxay abuurtaa duub. Tani waxay u ogolaaneysaa in diyaarada aan duuliyaha lahayn ay hore u socoto ama gadaal u socoto.

Anaga oo bedelayna xawaaraha iyo jihada matoorada, waxaanu dejinnay xaglo leexin taasoo u oggolaanaysa kobterku inuu u dhaqaaqo jihooyin kale. Dhab ahaantii, mashruuca hadda jira looma baahna in la barto aerodynamics, kaliya waxaad u baahan tahay inaad fahamto mabaadi'da aasaasiga ah.

Sida Parrot ARDrone u shaqeeyo

Diyaarada aan duuliyaha lahayn ayaa ah goob Wi-Fi ah. Si aad u hesho oo aad amarrada ugu dirto kobtarka, waxaad u baahan tahay inaad ku xidho bartan. Waxaa jira codsiyo badan oo kala duwan oo kuu oggolaanaya inaad maamusho quadcopters. Dhammaan waxay u egyihiin sidatan:

Waxaan ku barnaajinaa xakamaynta codka kobtarka anagoo adeegsanayna Node.js iyo ARDrone

Isla marka diyaaradda aan duuliyaha lahayn la xiro, fur terminalka iyo telnet 192.168.1.1 - kani waa kobter-ka IP-ga. Linux waxaad u isticmaali kartaa Linux Busybox.

Qaab dhismeedka codsiga

Xeerkeena waxa loo qaybin doonaa cutubyada soo socda:

  • isdhexgalka isticmaalaha oo leh API hadalka ee ogaanshaha codka;
  • shaandhaynta amarrada iyo isbarbardhigga heerka;
  • u dirida amarrada diyaaradda aan duuliyaha lahayn;
  • baahinta muuqaalka tooska ah.

API-gu wuxuu shaqeeyaa ilaa iyo inta uu jiro xiriir internet. Si loo xaqiijiyo tan, waxaan ku darnaa isku xirka Ethernet.

Waa waqtigii la samayn lahaa codsi!

Koodhka

Marka hore, aan abuurno gal cusub oo aan u beddelno annaga oo adeegsanayna terminalka.

Kadibna waxaan abuurnaa mashruuc Node ah anagoo adeegsanayna amarrada hoose.

Marka hore, waxaan rakibnaa ku-tiirsanaanta loo baahan yahay.

rakibaadda dharkaβ€Š

Waxaan taageeri doonaa amarada soo socda:

  • fasax ka qaataan;
  • degitaanka;
  • kor - diyaaraddu waxay kor u kacday nus mitir waxayna dul heehaabaysaa;
  • hoos - wuxuu dhacaa nus mitir oo baraf ah;
  • bidixda - waxay tagtaa nus mitir bidix;
  • dhanka midig - waxay tagtaa nus mitir dhanka midig;
  • wareeg - waxay u wareegtaa saacadda 90 darajo;
  • hore u socda - hore u socda nus mitir;
  • gadaal - dib u noqda nus mitir;
  • joojin

Waa kan koodka kuu ogolaanaya inaad aqbasho amarrada, shaandhayso oo aad xakamayso diyaaradda aan duuliyaha lahayn.

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

Oo halkan waa HTML iyo koodka JavaScript ee dhagaysta isticmaalaha oo u soo diraya amar serverka 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>

Iyo sidoo kale koodhka JavaScript si uu ula shaqeeyo amarrada codka, u diraya server-ka 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'
 });
};

Daahfurka codsiga

Barnaamijka waxaa loo bilaabi karaa sida soo socota (waxaa muhiim ah in la hubiyo in Copter-ku ku xiran yahay Wi-Fi iyo fiilada Ethernet uu ku xiran yahay kombiyuutarka).

Ka fur localhost:3000 browserka oo dhagsii Aqoonsiga bilow

Waxaan ku barnaajinaa xakamaynta codka kobtarka anagoo adeegsanayna Node.js iyo ARDrone

Waxaan isku dayeynaa inaan xakameyno diyaaradda aan duuliyaha lahayn waana ku faraxsanahay.

Fiidiyowga laga baahinayo diyaarad aan duuliye lahayn

Mashruuca dhexdiisa, ku samee fayl cusub oo koobi ka dhig koodkan halkaas:

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

Oo halkan waa koodhka HTML, waxaanu ku dhejinaynaa gudaha galgalka dadweynaha.

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

Bilow oo ku xidh localhost:8080 si aad muuqaal uga aragto kamarada hore.

Waxaan ku barnaajinaa xakamaynta codka kobtarka anagoo adeegsanayna Node.js iyo ARDrone

Talooyin wax ku ool ah

  • Ku duul diyaaradan gudaha gudaha.
  • Had iyo jeer daboolka ilaalinta saar drone-kaaga ka hor intaadan duulin.
  • Hubi in batteriga la dallacay.
  • Haddi ay diyaarada aan duuliyaha lahayni u dhaqmo si la yaab leh, hoos u qabo oo ka rog. Ficilkan ayaa kobter-ka gelin doona habka degdegga ah oo rotors-ku isla markiiba wuu joogsan doonaa.

Koodh diyaar ah iyo demo

DEMO LIVE

DOWNLOAD

dhacay!

Qoritaanka koodka ka dibna daawashada mashiinka bilaabaya inuu addeeco waxay ku siin doontaa farxad! Hadda waxaan ogaanay sida loo baro diyaarad aan duuliye lahayn si ay u dhageysato amarrada codka. Dhab ahaantii, waxaa jira fursado badan oo dheeraad ah: aqoonsiga wejiga isticmaalaha, duulimaadyo madaxbannaan, aqoonsiga dhaqdhaqaaqa iyo wax ka badan.

Maxaad soo jeedin kartaa si aad u horumariso barnaamijka?

Skillbox waxay ku talinaysaa:

Source: www.habr.com

Add a comment