Aan isku dayno inaan fahanno sida Parrot ARDrone u shaqeeyo. Copter-kani waxa uu leeyahay afar matoor.
Matoorada iska soo horjeeda waxay u shaqeeyaan isla jiho. Labada lamaane waxay u wareegaan saacada, ka kalena saacada ka soo horjeeda. Drone-ku waxay ku dhaqaaqdaa iyadoo beddesha xagasha u janjeerta marka loo eego dusha sare ee dhulka, beddesha xawaaraha wareegga matoorada iyo dhaqdhaqaaqyo kale oo badan oo la maareyn karo.
Sida aan ku arki karno jaantuska sare, beddelidda cabbirrada kala duwan waxay keenaysaa isbeddel ku yimaada jihada dhaqdhaqaaqa kobter-ka. Tusaale ahaan, hoos u dhaca ama kordhinta xawaaraha wareeg ee wareegyada bidix iyo midig waxay abuurtaa duub. Tani waxay u ogolaaneysaa in diyaarada aan duuliyaha lahayn ay hore u socoto ama gadaal u socoto.
Anaga oo bedelayna xawaaraha iyo jihada matoorada, waxaanu dejinnay xaglo leexin taasoo u oggolaanaysa kobterku inuu u dhaqaaqo jihooyin kale. Dhab ahaantii, mashruuca hadda jira looma baahna in la barto aerodynamics, kaliya waxaad u baahan tahay inaad fahamto mabaadi'da aasaasiga ah.
Sida Parrot ARDrone u shaqeeyo
Diyaarada aan duuliyaha lahayn ayaa ah goob Wi-Fi ah. Si aad u hesho oo aad amarrada ugu dirto kobtarka, waxaad u baahan tahay inaad ku xidho bartan. Waxaa jira codsiyo badan oo kala duwan oo kuu oggolaanaya inaad maamusho quadcopters. Dhammaan waxay u egyihiin sidatan:
Isla marka diyaaradda aan duuliyaha lahayn la xiro, fur terminalka iyo telnet 192.168.1.1 - kani waa kobter-ka IP-ga. Linux waxaad u isticmaali kartaa Linux Busybox.
Qaab dhismeedka codsiga
Xeerkeena waxa loo qaybin doonaa cutubyada soo socda:
isdhexgalka isticmaalaha oo leh API hadalka ee ogaanshaha codka;
shaandhaynta amarrada iyo isbarbardhigga heerka;
u dirida amarrada diyaaradda aan duuliyaha lahayn;
baahinta muuqaalka tooska ah.
API-gu wuxuu shaqeeyaa ilaa iyo inta uu jiro xiriir internet. Si loo xaqiijiyo tan, waxaan ku darnaa isku xirka Ethernet.
Waa waqtigii la samayn lahaa codsi!
Koodhka
Marka hore, aan abuurno gal cusub oo aan u beddelno annaga oo adeegsanayna terminalka.
Waa kan koodka kuu ogolaanaya inaad aqbasho amarrada, shaandhayso oo aad xakamayso diyaaradda aan duuliyaha lahayn.
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);
Oo halkan waa HTML iyo koodka JavaScript ee dhagaysta isticmaalaha oo u soo diraya amar serverka 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>
Iyo sidoo kale koodhka JavaScript si uu ula shaqeeyo amarrada codka, u diraya server-ka 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'
});
};
Daahfurka codsiga
Barnaamijka waxaa loo bilaabi karaa sida soo socota (waxaa muhiim ah in la hubiyo in Copter-ku ku xiran yahay Wi-Fi iyo fiilada Ethernet uu ku xiran yahay kombiyuutarka).
Ka fur localhost:3000 browserka oo dhagsii Aqoonsiga bilow
Waxaan isku dayeynaa inaan xakameyno diyaaradda aan duuliyaha lahayn waana ku faraxsanahay.
Fiidiyowga laga baahinayo diyaarad aan duuliye lahayn
Mashruuca dhexdiisa, ku samee fayl cusub oo koobi ka dhig koodkan halkaas:
Bilow oo ku xidh localhost:8080 si aad muuqaal uga aragto kamarada hore.
Talooyin wax ku ool ah
Ku duul diyaaradan gudaha gudaha.
Had iyo jeer daboolka ilaalinta saar drone-kaaga ka hor intaadan duulin.
Hubi in batteriga la dallacay.
Haddi ay diyaarada aan duuliyaha lahayni u dhaqmo si la yaab leh, hoos u qabo oo ka rog. Ficilkan ayaa kobter-ka gelin doona habka degdegga ah oo rotors-ku isla markiiba wuu joogsan doonaa.
Qoritaanka koodka ka dibna daawashada mashiinka bilaabaya inuu addeeco waxay ku siin doontaa farxad! Hadda waxaan ogaanay sida loo baro diyaarad aan duuliye lahayn si ay u dhageysato amarrada codka. Dhab ahaantii, waxaa jira fursado badan oo dheeraad ah: aqoonsiga wejiga isticmaalaha, duulimaadyo madaxbannaan, aqoonsiga dhaqdhaqaaqa iyo wax ka badan.
Maxaad soo jeedin kartaa si aad u horumariso barnaamijka?