موږ د Node.js او ARDrone په کارولو سره د کاپټر غږ کنټرول پروګرام کوو

موږ د Node.js او ARDrone په کارولو سره د کاپټر غږ کنټرول پروګرام کوو

پدې ټیوټوریل کې به موږ د Node.js او ویب سپیک API په کارولو سره د غږ کنټرول سره د ډرون لپاره د برنامه رامینځته کولو ته ګورو. کاپټر - توتا ARDrone 2.0.

موږ یادونه کوو: د ټولو هابر لوستونکو لپاره - د 10 روبل تخفیف کله چې د هابر پرومو کوډ په کارولو سره د مهارت بکس کوم کورس کې نوم لیکنه وکړئ.

Skillbox وړاندیز کوي: عملي کورس "د ګرځنده پرمخ وړونکي PRO".

پېژندنه

ډرونونه حیرانونکي دي. زه واقعیا د خپل کواډ سره لوبې کولو ، عکسونو او ویډیوګانو اخیستلو یا یوازې ساتیري کولو څخه خوند اخلم. مګر بې پیلوټه الوتکې (UAVs) یوازې د تفریح ​​​​لپاره کارول کیږي. دوی په سینما کې کار کوي، ګلیشیر مطالعه کوي، او د اردو او د کرنې سکتور استازو لخوا کارول کیږي.

پدې ټیوټوریل کې به موږ د داسې برنامه رامینځته کولو په اړه وګورو چې تاسو ته به اجازه درکړي ډرون کنټرول کړئ. د غږیز حکمونو کارول. هو، کاپټر به هغه څه وکړي چې تاسو ورته ووایاست. د مقالې په پای کې یو چمتو شوی پروګرام او د UAV کنټرول ویډیو شتون لري.

اوسپنه

موږ لاندې ته اړتیا لرو:

  • توتا ARDrone 2.0;
  • ایترنیټ کیبل؛
  • ښه مایکروفون.

پراختیا او مدیریت به د وینډوز/میک/اوبنټو سره په کاري سټیشنونو کې ترسره شي. په شخصي توګه، ما د ماک او اوبنټو 18.04 سره کار کړی.

ساوتري

د Node.js وروستۍ نسخه له دې څخه ډاونلوډ کړئ رسمي پاڼه.

هم اړتیا لري د ګوګل کروم وروستۍ نسخه.

د کوپټر پوهیدل

راځئ هڅه وکړو چې پوه شو چې توتا ARDrone څنګه کار کوي. دا کاپټر څلور موټرې لري.

موږ د Node.js او ARDrone په کارولو سره د کاپټر غږ کنټرول پروګرام کوو

مخالف موټورونه په ورته لوري کار کوي. یوه جوړه د ساعت په لور حرکت کوي، بله د ساعت په مقابل کې. بې پیلوټه الوتکه د ځمکې د سطحې په پرتله د زاویې زاویه بدلولو سره حرکت کوي، د موټرو د گردش سرعت بدلوي او یو شمیر نور د حرکت وړ حرکتونه.

موږ د Node.js او ARDrone په کارولو سره د کاپټر غږ کنټرول پروګرام کوو

لکه څنګه چې موږ په پورتني انځور کې لیدلی شو، د مختلفو پیرامیټونو بدلول د کاپټر د حرکت په لور کې د بدلون لامل کیږي. د مثال په توګه، د کیڼ او ښي روټرونو د گردش سرعت کمول یا زیاتول یو رول رامینځته کوي. دا ډرون ته اجازه ورکوي چې مخکې یا شاته الوتنه وکړي.

د موټرو د سرعت او سمت په بدلولو سره، موږ د زاویې زاویې تنظیم کوو چې کاپټر ته اجازه ورکوي چې په نورو لارښوونو کې حرکت وکړي. په حقیقت کې، د اوسنۍ پروژې لپاره د ایروډینامیک مطالعې ته اړتیا نشته، تاسو یوازې د اساسي اصولو پوهیدو ته اړتیا لرئ.

د توتا ARDrone څنګه کار کوي

ډرون یو وای فای هټ سپټ دی. کاپټر ته د امرونو ترلاسه کولو او لیږلو لپاره، تاسو اړتیا لرئ چې دې ټکي سره وصل شئ. ډیری بیلابیل غوښتنلیکونه شتون لري چې تاسو ته د کواډکوپټرونو کنټرول اجازه درکوي. دا ټول داسې ښکاري:

موږ د Node.js او ARDrone په کارولو سره د کاپټر غږ کنټرول پروګرام کوو

