Satura rādītājs:

Alexa balss vadīts Raspberry Pi drons ar IoT un AWS: 6 soļi (ar attēliem)
Alexa balss vadīts Raspberry Pi drons ar IoT un AWS: 6 soļi (ar attēliem)

Video: Alexa balss vadīts Raspberry Pi drons ar IoT un AWS: 6 soļi (ar attēliem)

Video: Alexa balss vadīts Raspberry Pi drons ar IoT un AWS: 6 soļi (ar attēliem)
Video: ВСЯ НОЧЬ С ПОЛТЕРГЕЙСТОМ В ЖИЛОМ ДОМЕ, я заснял жуткую активность. 2024, Jūlijs
Anonim
Image
Image
Ar balsi kontrolēts Raspberry Pi drons ar IoT un AWS
Ar balsi kontrolēts Raspberry Pi drons ar IoT un AWS
Ar balsi kontrolēts Raspberry Pi drons ar IoT un AWS
Ar balsi kontrolēts Raspberry Pi drons ar IoT un AWS

Sveiki! Mani sauc Armaan. Es esmu 13 gadus vecs zēns no Masačūsetsas. Šī apmācība parāda, kā jūs varat secināt no nosaukuma, kā izveidot Raspberry Pi dronu. Šis prototips parāda, kā droni attīstās, un arī to, cik liela loma tiem varētu būt nākotnē. Es noteikti redzu sevi pamostos pēc 10 gadiem un lūdzu dronam, lai viņš man paēd brokastis. Dronā darbojas Amazon Alexa, Amazon Web Services, IoT (lietu internets) un vissvarīgāk Raspberry Pi. Tas ir paredzēts, lai demonstrētu un informētu par droniem un to uzlabošanos katru dienu. Cerams, ka jums veiksies un uzzināsit par droniem šajā procesā. Lai veicas un paldies par lasīšanu. -Armanis

Piegādes

Lai izveidotu prototipu, ir vajadzīgas dažādas aparatūras un programmatūras vajadzības. Es izmantoju The Drone Dojo tiešsaistes apmācību, lai izveidotu dronu un integrētu uzskaitītās tehnoloģijas. Drona detaļu sarakstu varat atrast šeit:

Dronu detaļu saraksts

Prasības programmatūrai:

  • Amazon tīmekļa pakalpojumi
  • Portatīvais dators
  • Misijas plānotāja programmatūra
  • Balena Etcher
  • MicroSD karte ar Raspbian failu atrodama šeit
  • Amazon Alexa, fiziska vai virtuāla

1. darbība. Daļu apkopošana un izpratne

Daļu apkopošana un izpratne
Daļu apkopošana un izpratne

Katra piegādes sarakstā minētā daļa ir nepieciešama, un tāpat ir skaidra izpratne par katru daļu. Daļas varat atrast tiešsaistē, un, tiklīdz tās ir savāktas, turpiniet lasīt. The Drone Dojo atskaņošanas sarakstu, lai pilnībā izprastu daļas, var atrast šeit. 4 minūšu paskaidrojums manā youtube kanālā atrodams šeit. Runājot par droniem, vienīgās detaļas, neskatoties uz to, ko domā lielākā daļa cilvēku, nav tikai motori un dzenskrūves. Zemāk ir katras daļas galvenie mērķi.

Raspberry Pi ar Emlid Navio2

Šī daļa ir gandrīz centrālais procesors un drona galvenais punkts. Raspberry Pi darbojas kā datora centrālais procesors, kas nosūta komandas Navio2, lai tās izpildītu, izmantojot PWM (impulsa platuma modulācijas signālus) uz citām drona daļām.

2. ESC (elektroniskie ātruma regulatori)

Šīs dzeltenās daļas atrodas zem rāmja. Tie ir pievienoti 4 Navio, viens katram motoram. Saņemot PWM signālus, viņi rotē motorus un sāk lidojumu.

3. Motori

Motoriem nav vajadzīgs pārāk daudz skaidrojumu, jo jūs, iespējams, esat ar tiem pazīstami. Viņi rotē un griežas dzenskrūves, lai radītu vilci.

4. Dzenskrūves

Propelleri rada vilces spēku, lai drons varētu lidot. Tie griežas tajā pašā virzienā kā motori, lai paceltu transportlīdzekli.

5. Akumulatora un barošanas modulis

LiPo akumulators baro visu dronu caur rāmi, izmantojot barošanas moduli. Tas dod apmēram 15-20 minūtes lidojuma laika un darbojas kā enerģijas avots.

6. GPS

GPS sazinās ar satelītiem, lai noteiktu drona atrašanās vietu. Tas nosaka augstumu, platumu un garumu. To var izmantot ģeožogiem, ceļa punktiem, kā arī pārvietošanai uz noteiktām pozīcijām vai virzieniem.

7. Telemetrijas modulis

Telemetrijas modulis savieno mūsu dronu ar zemes vadības staciju, mūsu gadījumā - misijas plānotāju, lai to uzraudzītu.

8. RC kontrolieris un modulis kopā ar PPM kodētāju

RC kontrolieris izmanto radio, lai raidītu signālus un komandas RC modulim, lai manuāli vadītu dronu. PPM kodētājs tulko šos signālus, lai tos apstrādātu un izpildītu Navio + RPI.

9. Rāmis

Šis sarkanbalts rāmis darbojas kā pamats vai platforma pārējām novietojamajām detaļām. Rāmis ir aerodinamisks un viegls, tāpēc ideāli piemērots mūsu dronu konstrukcijai.

Tagad, zinot par katru daļu, mēs beidzot varam uzbūvēt dronu! Uz priekšu uz nākamo soli!

2. solis: drona salikšana

Drona salikšana
Drona salikšana

Šis solis, iespējams, ir visgrūtākais fiziskās piepūles ziņā. Es iesaku palīdzēt citai personai vai mēģināt izmantot palīdzības roku detaļu sarakstā. Process šeit ir pārāk ilgs, lai to demonstrētu, tāpēc es sniegšu vēl vienu saiti, kuru izmantoju The Drone Dojo.

Raspberry Pi drona veidošana

Atkal, tā kā es pārāk neiedziļināšos detaļās, es tikai izcelšu katra soļa pamatus.

1. Organizējiet savus piederumus - apkopojiet mūsu materiālus un pārliecinieties, ka tie ir viegli pieejami

2. Plānojiet savu konstrukciju - sakārtojiet savas daļas uz rāmja, lai izveidotu projektu, ko jūs veidosit

3. Lodēšanas darbs - tas ir darbs, kuru ir grūti izdarīt vienatnē. Jums ir jāpielodē zelta lodīšu savienotāji, kas tiek piegādāti kopā ar motoriem, pie ESC. Tālāk jums jāņem rāmja apakšējā daļa un jāpielodē ESC pie apakšējā rāmja vai strāvas sadales paneļa. Akumulatora modulis tiks pielodēts arī strāvas sadales panelī

4. Rāmja uzstādīšana - Pēc tam kopā ar rokām ir jāieskrūvē rāmja augšējā daļa. Pēc tam jūs varat piestiprināt Raspberry Pi uz augšu, kā vien vēlaties. (Es izmantoju līmlenti). Pēc tam ESC var piestiprināt pie rokām ar rāvējslēdzējiem. Tagad esam gandrīz pabeiguši.

5. RC kontrollera saistīšana ar uztvērēju - Mēģiniet izpildīt iepriekšējā atskaņošanas saraksta norādījumus, lai sasaistītu RC kontrolieri, izmantojot ESC.

6. Rāmja detaļu pabeigšana - līmlente vai siksna telemetrijas modulī uz rāmja. Piestipriniet PPM kodētāju arī ar roku. Tagad jūs varat savienot ESC un PPM kodētāju ar Navio.

