Définition du protocole de communication Drone-PC

La communication est basée sur le protocole UDP.
La communication est de type ASCII, chaque envoi se termine par le caractère LF (\n).

Toutes les commandes commencent par le caractère @.La majorité des commandes sont dans le sens pc vers drone.

Toutes les informations GPS commencent par le caractère $, conformément au protocole NMEA.

Tous les messages d'informations d'état (hors GPS) commencent par le caractère #. La majorité des messages sont dans le sens drone vers pc.

Toutes les transmissions (commandes, messages et infos GPS) sont validées par un checksum, calculé de la même manière que pour le protocole NMEA, et envoyé entre la fin de la transmission et le caractère LF, précédé du caractère *, qui ne doit donc jamais être présent dans la transmission.

Le pc, une fois la connexion wifi établie, s'identifie en envoyant la commande HELO :

@HELO Nom_du_logiciel_pc version

Les informations sur le logiciel permettent une identification des transmissions reconnues par ce dernier sur le drone. Cela sera utile en cas de mis à jour ajoutant, modifiant, ou supprimant une transmission. En effet le drone pourra s'adapter en conséquence.

En retour, le drone renvoi le message WELCOME :

#WELCOME nom_du_drone version_embarque

Cela permet au pc de vérifier l'existence du drone sur le réseau.

Dès que le message WELCOME est envoyé, le drone envoi les données GPS si elles sont disponibles.

Les autres données sont envoyées à intervalle régulier, configurable par la commande SENDDLY.

La connexion du pc sur le drone se termine normalement par la commande QUIT, permettant d'indiqué au drone que le pc s'est déconnecté, et donc de se poser le cas échéant.

De plus, si aucune commande n'est envoyée au bout d'un certain délai, le drone se pose automatiquement.
S'il se trouve que le client n’avait aucune commande à envoyer pendant ce délai, il doit au moins envoyer la commande KEEPALIVE au drone jusqu'à ce qu’il obtienne la réponse associé pour indiquer qu'il est toujours présent.

Liste des commandes :

HELO : Présentation et identification du client.

TAKEOFF altitude : Décollage du drone et stabilisation à l'altitude indiqué. Met en marche les moteurs.

LAND : Atterrissage. Les moteurs sont coupés une fois le drone à terre.

HEIGHT hauteur_de_vol : ordonne au drone d'aller à la hauteur indiqué, en décimètre par rapport au sol.

KEEPALIVE : Empêche la procédure de pose automatique lorsque plus aucune commande n'est reçue passé le délai maximum.

Ce délai permet la détection de la perte de la connexion par le drone. Autrement dit, le client doit envoyer cette commande si l'envoi de sa précédente commande date de plus de ce délai. Pour être plus sûr, il est conseillé d'introduire une marge de sécurité, c'est à dire d'envoyer cette commande un peu avant l'expiration de ce délai.
Le drone accuse réception de cette commande par le message KEEPALIVEOK. Si le client ne reçoit pas cet accusé, il doit renvoyer la commande afin de s'assurer que le drone ne se mettra pas en défaillance.

SENDDLY délai : Configure le délai d’envoi en millisecondes des informations périodiques d’état du drone.

QUIT : Indique au drone que le client s'est déconnecté. Ce dernier se pose automatiquement le cas échéant.

Liste des messages :

HEIGHT hauteur_de_vol : indique la hauteur de vol actuelle, en décimètre par rapport au sol.

BATTERY batterry_level : Indique le niveau de batterie en %. Envoyé à chaque changement de la valeur.

KEEPALIVEOK : Accuse réception de la commande KEEPALIVE.

IMU : Données provenant de l'imu. Format à définir.