Taula de continguts:

Drone Raspberry Pi controlat per veu amb IoT i AWS: 6 passos (amb imatges)
Drone Raspberry Pi controlat per veu amb IoT i AWS: 6 passos (amb imatges)

Vídeo: Drone Raspberry Pi controlat per veu amb IoT i AWS: 6 passos (amb imatges)

Vídeo: Drone Raspberry Pi controlat per veu amb IoT i AWS: 6 passos (amb imatges)
Vídeo: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Juliol
Anonim
Image
Image
Drone Raspberry Pi controlat per veu amb IoT i AWS
Drone Raspberry Pi controlat per veu amb IoT i AWS
Drone Raspberry Pi controlat per veu amb IoT i AWS
Drone Raspberry Pi controlat per veu amb IoT i AWS

Hola! Em dic Armaan. Sóc un noi de 13 anys de Massachusetts. Aquest tutorial mostra, com es pot deduir del títol, com construir un dron Raspberry Pi. Aquest prototip demostra com evolucionen els drons i també el paper que poden tenir en el futur. Definitivament, em puc veure despert d’aquí a deu anys i demanar a un dron que esmorzi per mi. El dron utilitza Amazon Alexa, Amazon Web Services, IoT (Internet of Things) i, sobretot, un Raspberry Pi per funcionar. Està destinat a demostrar i informar sobre els drons i com milloren cada dia. Tant de bo tingueu èxit i apreneu sobre els drons en el procés. Molta sort i gràcies per llegir. -Armaan

Subministraments

Per construir el prototip hi ha diverses necessitats de maquinari i programari. Vaig fer servir un tutorial en línia de The Drone Dojo per construir el dron i vaig integrar les tecnologies enumerades. Per al dron, podeu trobar la llista de peces aquí:

Llista de peces de drons

Requisits de programari:

  • Serveis web d’Amazon
  • Un portàtil
  • Programari Mission Planer
  • Balena Etcher
  • Es troba la targeta MicroSD amb fitxer Raspbian aquí
  • Amazon Alexa, físic o virtual

Pas 1: reunir i comprendre les parts

Recollida i comprensió de peces
Recollida i comprensió de peces

Totes les parts esmentades a la llista de subministraments són necessàries, així com una comprensió clara de cada part. Podeu trobar les parts en línia i un cop reunides, continueu llegint. Aquí es pot trobar una llista de reproducció de The Drone Dojo per a una comprensió completa de les parts. Podeu trobar una explicació de 4 minuts al meu canal de youtube aquí. Quan es tracta de drons, les úniques parts, malgrat el que la majoria pensa, no són només motors i hèlixs. A continuació es mostren els propòsits bàsics de cada part.

El Raspberry Pi amb l’Emlid Navio2

Aquesta part és pràcticament un processador central i el punt principal del dron. El Raspberry Pi actua com la CPU d’un ordinador que envia ordres al Navio2 per executar-les mitjançant PWM (Pulse Width Modulation Signals) a altres parts del dron

2. Els ESC (controladors electrònics de velocitat)

Aquestes parts grogues es troben sota el marc. Són 4 connectats al Navio, un per a cada motor. En rebre senyals PWM, giren els motors i comencen a volar.

3. Motors

Els motors no necessiten massa explicació perquè probablement en coneixeu. Giren i fan girar les hèlixs per crear empenta.

4. Hèlixs

Les hèlixs creen empenta perquè el dron pugui volar. Giren en la mateixa direcció que els motors per aixecar el vehicle.

5. El mòdul de bateria i alimentació

La bateria LiPo fa funcionar tot el dron a través del marc mitjançant el mòdul d’alimentació. Dóna uns 15-20 minuts de vol i actua com a font d’energia.

6. El GPS

El GPS es comunica amb satèl·lits per determinar la posició del dron. Determina l’altitud, la latitud i la longitud. Es pot utilitzar per a Geofencing, waypoints i també per desplaçar-se a determinades posicions o adreces.

7. El mòdul de telemetria

El mòdul de telemetria connecta el nostre avió no tripulat a una estació de control de terra, en el nostre cas Mission Planner, per ser monitoritzada.

8. El controlador RC i el mòdul juntament amb el codificador PPM

El controlador RC utilitza ràdio per transmetre senyals i ordres al mòdul RC per pilotar el dron manualment. El codificador PPM tradueix aquests senyals perquè el Navio + RPI processi i executi.

9. El marc

Aquest marc blanc i vermell actua com a base o plataforma per col·locar les altres parts. El marc és aerodinàmic i lleuger, per tant és perfecte per a la nostra construcció de drons.

Ara, coneixent totes les parts, per fi podem construir el dron. Passem al següent pas.

Pas 2: Muntatge del dron

Muntatge del dron
Muntatge del dron

Aquest pas és probablement el més difícil en termes d’esforç físic. Us recomano que us demani ajuda a una altra persona o intenteu utilitzar la mà d'ajuda a la llista de peces. El procés és massa llarg per demostrar-ho aquí, així que proporcionaré un altre enllaç que he utilitzat per The Drone Dojo.

Construint un dron Raspberry Pi

Una vegada més, com que no aprofundiré en els detalls, només destacaré els conceptes bàsics de cada pas.

1. Organitzeu els vostres subministraments: reuniu els nostres materials i assegureu-vos que siguin fàcilment accessibles

2. Planifiqueu la vostra construcció: organitzeu les vostres parts al marc per fer un pla del que construireu

3. Treball de soldadura: és el treball que és una mica difícil de fer sol. Heu de soldar els connectors de bala daurada que vénen amb els motors als ESC. A continuació, heu d’agafar la part inferior del marc i soldar els ESC al quadre inferior o al tauler de distribució d’energia. El mòdul de bateria també es soldarà a la placa de distribució d’energia

4. Configuració del marc: després heu de cargolar la part superior del marc juntament amb els braços. A continuació, podeu connectar el Raspberry Pi a la part superior de la forma que vulgueu (he utilitzat cinta adhesiva). A continuació, podeu fixar els ESC als braços amb tirants. Ara gairebé hem acabat.

5. Enllaçar el controlador RC al receptor - Proveu de seguir les instruccions de la llista de reproducció anterior per enllaçar el controlador RC mitjançant un ESC.

6. Finalització de peces al marc: cinta adhesiva o corretja al mòdul de telemetría al marc. Cinteu també el codificador PPM a un braç. Ara podeu connectar el codificador ESC i PPM al Navio.

7. Muntatge GPS + bateria: munteu el muntatge GPS amb els diferents cargols i peces. Feu servir cremalleres per fixar el GPS al marc. No necessàriament vaig utilitzar el suport GPS per la seva fragilitat, però depèn de vosaltres. A continuació, podeu inserir la bateria entre el Power Dist. Pissarra. Em vaig lligar i vaig gravar el mòdul de potència al quadre també. Ara el vostre maquinari està pràcticament configurat. Ara per la part que esperem!

8. Instal·lació de les hèlixs !!! - Podeu apretar les hèlixs mitjançant el gràfic esmentat a la llista de reproducció. A continuació, podeu connectar els ESC als motors i finalment hem acabat de construir el dron.

El programari és el següent, així que endavant!

Pas 3: Configuració de Raspberry Pi i GCS (Mission Planner)

Configuració de Raspberry Pi i GCS (Mission Planner)
Configuració de Raspberry Pi i GCS (Mission Planner)

Una vegada més, podeu trobar instruccions més detallades a la llista de reproducció de l’últim pas. Tot i això, probablement sabreu com configurar el RasPi. Però aquesta vegada ho estem fent sense cap. Utilitzeu Balena Etcher per gravar el sistema operatiu des del lloc web Navio OS a la targeta MicroSD. Mentre estigui connectat a l'ordinador, aneu al sol·licitant wpa mitjançant el bloc de notes ++. Després, introduïu el ssid i la contrasenya perquè el Raspberry Pi es connecti al vostre WiFi. Després heu d'afegir un fitxer anomenat SSH. Això es pot fer mitjançant la línia d'ordres o un altre mètode. Ara podem SSH. Podeu utilitzar el símbol del sistema o Putty. He utilitzat l'indicador d'ordres i he escrit "ssh pi @ navio" per connectar-me al meu cas, o bé podeu trobar l'adreça IP i ssh d'aquesta manera. Quan us connecteu, utilitzeu aquest vídeo per configurar i configurar el Navio. Per configurar la telemetria, primer heu de fer una edició al Raspberry Pi. Seguiu això per fer l'edició i intenteu connectar-vos a Mission Planner. Si la telemetria no funciona, podeu desfer l'edició i connectar-vos mitjançant una connexió UDB introduint la vostra IP de GCS (Ground Control Station, com ara un portàtil). Un cop connectat a Mission Planner, podeu utilitzar l'assistent de configuració per calibrar totes les parts del dron. Si necessiteu ajuda, torneu a consultar la llista de reproducció. Normalment, sempre que configureu, gairebé sempre hi ha un error. La solució de problemes és una de les parts més importants d’aquest projecte. Realment no us puc ajudar, ja que no sóc conscient dels vostres errors, però la majoria d’errors es poden corregir amb ajuda d’Internet. Després que tot estigui a punt, el dron ja està a punt per volar. Podeu configurar el controlador RC i els modes de vol a Mission Planner. Intenteu mantenir el pal esquerre a la part inferior dreta durant cinc segons per armar el dron. No recomano volar sense mirar cap tutorial perquè el dron és molt fràgil i fàcil de trencar. Per a mi, la primera vegada que el vaig volar, vaig trencar el suport GPS i algunes hèlixs. Si no necessiteu control de veu, podeu aturar-vos aquí. Per aprendre sobre AWS i programar el dron, continueu!

Pas 4: Programació del dron per volar amb Python

Programació del dron per volar amb Python
Programació del dron per volar amb Python

Abans d’entrar a AWS, primer hauríem d’entendre com programar el dron per volar. Després de la configuració inicial, la integració del control de veu no hauria de ser massa difícil. El primer que podem provar d’entendre-ho és fer un programa senzill d’enlairament i aterratge. Després de configurar el Raspberry Pi, podem incorporar-hi SSH de nou. Podeu tornar a mirar la llista de reproducció o seguir les meves instruccions.

1. Primer baixem el codi font ArduPilot en un directori del Raspberry Pi

mkdir src

A continuació, obteniu els fitxers de GitHub mitjançant el clonatge de git

git clone -b Copter-3.6.11

Ara anem a / src / ardupilot

cd src

cd ardupilot

Ara, inicialitzem els fitxers font

git submodule update --init --recursive

2. A continuació, hem de compilar el firmware al Raspberry Pi

Assegureu-vos de navegar a / src / ardupilot / amb cd abans de fer els passos següents

A continuació, per cofigurar específicament a Navio mitjançant

./waf configure --board = navio2

Després podeu compilar amb

./waf --targets bin / arducopter

3. Ara podem instal·lar el codi font al Navio

Primer us permet navegar al directori correcte.

cd / etc / systemd / system

A continuació, editeu el fitxer

sudo vi arducopter.service

On diu ExecStart, inseriu el següent en lloc del que ja hi ha

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

Ara, per posar en funcionament el codi font de l’ardupilot, podem utilitzar-lo

sudo systemctl daemon-recoad

Després podem reiniciar amb

sudo systemctl reinicia arducopter

Amb l’últim pas, finalment hem acabat de configurar ArduPilot al nostre dron

4. Instal·lació de DroneKit

DroneKit és el programari que utilitzarem per programar el dron per volar. Per entendre alguns dels codis, podeu trobar la documentació aquí. Primer hem d’instal·lar el paquet al nostre dron abans d’escriure un script.

Podem instal·lar el paquet python amb

pip install dronekit == 2.9.1

Pot ser que sigui o no la versió més recent, però és la que he fet servir per poder ajudar-vos en la resolució de problemes.

Per comprovar si està instal·lat, podem fer un

pip congelar | grep dronekit

Ara per fi estem preparats per fer el nostre primer script Python

5. takeoff_and_land.py

AVÍS! Us proposo establir una comprensió bàsica de Python per tal que pugueu aprendre i entendre el codi. Si voleu escriure el programa vosaltres mateixos, seguiu aquest vídeo.

## Primer no creem un directori per emmagatzemar aquest codi

cd dk ## Si voleu fer-ho vosaltres mateixos, utilitzeu vi takeoff_and_land.py ## per crear un programa

En cas contrari, podeu fer una ullada o utilitzar el fitxer adjunt i fer servir un protocol de transferència de fitxers. Podem provar aquest programa després. Primer per aclarir que és un fitxer python que hem d’utilitzar

chmod + x takeoff_and_land.py

A continuació, proveu d’utilitzar el codi següent per executar-lo

python takeoff_and_land.py --connect 127.0.0.1:14550

La primera vegada tampoc no em va funcionar. Si hi ha un temps d’espera d’enllaç, no us preocupeu, podeu fer alguna cosa. Obriu un altre avís i ssh. Podeu provar d’instal·lar alguna cosa anomenada mavproxy i provar d’executar-lo. Després d'això, podeu executar tots dos simultàniament. Això hauria d’ajudar a connectar el dron. Un cop fet això, tinc un repte per a vosaltres. Proveu d'esbrinar què fa l'altre programa (set_velocity_body.py) i com fer-lo funcionar. Si ho fas, bona feina.

6. Endavant!

Ara podem utilitzar aquest coneixement per fer que el nostre dron sigui controlat per veu. El control de drons Alexa utilitza moltes d’aquestes funcions i molt més. Bona sort i endavant!

Pas 5: utilitzar Amazon Alexa i Amazon Web Services per integrar el control de veu

Utilitzar Amazon Alexa i Amazon Web Services per integrar el control de veu
Utilitzar Amazon Alexa i Amazon Web Services per integrar el control de veu
Utilitzar Amazon Alexa i Amazon Web Services per integrar el control de veu
Utilitzar Amazon Alexa i Amazon Web Services per integrar el control de veu

Aquest pas és un dels menys documentats. Això vol dir que serà el més difícil de solucionar. Només aconseguir que funcionés em va costar aproximadament un mes, potser més. El més important aquí és ser pacient. Aquesta característica, si s’implementa a la vida real, pot canviar la vida. Només podeu dir a Alexa que obtingui els vostres queviures en lloc d’anar-hi vosaltres mateixos. Imagina't això! Així doncs, sense més preàmbuls, hi entrem!

1. Registre del Raspberry Pi com a cosa a AWS IoT

Per utilitzar l'IoT (Internet de les coses), bé, necessitem una cosa. Per tant, hem d’iniciar sessió a AWS Console per utilitzar AWS IoT primer. A continuació, aneu a IoT Core. Un cop allà, heu de fer clic a Gestiona i després crear una cosa. Després d’afegir un nom, per connectar-nos, necessitem un certificat. Recomanaria fer clic a la certificació d'un clic. Després de veure la pantalla del certificat, assegureu-vos de descarregar totes les claus, inclosa la CA arrel. Aleshores podeu anar i acabar la creació de la cosa. A continuació, hem de crear una política. Torneu al IoT Core. A continuació, feu clic a Polítiques segures. A continuació, premeu crear política. A continuació, podeu crear un nom i afegir recursos. A l'acció, escriviu iot * i escriviu * a recurs i premeu permeten l'efecte. A continuació, torneu al vostre assumpte i aneu al vostre certificat. Un cop aquí, feu clic a les polítiques. A continuació, podeu adjuntar la vostra política per al tema i ja està a punt.

2. Configuració del codi a Raspberry Pi i interacció amb IoT

Per a aquesta part, necessitareu un client SFTP (he utilitzat WinSCP) per a la transferència de fitxers. En connectar-nos al nostre Raspberry Pi, haurem de tenir a mà les claus de certificat. Heu de transferir els fitxers clau al Raspberry Pi. També hauríeu d’instal·lar pip AWSIoTPythonSDK al Raspberry Pi. A continuació, aneu al directori dk del Raspberry Pi. Feu servir el fitxer Alexa Drone Control que he proporcionat per comunicar-me amb IoT. Per utilitzar aquest fitxer, he utilitzat un script Shell per iniciar. Mostraré el codi següent perquè no puc carregar el fitxer per alguna raó. Si el programa no recull missatges d’AWS IoT durant les proves, no us preocupeu. Pot ser que sigui culpa meva, ja que és possible que el fitxer de control de drones Alexa no s’adapti a la vostra cosa. Per tant, per solucionar-ho, torneu a AWS IoT i premeu Learn al tauler esquerre. Seguiu les instruccions i és possible que hagueu de reiniciar. Em sap greu això. Quan el vostre IoT comenci a treballar amb el programa al RasPi, podeu integrar el codi dronekit del fitxer Alexa Drone Control que he proporcionat. Després d’això, utilitzeu el Shell Script que he proporcionat amb els vostres certificats i el punt final de l’API Rest d’IoT.

# stop script on errorset -e # Comproveu si existeix un fitxer CA arrel, descarregueu-lo si no! -f./root-CA.crt]; a continuació, imprimiu "\ nDescarregant el certificat AWS IoT Root CA d'AWS … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # install AWS Device SDK for Python si encara no està instal·lat si [! -d./aws-iot-device-sdk-python]; a continuació, imprimeix "\ nInstal·lant AWS SDK … / n" clon git https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py instal·la popd fi

# executeu una aplicació de mostra pub / sub mitjançant certificats descarregats al paquet

printf "\ nExecució d'aplicacions de mostra 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

Això no funcionarà per a tots, ja que els noms són diferents. En lloc de les claus que he fet servir, substituïu els noms de les vostres claus quan transferiu el fitxer. Assegureu-vos de sortir de dk abans de transferir el fitxer. Això hauria de ser tot el que heu de fer ara per ara.

3. Construir la vostra habilitat Alexa

Aquest pas sembla molt més difícil del que realment és. En primer lloc, hem d’iniciar sessió a la consola per a desenvolupadors d’Alexa. A continuació, només cal que premeu per crear habilitat. Quan us demani que trieu un model per a la vostra habilitat, només cal que feu clic a personalitzat. Quan us demani triar un mètode, premeu el vostre propi subministrament. Podeu anomenar-lo com vulgueu. No cal cap plantilla, així que trieu començar de zero. A continuació, després de crear la vostra habilitat, heu d’arribar a la pantalla del Creador d’habilitats amb una llista de comprovació a la dreta. A partir d’aquí podem començar a desenvolupar les nostres habilitats. El primer de la llista de comprovació és el nom de la invocació. Això és el que diràs a Alexa que invoque la teva habilitat. Per a mi, acabo de posar el meu nom d’invocació com a dron. Ara podem anar a la nostra intenció, enunciats i espais. Aquí podeu fer ordres per al dron, com ara pujar 1 metre o anar cap a la dreta o cap avall. La meva només funciona realment amb un metre per ara. Podeu fer clic a l'Editor JSON a la part inferior del tauler esquerre. A continuació, hi podeu enganxar el codi següent.

Després d'enganxar el codi a l'Editor JSON, podeu fer clic al tercer pas de la llista de comprovació i crearà el vostre model d'interacció. Amb aquest pas, acabareu de moment. Podeu deixar la ranura del punt final en blanc per ara.

Pas 4: Construïu la vostra funció Lambda

Ara, aquest pas és el que haureu d’esbrinar per vosaltres mateixos. T’explicaré com connectar-lo a Alexa Skill, però hauràs de codificar-ho tu mateix. Per tant, primer aneu a la consola d’administració d’AWS. Després, aneu a Lambda. A continuació, podeu crear una funció amb el nom que vulgueu. Assegureu-vos de crear-lo des de zero i feu que el temps d’execució sigui el llenguatge de programació que vulgueu. He utilitzat Node.js. Per afegir Alexa Skill, afegiu un activador i seleccioneu Alexa Skills Kit (ASK). Copieu el Lambda ARN i torneu a Alexa Skill. Ara aneu al punt final. Podeu enganxar el vostre ARN, desar-lo i crear-ne un de nou. A continuació, agafeu l'identificador d'habilitats d'Alexa i enganxeu-lo a la secció del disparador on us demana a Lambda. A continuació, desplaceu-vos cap avall a la Lambda i cerqueu la configuració bàsica i espereu el temps d'espera 10 segons. Ara depèn de vosaltres esbrinar el codi. Per obtenir més informació, podeu consultar els llocs web següents.

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

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

i podeu utilitzar el fitxer que he adjuntat, però està incomplet i no funcionarà.

/ ** * Controleu el quadcopter APM / Pixhawk amb la vostra veu mitjançant Amazon Alexa, Lambda, 2lemetry MQTT.* / var awsIot = require ('aws-iot-device-sdk'); var config = require ("./ config"); var deviceName = "EchoDroneControl"; // aquest dispositiu és realment el controlador 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 = nul; var client = nul; // Dirigeixi la sol·licitud entrant segons el tipus (LaunchRequest, IntentRequest, etc.) El cos JSON de la sol·licitud es proporciona al paràmetre d'esdeveniment. exportacions.handler = funció (esdeveniment, context) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = context; if (event.session.application.applicationId! == app_id) {ctx.fail ("Identificador d'aplicació no vàlid"); } client = 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 ("EXCEPCIÓ al controlador:" + e); ctx.fail ("Excepció:" + e); }}; / ** * Es truca quan comença la sessió. * / function onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Es truca quan l'usuari llança l'habilitat sense especificar què vol. * / function onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Envia al llançament de la teva habilitat. getWelcomeResponse (devolució de trucada); } / ** * Es truca quan l'usuari especifica una intenció d'aquesta habilitat. * / function onIntent (intentRequest, session) {//, callback) {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 devolució de trucada = nul; // Envieu als controladors d’intencions de la vostra habilitat if ("GoIntent" === intentName) {doGoIntent (intent, sessió); } else if ("CommandIntent" === intentName) {doCommandIntent (intent, sessió); } else if ("TurnIntent" === intentName) {doTurnIntent (intent, sessió); } else if ("HelpIntent" === intentName) {getWelcomeResponse (); } else {llançar "Intenció no vàlida"; }} / ** * Es truca quan l'usuari finalitza la sessió. * No es crida quan torna l'habilitat shouldEndSession = true. * / function onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Afegiu aquí una lògica de neteja} // --------------- Funcions que controlen el comportament de l'habilitat -------------------- --- funció getWelcomeResponse () {// Si volguéssim inicialitzar la sessió per tenir alguns atributs, podríem afegir-los aquí. var sessionAttributes = {}; var cardTitle = "Benvingut"; var speechOutput = "Benvingut al DRONE CONTROL."; // TODO: el drone està en línia o fora de línia? Si està en línia, està ARMAT? var repromptText = "Drone preparat per a l'ordre."; var shouldEndSession = false; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } / ** * gestiona la intenció de GO. * / function doGoIntent (intent, sessió, devolució de trucada) {// var cardTitle = "Drone GO …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; var direction = intent.slots. Direction.value; var distance = intent.slots. Distance.value; var unit = intent.slots. Unit.value; var validDirections = ["endavant", "endavant", "enrere", "enrere", "dreta", "esquerra", "amunt", "avall", "recte", "endavant", "recte endavant"]; var validUnits = ["peu", "peus", "metre", "metres", "jardí", "iardes"]; repromptText = "Digueu-me fins on heu d'anar i en quina direcció."; var falla = fals; // validar les entrades si (! (parseInt (distància)> = 1)) {speechOutput = "No he pogut entendre la distància que voleu que faci."; fallar = cert; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "No he pogut entendre la direcció que voleu que viatgi."; fallar = cert; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "No he pogut entendre la unitat que voleu que viatgi."; fallar = cert; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (! fail) {var cardTitle = "Drone va" + direcció + "" + distància + "" + unitat; speechOutput = "Anar" + direcció + "" + distància + "" + unitat; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funció doCommandIntent (intenció, sessió, devolució de trucada) {

// var cardTitle = "DRON COMMAND …"; var repromptText = nul; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Digueu-me quin és l'ordre del 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 = "No he pogut entendre l'ordre."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Executant l'ordre Drone" + tasca; speechOutput = "Execució de l'ordre" + tasca; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funció doTurnIntent (intenció, sessió, devolució de trucada) {

// var cardTitle = "Torn de dron …"; var repromptText = nul; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Digueu-me com voleu girar el dron."; var direction = intent.slots. Direction.value; var validDirections = ["dreta", "esquerra", "al voltant"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "No he pogut entendre la direcció del gir."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Drone girant" + direcció; speechOutput = "Gir" + direcció; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funció mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (intent); console.log ("mqttPublish: INTENT text =" + strIntent); // client.publish ("ikw1zr46p50f81z / drone / echo", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); client.);})); client.on ("error", (funció (err, concedit) {console.log ("ERROR DEL CLIENT MQTT !!" + err);})); }

// --------------- Ajudants que generen totes les respostes -----------------------

function buildSpeechletResponse (title, output, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, targeta: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} funció buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}}

Recomanat: