[PYTHON] [AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part1

introduction

Cet article Système d'avis d'évacuation à l'aide d'un drone Ceci est le deuxième chapitre de. Veuillez vous y référer pour le contexte de production.

De plus, le contenu de ce chapitre est basé sur le contenu suivant, donc si vous ne l'avez pas encore lu, veuillez d'abord le lire. Chapitre 1 [AWS / Tello] Création d'un système d'exploitation de drones sur le cloud

Aperçu

Exploitons le drone Tello par la voix en utilisant Alexa. AWS est utilisé comme infrastructure. Voyons d'abord le formulaire rempli dans la vidéo. IMAGE ALT TEXT HERE

Configuration du système

system.png

Choses à faire

J'ai confirmé la communication entre IoT Core et Tello jusqu'à la dernière fois, donc cette fois Hébergez votre point de terminaison de compétence Alexa sur lambda et publiez-le sur IoT Core. Première partie. Développement des compétences / coopération avec lambda Partie 2. Communication de lambda à IoT Core

Développement de compétence

Création de compétences

Connectez-vous à la console développeur alexa (ADC) et créez une compétence personnalisée. skillselect1.png backendforalexa.png

Si vous sélectionnez «Approvisionnement défini par l'utilisateur» comme backend de la compétence, vous devez préparer votre propre fonction lambda. Si vous sélectionnez "Alexa-Hosted", vous pouvez utiliser l'éditeur de code sur l'ADC et sentir qu'il est facile pour les débutants de s'impliquer. Puisqu'il communique avec IoT Core, compte tenu de l'évolutivité future, nous utiliserons ici l'ancienne méthode de préparation d'une fonction lambda par nous-mêmes. C'est pourquoi je vais préparer un nouveau lambda. Notez l'ARN du lambda et définissez-le sur la région par défaut sur le point de terminaison de compétence. endpointforalexa.png

Glossaire des compétences

Puisqu'il est gentil, je vais reconfirmer les termes de base de la compétence. J'y reviendrai en détail plus tard.

__Call name __: Word pour démarrer un dialogue (session) __Intent __: Intention de dialogue (le développeur peut définir librement) __ Intention intégrée __: Intention intégrée par défaut (annulation, arrêt, aide, etc.) __Sample Speaking __: Un slogan pour appeler une intention spécifique dans une session __Slot __: Quelque chose comme une variable contenue dans un exemple de discours __Fente intégrée __: Machines à sous déjà préparées (il y a des numéros, des noms d'installations, des noms d'actrice ... incroyable) __Custom Slot __: Slots que les développeurs peuvent définir librement

À propos, les emplacements sont merveilleux car vous pouvez définir de manière flexible des synonymes et des spécifications d'identification.

Détails des compétences

Détails des compétences définies dans ce système de contrôle de drone. (Pour votre référence)

__Nom de l'appel __: "Contrôleur" __Intent __: Contrôleur / Terrain Intention du contrôleur lorsque vous souhaitez déplacer le drone, intention d'atterrir lorsque vous souhaitez atterrir (L'intention de retournement semble intéressante) __ Exemple de discours __: Pour l'intention du contrôleur ContIntent.png

__Fente intégrée __: num (nombre) __ Emplacement personnalisé __: direction slot_direc.png

En d'autres termes, l'intention du contrôleur nécessite deux éléments d'information, la direction du déplacement et la distance. C'est une préférence, mais vous devriez trouver un moyen d'écouter la distance lorsque seule la direction est entrée par la voix avec la compétence réelle. Il semble que le modèle de dialogue ici puisse être défini par json, je le posterai donc en annexe.

Back end

Jouez avec le lambda que vous avez créé précédemment. Il est certainement préférable d'utiliser "Alexa Skills Kit SDK" ici. Vous pouvez le faire sans l'utiliser, mais l'imbrication de json dans le paramètre de requête est profonde et le traitement semble gênant. Le langage sera Python. Comme il y a beaucoup de gens qui utilisent Nodejs et peu de gens qui utilisent Python, j'ai osé utiliser Python ici.

Alexa Skills Kit SDK for Python

Tout d'abord, importez ask_sdk_core avec lambda.

$ import ask_sdk_core

Cependant, si elle est laissée telle quelle, la bibliothèque externe ne peut pas être lue, ajoutons donc ask_sdk_core en tant que couche.

Vous pouvez également installer localement dans le projet, compresser l'ensemble du projet et le télécharger vers lambda. Le lien ci-dessous résume la méthode et l'écosystème de développement local de lambda, alors jetez un œil si vous êtes intéressé. [AWS / Lambda] Méthode de chargement de la bibliothèque externe Python

Puisque ask_sdk_core est une bibliothèque PurePython, tout environnement pour créer un fichier zip pour la couche devrait être correct. Cela a été fait sur MacOS. (Exemple de python3.7)

$ mkdir -p build/python/lib/python3.7/site-packages
$ pip3 install ask_sdk_core -t build/python/lib/python3.7/site-packages/
$ cd build
$ zip -r ask_sdk.zip .

Ajoutez le fichier ask_sdk.zip généré à la couche et adaptez la couche dans le lambda pour charger la bibliothèque. createlayer.png

layer.png

paramètres de déclenchement lambda

Bien sûr, ce déclencheur lambda est Alexa Skill Kit et l'ID de compétence est l'ID de la compétence que vous avez créée précédemment. trigger.png

Résumé

Le modèle d'interaction de la compétence d'Alexa et du lambda a été lié. Ensuite, nous développerons du code lambda et lierons IoT Core.

Puisqu'il est devenu plus long, je vais passer à la partie 2. Chapitre 3 [AWS / Tello] J'ai essayé de faire fonctionner le drone avec la voix Part2

appendice

Je vais mettre le modèle de dialogue dans json. Si vous avez une nouvelle intention, veuillez la publier sur GitHub: priez: https://github.com/shoda888/tello_ask_model

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "manette",
            "intents": [
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "Controller",
                    "slots": [
                        {
                            "name": "num",
                            "type": "AMAZON.NUMBER"
                        },
                        {
                            "name": "direction",
                            "type": "direction"
                        }
                    ],
                    "samples": [
                        "{direction} {num}",
                        " {num}centimètre{direction}Aller à",
                        "{direction}À{num}centimètre",
                        "{direction}À{num}Déplacez-vous d'un centimètre"
                    ]
                },
                {
                    "name": "AMAZON.NavigateHomeIntent",
                    "samples": []
                },
                {
                    "name": "Land",
                    "slots": [],
                    "samples": [
                        "atterrissage",
                        "Atterrissage",
                        "terre"
                    ]
                }
            ],
            "types": [
                {
                    "name": "direction",
                    "values": [
                        {
                            "id": "back",
                            "name": {
                                "value": "Derrière",
                                "synonyms": [
                                    "retour",
                                    "Arrière"
                                ]
                            }
                        },
                        {
                            "id": "forward",
                            "name": {
                                "value": "Avant",
                                "synonyms": [
                                    "Avant",
                                    "Vers l'avant"
                                ]
                            }
                        },
                        {
                            "id": "down",
                            "name": {
                                "value": "fait",
                                "synonyms": [
                                    "en dessous de",
                                    "Descente",
                                    "Vers le bas"
                                ]
                            }
                        },
                        {
                            "id": "up",
                            "name": {
                                "value": "haut",
                                "synonyms": [
                                    "Vers le haut",
                                    "Vers le haut",
                                    "Monter"
                                ]
                            }
                        },
                        {
                            "id": "left",
                            "name": {
                                "value": "Hidari",
                                "synonyms": [
                                    "la gauche"
                                ]
                            }
                        },
                        {
                            "id": "right",
                            "name": {
                                "value": "Migi",
                                "synonyms": [
                                    "droite"
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
}

Recommended Posts

[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part2
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part1
J'ai essayé d'exécuter la partie DNN d'OpenPose avec le processeur Chainer
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé un petit vol en formation de drone Tello avec ESP32: Vol en formation de drone DJI Tello
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de connecter AWS Lambda à d'autres services
J'ai essayé de jouer avec la calculatrice avec tkinter
[Introduction à AWS] J'ai essayé de porter une application de conversation et de jouer avec text2speech @ AWS ♪
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai fait une analyse émotionnelle d'Amazon Comprehend avec l'AWS CLI.
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
[MQTT] J'ai essayé de parler avec un appareil utilisant AWS IoT Core et Soracom Beam.
J'ai essayé AWS CDK!
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé AWS Iot
[Introduction à AWS] J'ai essayé de jouer avec la conversion voix-texte ♪
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de frapper l'API avec le client python d'echonest
Je voulais utiliser la feuille de calcul Google avec AWS lambda, alors je l'ai essayé [Partie 2]
J'ai essayé de visualiser la consommation électrique de ma maison avec Nature Remo E lite
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de notifier les informations de retard de train avec LINE Notify
J'ai essayé de sauvegarder l'historique des demandes d'API DRF avec django-request
J'ai essayé de lancer le cluster ipython au minimum sur AWS
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai essayé la bibliothèque changefinder!
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé d'utiliser AWS Chalice
J'ai essayé de savoir comment rationaliser le flux de travail avec Excel × Python, mon résumé d'article ★
J'ai essayé de déverrouiller l'entrée 2 lock sésame d'une simple pression sur le bouton AWS IoT
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé le déploiement autonome de play avec fabric [opération AWS avec boto] [déploiement de lecture]
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé la validation croisée basée sur le résultat de la recherche de grille avec scikit-learn
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai étudié avec Kaggle Start Book basé sur kaggle [Partie 1]
Lorsque j'exécute le fichier exe avec pyinstaller, mon PC se bloque.
J'ai essayé de démarrer avec Bitcoin Systre le week-end
J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 4: Automatisez la configuration du FAI avec PyEZ et JSNAPy
J'ai essayé d'envoyer du courrier depuis le serveur Sakura avec flask-mail
J'ai écrit le fonctionnement de base de Pandas dans Jupyter Lab (partie 1)
J'étais intéressé par les diagrammes alors j'ai essayé de l'envelopper avec un flacon
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
Je veux vérifier la position de mon visage avec OpenCV!