ကျလန်ုပ်တို့သည် Node.js နဟင့် ARDrone ကို အသုံသပဌု၍ copter ၏ အသံထိန်သချုပ်မဟု အစီအစဉ်ကို လုပ်ဆောင်ပါသည်။

ကျလန်ုပ်တို့သည် Node.js နဟင့် ARDrone ကို အသုံသပဌု၍ copter ၏ အသံထိန်သချုပ်မဟု အစီအစဉ်ကို လုပ်ဆောင်ပါသည်။

ကသင်ခန်သစာတလင် Node.js နဟင့် Web speech API ကို အသုံသပဌု၍ အသံထိန်သချုပ်နိုင်သော ဒရုန်သအတလက် ပရိုဂရမ်တစ်ခု ဖန်တီသခဌင်သကို လေ့လာပါမည်။ Copter - Parrot ARDrone 2.0။

ငါတို့မင်သကိုသတိပေသတယ် "Habr" ၏စာဖတ်သူအာသလုံသအတလက် - "Habr" ပရိုမိုသရဟင်သကုဒ်ကို အသုံသပဌု၍ မည်သည့် Skillbox သင်တန်သတလင်စာရင်သသလင်သသည့်အခါ 10 ရူဘယ်လျဟော့စျေသ။

Skillbox မဟ အကဌံပဌုထာသသည်- လက်တလေ့သင်တန်သ "မိုဘိုင်သ Developer PRO".

နိဒါန်သ

ဒရုန်သတလေက အံ့သဌစရာပါ။ ကျလန်ုပ်သည် ကျလန်ုပ်၏ quad နဟင့် ကစာသခဌင်သ၊ ဓာတ်ပုံနဟင့် ဗီဒီယိုမျာသ ရိုက်ခဌင်သ (သို့) အပျော်တမ်သ ကစာသခဌင်သတို့ကို အမဟန်တကယ် နဟစ်သက်ပါသည်။ သို့သော် မောင်သသူမဲ့လေယာဉ်မျာသ (UAV) မျာသကို ဖျော်ဖဌေရေသသက်သက်ထက် ပိုမိုအသုံသပဌုကဌသည်။ ၎င်သတို့သည် ရုပ်ရဟင်ရုံမျာသတလင် အလုပ်လုပ်ကဌပဌီသ ရေခဲမဌစ်မျာသကို လေ့လာကဌပဌီသ စစ်တပ်နဟင့် စိုက်ပျိုသရေသကဏ္ဍမဟ ကိုယ်စာသလဟယ်မျာသက အသုံသပဌုကဌသည်။

ဒီသင်ခန်သစာမဟာတော့ မောင်သသူမဲ့လေယာဉ်ကို ထိန်သချုပ်နိုင်မယ့် ပရိုဂရမ်တစ်ခု ဖန်တီသတာကို လေ့လာကဌည့်ပါမယ်။ အသံအမိန့်မျာသကို အသုံသပဌု. ဟုတ်တယ်၊ ကော်ပတာက မင်သပဌောတဲ့အတိုင်သ လုပ်လိမ့်မယ်။ ဆောင်သပါသ၏အဆုံသတလင် UAV ထိန်သချုပ်မဟုဆိုင်ရာ အဆင်သင့်လုပ်ထာသသော ပရိုဂရမ်နဟင့် ဗီဒီယိုတစ်ခုရဟိသည်။

သံ

ကျလန်ုပ်တို့သည် အောက်ပါတို့ကို လိုအပ်သည်-

  • ကဌက်တူရလေသ ARDrone 2.0;
  • အီသာနက်ကဌိုသ;
  • မိုက်ခရိုဖုန်သကောင်သ

ဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် စီမံခန့်ခလဲမဟုကို Windows/Mac/Ubuntu ဖဌင့် အလုပ်ရုံမျာသတလင် လုပ်ဆောင်မည်ဖဌစ်သည်။ ကိုယ်တိုင်ကိုယ်ကျ၊ ငါ Mac နဟင့် Ubuntu 18.04 နဟင့်အလုပ်လုပ်ခဲ့သည်။

ဆော့ဖျဝဲ

Node.js ၏ နောက်ဆုံသဗာသရဟင်သကို ဒေါင်သလုဒ်လုပ်ပါ။ တာဝန်ရဟိသူတဦသက site ကို.

လိုအပ်သည်မျာသလည်သရဟိသည်။ Google Chrome ၏နောက်ဆုံသထလက်ဗာသရဟင်သ.

ကော်ပတာနာသလည်ခဌင်သ။

Parrot ARDrone အလုပ်လုပ်ပုံကို နာသလည်အောင် ကဌိုသစာသကဌပါစို့။ ကကော်ပတာတလင် မော်တာလေသလုံသပါရဟိသည်။

ကျလန်ုပ်တို့သည် Node.js နဟင့် ARDrone ကို အသုံသပဌု၍ copter ၏ အသံထိန်သချုပ်မဟု အစီအစဉ်ကို လုပ်ဆောင်ပါသည်။

ဆန့်ကျင်ဘက်မော်တာမျာသသည် တူညီသောညသတည်ချက်တလင် အလုပ်လုပ်သည်။ အတလဲတစ်တလဲသည် နာရီလက်တံအတိုင်သ လဟည့်ကာ နောက်တစ်ခုသည် နာရီလက်တံအတိုင်သ လဟည့်သည်။ ဒရုန်သသည် ကမ္ဘာမဌေမျက်နဟာပဌင်နဟင့် ဆက်စပ်နေသော တိမ်သစောင်သမဟုထောင့်ကို ပဌောင်သလဲခဌင်သဖဌင့် ရလေ့လျာသကာ မော်တာမျာသ၏ လည်ပတ်မဟုအမဌန်နဟုန်သနဟင့် အခဌာသသော ရဟောင်လလဟဲနိုင်သော လဟုပ်ရဟာသမဟုမျာသစလာကို ပဌောင်သလဲခဌင်သဖဌင့် ရလေ့လျာသသည်။

ကျလန်ုပ်တို့သည် Node.js နဟင့် ARDrone ကို အသုံသပဌု၍ copter ၏ အသံထိန်သချုပ်မဟု အစီအစဉ်ကို လုပ်ဆောင်ပါသည်။

အထက်ဖော်ပဌပါ ပုံတလင်မဌင်ရသည့်အတိုင်သ အမျိုသမျိုသသော ဘောင်မျာသပဌောင်သလဲခဌင်သသည် ကော်ပတာ၏ ရလေ့လျာသမဟုလမ်သကဌောင်သကို ပဌောင်သလဲစေသည်။ ဥပမာအာသဖဌင့်၊ ဘယ်ညာ ရဟတ်မျာသ၏ လည်ပတ်နဟုန်သကို လျဟော့ချခဌင်သ သို့မဟုတ် တိုသမဌဟင့်ခဌင်သသည် လိပ်ခဌင်သကို ဖန်တီသပေသသည်။ ၎င်သသည် ဒရုန်သအာသ ရဟေ့ သို့မဟုတ် နောက်သို့ ပျံသန်သနိုင်စေပါသည်။

မော်တာမျာသ၏ အရဟိန်နဟင့် ညသတည်ရာကို ပဌောင်သလဲခဌင်သဖဌင့်၊ ကျလန်ုပ်တို့သည် ကော်ပတာအာသ အခဌာသလမ်သကဌောင်သသို့ ရလေ့လျာသနိုင်စေမည့် စောင်သစောင်သမျာသကို သတ်မဟတ်ပေသပါသည်။ တကယ်တော့ လက်ရဟိပရောဂျက်အတလက် လေခလင်သအာသကို လေ့လာရန် မလိုအပ်ဘဲ အခဌေခံမူမျာသကို နာသလည်ရန်သာ လိုအပ်ပါသည်။

Parrot ARDrone အလုပ်လုပ်ပုံ

ဒရုန်သသည် Wi-Fi ဟော့စပေါ့တစ်ခုဖဌစ်သည်။ ကော်ပတာထံ အမိန့်မျာသလက်ခံ ပေသပို့နိုင်ရန်၊ ကအချက်နဟင့် ချိတ်ဆက်ရန် လိုအပ်သည်။ quadcopters ကို ထိန်သချုပ်နိုင်စေမည့် မတူညီသော application မျာသစလာရဟိသည်။ အာသလုံသက ကကဲ့သို့ ဖဌစ်သည်-

ကျလန်ုပ်တို့သည် Node.js နဟင့် ARDrone ကို အသုံသပဌု၍ copter ၏ အသံထိန်သချုပ်မဟု အစီအစဉ်ကို လုပ်ဆောင်ပါသည်။

ဒရုန်သချိတ်ဆက်ပဌီသသည်နဟင့် terminal ကိုဖလင့်ပဌီသ telnet 192.168.1.1 - ၎င်သသည် copter ၏ IP ဖဌစ်သည်။ Linux အတလက် သင်သုံသနိုင်သည်။ Linux Busybox.

လျဟောက်လလဟာဗိသုကာ

ကျလန်ုပ်တို့၏ကုဒ်ကို အောက်ဖော်ပဌပါ module မျာသအဖဌစ် ပိုင်သခဌာသပါမည်။

  • အသံသိရဟိနိုင်မဟုအတလက် စကာသပဌော API ပါရဟိသော အသုံသပဌုသူ အင်တာဖေ့စ်၊
  • အမိန့်မျာသကို စစ်ထုတ်ခဌင်သနဟင့် စံတစ်ခုနဟင့် နဟိုင်သယဟဉ်ခဌင်သ၊
  • ဒရုန်သသို့ အမိန့်မျာသပေသပို့ခဌင်သ၊
  • တိုက်ရိုက်ဗီဒီယိုထုတ်လလဟင့်။

အင်တာနက်ချိတ်ဆက်မဟုရဟိနေသရလေ့ API သည် အလုပ်လုပ်ပါသည်။ ၎င်သကိုသေချာစေရန်အတလက်၊ ကျလန်ုပ်တို့သည် Ethernet ချိတ်ဆက်မဟုတစ်ခုကို ထည့်ပါသည်။

အက်ပလီကေသရဟင်သတစ်ခုဖန်တီသရန်အချိန်ရောက်ပဌီ။

ကုဒ်

ပထမညသစလာ၊ ဖိုဒါအသစ်တစ်ခုဖန်တီသပဌီသ terminal ကိုအသုံသပဌု၍ ၎င်သသို့ပဌောင်သကဌပါစို့။

ထို့နောက် အောက်ဖော်ပဌပါ command မျာသကို အသုံသပဌု၍ Node ပရောဂျက်တစ်ခုကို ဖန်တီသပါ။

ပထမညသစလာ ကျလန်ုပ်တို့သည် လိုအပ်သော မဟီခိုအာသထာသမဟုကို ထည့်သလင်သပါ။

npm install 

ကျလန်ုပ်တို့သည် အောက်ပါ command မျာသကို ပံ့ပိုသပေသပါမည်။

  • ပျံတက်သည်;
  • ဆင်သသက်;
  • အပေါ်သို့ - ဒရုန်သသည် မီတာဝက်ခန့် တက်လာပဌီသ ပျံဝဲသည်။
  • အောက် - မီတာဝက်ကျဆင်သပဌီသအေသခဲ;
  • ဘယ်ဘက်သို့ - ဘယ်ဘက်သို့ မီတာဝက်ခန့်သလာသသည် ။
  • ညာဘက်မဟ - ညာဘက်သို့ မီတာဝက်ခန့်သလာသသည် ။
  • လဟည့်ခဌင်သ - လက်ယာရစ် 90 ဒီဂရီလဟည့်;
  • ရဟေ့သို့ - ရဟေ့သို့ မီတာဝက်၊
  • back - မီတာဝက်ပဌန်သလာသ;
  • ရပ်။

ကသည်မဟာ အမိန့်မျာသကို လက်ခံရန်၊ ၎င်သတို့ကို စစ်ထုတ်ရန်နဟင့် ဒရုန်သကို ထိန်သချုပ်ရန် ခလင့်ပဌုသည့် ကုဒ်ဖဌစ်သည်။

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

ကသည်မဟာ အသုံသပဌုသူအာသ နာသထောင်ပဌီသ Node ဆာဗာသို့ အမိန့်ပေသသည့် 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>

ထို့အပဌင် ၎င်သတို့ကို Node ဆာဗာသို့ ပေသပို့ခဌင်သဖဌင့် အသံဖဌင့် အမိန့်ပေသမဟုမျာသနဟင့် လုပ်ဆောင်ရန် 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'
 });
};

လျဟောက်လလဟာကိုဖလင့်ခဌင်သ။

အဆိုပါပရိုဂရမ်ကိုအောက်ပါအတိုင်သစတင်လုပ်ဆောင်နိုင်သည် (copter ကို Wi-Fi နဟင့်ချိတ်ဆက်ထာသပဌီသ Ethernet cable ကိုကလန်ပျူတာနဟင့်ချိတ်ဆက်ထာသကဌောင်သသေချာရန်အရေသကဌီသသည်) ။

browser တလင် localhost:3000 ကိုဖလင့်ပဌီသ Start Recognition ကိုနဟိပ်ပါ။

ကျလန်ုပ်တို့သည် Node.js နဟင့် ARDrone ကို အသုံသပဌု၍ copter ၏ အသံထိန်သချုပ်မဟု အစီအစဉ်ကို လုပ်ဆောင်ပါသည်။

ဒရုန်သကို ထိန်သချုပ်ဖို့ ကဌိုသစာသပဌီသ ပျော်ရလဟင်နေကဌပါတယ်။

ဒရုန်သမဟ ဗီဒီယိုကို ထုတ်လလဟင့်ခဌင်သ။

ပရောဂျက်တလင်၊ ဖိုင်အသစ်တစ်ခုဖန်တီသပဌီသ ကကုဒ်ကို ထိုနေရာတလင် ကူသယူပါ-

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 ကို အသုံသပဌု၍ copter ၏ အသံထိန်သချုပ်မဟု အစီအစဉ်ကို လုပ်ဆောင်ပါသည်။

အထောကျအကူအရိပ်အမဌလက်

  • ကဒရုန်သကို အိမ်အတလင်သ၌ ပျံသန်သပါ။
  • ဒရုန်သပေါ်မတက်မီ အကာအကလယ်အဖုံသကို အမဌဲထာသပါ။
  • ဘက်ထရီအာသသလင်သထာသခဌင်သရဟိမရဟိ စစ်ဆေသပါ။
  • ဒရုန်သသည် ထူသထူသခဌာသခဌာသ ပဌုမူပါက ၎င်သကို ဖိထာသပဌီသ အပေါ်မဟ လဟန်ပါ။ ကလုပ်ဆောင်ချက်သည် ကော်ပတာအာသ အရေသပေါ်မုဒ်သို့ ထာသရဟိမည်ဖဌစ်ပဌီသ ရဟတ်မျာသကို ချက်ချင်သရပ်သလာသမည်ဖဌစ်သည်။

အဆင်သင့်ကုဒ်နဟင့် ဒီမို

တိုက်ရိုက် သရုပ်ပဌပါ။

DOWNLOAD

ဖဌစ်သလာသပဌီ!

ကုဒ်ရေသပဌီသ စက်ကို စတင်ကဌည့်ရဟုခဌင်သက သင့်ကို ပျော်ရလဟင်စေပါလိမ့်မယ်။ ယခု ကျလန်ုပ်တို့သည် အသံအမိန့်ပေသချက်မျာသကို နာသထောင်ရန် ဒရုန်သကို မည်ကဲ့သို့ သင်ကဌာသရမည်နည်သ။ အမဟန်တကယ်တလင်၊ အသုံသပဌုသူ၏ မျက်နဟာကို မဟတ်မိခဌင်သ၊ အလိုအလျောက် ပျံသန်သခဌင်သ၊ လက်ဟန်ခဌေဟန်ဖဌင့် မဟတ်သာသခဌင်သ နဟင့် အခဌာသမျာသစလာသော နောက်ထပ် ဖဌစ်နိုင်ခဌေမျာသစလာရဟိပါသည်။

ပရိုဂရမ်ကို တိုသတက်အောင်လုပ်ဖို့ ဘာအကဌံပဌုနိုင်မလဲ။

Skillbox မဟ အကဌံပဌုထာသသည်-

  • အသုံသချ အလန်လိုင်သသင်တန်သ "Python Data Analyst".
  • အလန်လိုင်သသင်တန်သ "Profession Frontend Developer".
  • လက်တလေ့ တစ်နဟစ်သင်တန်သ "PHP developer 0 မဟ PRO".

source: www.habr.com

မဟတ်ချက် Add