[PYTHON] [AWS / Tello] Construction d'un système d'exploitation de drones sur le cloud

introduction

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

Aperçu

Créez un système capable de faire fonctionner le drone Tello sur AWS. Si vous pouvez l'utiliser sur AWS, vous pouvez vous connecter à divers services, alors élargissons vos rêves.

À propos du drone à utiliser

Tello edu développé par la start-up chinoise Ryze Tech est utilisé. Le [SDK] officiel (https://github.com/dji-sdk/Tello-Python) est en cours de développement par Intel et DJI, et la v2 peut être utilisée avec la version edu, et le drone est une unité esclave. Il est recommandé d'acheter la version edu car il est possible de voler en formation. Étant donné que ce SDK est utilisé pour le contrôle des drones, git le clonez à l'avance. Pour les méthodes de vol et de diffusion d'images de base en Python à l'aide de la construction d'environnement et du SDK, consultez le SDK Guide de l'utilisateur Voir 20User% 20Guide.pdf) et un autre article sur Tello.

Commande de vol

Donnez simplement une commande de chaîne à l'argument de la méthode send_command de la classe Tello et il volera. Pour référence, la commande de vol de base est la suivante. En plus de ceux-ci, il existe également des commandes de rotation et des commandes pour dessiner un arc en spécifiant la vitesse, alors vérifiez le cas échéant en fonction de votre utilisation.

Command La description
command Démarrer le mode SDK
takeoff décollage
land atterrissage
emergency Arrêt immédiat du moteur
up x 20~Montée entre 500 cm
down x 20~Descente entre 500 cm
left x 20~Volez vers la gauche entre 500 cm
right x 20~Volez vers la droite entre 500 cm
forward x 20~Avancez entre 500 cm
back x 20~Fly back entre 500 cm

Communication entre Tello <-> PC <-> AWS

En premier lieu, le drone Tello ne prend pas en charge les services de communication mobile tels que la communication 4G, et il est peu probable qu'il soit exploité à distance en fonctionnement réel, mais il sera utile à l'avenir de le contrôler en utilisant des services sur Internet comme déclencheur. C'est considéré. Dans ce système, nous utiliserons AWS en tant que service cloud et essayerons de voler tello depuis le cloud.

Méthode de connexion

Lorsque vous utilisez Tello comme unité de base wifi et que vous vous connectez à un PC via wifi, il n'est pas possible d'utiliser une connexion wifi pour se connecter à AWS. Par conséquent, cette fois, nous avons connecté le PC et le smartphone par fil afin que le PC et AWS puissent communiquer via le tethering du smartphone. À ce stade, la priorité du service de partage de connexion utilisé pour la connexion à Internet doit être supérieure à celle du Wifi. wificonnect.png

Protocole de communication avec drone

Cette fois, la communication MQTT a été adoptée au lieu de la communication HTTP pour la communication entre AWS et le drone. C'est un protocole de message plus léger que la communication HTTP, et j'ai pensé que la communication MQTT conviendrait pour l'envoi de commandes de chaînes de caractères (je voulais aussi essayer MQTT lol). La communication MQTT est effectuée en définissant un canal dans le courtier MQTT et en vous abonnant aux données publiées sur ce canal. Une caractéristique majeure est que la communication plusieurs-à-plusieurs peut être facilement effectuée. (peut être) AWSIoTCore fournit un courtier MQTT, et dans ce système, le drone publie la commande de vol du côté abonnement de la commande de vol et confirme le vol pour le moment. iotcore2tello.png

AWS IoT Core Ensuite, connectez-vous à AWS, ouvrez IoT Core et enregistrez Drone en tant que chose.

droneiot.png

Créez un certificat, attachez une stratégie et activez le certificat. Cet article est extrêmement facile à comprendre pour les procédures détaillées. (URL de référence) J'utiliserai le certificat plus tard, donc je vais certainement le télécharger.

Programme de contrôle Tello

Il semble que le SDK Tello soit compatible avec le système python2, donc je pense que les bibliothèques etc. devraient être adaptées au système 2. (Non vérifié si cela fonctionne avec python3) pip install AWSIoTPythonSDK Et mettez la bibliothèque pour IoT Core à partir de Python. Ce n'est pas grave si vous écrivez le programme de contrôle principal suivant dans le répertoire où se trouvent le certificat et Tello.py (par exemple Single_Tello_Test).

main.py


# -*- coding:utf8 -*-
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
from datetime import datetime
from tello import Tello
import ast
import time
import json
import sys

# For certificate based connection
myMQTTClient = AWSIoTMQTTClient('device001') #Valeur appropriée
myMQTTClient.configureEndpoint('xxxxxxxxxxxx.ap-northeast-1.amazonaws.com', 8883) #Vérifier sur l'écran de gestion
myMQTTClient.configureCredentials('rootCA.pem', 'xxxxx-private.pem.key', 'xxxxx-certificate.pem.crt') #Divers certificats
myMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing
myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz
myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec
myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec
myMQTTClient.connect()

tello = Tello() #Créer une instance Tello
tello.send_command('command') #Démarrer le mode SDK

def customCallback(client, userdata, message):
    payload = message.payload
    print('Received a new message: ')
    print(payload)
    print('from topic: ')
    print(message.topic)
    print('--------------\n\n')
    # command = payload[0]
    dic = ast.literal_eval(payload)
    tello.send_command(dic['message'])

myMQTTClient.subscribe("test/pub", 1, customCallback) # test/Abonnez-vous à la chaîne de pub
while True:
    time.sleep(1)

tester

Oui, je vais le tester. Tout d'abord, exécutez le code Python ci-dessus pour vérifier la connexion avec Tello. Ensuite, ouvrez l'onglet de test sur IoT Core, spécifiez le canal, spécifiez la commande de vol sous forme de chaîne de caractères dans la valeur de «message» et envoyez-la à la rubrique. takeoff.png

Il est facile à comprendre et l'opération est résumée dans la vidéo. https://youtu.be/MKF2P_rrS9U IMAGE ALT TEXT HERE

Résumé

J'ai entré une commande depuis AWS IoT Core et j'ai réussi à piloter Tello. Ensuite, établissons un lien avec un service externe. [AWS / Tello] J'ai essayé de faire fonctionner le drone avec la voix Part1

Recommended Posts

[AWS / Tello] Construction d'un système d'exploitation de drones sur le cloud
Créez un environnement WardPress sur AWS avec Pulumi
Créez un système de synthèse bon marché avec des composants AWS
# 2 Créez un environnement Python avec une instance EC2 d'AWS (ubuntu18.04)
Comment déployer une application Django dans le cloud Alibaba
Créer un robot LINE de retour de perroquet avec AWS Cloud9
C'était une vie que je voulais faire de l'OCR sur AWS Lambda pour localiser les personnages.
Comment créer un environnement Python sur Amazon Linux 2
Comment créer un nouvel environnement virtuel Python sur Ubuntu
[Introduction à AWS] Mémorandum de création d'un serveur Web sur AWS
J'ai essayé de lancer le cluster ipython au minimum sur AWS
J'ai essayé de créer une configuration RAID logicielle SATA qui démarre le système d'exploitation sur Ubuntu Server
[AWS] Que faire lorsque la commande ping provoque un "délai d'expiration"
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part2
Remarque sur la façon de vérifier la connexion au port du serveur de licences
Créez un environnement Selenium sur Amazon Linux 2 dans les plus brefs délais
Créez un classement de jeu sur le cloud Alibaba en utilisant Python et Redis
Créer une application Web de type Flask / Bottle sur AWS Lambda avec Chalice
Est-il facile de synthétiser un médicament sur le marché?
# 3 Créez un environnement Python (Django) avec une instance EC2 (ubuntu18.04) d'AWS part2
Je viens d'écrire un script pour construire Android sur une autre machine
Le moyen le plus simple de créer un environnement d'utilisation Spleeter à l'aide de Windows
Je veux créer un système pour éviter d'oublier de serrer la clé 1
J'ai essayé d'enregistrer une station sur la plateforme IoT "Rimotte"
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part1
Écrivez un script pour calculer la distance avec le système Elasticsearch 5 sans douleur
Une commande pour vérifier facilement la vitesse du réseau sur la console
Comment déployer une application Web sur Alibaba Cloud en tant que pigiste
Comment mettre à jour la version Python de Cloud Shell dans GCP
Création d'un environnement pour exécuter ChainerMN sur une instance de GPU AWS
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Mettez à jour les données en les téléchargeant sur s3 d'aws avec une commande, et supprimez les données utilisées (en chemin)
Démarrez la science des données dans le cloud
Créer un environnement python3 sur CentOS7
Note de travail pour migrer et mettre à jour les scripts de la série Python 2 sur le cloud vers la série 3
Créez une application Django sur Docker et déployez-la sur AWS Fargate
J'ai fait une minuterie de cuisine à afficher sur la barre d'état!
Générer semi-automatiquement une description du package à enregistrer dans PyPI
J'ai écrit un diagramme de configuration du système avec des diagrammes sur Docker
Comment configurer un notebook Jupyter à la destination SSH (AWS EC2)
Version de juin 2017 pour créer un environnement Tensorflow / Keras sur une instance GPU d'AWS
Créez un environnement d'apprentissage pour le «Deep learning from scratch» avec Cloud9 (jupyter miniconda python3)
Comment créer une application à partir du cloud à l'aide du framework Web Django
Construisez Linux sur un environnement Windows. Étapes pour installer Laradock et migrer
Utilisez Cloud Composer pour accéder régulièrement à l'API Youtube afin de créer un pipeline afin de stocker les résultats dans Bigquery