Obsah:

Dron Alexa ovládaný hlasom Raspberry Pi s IoT a AWS: 6 krokov (s obrázkami)
Dron Alexa ovládaný hlasom Raspberry Pi s IoT a AWS: 6 krokov (s obrázkami)

Video: Dron Alexa ovládaný hlasom Raspberry Pi s IoT a AWS: 6 krokov (s obrázkami)

Video: Dron Alexa ovládaný hlasom Raspberry Pi s IoT a AWS: 6 krokov (s obrázkami)
Video: ВСЯ НОЧЬ С ПОЛТЕРГЕЙСТОМ В ЖИЛОМ ДОМЕ, я заснял жуткую активность. 2024, Júl
Anonim
Image
Image
Dron Alexa ovládaný hlasom Raspberry Pi s IoT a AWS
Dron Alexa ovládaný hlasom Raspberry Pi s IoT a AWS
Dron Alexa ovládaný hlasom Raspberry Pi s IoT a AWS
Dron Alexa ovládaný hlasom Raspberry Pi s IoT a AWS

Ahoj! Moje meno je Armaan. Som 13-ročný chlapec z Massachusetts. Tento tutoriál ukazuje, ako môžete z názvu vyvodiť, ako zostaviť dron Raspberry Pi. Tento prototyp ukazuje, ako sa drony vyvíjajú a tiež akú veľkú úlohu môžu hrať v budúcnosti. Rozhodne sa vidím, ako sa prebúdzam o 10 rokov a žiadam drona, aby mi dal raňajky. Na beh dron používa Amazon Alexa, Amazon Web Services, IoT (Internet of Things) a hlavne Raspberry Pi. Má demonštrovať a informovať o dronoch a o tom, ako sa každý deň zlepšujú. Našťastie ste úspešní a v tomto procese sa dozviete o dronoch. Veľa šťastia a ďakujem za prečítanie. -Armaan

Zásoby

Na zostavenie prototypu existujú rôzne hardvérové a softvérové potreby. Na zostrojenie drona som použil online návod Drone Dojo a integroval som uvedené technológie. Zoznam dronov pre dron nájdete tu:

Zoznam súčiastok pre drony

Požiadavky na softvér:

  • Webové služby Amazon
  • Laptop
  • Softvér Mission Planer
  • Balena Etcher
  • Tu nájdete kartu MicroSD so súborom Raspbian
  • Amazon Alexa, fyzický alebo virtuálny

Krok 1: Zhromažďovanie a porozumenie súčiastkam

Zhromažďovanie a porozumenie súčiastkam
Zhromažďovanie a porozumenie súčiastkam

Každá časť uvedená v zozname dodávok je potrebná, a preto je potrebné každej časti porozumieť. Diely môžete nájsť online a keď sú zhromaždené, pokračujte v čítaní. Zoznam skladieb od Drone Dojo, kde nájdete úplné informácie o častiach, nájdete tu. Štvorminútové vysvetlenie na mojom kanáli youtube nájdete tu. Pokiaľ ide o drony, jediné časti, napriek tomu, čo si väčšina ľudí myslí, nie sú len motory a vrtule. Nasledujú základné účely každej časti.

Raspberry Pi s Emlid Navio2

Táto časť je do značnej miery centrálnym procesorom a hlavným bodom dronu. Raspberry Pi funguje ako procesor počítača, ktorý odosiela príkazy Navio2 na vykonanie prostredníctvom signálov PWM (Pulse Width Modulation Signals) do iných častí dronu.

2. ESC (elektronické regulátory rýchlosti)

Tieto žlté časti sa nachádzajú pod rámom. K Naviu sú zapojené 4 kusy, jeden pre každý motor. Po prijatí signálov PWM otočia motory a začnú letieť.

3. Motory

Motory nepotrebujú príliš vysvetľovať, pretože ich pravdepodobne poznáte. Otáčajú a otáčajú vrtuľami, aby vytvorili ťah.

4. Vrtule

