Obsah:

Alexa hlasem ovládaný dron Raspberry Pi s IoT a AWS: 6 kroků (s obrázky)
Alexa hlasem ovládaný dron Raspberry Pi s IoT a AWS: 6 kroků (s obrázky)

Video: Alexa hlasem ovládaný dron Raspberry Pi s IoT a AWS: 6 kroků (s obrázky)

Video: Alexa hlasem ovládaný dron Raspberry Pi s IoT a AWS: 6 kroků (s obrázky)
Video: ВСЯ НОЧЬ С ПОЛТЕРГЕЙСТОМ В ЖИЛОМ ДОМЕ, я заснял жуткую активность. 2024, Červenec
Anonim
Image
Image
Alexa Drone Raspberry Pi ovládaný hlasem s IoT a AWS
Alexa Drone Raspberry Pi ovládaný hlasem s IoT a AWS
Alexa hlasem ovládaný dron Raspberry Pi s IoT a AWS
Alexa hlasem ovládaný dron Raspberry Pi s IoT a AWS

Ahoj! Jmenuji se Armaan. Jsem 13letý chlapec z Massachusetts. Tento tutoriál ukazuje, jak můžete z názvu usoudit, jak postavit dron Raspberry Pi. Tento prototyp ukazuje, jak se drony vyvíjejí a také jak velkou roli mohou hrát v budoucnosti. Rozhodně vidím, jak se za 10 let probouzím a žádám drona, aby mi dal snídani. Ke spuštění dronu slouží Amazon Alexa, Amazon Web Services, IoT (Internet of Things) a hlavně Raspberry Pi. Má demonstrovat a informovat o dronech a o tom, jak se každý den zlepšují. Naštěstí jste úspěšní a dozvíte se o dronech. Hodně štěstí a děkuji za přečtení. -Armaane

Zásoby

K vytvoření prototypu existují různé hardwarové a softwarové potřeby. K sestavení dronu a integraci uvedených technologií jsem použil online návod od The Drone Dojo. Seznam dronů pro dron najdete přímo zde:

Seznam dílů dronu

Softwarové požadavky:

  • Webové služby Amazon
  • Notebook
  • Software Mission Planer
  • Balena Etcherová
  • Zde najdete kartu MicroSD se souborem Raspbian
  • Amazon Alexa, fyzický nebo virtuální

Krok 1: Shromáždění a porozumění dílům

Shromažďování a porozumění částem
Shromažďování a porozumění částem

Každá část uvedená v seznamu dodávek je nezbytná, stejně jako jasné porozumění každé části. Díly můžete najít online a po shromáždění pokračovat ve čtení. Seznam skladeb od The Drone Dojo pro úplné pochopení částí najdete zde. Čtyřminutové vysvětlení na mém youtube kanálu najdete zde. Pokud jde o drony, jediné části, navzdory tomu, co si většina lidí myslí, nejsou jen motory a vrtule. Níže jsou uvedeny základní účely každé části.

Raspberry Pi s Emlid Navio2

Tato část je do značné míry centrálním procesorem a hlavním bodem dronu. Raspberry Pi funguje jako CPU počítače, který odesílá příkazy Navio2 ke spuštění prostřednictvím signálů PWM (Pulse Width Modulation Signals) do jiných částí dronu

2. ESC (elektronické regulátory rychlosti)

Tyto žluté části se nacházejí pod rámem. Jsou připojeny 4 k Navio, jeden pro každý motor. Po přijetí signálů PWM otáčí motory a zahájí let.

3. Motory

Motory nepotřebují příliš vysvětlování, protože je pravděpodobně znáte. Otáčejí a otáčejí vrtulemi, aby vytvořily tah.

4. Vrtule

Vrtule vytvářejí tah dronu k letu. Při zvedání vozidla se točí stejným směrem jako motory.

5. Baterie a napájecí modul

Baterie LiPo napájí celý dron rámem pomocí napájecího modulu. Poskytuje asi 15-20 minut doby letu a funguje jako zdroj energie.

6. GPS

GPS komunikuje se satelity, aby určila polohu dronu. Určuje nadmořskou výšku, šířku a délku. Lze jej použít pro geofencing, waypointy a také přesun do určitých pozic nebo směrů.

7. Telemetrický modul

Telemetrický modul spojuje náš dron s monitorovanou pozemní řídicí stanicí, v našem případě plánovačem misí.

