Développer un drone autonome intelligent

| Paul Guermonprez | Nicolas Vailliet | Cedric Andreolli |

Jouer avec des petits drones civils, c'est amusant. Les programmer pour en faire des outils, c'est mieux. Intel s'est donc associé à des universités à travers le monde pour développer des drones civils autonomes et intelligents facilement programmables. Voici une recette pour commencer à faire votre drone le plus simplement possible.

Commentez

- Titre : Développer un drone autonome intelligent

- Auteurs : Paul Guermonprez, Nicolas Vailliet, Cedric Andreolli

- Parution : 27 février 2014

- Licence : Copyright ® 2014 Intel. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Autonome ET intelligent ?

- II. Le contrôle des moteurs

- III. Le cas particulier des quadcopters

- IV. Conclusion de la première étape

- V. Annexe

- VI. Remerciements

I - Autonome ET intelligent ?

Pour qu'un drone soit autonome, il faut qu'il emporte avec lui tout le nécessaire pour mesurer, traiter l'information et communiquer en mobilité. Ça n'a l'air de rien, mais ça élimine déjà beaucoup de drones existants.

Vous vous souvenez par exemple des essaims de petits drones ultraprécis ? http://vimeo.com/78549177. Ils sont positionnés dans l'espace par la salle dans laquelle ils évoluent, impossible pour eux de sortir en plein air. Vous connaissez aussi probablement des drones capables de naviguer par GPS. Le GPS c'est bien pratique et très simple à gérer depuis un logiciel puisque c'est numérique. Mais avec une précision de 2,5 m et une latence certaine, ça règle le problème de la navigation globale, pas du pilotage de précision. Autonome certes, mais pas encore très intelligent.

Il faut un matériel dans le drone qui puisse par exemple capter une vidéo et l'analyser en temps réel pour reconnaître des cibles genre QR Codes (facile), des formes ou des mouvements (plus dur). Ou même mesurer des volumes et reconstruire tout un espace en temps réel comme le drone du MIT (Intel Atom inside). https://www.youtube.com/watch?v=kYs215TgI7c.Tout cela demande un processeur puissant ! Plus les indispensables accéléromètres et GPS. Si possible de quoi communiquer par le réseau 3G/4G de temps en temps. Et que le tout soit facile à programmer, léger et avec une bonne autonomie de batterie. Au final, on se retrouve avec ce qui ressemble fortement à un téléphone mobile puissant. Ça tombe bien, chez Intel, ce n'est pas ce qui manque.

Nous avons donc pris un mobile récent sous Android à base de processeur Intel, le ZTE Geek V975 par exemple (136 euros sur AliExpress) ou un San Diego chez Orange. Facile à programmer : c'est Android. Facile d'échanger du code entre PC et mobile, grâce à des bibliothèques comme Intel IPP et OpenCV, donc pas besoin de réinventer la roue. Il a tout le nécessaire en interne : caméra, GPS, accéléromètre, 3G.

II - Le contrôle des moteurs

Une fois le choix de l'ordinateur de bord fait, restait à le connecter aux moteurs. Nous avons sélectionné la Pololu Maestro. http://www.pololu.com/product/1350/. Elle ne coûte que 15 euros, se connecte en USB et même en bluetooth avec un ajout. Cette carte sert à contrôler des moteurs « servo », c'est-à-dire un standard du modélisme. Qu'il s'agisse d'un quadcopter ou d'une voiture télécommandée, il suffit de remplacer la partie radiocommandée par un mobile Android Intel et cette carte Pololu pour le rendre autonome et intelligent. La recette est donc réutilisable à l'infini. Simple, non ?

Avec quelques lignes de code et en utilisant le package USB standard d'Android, on peut contrôler des servos. Donc, contrôler les mouvements de son appareil. Avec quelques lignes de plus, accéder au GPS, prendre des photos et les envoyer par la 3G. Au niveau logiciel, partir sur de l'Android est vraiment évolutif.

