AirSim: un simulateur de drone sous UE4 couplé à Pixhawk

Ceci n’est pas un article sur un simple simulateur de drones… non, cela va beaucoup plus loin. Il s’agit ici de simuler un drone, tout en récupérant un max de données de vol, et en étant couplé à un logiciel d’auto-pilotage. Bref, cela va être l’occasion pour moi de vous présenter AirSim qui a été développé par Microsoft, mais aussi le projet Pixhawk qui est un projet en Open Hardware d’un ensemble permettant de créer son propre drône avec caméra et télécommande et permettant de donner un peu d’autonomie à ce drone. Vous êtes prêts, car ça va être passionnant 😉

Le projet AirSim

Bon on va commencer par présenter AirSim, et on reviendra vers lui à la fin.

Le projet AirSim a été lancé par Microsoft pour aider les utilisateurs à tester et à entraîner des robots et des drones dans un environnement virtuel avant de les piloter dans le monde réel. Donc, avant tout il s’agit d’un simulateur de pilotage de drones , mais l’idée c’est de ne pas forcément limiter l’application aux drones conventionnels (pour nous un drone, c’est avant tout une machine volante).

Ce qui ne gâche rien, le projet avec le moteur Unreal Engine, et il est disponible gratuitement en open source sur Github.

Avant de continuer, je vous propose de visionner cette courte vidéo:

Bon, c’est pas mal, mais ça casse pas des briquettes me direz-vous ? C’est qu’en réalité, vous venez de voir le sommet émergé de l’iceberg. En fait, c’est beaucoup plus puissant que ça, mais ça ne se voit pas tout de suite !

La plateforme a été conçue pour les chercheurs en intelligence artificielle afin de collecter les données d’entraînement et mener des expériences avec les algorithmes de deep learning, de la vision par ordinateur et d’apprentissage par renforcement. Bref, les algorithmes nécessaires pour avoir un drone autonome au vrai sens du terme.

Donc, oui, on simule un drone d’un coté, mais dans des conditions réalistes, et surtout, de l’autre, on collecte des datas. Concernant la précision de la simulation, les applications de robotique en temps réel nécessitent un moteur physique tournant en haute fréquence, généralement autour de 1 KHz. Microsoft a pu atteindre cette fréquence en déléguant les calculs de vérification de collision au moteur graphique Unreal Engine 4. Pour rappel, UE4 repose sur PhysX. Toutefois, les utilisateurs seront en mesure d’implémenter leur propre moteur physique s’il le souhaite.  Si vous voulez plus d’informations à ce sujet, je vous invite à lire le document Aerial Informatics and Robotics Platform (PDF, 20Mo).

Le code de AirSim est multiplateforme et supporte la simulation hardware-in-loop avec les contrôleurs de vol comme Pixhawk afin d’interagir directement avec l’environnement simulé. La simulation Hardware-in-the-loop (« matériel dans la boucle ») est une méthode de simulation caractérisée par l’association de véritables composants, connectés à une partie temps-réel simulée.

La compilation sous Linux et OSX semble fonctionnelle, plusieurs utilisateurs ont pu builder et tester sans soucis.

Et c’est maintenant que notre aventure continue avec PixHawk… Mais avant cela, merci à Coriolan de Developpez pour son article sur lequel je me suis largement inspiré pour cette introduction.

DroneCode et PX4

Le projet Dronecode, lancé par la fondation Linux, a pour objectif de réunir plusieurs plates-formes open-source de software et de hardware déjà existantes pour aider le développement et l’amélioration des drones.

Ce projet est essentiellement basé sur les plates-formes des projets ArduPilot et PX4. ArduPilot a rencontré un important succès en 2007 lorsqu’il a été soutenu par la communauté de DIYDrone.

PX4 est un projet open-source et open-hardware qui fournit une plateforme matérielle et logicielle clés en main pour implémenter des applications de pilote automatique, qu’il s’agisse d’UAV destinés à un usage commercial, personnel ou académique. Ces deux bases fédèrent plus de 1200 développeurs qui vont désormais contribuer au développement de Dronecode. Un grand nombre d’entreprises et d’organisations parmi lesquelles Amazon, HobbyKing, Horizon Ag et PrecisionHawk utilisent déjà ces outils.

Pixhawk

Pixhawk est un projet en architecture open-hardware permettant de fournir aux universitaires, hobbyistes et industriels, un système matériel permettant de contrôler des drones de façon autonome (ou non), et ce à bas coût, avec une haute fiabilité. Il repose sur PX4.

Voici le “boîtier de contrôle” qui a été produit par ce projet:
Voici en gros comment cela se raccorde:

C’est un peu plus parlant avec de schéma. Donc le boîtier est embarqué par le drone, composé ici d’une batterie, 4 moteurs, et un récepteur pour la télécommande, ainsi que d’un système de communication pour la télémétrie qui peut-être reçue par une tablette. On peut relier cela à un capteur GPS et une caméra que l’on peut pivoter.

Caractéristiques techniques:

  • Microprocesseur avancé ARM Cortex® M4 32 bits fonctionnant sous NuttX RTOS
  • 14 sorties PWM/servo (8 avec failsafe et commande manuelle, 6 auxiliaires, compatibles haute puissance)
  • Multiples connectiques pour des périphériques supplémentaires (UART, I2C, CAN)
  • Carte microSD pour l’enregistrement des données

Bon, c’est la partie matérielle, mais elle est aussi dotée d’une interface logicielle et d’une API assez impressionnante.

Le 3DR PX4 Pixhawk (c’est son nom complet, car pixhawk conçoit d’autres choses) est doté d’un multithreading intégré. Cet environnement de programmation identique à Unix/Linux, propose des fonctions du pilote automatique au langage de script Lua pour les missions et comportements de vol, et une couche conducteur PX4 personnalisée garantissant des délais très courts dans tous les processus pour des fonctionnalités avancées illimitées à votre drone. Pixhawk facilite les nouveaux utilisateurs du système à découvrir le pilotage automatique ainsi qu’aux opérateurs d’APM et de PX4.

Voici ce qu’il est possible de faire:

Il y a donc une reconnaissance visuelle des obstacles, un compréhension de l’environnement… il manquerait juste un Lidar pour faire du scan 3D ! Et encore, peut-être qu’en fouinant un peu, tout cela est peut-être déjà prévu – car je ne vois pas comment traiter ce sujet complètement sans une reconstitution fidèle de l’environnement extérieur.

Le logiciel Open Source QGroundControl peut-être conjointement utilisé avec ce matériel (compatibilité MAVLink).

Le boîtier ci-dessus peut être acheté sur internet, aux alentours de 200€. Vous pouvez aussi le construire vous-même si vous êtes doué en électronique, car les plans sont disponibles. Le reste de l’équipement est assez standard si vous voulez vous lancer dans la construction d’un drone. Il faut juste que cela reste compatible avec PX4. Vous pourriez par exemple imprimer le reste des pièces (ailes, protections, etc.) en 3D !

AirSim & le réel

C’est là qu’on revient à AirSim. Tout à l’heure, je vous ai montré. L’écran ci-dessous montre comment on peut piloter le drone simulé sous UE4 à l’aide  d’une console de commande. On peut lui donner des ordres comme “Démarre les moteurs”, “envole toi”, “va à telle position”, etc.

Si vous voulez tester, il vous faudra un compte github et vous rendre à cette adresse. Ensuite, vous téléchargez l’archive zip et vous la décompressez dans un répertoire de votre choix.

Il vous faudra aussi Visual Studio d’installé (VS2017 uniquement pour avoir msbuild v15). Je vous fais parvenir un Build (16 mars 2017) si vous n’avez pas le courage de passer par cette étape mais que vous comptiez tester tout de même. Suffit de m’envoyer un email. Et cela n’a pas été simple avec les dépendances et les variables d’environnement à configurer…

Bon, créez un nouveau projet et ajoutez une classe C++ vierge si vous avez lancé un projet Blueprint, puis ajoutez le contenu du répertoire Unreal (“Plugins”) dans votre projet. Sortez et relancer. Il y aura une recompilation du plugin et le projet s’ouvrira.

Si vous allez dans les plugins, vous allez trouver:

Ensuite, il suffit d’utiliser le GameMode proposé: “SimGameMode” et de lancer !


Dans l’exemple ci-dessus, on utilise DroneShell que nous avons compilé avec AirSim. Ce dernier permet de prendre le contrôle du drone, avec des commandes comme “Arm” (lance les moteurs) ou “take-off”. La liste des commandes est accessible via la commande “Help”.

Ensuite, coté UE4, y-a 3 blueprints à connaitre – sont accessibles en listant les BP des plugins dans “Content Browser”. Il s’agit de :

  • BP_FlyingPawn : c’est le pawn du drone en question
  • BP_PipCamera : caméra qui sert à suivre le drone en affichant les 3 caméras dans le HUD
  • BP_CameraDirector: qui doit être associé aux 2 précédents dans “Details/Pawn”.

Voici quelques copies d’écran pour illustrer:
Pour plus d’infos, vous pouvez suivre cette vidéo:

Pour l’enregistrement des données de vol, vous avez un bouton en bas à droite de l’écran. Sinon, la configuration se fait dans “Documents/Airsim/settings.json” :

Voilà, je vous laisse faire vos propres tests et revenir vers moi si vous avez des questions ou des suggestions. Pour ma part, je compte bien continuer dans ce sens en acquérant un drone compatible et en faisant des tests plus poussés. En tous cas, c’est un projet à suivre de près !

 
 
 

Ces articles pourraient aussi vous intéresser …