Sadržaj:

Drop Raspberry Pi sa Alexa glasovnim upravljanjem sa IoT -om i AWS -om: 6 koraka (sa slikama)
Drop Raspberry Pi sa Alexa glasovnim upravljanjem sa IoT -om i AWS -om: 6 koraka (sa slikama)

Video: Drop Raspberry Pi sa Alexa glasovnim upravljanjem sa IoT -om i AWS -om: 6 koraka (sa slikama)

Video: Drop Raspberry Pi sa Alexa glasovnim upravljanjem sa IoT -om i AWS -om: 6 koraka (sa slikama)
Video: BlitzWolf BW-IS22 - Сигнализация, wi-fi + GSM, Tuya Smart, интеграция и управление в Home Assistant 2024, Juli
Anonim
Image
Image
Alexa Voice Controlled Raspberry Pi Drone sa IoT -om i AWS -om
Alexa Voice Controlled Raspberry Pi Drone sa IoT -om i AWS -om
Alexa Voice Controlled Raspberry Pi Drone sa IoT -om i AWS -om
Alexa Voice Controlled Raspberry Pi Drone sa IoT -om i AWS -om

Zdravo! Moje ime je Armaan. Ja sam 13-godišnji dječak iz Massachusettsa. Ovaj vodič prikazuje, kao što možete zaključiti iz naslova, kako izgraditi Raspberry Pi Drone. Ovaj prototip pokazuje kako se bespilotne letjelice razvijaju, kao i koliko bi veliku ulogu mogli odigrati u budućnosti. Definitivno mogu vidjeti sebe kako se budim za 10 godina i tražim od drona da mi doručkuje. Dron koristi Amazon Alexa, Amazon Web Services, IoT (Internet of Things) i najvažnije Raspberry Pi za pokretanje. Namijenjen je demonstraciji i informiranju o bespilotnim letjelicama i tome kako se svakodnevno poboljšavaju. Nadajmo se da ste uspješni i da ćete pritom naučiti o dronovima. Sretno i hvala na čitanju. -Armaan

Supplies

Za izradu prototipa postoje različiti hardverski i softverski zahtjevi. Koristio sam internetsko uputstvo kompanije The Drone Dojo za izradu drona i integrirao navedene tehnologije. Za bespilotnu letjelicu možete pronaći popis dijelova ovdje:

Lista dijelova dronova

Softverski zahtjevi:

  • Amazon web usluge
  • A Laptop
  • Mission Planer softver
  • Balena Etcher
  • MicroSD kartica sa Raspbian datotekom nalazi se ovdje
  • Amazon Alexa, fizički ili virtualni

Korak 1: Prikupljanje i razumijevanje dijelova

Prikupljanje i razumijevanje dijelova
Prikupljanje i razumijevanje dijelova

Svaki dio naveden u popisu zaliha je neophodan, pa je potrebno i jasno razumijevanje svakog dijela. Dijelove možete pronaći na internetu i nakon što ih prikupite, nastavite čitati. Plejlistu The Drone Dojo za potpuno razumijevanje dijelova možete pronaći ovdje. Objašnjenje od 4 minute na mom youtube kanalu možete pronaći ovdje. Što se tiče bespilotnih letjelica, jedini dijelovi, unatoč onome što većina misli, nisu samo motori i propeleri. U nastavku su navedene osnovne svrhe svakog dijela.

Raspberry Pi sa Emlid Navio2

Ovaj dio je prilično centralni procesor i glavna tačka drona. Raspberry Pi djeluje kao CPU računara koji šalje naredbe Navio2 da se izvrši putem PWM -a (Pulse Width Modulation Signals) do drugih dijelova drona

2. ESC -ovi (elektronski kontroleri brzine)

Ovi žuti dijelovi nalaze se ispod okvira. Na Navio su priključena 4, po jedan za svaki motor. Po prijemu PWM signala, oni okreću motore i započinju let.

3. Motori

Motori ne trebaju previše objašnjenja jer ste ih vjerojatno upoznali. Rotiraju i okreću propelere kako bi stvorili potisak.

4. Propeleri

Propeleri stvaraju potisak za let drona. Okreću se u istom smjeru kao i motori za podizanje vozila.

5. Baterija i modul napajanja

LiPo baterija napaja cijeli dron kroz okvir pomoću modula za napajanje. Daje oko 15-20 minuta leta i djeluje kao izvor energije.

6. GPS

GPS komunicira sa satelitima radi određivanja položaja drona. Određuje visinu, zemljopisnu širinu i dužinu. Može se koristiti za geografske ograde, međutočke, kao i za pomicanje na određene položaje ili smjerove.

7. Telemetrijski modul

Telemetrijski modul povezuje naš dron sa zemaljskom kontrolnom stanicom, u našem slučaju Planer misija, koja će se nadzirati.

8. RC kontroler i modul zajedno sa PPM enkoderom

RC kontroler koristi radio za prijenos signala i naredbi do RC modula za ručno upravljanje dronom. PPM koder prevodi ove signale za obradu i izvršavanje Navio + RPI.

9. Okvir

Ovaj crveno -bijeli okvir djeluje kao osnova ili platforma za postavljanje ostalih dijelova. Okvir je aerodinamičan i lagan, stoga savršen za izradu naših bespilotnih letjelica.

Sada sa znanjem o svakom dijelu, konačno možemo napraviti dron! Naprijed do sljedećeg koraka!

Korak 2: Sastavljanje drona

Sastavljanje drona
Sastavljanje drona

Ovaj korak je vjerovatno najteži u smislu fizičkog napora. Preporučujem pomoć druge osobe ili pokušajte upotrijebiti ruku pomoći na popisu dijelova. Proces je predug da bi se ovdje demonstrirao, pa ću navesti još jednu vezu koju sam koristio u The Drone Dojo.

Izrada Raspberry Pi drona

Opet, kako neću ulaziti u previše detalja, samo ću istaknuti osnove svakog koraka.

1. Organizirajte svoje zalihe - Prikupite naše materijale i pobrinite se da im bude lako dostupan

2. Planirajte svoju izgradnju - Organizirajte svoje dijelove na okviru kako biste napravili nacrt onoga što ćete izgraditi

3. Lemljenje - Ovo je posao koji je malo teško raditi sam. Morate lemiti konektore zlatnog metka koji dolaze s motorima na ESC -ove. Zatim morate uzeti donji dio okvira i lemiti ESC -ove na donji okvir ili ploču za distribuciju energije. Modul baterije također će biti lemljen na ploči za distribuciju energije

4. Postavljanje okvira - tada morate uvrnuti gornji dio okvira zajedno s rukama. Zatim možete pričvrstiti Raspberry Pi na vrh kako god želite. (Koristio sam ljepljivu traku). Tada možete ESC-ove pričvrstiti za ruke pomoću patentnih zatvarača. Sada smo skoro gotovi.

5. Vezivanje RC kontrolera za prijemnik - Pokušajte slijediti upute u gornjoj playlisti kako biste povezali RC kontroler pomoću ESC -a.

6. Dovršavanje dijelova na okviru - Ljepljiva traka ili traka na telemetrijskom modulu na okviru. Zalijepite PPM koder ljepljivom trakom na ruku. Sada možete spojiti ESC i PPM koder na Navio.

7. GPS nosač + baterija - sastavite GPS nosač s različitim vijcima i dijelovima. Koristeći patentne zatvarače, pričvrstite GPS na okvir. Nisam nužno koristio GPS nosač zbog njegove krhkosti, ali na vama je. Zatim možete umetnuti bateriju između Power Dist. Board. Zakačio sam i zalijepio modul za napajanje na okvir. Sada je vaš hardver prilično postavljen. Sada dio koji čekamo!

8. Ugradnja propelera !!! - Propelere možete zategnuti pomoću tablice navedene u popisu za reprodukciju. Zatim možete priključiti ESC na motore i konačno smo završili s izgradnjom drona.

Softver je na redu, pa naprijed!

Korak 3: Konfiguriranje Raspberry Pi i GCS (Planer misija)

Konfiguriranje Raspberry Pi i GCS (Planer misija)
Konfiguriranje Raspberry Pi i GCS (Planer misija)

Opet, detaljnije upute možete pronaći na popisu pjesama iz posljednjeg koraka. Međutim, vjerojatno znate kako postaviti RasPi. Ali ovaj put to radimo bez glave. Koristite Balena Etcher za snimanje operativnog sistema sa web stranice Navio OS na MicroSD karticu. Dok je priključen na vaš računar, idite u wpa molitelj koristeći notepad ++. Nakon toga unesite ssid i lozinku da se Raspberry Pi poveže na vaš WiFi. Zatim morate dodati datoteku koja se zove SSH. To može biti putem naredbenog retka ili na neki drugi način. Sada možemo SSH. Možete koristiti naredbeni redak ili Putty. Koristio sam komandnu liniju i otkucao "ssh pi@navio" za povezivanje u mom slučaju, ili možete pronaći IP adresu i ssh na taj način. Nakon povezivanja koristite ovaj video za postavljanje i konfiguriranje Navio -a. Da biste postavili telemetriju, prvo morate izvršiti izmjene na Raspberry Pi. Slijedite ovo za uređivanje i pokušajte se povezati s Planerom misija. Ako telemetrija ne radi, možete poništiti uređivanje i povezati se pomoću UDB veze unošenjem svoje GCS (zemaljske kontrolne stanice, poput prijenosnog računala) IP -a. Nakon što se povežete s planerom misija, pomoću čarobnjaka za postavljanje možete kalibrirati sve dijelove drona. Ako vam je potrebna pomoć, pogledajte ponovo listu za reprodukciju. Obično, kad god postavite, gotovo uvijek dolazi do greške. Rješavanje problema jedan je od najvećih dijelova ovog projekta. Ne mogu vam tu pomoći jer nisam svjestan vaših grešaka, ali većina grešaka može se ispraviti uz pomoć interneta. Nakon što je sve spremno, dron je spreman za let! Možete postaviti svoj RC kontroler i načine leta na planeru misije. Pokušajte držati lijevi štap pet sekundi do samog desnog dohvata da aktivirate bespilotnu letjelicu. Ne preporučujem let bez gledanja vodiča jer je dron vrlo krhak i lako se može slomiti. Za mene je prvi put kad sam letio slomio GPS nosač i neke propelere. Ako vam nije potrebna glasovna kontrola, ovdje možete stati. Nastavite s učenjem o AWS -u i programiranju drona!

Korak 4: Programiranje drona za letenje s Pythonom

Programiranje drona za let s Pythonom
Programiranje drona za let s Pythonom

Prije ulaska u AWS, prvo bismo trebali razumjeti kako programirati bespilotnu letjelicu da leti. Nakon početnog postavljanja, integriranje glasovne kontrole ne bi trebalo biti teško. Prva stvar koju možemo pokušati steći je jednostavni program uzlijetanja i slijetanja. Nakon postavljanja Raspberry Pi -a, možemo ponovo uključiti SSH u njega. Možete ponovo pogledati listu za reprodukciju ili slijediti moja uputstva.

1. Prvo preuzmite ArduPilot izvorni kod u direktorij na Raspberry Pi

mkdir src

Zatim preuzmite datoteke s GitHub -a koristeći git clone

git clone -b Copter -3.6.11

Idemo sada na /src /ardupilot

cd src

cd ardupilot

Sada, inicijaliziramo izvorne datoteke

git ažuriranje podmodula --init --recursive

2. Zatim moramo kompajlirati firmver na Raspberry Pi

Prije nego učinite sljedeće korake, svakako idite na/src/ardupilot/s cd -om

Zatim konfigurirati posebno za Navio koristeći

./waf configure --board = navio2

Zatim možete kompajlirati sa

./waf -ciljna kanta/ardukopter

3. Sada možemo instalirati izvorni kod na Navio

Prvo idemo do pravog direktorija.

cd/etc/systemd/system

Zatim uredite datoteku

sudo vi arducopter.service

Gdje piše ExecStart, umetnite sljedeće umjesto onoga što već postoji

ExecStart =/bin/sh -c "/home/pi/src/arducopter/build/navio2/bin/arducopter $ {ARDUPILOT_OPTS}"

Sada, za provođenje izvornog koda ardupilota u akciju, možemo koristiti

sudo systemctl daemon-reload

Zatim možemo ponovo početi sa

sudo systemctl ponovo pokrenite arducopter

Zadnjim korakom konačno smo dovršili postavljanje ArduPilota na naš dron

4. Instaliranje DroneKit -a

DroneKit je softver koji ćemo koristiti za programiranje drona na let. Da biste razumjeli neke kodove, dokumentaciju možete pronaći ovdje. Prvo moramo instalirati paket na naš dron prije pisanja skripte.

Python paket možemo instalirati sa

pip install dronekit == 2.9.1

Ovo može, ali i ne mora biti najnovija verzija, ali to je ona koju sam koristio pa mogu pomoći u rješavanju problema.

Da bismo provjerili je li instaliran, možemo učiniti sljedeće

pip freeze | grep dronekit

Sada smo konačno spremni za izradu našeg prvog python skripta

5. takeoff_and_land.py

UPOZORENJE! Predlažem da uspostavite osnovno razumijevanje pythona kako biste mogli naučiti i razumjeti kôd. Ako želite sami napisati program, slijedite ovaj video.

## Prvo nemojmo stvarati direktorij za pohranu ovog koda

cd dk ## Ako želite to učiniti sami, koristite vi takeoff_and_land.py ## za kreiranje programa

U suprotnom, možete pogledati ili koristiti priloženu datoteku i koristiti protokol za prijenos datoteka. Ovaj program možemo kasnije isprobati. Prvo da pojasnimo da je to python datoteka koju moramo koristiti

chmod +x takeoff_and_land.py

Zatim pokušajte upotrijebiti sljedeći kôd za pokretanje

python takeoff_and_land.py --connect 127.0.0.1:14550

Ni meni prvi put nije upalilo. Ako postoji vremensko ograničenje veze, ne brinite, postoji nešto što možete učiniti. Otvorite još jedan upit i ssh. Možete pokušati instalirati nešto što se zove mavproxy i pokušati ga pokrenuti. Nakon toga možete pokrenuti oboje istovremeno. Ovo bi trebalo pomoći pri povezivanju drona. Kad to učinite, imam izazov za vas. Pokušajte shvatiti šta drugi program (set_velocity_body.py) radi i kako ga natjerati da radi. Ako to učinite, dobar posao.

6. Napred!

Sada možemo koristiti ovo znanje kako bismo našim dronom upravljali glasom. Alexa kontrola bespilotnih letjelica koristi mnoge od ovih funkcija i više. Sretno i dalje!

Korak 5: Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovne kontrole

Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovne kontrole
Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovne kontrole
Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovne kontrole
Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovne kontrole

Ovaj korak je jedan od manje dokumentiranih. To znači da će biti najteže otkloniti probleme. Za početak rada trebalo mi je oko mjesec dana, možda i više. Ovdje je najvažnije biti strpljiv. Ova funkcija, ako se implementira u stvarnom životu, može promijeniti život. Možete samo reći Alexa da vam nabavi namirnice umjesto da idete sami. Zamisli to! Dakle, bez daljnjih odlaganja, uđimo u to!

1. Registriranje Raspberry Pi -a kao stvari na AWS IoT -u

Da bismo koristili IoT (Internet of Things), potrebno nam je nešto. Stoga se moramo prijaviti na AWS konzolu da bismo prvo koristili AWS IoT. Zatim idite na IoT Core. Kad stignete tamo, trebate kliknuti Upravljanje, a zatim stvoriti stvar. Nakon dodavanja imena, za povezivanje nam je potreban certifikat. Preporučio bih da kliknete na certifikaciju jednim klikom. Zatim, nakon što vidite zaslon s certifikatom, svakako preuzmite svaki ključ uključujući i osnovni CA. Tada možete otići i završiti stvaranje stvari. Zatim moramo kreirati politiku. Vratite se na IoT Core. Zatim kliknite na siguran i kliknite politike. Zatim pritisnite kreiraj politiku. Zatim možete stvoriti ime i dodati resurse. Pod akcijom, upišite iot * i upišite * ispod resursa i pogodite za omogućavanje učinka. Zatim se vratite na svoju stvar i idite na svoj certifikat. Ovdje dođite do pravila. Zatim možete priložiti svoju politiku za stvar i sve je spremno!

2. Postavljanje koda na Raspberry Pi i interakcija s IoT -om

Za ovaj dio trebat će vam SFTP klijent (koristio sam WinSCP) za prijenos datoteka. Nakon povezivanja na naš Raspberry Pi, ključeve certifikata ćemo morati imati pri ruci. Morate prenijeti ključne datoteke na Raspberry Pi. Također biste trebali instalirati AWSIoTPythonSDK pip pipom na Raspberry Pi. Zatim idite u direktorij dk na Raspberry Pi. Za komunikaciju s IoT -om koristite Alexa Drone Control datoteku koju sam dao. Za korištenje ove datoteke koristio sam Shell Script za pokretanje. Prikazat ću donji kôd jer iz nekog razloga ne mogu otpremiti datoteku. Ne brinite ako program ne preuzima poruke s AWS IoT -a! Ovo je možda moja greška jer Alexa kontrolna datoteka drona možda ne odgovara vašoj stvari. Dakle, da biste to popravili, vratite se na AWS IoT i pritisnite lijevo na ploči za učenje. Slijedite upute i možda ćete morati ponovo pokrenuti. Izvini zbog toga. Kada vaš IoT počne raditi s programom na RasPi -u, možete integrirati dronekit kôd iz Alexa Drone Control datoteke koju sam dao. Nakon toga upotrijebite Shell Script koji sam dao s vašim certifikatima i Rest API Endpoint iz IoT -a.

# stop script on errorset -e # Provjerite postoji li root CA datoteka, preuzmite ako ne ako [! -f./root-CA.crt]; zatim printf "\ nPreuzimanje AWS IoT Root CA certifikata iz AWS … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # instalirajte SDK AWS uređaja za Python ako već nije instaliran ako [! -d./aws-iot-device-sdk-python]; zatim printf "\ nInstaliranje AWS SDK-a … / n" git klonirajte https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py instalirajte popd fi

# pokrenite pub/sub sample aplikaciju koristeći certifikate preuzete u paketu

printf "\ nPokretanje pub/sub uzorka aplikacije … / n" python dk/AlexaDroneControl.py --connect 127.0.0.1:14550 -e "Vaš IoT ARN" -r root -CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

Ovo neće raditi za sve vas jer su imena različita. Umjesto ključeva koje sam koristio, prilikom prijenosa datoteke zamijenite ih vašim ključevima. Prije prijenosa datoteke obavezno izađite iz dk -a! To bi trebalo biti sve što trebate učiniti za sada.

3. Izgradnja vaše Alexa vještine

Ovaj korak izgleda mnogo teže nego što zaista jeste. Prvo se moramo prijaviti na Alexa Developer konzolu. Zatim samo pritisnite stvoriti vještinu. Kad traži da odaberete model za svoju vještinu, samo pritisnite custom. Kad traži da odaberete metodu, pritisnite svoju vlastitu. Možete ga nazvati kako god želite. Predložak nije potreban, pa odaberite početak od početka. Zatim, nakon što ste stvorili svoju vještinu, trebali biste doći na ekran za izradu vještina sa kontrolnom listom s desne strane. Odavde možemo početi razvijati svoju vještinu. Prvo na kontrolnoj listi je naziv poziva. Ovo ćete Aleksa reći da se pozove na vašu vještinu. Za mene, samo sam stavio svoj poziv na poziv kao dron. Sada možemo prijeći na naše namjere, izjave i slotove. Ovdje možete izvršiti komande za bespilotnu letjelicu, npr. Ići gore 1 metar ili ići desno ili dolje. Moj za sada radi samo s jednim metrom. Možete kliknuti na JSON Editor na dnu lijeve ploče. Zatim u njega možete zalijepiti sljedeći kôd.

Nakon lijepljenja koda u JSON Editor, možete kliknuti na treći korak kontrolne liste i on će za vas izgraditi vaš model interakcije. Ovim korakom ćete za sada biti gotovi. Za sada možete ostaviti prazno mesto za krajnju tačku!

Korak 4: Izgradnja vaše lambda funkcije

Ovaj korak ćete morati sami shvatiti. Reći ću vam kako ga spojiti na Alexa vještinu, ali to ćete morati sami kodirati. Dakle, prvo idite na AWS upravljačku konzolu. Zatim idite na Lambdu. Zatim možete stvoriti funkciju koja će joj dati ime kako god želite. Napišite ga od nule i napravite za vrijeme izvođenja programski jezik koji god želite. Koristio sam Node.js. Da biste dodali Alexa vještinu, dodajte okidač i odaberite Alexa Skills Kit (ASK). Kopirajte svoj Lambda ARN i vratite se do Alexa vještine. Sada idite na krajnju tačku. Možete zalijepiti svoj ARN, spremiti i izgraditi novi model. Zatim uzmite Alexa Alexa Skill ID i zalijepite ga u odjeljak okidača gdje vas pita na Lambdi. Zatim se pomaknite prema dolje na Lambdi i pronađite osnovne postavke i napravite vremensko ograničenje od 10 sekundi. Sada je na vama da shvatite kod. Za savjete možete posjetiti dolje navedene web stranice.

github.com/aws/aws-iot-device-sdk-js

www.hackster.io/veggiebenz/voice-controlle…

i možete koristiti datoteku koju sam priložio, ali je nepotpuna i neće raditi.

/ *** Upravljajte svojim APM / Pixhawk quadcopterom svojim glasom, koristeći Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = require ('aws-iot-device-sdk'); var config = require ("./ config"); var deviceName = "EchoDroneControl"; // ovaj uređaj je zaista kontroler var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + DeviceName, // + "-Lambda-" + (new Date (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var client = null; // Usmjeravamo dolazni zahtjev na osnovu tipa (LaunchRequest, IntentRequest, itd.) JSON tijelo zahtjeva nalazi se u parametru događaja. export.handler = funkcija (događaj, kontekst) {probajte {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = kontekst; if (event.session.application.applicationId! == app_id) {ctx.fail ("Nevažeći ID aplikacije"); } klijent = awsIot.device (mqtt_config); client.on ("connect", function () {console.log ("Povezano na AWS IoT"); // povratni poziv ();});

if (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } if (event.request.type === "LaunchRequest") {onLaunch (event.request, event.session); } else if (event.request.type === "IntentRequest") {onIntent (event.request, event.session); } else if (event.request.type === "SessionEndedRequest") {onSessionEnded (event.request, event.session); ctx.succeed (); }} catch (e) {console.log ("EXCEPTION in handler:" + e); ctx.fail ("Izuzetak:" + e); }}; /*** Poziva se kada počinje sesija. */ funkcija onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Poziva se kada korisnik pokrene vještinu bez navođenja šta želi. */ funkcija onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Slanje na lansiranje vaše vještine. getWelcomeResponse (povratni poziv); } /*** Poziva se kada korisnik navede namjeru ove vještine. */funkcija onIntent (intentRequest, session) {//, povratni poziv) {console.log ("onIntent requestId =" + intentRequest.requestId + ", sessionId =" + session.sessionId); var intent = intentRequest.intent, intentName = intentRequest.intent.name; console.log ("REQUEST to string =" + JSON.stringify (intentRequest)); var povratni poziv = null; // Slanje obrađivačima namjera vaše vještine if ("GoIntent" === intentName) {doGoIntent (intent, session); } else if ("CommandIntent" === intentName) {doCommandIntent (intent, session); } else if ("TurnIntent" === intentName) {doTurnIntent (intent, session); } else if ("HelpIntent" === intentName) {getWelcomeResponse (); } else {throw "Neispravna namera"; }} /*** Poziva se kada korisnik završi sesiju. * Ne poziva se kada se vještina vrati shouldEndSession = true. */ funkcija onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Ovdje dodajte logiku čišćenja} // --------------- Funkcije koje kontroliraju ponašanje vještine -------------------- --- funkcija getWelcomeResponse () {// Ako želimo inicijalizirati sesiju da bismo imali neke atribute, mogli bismo ih dodati ovdje. var sessionAttributes = {}; var cardTitle = "Dobro došli"; var speechOutput = "Dobro došli u DRONE CONTROL."; // TODO: je li dron online ili offline? Ako je na mreži, je li NAoružano? var repromptText = "Dron spreman za komandu."; var shouldEndSession = false; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** upravlja GO namjerom. */ funkcija doGoIntent (namjera, sesija, povratni poziv) {// var cardTitle = "Drone GO…"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; var direction = intent.slots. Direction.value; var distance = intent.slots. Distance.value; var unit = intent.slots. Unit.value; var validDirections = ["naprijed", "naprijed", "nazad", "natrag", "desno", "lijevo", "gore", "dolje", "ravno", "naprijed", "ravno naprijed"]; var validUnits = ["stopa", "stope", "metar", "metri", "dvorište", "jardi"]; repromptText = "Reci mi koliko daleko da idem i u kom pravcu."; var fail = false; // potvrđujemo unose if (! (parseInt (udaljenost)> = 1)) {govorOutput = "Nisam mogao razumjeti udaljenost koju želite da pređem."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {govorOutput = "Nisam mogao razumjeti smjer u kojem želite da putujem."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Nisam mogao razumjeti jedinicu kojom želite da putujem."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (! fail) {var cardTitle = "Dron ide" + pravac + "" + udaljenost + "" + jedinica; speechOutput = "Ide" + pravac + "" + udaljenost + "" + jedinica; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcija doCommandIntent (namjera, sesija, povratni poziv) {

// var cardTitle = "DROM COMMAND…"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Reci mi koja je komanda za bespilotnu letjelicu."; var task = intent.slots. Task.value; var validTasks = ["launch", "land", "r. t. l.", "hold", "stay", "stop", "return to launch", "abort"]; if (validTasks.indexOf (task) == -1) {govorOutput = "Nisam mogao razumjeti naredbu."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Izvršavanje komande Drone" + zadatak; speechOutput = "Izvršavanje naredbe" + zadatak; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcija doTurnIntent (namjera, sesija, povratni poziv) {

// var cardTitle = "Skretanje drona …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Reci mi kako želiš okrenuti dron."; var direction = intent.slots. Direction.value; var validDirections = ["desno", "lijevo", "okolo"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "Nisam mogao razumjeti smjer skretanja."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Okretanje drona" + smjer; speechOutput = "Okretanje" + smjer; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcija mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (namjera); console.log ("mqttPublish: INTENT text =" + strIntent); // client.publish ("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); client.on ("close", (function () {console.log ("MQTT CLIENT CLOSE - misli da je uspješno obavljeno."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("greška", (funkcija (greška, odobreno) {console.log ("MQTT KLIJENTSKA GREŠKA !!" + greška);})); }

// --------------- Pomagači koji sastavljaju sve odgovore -----------------------

funkcija buildSpeechletResponse (naslov, izlaz, repromptText, shouldEndSession) {return {outputSpeech: {tip: "PlainText", tekst: output}, kartica: {tip: "Jednostavno", naslov: naslov, sadržaj: izlaz}, ponovni upit: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} funkcija buildResponse (sessionAttributes, speechletResponse) {return {verzija: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}}

Preporučuje se: