Dronit ovat upeita. Nautin todella mönkijäni kanssa leikkimisestä, valokuvien ja videoiden ottamisesta tai vain hauskanpidosta. Mutta miehittämättömiä ilma-aluksia (UAV) käytetään muuhunkin kuin vain viihteeseen. He työskentelevät elokuvissa, tutkivat jäätiköitä, ja niitä käyttävät armeija ja maataloussektorin edustajat.
Tässä opetusohjelmassa tarkastellaan ohjelman luomista, jonka avulla voit ohjata dronea. käyttämällä äänikomentoja. Kyllä, kopteri tekee mitä käsket sen tehdä. Artikkelin lopussa on valmis ohjelma ja video UAV-ohjauksesta.
rauta
Tarvitsemme seuraavat:
Parrot ARDrone 2.0;
Ethernet kaapeli;
hyvä mikrofoni.
Kehitys ja hallinta toteutetaan työasemilla, joissa on Windows/Mac/Ubuntu. Henkilökohtaisesti työskentelin Macin ja Ubuntu 18.04:n kanssa.
Yritetään ymmärtää, kuinka Parrot ARDrone toimii. Tässä kopterissa on neljä moottoria.
Vastakkaiset moottorit toimivat samaan suuntaan. Yksi pari pyörii myötäpäivään, toinen vastapäivään. Drone liikkuu muuttamalla kaltevuuskulmaa suhteessa maan pintaan, muuttamalla moottoreiden pyörimisnopeutta ja useita muita ohjattavia liikkeitä.
Kuten yllä olevasta kaaviosta näemme, erilaisten parametrien muuttaminen johtaa muutokseen kopterin liikesuunnassa. Esimerkiksi vasemman ja oikean roottorin pyörimisnopeuden vähentäminen tai lisääminen luo rullauksen. Näin drone voi lentää eteen- tai taaksepäin.
Muuttamalla moottoreiden nopeutta ja suuntaa asetamme kallistuskulmat, jotka mahdollistavat kopterin liikkumisen muihin suuntiin. Itse asiassa nykyisessä projektissa ei tarvitse opiskella aerodynamiikkaa, sinun on vain ymmärrettävä perusperiaatteet.
Kuinka Parrot ARDrone toimii
Drone on Wi-Fi-hotspot. Jotta voit vastaanottaa ja lähettää komentoja kopteriin, sinun on muodostettava yhteys tähän pisteeseen. On olemassa monia erilaisia sovelluksia, joiden avulla voit ohjata nelikoptereita. Kaikki näyttää jotakuinkin tältä:
Heti kun drone on kytketty, avaa pääte ja telnet 192.168.1.1 - tämä on kopterin IP. Linuxille voit käyttää Linux Busybox.
API toimii niin kauan kuin on Internet-yhteys. Tämän varmistamiseksi lisäämme Ethernet-yhteyden.
On aika luoda sovellus!
Koodi
Luodaan ensin uusi kansio ja siirrytään siihen terminaalilla.
Sitten luomme solmuprojektin käyttämällä alla olevia komentoja.
Ensin asennamme tarvittavat riippuvuudet.
npm asentaa
Tuemme seuraavia komentoja:
ottaa pois;
lasku;
ylös - drone nousee puoli metriä ja leijuu;
alas - putoaa puoli metriä ja jäätyy;
vasemmalle - menee puoli metriä vasemmalle;
oikealle - menee puoli metriä oikealle;
kierto - pyörii myötäpäivään 90 astetta;
eteenpäin - menee eteenpäin puoli metriä;
takaisin - menee takaisin puoli metriä;
Lopettaa.
Tässä on koodi, jonka avulla voit hyväksyä komentoja, suodattaa niitä ja ohjata dronea.
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);
Ja tässä on HTML- ja JavaScript-koodi, joka kuuntelee käyttäjää ja lähettää komennon solmupalvelimelle.
<!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>
Ja myös JavaScript-koodi, joka toimii puhekomentojen kanssa ja lähettää ne Node-palvelimelle.
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'
});
};
Käynnistä sovellus
Ohjelma voidaan käynnistää seuraavasti (on tärkeää varmistaa, että kopteri on kytketty Wi-Fi-verkkoon ja Ethernet-kaapeli on kytketty tietokoneeseen).
Avaa localhost:3000 selaimessa ja napsauta Aloita tunnistus.
Yritämme hallita dronea ja olemme onnellisia.
Videon lähettäminen dronista
Luo projektissa uusi tiedosto ja kopioi tämä koodi sinne:
Koodin kirjoittaminen ja sen jälkeen koneen tottelemisen katsominen tuottaa sinulle iloa! Nyt olemme keksineet, kuinka drone opetetaan kuuntelemaan äänikomentoja. Itse asiassa mahdollisuuksia on paljon enemmän: käyttäjän kasvojentunnistus, autonomiset lennot, eleiden tunnistus ja paljon muuta.