Appel à controlTransfer de UsbDeviceConnection :

import android.hardware.usb.UsbDeviceConnection;
// …
private UsbDeviceConnection connection;
// …
connection.controlTransfer(0x40, command, value, channel, null, 0, 5000);

La carte vous permet de déplacer un servo en déterminant la position d'arrivée, vitesse et accélération. De quoi faire des mouvements tout en finesse. L'argument « command » peut donc être une de ces trois valeurs :

- public static final int USB_SET_POSITION = 0x85 ;

- public static final int USB_SET_SPEED = 0x87 ;

- public static final int USB_SET_ACCELERATION = 0x89.

Il ne vous reste qu'à choisir la valeur correspondante et cibler le bon servo avec « channel ». Le code complet et la configuration des accès USB dans le manifest sont détaillés dans l'archive jointe.

III - Le cas particulier des quadcopters

Jusqu'ici tout va bien. Le matériel est plug and play, le code simple et tout est réalisé sous Android. Mais le développement de systèmes embarqués garde quelques spécificités comme le montre le cas du quadcopter. Il y a une différence de matériel à comprendre entre les engins multirotors et d'autres types d'engins.

Si vous pilotez une simple voiture, un servo servira à l'accélération (en fait un ESC - Electronic Speed Control) et un autre à la direction. Mais les multirotors ont besoin d'un équilibrage permanent entre les moteurs pour se maintenir à la position souhaitée. Ça tombe bien, ils sont livrés avec leur carte de stabilisation. Au lieu de connecter directement les 4 moteurs à la carte Pololu et devoir écrire le logiciel de stabilisation sous Android, il est beaucoup plus simple de connecter la Pololu à cette carte de stabilisation et lui laisser gérer les 4 moteurs. Tout ce que vous aurez à gérer sont des commandes comme +/- altitude/vitesse, inclinaison et direction. Exactement ce que vous souhaitez. J'ai donc choisi de tout faire depuis Android sur un processeur puissant, sauf l'équilibrage des moteurs qu'une petite carte dédiée fait très bien pour quelques euros. En tant que développeur, vous n'aurez pas à vous soucier de cette carte. Elle demande certes un étalonnage initial, mais une fois cela fait vous pourrez l'oublier. En tant que chef de projet embarqué, par contre, il est important de savoir qu'elle existe et pourquoi nous avons décidé de l'utiliser.

IV - Conclusion de la première étape

Au final, pour un quadcopter, la chaîne matérielle est : mobile <> micro USB-USB host adapter <> câble usb/miniusb <> carte pololu <> 4 câbles JR <> carte de stabilisation <> câbles JR <> ESC des moteurs du drone.

Finalement, pour des drones plus simples, la chaîne matérielle est : mobile <> micro USB-USB host adapter <> câble usb/miniusb <> carte pololu <> câbles JR <> ESC et servos de l'engin.

En prime, vous pourrez aussi contrôler d'autres servos, par exemple 2 canaux pour orienter en 3D une caméra fixée au quadcopter ou piloter un avion, ajouter le contrôle des volets, du train d'atterrissage, etc. Une carte peut contrôler de 6 à 24 servos, il y a donc de la marge.
Je traite ici du contrôle d'un engin issu du modélisme, mais la même recette s'applique pour tout ce qui utilise des servos. Un bras robotique par exemple.

Nous avons vu ici les choix logiciels et matériels qui constituent ce projet d'informatique embarquée. Dans le prochain article, nous verrons comment développer un logiciel d'analyse d'image pour rendre intelligent ce drone.

V - Annexe

Vous trouverez ci-joint les sources.

VI - Remerciements

Merci à Intel Software Academic Program et à Paul Guermonprez, Nicolas Vailliet et Cédric Andreolli - EMEA Academic Program Manager pour la rédaction de ce tutoriel.

Pour toute question, merci de contacter Paul Germonprez.