7. GPS stiprinājums + akumulators - samontējiet GPS stiprinājumu ar dažādām skrūvēm un detaļām. Izmantojot rāvējslēdzējus, pievienojiet GPS rāmim. Es ne vienmēr izmantoju GPS stiprinājumu tā trausluma dēļ, bet tas ir atkarīgs no jums. Tālāk jūs varat ievietot akumulatoru starp Power Dist. Padome. Es piesprādzēju un piestiprināju strāvas moduli pie rāmja. Tagad jūsu aparatūra ir gandrīz iestatīta. Tagad par daļu, ko gaidījām!

8. Propelleru uzstādīšana !!! - Jūs varat pievilkt dzenskrūves, izmantojot atskaņošanas sarakstā minēto diagrammu. Tad jūs varat pievienot ESC motoriem, un mēs beidzot esam pabeiguši drona veidošanu.

Nākamā programmatūra, tā tālāk!

3. darbība. Raspberry Pi un GCS konfigurēšana (misijas plānotājs)

Raspberry Pi un GCS konfigurēšana (misijas plānotājs)
Raspberry Pi un GCS konfigurēšana (misijas plānotājs)

Atkal, jūs varat atrast detalizētākus norādījumus atskaņošanas sarakstā no pēdējā soļa. Tomēr jūs droši vien zināt, kā iestatīt RasPi. Bet šoreiz mēs to darām bez galvas. Izmantojiet Balena Etcher, lai ierakstītu OS no Navio OS vietnes MicroSD kartē. Kamēr tas ir pievienots datoram, dodieties uz wpa lūdzēju, izmantojot piezīmju grāmatiņu ++. Pēc tam ievadiet ssid un paroli, lai Raspberry Pi izveidotu savienojumu ar jūsu WiFi. Tad jums jāpievieno fails ar nosaukumu SSH. To var izdarīt, izmantojot komandrindu vai citu metodi. Tagad mēs varam SSH. Varat izmantot komandu uzvedni vai Putty. Manā gadījumā es izmantoju komandu uzvedni un ierakstīju "ssh pi@navio", lai izveidotu savienojumu, vai arī jūs varat atrast IP adresi un ssh tādā veidā. Kad izveidojat savienojumu, izmantojiet šo video, lai iestatītu un konfigurētu Navio. Lai iestatītu telemetriju, vispirms jāveic rediģēšana Raspberry Pi. Izpildiet šo, lai rediģētu, un mēģiniet izveidot savienojumu ar misijas plānotāju. Ja telemetrija nedarbojas, varat atsaukt rediģēšanu un izveidot savienojumu, izmantojot UDB savienojumu, ievadot savu GCS (Ground Control Station, piemēram, klēpjdatora) IP. Kad esat izveidojis savienojumu ar misijas plānotāju, varat izmantot iestatīšanas vedni, lai kalibrētu visas drona daļas. Ja jums nepieciešama palīdzība, vēlreiz skatiet atskaņošanas sarakstu. Parasti, iestatot, gandrīz vienmēr ir kļūda. Problēmu novēršana ir viena no lielākajām šī projekta daļām. Es īsti nevaru jums palīdzēt, jo es nezinu par jūsu kļūdām, taču lielāko daļu kļūdu var novērst, izmantojot internetu. Kad viss ir gatavs, tad drons ir gatavs lidojumam! RC kontrolieri un lidojuma režīmus varat iestatīt misijas plānotājā. Mēģiniet piecas sekundes turēt kreiso nūju apakšā pa labi, lai apbruņotu dronu. Es neiesaku lidot, neskatoties uz pamācību, jo drons ir ļoti trausls un viegli salaužams. Man, pirmo reizi lidojot ar to, es salauzu GPS stiprinājumu un dažus dzenskrūves. Ja jums nav nepieciešama balss vadība, varat apstāties šeit. Lai uzzinātu par AWS un drona programmēšanu, turpiniet!

4. solis: Drona programmēšana lidošanai ar Python

Drona programmēšana lidošanai ar Python
Drona programmēšana lidošanai ar Python

Pirms iekļūšanas AWS, mums vispirms vajadzētu saprast, kā ieprogrammēt dronu lidot. Pēc sākotnējās iestatīšanas balss vadības integrēšanai nevajadzētu būt pārāk sarežģītai. Pirmā lieta, ko mēs varam mēģināt izprast, ir vienkāršas pacelšanās un nosēšanās programmas izveidošana. Pēc Raspberry Pi iestatīšanas mēs atkal varam tajā iekļaut SSH. Jūs varat vēlreiz apskatīt atskaņošanas sarakstu vai izpildīt manus norādījumus.

1. Vispirms lejupielādēsim ArduPilot avota kodu Raspberry Pi direktorijā

mkdir src

Pēc tam iegūstiet failus no GitHub, izmantojot git klonu

git clone -b Copter -3.6.11

Tagad pāriesim uz /src /ardupilot

cd src

cd ardupilots

Tagad inicializēsim avota failus

git apakšmoduļa atjauninājums -init -rekursīvs

2. Tālāk mums ir jāapkopo programmaparatūra Raspberry Pi

Pirms nākamo darbību veikšanas noteikti pārejiet uz/src/ardupilot/ar cd

Pēc tam, lai konfigurētu īpaši Navio, izmantojot

./waf configure -dēlis = navio2

Tad jūs varat apkopot ar

./waf -mērķē uz tvertni/arducopteru

3. Tagad mēs varam instalēt avota kodu Navio

Vispirms dodieties uz labo direktoriju.

cd/etc/systemd/system

Pēc tam rediģējiet failu

sudo vi arducopter.serviss

Tur, kur teikts ExecStart, ievietojiet tālāk norādīto, nevis to, kas jau ir

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

Tagad, lai lietotu ardupilot avota kodu darbībā, mēs varam izmantot

sudo systemctl dēmonu pārlādēšana

Tad mēs varam restartēt ar

sudo systemctl restartējiet arducopteru

Pēdējā posmā beidzot esam pabeiguši ArduPilot iestatīšanu mūsu dronā

4. DroneKit instalēšana

DroneKit ir programmatūra, kuru mēs izmantosim, lai ieprogrammētu drona lidošanu. Lai saprastu daļu no koda, dokumentāciju varat atrast šeit. Vispirms pirms skripta rakstīšanas mums ir jāinstalē pakotne mūsu dronā.

Mēs varam instalēt python pakotni ar

pip install dronekit == 2.9.1

Šī var būt vai nav jaunākā versija, taču es to izmantoju, lai es varētu palīdzēt novērst problēmas.

Lai pārbaudītu, vai tas ir instalēts, mēs varam veikt a

pip iesaldēt | grep dronekit

Tagad mēs beidzot esam gatavi izveidot savu pirmo python skriptu

5. pacelšanās_un_lend.py

BRĪDINĀJUMS! Es iesaku izveidot pamata izpratni par python, lai jūs varētu iemācīties un saprast kodu. Ja vēlaties rakstīt programmu pats, sekojiet šim video.

## Vispirms neveidosim direktoriju šī koda saglabāšanai

cd dk ## Ja vēlaties to izdarīt pats, izmantojiet programmu vi takeoff_and_land.py ##, lai izveidotu programmu

Pretējā gadījumā varat apskatīt vai izmantot pievienoto failu un izmantot failu pārsūtīšanas protokolu. Pēc tam mēs varam izmēģināt šo programmu. Vispirms noskaidrojiet, ka tas ir pitona fails, kas mums jāizmanto

chmod +x pacelšanās_un_lend.py

Pēc tam, lai palaistu, izmantojiet šo kodu

python takeoff_and_land.py -pieslēdzieties 127.0.0.1:14550

Arī pirmajā reizē tas man nederēja. Ja ir saites taimauts, tad neuztraucieties, ka varat kaut ko darīt. Atveriet citu uzvedni un ssh. Varat mēģināt instalēt kaut ko, ko sauc par mavproxy, un mēģināt to palaist. Pēc tam jūs varat palaist abus vienlaikus. Tam vajadzētu palīdzēt savienot dronu. Kad tas ir izdarīts, man jums ir izaicinājums. Mēģiniet saprast, ko dara otra programma (set_velocity_body.py) un kā panākt, lai tā darbotos. Ja jūs to darāt, labs darbs.

6. Uz priekšu!

Tagad mēs varam izmantot šīs zināšanas, lai mūsu dronu vadītu ar balsi. Alexa dronu vadība izmanto daudzas no šīm funkcijām un daudz ko citu. Lai veicas un uz priekšu!

5. darbība: izmantojot Amazon Alexa un Amazon Web Services, lai integrētu balss vadību

Izmantojot Amazon Alexa un Amazon Web Services, lai integrētu balss vadību
Izmantojot Amazon Alexa un Amazon Web Services, lai integrētu balss vadību
Izmantojot Amazon Alexa un Amazon Web Services, lai integrētu balss vadību
Izmantojot Amazon Alexa un Amazon Web Services, lai integrētu balss vadību

Šis solis ir viens no mazāk dokumentētajiem. Tas nozīmē, ka to būs visgrūtāk novērst. Tikai līdz darba sākšanai man vajadzēja apmēram mēnesi, varbūt vairāk. Vissvarīgākais šeit ir būt pacietīgam. Šī funkcija, ja tā tiek ieviesta reālajā dzīvē, var mainīt dzīvi. Jūs varat vienkārši pateikt Alexa, lai tā saņem jūsu pārtikas preces, nevis iet pats. Iedomājies šo! Tāpēc bez liekas piepūles ķersimies pie tā!

1. Raspberry Pi reģistrēšana kā lieta AWS IoT

Lai izmantotu lietu internetu (lietu internetu), mums ir vajadzīga lieta. Tāpēc mums vispirms jāpiesakās AWS konsolē, lai vispirms izmantotu AWS IoT. Pēc tam dodieties uz IoT Core. Kad esat tur, jums vajadzētu noklikšķināt uz Pārvaldīt un pēc tam izveidot lietu. Pēc nosaukuma pievienošanas, lai izveidotu savienojumu, mums ir nepieciešams sertifikāts. Es ieteiktu noklikšķināt uz viena klikšķa sertifikāta. Pēc tam, kad esat redzējis sertifikāta ekrānu, noteikti lejupielādējiet katru atslēgu, ieskaitot saknes CA. Tad jūs varat doties un pabeigt lietas izveidi. Tālāk mums ir jāizveido politika. Dodieties atpakaļ uz IoT Core. Pēc tam noklikšķiniet uz drošas un noklikšķiniet uz politikas. Pēc tam noklikšķiniet uz Izveidot politiku. Pēc tam varat izveidot nosaukumu un pievienot resursus. Sadaļā Darbība ierakstiet iot * un ierakstiet * zem resursa un nospiediet atļaut efektu. Pēc tam atgriezieties pie savas lietas un dodieties uz sertifikātu. Kad esat šeit, noklikšķiniet uz politikas. Pēc tam varat pievienot savu politiku šai lietai, un viss ir gatavs!

2. Koda iestatīšana Raspberry Pi un mijiedarbība ar IoT

Šajā daļā failu pārsūtīšanai jums būs nepieciešams SFTP klients (es izmantoju WinSCP). Izveidojot savienojumu ar mūsu Raspberry Pi, mums būs jābūt pie sertifikāta atslēgas. Jums ir jāpārsūta atslēgas faili uz Raspberry Pi. Jums vajadzētu arī instalēt AWSIoTPythonSDK ierīcē Raspberry Pi. Pēc tam dodieties uz Raspberry Pi direktoriju dk. Jūs izmantojat Alexa Drone Control failu, ko es devu, lai sazinātos ar IoT. Lai izmantotu šo failu, es izmantoju Shell skriptu. Tālāk es parādīšu kodu, jo kāda iemesla dēļ nevaru augšupielādēt failu. Ja testēšanas laikā programma neņem ziņojumus no AWS IoT, neuztraucieties! Tā varētu būt mana vaina, jo Alexa drona vadības fails var neatbilst jūsu lietām. Tātad, lai to labotu, atgriezieties AWS IoT un kreisajā panelī noklikšķiniet uz mācīties. Izpildiet norādījumus, un jums, iespējams, būs jārestartē. Piedod par to. Kad jūsu IoT sāk strādāt ar RasPi programmu, varat integrēt dronekit kodu no manis dotā Alexa Drone Control faila. Pēc tam izmantojiet Shell skriptu, ko devu kopā ar sertifikātiem un Rest API Endpoint no IoT.

# stop script on kļūdu kopa -e # Pārbaudiet, vai pastāv saknes CA fails, lejupielādējiet, ja nē, ja [! -f./root-CA.crt]; tad printf "\ nAWS IoT Root CA sertifikāta lejupielāde no AWS … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # instalēt AWS ierīces SDK Python, ja tas vēl nav instalēts ja [! -d./aws-iot-device-sdk-python]; tad printf "\ nAWS SDK instalēšana … / n" git klons https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py instalēt popd fi

# palaidiet lietotni krodziņam/apakšparaugam, izmantojot komplektā lejupielādētos sertifikātus

printf "\ nIzmantojot pub/sub parauga lietojumprogrammu… / 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

Tas jums visiem nedarbosies, jo nosaukumi ir atšķirīgi. Manu izmantoto atslēgu vietā, pārsūtot failu, nomainiet tās ar jūsu atslēgu nosaukumiem. Pirms faila pārsūtīšanas noteikti izejiet no dk! Tam pagaidām vajadzētu būt vienīgajam.

3. Alexa prasmju veidošana

Šis solis šķiet daudz grūtāks nekā patiesībā. Pirmkārt, mums jāpiesakās Alexa izstrādātāja konsolē. Pēc tam vienkārši nospiediet izveidot prasmi. Kad tiek prasīts izvēlēties savu prasmju modeli, vienkārši nospiediet pielāgotu. Kad tiek lūgts izvēlēties metodi, nospiediet savu. Jūs varat to nosaukt, kā vien vēlaties. Veidne nav nepieciešama, tāpēc izvēlieties sākt no nulles. Pēc tam, kad esat izveidojis savu prasmi, jums vajadzētu nokļūt prasmju veidotāja ekrānā ar kontrolsarakstu labajā pusē. No šejienes mēs varam sākt veidot savas prasmes. Pirmais kontrolsarakstā ir izsaukuma nosaukums. Tas ir tas, ko jūs teiksiet Alexa izmantot jūsu prasmes. Manuprāt, es vienkārši ievietoju savu aicinājuma vārdu kā dronu. Tagad mēs varam doties pie saviem nodomiem, izteikumiem un laika nišām. Šeit jūs varat veikt drona komandas, piemēram, pacelties par 1 metru augšup vai pa labi vai uz leju. Manējais pagaidām patiešām darbojas tikai ar vienu metru. Jūs varat noklikšķināt uz JSON redaktora kreisā paneļa apakšā. Pēc tam varat tajā ielīmēt šādu kodu.

Pēc koda ielīmēšanas JSON redaktorā varat noklikšķināt uz kontrolsaraksta trešā soļa, un tas izveidos jūsu mijiedarbības modeli. Ar šo soli jūs pagaidām būsit pabeidzis. Pagaidām galapunkta slotu varat atstāt tukšu!

4. darbība. Lambda funkcijas izveide

Tagad šis solis jums būs jāizdomā pašam. Es jums pastāstīšu, kā to savienot ar Alexa Skill, bet jums tas būs jākodē pats. Tātad, vispirms dodieties uz AWS pārvaldības konsoli. Pēc tam dodieties uz Lambda. Pēc tam varat izveidot funkciju, nosaucot to, ko vēlaties. Noteikti izveidojiet to no nulles un izveidojiet izpildlaiku neatkarīgi no vēlamās programmēšanas valodas. Es izmantoju Node.js. Lai pievienotu Alexa Skill, pievienojiet aktivizētāju un atlasiet Alexa Skills Kit (ASK). Kopējiet savu Lambda ARN un atgriezieties Alexa prasmē. Tagad dodieties uz galapunktu. Jūs varat ielīmēt savu ARN, saglabāt un izveidot jaunu modeli. Pēc tam paņemiet Alexa prasmju ID un ielīmējiet to aktivizēšanas sadaļā, kur tas jums jautā Lambda. Pēc tam ritiniet uz leju Lambda un atrodiet pamata iestatījumus un iestatiet taimautu 10 sekundes. Tagad jums ir jāizdomā kods. Lai iegūtu padomus, varat izmantot tālāk norādītās vietnes.

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

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

un jūs varat izmantot manu pievienoto failu, taču tas ir nepilnīgs un nedarbosies.

/ *** Kontrolējiet savu APM / Pixhawk kvadkopteri ar savu balsi, izmantojot Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = pieprasīt ('aws-iot-device-sdk'); var config = pieprasīt ("./ config"); var deviceName = "EchoDroneControl"; // šī ierīce patiešām ir kontrolieris var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + deviceName, // + "-Lambda-" + (jauns datums (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var klients = null; // Ienākošā pieprasījuma maršrutēšana, pamatojoties uz veidu (LaunchRequest, IntentRequest utt.) Notikuma parametrā ir sniegta pieprasījuma JSON pamatteksts. export.handler = funkcija (notikums, konteksts) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = konteksts; ja (event.session.application.applicationId! == app_id) {ctx.fail ("Nederīgs lietojumprogrammas ID"); } klients = awsIot.device (mqtt_config); client.on ("connect", function () {console.log ("Savienots ar AWS IoT"); // atzvanīšana ();});

ja (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } if (event.request.type === "LaunchRequest") {onLaunch (event.request, event.session); } cits if (event.request.type === "IntentRequest") {onIntent (event.request, event.session); } cits if (event.request.type === "SessionEndedRequest") {onSessionEnded (event.request, event.session); ctx.sccess (); }} catch (e) {console.log ("EXCEPTION in handler:" + e); ctx.fail ("Izņēmums:" + e); }}; /*** Zvanīts, kad sesija sākas. */ function onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Sauc, kad lietotājs uzsāk prasmi, nenorādot, ko vēlas. */ function onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Nosūtiet savu prasmju palaišanai. getWelcomeResponse (atzvanīšana); } /*** Izsaukts, kad lietotājs norāda šīs prasmes nodomu. */function onIntent (aimRequest, session) {//, callback) {console.log ("onIntent requestId =" + aimRequest.requestId + ", sessionId =" + session.sessionId); var nolūks = nodomsRekvīzija.nodaļa, nodomaNosaukums = nodomaLūgums.nodaļas nosaukums; console.log ("REQUEST to string =" + JSON.stringify (aimRequest)); var atzvanīt = null; // Nosūtiet savu prasmju nodomu apstrādātājiem, ja ("GoIntent" === aimName) {doGoIntent (nodoms, sesija); } else if ("CommandIntent" === aimName) {doCommandIntent (nodoms, sesija); } cits if ("TurnIntent" === aimName) {doTurnIntent (nodoms, sesija); } cits if ("HelpIntent" === aimName) {getWelcomeResponse (); } else {mest "Nederīgs nolūks"; }} /*** Zvanīts, kad lietotājs beidz sesiju. * Netiek izsaukts, kad prasme atgriežas shouldEndSession = true. */ function onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Šeit pievienojiet tīrīšanas loģiku} // --------------- Funkcijas, kas kontrolē prasmes uzvedību -------------------- --- function getWelcomeResponse () {// Ja mēs vēlētos inicializēt sesiju, lai būtu daži atribūti, mēs varētu tos šeit pievienot. var sessionAttributes = {}; var cardTitle = "Laipni lūdzam"; var speechOutput = "Laipni lūdzam DRONE CONTROL."; // TODO: vai drons ir tiešsaistē vai bezsaistē? Ja tiešsaistē, vai tas ir ARMED? var repromptText = "Drons gatavs komandai."; var shouldEndSession = nepatiess; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** apstrādā GO nodomu. */ funkcija doGoIntent (nodoms, sesija, atzvanīšana) {// var cardTitle = "Drone GO …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = nepatiess; var speechOutput = ""; var virziens = nolūks.slots. Direction.value; var attālums = nodoms.slots. Distance.value; var vienība = nolūks.slots. Unit.value; var validDirections = ["uz priekšu", "uz priekšu", "atpakaļ", "atpakaļ", "pa labi", "pa kreisi", "uz augšu", "uz leju", "taisni", "uz priekšu", "taisni uz priekšu"]; var validUnits = ["pēda", "pēdas", "metrs", "metri", "pagalms", "jardi"]; repromptText = "Pastāsti man, cik tālu iet un kādā virzienā."; var fail = false; // apstipriniet ievades, ja (! (parseInt (distance)> = 1)) {speechOutput = "Es nevarēju saprast attālumu, kādu vēlaties, lai es nobrauktu."; neizdoties = taisnība; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "Es nevarēju saprast virzienu, kādā vēlaties, lai es braucu."; neizdoties = taisnība; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Es nevarēju saprast vienību, kuru vēlaties, lai es ceļoju."; neizdoties = taisnība; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } ja (! neizdoties) {var cardTitle = "Drona braukšana" + virziens + "" + attālums + "" + vienība; speechOutput = "Iet" + virziens + "" + attālums + "" + vienība; mqttPublish (nodoms, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcija doCommandIntent (nodoms, sesija, atzvanīšana) {

// var cardTitle = "Drone COMMAND …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = nepatiess; var speechOutput = ""; repromptText = "Pastāsti man, kāda ir drona komanda."; var uzdevums = nolūks.slots. Task.value; var validTasks = ["palaišana", "zeme", "r. t. l.", "turēt", "palikt", "apstāties", "atgriezties pie palaišanas", "pārtraukt"]; if (validTasks.indexOf (task) == -1) {speechOutput = "Es nevarēju saprast komandu."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Izpildot drona komandu" + uzdevums; speechOutput = "Izpilda komandu" + uzdevums; mqttPublish (nodoms, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function doTurnIntent (nodoms, sesija, atzvanīšana) {

// var cardTitle = "Drone pagrieziens …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = nepatiess; var speechOutput = ""; repromptText = "Pastāsti man, kā vēlies pagriezt dronu."; var virziens = nolūks.slots. Direction.value; var validDirections = ["pa labi", "pa kreisi", "ap"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "Es nevarēju saprast pagrieziena virzienu."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Drone pagrieziens" + virziens; speechOutput = "Pagrieziens" + virziens; mqttPublish (nodoms, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

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

{var strIntent = JSON.stringify (nodoms); 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 - domā, ka tas ir paveikts veiksmīgi."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("kļūda", (funkcija (kļūda, piešķirta) {console.log ("MQTT CLIENT ERROR !!" + kļūda);})); }

// --------------- Palīgi, kas veido visas atbildes -----------------------

function buildSpeechletResponse (title, output, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, karte: {type: "Simple", title: title, content: output}, repompt: {outputSpeech: {type: "PlainText";

Ieteicams: