Drones endah pisan. Abdi resep pisan maén sareng quad kuring, nyandak poto sareng pidéo, atanapi ngan ukur senang-senang. Tapi kandaraan hawa unmanned (UAVs) dipaké pikeun leuwih ti ngan hiburan. Aranjeunna damel di bioskop, diajar glaciers, sareng dianggo ku militér sareng wawakil sektor pertanian.
Dina tutorial ieu kami bakal ningali nyiptakeun program anu ngamungkinkeun anjeun ngadalikeun drone. ngagunakeun paréntah sora. Leres, copter bakal ngalakukeun naon anu anjeun nyarioskeun. Dina ahir artikel aya program siap-dijieun jeung video kontrol UAV.
beusi
Urang peryogi di handap ieu:
Parrot ARDrone 2.0;
kabel Ethernet;
mikropon alus.
Pangwangunan sareng manajemén bakal dilaksanakeun dina workstation sareng Windows/Mac/Ubuntu. Pribadi, kuring damel sareng Mac sareng Ubuntu 18.04.
software
Unduh versi panganyarna tina Node.js tina situs resmi.
Hayu urang coba ngartos kumaha Parrot ARDrone jalan. Ieu copter boga opat motor.
Motor lawan jalan dina arah anu sarua. Hiji pasangan muterkeun saarah jarum jam, hiji deui sabalikna jarum jam. Drone gerak ku cara ngarobah sudut inclination relatif ka beungeut bumi, ngarobah laju rotasi motor jeung sababaraha gerakan maneuverable lianna.
Sakumaha urang tiasa tingali dina diagram di luhur, ngarobah rupa parameter ngabalukarkeun parobahan arah gerak copter nu. Contona, ngurangan atawa ngaronjatkeun kagancangan rotasi tina rotors kénca jeung katuhu nyiptakeun roll a. Hal ieu ngamungkinkeun drone ngapung maju atanapi mundur.
Ku cara ngarobah laju jeung arah motor, urang nyetel sudut Dengdekkeun nu ngidinan copter pikeun pindah ka arah séjén. Sabenerna, pikeun proyék ayeuna henteu kedah diajar aerodinamika, anjeun ngan ukur kedah ngartos prinsip dasar.
Kumaha Parrot ARDrone jalan
Drone mangrupikeun hotspot Wi-Fi. Dina raraga pikeun nampa sarta ngirim Paréntah ka copter nu, anjeun kudu nyambung ka titik ieu. Aya loba aplikasi béda nu ngidinan Anjeun pikeun ngadalikeun quadcopters. Éta sadayana katingali sapertos kieu:
Pas drone disambungkeun, buka terminal jeung telnet 192.168.1.1 - ieu téh IP copter urang. Pikeun Linux anjeun tiasa nganggo Linux Busybox.
Arsitéktur aplikasi
Kode urang bakal dibagi kana modul handap:
panganteur pamaké kalawan API ucapan pikeun deteksi sora;
nyaring paréntah sareng ngabandingkeun sareng standar;
ngirim paréntah ka drone;
siaran video hirup.
API tiasa dianggo salami aya sambungan Internét. Pikeun mastikeun ieu, urang tambahkeun sambungan Ethernet.
Waktosna pikeun nyiptakeun aplikasi!
Kodeu
Kahiji, hayu urang nyieun hiji folder anyar jeung pindah ka dinya ngagunakeun terminal.
Teras urang ngadamel proyék Node nganggo paréntah di handap ieu.
Kahiji, urang install gumantungna diperlukeun.
npm install
Kami bakal ngadukung paréntah di handap ieu:
berangkat;
badarat;
ka luhur - drone naék satengah méter sareng ngalayang;
handap - ragrag satengah méter sarta freezes;
ka kénca - mana satengah méter ka kénca;
ka katuhu - mana satengah méter ka katuhu;
rotasi - rotates jarum jam 90 derajat;
maju - maju satengah méter;
balik - balik deui satengah méter;
Eureun.
Ieu kodeu anu ngamungkinkeun anjeun nampi paréntah, nyaring sareng ngontrol drone.
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);
Sareng ieu mangrupikeun kode HTML sareng JavaScript anu ngadangukeun pangguna sareng ngirim paréntah ka server 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>
Sareng ogé kode JavaScript pikeun damel sareng paréntah sora, ngirimkeunana ka server 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'
});
};
Ngajalankeun aplikasi
program nu bisa dijalankeun saperti kieu (hal anu penting pikeun mastikeun yén copter disambungkeun ka Wi-Fi jeung kabel Ethernet disambungkeun ka komputer).
Buka localhost:3000 dina browser teras klik Mimitian Pangenal.
Urang nyoba ngadalikeun drone jeung senang.
Nyiarkeun pidéo tina drone
Dina proyék éta, jieun file énggal sareng salin kode ieu di dinya:
Nulis kode lajeng ningali mesin ngawitan taat bakal masihan anjeun pelesir! Ayeuna kami parantos terang kumaha carana ngajarkeun drone pikeun ngadangukeun paréntah sora. Nyatana, langkung seueur kamungkinan: pangenal raray pangguna, penerbangan otonom, pangenal sikep sareng seueur deui.
Naon anu anjeun tiasa nyarankeun pikeun ningkatkeun program?