Jakopter est une bibliothèque écrite en C disposant de bindings Lua. Ces bindings permettent d’avoir accès à l’ensemble des fonctionnalités de la bibliothèque.
Contrôle du drone
Dans un but de simplification des interactions avec le drone, des commandes de pilotages simples et ludiques ont été mises en place.
connect()
Cette commande permet d’établir une connexion sur les ports de données (navdata) et de pilotage du drone. Elle initialise ainsi le canal de communication (cf. com_channel) aux navdata (nécessaire pour le contrôle des données de vol). Pour une simulation, on peut fournir l’adresse IP du simulateur en paramètre (ex. « 192.168.10.20 »).
takeoff() land()
Ces 2 commandes, comme leurs noms l’indiquent, permettent d’amorcer la phase de décollage (ou d’atterrissage) d’un drone. Lors du décollage, le drone s’élèvera à une hauteur d’environ 1 mètre et restera en vol stationnaire jusqu’à la réception d’une nouvelle instruction. Lors de l’atterrissage, le drone descendra à environ 30 cm du sol puis stoppera ses moteurs.
Le paramètre p, des commandes suivantes, est une valeur flottante comprise entre 0 et 1. Elle représente la vitesse de manœuvre du drone (0 immobile, 1 vitesse maximum). Ces commandes ont une durée fixe, à la fin de l’exécution de celles-ci le drone se stabilise.
left(p) right(p)
Permettent de faire pivoter le drone, respectivement, à gauche ou à droite.
slide_left(p) slide_right(p)
Permettent de faire glisser le drone, respectivement, à gauche ou à droite.
forward(p) backward(p)
Permettent de faire avancer ou reculer le drone.
up(p) down(p)
Permettent de faire monter ou descendre le drone.
move(left_right,backward_forward,up_down,rotation)
Permet de déplacer le drone en fonction de ses paramètres. Les paramètres de la commande sont des valeurs flottantes comprises entre -1 et 1 représentant une vitesse de déplacement.
- left_right : Gère les déplacements latéraux du drone. Une valeur négative fera déplacer le drone sur la droite, tandis qu’une valeur positive déplacera le drone sur la gauche.
- backward_forward : Déplace le drone en avant ou en arrière, si sa valeur est négative, le drone reculera. Sinon, il avancera.
- up_down : Gère les déplacements verticaux du drone. Une valeur positive fera monter le drone, tandis qu’une valeur négative fera descendre drone.
- rotation : Gère les rotations du drone. Pour faire pivoter le drone sur la gauche, il faut une valeur négative (positive pour une rotation à droite).
À la différence des commandes précédentes, cette commande n’est pas limitée dans le temps, elle s’exécutera donc jusqu’à ce que la connexion avec le drone soit rompue ou jusqu’à l’envoi d’une autre commande (e.g. stay()).
Note : Cette commande étant destinée à un usage plus poussée du drone, il est conseillé d’utiliser move(…) seulement si vous souhaitez réaliser des manœuvres particulières.
stay()
Immobilise le drone en vol.
emergency()
Stoppe tous les moteurs du drone.
Note : N’utilisez cette fonction que si vous perdez le contrôle de votre drone.
Statut du drone
is_flying()
Indique si le drone est en vol.
battery()
Renvoie le niveau de batterie du drone en %.
height()
Renvoie la hauteur du drone en millimètres.
Gestion du flux vidéo du drone
connect_video()
Démarre la réception du flux vidéo du drone, ainsi que son éventuel traitement.
Par défaut, le flux est décodé puis directement affiché dans une nouvelle fenêtre.
stop_video()
Arrête la réception et le traitement du flux vidéo.
Note : Les fonctionnalités assurées par cette fonction sont mises en œuvre automatiquement lors de la fermeture de l’interpréteur Lua via le mécanisme de garbage collection. Il n’est donc pas impératif de l’appeler.
switch_cam(n)
Change la caméra utilisée pour le flux vidéo :
- 0 : caméra horizontale
- 1 : caméra verticale
Note : Cette fonctionnalité n’est disponible que sur ViSP.
set_callback(n)
Change le traitement appliqué à la vidéo:
- 0 : détection de visage
- 1 : détection de QR code
- 2 : détection de blob
Note : Les fonctionnalités d’incrustation ne sont disponibles actuellement que pour SDL2.
draw_icon(chemin, x, y, largeur, hauteur)
Incruste une image sur l’affichage du drone. Retourne l’identifiant de l’image, nécessaire pour la supprimer plus tard.
- chemin : le chemin d’accès dans l’arborescence relativement à l’emplacement de libjakopter.so
- x : la position horizontale de l’image, de la gauche vers la droite
- y : la position verticale de l’image, du haut vers le bas
- largeur : la largeur de l’image désirée (optionnel)
- hauteur : la hauteur de l’image désirée (optionnel)
draw_text(texte, x, y)
Incruste un texte sur l’affichage du drone. Retourne l’identifiant du texte, nécessaire pour le supprimer plus tard.
- texte : le texte que vous voulez écrire
- x : la position horizontale de l’image, de la gauche vers la droite
- y : la position verticale de l’image, du haut vers le bas
draw_remove(id)
Supprime le texte ou l’image qui possède l’identifiant id.
draw_resize(id, largeur, hauteur)
Redimensionne un élément sur l’affichage du drone.
- id : l’identifiant du texte ou de l’image
- largeur : la largeur de l’image désirée
- hauteur : la hauteur de l’image désirée
draw_move(id, x, y)
Déplace un élément sur l’affichage du drone.
- id : l’identifiant du texte ou de l’image
- x : la position horizontale de l’élément, de la gauche vers la droite
- y : la position verticale de l’élément, du haut vers le bas
Passage de données avec com_channel
La lecture/écriture dans un com_channel se fait en passant directement le numéro du canal aux fonctions.
cc_write_int(num_canal, pos, val) cc_write_float(num_canal, pos, val) cc_write_string(num_canal, pos, string)
Écrire la valeur val ou la chaîne string à la position pos (en octets) dans le canal de numéro num_canal.
cc_read_int(num_canal, pos) cc_read_float(num_canal, pos) cc_read_string(num_canal, pos)
Lire une valeur à la position pos (en octets) dans le canal de numéro num_canal. La valeur lue est la valeur retournée par la fonction.
cc_get_timestamp(num_canal)
Obtenir le moment, en millisecondes, de la dernière écriture dans le canal de numéro num_canal. Le timestamp vaut 0 initialement, il est mis à jour à chaque appel d’une fonction write, depuis Lua ou C, sur ce canal.
Module coordonnées
connect_coords()
Commande qui active l’écoute des coordonnées récupérées par le programme vicon (voir la page sur le motion capture).
stop_coords()
Stoppe l’écoute des coordonnées.
Log des informations
log_command()
Affiche la dernière commande envoyé avec le timestamp sous la forme sec.ns.
log_navdata()
Affiche les dernières données de navigation reçues avec le timestamp sous la forme sec.ns.
Les données qui sont affichées dans l’ordre:
- le masque d’état de fonctionnement du drone
- le masque d’état de vol du drone
- le pourcentage de batterie
- l’altitude en millimètres
- les 3 coordonnées en rotation (x= pitch, y=roll, z= yaw)
- les 3 vélocités calculées par le drone (z n’est pas utilisée par l’ardrone2)
log_coords()
Affiche les dernières coordonnées (translations globales en x,y et z(z vers le haut), rotations euleriennes Xyz, quaternion) reçues avec le timestamp sous la forme sec.ns.
Autres
disconnect()
Permet de rompre la connexion avec le drone. Appelée automatiquement à la fin d’un script, ne l’utilisez que dans des cas particuliers.
reinit()
Réinitialise le watchdog de communication du drone.
usleep(t)
Suspend l’exécution de l’interpréteur Lua. Cette fonction est très utile lors de l’exécution de script lua car elle permet de gérer le temps d’exécution de la commande de pilotage move(…).
t est en microsecondes.