අපි Node.js සහ ARDrone භාවිතයෙන් කොප්ටරයේ හඬ පාලනය වැඩසටහන් කරන්නෙමු

අපි Node.js සහ ARDrone භාවිතයෙන් කොප්ටරයේ හඬ පාලනය වැඩසටහන් කරන්නෙමු

මෙම නිබන්ධනයේදී අපි Node.js සහ Web speech API භාවිතයෙන් හඬ පාලනයක් සහිත ඩ්‍රෝන යානයක් සඳහා වැඩසටහනක් නිර්මාණය කිරීම දෙස බලමු. කොප්ටර් - Parrot ARDrone 2.0.

අපි ඔබට මතක් කරමු: "Habr" හි සියලුම පාඨකයින් සඳහා - "Habr" ප්‍රවර්ධන කේතය භාවිතයෙන් ඕනෑම Skillbox පාඨමාලාවකට ලියාපදිංචි වන විට රූබල් 10 ක වට්ටමක්.

Skillbox නිර්දේශ කරයි: ප්රායෝගික පාඨමාලාව "ජංගම සංවර්ධක PRO".

හැඳින්වීම

ඩ්‍රෝන පුදුමයි. මම ඇත්තටම මගේ quad සමඟ සෙල්ලම් කිරීමට, ඡායාරූප සහ වීඩියෝ ගැනීමට, හෝ විනෝද වීමට කැමතියි. නමුත් මිනිසුන් රහිත ගුවන් යානා (UAVs) විනෝදාස්වාදයට වඩා වැඩි යමක් සඳහා භාවිතා වේ. ඔවුන් සිනමාවේ වැඩ කරන අතර, ග්ලැසියර අධ්යයනය කරන අතර, හමුදාව සහ කෘෂිකාර්මික අංශයේ නියෝජිතයන් විසින් භාවිතා කරනු ලැබේ.

මෙම නිබන්ධනයේදී අපි ඔබට ඩ්‍රෝන යානයක් පාලනය කිරීමට ඉඩ සලසන වැඩසටහනක් නිර්මාණය කිරීම දෙස බලමු. හඬ විධාන භාවිතා කරමින්. ඔව්, ඔබ කරන්න කියන දේ කොප්ටරය කරයි. ලිපියේ අවසානයේ UAV පාලනය පිළිබඳ සූදානම් කළ වැඩසටහනක් සහ වීඩියෝවක් ඇත.

යකඩ

අපට පහත සඳහන් දෑ අවශ්‍ය වේ:

  • Parrot ARDrone 2.0;
  • ඊතර්නෙට් කේබල්;
  • හොඳ මයික්රෆෝනය.

Windows/Mac/Ubuntu සමඟ වැඩපොළවල් මත සංවර්ධනය සහ කළමනාකරණය සිදු කෙරේ. පුද්ගලිකව, මම Mac සහ Ubuntu 18.04 සමඟ වැඩ කළා.

මෘදුකාංගය

Node.js හි නවතම අනුවාදය බාගන්න නිල වෙබ් අඩවිය.

එසේම අවශ්ය වේ Google Chrome හි නවතම අනුවාදය.

කොප්ටරය තේරුම් ගැනීම

Parrot ARDrone ක්‍රියා කරන ආකාරය තේරුම් ගැනීමට උත්සාහ කරමු. මෙම කොප්ටරයේ මෝටර් හතරක් ඇත.

අපි Node.js සහ ARDrone භාවිතයෙන් කොප්ටරයේ හඬ පාලනය වැඩසටහන් කරන්නෙමු

ප්‍රතිවිරුද්ධ මෝටර එකම දිශාවට ක්‍රියා කරයි. එක් යුගලයක් දක්ෂිණාවර්තව, අනෙක වාමාවර්තව භ්රමණය වේ. ඩ්‍රෝනය චලනය වන්නේ පෘථිවි පෘෂ්ඨයට සාපේක්ෂව ආනතියේ කෝණය වෙනස් කිරීම, මෝටරවල භ්‍රමණ වේගය වෙනස් කිරීම සහ තවත් උපාමාරු කළ හැකි චලනයන් කිහිපයකිනි.

අපි Node.js සහ ARDrone භාවිතයෙන් කොප්ටරයේ හඬ පාලනය වැඩසටහන් කරන්නෙමු

ඉහත රූප සටහනේ අපට දැකිය හැකි පරිදි, විවිධ පරාමිතීන් වෙනස් කිරීම කොප්ටරයේ චලනය වන දිශාව වෙනස් කිරීමට හේතු වේ. නිදසුනක් ලෙස, වම් සහ දකුණු භ්රමකවල භ්රමණ වේගය අඩු කිරීම හෝ වැඩි කිරීම රෝලයක් නිර්මාණය කරයි. මෙමගින් ඩ්‍රෝන් යානය ඉදිරියට හෝ පසුපසට පියාසර කිරීමට ඉඩ සලසයි.

මෝටරවල වේගය සහ දිශාව වෙනස් කිරීමෙන්, අපි කොප්ටරය වෙනත් දිශාවලට ගමන් කිරීමට ඉඩ සලසන නැඹුරු කෝණ සකස් කරමු. ඇත්ත වශයෙන්ම, වත්මන් ව්‍යාපෘතිය සඳහා වායුගතික විද්‍යාව හැදෑරීමට අවශ්‍ය නැත, ඔබ මූලික මූලධර්ම තේරුම් ගත යුතුය.

Parrot ARDrone ක්‍රියා කරන ආකාරය

ඩ්‍රෝනය යනු Wi-Fi හොට්ස්පොට් එකකි. කොප්ටරය වෙත විධාන ලැබීමට සහ යැවීමට, ඔබ මෙම ස්ථානයට සම්බන්ධ විය යුතුය. quadcopters පාලනය කිරීමට ඔබට ඉඩ සලසන විවිධ යෙදුම් බොහොමයක් තිබේ. ඒ සියල්ල මේ වගේ දෙයක් පෙනේ:

අපි Node.js සහ ARDrone භාවිතයෙන් කොප්ටරයේ හඬ පාලනය වැඩසටහන් කරන්නෙමු

ඩ්‍රෝනය සම්බන්ධ වූ වහාම, ටර්මිනලය සහ ටෙල්නෙට් 192.168.1.1 විවෘත කරන්න - මෙය කොප්ටරයේ IP වේ. Linux සඳහා ඔබට භාවිතා කළ හැකිය Linux Busybox.

යෙදුම් ගෘහ නිර්මාණ ශිල්පය

අපගේ කේතය පහත මොඩියුලවලට බෙදා ඇත:

  • හඬ හඳුනාගැනීම සඳහා කථන API සමඟ පරිශීලක අතුරුමුහුණත;
  • විධාන පෙරීම සහ සම්මතයක් සමඟ සංසන්දනය කිරීම;
  • ඩ්‍රෝන යානයට විධාන යැවීම;
  • සජීවී වීඩියෝ විකාශනය.

අන්තර්ජාල සම්බන්ධතාවයක් ඇති තාක් API ක්‍රියා කරයි. මෙය සහතික කිරීම සඳහා, අපි ඊතර්නෙට් සම්බන්ධතාවයක් එක් කරන්නෙමු.

යෙදුමක් නිර්මාණය කිරීමට කාලයයි!

කේතය

පළමුව, අපි නව ෆෝල්ඩරයක් සාදා ටර්මිනලය භාවිතයෙන් එයට මාරු වෙමු.

ඉන්පසු අපි පහත විධානයන් භාවිතා කර Node ව්‍යාපෘතියක් නිර්මාණය කරමු.

පළමුව, අපි අවශ්ය පරායත්තයන් ස්ථාපනය කරමු.

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 කේතය පරිශීලකයාට සවන් දී 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>

තවද හඬ විධාන සමඟ වැඩ කිරීමට JavaScript කේතය, ඒවා 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'
 });
};

යෙදුම දියත් කිරීම

වැඩසටහන පහත පරිදි දියත් කළ හැකිය (කොප්ටරය Wi-Fi වෙත සම්බන්ධ වී ඇති අතර ඊතර්නෙට් කේබලය පරිගණකයට සම්බන්ධ කර ඇති බවට වග බලා ගැනීම වැදගත් වේ).

බ්‍රවුසරයේ 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

අදහස් එක් කරන්න