మేము Node.js మరియు ARDrone ఉపయోగించి కాప్టర్ యొక్క వాయిస్ నియంత్రణను ప్రోగ్రామ్ చేస్తాము

మేము Node.js మరియు ARDrone ఉపయోగించి కాప్టర్ యొక్క వాయిస్ నియంత్రణను ప్రోగ్రామ్ చేస్తాము

ఈ ట్యుటోరియల్‌లో Node.js మరియు వెబ్ స్పీచ్ APIని ఉపయోగించి వాయిస్ నియంత్రణతో డ్రోన్ కోసం ప్రోగ్రామ్‌ను రూపొందించడం గురించి చూద్దాం. Copter - Parrot ARDrone 2.0.

మేము గుర్తు చేస్తున్నాము: Habr పాఠకులందరికీ - Habr ప్రోమో కోడ్‌ని ఉపయోగించి ఏదైనా Skillbox కోర్సులో నమోదు చేసుకున్నప్పుడు 10 రూబుల్ తగ్గింపు.

Skillbox సిఫార్సు చేస్తోంది: ప్రాక్టికల్ కోర్సు "మొబైల్ డెవలపర్ PRO".

పరిచయం

డ్రోన్లు అద్భుతమైనవి. నా క్వాడ్‌తో ఆడుకోవడం, ఫోటోలు మరియు వీడియోలు తీయడం లేదా సరదాగా గడపడం నాకు చాలా ఇష్టం. కానీ మానవరహిత వైమానిక వాహనాలు (UAVలు) కేవలం వినోదం కోసం మాత్రమే ఉపయోగించబడతాయి. వారు సినిమాలో పని చేస్తారు, హిమానీనదాలను అధ్యయనం చేస్తారు మరియు మిలటరీ మరియు వ్యవసాయ రంగం యొక్క ప్రతినిధులచే ఉపయోగించబడతారు.

ఈ ట్యుటోరియల్‌లో మేము డ్రోన్‌ను నియంత్రించడానికి మిమ్మల్ని అనుమతించే ప్రోగ్రామ్‌ను రూపొందించడాన్ని పరిశీలిస్తాము. వాయిస్ ఆదేశాలను ఉపయోగించడం. అవును, మీరు చెప్పినట్లు కాప్టర్ చేస్తుంది. వ్యాసం ముగింపులో UAV నియంత్రణ యొక్క రెడీమేడ్ ప్రోగ్రామ్ మరియు వీడియో ఉంది.

ఇనుము

మాకు ఈ క్రిందివి అవసరం:

  • చిలుక ARDrone 2.0;
  • ఈథర్నెట్ కేబుల్;
  • మంచి మైక్రోఫోన్.

Windows/Mac/Ubuntuతో వర్క్‌స్టేషన్‌లలో అభివృద్ధి మరియు నిర్వహణ నిర్వహించబడుతుంది. వ్యక్తిగతంగా, నేను Mac మరియు Ubuntu 18.04తో పనిచేశాను.

సాఫ్ట్వేర్

నుండి Node.js యొక్క తాజా వెర్షన్‌ను డౌన్‌లోడ్ చేయండి అధికారిక సైట్.

అవసరం కూడా Google Chrome యొక్క తాజా వెర్షన్.

కాప్టర్‌ను అర్థం చేసుకోవడం

Parrot ARDrone ఎలా పనిచేస్తుందో అర్థం చేసుకోవడానికి ప్రయత్నిద్దాం. ఈ కాప్టర్‌లో నాలుగు మోటార్లు ఉన్నాయి.

మేము Node.js మరియు ARDrone ఉపయోగించి కాప్టర్ యొక్క వాయిస్ నియంత్రణను ప్రోగ్రామ్ చేస్తాము

వ్యతిరేక మోటార్లు ఒకే దిశలో పనిచేస్తాయి. ఒక జత సవ్యదిశలో, మరొకటి అపసవ్య దిశలో తిరుగుతుంది. భూమి యొక్క ఉపరితలానికి సంబంధించి వంపు కోణాన్ని మార్చడం ద్వారా డ్రోన్ కదులుతుంది, మోటార్ల భ్రమణ వేగాన్ని మార్చడం మరియు అనేక ఇతర విన్యాస కదలికలు.

మేము Node.js మరియు ARDrone ఉపయోగించి కాప్టర్ యొక్క వాయిస్ నియంత్రణను ప్రోగ్రామ్ చేస్తాము

పైన ఉన్న రేఖాచిత్రంలో మనం చూడగలిగినట్లుగా, వివిధ పారామితులను మార్చడం అనేది కాప్టర్ యొక్క కదలిక దిశలో మార్పుకు దారితీస్తుంది. ఉదాహరణకు, ఎడమ మరియు కుడి రోటర్ల భ్రమణ వేగాన్ని తగ్గించడం లేదా పెంచడం ఒక రోల్‌ను సృష్టిస్తుంది. ఇది డ్రోన్ ముందుకు లేదా వెనుకకు ఎగురుతుంది.

మోటార్లు యొక్క వేగం మరియు దిశను మార్చడం ద్వారా, మేము ఇతర దిశల్లోకి వెళ్లడానికి కాప్టర్ను అనుమతించే వంపు కోణాలను సెట్ చేస్తాము. వాస్తవానికి, ప్రస్తుత ప్రాజెక్ట్ కోసం ఏరోడైనమిక్స్ అధ్యయనం చేయవలసిన అవసరం లేదు, మీరు ప్రాథమిక సూత్రాలను అర్థం చేసుకోవాలి.

చిలుక ARDrone ఎలా పని చేస్తుంది

డ్రోన్ Wi-Fi హాట్‌స్పాట్. కాప్టర్‌కు ఆదేశాలను స్వీకరించడానికి మరియు పంపడానికి, మీరు ఈ పాయింట్‌కి కనెక్ట్ చేయాలి. క్వాడ్‌కాప్టర్‌లను నియంత్రించడానికి మిమ్మల్ని అనుమతించే అనేక విభిన్న అప్లికేషన్‌లు ఉన్నాయి. ఇదంతా ఇలా కనిపిస్తుంది:

మేము Node.js మరియు ARDrone ఉపయోగించి కాప్టర్ యొక్క వాయిస్ నియంత్రణను ప్రోగ్రామ్ చేస్తాము

డ్రోన్ కనెక్ట్ అయిన వెంటనే, టెర్మినల్ మరియు టెల్నెట్ 192.168.1.1ని తెరవండి - ఇది కాప్టర్ యొక్క IP. Linux కోసం మీరు ఉపయోగించవచ్చు Linux Busybox.

అప్లికేషన్ ఆర్కిటెక్చర్

మా కోడ్ క్రింది మాడ్యూల్స్‌గా విభజించబడుతుంది:

  • వాయిస్ డిటెక్షన్ కోసం స్పీచ్ 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కి కనెక్ట్ చేయబడిందని మరియు ఈథర్నెట్ కేబుల్ కంప్యూటర్కు కనెక్ట్ చేయబడిందని నిర్ధారించుకోవడం ముఖ్యం).

బ్రౌజర్‌లో localhost: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

ఒక వ్యాఖ్యను జోడించండి