Rydym yn rhaglennu rheolaeth llais ar y copter gan ddefnyddio Node.js ac ARDrone
Yn y tiwtorial hwn byddwn yn edrych ar greu rhaglen ar gyfer drôn gyda rheolaeth llais gan ddefnyddio Node.js ac API lleferydd Gwe. Copter - Parrot ARDrone 2.0.
Rydym yn atgoffa:i holl ddarllenwyr "Habr" - gostyngiad o 10 rubles wrth gofrestru ar unrhyw gwrs Skillbox gan ddefnyddio'r cod hyrwyddo "Habr".
Mae drones yn anhygoel. Rwy'n mwynhau chwarae gyda fy nghwad, tynnu lluniau a fideos, neu dim ond cael hwyl. Ond mae cerbydau awyr di-griw (UAVs) yn cael eu defnyddio ar gyfer mwy nag adloniant yn unig. Maent yn gweithio mewn sinema, yn astudio rhewlifoedd, ac yn cael eu defnyddio gan y fyddin a chynrychiolwyr y sector amaethyddol.
Yn y tiwtorial hwn byddwn yn edrych ar greu rhaglen a fydd yn caniatáu ichi reoli drôn. defnyddio gorchmynion llais. Bydd, bydd y copter yn gwneud yr hyn y dywedwch wrtho am ei wneud. Ar ddiwedd yr erthygl mae rhaglen a fideo parod o reolaeth UAV.
Haearn
Mae angen y canlynol arnom:
Parot ARDrone 2.0;
Cebl Ethernet;
meicroffon da.
Bydd gwaith datblygu a rheoli yn cael ei wneud ar weithfannau gyda Windows/Mac/Ubuntu. Yn bersonol, bûm yn gweithio gyda Mac a Ubuntu 18.04.
Meddalwedd
Lawrlwythwch y fersiwn diweddaraf o Node.js o safle swyddogol.
Gadewch i ni geisio deall sut mae Parrot ARDrone yn gweithio. Mae gan y copter hwn bedwar modur.
Mae moduron gwrthgyferbyniol yn gweithio i'r un cyfeiriad. Mae un pâr yn cylchdroi clocwedd, a'r llall yn wrthglocwedd. Mae'r drôn yn symud trwy newid ongl y gogwydd o'i gymharu ag wyneb y ddaear, gan newid cyflymder cylchdroi'r moduron a nifer o symudiadau maneuverable eraill.
Fel y gallwn weld yn y diagram uchod, mae newid paramedrau amrywiol yn arwain at newid cyfeiriad symudiad y copter. Er enghraifft, mae lleihau neu gynyddu cyflymder cylchdroi'r rotorau chwith a dde yn creu rholyn. Mae hyn yn caniatáu i'r drôn hedfan ymlaen neu yn ôl.
Trwy newid cyflymder a chyfeiriad y moduron, rydyn ni'n gosod onglau tilt sy'n caniatáu i'r copter symud i gyfeiriadau eraill. Mewn gwirionedd, ar gyfer y prosiect presennol nid oes angen astudio aerodynameg, does ond angen i chi ddeall yr egwyddorion sylfaenol.
Sut mae Parrot ARDrone yn gweithio
Mae'r drôn yn fan problemus Wi-Fi. Er mwyn derbyn ac anfon gorchmynion i'r copter, mae angen i chi gysylltu â'r pwynt hwn. Mae yna lawer o wahanol gymwysiadau sy'n eich galluogi i reoli quadcopters. Mae'r cyfan yn edrych fel hyn:
Cyn gynted ag y bydd y drôn wedi'i gysylltu, agorwch y derfynell a telnet 192.168.1.1 - dyma IP y copter. Ar gyfer Linux gallwch chi ei ddefnyddio Linux Busybox.
Pensaernïaeth cais
Bydd ein cod yn cael ei rannu i'r modiwlau canlynol:
rhyngwyneb defnyddiwr gydag API lleferydd ar gyfer canfod llais;
hidlo gorchmynion a chymharu â safon;
anfon gorchmynion i'r drôn;
darllediad fideo byw.
Mae'r API yn gweithio cyn belled â bod cysylltiad Rhyngrwyd. Er mwyn sicrhau hyn, rydym yn ychwanegu cysylltiad Ethernet.
Mae'n bryd creu cais!
Côd
Yn gyntaf, gadewch i ni greu ffolder newydd a newid iddo gan ddefnyddio'r derfynell.
Yna rydyn ni'n creu prosiect Node gan ddefnyddio'r gorchmynion isod.
Yn gyntaf, rydym yn gosod y dibyniaethau gofynnol.
npm gosod
Byddwn yn cefnogi'r gorchmynion canlynol:
esgyn;
glanio;
up - mae’r drôn yn codi hanner metr ac yn hofran;
down - cwympo hanner metr a rhewi;
to the left - mynd hanner metr i’r chwith;
to the right - mynd hanner metr i’r dde;
cylchdro - cylchdroi clocwedd 90 gradd;
forward - mynd ymlaen hanner metr;
back - mynd yn ôl hanner metr;
stopio.
Dyma'r cod sy'n eich galluogi i dderbyn gorchmynion, eu hidlo a rheoli'r drôn.
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);
A dyma'r cod HTML a JavaScript sy'n gwrando ar y defnyddiwr ac yn anfon gorchymyn i'r gweinydd 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>
A hefyd cod JavaScript i weithio gyda gorchmynion llais, gan eu hanfon at y gweinydd 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'
});
};
Lansio'r cais
Gellir lansio'r rhaglen fel a ganlyn (mae'n bwysig sicrhau bod y copter wedi'i gysylltu â Wi-Fi a bod y cebl Ethernet wedi'i gysylltu â'r cyfrifiadur).
Agor localhost: 3000 yn y porwr a chliciwch ar Start Recognition.
Rydyn ni'n ceisio rheoli'r drôn ac yn hapus.
Darlledu fideo o drôn
Yn y prosiect, crëwch ffeil newydd a chopïwch y cod hwn yno:
Lansio a chysylltu â localhost: 8080 i weld fideo o'r camera blaen.
Awgrymiadau Defnyddiol
Hedfan hon drôn dan do.
Rhowch y gorchudd amddiffynnol ar eich drôn bob amser cyn tynnu.
Gwiriwch a yw'r batri wedi'i wefru.
Os yw'r drôn yn ymddwyn yn rhyfedd, daliwch ef i lawr a'i droi drosodd. Bydd y cam hwn yn rhoi'r copter yn y modd brys a bydd y rotorau'n stopio ar unwaith.
Bydd ysgrifennu cod ac yna gwylio'r peiriant yn dechrau ufuddhau yn rhoi pleser i chi! Nawr rydyn ni wedi darganfod sut i ddysgu drôn i wrando ar orchmynion llais. Mewn gwirionedd, mae yna lawer mwy o bosibiliadau: adnabod wynebau defnyddwyr, hediadau ymreolaethol, adnabod ystumiau a llawer mwy.