Kazalo:

Raspberry Pi Drone z glasovnim nadzorom z IoT in AWS: 6 korakov (s slikami)
Raspberry Pi Drone z glasovnim nadzorom z IoT in AWS: 6 korakov (s slikami)

Video: Raspberry Pi Drone z glasovnim nadzorom z IoT in AWS: 6 korakov (s slikami)

Video: Raspberry Pi Drone z glasovnim nadzorom z IoT in AWS: 6 korakov (s slikami)
Video: The Choice is Ours (2016) Official Full Version 2024, Julij
Anonim
Image
Image
Alexa Voice Controlled Raspberry Pi Drone z IoT in AWS
Alexa Voice Controlled Raspberry Pi Drone z IoT in AWS
Alexa Voice Controlled Raspberry Pi Drone z IoT in AWS
Alexa Voice Controlled Raspberry Pi Drone z IoT in AWS

Živjo! Moje ime je Armaan. Sem 13-letni fant iz Massachusettsa. Ta vadnica prikazuje, kot lahko sklepate iz naslova, kako zgraditi Raspberry Pi Drone. Ta prototip prikazuje, kako se razvijajo brezpilotni letali in kako velik del bi lahko imeli v prihodnosti. Vsekakor se vidim, da se čez 10 let prebudim in prosim drona, da mi pripravi zajtrk. Dron uporablja Amazon Alexa, Amazon Web Services, IoT (Internet of Things) in predvsem Raspberry Pi. Namenjen je prikazovanju in obveščanju o brezpilotnih letalih in o tem, kako se vsak dan izboljšujejo. Upajmo, da ste uspešni in se pri tem naučite o brezpilotnih letalih. Vso srečo in hvala za branje. -Armaan

Zaloge

Za izdelavo prototipa so potrebne različne strojne in programske opreme. Za izdelavo brezpilotnega letala sem uporabil spletno vadnico podjetja The Drone Dojo in integriral navedene tehnologije. Za drone lahko seznam delov najdete tukaj:

Seznam delov dronov

Zahteve glede programske opreme:

  • Spletne storitve Amazon
  • Prenosnik
  • Mission Planer programska oprema
  • Balena Etcher
  • Kartico MicroSD z datoteko Raspbian najdete tukaj
  • Amazon Alexa, fizična ali navidezna

1. korak: Zbiranje in razumevanje delov

Zbiranje in razumevanje delov
Zbiranje in razumevanje delov

Vsak del, omenjen na seznamu zalog, je potreben, zato je tudi jasno razumevanje vsakega dela. Deli lahko najdete na spletu in ko jih zberete, nadaljujte z branjem. Seznam predvajanja The Drone Dojo za popolno razumevanje delov najdete tukaj. 4-minutno razlago na mojem youtube kanalu najdete tukaj. Ko govorimo o brezpilotnih letalih, kljub temu, kar večina misli, edini deli niso samo motorji in propelerji. Spodaj so osnovni nameni vsakega dela.

Raspberry Pi z emlidom Navio2

Ta del je precej osrednji procesor in glavna točka brezpilotnega letala. Raspberry Pi deluje kot CPU računalnika, ki pošilja ukaze Navio2 za izvedbo prek PWM (signali modulacije širine impulza) v druge dele drona

2. ESC (elektronski krmilniki hitrosti)

Ti rumeni deli se nahajajo pod okvirjem. Na Navio so priključeni 4, po en za vsak motor. Po prejemu signalov PWM zavrtita motorje in začneta let.

3. Motorji

Motorji ne potrebujejo preveč razlage, ker jih verjetno poznate. Rotirajo in vrtijo propelerje, da ustvarijo potisk.

4. Propelerji

Propelerji ustvarjajo potisk za letenje drona. Za dvig vozila se vrtijo v isti smeri kot motorji.

5. Baterija in napajalni modul

LiPo baterija napaja celoten dron skozi okvir s pomočjo napajalnega modula. Omogoča približno 15-20 minut letenja in deluje kot vir energije.

6. GPS

GPS komunicira s sateliti, da določi položaj brezpilotnega letala. Določa nadmorsko višino, zemljepisno širino in dolžino. Uporablja se lahko za geografsko ograjo, točke poti, pa tudi za premikanje na določene položaje ali smeri.

7. Telemetrijski modul

Telemetrijski modul povezuje naš dron s postajo za nadzor tal, v našem primeru načrtovalca misij, ki jo je treba spremljati.

8. Krmilnik RC in modul skupaj s kodirnikom PPM

RC krmilnik uporablja radio za prenos signalov in ukazov v modul RC za ročno pilotiranje brezpilotnega letala. Dajalnik PPM prevaja te signale za obdelavo in izvajanje Navio + RPI.

9. Okvir

Ta rdeče -beli okvir deluje kot osnova ali platforma za namestitev drugih delov. Okvir je aerodinamičen in lahek, zato je kot nalašč za našo dron.

Zdaj, ko poznamo vsak del, lahko končno sestavimo dron! Naprej do naslednjega koraka!

2. korak: Sestavljanje drona

Sestavljanje drona
Sestavljanje drona

Ta korak je verjetno najtežji v smislu fizičnega napora. Priporočam, da za pomoč poiščete drugo osebo ali poskusite uporabiti roko za pomoč na seznamu delov. Tukaj je postopek predolg, zato ga bom predstavil še z eno povezavo, ki sem jo uporabil pri The Drone Dojo.

Izdelava drona Raspberry Pi

Še enkrat, ker se ne bom preveč spuščal v podrobnosti, bom izpostavil le osnove vsakega koraka.

1. Organizirajte svoje zaloge - Zberite naše materiale in se prepričajte, da so lahko dostopni

2. Načrtujte svojo gradnjo - Organizirajte svoje dele na okvirju, da naredite načrt tega, kar boste zgradili

3. Spajkanje - To je delo, ki ga je težko narediti sam. Konektorje zlate krogle, ki so priloženi motorjem, morate spajkati na ESC -je. Nato morate vzeti spodnji del okvirja in spajati ESC na spodnji okvir ali ploščo za distribucijo energije. Baterijski modul bo tudi spajkan na ploščo za distribucijo energije

4. Namestitev okvirja - Nato morate zgornji del okvirja priviti skupaj z rokami. Raspberry Pi lahko nato pritrdite na vrh, kakor koli želite. (Uporabil sem lepilni trak). Nato lahko ESC pritrdite na roke z zadrgo. Zdaj smo skoraj končali.

5. Povezovanje RC krmilnika s sprejemnikom - Poskusite slediti navodilom na zgornjem seznamu predvajanja, da povežete RC krmilnik z ESC.

6. Dokončanje delov na okvirju - lepilni trak ali trak na telemetričnem modulu na okvirju. Na roko prilepite tudi PPM kodirnik. Zdaj lahko priključite kodirnik ESC in PPM na Navio.

7. Nosilec GPS + baterija - Nosilec GPS sestavite z različnimi vijaki in deli. Z zadrgami pritrdite GPS na okvir. GPS -nosilca nisem nujno uporabljal zaradi njegove krhkosti, vendar je odvisno od vas. Nato lahko baterijo vstavite med Power Dist. Odbor. Na napajalni modul sem prilepil in prilepil tudi okvir. Zdaj je vaša strojna oprema precej nastavljena. Zdaj pa del, ki ga čakamo!

8. Namestitev propelerjev !!! - Propelerje lahko zategnete s pomočjo tabele, navedene na seznamu predvajanja. Nato lahko priključite ESC -je na motorje in končno smo končali z izdelavo drona.

Sledi programska oprema, torej naprej!

3. korak: Konfiguriranje Raspberry Pi in GCS (Načrtovalec misij)

Konfiguriranje Raspberry Pi in GCS (Načrtovalec misij)
Konfiguriranje Raspberry Pi in GCS (Načrtovalec misij)

Spet lahko najdete podrobnejša navodila na seznamu predvajanja iz zadnjega koraka. Verjetno pa veste, kako nastaviti RasPi. A tokrat nam gre brez glave. Uporabite Balena Etcher za zapisovanje operacijskega sistema s spletnega mesta Navio OS na kartico MicroSD. Medtem ko je priključen na vaš računalnik, pojdite v prosilec wpa s pomočjo beležnice ++. Nato vnesite ssid in geslo, da se Raspberry Pi poveže z vašim WiFi. Nato morate dodati datoteko, imenovano SSH. To je mogoče z ukazno vrstico ali na drug način. Zdaj lahko SSH. Uporabite lahko ukazni poziv ali Putty. Za povezovanje sem v svojem primeru uporabil ukazni poziv in vnesel "ssh pi@navio" ali pa tako najdete naslov IP in ssh. Ko se povežete, s tem videoposnetkom nastavite in konfigurirajte Navio. Za nastavitev telemetrije morate najprej urediti Raspberry Pi. Sledite temu, da uredite in se poskusite povezati z načrtovalcem misij. Če telemetrija ne deluje, lahko razveljavite urejanje in se povežete prek povezave UDB tako, da vnesete IP GCS (zemeljska nadzorna postaja, na primer prenosni računalnik). Ko ste povezani z načrtovalnikom misij, lahko s čarovnikom za nastavitev umerite vse dele brezpilotnega letala. Če potrebujete pomoč, se znova obrnite na seznam predvajanja. Običajno se pri nastavitvi skoraj vedno pojavi napaka. Odpravljanje težav je eden največjih delov tega projekta. Ne morem vam resnično pomagati, ker se ne zavedam vaših napak, vendar lahko večino napak odpravite s pomočjo interneta. Ko je vse pripravljeno, je dron pripravljen za letenje! V Mission Plannerju lahko nastavite krmilnik RC in načine letenja. Levo palico držite pet sekund v skrajnem desnem kotu, da aktivirate dron. Ne priporočam letenja brez ogleda vadnice, ker je dron zelo krhek in ga je enostavno zlomiti. Zame, ko sem prvič letel z njim, sem zlomil nosilec GPS in nekaj propelerjev. Če ne potrebujete glasovnega nadzora, se lahko ustavite tukaj. Če želite izvedeti več o AWS in programiranju drona, nadaljujte!

4. korak: Programiranje drona za letenje s Pythonom

Programiranje drona za letenje s Pythonom
Programiranje drona za letenje s Pythonom

Preden vstopimo v AWS, bi morali najprej razumeti, kako programirati brezpilotni letnik za letenje. Po začetni nastavitvi integracija glasovnega upravljanja ne bi smela biti preveč težka. Prva stvar, ki jo lahko poskusimo začutiti, je preprost program vzleta in pristajanja. Po nastavitvi Raspberry Pi lahko vanj znova vstavimo SSH. Seznam predvajanja lahko ponovno pogledate ali sledite mojim navodilom.

1. Najprej naložimo izvorno kodo ArduPilot v imenik na Raspberry Pi

mkdir src

Nato dobite datoteke iz GitHub z uporabo git clone

git clone -b Copter -3.6.11

Zdaj pa pojdimo na /src /ardupilot

cd src

cd ardupilot

Zdaj pa inicializiramo izvorne datoteke

posodobitev podmodula git --init --recursive

2. Nato moramo sestaviti vdelano programsko opremo na Raspberry Pi

Pred naslednjimi koraki se pomaknite na/src/ardupilot/s cd -jem

Nato za konfiguracijo posebej za uporabo Navio

./waf configure --board = navio2

Nato lahko sestavite z

./waf -ciljni koš/ardukopter

3. Zdaj lahko izvorno kodo namestimo v Navio

Najprej se pomaknite do desnega imenika.

cd/etc/systemd/system

Nato uredite datoteko

sudo vi arducopter.service

Kjer piše ExecStart, vnesite naslednje namesto tistega, kar že obstaja

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

Zdaj lahko uporabimo izvorno kodo ardupilot

sudo systemctl daemon-reload

Nato lahko znova začnemo z

sudo systemctl znova zaženite arducopter

Z zadnjim korakom smo končno dokončali nastavitev ArduPilota na našem brezpilotnem letalu

4. Namestitev programa DroneKit

DroneKit je programska oprema, ki jo bomo uporabili za programiranje brezpilotnega letala. Če želite razumeti nekatere kode, lahko najdete dokumentacijo tukaj. Najprej moramo paket namestiti v naš dron, preden napišemo skript.

Paket python lahko namestimo z

pip install dronekit == 2.9.1

To je lahko najnovejša različica ali pa tudi ne, vendar sem jo uporabil, da vam lahko pomagam pri odpravljanju težav.

Če želimo preveriti, ali je nameščen, lahko naredimo a

zamrznitev pip | grep dronekit

Zdaj smo končno pripravljeni na izdelavo prvega python skripta

5. takeoff_and_land.py

OPOZORILO! Predlagam, da vzpostavite osnovno razumevanje pythona, da se boste lahko naučili in razumeli kodo. Če želite program napisati sami, sledite tem videoposnetku.

## Najprej ne ustvarimo imenika za shranjevanje te kode

cd dk ## Če želite to narediti sami, uporabite vi takeoff_and_land.py ## za ustvarjanje programa

V nasprotnem primeru si lahko ogledate ali uporabite priloženo datoteko in uporabite protokol za prenos datotek. Ta program lahko kasneje preizkusimo. Najprej je treba pojasniti, da gre za datoteko python, ki jo moramo uporabiti

chmod +x takeoff_and_land.py

Nato poskusite uporabiti naslednjo kodo za zagon

python takeoff_and_land.py --connect 127.0.0.1:14550

Tudi meni prvič ni uspelo. Če obstaja časovna omejitev povezave, ne skrbite, da lahko nekaj storite. Odprite nov poziv in ssh. Poskusite namestiti nekaj, kar se imenuje mavproxy, in ga zaženite. Po tem lahko oba zaženete hkrati. To bi moralo pomagati pri povezovanju drona. Ko bo to storjeno, imam za vas izziv. Poskusite ugotoviti, kaj počne drugi program (set_velocity_body.py) in kako naj deluje. Če je tako, dobro opravljeno delo.

6. Naprej!

Zdaj lahko to znanje uporabimo za glasovno vodenje našega drona. Alexa brezžični nadzor uporablja veliko teh funkcij in še več. Vso srečo in naprej!

5. korak: Uporaba Amazon Alexa in Amazon Web Services za integracijo glasovnega nadzora

Uporaba Amazon Alexa in Amazon Web Services za integracijo glasovnega nadzora
Uporaba Amazon Alexa in Amazon Web Services za integracijo glasovnega nadzora
Uporaba Amazon Alexa in Amazon Web Services za integracijo glasovnega nadzora
Uporaba Amazon Alexa in Amazon Web Services za integracijo glasovnega nadzora

Ta korak je eden manj dokumentiranih. To pomeni, da bo najtežje odpraviti težave. Za začetek dela sem potreboval približno mesec dni, morda celo več. Najpomembnejše pri tem je biti potrpežljiv. Ta funkcija, če se izvaja v resničnem življenju, lahko spremeni življenje. Alexa lahko preprosto poveste, naj vam priskrbi živila, namesto da greste sami. Predstavljaj si to! Torej brez odlašanja pojdimo v to!

1. Registracija Raspberry Pi kot stvari na AWS IoT

Za uporabo IoT (Internet of Things) potrebujemo nekaj. Zato se moramo za uporabo AWS IoT najprej prijaviti v konzolo AWS. Nato pojdite na IoT Core. Ko ste tam, kliknite Upravljanje in nato ustvarite stvar. Po dodajanju imena za povezavo potrebujemo potrdilo. Priporočam, da kliknete certifikat z enim klikom. Potem, ko vidite zaslon s potrdilom, prenesite vsak ključ, vključno s korenskim CA. Potem lahko greste in dokončate ustvarjanje stvari. Nato moramo oblikovati politiko. Vrnite se v jedro IoT. Nato kliknite na varno in kliknite na pravilnike. Nato pritisnite Ustvari politiko. Nato lahko ustvarite ime in dodate vire. V akciji vnesite iot * in vnesite * pod vir in zadetku omogočite učinek. Nato se vrnite k svoji stvari in pojdite na potrdilo. Ko ste tukaj, kliknite pravilnik. Nato lahko pripeljete svojo politiko za stvar in vse je nastavljeno!

2. Nastavitev kode na Raspberry Pi in interakcija z internetom stvari

V tem delu boste za prenos datotek potrebovali odjemalca SFTP (uporabljal sem WinSCP). Ko se povežemo z Raspberry Pi, moramo imeti pri roki ključe s certifikatom. Datoteke ključev morate prenesti v Raspberry Pi. Prav tako morate pipo namestiti AWSIoTPythonSDK na Raspberry Pi. Nato pojdite v imenik dk na Raspberry Pi. Za komunikacijo z IoT uporabljate datoteko Alexa Drone Control, ki sem jo dal. Za uporabo te datoteke sem za zagon uporabil Shell Script. Spodnjo kodo bom pokazal, ker datoteke iz nekega razloga ne morem naložiti. Če program med preskušanjem ne pobere sporočil iz AWS IoT, ne skrbite! To je lahko moja krivda, ker nadzorna datoteka Alexa Drone morda ne ustreza vaši stvari. Če želite to popraviti, se vrnite na AWS IoT in na levi plošči pritisnite Learn. Sledite navodilom in morda boste morali znova zagnati. Oprosti za to. Ko začne vaš IoT delovati s programom na RasPi, lahko integrirate kodo dronekit iz datoteke za nadzor Alexa Drone, ki sem jo dal. Po tem uporabite Shell Script, ki sem ga dal s certifikati in Rest API Endpoint iz IoT.

# stop script on errorset -e # Preverite, ali obstaja korenska datoteka CA, če ne, prenesite, če [! -f./root-CA.crt]; nato printf "\ nPrenos AWS IoT Root CA certifikata iz AWS … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # install AWS Device SDK for Python, če še ni nameščen če [! -d./aws-iot-device-sdk-python]; nato printf "\ nNamestitev AWS SDK … / n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py namestite popd fi

# zaženite aplikacijo pub/sub sample z uporabo certifikatov, prenesenih v paketu

printf "\ nZagon pub/sub vzorčne 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

To ne bo delovalo za vse vas, saj so imena različna. Namesto ključev, ki sem jih uporabil, pri prenosu datoteke zamenjajte z vašimi imeni ključev. Pred prenosom datoteke obvezno zapustite dk! To bi moralo biti vse, kar morate storiti za zdaj.

3. Krepitev svoje Alexa spretnosti

Ta korak se zdi veliko težji, kot je v resnici. Najprej se moramo prijaviti v konzolo za razvijalce Alexa. Nato samo pritisnite ustvarjanje spretnosti. Ko vas prosi, da izberete model za svoje znanje, samo pritisnite custom. Ko vas vpraša, da izberete metodo, pritisnite lastno. Lahko ga poimenujete, kot želite. Predloga ni potrebna, zato izberite začetek od začetka. Potem, ko ustvarite svoje znanje, bi morali priti na zaslon za ustvarjanje spretnosti s kontrolnim seznamom na desni. Od tu lahko začnemo razvijati svoje sposobnosti. Prvo na kontrolnem seznamu je ime klica. To boš Alexa rekel, naj se sklicuje na tvoje znanje. Zame sem svoje ime za priklic preprosto navedel kot dron. Zdaj lahko preidemo na svoje namere, izjave in slote. Tukaj lahko naredite ukaze za brezpilotne letalnike, na primer pojdite 1 meter navzgor ali pojdite desno ali dol. Moj zaenkrat res deluje le z enim metrom. Lahko kliknete urejevalnik JSON na dnu leve plošče. Vanj lahko nato prilepite naslednjo kodo.

Ko kodo prilepite v urejevalnik JSON, lahko kliknete tretji korak kontrolnega seznama in ta bo za vas zgradil vaš model interakcije. S tem korakom boste za zdaj končali. Režo za končno točko lahko za zdaj pustite prazno!

4. korak: Ustvarite svojo lambda funkcijo

Ta korak boste morali ugotoviti sami. Povedal vam bom, kako ga povezati z Alexa Skill, vendar ga boste morali sami kodirati. Torej, najprej pojdite na konzolo za upravljanje AWS. Nato pojdite na Lambda. Nato lahko ustvarite funkcijo, ki jo poimenuje, kar želite. Poskrbite, da ga boste ustvarili iz nič in da bo čas izvajanja poljuben programski jezik, ki ga želite. Uporabil sem Node.js. Če želite dodati Alexa Skill, dodajte sprožilec in izberite Alexa Skills Kit (ASK). Kopirajte svoj Lambda ARN in se vrnite na Alexa Skill. Zdaj pojdite na končno točko. ARN lahko prilepite, shranite in ustvarite nov model. Nato vzemite Alexa Skill ID in ga prilepite v odsek sprožilca, kjer vas vpraša na Lambdi. Nato se pomaknite navzdol po Lambdi in poiščite osnovne nastavitve ter časovno omejitev nastavite na 10 sekund. Zdaj je na vas, da ugotovite kodo. Za namige lahko uporabite spodnja spletna mesta.

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

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

in lahko uporabite priloženo datoteko, vendar je nepopolna in ne bo delovala.

/ *** Upravljajte svoj APM / Pixhawk quadcopter z glasom z uporabo Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = require ('aws-iot-device-sdk'); var config = require ("./ config"); var deviceName = "EchoDroneControl"; // ta naprava je res krmilnik 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 = nič; var odjemalec = nič; // Preusmerite dohodno zahtevo glede na vrsto (LaunchRequest, IntentRequest itd.) Telo zahteve JSON je podano v parametru dogodka. export.handler = funkcija (dogodek, kontekst) {poskusite {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = kontekst; if (event.session.application.applicationId! == app_id) {ctx.fail ("Neveljaven ID aplikacije"); } odjemalec = awsIot.device (mqtt_config); client.on ("connect", function () {console.log ("Povezano z AWS IoT"); // povratni klic ();});

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 ("Izjema:" + e); }}; /*** Klican ob začetku seje. */ funkcija onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Pokliče se, ko uporabnik sproži spretnost, ne da bi navedel, kaj želi. */ funkcija onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Pošiljanje na zagon vaše sposobnosti. getWelcomeResponse (povratni klic); } /*** Pokliče se, ko uporabnik navede namen te veščine. */funkcija onIntent (intentRequest, seja) {//, povratni klic) {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 klic = nič; // Pošlji upravljavcem namenov vaše sposobnosti if ("GoIntent" === intentName) {doGoIntent (intent, session); } else if ("CommandIntent" === intentName) {doCommandIntent (namen, seja); } else if ("TurnIntent" === intentName) {doTurnIntent (intent, session); } else if ("HelpIntent" === intentName) {getWelcomeResponse (); } else {throw "Neveljaven namen"; }} /*** Pokliče se, ko uporabnik konča sejo. * Ni poklicano, ko se spretnost vrne shouldEndSession = true. */ funkcija onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Tukaj dodaj logiko čiščenja} // --------------- Funkcije, ki nadzorujejo vedenje spretnosti -------------------- --- funkcija getWelcomeResponse () {// Če želimo sejo inicializirati z nekaterimi atributi, jih lahko dodamo sem. var sessionAttributes = {}; var cardTitle = "Dobrodošli"; var speechOutput = "Dobrodošli v DRONE CONTROL."; // TODO: je drone na spletu ali brez povezave? Če je na spletu, ali je oborožen? var repromptText = "Dron pripravljen za ukaz."; var shouldEndSession = false; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** obravnava namen GO. */ funkcija doGoIntent (namen, seja, povratni klic) {// var cardTitle = "Drone GO…"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var govorOutput = ""; var direction = intent.slots. Direction.value; var distance = intent.slots. Distance.value; var unit = intent.slots. Unit.value; var validDirections = ["naprej", "naprej", "nazaj", "nazaj", "desno", "levo", "gor", "dol", "naravnost", "naprej", "naravnost"]; var validUnits = ["stopalo", "stopala", "meter", "metri", "dvorišče", "jardi"]; repromptText = "Povej mi, kako daleč naj grem in v katero smer."; var fail = false; // potrdimo vnose if (! (parseInt (distance)> = 1)) {speechOutput = "Nisem razumel razdalje, ki jo želite premagati."; fail = res; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "Nisem razumel smeri, v katero želite, da grem."; fail = res; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Nisem razumel enote, s katero želite potovati."; fail = res; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } če (! neuspeh) {var cardTitle = "Dron gre" + smer + "" + razdalja + "" + enota; speechOutput = "Gremo" + smer + "" + razdalja + "" + enota; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcija doCommandIntent (namen, seja, povratni klic) {

// var cardTitle = "UKAZ Drone …"; var repromptText = nič; var sessionAttributes = {}; var shouldEndSession = false; var govorOutput = ""; repromptText = "Povej mi, kaj je ukaz za brezpilotnega letala."; var task = intent.slots. Task.value; var validTasks = ["start", "land", "r. t. l.", "hold", "stay", "stop", "return to launch", "abort"]; if (validTasks.indexOf (task) == -1) {speechOutput = "Nisem razumel ukaza."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Izvajanje ukaza Drone" + opravilo; speechOutput = "Izvajanje ukaza" + opravilo; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcija doTurnIntent (namen, seja, povratni klic) {

// var cardTitle = "Drone Turn …"; var repromptText = nič; var sessionAttributes = {}; var shouldEndSession = false; var govorOutput = ""; repromptText = "Povejte mi, kako želite obrniti dron."; var direction = intent.slots. Direction.value; var validDirections = ["desno", "levo", "okoli"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "Nisem razumel smeri zavoja."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Drone obračanje" + smer; speechOutput = "Obračanje" + smer; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

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

{var strIntent = JSON.stringify (namen); 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 uspešno opravljeno."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("napaka", (funkcija (napaka, odobreno) {console.log ("NAPAKA KLIJENTA MQTT !!" + napaka);})); }

// --------------- Pomočniki, ki sestavljajo vse odgovore -----------------------

funkcija buildSpeechletResponse (naslov, izhod, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, kartica: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} funkcija buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}}

Priporočena: