Sisukord:

Alexa hääljuhtimisega Raspberry Pi droon IoT ja AWS -iga: 6 sammu (koos piltidega)
Alexa hääljuhtimisega Raspberry Pi droon IoT ja AWS -iga: 6 sammu (koos piltidega)

Video: Alexa hääljuhtimisega Raspberry Pi droon IoT ja AWS -iga: 6 sammu (koos piltidega)

Video: Alexa hääljuhtimisega Raspberry Pi droon IoT ja AWS -iga: 6 sammu (koos piltidega)
Video: Hääljuhtimine - kuidas teha? TV, kodukino, valgustus ja muu 2024, November
Anonim
Image
Image
Alexa hääljuhtimisega Raspberry Pi droon IoT ja AWS -iga
Alexa hääljuhtimisega Raspberry Pi droon IoT ja AWS -iga
Alexa hääljuhtimisega Raspberry Pi droon IoT ja AWS -iga
Alexa hääljuhtimisega Raspberry Pi droon IoT ja AWS -iga

Tere! Minu nimi on Armaan. Olen 13-aastane Massachusettsi poiss. See õpetus näitab, nagu saate pealkirjast järeldada, kuidas Raspberry Pi drooni ehitada. See prototüüp näitab, kuidas droonid arenevad ja kui suurt osa nad tulevikus mängida võivad. Ma näen ennast kindlasti 10 aasta pärast ärkamas ja palumas droonil mulle hommikusööki hankida. Droon kasutab käitamiseks Amazon Alexa, Amazon Web Services, IoT (Internet of Things) ja mis kõige tähtsam - Raspberry Pi. Selle eesmärk on demonstreerida ja teavitada droone ja nende igapäevast paranemist. Loodetavasti olete edukas ja saate selle käigus droonide kohta rohkem teada. Palju õnne ja aitäh lugemise eest. -Armaan

Tarvikud

Prototüübi ehitamiseks on vaja erinevaid riist- ja tarkvaravajadusi. Drooni ehitamiseks ja loetletud tehnoloogiate integreerimiseks kasutasin The Drone Dojo veebipõhist õpetust. Drooni jaoks leiate osade loendi siit:

Droonide osade loend

Nõuded tarkvarale:

  • Amazoni veebiteenused
  • Sülearvuti
  • Mission Planer tarkvara
  • Balena Etcher
  • MicroSD -kaart Raspbian -failiga leiate siit
  • Amazon Alexa, füüsiline või virtuaalne

Samm: osade kogumine ja mõistmine

Osade kogumine ja mõistmine
Osade kogumine ja mõistmine

Iga tarnimisnimekirjas nimetatud osa on vajalik ja iga osa selge arusaam. Osad leiate veebist ja kui olete need kokku kogunud, jätkake lugemist. The Drone Dojo esitusloendi osade täielikuks mõistmiseks leiate siit. 4-minutilise selgituse minu youtube'i kanalil leiate siit. Mis puutub droonidesse, siis ainsad osad, hoolimata sellest, mida enamik inimesi arvab, ei ole ainult mootorid ja propellerid. Allpool on toodud iga osa põhieesmärgid.

Vaarika Pi koos Emlid Navio2 -ga

See osa on üsna keskprotsessor ja drooni põhipunkt. Raspberry Pi toimib nagu arvuti protsessor, mis saadab Navio2 -le käske täita PWM (impulsi laiuse modulatsioonisignaalid) kaudu teistele drooni osadele

2. ESC (elektroonilised kiirusregulaatorid)

Need kollased osad asuvad raami all. Neid on Navioga ühendatud neli, iga mootori jaoks üks. PWM -signaalide vastuvõtmisel pööravad nad mootoreid ja alustavad lendu.

3. Mootorid

Mootorid ei vaja liiga palju selgitusi, sest olete nendega ilmselt tuttavad. Tõukejõu tekitamiseks pöörlevad ja keerutavad need propellereid.

4. Propellerid

Propellerid loovad drooni lendamiseks tõukejõu. Need pöörlevad sõiduki tõstmiseks mootoritega samas suunas.

5. Aku ja toite moodul

LiPo aku juhib kogu drooni läbi raami läbi toite mooduli. See annab umbes 15-20 minutit lennuaega ja toimib jõuallikana.

6. GPS

GPS suhtleb satelliitidega, et määrata drooni asukoht. See määrab kõrguse, laius- ja pikkuskraadi. Seda saab kasutada geopiirdeks, vahepunktideks ja ka teatud positsioonidesse või suundadesse liikumiseks.

7. Telemeetria moodul

Telemeetria moodul ühendab meie drooni maapealse juhtimisjaamaga, meie puhul missiooni planeerijaga, mida tuleb jälgida.

8. RC kontroller ja moodul koos PPM -kodeerijaga

RC -kontroller kasutab raadio abil signaale ja käske RC -moodulile, et drooni käsitsi juhtida. PPM -kodeerija tõlgib need signaalid Navio + RPI töötlemiseks ja täitmiseks.

9. Raam

See punane ja valge raam toimib teiste paigutatavate osade alusena või platvormina. Raam on aerodünaamiline ja kerge, seega ideaalne meie droonide ehitamiseks.

Nüüd, teades iga osa, saame lõpuks drooni ehitada! Edasi järgmise sammu juurde!

2. samm: drooni kokkupanek

Drooni kokkupanek
Drooni kokkupanek

See samm on füüsilise pingutuse osas ilmselt kõige raskem. Soovitan paluda teist inimest abiks või proovida kasutada abikäsi osade loendis. Protsess on siin demonstreerimiseks liiga pikk, seega esitan veel ühe lingi, mida kasutasin The Drone Dojo.

Raspberry Pi drooni ehitamine

Jällegi, kuna ma ei lähe liiga detailidesse, toon ma iga sammu põhitõed esile.

1. Korraldage oma tarvikud - koguge kokku meie materjalid ja veenduge, et need oleksid kergesti ligipääsetavad

2. Planeerige oma ehitust - korraldage oma osad raamil, et teha plaan, mida ehitate

3. Jootetöö - see on töö, mida on üksi natuke raske teha. Peate jootma mootoritega kaasas olevad kuldsed kuulipistikud ESC -de külge. Järgmisena peate võtma raami alumise osa ja jootma ESC -d alumise raami või toitejaotusplaadi külge. Aku moodul joodetakse ka toitejaotusplaadile

4. Raami seadistamine - Seejärel peate raami ülemise osa koos õlgadega sisse keerama. Seejärel saate Raspberry Pi peal kinnitada mis tahes viisil. (Mina kasutasin kleeplinti). Seejärel saate ESC-d kinnitada tõmblukkudega käte külge. Nüüd oleme peaaegu valmis.

5. RC kontrolleri sidumine vastuvõtjaga - proovige järgida ülaltoodud esitusloendi juhiseid, et siduda RC kontroller ESC abil.

6. Osade viimistlemine raamil - kleeplint või rihm telemeetria moodulil raami külge. Kleepige PPM -kodeerija ka õla külge. Nüüd saate ESC ja PPM -kodeerija ühendada Navioga.

7. GPS -kinnitus + aku - pange GPS -kinnitus kokku erinevate kruvide ja osadega. Kinnitage tõmblukkude abil GPS raami külge. Ma ei kasutanud tingimata GPS -kinnitust selle hapruse tõttu, kuid see on teie otsustada. Järgmisena saate aku Power Dist. Juhatus. Panin rihmadega kinni ja teipisin raamile ka toite mooduli. Nüüd on teie riistvara üsna valmis. Nüüd osa, mida me ootame!

8. Propellerite paigaldamine !!! - Saate propellereid pingutada, kasutades esitusloendis mainitud diagrammi. Seejärel saate ESC -d mootorite külge ühendada ja oleme lõpuks drooni ehitamise lõpetanud.

Tarkvara on järgmine, nii edasi!

Samm: Raspberry Pi ja GCS -i konfigureerimine (missiooni planeerija)

Raspberry Pi ja GCS seadistamine (missiooni planeerija)
Raspberry Pi ja GCS seadistamine (missiooni planeerija)

Jällegi leiate üksikasjalikumad juhised esitusloendist alates viimasest sammust. Siiski teate ilmselt, kuidas RasPi seadistada. Aga seekord teeme seda peata. Kasutage Balena Etcherit, et põletada OS Navio OS -i veebisaidilt MicroSD -kaardile. Kuigi see on teie arvutiga ühendatud, minge märkmiku ++ abil wpa paluja juurde. Pärast seda sisestage Raspberry Pi WiFi -ga ühenduse loomiseks ssid ja parool. Seejärel peate lisama faili nimega SSH. Seda saab teha käsurealt või muul viisil. Nüüd saame SSH -d kasutada. Võite kasutada käsuviiba või Putty. Kasutasin ühendamiseks käsurealt käsku ja sisestasin "ssh pi@navio", muidu leiate IP -aadressi ja ssh. Ühendamisel kasutage seda videot Navio seadistamiseks ja konfigureerimiseks. Telemeetria seadistamiseks peate esmalt tegema muudatuse Raspberry Pi -s. Muutmise tegemiseks järgige seda ja proovige luua ühendus missiooni planeerijaga. Kui telemeetria ei tööta, saate redigeerimise tagasi võtta ja ühenduse luua UDB -ühenduse kaudu, sisestades oma GCS -i (Ground Control Station, näiteks sülearvuti) IP -aadressi. Kui olete missiooniplaneerijaga ühendatud, saate häälestusviisardi abil drooni kõik osad kalibreerida. Kui vajate abi, vaadake uuesti esitusloendit. Tavaliselt on seadistamisel peaaegu alati viga. Tõrkeotsing on selle projekti üks suurimaid osi. Ma ei saa teid seal tõesti aidata, kuna ma ei ole teie vigadest teadlik, kuid enamikku vigu saab parandada Interneti abil. Kui kõik on valmis, on droon lendamiseks valmis! RC kontrollerit ja lennurežiime saate seadistada missiooni planeerijas. Drooni relvastamiseks proovige vasakut pulka hoida all all paremal viis sekundit. Ma ei soovita lennata ilma õpetust vaatamata, sest droon on väga habras ja kergesti purunev. Minu jaoks purustasin esimest korda sellega lennates GPS -kinnituse ja mõned propellerid. Kui te ei vaja hääljuhtimist, võite siin peatuda. AWS -i ja drooni programmeerimise tundmaõppimiseks jätkake!

4. samm: drooni programmeerimine Pythoni abil lendama

Drooni programmeerimine Pythoni abil lendama
Drooni programmeerimine Pythoni abil lendama

Enne AWS -i sisenemist peaksime kõigepealt mõistma, kuidas drooni lendama programmeerida. Pärast esialgset seadistamist ei tohiks hääljuhtimise integreerimine olla liiga keeruline. Esimene asi, mida me saame proovida mõista, on lihtsa õhkutõusmis- ja maandumisprogrammi tegemine. Pärast Raspberry Pi seadistamist saame selle uuesti sisse lülitada. Saate esitusloendit uuesti vaadata või minu juhiseid järgida.

1. Kõigepealt laadime alla ArduPiloti lähtekoodi Raspberry Pi kataloogis

mkdir src

Seejärel hankige failid GitHubist git -klooni abil

git kloon -b Copter -3.6.11

Nüüd navigeerime kausta /src /ardupilot

cd src

cd ardupilot

Nüüd lähtestame lähtefailid

git alammooduli värskendus -init -rekursiivne

2. Järgmisena peame koostama Raspberry Pi püsivara

Enne järgmiste sammude tegemist liikuge kindlasti cd -ga kausta/src/ardupilot/

Seejärel konfigureerida spetsiaalselt Navio abil

./waf configure --board = navio2

Siis saate kompileerida

./waf -sihib prügikasti/arducopterit

3. Nüüd saame lähtekoodi Naviole installida

Kõigepealt saate navigeerida õigesse kataloogi.

cd/etc/systemd/system

Seejärel redigeerige faili

sudo vi arducopter.teenus

Seal, kus on kirjas ExecStart, sisestage juba olemasoleva asemel järgmine

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

Nüüd saame ardupiloti lähtekoodi rakendamiseks kasutada

sudo systemctl deemon-reload

Siis saame uuesti käivitada

sudo systemctl taaskäivitage arducopter

Viimase sammuga oleme lõpuks lõpetanud ArduPiloti seadistamise meie droonile

4. DroneKiti installimine

DroneKit on tarkvara, mida kasutame drooni lendamiseks programmeerimiseks. Mõne koodi mõistmiseks leiate dokumentatsiooni siit. Enne skripti kirjutamist peame esmalt paketi oma droonile installima.

Python -paketi saame installida

pip install dronekit == 2.9.1

See võib olla uusim versioon või mitte, kuid seda kasutasin, et saaksin aidata tõrkeotsingul.

Installimise kontrollimiseks saame teha järgmist

pip külmutada | grep dronekit

Nüüd oleme lõpuks valmis tegema oma esimese pythoni skripti

5. õhkutõusmine_ja_maa.py

HOIATUS! Soovitan luua põhiteadmised pythonist, et saaksite koodi õppida ja sellest aru saada. Kui soovite programmi ise kirjutada, järgige seda videot.

## Kõigepealt ärge looge selle koodi salvestamiseks kataloogi

cd dk ## Kui soovite seda ise teha, kasutage programmi loomiseks vi takeoff_and_land.py ##

Vastasel juhul võite vaadata või kasutada manustatud faili ja kasutada failiedastusprotokolli. Saame seda programmi hiljem proovida. Kõigepealt selgitame, et see on python -fail, mida peame kasutama

chmod +x õhkutõusmine_ja_maa.py

Seejärel proovige käivitamiseks kasutada järgmist koodi

python takeoff_and_land.py -ühendage 127.0.0.1:14550

Esimesel korral ei töötanud see ka minu jaoks. Kui lingi ajalõpp on olemas, siis ärge muretsege, sest saate midagi teha. Avage teine viip ja ssh. Võite proovida installida midagi nimega mavproxy ja proovida seda käivitada. Pärast seda saate mõlemat korraga käivitada. See peaks aitama drooni ühendada. Kui see on tehtud, on mul teile väljakutse. Proovige aru saada, mida teine programm (set_velocity_body.py) teeb ja kuidas see tööle panna. Kui teed, siis hea töö.

6. Edasi!

Nüüd saame neid teadmisi kasutada oma drooni hääljuhtimiseks. Alexa droonijuhtimine kasutab palju neid funktsioone ja palju muud. Palju õnne ja edasi!

Samm: Amazon Alexa ja Amazoni veebiteenuste kasutamine hääljuhtimise integreerimiseks

Amazon Alexa ja Amazoni veebiteenuste kasutamine hääljuhtimise integreerimiseks
Amazon Alexa ja Amazoni veebiteenuste kasutamine hääljuhtimise integreerimiseks
Amazon Alexa ja Amazoni veebiteenuste kasutamine hääljuhtimise integreerimiseks
Amazon Alexa ja Amazoni veebiteenuste kasutamine hääljuhtimise integreerimiseks

See samm on üks vähem dokumenteeritud. See tähendab, et selle lahendamine on kõige raskem. Ainuüksi selle tööle saamine võttis mul umbes kuu aega, võib -olla rohkemgi. Siin on kõige tähtsam olla kannatlik. See funktsioon, kui seda rakendatakse reaalses elus, võib muuta elu. Võite lihtsalt Alexale öelda, et too oma toidukaubad teie eest ära tooks, selle asemel et ise minna. Kujuta ette! Nii et astugem pikemalt mõtlemata asja juurde!

1. Raspberry Pi registreerimine asjana AWS IoT -s

Asjade Interneti (asjade internet) kasutamiseks vajame asja. Seega peame AWS IoT kasutamiseks kõigepealt AWS -i konsooli sisse logima. Seejärel minge IoT Core'i. Kui olete seal, peaksite klõpsama käsul Halda ja seejärel looma asja. Pärast nime lisamist vajame ühendamiseks sertifikaati. Soovitan klõpsata ühe klõpsuga sertifikaadil. Pärast sertifikaadi ekraani nägemist laadige kindlasti alla kõik võtmed, sealhulgas juur -CA. Siis saate minna ja lõpetada asja loomine. Järgmisena peame looma poliitika. Minge tagasi IoT Core juurde. Seejärel klõpsake nuppu Turvaline ja klõpsake eeskirju. Seejärel klõpsake käsku Loo poliitika. Seejärel saate luua nime ja lisada ressursse. Toimingu all tippige ressursi alla iot * ja * ja lubage efekt. Seejärel minge tagasi oma asja juurde ja minge oma tunnistuse juurde. Kui olete siin, klõpsake eeskirjadel. Seejärel saate asjale oma poliitika lisada ja kõik on valmis!

2. Koodi seadistamine Raspberry Pi -le ja IoT -ga suhtlemine

Selle osa jaoks vajate failiedastuseks SFTP -klienti (ma kasutasin WinSCP -d). Meie Raspberry Pi -ga ühenduse loomisel peavad meil olema sertifikaadi võtmed käepärast. Peate võtmefailid Raspberry Pi -sse üle kandma. Samuti peaksite pipariga installima AWSIoTPythonSDK Raspberry Pi -le. Seejärel minge Raspberry Pi kataloogi dk. Kasutate IoT -ga suhtlemiseks Alexa droonijuhtimise faili, mille andsin. Selle faili kasutamiseks kasutasin käivitamiseks Shell Scripti. Näitan koodi allpool, kuna ma ei saa mingil põhjusel faili üles laadida. Kui programm ei võta testimise ajal AWS IoT -lt teateid vastu, ärge muretsege! See võib olla minu süü, kuna Alexa drooni juhtfail ei pruugi teie asjale sobida. Selle parandamiseks minge tagasi AWS IoT -le ja klõpsake vasakul paneelil nuppu Õppimine. Järgige juhiseid ja peate võib -olla taaskäivitama. Vabandust selle pärast. Kui teie IoT hakkab RasPi programmiga töötama, saate dronekiti koodi integreerida minu antud Alexa Drone Control failist. Pärast seda kasutage Shelli skripti, mille andsin oma sertifikaatide ja IoT Rest API lõpp -punktiga.

# stopp script on erroret -e # Kontrollige, kas root CA -fail on olemas, laadige alla, kui mitte, kui [! -f./root-CA.crt]; seejärel printf "\ nAWS IoT Root CA sertifikaadi allalaadimine AWS-ist… / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # install AWS-seadme SDK Pythoni jaoks, kui see pole veel installitud kui [! -d./aws-iot-device-sdk-python]; seejärel printf "\ nAWS SDK installimine … / n" git kloon https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# käivitage pubi/alamproovi rakendus, kasutades paketis allalaaditud sertifikaate

printf "\ n Pubi/alamproovi rakenduse käivitamine… / n" python dk/AlexaDroneControl.py -connect 127.0.0.1:14550 -e "Your IoT ARN" -r root -CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

See ei tööta teie kõigi jaoks, kuna nimed on erinevad. Kasutatud võtmete asemel asendage faili edastamisel teie võtme nimed. Enne faili ülekandmist väljuge kindlasti dk -st! See peaks olema praegu kõik, mida peate tegema.

3. Alexa oskuste arendamine

See samm tundub palju raskem kui see tegelikult on. Esiteks peame sisse logima Alexa arendajakonsooli. Seejärel vajuta lihtsalt loo oskus. Kui palutakse valida oma oskuste jaoks mudel, klõpsake lihtsalt kohandatud. Kui see palub valida meetodi, klõpsake sätet oma. Võite nimetada seda, mida soovite. Malli pole vaja, seega valige algus nullist. Järgmisena peaksite pärast oskuste loomist jõudma ekraanile Oskuste koostaja, mille paremal pool on kontrollnimekiri. Siit saame hakata oma oskusi arendama. Esmalt on kontrollnimekirjas kutsumise nimi. See on see, mida te ütlete Alexale, et ta teie oskustele tugineks. Minu jaoks panin ma lihtsalt oma kutsunime drooniks. Nüüd saame minna oma kavatsuste, lausungite ja teenindusaegade juurde. Siin saate teha droonile käske, näiteks minna 1 meetrit üles või minna paremale või alla. Minu oma töötab praegu ainult ühe meetriga. Võite klõpsata vasaku paneeli allosas asuval JSON -redaktoril. Seejärel saate sinna kleepida järgmise koodi.

Pärast koodi kleepimist JSON -redaktorisse saate klõpsata kontrollnimekirja kolmandal etapil ja see loob teie jaoks suhtlusmudeli. Selle sammuga olete nüüdseks valmis. Lõpp -punkti pesa võite praegu tühjaks jätta!

Samm: Lambda funktsiooni loomine

See samm on see, mille peate ise välja mõtlema. Ma ütlen teile, kuidas seda Alexa Skilliga ühendada, kuid peate selle ise kodeerima. Niisiis, minge kõigepealt AWS -i halduskonsooli. Seejärel minge Lambdasse. Seejärel saate luua funktsiooni, andes sellele nime, mida soovite. Autorige see kindlasti nullist ja muutke käitusajaks soovitud programmeerimiskeel. Kasutasin Node.js. Alexa Skilli lisamiseks lisage päästik ja valige Alexa Skills Kit (ASK). Kopeerige oma Lambda ARN ja minge tagasi Alexa oskuste juurde. Nüüd minge lõpp -punkti juurde. Saate oma ARN -i kleepida, salvestada ja uue mudeli luua. Seejärel võtke Alexa Skilli ID ja kleepige see päästiku sektsiooni, kus see küsib teid Lambdalt. Seejärel kerige Lambdal alla ja leidke põhiseaded ning tehke aeg 10 sekundit. Nüüd peate koodi välja mõtlema. Vihjete saamiseks võite kasutada allolevaid veebisaite.

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

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

ja saate kasutada minu lisatud faili, kuid see on puudulik ja ei tööta.

/ *** Hallake oma APM / Pixhawk quadcopterit oma häälega, kasutades Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = nõuda ('aws-iot-device-sdk'); var config = nõuda ("./ config"); var deviceName = "EchoDroneControl"; // see seade on tõesti kontroller var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + seadmeNimi, // + "-Lambda-" + (uus kuupäev (). getTime ()), "region": "us-east-1", "silumine": true}; var ctx = null; var klient = null; // Sissetuleva päringu marsruutimine tüübi alusel (LaunchRequest, IntentRequest jne) Taotluse JSON -i keha on esitatud sündmuse parameetris. export.handler = funktsioon (sündmus, kontekst) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = kontekst; if (event.session.application.applicationId! == rakenduse_id) {ctx.fail ("Kehtetu rakenduse ID"); } klient = awsIot.device (mqtt_config); client.on ("connect", function () {console.log ("Ühendatud AWS IoT -ga"); // callback ();});

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.edu (); }} catch (e) {console.log ("ERANDID käitlejas:" + e); ctx.fail ("Erand:" + e); }}; /*** Helistatakse seansi alguses. */ function onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Helistatakse, kui kasutaja käivitab oskuse, täpsustamata, mida ta soovib. */ function onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Saatmine oma oskuste käivitamiseks. getWelcomeResponse (tagasihelistamine); } /*** Helistatakse, kui kasutaja määrab selle oskuse eesmärgi. */function onIntent (aimRequest, session) {//, callback) {console.log ("onIntent requestId =" + aimRequest.requestId + ", sessionId =" + session.sessionId); var kavatsus = kavatsusetaotlus.kavatsus, kavatsusnimi = kavatsusetaotlus.kava.nimi; console.log ("REQUEST to string =" + JSON.stringify (aimRequest)); var tagasihelistamine = null; // Saatke oma oskuste kavatsuste käitlejatele if ("GoIntent" === aimName) {doGoIntent (kavatsus, seanss); } else if ("CommandIntent" === kavatsuseNimi) {doCommandIntent (kavatsus, seanss); } else if ("TurnIntent" === kavatsuseNimi) {doTurnIntent (kavatsus, seanss); } else if ("HelpIntent" === aimNimi) {getWelcomeResponse (); } else {viska "Kehtetu kavatsus"; }} /*** Helistatakse, kui kasutaja seansi lõpetab. * Ei kutsuta, kui oskus naaseb peaksEndSession = true. */ function onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Lisage siia puhastusloogika} // --------------- Funktsioonid, mis kontrollivad oskuste käitumist -------------------- --- function getWelcomeResponse () {// Kui sooviksime seansi initsialiseerida, et sellel oleks mõned atribuudid, võiksime need siia lisada. var sessionAttributes = {}; var cardTitle = "Tere tulemast"; var speechOutput = "Tere tulemast DRONE CONTROLI". // TODO: kas droon on võrgus või väljaspool seda? Kui võrgus, kas see on ARMED? var repromptText = "Droon on käsuks valmis."; var shouldEndSession = vale; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** tegeleb GO kavatsusega. */ function doGoIntent (kavatsus, seanss, tagasihelistamine) {// var cardTitle = "Drone GO …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = vale; var speechOutput = ""; var suund = kavatsus.slots. Direction.value; var kaugus = kavatsus.slots. Distance.value; var ühik = kavatsus.slots. Unit.value; var validDirections = ["edasi", "edasi", "tagasi", "tagasi", "paremale", "vasakule", "üles", "alla", "otse", "ette", "otse edasi"]; var validUnits = ["jalg", "jalad", "meeter", "meetrid", "õu", "jardid"]; repromptText = "Ütle mulle, kui kaugele minna ja mis suunas."; var fail = vale; // sisendite valideerimine, kui (! (parseInt (kaugus)> = 1)) {speechOutput = "Ma ei saanud aru, kui kaugel te tahate, et ma teeksin."; ebaõnnestumine = tõsi; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "Ma ei saanud aru, millises suunas soovite sõita."; ebaõnnestumine = tõsi; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (ühik) == -1) {speechOutput = "Ma ei saanud aru ühikust, mida soovite, et ma reisiksin."; ebaõnnestumine = tõsi; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } kui (! ebaõnnestumine) {var cardTitle = "Droon läheb" + suund + "" + kaugus + "" + ühik; speechOutput = "Läheb" + suund + "" + kaugus + "" + ühik; mqttPublish (kavatsus, sessiooni atribuudid, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function doCommandIntent (kavatsus, seanss, tagasihelistamine) {

// var cardTitle = "Drooni käsk …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = vale; var speechOutput = ""; repromptText = "Ütle mulle, mis on drooni käsk."; var ülesanne = kavatsus.slots. Task.value; var validTasks = ["käivitamine", "maandumine", "r. t. l.", "hoidke", "jääge", "peatu", "tagasi käivitamisse", "katkesta"]; if (validTasks.indexOf (task) == -1) {speechOutput = "Ma ei saanud käsust aru."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Drooni käsu täitmine" + ülesanne; speechOutput = "Käsu täitmine" + ülesanne; mqttPublish (kavatsus, sessiooni atribuudid, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function doTurnIntent (kavatsus, seanss, tagasihelistamine) {

// var cardTitle = "Droonipööre …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = vale; var speechOutput = ""; repromptText = "Ütle mulle, kuidas sa tahad drooni keerata."; var suund = kavatsus.slots. Direction.value; var validDirections = ["parem", "vasak", "ümber"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "Ma ei saanud aru pöörde suunast."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Drooni pööramine" + suund; speechOutput = "Pööramine" + suund; mqttPublish (kavatsus, sessiooni atribuudid, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function mqttPublish (kavatsus, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (kavatsus); console.log ("mqttPublish: INTENT text =" + strIntent); // klient.publish ("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); client.on ("close", (function () {console.log ("MQTT CLIENT CLOSE - arvab, et see on edukalt tehtud."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("viga", (funktsioon (viga, antud) {console.log ("MQTT CLIENT ERROR !!" + viga);})); }

// --------------- Abimehed, kes koostavad kõik vastused -----------------------

function buildSpeechletResponse (title, output, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, kaart: {type: "Simple", title: title, content: output}, repompt: {outputSpeech: {type: "PlainText", text: repromptText}}, peaksEndSession: peaksEndSession}} funktsiooni buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}}

Soovitan: