Sadržaj:

Drop Raspberry Pi s Alexa upravljanim glasom s IoT -om i AWS -om: 6 koraka (sa slikama)
Drop Raspberry Pi s Alexa upravljanim glasom s IoT -om i AWS -om: 6 koraka (sa slikama)

Video: Drop Raspberry Pi s Alexa upravljanim glasom s IoT -om i AWS -om: 6 koraka (sa slikama)

Video: Drop Raspberry Pi s Alexa upravljanim glasom s IoT -om i AWS -om: 6 koraka (sa slikama)
Video: ВСЯ НОЧЬ С ПОЛТЕРГЕЙСТОМ В ЖИЛОМ ДОМЕ, я заснял жуткую активность. 2024, Srpanj
Anonim
Image
Image
Drop Raspberry Pi s Alexa upravljanim glasom s IoT -om i AWS -om
Drop Raspberry Pi s Alexa upravljanim glasom s IoT -om i AWS -om
Drop Raspberry Pi s Alexa upravljanim glasom s IoT -om i AWS -om
Drop Raspberry Pi s Alexa upravljanim glasom s IoT -om i AWS -om

Bok! 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 mogli imati važnu ulogu 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 oni svakodnevno poboljšavaju. Nadajmo se da ste uspješni i da ćete pritom naučiti o dronovima. Sretno i hvala na čitanju. -Armaan

Pribor

Za izradu prototipa postoje različite hardverske i softverske potrebe. Koristio sam internetski vodič The Drone Dojo za izradu drona i integrirao navedene tehnologije. Za drone možete pronaći popis dijelova ovdje:

Popis dijelova dronova

Softverski zahtjevi:

  • Amazon web usluge
  • Prijenosno računalo
  • Mission Planer softver
  • Balena Etcher
  • MicroSD kartica s 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 spomenut u popisu zaliha je neophodan, pa tako i jasno razumijevanje svakog dijela. Dijelove možete pronaći na internetu i nakon što ih prikupite, nastavite čitati. Popis pjesama 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 dronova, jedini dijelovi, unatoč onome što većina misli, nisu samo motori i propeleri. U nastavku su navedene osnovne svrhe svakog dijela.

Raspberry Pi s emlidom Navio2

Ovaj je dio prilično središnji procesor i glavna točka drona. Raspberry Pi djeluje poput CPU -a računala koje šalje naredbe Navio2 da se izvrši putem PWM -a (Pulse Width Modulation Signals) do drugih dijelova drona

2. ESC -ovi (elektronički regulatori brzine)

Ovi žuti dijelovi nalaze se ispod okvira. Na Navio su priključena 4, po jedan za svaki motor. Nakon primanja 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 15-20 minuta vremena 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, ali 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, koju treba nadzirati.

8. RC kontroler i modul zajedno s PPM koderom

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

9. Okvir

Ovaj crveno -bijeli okvir djeluje kao baza 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 izgraditi dron! Naprijed do sljedećeg koraka!

Korak 2: Sastavljanje drona

Sastavljanje drona
Sastavljanje drona

Ovaj je korak vjerojatno najteži u smislu fizičkog napora. Preporučujem da imate drugu osobu za pomoć ili pokušajte upotrijebiti ruku pomoći na popisu dijelova. Proces je predug da bih ga ovdje demonstrirao, pa ću navesti još jednu vezu koju sam koristio u The Drone Dojo.

Izrada drona od maline Pi

Opet, budući da 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. Konektore zlatnog metka koji dolaze s motorima morate lemiti na ESC -ove. Zatim morate odnijeti 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 - Zatim 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 na ruke patentnim zatvaračima. Sad smo skoro gotovi.

5. Povezivanje RC kontrolera s prijamnikom - Pokušajte slijediti upute na gornjem popisu pjesama za povezivanje RC kontrolera pomoću ESC -a.

6. Dovršavanje dijelova na okviru - Ljepljiva traka ili remen na telemetrijskom modulu na okviru. Ljepljivom trakom PPM koder također zalijepite 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. Pomoću patentnih zatvarača 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. Odbor. Zavezao sam i zalijepio modul napajanja za okvir. Sada je vaš hardver prilično postavljen. A 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 -ove 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 za reprodukciju iz posljednjeg koraka. Međutim, vjerojatno znate kako postaviti RasPi. Ali ovaj put to radimo bez glave. Pomoću Balena Etcher snimite OS s web stranice Navio OS na MicroSD karticu. Dok je priključen na vaše računalo, uđite u wpa dostavljač pomoću bilješke ++. Nakon toga unesite ssid i lozinku za povezivanje Raspberry Pi na vaš WiFi. Zatim morate dodati datoteku pod nazivom 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 naredbeni redak i upisao "ssh pi@navio" za povezivanje u mom slučaju, ili možete pronaći IP adresu i ssh na taj način. Nakon povezivanja upotrijebite ovaj video za postavljanje i konfiguriranje Navia. Da biste postavili telemetriju, najprije 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 IP -a GCS -a (zemaljske upravljačke postaje, primjerice prijenosnog računala). Kad se povežete s planerom misija, pomoću čarobnjaka za postavljanje možete kalibrirati sve dijelove drona. Ako vam je potrebna pomoć, ponovno pogledajte popis za reprodukciju. Obično, kad god postavite, gotovo uvijek dolazi do pogreš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! Svoj RC kontroler i način leta možete postaviti na planeru misija. Pokušajte držati lijevi štap pet sekundi kraj samog desnog dohvata da aktivirate bespilotnu letjelicu. Ne preporučujem let bez gledanja vodiča jer je bespilotna letjelica vrlo krhka 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 učiti o AWS -u i programiranju drona!

Korak 4: Programiranje drona za let s Pythonom

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

Prije nego što uđemo u AWS, prvo bismo trebali razumjeti kako programirati bespilotnu letjelicu za let. Nakon početnog postavljanja, integriranje glasovnog upravljanja ne bi trebalo biti teško. Prva stvar koju možemo pokušati osjetiti je napraviti jednostavan program uzlijetanja i slijetanja. Nakon postavljanja Raspberry Pi -a, možemo ponovno u njega ubaciti SSH. Možete ponovno pogledati popis za reprodukciju ili slijediti moje upute.

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

Idemo sada inicijalizirati izvorne datoteke

ažuriranje podmodula git --init --rekurzivno

2. Zatim moramo sastaviti firmver na Raspberry Pi

Prije sljedećih koraka svakako prijeđite na/src/ardupilot/s cd -om

Zatim za kofiguriranje posebno za Navio koristeći

./waf configure --board = navio2

Zatim možete kompajlirati s

./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.usluga

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

Tada možemo ponovno početi s

sudo systemctl ponovno pokrenite arducopter

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

4. Instaliranje DroneKita

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 nego što napišemo skriptu.

Python paket možemo instalirati s

pip install dronekit == 2.9.1

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

Da bismo provjerili je li instaliran, možemo učiniti a

zamrzavanje pipa | grep dronekit

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

5. uzlijetanje_i_zemlja.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, upotrijebite vi takeoff_and_land.py ## za izradu programa

U protivnom možete pogledati ili upotrijebiti priloženu datoteku i upotrijebiti protokol prijenosa datoteke. Ovaj program možemo kasnije isprobati. Prvo da pojasnimo da se radi o python datoteci koju moramo koristiti

chmod +x uzlijetanje_i_zemlja.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 prekid veze, ne brinite, postoji nešto što možete učiniti. Otvorite drugi 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. To bi trebalo pomoći pri povezivanju drona. Kad to učinite, imam izazov za vas. Pokušajte shvatiti što drugi program (set_velocity_body.py) radi i kako ga natjerati da radi. Ako to učinite, dobar posao.

6. Naprijed!

Sada možemo upotrijebiti to znanje kako bismo našim dronom upravljali glasom. Alexa upravljanje bespilotnim letjelicama koristi mnoge od ovih značajki i više. Sretno i dalje!

Korak 5: Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovnog upravljanja

Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovnog upravljanja
Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovnog upravljanja
Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovnog upravljanja
Korištenje Amazon Alexa i Amazon Web Services za integraciju glasovnog upravljanja

Ovaj je korak jedan od manje dokumentiranih. To znači da će se najteže riješiti problem. Za početak rada trebalo mi je otprilike mjesec dana, možda i više. Ovdje je najvažnije biti strpljiv. Ova značajka, 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 certifikat jednim klikom. Zatim, nakon što vidite zaslon s certifikatom, svakako preuzmite svaki ključ, uključujući korijenski CA. Tada možete otići dovršiti stvaranje stvari. Zatim moramo stvoriti politiku. Vratite se na IoT Core. Zatim kliknite na siguran i kliknite politike. Zatim pritisnite Stvori politiku. Zatim možete stvoriti ime i dodati resurse. U akciji upišite iot * i upišite * ispod resursa i pogodite za dopuštanje učinka. Zatim se vratite na svoju stvar i idite na svoj certifikat. Ovdje dotaknite 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 moramo imati pri ruci. Morate prenijeti ključne datoteke na Raspberry Pi. Također biste trebali pip instalirati AWSIoTPythonSDK 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 učitati datoteku. Ako program ne preuzima poruke s AWS IoT -a tijekom testiranja, ne brinite! To je možda moja greška jer upravljačka datoteka Alexa Drone 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 ponovno pokrenuti. Ispričavam se zbog toga. Nakon što vaš IoT počne raditi s programom na RasPi -u, možete integrirati dronekit kôd iz datoteke za upravljanje Alexa Drone 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 # install AWS Device SDK za Python ako već nije instaliran ako [! -d./aws-iot-device-sdk-python]; zatim printf "\ nInstaliranje AWS SDK-a … / n" git kloniranje https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# pokrenite pub/sub sample aplikaciju pomoću certifikata preuzetih 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

Neće vam to svima uspjeti jer su imena različita. Umjesto ključeva koje sam koristio, prilikom prijenosa datoteke zamijenite ih vašim ključevima. Prije prijenosa datoteke svakako izađite iz dk -a! To bi za sada trebalo biti sve što morate učiniti.

3. Izgradnja vaše Alexa vještine

Čini se da je ovaj korak puno teži nego što uistinu jest. Prvo se moramo prijaviti na Alexa Developer konzolu. Zatim, samo pritisnite stvoriti vještinu. Kad traži odabir modela za svoju vještinu, samo pritisnite običaj. Kad vas pita za odabir metode, učinite 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 zaslon Stvoritelja vještina s popisom za provjeru s desne strane. Odavde možemo početi razvijati svoju vještinu. Prvo na popisu za provjeru je naziv poziva. Ovo ćete Alexa reći da se pozove na vašu vještinu. Za mene sam samo svoje zazivno ime stavio kao dron. Sada možemo prijeći na svoje namjere, izgovore i slotove. Ovdje možete napraviti komande za bespilotnu letjelicu, primjerice ići gore 1 metar ili ići desno ili dolje. Moj zasad radi samo s jednim metrom. Možete kliknuti JSON Editor na dnu lijeve ploče. Zatim u njega možete zalijepiti sljedeći kôd.

Nakon što zalijepite kôd u JSON Editor, možete kliknuti na treći korak kontrolnog popisa i on će za vas izgraditi vaš model interakcije. S ovim korakom, za sada ćete biti gotovi. Za sada možete ostaviti prazno mjesto krajnje točke!

Korak 4: Izgradnja vaše lambda funkcije

Ovaj korak ćete morati sami shvatiti. Reći ću vam kako ga spojiti na Alexa Skill, ali to ćete morati sami kodirati. Dakle, prvo idite na upravljačku konzolu AWS. Zatim idite na Lambdu. Zatim možete stvoriti funkciju koja će joj dati ime kako god želite. Napišite ga od nule i učinite vrijeme izvođenja programskim jezikom koji ž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 na Alexa vještinu. Sada idite na krajnju točku. Možete zalijepiti svoj ARN, spremiti i izgraditi novi model. Zatim uzmite ID Alexa vještine 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 kôd. Za savjete možete na donjim web stranicama.

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 doista 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; // Usmjeravanje dolaznog zahtjeva na temelju vrste (LaunchRequest, IntentRequest, itd.) JSON tijelo zahtjeva nalazi se u parametru događaja. export.handler = funkcija (događaj, kontekst) {try {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); }}; /*** Zove se kada sesija započne. */ funkcija onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Poziva se kada korisnik pokrene vještinu bez navođenja što ž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 za ovu vještinu. */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 (namjera, sesija); } else if ("TurnIntent" === intentName) {doTurnIntent (namjera, sesija); } else if ("HelpIntent" === intentName) {getWelcomeResponse (); } else {throw "Neispravna namjera"; }} /*** Poziva se kada korisnik završi sesiju. * Ne poziva se kad 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 ARMED? var repromptText = "Dron spreman za naredbu."; 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", "natrag", "natrag", "desno", "lijevo", "gore", "dolje", "ravno", "naprijed", "ravno naprijed"]; var validUnits = ["stopa", "stope", "metar", "metri", "dvorište", "dvorišta"]; repromptText = "Reci mi koliko daleko da idem i u kojem smjeru."; var fail = false; // provjeravamo unose if (! (parseInt (udaljenost)> = 1)) {govorOutput = "Nisam mogao razumjeti udaljenost koju želite prevaliti."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "Nisam mogao razumjeti smjer u kojem želite da putujem."; fail = istina; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Nisam mogao razumjeti jedinicu kojom želite putovati."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (! fail) {var cardTitle = "Dron ide" + smjer + "" + udaljenost + "" + jedinica; speechOutput = "Ide" + smjer + "" + 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 naredba 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) {speechOutput = "Nisam mogao razumjeti naredbu."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Izvršavanje naredbe Drone" + zadatak; speechOutput = "Izvršavanje naredbe" + zadatak; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcija doTurnIntent (namjera, sesija, povratni poziv) {

// var cardTitle = "Drone Turn …"; 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 = "Drone okretanje" + 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 ("pogreška", (funkcija (pogreška, odobreno) {console.log ("MQTT POGREŠKA KLIJENTA !!" + pogreš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čeni: