Node.js மற்றும் ARDrone ஐப் பயன்படுத்தி காப்டரின் குரல் கட்டுப்பாட்டை நாங்கள் நிரல் செய்கிறோம்

Node.js மற்றும் ARDrone ஐப் பயன்படுத்தி காப்டரின் குரல் கட்டுப்பாட்டை நாங்கள் நிரல் செய்கிறோம்

இந்த டுடோரியலில் Node.js மற்றும் Web speech API ஐப் பயன்படுத்தி குரல் கட்டுப்பாட்டுடன் கூடிய ட்ரோனுக்கான நிரலை உருவாக்குவதைப் பார்ப்போம். Copter - Parrot ARDrone 2.0.

நாங்கள் நினைவூட்டுகிறோம்: "Habr" இன் அனைத்து வாசகர்களுக்கும் - "Habr" விளம்பரக் குறியீட்டைப் பயன்படுத்தி எந்த Skillbox படிப்பிலும் சேரும்போது 10 ரூபிள் தள்ளுபடி.

Skillbox பரிந்துரைக்கிறது: நடைமுறை படிப்பு "மொபைல் டெவலப்பர் புரோ".

அறிமுகம்

ட்ரோன்கள் அற்புதமானவை. எனது குவாட் உடன் விளையாடுவது, புகைப்படங்கள் மற்றும் வீடியோக்கள் எடுப்பது அல்லது வேடிக்கை பார்ப்பது எனக்கு மிகவும் பிடிக்கும். ஆனால் ஆளில்லா வான்வழி வாகனங்கள் (UAVs) வெறும் பொழுதுபோக்கிற்காக மட்டுமே பயன்படுத்தப்படுகின்றன. அவர்கள் சினிமாவில் வேலை செய்கிறார்கள், பனிப்பாறைகளைப் படிக்கிறார்கள், இராணுவம் மற்றும் விவசாயத் துறையின் பிரதிநிதிகளால் பயன்படுத்தப்படுகிறார்கள்.

இந்த டுடோரியலில், ட்ரோனைக் கட்டுப்படுத்த உங்களை அனுமதிக்கும் ஒரு நிரலை உருவாக்குவதைப் பார்ப்போம். குரல் கட்டளைகளைப் பயன்படுத்தி. ஆம், காப்டர் நீங்கள் சொல்வதைச் செய்யும். கட்டுரையின் முடிவில் UAV கட்டுப்பாட்டின் ஆயத்த திட்டம் மற்றும் வீடியோ உள்ளது.

இரும்பு

நமக்கு பின்வருபவை தேவை:

  • கிளி ARDrone 2.0;
  • ஈதர்நெட் கேபிள்;
  • நல்ல ஒலிவாங்கி.

Windows/Mac/Ubuntu உடன் பணிநிலையங்களில் மேம்பாடு மற்றும் மேலாண்மை மேற்கொள்ளப்படும். தனிப்பட்ட முறையில், நான் Mac மற்றும் Ubuntu 18.04 உடன் பணிபுரிந்தேன்.

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

Node.js இன் சமீபத்திய பதிப்பைப் பதிவிறக்கவும் அதிகாரப்பூர்வ தளம்.

மேலும் தேவை Google Chrome இன் சமீபத்திய பதிப்பு.

காப்டரைப் புரிந்துகொள்வது

Parrot ARDrone எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்துகொள்ள முயற்சிப்போம். இந்த காப்டரில் நான்கு மோட்டார்கள் உள்ளன.

Node.js மற்றும் ARDrone ஐப் பயன்படுத்தி காப்டரின் குரல் கட்டுப்பாட்டை நாங்கள் நிரல் செய்கிறோம்

எதிரெதிர் மோட்டார்கள் ஒரே திசையில் வேலை செய்கின்றன. ஒரு ஜோடி கடிகார திசையில் சுழல்கிறது, மற்றொன்று எதிரெதிர் திசையில். பூமியின் மேற்பரப்புடன் தொடர்புடைய சாய்வின் கோணத்தை மாற்றுவதன் மூலம் ட்ரோன் நகரும், மோட்டார்கள் மற்றும் பல சூழ்ச்சி இயக்கங்களின் சுழற்சியின் வேகத்தை மாற்றுகிறது.

Node.js மற்றும் ARDrone ஐப் பயன்படுத்தி காப்டரின் குரல் கட்டுப்பாட்டை நாங்கள் நிரல் செய்கிறோம்

மேலே உள்ள வரைபடத்தில் நாம் காணக்கூடியது போல, பல்வேறு அளவுருக்களை மாற்றுவது காப்டரின் இயக்கத்தின் திசையில் மாற்றத்திற்கு வழிவகுக்கிறது. உதாரணமாக, இடது மற்றும் வலது சுழலிகளின் சுழற்சி வேகத்தை குறைப்பது அல்லது அதிகரிப்பது ஒரு ரோலை உருவாக்குகிறது. இது ட்ரோனை முன்னோக்கி அல்லது பின்னோக்கி பறக்க அனுமதிக்கிறது.

மோட்டார்களின் வேகம் மற்றும் திசையை மாற்றுவதன் மூலம், காப்டரை மற்ற திசைகளில் நகர்த்த அனுமதிக்கும் சாய்வு கோணங்களை அமைக்கிறோம். உண்மையில், தற்போதைய திட்டத்திற்கு ஏரோடைனமிக்ஸ் படிக்க வேண்டிய அவசியமில்லை, நீங்கள் அடிப்படைக் கொள்கைகளைப் புரிந்து கொள்ள வேண்டும்.

Parrot ARDrone எப்படி வேலை செய்கிறது

ட்ரோன் ஒரு வைஃபை ஹாட்ஸ்பாட். காப்டருக்கு கட்டளைகளைப் பெறவும் அனுப்பவும், நீங்கள் இந்த புள்ளியுடன் இணைக்க வேண்டும். குவாட்காப்டர்களைக் கட்டுப்படுத்த உங்களை அனுமதிக்கும் பல்வேறு பயன்பாடுகள் உள்ளன. இது எல்லாம் இப்படித்தான் தெரிகிறது:

Node.js மற்றும் ARDrone ஐப் பயன்படுத்தி காப்டரின் குரல் கட்டுப்பாட்டை நாங்கள் நிரல் செய்கிறோம்

ட்ரோன் இணைக்கப்பட்டவுடன், டெர்மினல் மற்றும் டெல்நெட் 192.168.1.1 ஐ திறக்கவும் - இது காப்டரின் ஐபி ஆகும். Linux க்கு நீங்கள் பயன்படுத்தலாம் லினக்ஸ் பிஸிபாக்ஸ்.

பயன்பாட்டு கட்டமைப்பு

எங்கள் குறியீடு பின்வரும் தொகுதிகளாக பிரிக்கப்படும்:

  • குரல் கண்டறிதலுக்கான பேச்சு 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 மற்றும் ஜாவாஸ்கிரிப்ட் குறியீடு உள்ளது, இது பயனரைக் கேட்டு நோட் சேவையகத்திற்கு ஒரு கட்டளையை அனுப்புகிறது.

<!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 உடன் இணைக்கப்பட்டுள்ளதா மற்றும் ஈதர்நெட் கேபிள் கணினியுடன் இணைக்கப்பட்டுள்ளதா என்பதை உறுதிப்படுத்துவது முக்கியம்).

உலாவியில் லோக்கல் ஹோஸ்ட்: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

கருத்தைச் சேர்