Piloter un drone en Swift
Et soyons swift as the wind… Ça se dit ? Peu importe, car Swift ici est le dernier langage de programmation d’Apple. Oui, je vous propose de vous faire découvrir une application particulière du code : le pilotage de drones. Ou d’un autre point de vue : comment faire évoluer un drone en l’ayant programmé.
La programmation de drones est devenue à la portée de tous depuis mars dernier avec la mise à jour de l’app Swift Playground sur iPad. Je vous en avais parlé en juin, mais c’est avec mon premier drone que j’ai enfin eu l’occasion de m’y essayer et c’est réellement très amusant. Je veux donc vous présenter ici un autre aspect de la programmation, la possibilité de prendre la main sur des objets réels.
Programmer un drone
Depuis l’émergence de cette notion de drones, certains de ces appareils embarquent un vrai ordinateur à leur bord. Dans le cas des appareils de la société Parrot, c’est un système basé sur un noyau Linux qui tourne dessus. Il est donc tout à fait possible de communiquer avec ces drones et donc de programmer des actions. Pour cela, il faut que le constructeur propose une interface de communication. Parrot le fait et propose un portail aux développeurs. Mais ces interfaces sont compliquées et réservées aux développeurs chevronnés.
Ce qui est disponible sur l’app Swift Playground est évidemment plus simple et plus accessible.
Swift Playground
Si vous ne connaissez pas Swift Playground, je vous invite à consulter mon article présentant cette app. Depuis la mise à jour de juin dernier, Swift Playground permet de programmer certains drones Parrot en Swift. Pour ce faire il faut ajouter un Playground dédié. C’est dans le groupe Accessoires que vous trouverez les Playgrounds Parrot Education et Modèle de Parrot.
Parrot Education est le Playground qui vous enseignera comment programmer le drone. Modèle de Parrot est un Playground dans lequel vous pourrez écrire vos différents programmes libres. Et oui, le nom est bizarre du fait d’une traduction directe de Parrot template.
Avec quels drones ?
Évidemment, pour programmer un drone, il faut un drone. L’app ne prend en charge que quelques mini-drones. Il s’agit des modèles Rolling Spider, Airborne et Mambo. Je n’ai pas vraiment de conseil à vous donner, pour ma part, j’ai été opportuniste sur le prix. Sachez juste que le Mambo a deux petits accessoires, une pince et un canon et la pince peut être programmée dans l’app.
Il n’y a aucune manipulation à faire, pas de logiciel à installer sur le drone. Ce qui est mis en œuvre, c’est la communication existante avec le drone. Vous pouvez donc essayer la programmation de drone dès l’ouverture de la boite (et la recharge de la batterie).
Apprendre à programmer le drone
Le Playground Parrot Education vous guidera dans l’utilisation des différentes fonctions mises à votre disposition pour programmer un drone. Vous apprendrez par des exercices simples à le faire décoller et atterrir, changer d’altitude, se déplacer, tourner et même à déclencher les acrobaties (les flips) et les pinces du Mambo.
Faites attention dès ces exercices. Vous ne ferez pas tourner un programme virtuel, ce que vous écrirez dirige un objet réel. Si vous commandez une avance plein gaz de 5 secondes, ne vous étonnez pas que le drone aille dans le mur… Gardez donc toujours un doigt sur le bouton Stop afin d’arrêter le programme et faire se poser le drone.
Les instructions sont assez simples et le principe est d’écrire la séquence attendue du comportement du drone comme le montre le petit programme suivant. Celui-ci permet au drone de décoller, prendre un peu d’altitude, avancer, attendre 2 secondes avant de faire demi-tour, redescendre, revenir à son point de départ et atterrir.
takeOff() move(direction: MoveDirection.up, duration: 1) move(direction: MoveDirection.forward, duration: 1) wait(2) turn(direction: TurnDirection.right, angle: 180) move(direction: MoveDirection.down, duration: 1) move(direction: MoveDirection.forward, duration: 1) land()
Vous pouvez voir que le principe est de donner des ordres séquentiels (décolle, avance…). Il existe une fonction qui permet de faire des mouvements complexes. Celle-ci s’exprime un peu différemment :
takeOff() move(pitch: 20, roll: 30, gaz: 10, yaw: 80, duration: 2) land()
Les valeurs passés aux 4 premiers paramètres sont la fraction (en pour-cent) de la vitesse maximale. Ici, le drone va se déplacer vers l’avant à 20 % de sa vitesse maximale (pitch) tout en se décalant vers la droite à 30 % de sa vitesse maximale (roll), en montant à 10 % (gaz) et en pivotant à 80 % le tout pendant 2 secondes.
Ainsi, le programme suivant illustre d’abord un déplacement séquentiel (le drone avance puis se décale à droite) avant un retour direct (le drone revient à son point de départ en ligne droite, en diagonale par rapport au déplacement précédent).
takeOff() droneSpeed = 50 move(direction MoveDirection.forward, duration: 2) move(direction MoveDirection.right, duration: 2) move(pitch: -50, roll: -50, gaz: 0, yaw: 0, duration: 2) land()
La variable droneSpeed est la variable qui contient la vitesse de déplacement du drone utilisée par la fonction move simple. Je l’ai déclarée pour qu’elle soit la même que lorsque j’utilise la fonction move de la ligne 5. La doc ne donne pas de correspondance avec une vitesse maximale en m/s car je pense qu’elle dépend du modèle.
Bien entendu, un programme ne se limite pas à un enchainement séquentiel d’instructions. Nous pouvons utiliser différentes structures comme les boucles.
takeOff() for i in 1 ... 4 { move(direction: MoveDirection.forward, duration: 2) turn(direction: TurnDirection.right, angle: 90) } land()
Et ainsi, le drone dessinera un carré dans les airs grâce à une boucle for.
La limite du plan de vol
Une fois que vous avez compris les instructions à votre disposition, vous écrirez vos propre programmes dans un Playground Modèle de Parrot. C’est une réelle satisfaction que de voir son drone décoller et exécuter les quelques manœuvres de manière totalement autonome. Puis, l’excitation laisse place à la frustration.
Les mini-drones Parrot n’ont pas de capteurs qui leur permet de savoir où ils sont. Il est donc impossible de leur donner une instruction du type « avance jusqu’à être à 20 cm d’un obstacle ». Les instructions sont absolues et exécutées dans leur intégralité, sans condition. Vous ne pouvez donc écrire des programmes que pour faire évoluer le drone dans un environnement connu sur un trajet connu.
Quand à coté on a le LEGO Mindstorms qui peut aussi être contrôlé par l’app et qui propose des moteurs et des capteurs, c’est un peu frustrant.
Un usage d’intérieur
Chez nous, c’est très petit. Trop pour faire évoluer un drone. Alors, j’ai voulu essayer de dérouler un programme en extérieur. La belle erreur…
À l’extérieur, vous avez un paramètre incontrôlable : le vent. Vous avez pris soin de déterminer l’instruction pour que votre drone se déplace vers l’avant de 5 mètres en intérieur ? Et bim, dehors, le vent dans le dos transforme ce déplacement à 6, 7 ou 8 mètres…
N’oubliez pas qu’avec une télécommande, c’est toujours vous qui contrôler le déplacement d’un drone et que vous vous adaptez en fonction des conditions. Vous compensez le vent en permanence, mais votre programme ne sait pas faire ça. Il déroule le programme de manière bête.
La conséquence est que la programmation de ces mini-drones n’est pas adaptée au vol en extérieur puisqu’il n’est pas possible de s’adapter aux conditions imprévues.
Un peu de contrôle
Les drones ne peuvent pas être autonomes car ils n’ont aucune connaissance de leur environnement, ok. Mais peut-on grouper les instructions pour déclencher des séquences à la demande ? La réponse est un savant oui et non. Oui car parmi les instructions, il est possible de connaitre l’inclinaison de l’iPad (et surtout son changement). Non car c’est tout ce qu’il est possible de faire… L’interface du Playground ne permet par par exemple de programmer des boutons.
En conséquence, on peut au mieux reproduire une fonction de télécommande avec l’iPad et ses accéléromètres.
L’investissement en vaut-il la chandelle ?
Programmer un drone avec Swift Playground est une activité amusante qui permet d’illustrer que le code sert à beaucoup plus que caché dans un ordinateur. Mais l’application pratique est limitée actuellement à la programmation d’une chorégraphie aérienne.
C’est pour cette raison que je ne vous conseille pas la dépense d’un drone et/ou d’un iPad juste pour ça. Autrement, vous pouvez télécharger l’app Swift Playground sur l’App Store et n’oubliez pas en ce qui concerne les drones de découvrir les drones de loisir.
À propos de... Darko Stankovski
iT guy, photographe et papa 3.0, je vous fais partager mon expérience et découvertes dans ces domaines. Vous pouvez me suivre sur les liens ci-dessous.
4 réponses
[…] Swift Playground, je me suis intéressé à certains moustiques… Si vous voulez savoir pourquoi, je vous ai écrit un billet Ça a un peu réveillé mon intérêt et ce livre m’a apporté les réponses à mes […]
[…] de robots. Le Sphero SPRK+ est un des robots pris en charge, tout comme le LEGO Mindstorms ou certains drones Parrot. Mais si nous regardons bien le reportage, pour le Sphero SPRK+, Apple anime cette activité […]
[…] un robot se limite à définir une chorégraphie. C’est une limite de la programmation de minidrones Parrot ou des robots Sphero. La possibilité de réagir est ce qui donne vie à un […]
[…] de robots. Le Sphero SPRK+ est un des robots pris en charge, tout comme le LEGO Mindstorms ou certains drones Parrot. Mais si nous regardons bien le reportage, pour le Sphero SPRK+, Apple anime cette activité […]