Table des matières:
- Fournitures
- Étape 1: Rassembler et comprendre les pièces
- Étape 2: Assemblage du drone
- Étape 3: Configuration de Raspberry Pi et GCS (Mission Planner)
- Étape 4: programmer le drone pour voler avec Python
- Étape 5: Utilisation d'Amazon Alexa et d'Amazon Web Services pour intégrer le contrôle vocal
Vidéo: Drone Raspberry Pi à commande vocale Alexa avec IoT et AWS : 6 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
Salut! Je m'appelle Armaan. Je suis un garçon de 13 ans du Massachusetts. Ce tutoriel montre, comme vous pouvez le déduire du titre, comment construire un drone Raspberry Pi. Ce prototype montre comment les drones évoluent et aussi quel rôle ils pourraient jouer à l'avenir. Je me vois certainement me réveiller dans 10 ans et demander à un drone de prendre le petit-déjeuner pour moi. Le drone utilise Amazon Alexa, Amazon Web Services, IoT (Internet des objets) et surtout un Raspberry Pi pour fonctionner. Il est destiné à démontrer et à informer sur les drones et comment ils s'améliorent chaque jour. J'espère que vous avez réussi et que vous en apprenez davantage sur les drones dans le processus. Bonne chance et merci pour la lecture. -Armaan
Fournitures
Pour construire le prototype, il existe divers besoins matériels et logiciels. J'ai utilisé un tutoriel en ligne de The Drone Dojo pour construire le drone et intégré les technologies répertoriées. Pour le drone, vous pouvez trouver la liste des pièces ici:
Liste des pièces de drone
Logiciels requis:
- Services Web Amazon
- Un ordinateur portable
- Logiciel de rabotage de mission
- Graveur Balena
- Carte MicroSD avec fichier Raspbian trouvée ici
- Amazon Alexa, physique ou virtuel
Étape 1: Rassembler et comprendre les pièces
Chaque pièce mentionnée dans la liste de fournitures est nécessaire, de même qu'une compréhension claire de chaque pièce. Vous pouvez trouver les pièces en ligne et une fois rassemblées, continuez à lire. Une playlist de The Drone Dojo pour une compréhension complète des parties peut être trouvée ici. Une explication de 4 minutes sur ma chaîne youtube se trouve ici. En ce qui concerne les drones, les seules pièces, contrairement à ce que la plupart des gens pensent, ne sont pas seulement les moteurs et les hélices. Vous trouverez ci-dessous les objectifs de base de chaque partie.
Le Raspberry Pi avec l'Emlid Navio2
Cette partie est à peu près un processeur central et le point principal du drone. Le Raspberry Pi agit comme le processeur d'un ordinateur qui envoie des commandes au Navio2 à exécuter via PWM (signaux de modulation de largeur d'impulsion) à d'autres parties du drone
2. Les ESC (contrôleurs de vitesse électroniques)
Ces parties jaunes se trouvent sous le cadre. Ils sont 4 branchés sur le Navio, un pour chaque moteur. À la réception des signaux PWM, ils font tourner les moteurs et commencent le vol.
3. Moteurs
Les moteurs n'ont pas besoin de trop d'explications car vous les connaissez probablement. Ils tournent et font tourner les hélices pour créer une poussée.
4. Hélices
Les hélices créent une poussée pour que le drone vole. Ils tournent dans le même sens que les moteurs pour soulever le véhicule.
5. La batterie et le module d'alimentation
La batterie LiPo alimente l'ensemble du drone à travers le cadre à l'aide du module d'alimentation. Il donne environ 15-20 minutes de temps de vol et agit comme une source d'alimentation.
6. Le GPS
Le GPS communique avec les satellites pour déterminer la position du drone. Il détermine l'altitude, la latitude et la longitude. Il peut être utilisé pour le géorepérage, les points de cheminement et également pour se déplacer vers certaines positions ou directions.
7. Le module de télémétrie
Le module de télémétrie connecte notre drone à une station de contrôle au sol, dans notre cas Mission Planner, à surveiller.
8. Le contrôleur et le module RC avec l'encodeur PPM
Le contrôleur RC utilise la radio pour transmettre des signaux et des commandes au module RC pour piloter le drone manuellement. L'encodeur PPM traduit ces signaux pour que Navio + RPI les traite et les exécute.
9. Le cadre
Ce cadre rouge et blanc sert de base ou de plate-forme pour les autres pièces à placer. Le cadre est aérodynamique et léger, donc parfait pour notre construction de drone.
Maintenant, avec la connaissance de chaque pièce, nous pouvons enfin construire le drone ! En avant à l'étape suivante !
Étape 2: Assemblage du drone
Cette étape est probablement la plus difficile en termes d'effort physique. Je recommande de demander de l'aide à une autre personne ou d'essayer d'utiliser le coup de main dans la liste des pièces. Le processus est trop long à démontrer ici, je vais donc fournir un autre lien que j'ai utilisé par The Drone Dojo.
Construire un drone Raspberry Pi
Encore une fois, comme je n'entrerai pas dans trop de détails, je vais juste souligner les bases de chaque étape.
1. Organisez vos fournitures - Rassemblez nos matériaux et assurez-vous qu'ils sont facilement accessibles
2. Planifiez votre construction - Organisez vos pièces sur le cadre pour faire un plan de ce que vous allez construire
3. Travail de soudure - C'est le travail qui est un peu difficile à faire seul. Vous devez souder les connecteurs dorés fournis avec les moteurs aux ESC. Ensuite, vous devez prendre la partie inférieure du cadre et souder les ESC au cadre inférieur ou à la carte de distribution électrique. Le module de batterie sera également soudé sur la carte de distribution électrique
4. Installation du cadre - Vous devez ensuite visser la partie supérieure du cadre avec les bras. Vous pouvez ensuite attacher le Raspberry Pi sur le dessus comme vous le souhaitez (j'ai utilisé du ruban adhésif). Ensuite, vous pouvez fixer les ESC aux bras avec des attaches zippées. Maintenant, nous avons presque terminé.
5. Liaison de la télécommande RC au récepteur - Essayez de suivre les instructions de la liste de lecture ci-dessus pour lier la télécommande RC à l'aide d'un ESC.
6. Finalisation des pièces sur le cadre - Ruban adhésif ou sangle sur le module de télémétrie sur le cadre. Ruban adhésif pour l'encodeur PPM sur un bras également. Vous pouvez maintenant câbler l'ESC et l'encodeur PPM au Navio.
7. Support GPS + Batterie - Assemblez le support GPS avec les différentes vis et pièces. À l'aide de fermetures éclair, attachez le GPS au cadre. Je n'ai pas forcément utilisé le support GPS en raison de sa fragilité, mais c'est à vous de décider. Ensuite, vous pouvez insérer la batterie entre le Power Dist. Planche. J'ai également attaché et scotché le module d'alimentation au cadre. Maintenant, votre matériel est à peu près configuré. Maintenant pour la partie que nous attendons !
8. Installation des hélices !!! - Vous pouvez serrer les hélices à l'aide du tableau mentionné dans la playlist. Ensuite, vous pouvez brancher les ESC sur les moteurs et nous avons enfin fini de construire le drone.
Le logiciel est le prochain, donc en avant !
Étape 3: Configuration de Raspberry Pi et GCS (Mission Planner)
Encore une fois, vous pouvez trouver des instructions plus détaillées dans la liste de lecture de la dernière étape. Cependant, vous savez probablement comment configurer le RasPi. Mais cette fois, nous le faisons sans tête. Utilisez Balena Etcher pour graver le système d'exploitation du site Web Navio OS sur la carte MicroSD. Pendant qu'il est connecté à votre ordinateur, accédez au demandeur wpa à l'aide du bloc-notes ++. Après cela, entrez le ssid et le mot de passe pour que le Raspberry Pi se connecte à votre WiFi. Ensuite, vous devez ajouter un fichier appelé SSH. Cela peut être via la ligne de commande ou une autre méthode. Maintenant, nous pouvons SSH. Vous pouvez utiliser l'invite de commande ou Putty. J'ai utilisé l'invite de commande et tapé "ssh pi@navio" pour me connecter dans mon cas, ou vous pouvez trouver l'adresse IP et ssh de cette façon. Lors de la connexion, utilisez cette vidéo pour installer et configurer le Navio. Pour configurer la télémétrie, vous devez d'abord effectuer une modification sur le Raspberry Pi. Suivez ceci pour effectuer la modification et essayez de vous connecter à Mission Planner. Si la télémétrie ne fonctionne pas, vous pouvez annuler la modification et vous connecter à l'aide d'une connexion UDB en entrant votre IP GCS (station de contrôle au sol telle qu'un ordinateur portable). Une fois connecté à Mission Planner, vous pouvez utiliser l'assistant de configuration pour calibrer toutes les parties du drone. Si vous avez besoin d'aide, reportez-vous à nouveau à la liste de lecture. Habituellement, chaque fois que vous configurez, il y a presque toujours une erreur. Le dépannage est l'une des parties les plus importantes de ce projet. Je ne peux pas vraiment vous aider car je ne suis pas au courant de vos erreurs, mais la plupart des erreurs peuvent être corrigées à l'aide d'Internet. Une fois que tout est prêt, le drone est prêt à voler ! Vous pouvez configurer votre contrôleur RC et vos modes de vol sur Mission Planner. Essayez de maintenir le joystick gauche tout en bas à droite pendant cinq secondes pour armer le drone. Je ne recommande pas de voler sans regarder un tutoriel car le drone est très fragile et facile à casser. Pour ma part, la première fois que je l'ai piloté, j'ai cassé le support GPS et quelques hélices. Si vous n'avez pas besoin de commande vocale, vous pouvez vous arrêter ici. Pour en savoir plus sur AWS et programmer le drone continuez !
Étape 4: programmer le drone pour voler avec Python
Avant d'entrer dans AWS, nous devons d'abord comprendre comment programmer le drone pour voler. Après la configuration initiale, l'intégration de la commande vocale ne devrait pas être trop difficile. La première chose que nous pouvons essayer d'avoir une idée est de faire un simple programme de décollage et d'atterrissage. Après avoir configuré le Raspberry Pi, nous pouvons à nouveau y accéder en SSH. Vous pouvez regarder à nouveau la liste de lecture ou suivre mes instructions.
1. Commençons par télécharger le code source ArduPilot dans un répertoire sur le Raspberry Pi
mkdir src
Ensuite, récupérez les fichiers de GitHub en utilisant git clone
git clone -b Copter-3.6.11
Maintenant, naviguons vers /src/ardupilot
cd src
cd ardupilot
Maintenant, initialisons les fichiers sources
mise à jour du sous-module git --init --recursive
2. Ensuite, nous devons compiler le firmware sur le Raspberry Pi
Assurez-vous de naviguer vers /src/ardupilot/ avec cd avant de passer aux étapes suivantes
Ensuite pour cofigurer spécifiquement au Navio en utilisant
./waf configure --board=navio2
Ensuite, vous pouvez compiler avec
./waf --targets bin/arducopter
3. Nous pouvons maintenant installer le code source sur le Navio
Tout d'abord, naviguons vers le bon répertoire.
cd/etc/systemd/system
Puis modifiez le fichier
sudo vi arducopter.service
Là où il est écrit ExecStart, insérez ce qui suit au lieu de ce qui est déjà là
ExecStart=/bin/sh -c "/home/pi/src/arducopter/build/navio2/bin/arducopter ${ARDUPILOT_OPTS}"
Maintenant, pour mettre le code source ardupilot en action, nous pouvons utiliser
sudo systemctl démon-recharger
Ensuite, nous pouvons redémarrer avec
sudo systemctl redémarrer arducopter
Avec la dernière étape, nous avons enfin fini de configurer ArduPilot sur notre drone
4. Installation de DroneKit
DroneKit est le logiciel que nous utiliserons pour programmer le drone pour qu'il vole. Pour comprendre une partie du code, vous pouvez trouver la documentation ici. Nous devons d'abord installer le package sur notre drone avant d'écrire un script.
Nous pouvons installer le package python avec
pip installer dronekit==2.9.1
Il peut s'agir de la version la plus récente ou non, mais c'est celle que j'ai utilisée pour que je puisse aider au dépannage.
Pour vérifier si installé, nous pouvons faire un
gel de pépins | kit de drone grep
Maintenant, nous sommes enfin prêts à créer notre premier script python
5. takeoff_and_land.py
ATTENTION! Je suggère d'établir une compréhension de base de python, afin que vous puissiez apprendre et comprendre le code. Si vous voulez écrire le programme vous-même, suivez cette vidéo.
## Commençons par créer un répertoire pour stocker ce code
cd dk ##Si vous voulez le faire vous-même, utilisez vi takeoff_and_land.py ##pour créer un programme
Sinon, vous pouvez jeter un œil ou utiliser le fichier joint et utiliser un protocole de transfert de fichiers. Nous pouvons essayer ce programme par la suite. D'abord pour préciser qu'il s'agit d'un fichier python que nous devons utiliser
chmod +x takeoff_and_land.py
Ensuite, pour essayer d'utiliser le code suivant pour exécuter
python takeoff_and_land.py --connect 127.0.0.1:14550
La première fois, ça n'a pas marché pour moi non plus. S'il y a un délai d'expiration du lien, ne vous inquiétez pas, vous pouvez faire quelque chose. Ouvrez une autre invite et ssh. Vous pouvez essayer d'installer quelque chose appelé mavproxy et essayer de l'exécuter. Après cela, vous pouvez exécuter les deux simultanément. Cela devrait aider à connecter le drone. Une fois cela fait, j'ai un défi pour vous. Essayez de comprendre ce que fait l'autre programme (set_velocity_body.py) et comment le faire fonctionner. Si vous le faites, bon travail.
6. En avant !
Nous pouvons maintenant utiliser ces connaissances pour rendre notre drone à commande vocale. Le contrôle de drone Alexa utilise beaucoup de ces fonctionnalités et plus encore. Bonne chance et en avant !
Étape 5: Utilisation d'Amazon Alexa et d'Amazon Web Services pour intégrer le contrôle vocal
Cette étape est l'une des moins documentées. Cela signifie que ce sera le plus difficile à dépanner. Le faire fonctionner m'a pris environ un mois, peut-être plus. La chose la plus importante ici est d'être patient. Cette fonctionnalité, si elle est mise en œuvre dans la vraie vie, peut changer la vie. Vous pouvez simplement dire à Alexa de faire vos courses pour vous au lieu d'y aller vous-même. Imagine ça! Alors sans plus tarder, allons-y !
1. Enregistrement du Raspberry Pi en tant que chose sur AWS IoT
Pour utiliser l'IoT (Internet des objets), eh bien, nous avons besoin d'une chose. Nous devons donc nous connecter à la console AWS pour utiliser AWS IoT en premier. Ensuite, accédez à IoT Core. Une fois là-bas, vous devez cliquer sur Gérer, puis créer un élément. Après avoir ajouté un nom, pour la connexion, nous avons besoin d'un certificat. Je recommanderais de cliquer sur la certification en un clic. Ensuite, après avoir vu l'écran du certificat, assurez-vous de télécharger chaque clé, y compris l'autorité de certification racine. Ensuite, vous pouvez aller terminer la création de la chose. Ensuite, nous devons créer une politique. Retournez à l'IoT Core. Cliquez ensuite sur sécurisé et cliquez sur politiques. Ensuite, appuyez sur créer une politique. Vous pouvez ensuite créer un nom et ajouter des ressources. Sous action, tapez iot* et tapez * sous ressource et appuyez sur autoriser l'effet. Ensuite, retournez à votre truc et allez à votre certificat. Une fois ici, cliquez sur les politiques. Vous pouvez alors joindre votre police pour la chose et c'est tout réglé !
2. Configuration du code sur Raspberry Pi et interaction avec l'IoT
Pour cette partie, vous aurez besoin d'un client SFTP (j'ai utilisé WinSCP) pour le transfert de fichiers. Lors de la connexion à notre Raspberry Pi, nous aurons besoin d'avoir les clés de certificat en main. Vous devez transférer les fichiers clés vers le Raspberry Pi. Vous devez également pip installer le AWSIoTPythonSDK sur le Raspberry Pi. Ensuite, allez dans le répertoire dk sur le Raspberry Pi. Vous utilisez le fichier Alexa Drone Control que j'ai donné pour communiquer avec l'IoT. Pour utiliser ce fichier, j'ai utilisé un script Shell pour le démarrage. Je vais montrer le code ci-dessous car je ne peux pas télécharger le fichier pour une raison quelconque. Si le programme ne récupère pas les messages d'AWS IoT lors des tests, ne vous inquiétez pas ! Cela pourrait être de ma faute car le fichier de contrôle Alexa Drone peut ne pas convenir à votre chose. Donc, pour y remédier, revenez à AWS IoT et appuyez sur Apprendre dans le panneau de gauche. Suivez les instructions et vous devrez peut-être redémarrer. Désolé pour ça. Une fois que votre IoT commence à fonctionner avec le programme sur le RasPi, vous pouvez intégrer le code du dronekit à partir du fichier Alexa Drone Control que j'ai donné. Après cela, utilisez le script Shell que j'ai donné avec vos certificats et le point de terminaison de l'API Rest de l'IoT.
# stop script on errorset -e # Vérifiez si le fichier CA racine existe, téléchargez sinon si [! -f./root-CA.crt]; puis printf "\nTéléchargement du certificat AWS IoT Root CA depuis AWS…\n" curl https://www.amazontrust.com/repository/AmazonRoot…> > root-CA.crt fi # installer AWS Device SDK pour Python s'il n'est pas déjà installé si [! -d./aws-iot-device-sdk-python]; puis printf "\nInstalling AWS SDK…\n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi
# exécuter l'exemple d'application pub/sub à l'aide des certificats téléchargés dans le package
printf "\nExécution d'un exemple d'application pub/sub…\n" python dk/AlexaDroneControl.py --connect 127.0.0.1:14550 -e "Votre ARN IoT" -r root-CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key
Cela ne fonctionnera pas pour vous tous car les noms sont différents. Au lieu des clés que j'ai utilisées, remplacez-les par vos noms de clés lorsque vous transférez le fichier. Assurez-vous de quitter dk avant de transférer le fichier ! Cela devrait être tout ce que vous avez à faire pour le moment.
3. Construire votre compétence Alexa
Cette étape semble beaucoup plus difficile qu'elle ne l'est en réalité. Tout d'abord, nous devons nous connecter à la console Alexa Developer. Ensuite, appuyez simplement sur créer une compétence. Lorsqu'il vous demande de choisir un modèle pour votre compétence, appuyez simplement sur personnalisé. Lorsqu'il vous demande de choisir une méthode, appuyez sur la vôtre. Vous pouvez le nommer comme vous voulez. Aucun modèle n'est requis, alors choisissez de partir de zéro. Ensuite, après avoir créé votre compétence, vous devriez arriver sur l'écran du générateur de compétences avec une liste de contrôle sur la droite. À partir de là, nous pouvons commencer à développer nos compétences. Le nom d'appel figure en premier sur la liste de contrôle. C'est ce que vous direz à Alexa d'invoquer votre compétence. Pour moi, j'ai juste mis mon nom d'invocation comme drone. Nous pouvons maintenant passer à nos intentions, nos énoncés et nos créneaux. Ici, vous pouvez effectuer des commandes pour le drone telles que monter de 1 mètre ou aller à droite ou en bas. Le mien ne fonctionne vraiment qu'avec un mètre pour l'instant. Vous pouvez cliquer sur l'éditeur JSON en bas du panneau de gauche. Vous pouvez ensuite y coller le code suivant.
{ "interactionModel": { "languageModel": { "invocationName": "drone", "intents": [{ "name": "AMAZON. FallbackIntent", "samples": }, { "name": "AMAZON. CancelIntent", "samples": }, { "name": "AMAZON. HelpIntent", "samples": }, { "name": "AMAZON. StopIntent", "samples": }, { "name": "AMAZON. NavigateHomeIntent", "samples": }, { "name": "GoIntent", "slots": [{ "name": "Direction", "type": "Direction" }, { "nom": "Distance", "type": "AMAZON. NUMBER" }, { "nom": "Unité", "type": "Unité" }], "échantillons": ["Aller {Direction} {Distance} {Unité}", "Aller {Distance} {Unité} {Direction}"] }, { "name": "CommandIntent", "slots": [{ "name": "Task", "type": "Task" }], "samples": ["Commander le drone à {Task}"] }, { "name": "TurnIntent", "slots": [{ "name": "Direction", "type": " Direction" }, { "name": "Rotation", "type": "AMAZON. NUMBER" }], "samples": ["Tourner {Direction} {Rotation} degrés"] }], "types": [{ "name": "Direction", "values": [{ "name": { "value": "Straight", "synonyms": ["Forw ards", "Forward"] } }, { "name": { "value": "Back", "synonyms": ["Backwards", "Backward"] } }, { "name": { "value": "Droite" } }, { "nom": { "valeur": "Gauche" } }, { "nom": { "valeur": "Bas" } }, { "nom": { "valeur": "Haut " } }] }, { "nom": "Unité", "valeurs": [{ "nom": { "valeur": "Mètres", "synonymes": ["Mètre"] } }, { "nom": { "value": "Yards", "synonyms": ["Yard"] } }, { "name": { "value": "Pieds", "synonyms": ["Foot"] } }] }, { "name": "Task", "values": [{ "name": { "value": "Land" } }, { "name": { "value": "Hold" } }, { "name": { "value": "Stay" } }, { "name": { "value": "RTL", "synonyms": ["Return to Launch"] } }] }] } } }
Après avoir collé le code dans l'éditeur JSON, vous pouvez cliquer sur la troisième étape de la liste de contrôle et il construira votre modèle d'interaction pour vous. Avec cette étape, vous aurez terminé pour le moment. Vous pouvez laisser l'emplacement de point de terminaison vide pour l'instant !
Étape 4: Construire votre fonction Lambda
Maintenant, cette étape est celle que vous allez devoir découvrir par vous-même. Je vais vous expliquer comment le connecter à la Skill Alexa, mais vous devrez le coder vous-même. Alors, allez d'abord à la console de gestion AWS. Ensuite, allez à Lambda. Vous pouvez ensuite créer une fonction en la nommant comme vous le souhaitez. Assurez-vous de le créer à partir de zéro et de créer le runtime dans le langage de programmation de votre choix. J'ai utilisé Node.js. Pour ajouter la compétence Alexa, ajoutez un déclencheur et sélectionnez Alexa Skills Kit (ASK). Copiez votre ARN Lambda et revenez à la compétence Alexa. Maintenant, allez au point de terminaison. Vous pouvez coller votre ARN, enregistrer et créer un nouveau modèle. Ensuite, prenez l'identifiant de compétence Alexa et collez-le dans la section déclencheur où il vous demande sur le Lambda. Ensuite, faites défiler vers le bas sur le Lambda et trouvez les paramètres de base et faites le délai d'attente de 10 secondes. Maintenant, c'est à vous de comprendre le code. Pour des conseils, vous pouvez les sites Web ci-dessous.
github.com/aws/aws-iot-device-sdk-js
www.hackster.io/veggiebenz/voice-controlle…
et vous pouvez utiliser le fichier que j'ai joint, mais il est incomplet et ne fonctionnera pas.
/** * Contrôlez votre quadcopter APM / Pixhawk avec votre voix, en utilisant Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = require('aws-iot-device-sdk'); var config = require("./config"); var nom_appareil = "EchoDroneControl"; // ce périphérique est vraiment le contrôleur 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 = null; // Router la requête entrante en fonction du type (LaunchRequest, IntentRequest, etc.) Le corps JSON de la requête est fourni dans le paramètre d'événement. exports.handler = function (événement, contexte) { try { console.log("event.session.application.applicationId=" + event.session.application.applicationId); ctx = contexte; if (event.session.application.applicationId !== app_id) { ctx.fail("Invalid Application ID"); } client = awsIot.device(mqtt_config); client.on("connect", function(){ console.log("Connected to AWS IoT"); // callback(); });
si (événement.session.nouveau) {
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 dans le gestionnaire: " + e); ctx.fail("Exception: " + e); } }; /** * Appelé au démarrage de la session. */ function onSessionStarted(sessionStartedRequest, session) { console.log("onSessionStarted requestId=" + sessionStartedRequest.requestId + ", sessionId=" + session.sessionId); }
/**
* Appelé lorsque l'utilisateur lance la skill sans spécifier ce qu'il veut. */ function onLaunch(launchRequest, session, callback) { console.log("onLaunch requestId=" + launchRequest.requestId + ", sessionId=" + session.sessionId); // Envoi au lancement de votre skill. getWelcomeResponse (rappel); } /** * Appelé lorsque l'utilisateur spécifie une intention pour cette compétence. */ function onIntent(intentRequest, session) { //, callback) { console.log("onIntent requestId=" + intentRequest.requestId + ", sessionId=" + session.sessionId); var intention = intentRequest.intent, intentName = intentRequest.intent.name; console.log("REQUEST to string =" + JSON.stringify(intentRequest)); var rappel = null; // Envoi aux gestionnaires d'intention de votre compétence if ("GoIntent" === intentName) { doGoIntent(intent, session); } else if ("CommandIntent" === intentName) { doCommandIntent(intent, session); } else if ("TurnIntent" === intentName) { doTurnIntent(intent, session); } else if ("HelpIntent" === intentName) { getWelcomeResponse(); } else { throw "Intention invalide"; } } /** * Appelé lorsque l'utilisateur termine la session. * N'est pas appelé lorsque la compétence renvoie shouldEndSession=true. */ function onSessionEnded(sessionEndedRequest, session) { console.log("onSessionEnded requestId=" + sessionEndedRequest.requestId + ", sessionId=" + session.sessionId); // Ajoutez la logique de nettoyage ici } // --------------- Fonctions qui contrôlent le comportement de la compétence -------------------- --- function getWelcomeResponse() { // Si nous voulions initialiser la session pour avoir des attributs, nous pourrions les ajouter ici. var sessionAttributes = {}; var cardTitle = "Bienvenue"; var speechOutput = "Bienvenue dans le DRONE CONTROL. "; // A FAIRE: le drone est-il en ligne ou hors ligne ? Si en ligne, est-ce ARMÉ ? var repromptText = "Drone prêt pour la commande."; var shouldEndSession = false; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } /** * gère l'intention GO. */ function doGoIntent(intent, session, callback) { // var cardTitle = "Drone GO…"; var texterpromp = ""; 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 = ["en avant", "en avant", "en arrière", "en arrière", "à droite", "à gauche", "en haut", "en bas", "tout droit", "en avant", "tout droit devant"]; var validUnits = ["foot", "feet", "meter", "meters", "yard", "yards"]; rempptText = "Dites-moi jusqu'où aller et dans quelle direction. "; var échec = faux; // valider les entrées if (!(parseInt(distance) >= 1)) { speechOutput = "Je n'ai pas compris la distance que vous voulez que je parcoure. "; échec = vrai; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf(direction) == -1) { speechOutput = "Je n'ai pas compris la direction dans laquelle vous voulez que je voyage. "; échec = vrai; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf(unit) == -1) { speechOutput = "Je n'ai pas compris l'unité que vous voulez que je voyage. "; échec = vrai; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } if (!fail) { var cardTitle = "Drone allant " + direction + " " + distance + " " + unité; SpeechOutput = "Aller " + direction + " " + distance + " " + unité; mqttPublish(intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); } }
function doCommandIntent(intent, session, callback) {
// var cardTitle = "Drone COMMANDE…"; var Texte de rappel = null; var sessionAttributes = {}; var shouldEndSession = false; var SpeechOutput = ""; remptText = "Dites-moi quelle est la commande pour le drone. "; 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 = "Je n'ai pas compris la commande. "; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } else { var cardTitle = "Exécution de la commande Drone " + tâche; speechOutput = "Exécution de la commande " + tâche; mqttPublish(intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); } }
function doTurnIntent(intent, session, callback) {
// var cardTitle = "Drone Turn…"; var Texte de rappel = null; var sessionAttributes = {}; var shouldEndSession = false; var SpeechOutput = ""; remptText = "Dites-moi comment vous voulez faire tourner le drone. "; var direction = intent.slots. Direction.value; var validDirections = ["right", "left", "around"]; if (validDirections.indexOf(direction) == -1) { speechOutput = "Je ne pouvais pas comprendre la direction du virage. "; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession))); } else { var cardTitle = "Drone tournant " + direction; SpeechOutput = "Tourner" + direction; mqttPublish(intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); } }
fonction 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.on("close", (function () { console.log("MQTT CLIENT CLOSE - pense que c'est fait, avec succès. "); ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, speechOutput, remptText, shouldEndSession))); })); client.on("erreur", (fonction (err, accordé) { console.log("MQTT CLIENT ERROR!! " + err); })); }
// --------------- Aides qui construisent toutes les réponses -----------------------
function buildSpeechletResponse(title, output, repromptText, shouldEndSession) { return { outputSpeech: { type: "PlainText", text: output }, card: { type: "Simple", title: title, content: output }, rempt: { outputSpeech: { type: "PlainText", texte: repromptText } }, shouldEndSession: shouldEndSession } } fonction buildResponse(sessionAttributes, speechletResponse) { return { version: "1.0", sessionAttributes: sessionAttributes, réponse: speechletResponse } }
Conseillé:
Lanceur de fusée à commande vocale basé sur Alexa : 9 étapes (avec photos)
Lance-roquettes à commande vocale basé sur Alexa : à l'approche de la saison hivernale; vient cette période de l'année où la fête des lumières est célébrée. Oui, nous parlons de Diwali qui est une véritable fête indienne célébrée à travers le monde. Cette année, Diwali est déjà terminé, et voir du monde
Automatisation bavarde -- Audio d'Arduino -- Automatisation à commande vocale -- Module Bluetooth HC-05 : 9 étapes (avec photos)
Automatisation bavarde || Audio d'Arduino || Automatisation à commande vocale || Module Bluetooth HC - 05 :……………………………. Veuillez vous abonner à ma chaîne YouTube pour plus de vidéos…. …. Dans cette vidéo, nous avons construit une automatisation parlante.. Lorsque vous enverrez une commande vocale via un mobile, il allumera les appareils domestiques et enverra des commentaires i
Commutateur de relais IOT à commande vocale basé sur Arduino (prise en charge par Google Home et Alexa) : 11 étapes
Commutateur de relais IOT à commande vocale basé sur Arduino (prise en charge par Google Home et Alexa) : ce projet décrit comment créer un commutateur de relais IOT à commande vocale basé sur Arduino. Il s'agit d'un relais que vous pouvez activer et désactiver à distance à l'aide d'une application pour iOS et Android, ainsi que le lier à IFTTT et le contrôler avec votre voix à l'aide de Goog
Commutateur à commande vocale utilisant Alexa et Arduino : 10 étapes (avec photos)
Interrupteur à commande vocale utilisant Alexa et Arduino : L'objectif principal de ce projet est d'utiliser un capteur de température pour contrôler l'interrupteur (relais) pour allumer ou éteindre l'appareil. Liste des matériaux Module relais 12V == > 4,2 $ Arduino uno == > 8 $ Capteur de température DHT11 == > 3 $ ESP8266 Module
Commande vocale Alexa DIY : 7 étapes (avec photos)
Alexa Voice Control DIY : Bonjour, c'est mon premier instructable. Ici, je vais montrer comment faire des commutateurs de commande vocale pour Amazon Alexa qui peut même fonctionner avec Google Assistant. Votez pour moi, s'il vous plaît