هرڅومره ژر چې ډرون وصل شي ، ټرمینل خلاص کړئ او ټیلنټ 192.168.1.1 - دا د کاپټر IP دی. د لینکس لپاره تاسو کارولی شئ د لینوکس مصروف بکس.

د غوښتنلیک جوړښت

زموږ کوډ به په لاندې ماډلونو ویشل شي:

  • د غږ موندلو لپاره د وینا API سره د کارن انٹرفیس؛
  • د فلټر کولو امرونه او د معیار سره پرتله کول؛
  • ډرون ته د امر لیږل؛
  • ژوندۍ ویډیو خپرونه.

API تر هغه وخته کار کوي چې د انټرنیټ اتصال شتون ولري. د دې ډاډ ترلاسه کولو لپاره ، موږ د ایترنیټ اتصال اضافه کوو.

دا د غوښتنلیک جوړولو وخت دی!

کوډ

لومړی، راځئ چې یو نوی فولډر جوړ کړو او د ترمینل په کارولو سره یې بدل کړو.

بیا موږ د لاندې کمانډونو په کارولو سره نوډ پروژه رامینځته کوو.

لومړی، موږ اړین انحصارونه نصب کوو.

د npm لګول 

موږ به د لاندې امرونو ملاتړ وکړو:

  • الوتل؛
  • کښته کول
  • پورته - ډرون نیم متر لوړیږي او ځړیږي؛
  • ښکته - نیم متره ښکته کیږي او کنګل کیږي؛
  • کیڼ لور ته - کیڼ اړخ ته نیم متر ځي؛
  • ښي خوا ته - ښي خوا ته نیم متره ځي؛
  • گردش - د ساعت په لور 90 درجې ګرځوي؛
  • مخکی - نیم متر مخکی ځي؛
  • شاته - نیم متر بیرته ځي؛
  • درېدل.

دلته هغه کوډ دی چې تاسو ته اجازه درکوي امرونه ومني، فلټر یې کړئ او ډرون کنټرول کړئ.

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

او دلته د HTML او JavaScript کوډ دی چې کارونکي ته غوږ نیسي او د نوډ سرور ته کمانډ لیږي.

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

او همدارنګه د جاواسکریپټ کوډ د غږ کمانډونو سره کار کولو لپاره، نوډ سرور ته یې لیږل.

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

د غوښتنلیک په لاره اچول

برنامه په لاندې ډول پیل کیدی شي (دا مهمه ده چې ډاډ ترلاسه کړئ چې کاپټر د Wi-Fi سره وصل دی او د ایترنیټ کیبل کمپیوټر سره وصل دی).

په براوزر کې لوکل هوسټ: 3000 خلاص کړئ او د پیژندنې پیل کلیک وکړئ.

موږ د Node.js او ARDrone په کارولو سره د کاپټر غږ کنټرول پروګرام کوو

موږ هڅه کوو چې ډرون کنټرول کړو او خوشحاله یو.

د ډرون څخه ویډیو خپرول

په پروژه کې، یو نوی فایل جوړ کړئ او دا کوډ هلته کاپي کړئ:

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

او دلته د HTML کوډ دی، موږ دا په عامه فولډر کې دننه کوو.

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

لانچ او لوکل هوسټ سره وصل شئ: 8080 د مخکینۍ کیمرې څخه ویډیو لیدو لپاره.

موږ د Node.js او ARDrone په کارولو سره د کاپټر غږ کنټرول پروګرام کوو

مرستندوی لارښوونې

  • دا ډرون د کور دننه الوتنه وکړئ.
  • تل د الوتنې دمخه په خپل ډرون کې محافظتي پوښ واچوئ.
  • وګورئ که بیټرۍ چارج شوې وي.
  • که بې پیلوټه الوتکه عجیب چلند وکړي، دا یې ونیسئ او هغه یې وغورځوئ. دا عمل به کاپټر په بیړني حالت کې واچوي او روټرونه به سمدلاسه ودروي.

چمتو کوډ او ډیمو

ژوندی ډیمو

دانلود

پېښ شول!

د کوډ لیکل او بیا د ماشین لیدل چې اطاعت پیل کوي تاسو ته به خوند درکړي! اوس موږ معلومه کړې چې څنګه د غږ کمانډونو اوریدلو لپاره ډرون ته زده کړه ورکړو. په حقیقت کې ، ډیر نور امکانات شتون لري: د کارونکي مخ پیژندنه ، خپلواکه الوتنې ، د اشارې پیژندنه او نور ډیر څه.

تاسو د پروګرام د ښه کولو لپاره څه وړاندیز کولی شئ؟

Skillbox وړاندیز کوي:

سرچینه: www.habr.com

Add a comment