8. RC ovladač a modul spolu s kodérem PPM

RC ovladač používá rádio k přenosu signálů a příkazů do RC modulu k ručnímu pilotování dronu. Kodér PPM převádí tyto signály pro zpracování a spuštění zařízení Navio + RPI.

9. Rám

Tento červenobílý rám funguje jako základna nebo platforma pro umístění ostatních částí. Rám je aerodynamický a lehký, proto je ideální pro stavbu dronů.

Nyní se znalostí každé části můžeme konečně dron postavit! Pokračujte dalším krokem!

Krok 2: Sestavení dronu

Sestavení dronu
Sestavení dronu

Tento krok je pravděpodobně nejtěžší z hlediska fyzické námahy. Doporučuji požádat o pomoc jiného člověka nebo zkusit použít pomocnou ruku v seznamu dílů. Tento proces je příliš dlouhý na to, abychom ho mohli demonstrovat, proto poskytnu další odkaz, který jsem použil v The Drone Dojo.

Sestavení dronu Raspberry Pi

Opět platí, že jelikož se nebudu příliš rozepisovat, pouze zdůrazním základy každého kroku.

1. Uspořádejte své zásoby - shromážděte naše materiály a zajistěte, aby byly snadno dostupné

2. Naplánujte si stavbu - Uspořádejte své díly na rámu a vytvořte plán toho, co postavíte

3. Pájecí práce - to je práce, kterou je trochu těžké dělat samostatně. Zlaté kulové konektory, které jsou dodávány s motory, musíte připájet k ESC. Dále musíte vzít spodní část rámu a pájet ESC ke spodnímu rámu nebo desce pro distribuci energie. Modul baterie bude také připájen k desce rozvodu energie

4. Nastavení rámu - Poté musíte přišroubovat horní část rámu spolu s rameny. Potom můžete Raspberry Pi připevnit na vrchol jakýmkoli způsobem. (Použil jsem lepicí pásku). Poté můžete ESC připevnit k ramenům pomocí stahovacích pásků. Nyní jsme téměř hotovi.

5. Vázání ovladače RC na přijímač - Zkuste podle pokynů v seznamu skladeb výše svázat ovladač RC pomocí ESC.

6. Dokončení částí na rámu - lepicí páska nebo popruh na telemetrickém modulu na rám. Lepicí páskou také zalepte kodér PPM na rameno. Nyní můžete k systému Navio zapojit kodér ESC a PPM.

7. Držák GPS + baterie - Sestavte držák GPS pomocí různých šroubů a kusů. Pomocí zipů připevněte GPS k rámu. GPS držák jsem kvůli jeho křehkosti nutně nepoužil, ale je to na vás. Dále můžete baterii vložit mezi Power Dist. Prkno. Připevnil jsem a nalepil napájecí modul také na rám. Nyní je váš hardware do značné míry nastaven. Nyní k části, na kterou čekáme!

8. Instalace vrtulí !!! - Vrtule můžete utáhnout pomocí tabulky uvedené v seznamu skladeb. Poté můžete zapojit ESC k motorům a konečně jsme dokončili stavbu dronu.

Software je na řadě, tak dále!

Krok 3: Konfigurace Raspberry Pi a GCS (Mission Planner)

Konfigurace Raspberry Pi a GCS (Mission Planner)
Konfigurace Raspberry Pi a GCS (Mission Planner)

Podrobnější pokyny najdete opět v seznamu skladeb od posledního kroku. Pravděpodobně však víte, jak nastavit RasPi. Ale tentokrát to děláme bez hlavy. Pomocí Balena Etcher vypalte OS z webu Navio OS na kartu MicroSD. Zatímco je připojen k počítači, přejděte do programu wpa žadatele pomocí programu Poznámkový blok ++. Poté zadejte ssid a heslo pro připojení Raspberry Pi k vaší WiFi. Poté musíte přidat soubor s názvem SSH. To lze provést pomocí příkazového řádku nebo jinou metodou. Nyní můžeme SSH. Můžete použít příkazový řádek nebo tmel. V mém případě jsem použil příkazový řádek a napsal „ssh pi@navio“, nebo můžete zjistit IP adresu a ssh tímto způsobem. Po připojení použijte toto video k nastavení a konfiguraci Navio. Chcete -li nastavit telemetrii, musíte nejprve provést úpravu na Raspberry Pi. Podle toho proveďte úpravy a zkuste se připojit k plánovači misí. Pokud telemetrie nefunguje, můžete úpravu vrátit zpět a připojit se pomocí připojení UDB zadáním IP adresy GCS (Ground Control Station, jako je notebook). Po připojení k Mission Planner můžete pomocí průvodce nastavením kalibrovat všechny části dronu. Pokud potřebujete pomoc, nahlédněte znovu do seznamu skladeb. Obvykle, kdykoli nastavíte, téměř vždy dojde k chybě. Odstraňování problémů je jednou z největších částí tohoto projektu. Tam vám opravdu nemohu pomoci, protože si nejsem vědom vašich chyb, ale většinu chyb lze opravit pomocí internetu. Poté, co je vše připraveno, je dron připraven k letu! V Mission Planner můžete nastavit svůj RC ovladač a letové režimy. Zkuste dron podržet levou páčku zcela dole vpravo pět sekund, aby se dron aktivoval. Nedoporučuji létat bez pohledu na tutoriál, protože dron je velmi křehký a snadno se láme. Pro mě, když jsem poprvé letěl, zlomil jsem držák GPS a některé vrtule. Pokud nepotřebujete hlasové ovládání, můžete se zde zastavit. Chcete -li se dozvědět více o AWS a programování dronu, pokračujte!

Krok 4: Programování dronu pro létání s Pythonem

Programování dronu pro létání s Pythonem
Programování dronu pro létání s Pythonem

Než se dostaneme do AWS, měli bychom nejprve porozumět tomu, jak dron naprogramovat k letu. Po počátečním nastavení by integrace hlasového ovládání neměla být příliš obtížná. První věc, kterou se můžeme pokusit pochopit, je vytvořit jednoduchý program vzletu a přistání. Po nastavení Raspberry Pi do něj můžeme znovu SSH. Můžete se znovu podívat na seznam skladeb nebo se řídit mými pokyny.

1. Nejprve si stáhneme zdrojový kód ArduPilot do adresáře na Raspberry Pi

mkdir src

Potom získejte soubory z GitHubu pomocí git clone

git clone -b Copter -3.6.11

Nyní přejděte k /src /ardupilot

cd src

cd ardupilot

Nyní inicializujeme zdrojové soubory

aktualizace submodulu git --init -rekurzivní

2. Dále musíme kompilovat firmware na Raspberry Pi

Před provedením dalších kroků nezapomeňte přejít na/src/ardupilot/pomocí cd

Poté se spoléhejte konkrétně na Navio pomocí

./waf configure --board = navio2

Pak můžete kompilovat pomocí

./waf -cílí na bin/arducopter

3. Nyní můžeme do Navia nainstalovat zdrojový kód

Nejprve přejděte do správného adresáře.

cd/etc/systemd/system

Poté soubor upravte

sudo vi arducopter.service

Tam, kde je uvedeno ExecStart, vložte místo toho, co již existuje, následující

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

Nyní, abychom uvedli zdrojový kód ardupilot do akce, můžeme použít

sudo systemctl daemon-reload

Poté můžeme restartovat pomocí

sudo systemctl restart arducopter

V posledním kroku jsme konečně dokončili nastavení ArduPilot na našem dronu

4. Instalace DroneKit

DroneKit je software, který použijeme k programování dronu k letu. Chcete -li porozumět některým kódům, najdete dokumentaci zde. Předtím, než napíšeme skript, musíme nejprve nainstalovat balíček na náš dron.

Můžeme nainstalovat balíček python pomocí

pip install dronekit == 2.9.1

Toto může, ale nemusí být nejnovější verze, ale je to ta, kterou jsem použil, abych vám mohl pomoci s řešením problémů.

Chcete -li zkontrolovat, zda je nainstalován, můžeme provést a

zmrazení pipu | grep dronekit

Nyní jsme konečně připraveni vytvořit náš první python skript

5. takeoff_and_land.py

VAROVÁNÍ! Navrhuji vytvořit základní porozumění pythonu, abyste se mohli naučit a porozumět kódu. Pokud si chcete napsat program sami, sledujte toto video.

## Nejprve nevytvoříme adresář pro uložení tohoto kódu

cd dk ## Pokud to chcete udělat sami, vytvořte program pomocí vi takeoff_and_land.py ##

Jinak se můžete podívat nebo použít přiložený soubor a použít protokol pro přenos souborů. Tento program můžeme vyzkoušet později. Nejprve si ujasněte, že se jedná o soubor pythonu, který musíme použít

chmod +x takeoff_and_land.py

Potom zkuste spustit následující kód

python takeoff_and_land.py --connect 127.0.0.1:14550

Poprvé mi to také nefungovalo. Pokud existuje časový limit odkazu, pak se nemusíte bát, že je něco, co můžete udělat. Otevřete další výzvu a ssh. Můžete zkusit nainstalovat něco s názvem mavproxy a zkusit to spustit. Poté můžete spustit oba současně. To by mělo pomoci připojit dron. Jakmile to bude hotové, mám pro vás výzvu. Pokuste se zjistit, co dělá druhý program (set_velocity_body.py) a jak jej zprovoznit. Pokud ano, dobrá práce.

6. kupředu!

Nyní můžeme tyto znalosti použít k tomu, abychom mohli náš dron ovládat hlasem. Ovládání dronu Alexa využívá mnoho z těchto funkcí a další. Hodně štěstí a dále!

Krok 5: Použití služeb Amazon Alexa a Amazon Web Services k integraci hlasového ovládání

Používání služeb Amazon Alexa a Amazon Web Services k integraci hlasového ovládání
Používání služeb Amazon Alexa a Amazon Web Services k integraci hlasového ovládání
Používání služeb Amazon Alexa a Amazon Web Services k integraci hlasového ovládání
Používání služeb Amazon Alexa a Amazon Web Services k integraci hlasového ovládání

Tento krok je jedním z méně zdokumentovaných. To znamená, že řešení problémů bude nejtěžší. Jen dostat se do práce mi trvalo asi měsíc, možná víc. Zde je nejdůležitější být trpělivý. Tato funkce, pokud je implementována v reálném životě, může změnit život. Místo toho, abyste šli sami, můžete prostě říct Alexovi, aby vám koupila potraviny. Představ si to! Takže bez dalších okolků pojďme do toho!

1. Registrace Raspberry Pi jako věci na AWS IoT

Abychom mohli využívat IoT (internet věcí), potřebujeme něco. Abychom mohli nejprve používat AWS IoT, musíme se přihlásit ke konzole AWS. Poté přejděte na IoT Core. Jakmile jste tam, měli byste kliknout na Spravovat a poté vytvořit věc. Po přidání jména potřebujeme pro připojení certifikát. Doporučil bych kliknout na certifikaci jedním kliknutím. Poté, co uvidíte obrazovku certifikátu, si stáhněte všechny klíče včetně kořenové certifikační autority. Poté můžete jít a dokončit tvorbu věci. Dále musíme vytvořit zásadu. Vraťte se zpět do jádra IoT. Poté klikněte na zabezpečené a klikněte na zásady. Poté klikněte na vytvořit zásadu. Poté můžete vytvořit název a přidat prostředky. V rámci akce zadejte iot * a zadejte * pod zdroj a stiskněte Povolit účinek. Pak se vraťte ke své věci a přejděte k certifikátu. Jakmile jste tady, klikněte na zásady. K věci pak můžete připojit své zásady a vše je připraveno!

2. Nastavení kódu na Raspberry Pi a interakce s IoT

V této části budete pro přenos souborů potřebovat klienta SFTP (použil jsem WinSCP). Po připojení k našemu Raspberry Pi budeme muset mít po ruce klíče certifikátu. Soubory klíčů musíte přenést na Raspberry Pi. Měli byste také pip nainstalovat AWSIoTPythonSDK na Raspberry Pi. Poté přejděte do adresáře dk na Raspberry Pi. Ke komunikaci s IoT používáte soubor Alexa Drone Control, který jsem dal. K použití tohoto souboru jsem pro spuštění použil skript Shell. Níže zobrazím kód, protože z nějakého důvodu nemohu soubor nahrát. Pokud program během testování nevyzvedává zprávy z AWS IoT, nemějte obavy! To může být moje chyba, protože Alexa Drone Control File nemusí vyhovovat vaší věci. Chcete -li to opravit, vraťte se zpět k AWS IoT a na levém panelu stiskněte tlačítko Learn. Postupujte podle pokynů a možná budete muset restartovat. Promiň mi to. Jakmile vaše IoT začne pracovat s programem na RasPi, můžete integrovat kód dronekit ze souboru Alexa Drone Control, který jsem dal. Poté použijte skript Shell, který jsem poskytl s vašimi certifikáty, a Rest API Endpoint z IoT.

# stop script on errorset -e # Zkontrolujte, zda existuje kořenový soubor CA, pokud ne, stáhněte, pokud [! -f./root-CA.crt]; pak printf "\ nStáhnutí certifikátu AWS IoT Root CA z AWS… / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # nainstalovat AWS Device SDK pro Python, pokud ještě není nainstalován kdyby [! -d./aws-iot-device-sdk-python]; pak printf "\ nInstalace AWS SDK … / n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# spusťte ukázkovou aplikaci pub/sub pomocí certifikátů stažených v balíčku

printf "\ nSpuštění pub/sub ukázkové aplikace … / 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 fungovat pro vás všechny, protože jména jsou různá. Při přenosu souboru místo klíčů, které jsem použil, nahraďte názvy klíčů. Před přenosem souboru nezapomeňte ukončit dk! To by mělo být prozatím vše, co musíte udělat.

3. Budování své dovednosti Alexa

Tento krok se zdá být mnohem těžší, než ve skutečnosti je. Nejprve se musíme přihlásit do konzoly Alexa Developer. Poté stačí kliknout na Vytvořit dovednost. Když se zobrazí výzva k výběru modelu pro vaši dovednost, stačí stisknout vlastní. Když se zobrazí výzva k výběru metody, vytvořte si vlastní. Můžete to pojmenovat, jak chcete. Není vyžadována žádná šablona, takže zvolte začátek od nuly. Poté, co jste vytvořili své dovednosti, byste měli dorazit na obrazovku Tvůrce dovedností s kontrolním seznamem vpravo. Odtud můžeme začít budovat své dovednosti. První na kontrolním seznamu je název vyvolání. To je to, co řekneš Alexovi, aby využil tvé dovednosti. Pro mě jsem dal své vyvolávací jméno jako dron. Nyní můžeme přejít na své úmysly, výroky a sloty. Zde můžete pro drony zadávat příkazy, jako například jít nahoru o 1 metr nebo jít doprava nebo dolů. Ten můj zatím opravdu funguje jen s jedním metrem. Můžete kliknout na editor JSON v dolní části levého panelu. Poté do něj můžete vložit následující kód.

Po vložení kódu do editoru JSON můžete kliknout na třetí krok kontrolního seznamu a vytvoří vám model interakce. S tímto krokem budete prozatím hotovi. Slot pro koncový bod můžete zatím nechat prázdný!

Krok 4: Budování funkce Lambda

Tento krok je krok, na který budete muset přijít sami. Řeknu vám, jak jej připojit k Alexa Skill, ale budete ho muset kódovat sami. Nejprve tedy přejděte do konzoly pro správu AWS. Poté přejděte na Lambda. Poté můžete vytvořit funkci pojmenovanou jakkoli chcete. Ujistěte se, že jste jej vytvořili úplně od začátku a vytvořili runtime jakýkoli programovací jazyk, který chcete. Použil jsem Node.js. Chcete -li přidat Alexa Skill, přidejte spoušť a vyberte Alexa Skills Kit (ASK). Zkopírujte své Lambda ARN a vraťte se zpět ke schopnosti Alexa. Nyní přejděte ke koncovému bodu. Můžete vložit ARN, uložit a vytvořit nový model. Poté vezměte ID dovednosti Alexa a vložte jej do spouštěcí části, kde vás požádá o Lambdu. Dále přejděte dolů na Lambdu a najděte základní nastavení a udělejte časový limit 10 sekund. Nyní je na vás, abyste kód zjistili. Pro rady můžete využít níže uvedené webové stránky.

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

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

a můžete použít soubor, který jsem připojil, ale je neúplný a nebude fungovat.

/ *** Ovládejte svou kvadrokoptéru APM / Pixhawk svým hlasem pomocí Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = require ('aws-iot-device-sdk'); var config = require ("./ config"); var deviceName = "EchoDroneControl"; // toto zařízení je opravdu řadič var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + deviceName, // + "-Lambda-" + (nové datum (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var klient = null; // Směrování příchozího požadavku podle typu (LaunchRequest, IntentRequest atd.) Tělo JSON požadavku je uvedeno v parametru event. exports.handler = funkce (událost, 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 ("EXCEPTION in handler:" + e); ctx.fail ("Výjimka:" + e); }}; /*** Volá se při zahájení relace. */ funkce onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Volá se, když uživatel spustí dovednost, aniž by specifikoval, co chce. */ funkce onLaunch (launchRequest, relace, zpětné volání) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Odeslání na start vaší dovednosti. getWelcomeResponse (zpětné volání); } /*** Volá se, když uživatel zadá záměr této dovednosti. */funkce onIntent (intentRequest, relace) {//, zpětné volání) {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 zpětné volání = null; // Odeslání obsluze záměru vaší dovednosti if ("GoIntent" === IntentName) {doGoIntent (záměr, relace); } else if ("CommandIntent" === IntentName) {doCommandIntent (záměr, relace); } else if ("TurnIntent" === IntentName) {doTurnIntent (záměr, relace); } else if ("HelpIntent" === IntentName) {getWelcomeResponse (); } else {throw "Neplatný záměr"; }} /*** Volá se, když uživatel relaci ukončí. * Není voláno, když se dovednost vrací shouldEndSession = true. */ funkce onSessionEnded (sessionEndedRequest, relace) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Sem přidejte logiku čištění} // --------------- Funkce, které řídí chování dovednosti -------------------- --- funkce getWelcomeResponse () {// Pokud bychom chtěli relaci inicializovat, aby měla nějaké atributy, mohli bychom je přidat sem. var sessionAttributes = {}; var cardTitle = "Vítejte"; var speechOutput = "Vítejte v DRONE CONTROL."; // TODO: je dron online nebo offline? Pokud je online, je ARMED? var repromptText = "Dron připraven k příkazu."; var shouldEndSession = false; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** zpracovává záměr GO. */ funkce doGoIntent (záměr, relace, zpětné volání) {// var cardTitle = "Drone GO …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; var direction = intent.slots. Direction.value; var vzdálenost = intent.slots. Distance.value; var unit = intent.slots. Unit.value; var validDirections = ["vpřed", "vpřed", "zpět", "zpět", "vpravo", "vlevo", "nahoru", "dolů", "rovně", "vpřed", "přímo vpřed"]; var validUnits = ["stopa", "stopy", "metr", "metry", "yard", "yardy"]; repromptText = "Řekni mi, jak daleko mám jít a jakým směrem."; var fail = false; // ověření vstupů if (! (parseInt (vzdálenost)> = 1)) {speechOutput = "Nerozuměl jsem vzdálenosti, kterou chcete, abych urazil."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "Nemohl jsem pochopit směr, kterým chcete cestovat."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Nemohl jsem porozumět jednotce, kterou chcete, abych cestoval."; fail = true; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (! fail) {var cardTitle = "Drone running" + direction + "" + distance + "" + unit; speechOutput = "Going" + směr + "" + vzdálenost + "" + jednotka; mqttPublish (záměr, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkce doCommandIntent (záměr, relace, zpětné volání) {

// var cardTitle = "Drone COMMAND …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Řekni mi, jaký je příkaz pro 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 = "nerozuměl jsem příkazu."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Provádění příkazu Drone" + úkol; speechOutput = "Provádění příkazu" + úkol; mqttPublish (záměr, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkce doTurnIntent (záměr, relace, zpětné volání) {

// var cardTitle = "Otáčení dronu …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Řekni mi, jak chceš dron otočit."; var direction = intent.slots. Direction.value; var validDirections = ["vpravo", "vlevo", "kolem"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "Nemohl jsem pochopit směr zatáčky."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Otáčení dronu" + směr; speechOutput = "Otáčení" + směr; mqttPublish (záměr, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funkce mqttPublish (záměr, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (záměr); console.log ("mqttPublish: INTENT text =" + strIntent); // client.publish ("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); client.on ("zavřít", (funkce () {console.log ("MQTT CLIENT CLOSE - myslí si, že je hotovo, úspěšně."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("chyba", (funkce (err, uděleno) {console.log ("MQTT CLIENT ERROR !!" + err);})); }

// --------------- Pomocníci, kteří vytvářejí všechny odpovědi -----------------------

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

Doporučuje: