Muna tsara ikon sarrafa murya na copter ta amfani da Node.js da ARDrone

Muna tsara ikon sarrafa murya na copter ta amfani da Node.js da ARDrone

A cikin wannan koyawa za mu dubi ƙirƙira wani shiri don jirgi mara matuƙi tare da sarrafa murya ta amfani da Node.js da API magana ta yanar gizo. Copter - Parrot ARDrone 2.0.

Muna tunatarwa: ga duk masu karatu na "Habr" - rangwame na 10 rubles lokacin yin rajista a kowane kwas na Skillbox ta amfani da lambar talla "Habr".

Skillbox yana ba da shawarar: Hakikanin hanya "Mobile Developer PRO".

Gabatarwar

Jiragen sama marasa matuki suna ban mamaki. Ina jin daɗin yin wasa tare da quad dina, ɗaukar hotuna da bidiyo, ko kuma jin daɗi kawai. Amma ana amfani da motocin marasa matuki (UAVs) don fiye da nishaɗi kawai. Suna aiki a sinima, suna nazarin glaciers, kuma sojoji da wakilan sashen aikin gona suna amfani da su.

A cikin wannan koyawa za mu kalli ƙirƙirar shirin da zai ba ku damar sarrafa jirgin mara matuƙi. ta amfani da umarnin murya. Ee, dan sanda zai yi abin da ka ce ya yi. A ƙarshen labarin akwai shirye-shiryen shirye-shiryen da bidiyo na sarrafa UAV.

Iron

Muna bukatar wadannan:

  • Parrot ARDrone 2.0;
  • kebul na Ethernet;
  • makirufo mai kyau.

Za a gudanar da haɓakawa da gudanarwa akan wuraren aiki tare da Windows/Mac/Ubuntu. Da kaina, na yi aiki tare da Mac da Ubuntu 18.04.

Software

Zazzage sabuwar sigar Node.js daga na aikin site.

Ana kuma bukata sabuwar sigar Google Chrome.

Fahimtar Copter

Bari mu gwada fahimtar yadda Parrot ARDrone ke aiki. Wannan Copter yana da motoci guda hudu.

Muna tsara ikon sarrafa murya na copter ta amfani da Node.js da ARDrone

Motoci masu adawa da juna suna aiki a hanya guda. Ɗayan biyu yana jujjuya kusa da agogo, ɗayan kuma a kan agogo. Jirgin mara matuki yana motsawa ta hanyar canza kusurwar karkata zuwa saman duniya, yana canza saurin jujjuyawar injinan da sauran motsi masu iya motsawa.

Muna tsara ikon sarrafa murya na copter ta amfani da Node.js da ARDrone

Kamar yadda zamu iya gani a cikin zanen da ke sama, canza sigogi daban-daban yana haifar da canji a cikin alkiblar motsi na copter. Misali, raguwa ko haɓaka saurin jujjuyawar hagu da dama yana haifar da nadi. Wannan yana bawa jirgin mara matukin damar tashi gaba ko baya.

Ta hanyar canza gudu da alkiblar injinan, muna saita kusurwoyi masu karkatar da su waɗanda ke ba da damar kwafi don motsawa zuwa wasu kwatance. A zahiri, don aikin na yanzu babu buƙatar yin nazarin aerodynamics, kawai kuna buƙatar fahimtar ƙa'idodin asali.

Yadda Parrot ARDrone ke aiki

Jirgin mara matuki shine wurin Wi-Fi. Domin karɓa da aika umarni zuwa ga ɗan kwafi, kuna buƙatar haɗi zuwa wannan batu. Akwai aikace-aikace daban-daban da yawa waɗanda ke ba ku damar sarrafa quadcopters. Duk yana kama da wani abu kamar haka:

Muna tsara ikon sarrafa murya na copter ta amfani da Node.js da ARDrone

Da zaran an haɗa drone, buɗe tashar tashar da telnet 192.168.1.1 - wannan shine IP na Copter. Don Linux za ku iya amfani da su Linux Busybox.

Aikace-aikacen gine-gine

Za a raba lambar mu zuwa wasu kayayyaki masu zuwa:

  • mai amfani tare da API magana don gano murya;
  • tace umarni da kwatanta tare da ma'auni;
  • aika umarni zuwa jirgin mara matuki;
  • watsa shirye-shiryen bidiyo kai tsaye.

API ɗin yana aiki muddin akwai haɗin Intanet. Don tabbatar da wannan, mun ƙara haɗin Ethernet.

Lokaci yayi don ƙirƙirar aikace-aikacen!

Lambar

Da farko, bari mu ƙirƙiri sabon babban fayil kuma mu canza zuwa gare ta ta amfani da tasha.

Sannan muna ƙirƙirar aikin Node ta amfani da umarnin da ke ƙasa.

Da farko, mun shigar da abubuwan dogaro da ake buƙata.

npm shigarwa 

Za mu goyi bayan umarni masu zuwa:

  • tashi;
  • saukowa;
  • sama - drone ya tashi rabin mita kuma yana shawagi;
  • ƙasa - ya faɗi rabin mita kuma ya daskare;
  • zuwa hagu - yana tafiya rabin mita zuwa hagu;
  • zuwa dama - yana tafiya rabin mita zuwa dama;
  • juyi - yana jujjuya agogo 90 digiri;
  • gaba - yana gaba rabin mita;
  • baya - koma baya rabin mita;
  • tsaya.

Anan akwai lambar da ke ba ku damar karɓar umarni, tace su da sarrafa jirgin mara matuki.

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);

Kuma ga lambar HTML da JavaScript wacce ke sauraron mai amfani da aika umarni zuwa uwar garken 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>

Hakanan kuma lambar JavaScript don aiki tare da umarnin murya, aika su zuwa uwar garken 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'
 });
};

Kaddamar da aikace -aikacen

Ana iya ƙaddamar da shirin kamar haka (yana da mahimmanci a tabbatar cewa an haɗa copter zuwa Wi-Fi kuma an haɗa kebul na Ethernet zuwa kwamfutar).

Bude localhost: 3000 a cikin mai binciken kuma danna Fara Ganewa.

Muna tsara ikon sarrafa murya na copter ta amfani da Node.js da ARDrone

Muna ƙoƙarin sarrafa drone kuma muna farin ciki.

Watsa bidiyo daga jirgi mara matuki

A cikin aikin, ƙirƙiri sabon fayil kuma kwafi wannan lambar a can:

const http = require("http");
const drone = require("dronestream");
 
const server = http.createServer(function(req, res) {
 
require("fs").createReadStream(__dirname + "/public/video.html").pipe(res);
 });
 
drone.listen(server);
 
server.listen(4000);

Kuma ga lambar HTML, muna sanya shi a cikin babban fayil ɗin jama'a.

<!doctype html>
 <html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <title>Stream as module</title>
 <script src="/dronestream/nodecopter-client.js" type="text/javascript" charset="utf-8"></script>
 </head>
 <body>
 <h1 id="heading">Drone video stream</h1>
 <div id="droneStream" style="width: 640px; height: 360px"> </div>
 
<script type="text/javascript" charset="utf-8">
 
new NodecopterStream(document.getElementById("droneStream"));
 
</script>
 
</body>
</html>

Kaddamar kuma haɗa zuwa localhost:8080 don duba bidiyo daga kyamarar gaba.

Muna tsara ikon sarrafa murya na copter ta amfani da Node.js da ARDrone

Taimakon taimako

  • Tashi wannan jirgi mara matuki a cikin gida.
  • Koyaushe sanya murfin kariya a kan jirgin mara matukin jirgi kafin tashi.
  • Bincika idan an caja baturin.
  • Idan jirgi mara matuki ya yi ban mamaki, riƙe shi ƙasa kuma ku jujjuya shi. Wannan aikin zai sanya copter cikin yanayin gaggawa kuma rotors zasu tsaya nan da nan.

Shirye code da demo

LIVE DEMO

DOWNLOAD

Ya faru!

Rubutun code sannan kallon injin ya fara biyayya zai ba ku jin daɗi! Yanzu mun gano yadda ake koyar da jirgin mara matuki don sauraron umarnin murya. A haƙiƙa, akwai yuwuwar da yawa: tantance fuskar mai amfani, jirage masu cin gashin kansu, ganewar karimci da ƙari mai yawa.

Me zaku iya ba da shawarar inganta shirin?

Skillbox yana ba da shawarar:

source: www.habr.com

Add a comment