هواپیماهای بدون سرنشین شگفت انگیز هستند. من واقعا از بازی با چهارتایی خود، گرفتن عکس و فیلم، یا فقط لذت بردن لذت می برم. اما وسایل نقلیه هوایی بدون سرنشین (پهپاد) برای چیزی فراتر از سرگرمی مورد استفاده قرار می گیرند. آنها در سینما کار می کنند، یخچال های طبیعی را مطالعه می کنند و ارتش و نمایندگان بخش کشاورزی از آنها استفاده می کنند.
در این آموزش به ایجاد برنامه ای می پردازیم که به شما امکان کنترل پهپاد را می دهد. با استفاده از دستورات صوتی بله، هلی کوپتر کاری را که شما به آن می گویید انجام می دهد. در انتهای مقاله برنامه و فیلم آماده کنترل پهپاد وجود دارد.
آهن
ما به موارد زیر نیاز داریم:
طوطی ARDrone 2.0;
کابل اترنت؛
میکروفون خوب
توسعه و مدیریت بر روی ایستگاه های کاری با Windows/Mac/Ubuntu انجام خواهد شد. من شخصا با مک و اوبونتو 18.04 کار کردم.
بیایید سعی کنیم بفهمیم Parrot ARDrone چگونه کار می کند. این هلی کوپتر دارای چهار موتور است.
موتورهای مخالف در یک جهت کار می کنند. یک جفت در جهت عقربه های ساعت می چرخد و دیگری در خلاف جهت عقربه های ساعت. پهپاد با تغییر زاویه شیب نسبت به سطح زمین، تغییر سرعت چرخش موتورها و چندین حرکت قابل مانور دیگر حرکت می کند.
همانطور که در نمودار بالا می بینیم، تغییر پارامترهای مختلف منجر به تغییر جهت حرکت کوپتر می شود. به عنوان مثال، کاهش یا افزایش سرعت چرخش روتور چپ و راست، یک رول ایجاد می کند. این به پهپاد اجازه می دهد تا به جلو یا عقب پرواز کند.
با تغییر سرعت و جهت موتورها، زوایای شیب را تنظیم می کنیم که به کوپتر اجازه می دهد در جهات دیگر حرکت کند. در واقع، برای پروژه فعلی نیازی به مطالعه آیرودینامیک نیست، فقط باید اصول اولیه را درک کنید.
طوطی ARDrone چگونه کار می کند
پهپاد یک نقطه اتصال Wi-Fi است. برای دریافت و ارسال دستورات به هلی کوپتر باید به این نقطه متصل شوید. برنامه های مختلفی وجود دارد که به شما امکان کنترل کوادکوپتر را می دهد. همه چیز شبیه این به نظر می رسد:
به محض اتصال پهپاد، ترمینال و telnet را باز کنید 192.168.1.1 - این IP هلی کوپتر است. برای لینوکس می توانید استفاده کنید لینوکس 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 و جاوا اسکریپت است که به کاربر گوش می دهد و دستوری را به سرور 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>
و همچنین کد جاوا اسکریپت برای کار با دستورات صوتی، ارسال آنها به سرور 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 کلیک کنید.
ما سعی می کنیم پهپاد را کنترل کنیم و خوشحالیم.
پخش ویدئو از پهپاد
در پروژه، یک فایل جدید ایجاد کنید و این کد را در آنجا کپی کنید:
نوشتن کد و سپس تماشای شروع به اطاعت دستگاه به شما لذت می دهد! اکنون متوجه شده ایم که چگونه به پهپاد آموزش گوش دادن به دستورات صوتی را بدهیم. در واقع، امکانات بسیار بیشتری وجود دارد: تشخیص چهره کاربر، پروازهای مستقل، تشخیص حرکات و موارد دیگر.