Drone contrôlé par un serveur Web

IntroductionPhoto drone

Avec un ami, on fait beaucoup de ski hors-piste et on a toujours aimé filmer les endroits où on a l'occasion de laisser des belles traces blanches.

Etant développeur et lui data analyst, l'idée nous est venue de construire un prototype de drone qui puisse nous accompagner et qui serait capable de prendre des prises de vues tout seul, grâce à un algorithme de pilotage automatique.

Nous n'avions jamais piloté de drone (même commercial) et il a fallu être minutieux dans le choix des composants (open source, remplaçables facilements, adaptés au projet, dans notre budget qui n'était que de 300 euros).

Fonctionnement

ManetteLes drones classiques fonctionnent avec un emetteur/recepteur radio dont le contrôleur (télécommande de modélisme) dépassait déjà notre budget. Nous avons décidé d'embarquer un Raspberry sur la machine pour remplacer ce récepteur: Le raspberry est commandé en WIFI depuis un téléphone et envoie les commandes au drone, avec la possibilité de passer en mode pilotage automatique grâce à de la reconnaissance d'images via la caméra du Raspberry Pi. Une manette de Xbox360 est connectée au smartphone pour une meilleure ergonomie/précision en pilotage manuel.

Schema électronique

Le Flight Controller (FC) est le cerveau du drone. Il s'agit d'une petite carte électronique présente dans toutes les machines qui permet le pilotage en envoyant le bon courant dans chaque moteur, etc. Il est connecté à différents capteurs (gyro, accéléro, baromètre, GPS, etc) pour permettre une stabilisation ultra précise du drone.

Nous avons choisi le FC Naze32 car il est open source, abordable et utilisé par de nombreux membres de la communauté. La première étape fut d'écrire une librairie (python) permettant au raspberry d'envoyer des commandes compréhensibles par le FC (Multiwii Serial Protocol - MSP).

J'ai ensuite développé une interface Web pour la communication entre le smartphone et le drone. Pour un temps de réponse correct, la communication est faite via des WebSockets. Comme cette interface affiche de nombreuses données de télémétrie mises à jour régulièrement, j'ai utilisé Vue.js pour la partie front. Un autre WebSocket streame la vidéo depuis le raspberry vers le téléphone.

Communication diagram

Ci dessous, à gauche, le rendu de l'interface web de contrôle. A droite, l'analyse des données de vol permise par le firmware de la Naze32.

interfaceBlackbox

Autopilot

Pour le pilotage automatique, nous avons exploré 2 pistes:

Le suivi GPS: le drone compare ses coordonnées avec celles de l'émetteur téléphone et se rapproche de celui-ci. L'implémentation est  plus simple mais la puce GPS du téléphone manque souvent de précision.

La reconnaissance d'images: les images captées par la caméra du raspberry sont analysées par OpenCV qui requête un modèle qui a été entraîné à reconnaitre des skieurs et donne une consigne au drone à chauqe nouvelle image (ex simplifié: sujet trop petit sur l'image -> il faut se rapprocher = augmenter les gaz et incliner le drone vers l'avant). Cette partie est encore en cours de développement et sera détaillée lorsqu'elle sera plus avancée.

openCV