Vrtule vytvárajú ťah lietadla. Pri zdvíhaní vozidla sa otáčajú rovnakým smerom ako motory.

5. Batéria a napájací modul

Batéria LiPo napája celý dron cez rám pomocou napájacieho modulu. Poskytuje asi 15-20 minút letu a slúži ako zdroj energie.

6. GPS

GPS komunikuje so satelitmi, aby určila polohu drona. Určuje nadmorskú výšku, zemepisnú šírku a dĺžku. Dá sa použiť na geofencing, trasové body a tiež na pohyb do určitých polôh alebo smerov.

7. Telemetrický modul

Telemetrický modul spája náš dron s pozemnou riadiacou stanicou, v našom prípade plánovačom misií, ktorá sa má monitorovať.

8. Ovládač RC a modul spolu s kodérom PPM

Ovládač RC používa rádio na prenos signálov a príkazov do modulu RC na ručné pilotovanie drona. Kodér PPM prekladá tieto signály na spracovanie a spustenie systému Navio + RPI.

9. Rám

Tento červeno -biely rám funguje ako základňa alebo platforma pre ostatné diely, ktoré majú byť umiestnené. Rám je aerodynamický a ľahký, preto je ideálny pre stavbu našich dronov.

Teraz, so znalosťou každej časti, môžeme konečne postaviť dron! Ďalej k ďalšiemu kroku!

Krok 2: Zostavenie drona

Zostavenie drona
Zostavenie drona

Tento krok je pravdepodobne najťažší z hľadiska fyzickej námahy. Odporúčam požiadať o pomoc inú osobu alebo sa pokúsiť použiť pomocnú ruku v zozname náhradných dielov. Tento proces je príliš dlhý na to, aby sme ho mohli demonštrovať, preto poskytnem ďalší odkaz, ktorý som použil v Drone Dojo.

Zostavenie dronu Raspberry Pi

Opäť, keďže nebudem zachádzať príliš do podrobností, len zvýrazním základy každého kroku.

1. Organizujte svoje zásoby - zozbierajte naše materiály a uistite sa, že sú ľahko dostupné

2. Naplánujte si stavbu - Zorganizujte si diely na ráme, aby ste si vytvorili plán, čo postavíte

3. Spájkovacia práca - Toto je práca, ktorú je trochu ťažké robiť sám. K ESC musíte spájkovať zlaté konektory guľiek, ktoré sa dodávajú s motormi. Ďalej musíte vziať spodnú časť rámu a spájkovať ESC so spodným rámom alebo doskou na distribúciu energie. Modul batérie bude tiež spájkovaný s doskou na distribúciu energie

4. Nastavenie rámu - Potom musíte zaskrutkovať hornú časť rámu spolu s ramenami. Potom môžete Raspberry Pi pripevniť na vrch akýmkoľvek spôsobom. (Použil som lepiacu pásku). Potom môžete ESC pripevniť k ramenám pomocou suchých zipsov. Teraz sme takmer hotoví.

5. Pripojenie RC ovládača k prijímaču - Skúste prepojiť RC ovládač pomocou ESC podľa pokynov v zozname skladieb vyššie.

6. Dokončenie dielov na ráme - lepiaca páska alebo popruh na telemetrickom module na ráme. Lepiacou páskou tiež prilepte kodér PPM k ramenu. Teraz môžete k systému Navio zapojiť kodér ESC a PPM.

7. Držiak GPS + batéria - Zostavte držiak GPS pomocou rôznych skrutiek a dielov. Pomocou zipsov pripevnite GPS k rámu. Držiak GPS som nevyhnutne nepoužil kvôli jeho krehkosti, ale je to na vás. Ďalej môžete vložiť batériu medzi Power Dist. Doska. Napájací modul som tiež pripútal a prilepil k rámu. Teraz je váš hardvér do značnej miery nastavený. Teraz k časti, na ktorú čakáme!

8. Inštalácia vrtúľ !!! - Vrtule môžete utiahnuť pomocou tabuľky uvedenej v zozname skladieb. Potom môžete zapojiť ESC k motorom a stavbu drona sme konečne dokončili.

Softvér je na rade, tak ďalej!

Krok 3: Konfigurácia Raspberry Pi a GCS (plánovač misií)

Konfigurácia Raspberry Pi a GCS (plánovač misií)
Konfigurácia Raspberry Pi a GCS (plánovač misií)

Podrobnejšie pokyny opäť nájdete v zozname skladieb od posledného kroku. Pravdepodobne však viete, ako nastaviť RasPi. Ale tentoraz to robíme bezhlavo. Použite Balena Etcher na napálenie OS z webovej stránky Navio OS na kartu MicroSD. Kým je zapojený do vášho počítača, prejdite na žiadateľa wpa pomocou programu Poznámkový blok ++. Potom zadajte ssid a heslo pre Raspberry Pi na pripojenie k vašej WiFi. Potom musíte pridať súbor s názvom SSH. Môžete to urobiť pomocou príkazového riadka alebo iným spôsobom. Teraz môžeme SSH. Môžete použiť príkazový riadok alebo tmel. V mojom prípade som na pripojenie použil príkazový riadok a napísal „ssh pi@navio“, alebo môžete nájsť IP adresu a ssh týmto spôsobom. Po pripojení použite toto video na nastavenie a konfiguráciu systému Navio. Na nastavenie telemetrie musíte najskôr vykonať úpravu na Raspberry Pi. Vykonajte úpravy podľa tohto postupu a pokúste sa pripojiť k plánovaču misií. Ak telemetria nefunguje, môžete úpravu vrátiť späť a pripojiť sa pomocou pripojenia UDB zadaním adresy IP GCS (Ground Control Station, ako je prenosný počítač). Po pripojení k Mission Planner môžete pomocou sprievodcu nastavením kalibrovať všetky časti dronu. Ak potrebujete pomoc, znova si pozrite zoznam skladieb. Pri každom nastavení sa zvyčajne takmer vždy vyskytne chyba. Riešenie problémov je jednou z najväčších častí tohto projektu. V tomto vám skutočne nemôžem pomôcť, pretože neviem o vašich chybách, ale väčšinu chýb je možné opraviť pomocou internetu. Potom, čo je všetko pripravené, je dron pripravený k letu! V Mission Planner môžete nastaviť svoj RC ovládač a letové režimy. Skúste dron podržať ľavú páčku úplne vpravo dole päť sekúnd, aby ste vyzbrojili dron. Neodporúčam lietať bez toho, aby ste si pozreli návod, pretože dron je veľmi krehký a ľahko sa zlomí. Pre mňa, keď som s ním prvýkrát lietal, zlomil som držiak GPS a niektoré vrtule. Ak nepotrebujete ovládanie hlasom, môžete sa zastaviť tu. Ak sa chcete dozvedieť viac o AWS a programovaní drona, pokračujte!

Krok 4: Programovanie drona na lietanie s Pythonom

Programovanie drona na lietanie s Pythonom
Programovanie drona na lietanie s Pythonom

Predtým, ako sa dostaneme do AWS, by sme mali najskôr pochopiť, ako naprogramovať dron tak, aby lietal. Po počiatočnom nastavení by integrácia hlasového ovládania nemala byť príliš ťažká. Prvá vec, ktorú by sme sa mohli pokúsiť pochopiť, je urobiť jednoduchý program vzletu a pristátia. Po nastavení Raspberry Pi do neho môžeme opäť SSH. Môžete sa znova pozrieť na zoznam skladieb alebo sa riadiť mojimi pokynmi.

1. Najprv si stiahneme zdrojový kód ArduPilot do adresára na Raspberry Pi

mkdir src

Potom získajte súbory z GitHub pomocou git clone

git clone -b Copter -3.6.11

Teraz prejdeme na /src /ardupilot

cd src

cd ardupilot

Teraz inicializujme zdrojové súbory

aktualizácia submodulu git --init -rekurzívny

2. Ďalej musíme skompilovať firmvér na Raspberry Pi

Pred vykonaním ďalších krokov nezabudnite prejsť na/src/ardupilot/s cd

Potom sa konfiguruje konkrétne pre Navio pomocou

./waf configure --board = navio2

Potom môžete kompilovať s

./waf --cieľový kôš/ardukoptéra

3. Teraz môžeme do Navia nainštalovať zdrojový kód

Najprv sa presuňte do správneho adresára.

cd/etc/systemd/system

Potom súbor upravte

sudo vi arducopter.service

Tam, kde je napísané ExecStart, vložte namiesto toho, čo už existuje, nasledujúci text

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

Teraz, aby sme uviedli zdrojový kód ardupilot do činnosti, môžeme použiť

sudo systemctl daemon-reload

Potom môžeme reštartovať pomocou

sudo systemctl reštartujte arducopter

V poslednom kroku sme konečne dokončili nastavenie programu ArduPilot na našom drone

4. Inštalácia DroneKit

DroneKit je softvér, ktorý použijeme na programovanie letu drona. Ak chcete porozumieť niektorému z kódov, dokumentáciu nájdete tu. Pred napísaním skriptu musíme najskôr nainštalovať balík na náš dron.

Balík python môžeme nainštalovať pomocou

pip install dronekit == 2.9.1

Toto môže, ale nemusí byť najnovšia verzia, ale je to tá, ktorú som použil, aby som vám mohol pomôcť s riešením problémov.

Ak chcete skontrolovať, či je nainštalovaný, môžeme urobiť a

zmrazenie pipu | grep dronekit

Teraz sme konečne pripravení vytvoriť náš prvý pythonový skript

5. takeoff_and_land.py

VÝSTRAHA! Navrhujem vytvoriť základné znalosti jazyka python, aby ste sa mohli kódu naučiť a porozumieť mu. Ak chcete napísať program sami, postupujte podľa tohto videa.

## Najprv nevytvoríme adresár na uloženie tohto kódu

cd dk ## Ak to chcete urobiť sami, na vytvorenie programu použite vi takeoff_and_land.py ##

V opačnom prípade sa môžete pozrieť alebo použiť priložený súbor a použiť protokol na prenos súborov. Tento program si môžeme neskôr vyskúšať. Najprv objasnite, že ide o súbor python, ktorý musíme použiť

chmod +x takeoff_and_land.py

Potom skúste na spustenie použiť nasledujúci kód

python takeoff_and_land.py --connect 127.0.0.1:14550

Prvýkrát to nefungovalo ani pre mňa. Ak existuje časový limit odkazu, potom sa nebojte, je niečo, čo môžete urobiť. Otvorte ďalšiu výzvu a ssh. Môžete skúsiť nainštalovať niečo, čo sa nazýva mavproxy, a skúste to spustiť. Potom môžete obe spustiť súčasne. To by malo pomôcť pripojiť dron. Akonáhle to bude hotové, mám pre vás výzvu. Skúste zistiť, čo robí druhý program (set_velocity_body.py) a ako ho zaistiť, aby fungoval. Ak to robíš, dobrá práca.

6. Ďalej!

Teraz môžeme tieto znalosti použiť na to, aby bol náš dron ovládaný hlasom. Ovládanie dronu Alexa využíva mnoho z týchto funkcií a ďalšie. Veľa šťastia a ďalej!

Krok 5: Použitie služieb Amazon Alexa a Amazon Web Services na integráciu hlasového ovládania

Použitie služieb Amazon Alexa a Amazon Web Services na integráciu hlasového ovládania
Použitie služieb Amazon Alexa a Amazon Web Services na integráciu hlasového ovládania
Použitie služieb Amazon Alexa a Amazon Web Services na integráciu hlasového ovládania
Použitie služieb Amazon Alexa a Amazon Web Services na integráciu hlasového ovládania

Tento krok je jedným z menej zdokumentovaných. To znamená, že riešenie problémov bude najťažšie. Len dostať sa do práce mi trvalo asi mesiac, možno viac. Tu je najdôležitejšie byť trpezlivý. Táto funkcia, ak je implementovaná v reálnom živote, môže zmeniť jej život. Môžete jednoducho povedať Alexovi, aby vám priniesla svoje potraviny, namiesto aby ste išli sami. Predstav si to! Takže bez ďalších okolkov sa do toho pusťme!

1. Registrácia Raspberry Pi ako veci na AWS IoT

Na používanie internetu vecí (IoT) potrebujeme niečo. Preto sa musíme najskôr prihlásiť do konzoly AWS, aby sme mohli používať AWS IoT. Potom prejdite na IoT Core. Tam by ste mali kliknúť na položku Spravovať a potom vytvoriť vec. Po pridaní názvu na pripojenie potrebujeme certifikát. Odporúčam kliknúť na certifikáciu jedným kliknutím. Potom, čo uvidíte obrazovku s certifikátom, si stiahnite všetky kľúče vrátane koreňovej certifikačnej autority. Potom môžete ísť a dokončiť vytváranie veci. Ďalej musíme vytvoriť politiku. Vráťte sa späť do jadra IoT. Potom kliknite na zabezpečené a kliknite na zásady. Potom kliknite na položku vytvoriť politiku. Potom môžete vytvoriť názov a pridať zdroje. Pod akciou napíšte iot * a do zdroja zadajte * a kliknite na položku Povoliť efekt. Potom sa vráťte k veci a choďte k certifikátu. Keď ste tu, kliknite na zásady. K veci potom môžete pripojiť svoje pravidlá a je to pripravené!

2. Nastavenie kódu na Raspberry Pi a interakcia s IoT

V tejto časti budete na prenos súborov potrebovať klienta SFTP (použil som WinSCP). Po pripojení k nášmu Raspberry Pi budeme musieť mať poruke kľúče certifikátu. Kľúčové súbory musíte preniesť na Raspberry Pi. Mali by ste tiež nainštalovať AWSIoTPythonSDK na Raspberry Pi. Potom choďte do adresára dk na Raspberry Pi. Na komunikáciu s IoT používate súbor Alexa Drone Control, ktorý som dal. Na spustenie tohto súboru som použil skript Shell. Kód zobrazím nižšie, pretože z nejakého dôvodu nemôžem súbor nahrať. Ak program počas testovania nevyberá správy z AWS IoT, nebojte sa! To môže byť moja chyba, pretože súbor ovládania dronu Alexa nemusí vyhovovať vašej veci. Ak to chcete opraviť, vráťte sa k AWS IoT a kliknite na položku Učiť sa na ľavom paneli. Postupujte podľa pokynov a možno budete musieť reštartovať. Prepáčte mi to. Akonáhle vaše IoT začne pracovať s programom na RasPi, môžete integrovať kód dronekit zo súboru Alexa Drone Control, ktorý som dal. Potom použite skript Shell, ktorý som poskytol s vašimi certifikátmi, a koncový bod Rest API Endpoint z IoT.

# stop script on errorset -e # Skontrolujte, či existuje koreňový súbor CA, ak nie, stiahnite ho, ak [! -f./root-CA.crt]; potom printf "\ nSťahovanie certifikátu AWS IoT Root CA z AWS … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # nainštalovať AWS Device SDK pre Python, ak ešte nie je nainštalovaný keby [! -d./aws-iot-device-sdk-python]; potom printf "\ nInštalácia AWS SDK … / n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# spustite ukážkovú aplikáciu pub/sub pomocou certifikátov stiahnutých z balíka

printf "\ nSpúšťacia aplikácia pub/sub … / 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

To nebude fungovať pre vás všetkých, pretože názvy sú rôzne. Pri prenose súboru namiesto kľúčov, ktoré som použil, nahraďte ich názvami. Pred prenosom súboru nezabudnite ukončiť dk! To by malo byť zatiaľ všetko, čo musíte urobiť.

3. Budovanie vašej zručnosti Alexa

Tento krok sa zdá byť oveľa ťažší, ako v skutočnosti je. Najprv sa musíme prihlásiť do konzoly Alexa Developer. Potom stačí kliknúť na položku Vytvoriť zručnosť. Keď sa zobrazí výzva na výber modelu pre vašu zručnosť, stačí kliknúť na položku Vlastné. Keď sa zobrazí výzva na výber metódy, poskytnite svoju vlastnú. Môžete to pomenovať, ako chcete. Nie je potrebná žiadna šablóna, takže si vyberte začať od nuly. Ďalej, po vytvorení svojich schopností, by ste mali prísť na obrazovku Tvorca schopností s kontrolným zoznamom napravo. Odtiaľto môžeme začať budovať svoje schopnosti. Prvý v kontrolnom zozname je názov vyvolania. To je to, čo poviete Alexe, aby uplatnila vaše schopnosti. Pre mňa som len uviedol svoje vyvolávacie meno ako dron. Teraz môžeme ísť na svoj úmysel, výroky a sloty. Tu môžete pre dron vykonávať príkazy, ako napríklad ísť hore o 1 meter alebo ísť doprava alebo dole. Ten môj zatiaľ naozaj funguje len s jedným metrom. Môžete kliknúť na editor JSON v spodnej časti ľavého panela. Potom doň môžete vložiť nasledujúci kód.

Po vložení kódu do editora JSON môžete kliknúť na tretí krok kontrolného zoznamu a vytvorí vám model interakcie. S týmto krokom budete zatiaľ hotoví. Priestor pre koncový bod môžete zatiaľ nechať prázdny!

Krok 4: Budovanie funkcie lambda

Tento krok je krok, na ktorý budete musieť prísť sami. Poviem vám, ako ho pripojiť k Alexa Skill, ale budete ho musieť kódovať sami. Najprv teda choďte do konzoly na správu AWS. Potom choďte do Lambda. Potom môžete vytvoriť funkciu, ktorá ju pomenuje, ako chcete. Uistite sa, že ste ho napísali úplne od začiatku a urobili za behu ľubovoľný programovací jazyk. Použil som Node.js. Ak chcete pridať Alexa Skill, pridajte spúšť a vyberte Alexa Skills Kit (ASK). Skopírujte svoje Lambda ARN a vráťte sa k Alexa Skill. Teraz prejdite na koncový bod. Môžete prilepiť svoju ARN, uložiť a vytvoriť nový model. Potom vezmite Alexa Skill ID a vložte ho do sekcie spúšte, kde sa vás opýta na Lambda. Potom prejdite nadol na Lambdu a nájdite základné nastavenia a urobte časový limit 10 sekúnd. Teraz je na vás, aby ste zistili kód. Pokiaľ ide o rady, môžete využiť nižšie uvedené webové stránky.

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

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

a môžete použiť súbor, ktorý som pripojil, ale je neúplný a nebude fungovať.

/ *** Ovládajte svoju kvadrokoptéru APM / Pixhawk svojim hlasom pomocou Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = require ('aws-iot-device-sdk'); var config = require ("./ config"); var deviceName = "EchoDroneControl"; // toto zariadenie je skutočne ovládač var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + deviceName, // + "-Lambda-" + (nový dátum (). getTime ()), "región": "us-východ-1", "ladenie": true}; var ctx = null; var klient = null; // Smerovanie prichádzajúcej požiadavky podľa typu (LaunchRequest, IntentRequest atď.) Telo JSON požiadavky je uvedené v parametri udalosti. exports.handler = funkcia (udalosť, kontext) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = kontext; if (event.session.application.applicationId! == app_id) {ctx.fail ("Invalid Application ID"); } klient = 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); } 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 ("VÝNIMKA v obsluhe:" + e); ctx.fail ("Výnimka:" + e); }}; /*** Volá sa, keď sa relácia začne. */ funkcia onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Volá sa, keď používateľ uvedie túto zručnosť bez toho, aby špecifikoval, čo chce. */ funkcia onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Odoslanie na spustenie vašej zručnosti. getWelcomeResponse (spätné volanie); } /*** Volá sa, keď používateľ špecifikuje zámer tejto zručnosti. */funkcia onIntent (intentRequest, relácia) {//, spätné volanie) {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 callback = null; // Odošlite obsluhe zámerov svojich schopností if ("GoIntent" === IntentName) {doGoIntent (intencia, relácia); } else if ("CommandIntent" === IntentName) {doCommandIntent (zámer, relácia); } else if ("TurnIntent" === IntentName) {doTurnIntent (zámer, relácia); } else if ("HelpIntent" === IntentName) {getWelcomeResponse (); } else {throw "Neplatný úmysel"; }} /*** Volá sa, keď používateľ skončí reláciu. * Nevolá sa, keď sa zručnosť vráti shouldEndSession = true. */ funkcia onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // sem pridajte logiku čistenia} // --------------- funkcie, ktoré riadia správanie zručnosti -------------------- --- funkcia getWelcomeResponse () {// Ak by sme chceli reláciu inicializovať tak, aby mala niektoré atribúty, mohli by sme ich sem pridať. var sessionAttributes = {}; var cardTitle = "Vitajte"; var speechOutput = "Vitajte v Dronovom ovládači."; // TODO: je dron online alebo offline? Ak je online, je ARMED? var repromptText = "Dron pripravený na príkaz."; var shouldEndSession = false; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** zvláda zámer GO. */ funkcia doGoIntent (zámer, relácia, spätné volanie) {// var cardTitle = "Drone GO …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; var direction = Intent.slots. Direction.value; var vzdialenosť = intent.slots. Distance.value; var unit = Intent.slots. Unit.value; var validDirections = ["vpred", "vpred", "vzad", "späť", "vpravo", "doľava", "hore", "dole", "rovno", "vpred", "rovno vpred"]; var validUnits = ["stopa", "stopy", "meter", "metre", "yard", "yardy"]; repromptText = "Povedz mi, ako ďaleko mám ísť a akým smerom."; var fail = false; // overenie vstupov, ak (! (parseInt (vzdialenosť)> = 1)) {speechOutput = "Nedokázal som pochopiť vzdialenosť, ktorú chcete, aby som prešiel."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "Nechápal som, akým smerom chcete, aby som cestoval."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Nerozumel som jednotke, po ktorej chcete, aby som cestoval."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (! fail) {var cardTitle = "Drone running" + direction + "" + distance + "" + unit; speechOutput = "Ideme" + smer + "" + vzdialenosť + "" + jednotka; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcia doCommandIntent (zámer, relácia, spätné volanie) {

// var cardTitle = "Drone COMMAND …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Povedzte mi, aký je príkaz pre dron."; var task = Intent.slots. Task.value; var validTasks = ["launch", "land", "r. t. l.", "hold", "stay", "stop", "return to launch", "abort"]; if (validTasks.indexOf (task) == -1) {speechOutput = "nerozumel som príkazu."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Vykonávanie príkazu Drone" + úloha; speechOutput = "Vykonávanie príkazu" + úloha; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcia doTurnIntent (zámer, relácia, spätné volanie) {

// var cardTitle = "Otáčanie drona …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Povedz mi, ako chceš dron otočiť."; var direction = Intent.slots. Direction.value; var validDirections = ["vpravo", "vľavo", "okolo"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "Nedokázal som pochopiť smer odbočky."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Otáčanie drona" + smer; speechOutput = "Otáčanie" + smer; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkcia mqttPublish (intencia, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (intencia); 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 - doesn't think, successful."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("chyba", (funkcia (chyba, udelené) {console.log ("CHYBA KLIENTA MQTT !!" + chyba);})); }

// --------------- Pomocníci, ktorí vytvárajú všetky odpovede -----------------------

funkcia buildSpeechletResponse (názov, výstup, repromptText, shouldEndSession) {return {outputSpeech: {typ: "PlainText", text: výstup}, karta: {typ: "Jednoduchý", názov: názov, obsah: výstup}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} function buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}}

Odporúča: