اسان Node.js ۽ ARDrone استعمال ڪندي ڪوپٽر جي وائس ڪنٽرول پروگرام ڪندا آهيون

اسان Node.js ۽ ARDrone استعمال ڪندي ڪوپٽر جي وائس ڪنٽرول پروگرام ڪندا آهيون

هن سبق ۾ اسان ڏسنداسين ڊرون لاءِ هڪ پروگرام ٺاهڻ لاءِ آواز ڪنٽرول سان Node.js ۽ ويب اسپيچ API استعمال ڪندي. ڪاپٽر - توتا آرڊرون 2.0.

اسان توهان کي ياد ڏياريون ٿا: "Habr" جي سڀني پڙهندڙن لاءِ - 10 روبل جي رعايت جڏهن "Habr" پروموشنل ڪوڊ استعمال ڪندي ڪنهن به اسڪل باڪس ڪورس ۾ داخلا.

Skillbox سفارش ڪري ٿو: عملي ڪورس "موبائل ڊولپر پرو".

تعارف

ڊرون شاندار آهن. مون کي واقعي مزو ايندو آهي پنهنجي ڪواڊ سان کيڏڻ، فوٽوز ۽ وڊيوز وٺڻ، يا صرف مزو وٺڻ. پر غير پائلٽ فضائي گاڏيون (UAVs) صرف تفريح لاءِ استعمال ڪيون وينديون آهن. اهي سئنيما ۾ ڪم ڪن ٿا، گليشيئر جو مطالعو ڪن ٿا، ۽ فوجي ۽ زرعي شعبي جي نمائندن طرفان استعمال ٿين ٿا.

هن سبق ۾ اسين هڪ پروگرام ٺاهڻ تي نظر ڪنداسين جيڪو توهان کي ڊرون ڪنٽرول ڪرڻ جي اجازت ڏيندو. آواز حڪم استعمال ڪندي. ها، هيڪٽر اهو ئي ڪندو جيڪو توهان ان کي ڪرڻ لاءِ چئو. مضمون جي آخر ۾ اتي هڪ تيار ڪيل پروگرام ۽ UAV ڪنٽرول جي وڊيو آهي.

آئرن

اسان کي هيٺين ضرورت آهي:

  • توتا آرڊرون 2.0؛
  • Ethernet ڪيبل؛
  • سٺو مائڪروفون.

ترقي ۽ انتظام ڪيو ويندو ورڪ اسٽيشنن تي Windows/Mac/Ubuntu سان. ذاتي طور تي، مون Mac ۽ Ubuntu 18.04 سان ڪم ڪيو.

سافٽويئر

Node.js جو جديد نسخو ڊائون لوڊ ڪريو تان سرڪاري ويب سائيٽ.

پڻ گهربل گوگل ڪروم جو جديد نسخو.

ڪوپٽر کي سمجهڻ

اچو ته سمجھڻ جي ڪوشش ڪريو ته توتا آرڊرون ڪيئن ڪم ڪري ٿو. هن ڪاپٽر ۾ چار موٽرون آهن.

اسان Node.js ۽ ARDrone استعمال ڪندي ڪوپٽر جي وائس ڪنٽرول پروگرام ڪندا آهيون

مخالف موٽر ساڳئي طرف ڪم ڪن ٿا. ھڪڙو جوڙو گھڙيءَ جي طرف گھمندو آھي، ٻيو گھڙيءَ جي وار وار. ڊرون زمين جي مٿاڇري سان لاڳاپي جي زاوي کي تبديل ڪندي، موٽرز جي گردش جي رفتار کي تبديل ڪندي ۽ ٻين ڪيترن ئي متحرڪ تحريڪن کي تبديل ڪندي.

اسان Node.js ۽ ARDrone استعمال ڪندي ڪوپٽر جي وائس ڪنٽرول پروگرام ڪندا آهيون

جيئن ته اسان مٿي ڏنل ڊراگرام ۾ ڏسي سگهون ٿا، مختلف پيٽرولن کي تبديل ڪرڻ سان ڪاپٽر جي حرڪت جي هدايت ۾ تبديلي اچي ٿي. مثال طور، کاٻي ۽ ساڄي روٽرز جي گردش جي رفتار کي گهٽائڻ يا وڌائڻ هڪ رول ٺاهي ٿو. هي ڊرون کي اڳتي يا پوئتي اڏامڻ جي اجازت ڏئي ٿو.

موٽرز جي رفتار ۽ هدايت کي تبديل ڪندي، اسان ٽٽڻ وارا زاويا مقرر ڪريون ٿا جيڪي ڪاپٽر کي ٻين طرفن ۾ منتقل ڪرڻ جي اجازت ڏين ٿا. دراصل، موجوده پروجيڪٽ لاءِ ايروڊينامڪس پڙهڻ جي ڪا ضرورت ناهي، توهان کي صرف بنيادي اصولن کي سمجهڻ جي ضرورت آهي.

ڪيئن طوطا ARDrone ڪم ڪندو آهي

ڊرون هڪ وائي فائي هٽ اسپاٽ آهي. ڪاپٽر ڏانهن حڪم حاصل ڪرڻ ۽ موڪلڻ لاء، توهان کي هن نقطي سان ڳنڍڻ جي ضرورت آهي. اتي ڪيترائي مختلف ايپليڪيشنون آھن جيڪي توھان کي ڪنٽرول ڪرڻ جي اجازت ڏين ٿيون quadcopters. اهو سڀ ڪجهه هن طرح نظر اچي ٿو:

اسان Node.js ۽ ARDrone استعمال ڪندي ڪوپٽر جي وائس ڪنٽرول پروگرام ڪندا آهيون

جيئن ئي ڊرون ڳنڍيل آهي، ٽرمينل کوليو ۽ ٽيلنٽ 192.168.1.1 - هي آهي ڪاپٽر جو IP. لينڪس لاء توهان استعمال ڪري سگهو ٿا لينڪس Busybox.

ايپليڪيشن فن تعمير

اسان جو ڪوڊ هيٺين ماڊلز ۾ ورهايو ويندو:

  • آواز جي سڃاڻپ لاءِ اسپيچ API سان يوزر انٽرفيس؛
  • فلٽرنگ حڪم ۽ معيار سان مقابلو ڪرڻ؛
  • ڊرون ڏانهن حڪم موڪلڻ؛
  • لائيو وڊيو نشر.

API ڪم ڪري ٿو جيستائين انٽرنيٽ ڪنيڪشن موجود آهي. انهي کي يقيني بڻائڻ لاء، اسان هڪ Ethernet ڪنيڪشن شامل ڪيو.

اهو هڪ ايپليڪيشن ٺاهڻ جو وقت آهي!

ڪوڊ

پهرين، اچو ته هڪ نئون فولڊر ٺاهيو ۽ ان کي تبديل ڪريو ٽرمينل استعمال ڪندي.

پوء اسان ھيٺ ڏنل حڪمن کي استعمال ڪندي نوڊ پروجيڪٽ ٺاھيو.

پهريون، اسان گهربل انحصار کي نصب ڪيو.

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>

۽ پڻ JavaScript ڪوڊ ڪم ڪرڻ لاءِ آواز جي حڪمن سان، انهن کي نوڊ سرور ڏانهن موڪلڻ.

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

ايپليڪيشن کي لانچ ڪندي

پروگرام کي ھيٺئين طور تي شروع ڪري سگھجي ٿو (اھو پڪ ڪرڻ ضروري آھي ته ڪوپٽر وائي فائي سان ڳنڍيل آھي ۽ ايٿرنيٽ ڪيبل ڪمپيوٽر سان ڳنڍيل آھي).

Open localhost:3000 برائوزر ۾ ۽ ڪلڪ ڪريو Start Recognition.

اسان 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>

لانچ ڪريو ۽ ڪنيڪٽ ڪريو localhost:8080 سامهون واري ڪئميرا مان وڊيو ڏسڻ لاءِ.

اسان Node.js ۽ ARDrone استعمال ڪندي ڪوپٽر جي وائس ڪنٽرول پروگرام ڪندا آهيون

مددگار طريقن سان

  • هن ڊرون کي اندران اڏايو.
  • هميشه پنهنجي ڊرون تي حفاظتي ڪپڙا وجھو ان کي کڻڻ کان اڳ.
  • چيڪ ڪريو ته بيٽري چارج آهي.
  • جيڪڏهن ڊرون عجيب طريقي سان عمل ڪري ٿو، ان کي دٻايو ۽ ان کي ڦيرايو. هي عمل ڪوپٽر کي ايمرجنسي موڊ ۾ رکندو ۽ روٽر فوري طور تي بند ٿي ويندا.

تيار ڪوڊ ۽ ڊيمو

لائيو ڊيمو

ڊائونلوڊ ڪريو

ٿيو!

ڪوڊ لکڻ ۽ پوءِ مشين کي فرمانبرداري ڪرڻ شروع ڪندي ڏسي توهان کي خوشي ملندي! هاڻي اسان اهو معلوم ڪيو آهي ته ڊرون کي ڪيئن سيکاريو وڃي آواز جي حڪمن کي ٻڌڻ لاء. حقيقت ۾، اتي تمام گهڻو امڪان آهن: صارف جي منهن جي سڃاڻپ، خودمختيار پروازون، اشارو جي سڃاڻپ ۽ گهڻو ڪجهه.

توهان پروگرام کي بهتر ڪرڻ لاء ڇا مشورو ڏئي سگهو ٿا؟

Skillbox سفارش ڪري ٿو:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو