Sisällysluettelo:

Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä: 6 vaihetta (kuvilla)
Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä: 6 vaihetta (kuvilla)

Video: Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä: 6 vaihetta (kuvilla)

Video: Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä: 6 vaihetta (kuvilla)
Video: CS50 2013 - Week 10, continued 2024, Heinäkuu
Anonim
Image
Image
Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä
Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä
Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä
Alexa Ääniohjattu Raspberry Pi Drone IoT: llä ja AWS: llä

Hei! Nimeni on Armaan. Olen 13-vuotias Massachusettsin poika. Tämä opetusohjelma näyttää, kuten voit päätellä otsikosta, kuinka rakentaa Raspberry Pi Drone. Tämä prototyyppi osoittaa, kuinka dronit kehittyvät ja kuinka suuri rooli niillä voi olla tulevaisuudessa. Voin ehdottomasti nähdä itseni heräämässä 10 vuoden kuluttua ja pyytämällä dronea hankkimaan aamiaisen minulle. Drone käyttää Amazon Alexaa, Amazon Web Services, IoT (esineiden internet) ja ennen kaikkea Raspberry Pi. Sen tarkoitus on osoittaa ja tiedottaa droneista ja siitä, miten ne paranevat päivittäin. Toivottavasti olet onnistunut ja opit droneista prosessin aikana. Onnea ja kiitos lukemisesta. -Armaan

Tarvikkeet

Prototyypin rakentamiseen tarvitaan erilaisia laitteistoja ja ohjelmistoja. Käytin The Drone Dojon online -opetusohjelmaa droonin rakentamiseen ja lueteltujen tekniikoiden integrointiin.

Drone -osaluettelo

Ohjelmistovaatimukset:

  • Amazonin verkkopalvelut
  • Läppäri
  • Mission Planer -ohjelmisto
  • Balena Etcher
  • MicroSD -kortti Raspbian -tiedostolla löytyy täältä
  • Amazon Alexa, fyysinen tai virtuaalinen

Vaihe 1: Osien kerääminen ja ymmärtäminen

Osien kerääminen ja ymmärtäminen
Osien kerääminen ja ymmärtäminen

Kaikki tavaraluettelossa mainitut osat ovat välttämättömiä, samoin kuin kaikkien osien selkeä ymmärtäminen. Löydät osat verkosta ja keräämisen jälkeen voit jatkaa lukemista. The Drone Dojon soittolista osien täydelliseen ymmärtämiseen löytyy täältä. Neljän minuutin selitys youtube-kanavallani löytyy täältä. Mitä tulee droneihin, ainoat osat, huolimatta siitä, mitä useimmat ihmiset ajattelevat, eivät ole vain moottoreita ja potkureita. Alla on kunkin osan perimmäiset tarkoitukset.

Raspberry Pi ja Emlid Navio2

Tämä osa on melko paljon keskusprosessori ja droonin pääkohta. Raspberry Pi toimii kuin tietokoneen keskusyksikkö, joka lähettää Navio2: lle komentoja suoritettavaksi PWM: n (Pulse Width Modulation Signals) kautta muihin dronin osiin

2. ESC: t (elektroniset nopeudensäätimet)

Nämä keltaiset osat löytyvät kehyksen alta. Ne on kytketty 4 Navioon, yksi kullekin moottorille. Vastaanotettuaan PWM -signaaleja ne pyörivät moottoreita ja aloittavat lennon.

3. Moottorit

Moottorit eivät tarvitse liikaa selityksiä, koska olet todennäköisesti tuttu niihin. Ne pyörivät ja pyörivät potkureita työntövoiman luomiseksi.

4. Potkurit

Potkurit luovat työntövoiman dronin lentämiseen. Ne pyörivät samaan suuntaan kuin moottorit ajoneuvon nostamiseksi.

5. Akku- ja virtamoduuli

LiPo -akku käyttää koko dronea kehyksen läpi virtamoduulin avulla. Se antaa noin 15-20 minuuttia lentoaikaa ja toimii virtalähteenä.

6. GPS

GPS kommunikoi satelliittien kanssa määrittääkseen dronin sijainnin. Se määrittää korkeuden, leveys- ja pituusasteen. Sitä voidaan käyttää maantieteelliseen aitaukseen, reittipisteisiin ja myös siirtymiseen tiettyihin paikkoihin tai suuntiin.

7. Telemetriamoduuli

Telemetriamoduuli yhdistää dronin maaohjausasemaan, meidän tapauksessamme Mission Planner, seurattavaksi.

8. RC -ohjain ja -moduuli sekä PPM -kooderi

RC -ohjain lähettää radion avulla signaaleja ja komentoja RC -moduuliin ohjaamaan dronea manuaalisesti. PPM -kooderi kääntää nämä signaalit Navio + RPI: n käsiteltäväksi ja suoritettavaksi.

9. Kehys

Tämä punainen ja valkoinen kehys toimii pohjana tai alustana muille sijoitettaville osille. Runko on aerodynaaminen ja kevyt, joten se sopii täydellisesti drone -rakenteeseemme.

Nyt kun tiedämme kaikki osat, voimme vihdoin rakentaa dronin! Siirry seuraavaan vaiheeseen!

Vaihe 2: Dronin kokoaminen

Dronin kokoaminen
Dronin kokoaminen

Tämä vaihe on luultavasti vaikein fyysisen rasituksen kannalta. Suosittelen, että otat toisen henkilön avuksi tai yrität käyttää osaluettelon apua. Prosessi on liian pitkä esittelemään täällä, joten annan toisen linkin, jota käytin The Drone Dojo.

Raspberry Pi -droonin rakentaminen

Jälleen, koska en mene liikaa yksityiskohtiin, korostan vain jokaisen vaiheen perusasiat.

1. Järjestä tarvikkeesi - Kerää materiaalimme ja varmista, että ne ovat helposti saatavilla

2. Suunnittele rakentaminen - Järjestä osat runkoon ja tee suunnitelma siitä, mitä rakennat

3. Juototyö - Tämä on työtä, jota on hieman vaikea tehdä yksin. Sinun on juotettava moottorien mukana tulevat kultaiset luodinliittimet ESC: ille. Seuraavaksi sinun on otettava rungon alaosa ja juotettava ESC: t alakehykseen tai virtalähteeseen. Akkumoduuli juotetaan myös virranjakelukorttiin

4. Kehyksen asentaminen - Sitten sinun on ruuvattava rungon yläosa sisään käsivarsien kanssa. Voit sitten kiinnittää Raspberry Pi: n päälle haluamallasi tavalla (käytin teippiä). Sitten voit kiinnittää ESC: t käsivarsiin vetoketjuilla. Nyt olemme melkein valmiita.

5. RC -ohjaimen sitominen vastaanottimeen - Yritä sitoa RC -ohjain ESC: n avulla noudattamalla yllä olevan soittolistan ohjeita.

6. Osien viimeistely kehykseen - Telemetriamoduulin teippi tai hihna runkoon. Kiinnitä PPM -kooderi myös käsivarteen. Nyt voit liittää ESC: n ja PPM -kooderin Navioon.

7. GPS -kiinnike + akku - Kokoa GPS -kiinnike eri ruuveilla ja kappaleilla. Kiinnitä GPS runkoon vetoketjuilla. En välttämättä käyttänyt GPS -kiinnitystä sen haurauden vuoksi, mutta se on sinun tehtäväsi. Seuraavaksi voit asettaa pariston Power Dist. Hallitus. Kiinnitin ja teipasin myös virtamoduulin kehykseen. Nyt laitteisto on melko valmiina. Nyt osa, jota odotamme!

8. Potkurien asennus !!! - Voit kiristää potkurit soittolistassa mainitun kaavion avulla. Sitten voit kytkeä ESC: t moottoriin ja olemme vihdoin valmiit rakentamaan dronin.

Ohjelmisto on seuraava, joten eteenpäin!

Vaihe 3: Raspberry Pi: n ja GCS: n määrittäminen (Mission Planner)

Raspberry Pi: n ja GCS: n määrittäminen (Mission Planner)
Raspberry Pi: n ja GCS: n määrittäminen (Mission Planner)

Jälleen löydät tarkemmat ohjeet soittolistasta viimeisestä vaiheesta. Luultavasti kuitenkin tiedät, miten RasPi asennetaan. Mutta tällä kertaa teemme sen päätön. Käytä Balena Etcheriä polttaaksesi käyttöjärjestelmän Navio OS -verkkosivustolta MicroSD -kortille. Kun se on kytketty tietokoneeseen, siirry wpa -anomiseen käyttämällä muistilehteä ++. Kirjoita sen jälkeen ssid ja salasana, jotta Raspberry Pi muodostaa yhteyden WiFi -verkkoon. Sitten sinun on lisättävä tiedosto nimeltä SSH. Tämä voi tapahtua komentorivillä tai muulla menetelmällä. Nyt voimme SSH. Voit käyttää komentokehotetta tai Puttyä. Käytin komentokehotetta ja kirjoitin "ssh pi@navio" yhteyden muodostamiseen tapauksessani, tai löydät IP -osoitteen ja ssh: n tällä tavalla. Kun muodostat yhteyden, käytä tätä videota Navion asentamiseen ja määrittämiseen. Telemetrian asettamiseksi sinun on ensin tehtävä muokkaus Raspberry Pi -laitteeseen. Muokkaa tätä ja yritä muodostaa yhteys Mission Planneriin. Jos telemetria ei toimi, voit kumota muokkauksen ja muodostaa yhteyden UDB -yhteydellä kirjoittamalla GCS (Ground Control Station, kuten kannettava) IP -osoitteen. Kun yhteys Mission Planneriin on muodostettu, voit ohjatun asennustoiminnon avulla kalibroida dronin kaikki osat. Jos tarvitset apua, katso soittolista uudelleen. Yleensä aina, kun asennat, melkein aina on virhe. Vianetsintä on yksi tämän projektin suurimmista osista. En voi auttaa sinua siellä, koska en ole tietoinen virheistäsi, mutta useimmat virheet voidaan korjata Internetin avulla. Kun kaikki on valmista, drone on valmis lentämään! Voit määrittää RC -ohjaimen ja lentotilat Mission Plannerissa. Yritä pitää vasen sauva alhaalla oikealla viiden sekunnin ajan droonin virittämiseksi. En suosittele lentämistä katsomatta opetusohjelmaa, koska drone on erittäin hauras ja helppo murtaa. Ensimmäistä kertaa lentäessäni rikkoin GPS -kiinnityksen ja jotkin potkurit. Jos et tarvitse ääniohjausta, voit pysähtyä tähän. Jos haluat oppia AWS: stä ja droonin ohjelmoinnista, jatka!

Vaihe 4: Dronin ohjelmointi lentämään Pythonilla

Dronin ohjelmointi lentämään Pythonilla
Dronin ohjelmointi lentämään Pythonilla

Ennen kuin pääsemme AWS: ään, meidän pitäisi ensin ymmärtää, kuinka ohjelmoida drone lentämään. Alkuasetusten jälkeen ääniohjauksen integroinnin ei pitäisi olla liian vaikeaa. Ensimmäinen asia, jonka voimme yrittää ymmärtää, on yksinkertaisen lentoonlähtö- ja laskeutumisohjelman tekeminen. Kun Raspberry Pi on asennettu, voimme SSH: n siihen uudelleen. Voit katsoa soittolistaa uudelleen tai seurata ohjeita.

1. Lataa ensin ArduPilot -lähdekoodi Raspberry Pi -hakemistosta

mkdir src

Hanki sitten tiedostot GitHubista git -kloonin avulla

git klooni -b Copter -3.6.11

Siirrytään nyt kohteeseen /src /ardupilot

cd src

cd ardupilot

Alustetaan nyt lähdetiedostot

git -alimoduulin päivitys -init -rekursiivinen

2. Seuraavaksi meidän on koottava Raspberry Pi: n laiteohjelmisto

Muista navigoida kansioon/src/ardupilot/cd: llä ennen kuin teet seuraavat vaiheet

Tämän jälkeen voit määrittää ne Navion avulla

./waf configure --board = navio2

Sitten voit kääntää

./waf -kohdistaa roskakoriin/arducopteriin

3. Nyt voimme asentaa lähdekoodin Navioon

Ensin annetaan navigoida oikeaan hakemistoon.

cd/etc/systemd/system

Muokkaa sitten tiedostoa

sudo vi arducopter.service

Jos se sanoo ExecStart, lisää seuraava jo olemassa olevan sijaan

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

Nyt voimme käyttää ardupilot -lähdekoodia toimintaan

sudo systemctl daemon-reload

Sitten voimme aloittaa uudelleen

sudo systemctl käynnistä arducopter uudelleen

Viimeisessä vaiheessa olemme vihdoin saaneet ArduPilotin käyttöön dronellamme

4. DroneKitin asentaminen

DroneKit on ohjelmisto, jonka avulla ohjelmoimme dronin lentämään. Jos haluat ymmärtää osan koodista, löydät asiakirjat täältä. Ensin meidän on asennettava paketti droonillemme ennen komentosarjan kirjoittamista.

Voimme asentaa python -paketin

pip install dronekit == 2.9.1

Tämä saattaa olla uusin versio tai ei, mutta olen käyttänyt sitä, jotta voin auttaa vianetsinnässä.

Tarkistaaksemme, onko se asennettu, voimme tehdä a

pip jäädyttää | grep dronekit

Nyt olemme vihdoin valmiita tekemään ensimmäisen python -skriptimme

5. lentoonlähtö_ja_maa.py

VAROITUS! Suosittelen perustavanlaatuisen ymmärryksen luomista pythonista, jotta voit oppia ja ymmärtää koodin. Jos haluat kirjoittaa ohjelman itse, seuraa tätä videota.

## Ensin luodaan hakemisto tämän koodin tallentamiseksi

cd dk ## Jos haluat tehdä sen itse, luo ohjelma käyttämällä ohjelmaa vi takeoff_and_land.py ##

Muussa tapauksessa voit katsoa tai käyttää liitteenä olevaa tiedostoa ja käyttää tiedostonsiirtoprotokollaa. Voimme kokeilla tätä ohjelmaa myöhemmin. Selvennetään ensin, että se on python -tiedosto, jota meidän on käytettävä

chmod +x lentoonlähtö_ja_maa.py

Yritä sitten käyttää seuraavaa koodia suorittamiseen

python takeoff_and_land.py -connect 127.0.0.1:14550

Ensimmäisellä kerralla se ei toiminut minullakaan. Jos linkin aikakatkaisu on olemassa, älä huoli, voit tehdä jotain. Avaa toinen kehote ja ssh. Voit yrittää asentaa jotain nimeltä mavproxy ja yrittää suorittaa sen. Tämän jälkeen voit suorittaa molemmat samanaikaisesti. Tämän pitäisi auttaa dronin yhdistämisessä. Kun tämä on tehty, minulla on haaste sinulle. Yritä selvittää, mitä toinen ohjelma (set_velocity_body.py) tekee ja miten se toimii. Jos teet, hyvä työ.

6. Eteenpäin!

Voimme nyt käyttää tätä tietämystä droonimme ääniohjaukseen. Alexa -drone -ohjaus käyttää paljon näitä ominaisuuksia ja paljon muuta. Onnea ja jatkoa!

Vaihe 5: Amazon Alexan ja Amazon Web Services -palvelun käyttäminen ääniohjauksen integroimiseksi

Amazon Alexan ja Amazon Web Servicesin käyttö ääniohjauksen integroimiseksi
Amazon Alexan ja Amazon Web Servicesin käyttö ääniohjauksen integroimiseksi
Amazon Alexan ja Amazon Web Servicesin käyttäminen ääniohjauksen integroimiseksi
Amazon Alexan ja Amazon Web Servicesin käyttäminen ääniohjauksen integroimiseksi

Tämä vaihe on yksi vähemmän dokumentoiduista. Tämä tarkoittaa, että vianetsintä on vaikeinta. Sen saaminen töihin kesti noin kuukauden, ehkä enemmän. Tärkeintä tässä on olla kärsivällinen. Tämä ominaisuus, jos se otetaan käyttöön todellisessa elämässä, voi muuttaa elämää. Voit vain pyytää Alexaa hankkimaan ruokaostoksesi sinulle sen sijaan, että menisit itse. Kuvittele sitä! Joten ilman lisäpuhelua mennään asiaan!

1. Raspberry Pi: n rekisteröiminen AWS IoT: n asiaksi

Jotta voimme käyttää esineiden Internetiä (Internet of Things), tarvitsemme jotain. Joten meidän on kirjauduttava AWS -konsoliin, jotta voimme käyttää AWS IoT: ta ensin. Siirry sitten IoT Coreen. Kun olet siellä, napsauta Hallitse ja luo sitten asia. Nimen lisäämisen jälkeen tarvitsemme varmenteen yhdistämistä varten. Suosittelen napsauttamaan yhden napsautuksen sertifikaattia. Kun olet nähnyt varmenneikkunan, muista ladata jokainen avain, mukaan lukien pääkäyttäjä. Sitten voit mennä ja viimeistellä asian luomisen. Seuraavaksi meidän on luotava politiikka. Palaa takaisin IoT Coreen. Napsauta sitten suojattua ja käytäntöjä. Napsauta sitten Luo käytäntö. Voit sitten luoda nimen ja lisätä resursseja. Kirjoita toiminnon alla iot * ja * resurssin alle ja napsauta salli vaikutus. Palaa sitten asiaan ja mene todistukseesi. Kun olet täällä, napsauta käytäntöjä. Voit sitten liittää asiaan liittyvän käytännön ja kaikki on valmista!

2. Koodin määrittäminen Raspberry Pi: lle ja vuorovaikutus IoT: n kanssa

Tässä osassa tarvitset SFTP -asiakkaan (käytin WinSCP: tä) tiedostonsiirtoon. Kun muodostamme yhteyden Raspberry Pi -laitteeseemme, meillä on oltava varmenneavaimet käsillä. Sinun on siirrettävä avaintiedostot Raspberry Pi -laitteeseen. Asenna myös AWSIoTPythonSDK pipillä Raspberry Pi -laitteeseen. Siirry sitten Raspberry Pi: n dk -hakemistoon. Käytät antamaani Alexa Drone Control -tiedostoa kommunikointiin IoT: n kanssa. Käyttääkseni tätä tiedostoa käytin Shell Scriptia käynnistyksessä. Näytän alla olevan koodin, koska jostain syystä en voi ladata tiedostoa. Jos ohjelma ei noudata AWS IoT: n viestejä testauksen aikana, älä huoli! Tämä voi olla minun vikani, koska Alexa Drone Control File ei ehkä sovi asiaasi. Joten korjaa se palaamalla AWS IoT -palveluun ja napsauttamalla vasemman paneelin oppia. Noudata ohjeita ja saatat joutua käynnistämään sen uudelleen. Anteeksi tuosta. Kun IoT -laitteesi alkaa toimia RasPi -ohjelman kanssa, voit integroida dronekit -koodin antamastani Alexa Drone Control -tiedostosta. Käytä sen jälkeen Shell -skriptiä, jonka annoin varmenteidesi ja IoT: n Rest API -päätepisteen kanssa.

# stop script on erroret -e # Tarkista onko CA -juuritiedosto olemassa, lataa jos ei jos [! -f./root-CA.crt]; sitten printf "\ nAWS IoT Root CA -varmenteen lataaminen AWS: stä … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # install AWS Device SDK for Python, jos sitä ei ole jo asennettu jos [! -d./aws-iot-device-sdk-python]; sitten printf "\ nAWS SDK: n asentaminen … / n" git-klooni https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# suorita pubi-/alinäytesovellus käyttämällä paketissa ladattuja varmenteita

printf "\ nKäynnistetään pubi/alinäytesovellus… / 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

Tämä ei toimi kaikille, koska nimet ovat erilaisia. Korvaa käyttämistäni avaimilla avainten nimet, kun siirrät tiedoston. Muista poistua dk: stä ennen tiedoston siirtämistä! Sen pitäisi olla kaikki mitä sinun tarvitsee tehdä toistaiseksi.

3. Alexa -taitosi kehittäminen

Tämä vaihe tuntuu paljon vaikeammalta kuin se todellisuudessa on. Ensin meidän on kirjauduttava sisään Alexa -kehittäjäkonsoliin. Napsauta sitten vain luo taito. Kun se pyytää valitsemaan taidoillesi sopivan mallin, paina vain mukautettua. Kun se pyytää valita menetelmän, valitse Provision your own. Voit nimetä sen mitä haluat. Mallia ei tarvita, joten aloita alusta. Seuraavaksi, kun olet luonut taitosi, sinun tulee saapua Taitojen rakentaja -näyttöön ja tarkistuslista oikealla. Tästä voimme aloittaa taitojemme kehittämisen. Ensimmäinen tarkistuslistalla on kutsun nimi. Tämä on mitä kerrot Alexalle vedota taitoosi. Minulle laitoin vain kutsunimeni droneksi. Nyt voimme siirtyä aikeisiimme, ilmaisiimme ja lähtöpaikkoihimme. Täällä voit antaa droonille komentoja, kuten nousta 1 metri ylös tai mennä oikealle tai alas. Omani toimii tällä hetkellä vain yhdellä metrillä. Voit napsauttaa JSON Editoria vasemman paneelin alaosassa. Voit sitten liittää siihen seuraavan koodin.

Kun olet liittänyt koodin JSON -editoriin, voit napsauttaa tarkistuslistan kolmatta vaihetta ja se luo vuorovaikutusmallisi puolestasi. Tämän vaiheen avulla olet valmis toistaiseksi. Voit jättää päätepisteen tyhjäksi toistaiseksi!

Vaihe 4: Lambda -toiminnon rakentaminen

Tämä vaihe on nyt se, joka sinun on selvitettävä itse. Kerron sinulle, kuinka liittää se Alexa Skilliin, mutta sinun on koodattava se itse. Siirry siis ensin AWS -hallintakonsoliin. Siirry sitten Lambdaan. Voit sitten luoda funktion, joka nimeää sen haluamallasi tavalla. Varmista, että kirjoitat sen tyhjästä ja tee ajonaika haluamallasi ohjelmointikielellä. Käytin Node.js. Jos haluat lisätä Alexa Skillin, lisää liipaisin ja valitse Alexa Skills Kit (ASK). Kopioi Lambda ARN ja palaa Alexa Skilliin. Siirry nyt päätepisteeseen. Voit liittää ARN: n, tallentaa ja rakentaa uuden mallin. Ota sitten Alexa Skill ID ja liitä se liipaisinosaan, jossa se pyytää sinua Lambdassa. Vieritä seuraavaksi Lambdalla alas ja etsi perusasetukset ja tee aikakatkaisu 10 sekuntia. Nyt sinun on selvitettävä koodi. Saat vinkkejä alla olevista verkkosivustoista.

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

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

ja voit käyttää liittämääni tiedostoa, mutta se on epätäydellinen eikä toimi.

/ *** Ohjaa APM / Pixhawk -nelikopteriasi äänelläsi Amazon Alexan, Lambdan ja 2 -metrisen MQTT: n avulla.*/ var awsIot = vaatia ('aws-iot-device-sdk'); var config = vaatii ("./ config"); var deviceName = "EchoDroneControl"; // tämä laite on todella ohjain var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + laitteenNimi, // + "-Lambda-" + (uusi päivämäärä (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var asiakas = null; // Reititä saapuva pyyntö tyypin (LaunchRequest, IntentRequest jne.) Perusteella. Pyynnön JSON -teksti annetaan tapahtumaparametrissa. export.handler = toiminto (tapahtuma, konteksti) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = asiayhteys; if (event.session.application.applicationId! == app_id) {ctx.fail ("Virheellinen sovellustunnus"); } asiakas = awsIot.device (mqtt_config); client.on ("connect", function () {console.log ("Connected to AWS IoT"); // callback ();});

if (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } if (event.request.type === "LaunchRequest") {onLaunch (event.request, event.session); } muu if (event.request.type === "IntentRequest") {onIntent (event.request, event.session); } else if (event.request.type === "SessionEndedRequest") {onSessionEnded (event.request, event.session); ctx.suorita (); }} catch (e) {console.log ("EXCEPTION in handler:" + e); ctx.fail ("Poikkeus:" + e); }}; /*** Soitetaan, kun istunto alkaa. */ function onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Soitetaan, kun käyttäjä käynnistää taidon määrittelemättä mitä haluaa. */ function onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Lähetä taitosi lanseeraukseen. getWelcomeResponse (takaisinsoitto); } /*** Soitetaan, kun käyttäjä määrittää tämän taidon tarkoituksen. */function onIntent (aimRequest, session) {//, callback) {console.log ("onIntent requestId =" + aimRequest.requestId + ", sessionId =" + session.sessionId); var aikomus = aikomuksenpyyntö.intentti, aikomuksen_nimi = aikomuksenpyyntö.tarkoituksen nimi; console.log ("REQUEST to string =" + JSON.stringify (aimRequest)); var callback = null; // Lähetä taitosi aikomusten käsittelijöille, jos ("GoIntent" === aimName) {doGoIntent (tarkoitus, istunto); } else if ("CommandIntent" === aimName) {doCommandIntent (tarkoitus, istunto); } else if ("TurnIntent" === aimName) {doTurnIntent (aikomus, istunto); } else if ("HelpIntent" === aimName) {getWelcomeResponse (); } else {heittää "Virheellinen tarkoitus"; }} /*** Soitetaan, kun käyttäjä lopettaa istunnon. * Ei kutsuta, kun taito palaa shouldEndSession = true. */ function onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Lisää puhdistuslogiikka tähän} // --------------- Toiminnot, jotka ohjaavat taitojen käyttäytymistä -------------------- --- function getWelcomeResponse () {// Jos haluaisimme alustaa istunnon, jotta sillä olisi joitain määritteitä, voisimme lisätä ne tähän. var sessionAttributes = {}; var cardTitle = "Tervetuloa"; var speechOutput = "Tervetuloa DRONE CONTROL -laitteeseen."; // TODO: onko drone online vai offline? Jos verkossa, onko se ARMED? var repromptText = "Drone valmis komentoon."; var shouldEndSession = epätosi; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** hoitaa GO -tarkoituksen. */ toiminto doGoIntent (tarkoitus, istunto, takaisinsoitto) {// var cardTitle = "Drone GO…"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = epätosi; var speechOutput = ""; var suunta = tarkoitus.paikat.suunta.arvo; var etäisyys = tarkoitus.paikat. Etäisyys.arvo; var -yksikkö = tarkoitus.paikat. Yksikköarvo; var validDirections = ["eteenpäin", "eteenpäin", "taaksepäin", "taakse", "oikealle", "vasemmalle", "ylös", "alas", "suoraan", "eteenpäin", "suoraan eteenpäin"]; var validUnits = ["jalka", "jalat", "metri", "metrit", "piha", "jaardit"]; repromptText = "Kerro kuinka pitkälle ja mihin suuntaan."; var fail = false; // vahvista syötteet, jos (! (parseInt (distance)> = 1)) {speechOutput = "En voinut ymmärtää etäisyyttä, jonka haluat minun kulkevan."; epäonnistua = totta; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "En voinut ymmärtää suuntaa, jonka haluat minun kulkevan."; epäonnistua = totta; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "En voinut ymmärtää yksikköä, jonka haluat minun matkustavan."; epäonnistua = totta; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } jos (! epäonnistua) {var cardTitle = "Drone menossa" + suunta + "" + etäisyys + "" + yksikkö; speechOutput = "Menossa" + suunta + "" + etäisyys + "" + yksikkö; mqttPublish (tarkoitus, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function doCommandIntent (tarkoitus, istunto, takaisinsoitto) {

// var cardTitle = "Drone COMMAND…"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = epätosi; var speechOutput = ""; repromptText = "Kerro minulle, mikä on dronin komento."; var task = aim.slots. Task.value; var validTasks = ["käynnistää", "laskeutua", "r. t. l.", "hold", "stay", "stop", "return to launch", "abort"]; if (validTasks.indexOf (task) == -1) {speechOutput = "En voinut ymmärtää komentoa."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Drone -komennon suorittaminen" + tehtävä; speechOutput = "Suorittaa komentoa" + tehtävä; mqttPublish (tarkoitus, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function doTurnIntent (tarkoitus, istunto, takaisinsoitto) {

// var cardTitle = "Drone Turn…"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = epätosi; var speechOutput = ""; repromptText = "Kerro minulle, miten haluat kääntää dronin."; var suunta = tarkoitus.paikat.suunta.arvo; var validDirections = ["oikea", "vasen", "ympärillä"]; if (validDirections.indexOf (suunta) == -1) {speechOutput = "En voinut ymmärtää käännöksen suuntaa."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Drone -kääntyminen" + suunta; speechOutput = "Kääntyminen" + suunta; mqttPublish (tarkoitus, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

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

{var strIntent = JSON.stringify (tarkoitus); 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 - luulee, että se on tehty, onnistuneesti."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("virhe", (toiminto (virhe, myönnetty) {console.log ("MQTT CLIENT ERROR !!" + err);})); }

// --------------- Auttajat, jotka rakentavat kaikki vastaukset -----------------------

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

Suositeltava: