ہم Node.js اور ARDrone کا استعمال کرتے ہوئے کاپٹر کے وائس کنٹرول کا پروگرام کرتے ہیں۔

ہم Node.js اور ARDrone کا استعمال کرتے ہوئے کاپٹر کے وائس کنٹرول کا پروگرام کرتے ہیں۔

اس ٹیوٹوریل میں ہم Node.js اور Web اسپیچ API کا استعمال کرتے ہوئے وائس کنٹرول کے ساتھ ڈرون کے لیے ایک پروگرام بنانے پر غور کریں گے۔ Copter - Parrot ARDrone 2.0.

ہم آپ کو یاد دلاتے ہیں: "Habr" کے تمام قارئین کے لیے - "Habr" پروموشنل کوڈ کا استعمال کرتے ہوئے کسی بھی Skillbox کورس میں داخلہ لینے پر 10 rubles کی رعایت۔

Skillbox تجویز کرتا ہے: پریکٹیکل کورس "موبائل ڈویلپر پی آر او".

تعارف

ڈرون حیرت انگیز ہیں۔ میں واقعی میں اپنے کواڈ کے ساتھ کھیلنے، تصاویر اور ویڈیوز لینے، یا صرف مزے کرنے میں لطف اندوز ہوتا ہوں۔ لیکن بغیر پائلٹ کے فضائی گاڑیاں (UAVs) محض تفریح ​​کے لیے استعمال ہوتی ہیں۔ وہ سنیما میں کام کرتے ہیں، گلیشیرز کا مطالعہ کرتے ہیں، اور فوج اور زرعی شعبے کے نمائندے استعمال کرتے ہیں۔

اس ٹیوٹوریل میں ہم ایک پروگرام بنانے پر غور کریں گے جو آپ کو ڈرون کو کنٹرول کرنے کی اجازت دے گا۔ صوتی احکامات کا استعمال کرتے ہوئے ہاں، ہیلی کاپٹر وہی کرے گا جو آپ اسے کرنے کو کہیں گے۔ مضمون کے آخر میں UAV کنٹرول کا ایک ریڈی میڈ پروگرام اور ویڈیو موجود ہے۔

آئرن

ہمیں مندرجہ ذیل کی ضرورت ہے:

  • طوطا اے آرڈرون 2.0؛
  • ایتھرنیٹ کیبل؛
  • اچھا مائکروفون.

ونڈوز/میک/اوبنٹو کے ساتھ ورک سٹیشنوں پر ترقی اور انتظام کیا جائے گا۔ ذاتی طور پر، میں نے میک اور اوبنٹو 18.04 کے ساتھ کام کیا۔

обеспечение Программное

سے Node.js کا تازہ ترین ورژن ڈاؤن لوڈ کریں۔ سرکاری ویب سائٹ.

بھی ضرورت ہے۔ گوگل کروم کا تازہ ترین ورژن.

ہیلی کاپٹر کو سمجھنا

آئیے یہ سمجھنے کی کوشش کریں کہ طوطا اے آرڈرون کیسے کام کرتا ہے۔ اس کاپٹر میں چار موٹریں ہیں۔

ہم Node.js اور ARDrone کا استعمال کرتے ہوئے کاپٹر کے وائس کنٹرول کا پروگرام کرتے ہیں۔

مخالف موٹریں ایک ہی سمت میں کام کرتی ہیں۔ ایک جوڑا گھڑی کی سمت میں گھومتا ہے، دوسرا گھڑی کی مخالف سمت میں۔ ڈرون زمین کی سطح کے نسبت جھکاؤ کے زاویے کو تبدیل کرکے، موٹروں کی گردش کی رفتار کو تبدیل کرکے اور کئی دیگر قابل عمل حرکتوں سے حرکت کرتا ہے۔

ہم Node.js اور ARDrone کا استعمال کرتے ہوئے کاپٹر کے وائس کنٹرول کا پروگرام کرتے ہیں۔

جیسا کہ ہم اوپر دیے گئے خاکے میں دیکھ سکتے ہیں، مختلف پیرامیٹرز کو تبدیل کرنے سے ہیلی کاپٹر کی حرکت کی سمت میں تبدیلی آتی ہے۔ مثال کے طور پر، بائیں اور دائیں روٹرز کی گردش کی رفتار کو کم کرنا یا بڑھانا ایک رول بناتا ہے۔ یہ ڈرون کو آگے یا پیچھے پرواز کرنے کی اجازت دیتا ہے۔

موٹرز کی رفتار اور سمت کو تبدیل کر کے، ہم جھکاؤ کے زاویے طے کرتے ہیں جو کاپٹر کو دوسری سمتوں میں جانے کی اجازت دیتے ہیں۔ دراصل، موجودہ پروجیکٹ کے لیے ایرو ڈائنامکس کا مطالعہ کرنے کی ضرورت نہیں ہے، آپ کو صرف بنیادی اصولوں کو سمجھنے کی ضرورت ہے۔

طوطا اے آرڈرون کیسے کام کرتا ہے۔

ڈرون ایک وائی فائی ہاٹ سپاٹ ہے۔ ہیلی کاپٹر کو کمانڈ وصول کرنے اور بھیجنے کے لیے، آپ کو اس مقام سے جڑنا ہوگا۔ بہت سی مختلف ایپلی کیشنز ہیں جو آپ کو کواڈ کاپٹروں کو کنٹرول کرنے کی اجازت دیتی ہیں۔ یہ سب کچھ اس طرح لگتا ہے:

ہم Node.js اور ARDrone کا استعمال کرتے ہوئے کاپٹر کے وائس کنٹرول کا پروگرام کرتے ہیں۔

جیسے ہی ڈرون منسلک ہوتا ہے، ٹرمینل کھولیں اور ٹیل نیٹ 192.168.1.1 - یہ کاپٹر کا IP ہے۔ لینکس کے لیے آپ استعمال کر سکتے ہیں۔ لینکس بزی باکس.

ایپلیکیشن فن تعمیر

ہمارے کوڈ کو درج ذیل ماڈیولز میں تقسیم کیا جائے گا۔

  • آواز کا پتہ لگانے کے لیے اسپیچ API کے ساتھ یوزر انٹرفیس؛
  • فلٹرنگ کمانڈز اور معیار کے ساتھ موازنہ؛
  • ڈرون کو حکم بھیجنا؛
  • براہ راست ویڈیو نشر.

API تب تک کام کرتا ہے جب تک کہ انٹرنیٹ کنکشن موجود ہو۔ اس کو یقینی بنانے کے لیے، ہم ایک ایتھرنیٹ کنکشن شامل کرتے ہیں۔

یہ ایک درخواست بنانے کا وقت ہے!

کوڈ

سب سے پہلے، آئیے ایک نیا فولڈر بنائیں اور ٹرمینل کا استعمال کرتے ہوئے اس میں سوئچ کریں۔

پھر ہم نیچے دی گئی کمانڈز کا استعمال کرتے ہوئے نوڈ پروجیکٹ بناتے ہیں۔

سب سے پہلے، ہم مطلوبہ انحصار کو انسٹال کرتے ہیں۔

این ایم پی انسٹال 

ہم درج ذیل کمانڈز کی حمایت کریں گے:

  • ٹیک آف
  • لینڈنگ
  • اوپر - ڈرون آدھا میٹر بڑھتا ہے اور منڈلاتا ہے۔
  • نیچے - آدھا میٹر گرتا ہے اور جم جاتا ہے۔
  • بائیں طرف - آدھا میٹر بائیں طرف جاتا ہے۔
  • دائیں طرف - آدھا میٹر دائیں طرف جاتا ہے۔
  • گردش - گھڑی کی سمت 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'
 });
};

ایپلیکیشن لانچ کریں۔

پروگرام کو مندرجہ ذیل طور پر لانچ کیا جا سکتا ہے (یہ یقینی بنانا ضروری ہے کہ کاپٹر وائی فائی سے منسلک ہے اور ایتھرنیٹ کیبل کمپیوٹر سے منسلک ہے)۔

لوکل ہوسٹ کھولیں: 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

نیا تبصرہ شامل کریں