Tartalomjegyzék:

Alexa hangvezérelt Raspberry Pi Drone IoT és AWS: 6 lépés (képekkel)
Alexa hangvezérelt Raspberry Pi Drone IoT és AWS: 6 lépés (képekkel)

Videó: Alexa hangvezérelt Raspberry Pi Drone IoT és AWS: 6 lépés (képekkel)

Videó: Alexa hangvezérelt Raspberry Pi Drone IoT és AWS: 6 lépés (képekkel)
Videó: Hardware vagy Software - Melyik fontosabb egy kezdő Arduinosnak? 2024, November
Anonim
Image
Image
Alexa hangvezérelt Raspberry Pi drón IoT -vel és AWS -sel
Alexa hangvezérelt Raspberry Pi drón IoT -vel és AWS -sel
Alexa hangvezérelt Raspberry Pi drón IoT -vel és AWS -sel
Alexa hangvezérelt Raspberry Pi drón IoT -vel és AWS -sel

Szia! A nevem Armaan. 13 éves Massachusetts-i fiú vagyok. Ez az oktatóanyag megmutatja, amint a címből következtetni tud, hogyan kell Raspberry Pi Drone -t építeni. Ez a prototípus bemutatja, hogyan fejlődnek a drónok, és azt is, hogy mekkora szerepet játszhatnak a jövőben. Határozottan látom magam, hogy 10 év múlva felébredek, és megkérek egy drónt, hogy reggelizzen nekem. A drón az Amazon Alexa, az Amazon Web Services, az IoT (Internet of Things) és a legfontosabb Raspberry Pi -t használja a futtatáshoz. Célja, hogy bemutassa és tájékoztassa a drónokat és azok mindennapi fejlődését. Remélhetőleg sikeres lesz, és közben tanulni fog a drónokról. Sok sikert és köszönöm, hogy elolvastad. -Armaan

Kellékek

A prototípus elkészítéséhez különféle hardver és szoftver igények szükségesek. A Drone Dojo online oktatóanyagát használtam a drón építéséhez és a felsorolt technológiák integrálásához. A drónhoz itt találja az alkatrészlistát:

Drón alkatrészek listája

Szoftverkövetelmények:

  • Amazon webszolgáltatások
  • Egy laptop
  • Küldetéstervező szoftver
  • Balena Etcher
  • MicroSD kártya Raspbian fájllal itt található
  • Amazon Alexa, fizikai vagy virtuális

1. lépés: Az alkatrészek összegyűjtése és megértése

Részek összegyűjtése és megértése
Részek összegyűjtése és megértése

A szállítási listában említett minden alkatrészre szükség van, és minden rész világos megértése is szükséges. Az alkatrészeket megtalálhatja az interneten, és miután összegyűjtötték, folytassa az olvasást. A The Drone Dojo lejátszási listája a részek teljes megértéséhez itt található. Egy 4 perces magyarázat a youtube csatornámon itt található. Ami a drónokat illeti, az egyetlen alkatrész, annak ellenére, amit a legtöbb ember gondol, nem csak motorok és légcsavarok. Az alábbiakban bemutatjuk az egyes részek alapvető céljait.

A Raspberry Pi az Emlid Navio2 -vel

Ez a rész nagyjából egy központi processzor és a drón fő pontja. A Raspberry Pi úgy viselkedik, mint egy számítógép CPU -ja, amely parancsokat küld a Navio2 -nek a PWM (Pulse Width Modulation Signals) segítségével a drón más részeire.

2. Az ESC -k (elektronikus sebességszabályozók)

Ezek a sárga részek a keret alatt találhatók. 4 db csatlakozik a Navio -hoz, minden motorhoz egy. A PWM jelek fogadásakor forgatják a motorokat és megkezdik a repülést.

3. Motorok

A motorok nem igényelnek túl sok magyarázatot, mert valószínűleg ismerik őket. Forgatják és forgatják a propellereket, hogy tolóerőt hozzanak létre.

4. Propellerek

A légcsavarok tolóerőt hoznak létre a drón repülésére. A jármű felemeléséhez a motorokkal megegyező irányban forognak.

5. Az akkumulátor és a tápegység modul

A LiPo akkumulátor táplálja az egész drónt a kereten keresztül a tápegység segítségével. Körülbelül 15-20 perc repülési időt biztosít, és áramforrásként működik.

6. A GPS

A GPS kommunikál a műholdakkal, hogy meghatározza a drón helyzetét. Ez határozza meg a magasságot, a szélességet és a hosszúságot. Használható geokerítéshez, útpontokhoz, valamint bizonyos pozíciókba vagy irányokba való elmozdulásra.

7. A telemetriai modul

A telemetriai modul összeköti drónunkat egy földi vezérlőállomással, a mi esetünkben a Mission Planner -rel, amelyet felügyelni kell.

8. Az RC vezérlő és modul a PPM kódolóval együtt

Az RC vezérlő rádió segítségével továbbítja a jeleket és parancsokat az RC modulnak, hogy manuálisan irányítsa a drónt. A PPM kódoló ezeket a jeleket lefordítja a Navio + RPI számára, hogy feldolgozza és végrehajtsa.

9. A keret

Ez a piros -fehér keret alapként vagy platformként szolgál a többi alkatrész elhelyezéséhez. A keret aerodinamikus és könnyű, ezért tökéletes a drónfelépítésünkhöz.

Most minden rész ismeretében végre megépíthetjük a drónt! Tovább a következő lépéshez!

2. lépés: A drón összeszerelése

A drón összeszerelése
A drón összeszerelése

Ez a lépés valószínűleg a legnehezebb a fizikai erőfeszítés szempontjából. Javaslom, hogy kérjen segítséget egy másik személytől, vagy próbálja meg használni a segítő kezet az alkatrészlistában. A folyamat túl hosszú ahhoz, hogy itt bemutassam, ezért megadok egy másik linket, amelyet a The Drone Dojo használt.

Raspberry Pi Drone építése

Ismét, mivel nem megyek túl sok részletbe, csak az egyes lépések alapjait emelem ki.

1. Szervezze meg kellékeit - Gyűjtse össze anyagainkat, és győződjön meg arról, hogy könnyen hozzáférhetők

2. Tervezze meg a felépítését - Szervezze alkatrészeit a keretre, és készítsen tervrajzot az építkezésről

3. Forrasztási munka - Ez a munka egy kicsit nehéz egyedül. A motorokhoz mellékelt arany golyós csatlakozókat az ESC -hez kell forrasztani. Ezután vegye le a keret alsó részét, és forrasztja az ESC -ket az alsó kerethez vagy a tápegységhez. Az Akkumulátor modult rá is forrasztják a tápegységre

4. A keret beállítása - Ezután be kell csavarni a keret felső részét a karokkal együtt. Ezután a Raspberry Pi -t tetszés szerint rögzítheti a tetejére. (Én ragasztószalagot használtam). Ezután az ESC-ket cipzárral rögzítheti a karokhoz. Most már majdnem kész vagyunk.

5. Az RC vezérlő összekapcsolása a vevővel - Próbálja meg követni a fenti lejátszási lista utasításait, hogy az RC vezérlőt ESC segítségével kösse össze.

6. Alkatrészek véglegesítése a kereten - Ragasztószalag vagy heveder a telemetriai modulon a kerethez. Ragassza fel a PPM kódolót egy karra is. Most csatlakoztathatja az ESC és PPM kódolót a Navio -hoz.

7. GPS tartó + akkumulátor - Szerelje össze a GPS rögzítőt a különböző csavarokkal és alkatrészekkel. Cipzárak segítségével rögzítse a GPS-t a kerethez. Nem feltétlenül a GPS -tartóját használtam törékenysége miatt, de ez rajtad múlik. Ezután helyezze be az akkumulátort a Power Dist. Tábla. Pántoltam és ragasztottam a tápegységet is a kerethez. Most a hardver nagyjából be van állítva. Most jöjjön a rész, amire vártunk!

8. A propellerek felszerelése !!! - Meghúzhatja a légcsavarokat a lejátszási listában említett táblázat segítségével. Ezután csatlakoztathatja az ESC -ket a motorokhoz, és végre befejeztük a drón építését.

A szoftver a következő, így tovább!

3. lépés: A Raspberry Pi és a GCS konfigurálása (Mission Planner)

A Raspberry Pi és a GCS konfigurálása (Mission Planner)
A Raspberry Pi és a GCS konfigurálása (Mission Planner)

Ismét részletesebb utasításokat talál az utolsó lépés lejátszási listájában. Azonban valószínűleg tudja, hogyan kell beállítani a RasPi -t. De ezúttal fejetlenül csináljuk. A Balena Etcher segítségével írja be az operációs rendszert a Navio OS webhelyéről a MicroSD kártyára. Miközben csatlakoztatva van a számítógéphez, menjen be a wpa könyörgőbe a Jegyzettömb ++ segítségével. Ezt követően adja meg az SSID -t és a jelszót, hogy a Raspberry Pi csatlakozzon a WiFi -hez. Ezután hozzá kell adnia egy SSH nevű fájlt. Ez történhet a parancssorban vagy más módszerrel. Most már SSH. Használhatja a parancssort vagy a Putty parancsot. Én a parancssort használtam, és beírtam az "ssh pi@navio" -t a csatlakozáshoz, vagy megtalálhatja az IP -címet és az ssh -t. Csatlakozáskor használja ezt a videót a Navio beállításához és konfigurálásához. A telemetria beállításához először szerkesztenie kell a Raspberry Pi -t. Kövesse ezt a szerkesztéshez, és próbáljon csatlakozni a Mission Plannerhez. Ha a telemetria nem működik, akkor a szerkesztést visszavonhatja, és UDB kapcsolat használatával csatlakozhat a GCS (Ground Control Station, például laptop) IP -címének megadásával. Miután csatlakozott a Mission Planner -hez, a beállítási varázsló segítségével kalibrálhatja a drón minden részét. Ha segítségre van szüksége, nézze meg újra a lejátszási listát. Általában, amikor beállít, szinte mindig van hiba. A hibaelhárítás a projekt egyik legnagyobb része. Nem igazán tudok segíteni, mivel nem vagyok tisztában a hibáiddal, de a legtöbb hiba az internet segítségével javítható. Miután minden készen áll, akkor a drón készen áll a repülésre! Az RC vezérlőt és a repülési módokat a Mission Planner segítségével állíthatja be. Próbálja a bal botot a jobb alsó sarokban tartani öt másodpercig, hogy élesítse a drónt. Nem ajánlom a repülést oktatóanyag megtekintése nélkül, mert a drón nagyon törékeny és könnyen törhető. Számomra, amikor először repültem, eltörtem a GPS -tartót és néhány propellert. Ha nincs szüksége hangvezérlésre, itt megállhat. Ha többet szeretne megtudni az AWS -ről és a drón programozásáról, folytassa!

4. lépés: A drón programozása Python segítségével

A drón programozása repülni Python segítségével
A drón programozása repülni Python segítségével

Mielőtt belépnénk az AWS -be, először meg kell értenünk, hogyan kell programozni a drónt repülni. A kezdeti beállítás után a hangvezérlés integrálása nem lehet túl nehéz. Az első dolog, amit megpróbálhatunk érzékelni, egy egyszerű felszállási és leszállási program elkészítése. A Raspberry Pi beállítása után újra SSH -t használhatunk. Megnézheti újra a lejátszási listát, vagy kövesse az utasításaimat.

1. Először töltsük le az ArduPilot forráskódját a Raspberry Pi könyvtárában

mkdir src

Ezután szerezze be a fájlokat a GitHub -ból git klón használatával

git clone -b Copter -3.6.11

Most navigáljunk a /src /ardupilot mappába

cd src

cd ardupilot

Most inicializáljuk a forrásfájlokat

git almodul frissítése -init -rekursív

2. Ezután össze kell állítanunk a firmware -t a Raspberry Pi -n

A következő lépések végrehajtása előtt feltétlenül navigáljon a/src/ardupilot/helyre a cd -vel

Ezt követően a Navio -val történő konfigurálást a segítségével

./waf configure --board = navio2

Ezután lefordíthatod vele

./waf -a bin/arducopter célpontja

3. Most már telepíthetjük a forráskódot a Navio készülékre

Először navigáljunk a megfelelő könyvtárba.

cd/etc/systemd/system

Ezután szerkessze a fájlt

sudo vi arducopter.szolgáltatás

Ahol azt írja, hogy ExecStart, helyezze be a következőt a már meglévő helyett

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

Most, hogy az ardupilot forráskódját működésbe hozzuk, használhatjuk

sudo systemctl démon-reload

Ezután újraindíthatjuk a gombbal

sudo systemctl indítsa újra az arducoptert

Az utolsó lépéssel végre befejeztük az ArduPilot beállítását a drónunkon

4. A DroneKit telepítése

A DroneKit az a szoftver, amelyet a drón repülésére programozunk. A kód egy részének megértéséhez a dokumentációt itt találja. Először a szkript írása előtt telepítenünk kell a csomagot a drónunkra.

Ezzel telepíthetjük a python csomagot

pip install dronekit == 2.9.1

Ez lehet, vagy nem a legújabb verzió, de ezt használtam, így tudok segíteni a hibaelhárításban.

Annak ellenőrzéséhez, hogy telepítve van -e, tehetjük a

pip fagyasztás | grep dronekit

Most végre készen állunk az első python szkript elkészítésére

5. felszállás_ és_föld.py

FIGYELEM! Javaslom a python alapvető ismereteinek kialakítását, így megtanulhatja és megértheti a kódot. Ha saját maga szeretné megírni a programot, kövesse ezt a videót.

## Először ne hozzunk létre egy könyvtárat a kód tárolására

cd dk ## Ha saját maga szeretné megcsinálni, akkor a vi takeoff_and_land.py ## használatával hozzon létre egy programot

Ellenkező esetben megnézheti vagy használhatja a csatolt fájlt, és használhat fájlátviteli protokollt. Ezt a programot utólag is kipróbálhatjuk. Először is tisztázzuk, hogy ez egy python fájl, amelyet használnunk kell

chmod +x felszállás_ és_föld.py

Ezután próbálja meg használni a következő kódot a futtatáshoz

python takeoff_and_land.py -connect 127.0.0.1:14550

Első alkalommal nekem sem sikerült. Ha van egy link időkorlátja, akkor ne aggódjon, tehet valamit. Nyisson meg egy másik promptot és ssh. Próbálkozzon a mavproxy nevű telepítésével, és futtassa azt. Ezt követően mindkettőt egyszerre futtathatja. Ez segíthet a drón csatlakoztatásában. Ha ez megtörtént, van egy kihívásom számotokra. Próbálja meg kitalálni, hogy mit csinál a másik program (set_velocity_body.py), és hogyan kell működtetni. Ha megteszi, jó munkát.

6. Tovább!

Ezt a tudást most fel tudjuk használni, hogy drónunk hangvezérelt legyen. Az Alexa drone control sok ilyen és még sok más funkciót használ. Sok sikert és tovább!

5. lépés: Az Amazon Alexa és az Amazon Web Services használata a hangvezérlés integrálásához

Az Amazon Alexa és az Amazon Web Services használata a hangvezérlés integrálásához
Az Amazon Alexa és az Amazon Web Services használata a hangvezérlés integrálásához
Az Amazon Alexa és az Amazon Web Services használata a hangvezérlés integrálásához
Az Amazon Alexa és az Amazon Web Services használata a hangvezérlés integrálásához

Ez a lépés a kevésbé dokumentált lépések közé tartozik. Ez azt jelenti, hogy a legnehezebb lesz a hibaelhárítás. A munkába állása körülbelül egy hónapot vett igénybe, talán többet is. A legfontosabb itt a türelem. Ez a funkció, ha a valós életben valósul meg, megváltoztathatja az életet. Mondhatod Alexának, hogy vidd el az élelmiszereidet, ahelyett, hogy magad mennél. Képzeld el! Szóval minden további nélkül menjünk bele!

1. A Raspberry Pi regisztrálása dologként az AWS IoT -n

Az IoT (Internet of Things) használatához szükségünk van egy dologra. Tehát az AWS IoT használatához először be kell jelentkeznünk az AWS konzolba. Ezután lépjen az IoT Core -ra. Ha ott van, kattintson a Kezelés gombra, majd hozzon létre egy dolgot. A név hozzáadása után a csatlakozáshoz szükségünk van egy tanúsítványra. Javaslom, hogy kattintson az Egy kattintás tanúsítványra. A tanúsítvány képernyő megjelenítése után töltse le minden kulcsot, beleértve a gyökér CA -t is. Akkor mehet és befejezheti a dolog létrehozását. Ezután létre kell hoznunk egy házirendet. Menj vissza az IoT Core -hoz. Ezután kattintson a biztonságos és a házirendekre. Ezután nyomja meg a Házirend létrehozása gombot. Ezután létrehozhat nevet és hozzáadhat erőforrásokat. A művelet alatt írja be az iot * és a * parancsot az erőforrás alá, majd nyomja meg az engedélyezés lehetőséget. Ezután térjen vissza a dolgához, és menjen a bizonyítványhoz. Ha már itt van, kattintson a házirendekre. Ezután csatolhatja a házirendet a dologhoz, és minden kész!

2. A Code beállítása a Raspberry Pi -n és interakció az IoT -val

Ehhez a részhez szüksége lesz egy SFTP -ügyfélre (WinSCP -t használtam) a fájlok átviteléhez. A Raspberry Pi -hez való csatlakozáskor kéznél kell lennie a tanúsítványkulcsoknak. A kulcsfájlokat át kell vinni a Raspberry Pi -re. Az AWSIoTPythonSDK -t pipával is telepítenie kell a Raspberry Pi -re. Ezután lépjen be a Raspberry Pi dk könyvtárába. Az általam adott Alexa Drone Control fájlt használja az IoT -val való kommunikációhoz. A fájl használatához Shell Script -et használtam az indításhoz. Az alábbiakban megmutatom a kódot, mivel valamilyen okból nem tudom feltölteni a fájlt. Ha a program nem veszi fel az AWS IoT üzeneteit tesztelés közben, ne aggódjon! Ez lehet az én hibám, mivel előfordulhat, hogy az Alexa Drone Control File nem felel meg a dolgodnak. Tehát a javításhoz térjen vissza az AWS IoT -hez, és nyomja meg a tanulás gombot a bal panelen. Kövesse az utasításokat, és előfordulhat, hogy újra kell indítania. Sajnálom az esetet. Miután az IoT elkezdi dolgozni a RasPi programjával, integrálhatja a dronekit kódot az általam megadott Alexa Drone Control fájlból. Ezt követően használja a Shell -szkriptet, amelyet tanúsítványaival és az IoT Rest API végpontjával együtt adtam.

# stop script on erroret -e # Ellenőrizze, hogy létezik -e root CA fájl, töltse le, ha nem, ha [! -f./root-CA.crt]; majd printf "\ nAWS IoT Root CA tanúsítvány letöltése az AWS-ből … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # install AWS Device SDK for Python, ha még nincs telepítve ha [! -d./aws-iot-device-sdk-python]; majd printf "\ nAWS SDK telepítése … / n" git klón https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# futtassa a pub/sub mintaalkalmazást a csomagban letöltött tanúsítványok használatával

printf "\ n Pub/alminta alkalmazás futtatása… / 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

Ez nem működik mindenki számára, mivel a nevek különbözőek. Az általam használt kulcsok helyett a fájlok átvitelével helyettesítse a kulcsneveket. A fájl átvitele előtt feltétlenül lépjen ki a dk -ból! Egyelőre csak ennyit kell tennie.

3. Alexa készségének fejlesztése

Ez a lépés sokkal nehezebbnek tűnik, mint amilyen valójában. Először is be kell jelentkeznünk az Alexa Developer konzolba. Ezután nyomja meg a készség létrehozása gombot. Amikor azt kéri, hogy válasszon modellt a készségeihez, nyomja meg az egyéni gombot. Amikor a módszer kiválasztását kéri, nyomja meg a saját rendelkezést. Nevezheted, ahogy akarod. Nincs szükség sablonra, ezért válassza a nulláról történő kezdést. Ezután a készség létrehozása után meg kell érkeznie a Skill builder képernyőre, és a jobb oldalon található ellenőrzőlista. Innentől kezdve fejleszthetjük készségeinket. Az ellenőrzőlistán az első a hívás neve. Ezt fogja mondani Alexának, hogy hivatkozzon a készségeire. Nekem csak drónként adtam meg a hivatkozási nevemet. Most mehetünk a szándékunkhoz, a kijelentéseinkhez és a résekhez. Itt parancsokat adhat a drónhoz, például 1 métert felfelé, vagy jobbra vagy lefelé. Az enyém csak egy méterrel működik igazán. Kattintson a JSON szerkesztőre a bal oldali panel alján. Ezután beillesztheti a következő kódot.

Miután beillesztette a kódot a JSON szerkesztőbe, rákattinthat az ellenőrzőlista harmadik lépésére, és ez létrehozza az Ön interakciós modelljét. Ezzel a lépéssel egyelőre kész lesz. A végpontot egyelőre üresen hagyhatja!

4. lépés: A Lambda függvény kiépítése

Ezt a lépést most magának kell kitalálnia. Elmondom, hogyan kell csatlakoztatni az Alexa Skill -hez, de saját maga kell kódolnia. Tehát először lépjen az AWS felügyeleti konzolra. Ezután menjen a Lambdába. Ezután létrehozhat egy függvényt, amellyel bármit megnevezhet. Győződjön meg róla, hogy a semmiből készítette, és a futásidőt bármilyen kívánt programozási nyelvre állítja be. Node.js -t használtam. Az Alexa Skill hozzáadásához adjon hozzá egy trigger, és válassza az Alexa Skills Kit (ASK) lehetőséget. Másolja le a Lambda ARN -t, és térjen vissza az Alexa Skillhez. Most menjen a végponthoz. Beillesztheti az ARN -t, mentheti és új modellt készíthet. Ezután vegye fel az Alexa Skill ID -t, és illessze be a trigger szakaszba, ahol a Lambda kéri. Ezután görgessen lefelé a Lambdán, keresse meg az alapvető beállításokat, és állítsa be az időtúllépést 10 másodpercre. Most rajtad áll, hogy kitaláld a kódot. Tippekért tekintse meg az alábbi webhelyeket.

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

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

és használhatja a csatolt fájlt, de hiányos és nem fog működni.

/ *** Hangjával vezérelheti APM / Pixhawk quadcopterét az Amazon Alexa, Lambda, 2lemetry MQTT használatával.*/ var awsIot = igényel ('aws-iot-device-sdk'); var config = need ("./ config"); var deviceName = "EchoDroneControl"; // ez az eszköz valóban a vezérlő var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883 "clientId": "Lambda-" + deviceName, // + "-Lambda-" + (new Date (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var kliens = null; // A bejövő kérés irányítása típus alapján (LaunchRequest, IntentRequest stb.) A kérelem JSON törzse az eseményparaméterben van megadva. export.handler = funkció (esemény, kontextus) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = kontextus; if (event.session.application.applicationId! == app_id) {ctx.fail ("Érvénytelen alkalmazás -azonosító"); } kliens = 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 ("KIVÉTEL a kezelőben:" + e); ctx.fail ("Kivétel:" + e); }}; /*** A munkamenet kezdetekor hívja. */ function onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Akkor hívják, amikor a felhasználó elindítja a készséget anélkül, hogy megadná, mit akar. */ function onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Küldés a készség indításához. getWelcomeResponse (visszahívás); } /*** Akkor hívják, amikor a felhasználó meghatározza a készség szándékát. */function onIntent (aimRequest, session) {//, callback) {console.log ("onIntent requestId =" + aimRequest.requestId + ", sessionId =" + session.sessionId); var szándék = szándékkérés.szándék, szándéknév = szándékkérés.közösségnév; console.log ("REQUEST to string =" + JSON.stringify (aimRequest)); var visszahívás = null; // Küldje el készségei szándékkezelőinek, ha ("GoIntent" === aimName) {doGoIntent (szándék, munkamenet); } else if ("CommandIntent" === aimName) {doCommandIntent (szándék, munkamenet); } else if ("TurnIntent" === szándékNév) {doTurnIntent (szándék, munkamenet); } else if ("HelpIntent" === aimName) {getWelcomeResponse (); } else {dobja "Érvénytelen szándék"; }} /*** Akkor hívják, amikor a felhasználó befejezi a munkamenetet. * Nem hívják meg, amikor a készség visszatér. */ function onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Itt adhat hozzá tisztítási logikát} // --------------- A készség viselkedését vezérlő funkciók -------------------- --- function getWelcomeResponse () {// Ha szeretnénk inicializálni a munkamenetet, hogy rendelkezzünk néhány attribútummal, akkor hozzáadhatjuk azokat ide. var sessionAttributes = {}; var cardTitle = "Üdvözöljük"; var speechOutput = "Üdvözli a DRONE CONTROL."; // TODO: a drone online vagy offline? Ha online, akkor élesítve van? var repromptText = "Drone parancsra kész."; var shouldEndSession = hamis; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** kezeli a GO szándékot. */ function doGoIntent (szándék, munkamenet, visszahívás) {// var cardTitle = "Drone GO…"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = hamis; var speechOutput = ""; var irány = szándék.helyek.irány: érték; var távolság = szándék.helyek.távolság.érték; var egység = szándék.helyek.egység.érték; var validDirections = ["előre", "előre", "hátra", "hátra", "jobbra", "balra", "fel", "le", "egyenesen", "előre", "egyenesen előre"]; var validUnits = ["láb", "láb", "méter", "méter", "udvar", "yard"]; repromptText = "Mondja meg, meddig kell menni és milyen irányba."; var fail = false; // érvényesítse a bemeneteket, ha (! (parseInt (távolság)> = 1)) {speechOutput = "Nem tudtam megérteni azt a távolságot, amelyet szeretne."; kudarc = igaz; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "Nem tudtam megérteni azt az irányt, amelybe utazni szeretne."; kudarc = igaz; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Nem tudtam megérteni azt az egységet, amelyet el akar utazni."; kudarc = igaz; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (! fail) {var cardTitle = "Drone going" + direction + "" + distance + "" + unit; speechOutput = "Megy" + irány + "" + távolság + "" + egység; mqttPublish (szándék, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function doCommandIntent (szándék, munkamenet, visszahívás) {

// var cardTitle = "Drone COMMAND …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = hamis; var speechOutput = ""; repromptText = "Mondja el, mi a parancs a drónra."; var feladat = szándék.helyek. Task.value; var validTasks = ["indítás", "land", "r. t. l.", "hold", "stay", "stop", "return to launch", "abort"]; if (validTasks.indexOf (task) == -1) {speechOutput = "Nem tudtam megérteni a parancsot."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Drone parancs végrehajtása" + feladat; speechOutput = "Parancs végrehajtása" + feladat; mqttPublish (szándék, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function doTurnIntent (szándék, munkamenet, visszahívás) {

// var cardTitle = "Drone Turn …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = hamis; var speechOutput = ""; repromptText = "Mondja el, hogyan szeretné elfordítani a drónt."; var irány = szándék.helyek.irány: érték; var validDirections = ["jobb", "bal", "körül"]; if (validDirections.indexOf (irány) == -1) {speechOutput = "Nem tudtam megérteni a kanyar irányát."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Drone fordulás" + irány; speechOutput = "Fordulás" + irány; mqttPublish (szándék, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function mqttPublish (szándék, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (szándék); console.log ("mqttPublish: INTENT text =" + strIntent); // kliens.publish ("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); client.on ("close", (function () {console.log ("MQTT CLIENT CLOSE - azt hiszi, hogy sikeresen megtörtént."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("hiba", (függvény (hiba, megadva) {console.log ("MQTT CLIENT ERROR !!" + err);})); }

// --------------- Segítők, akik minden választ felépítenek -----------------------

function buildSpeechletResponse (title, output, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, kártya: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} függvény buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}}

Ajánlott: