Option SI en seconde

Voitures autonomes et intelligence artificielle

Le JetBot est une plateforme de robotique open-source pour l’IA qui permet de créer des applications d’IA créatives, intelligentes et captivantes. Elle est basée sur l’ordinateur NVIDIA Jetson Nano pour l’IA, à la fois compact et puissant, qui prend en charge de multiples capteurs et réseaux de neurones en parallèle pour la détection d’objets, l’évitement des collisions et bien plus encore.

Vous allez apprendre à programmer le kit Jetbot pour réaliser des projets liés au développement des voitures autonomes. Vous verrez par exemple comment mettre en œuvre de la reconnaissance d’image, du suivi de trajectoire ou encore de la détection et de l’identification d’objets sur une vidéo. Vous utiliserez le langage de programmation Python et des librairies spécialisées dans le deep learning comme Tensorflow, Keras, Numpy, …

#1. Mise en place du matériel et l’installation des logiciels de développement dédiés au Jetson nano et au Jetbot

Le module Jetson nano prend en charge le kit de développement JetPack qui intègre les bibliothèques d’accélération Nvidia Cuda-X ainsi qu’une pile IA complète avec bibliothèques pour l’apprentissage machine, la vision artificielle, les calculs graphiques et le traitement multimédia.

Le Jetbot utilise une librairie spécialisée qui offre la possibilité de le programmer en Python. Cette librairie peut être installée depuis le dépôt officiel Github.

Tous les exemples que nous allons traiter seront exécutés sous l’environnement JupyterLab.

#2. Pilotage de base du Jetbot

Le Jetbot est programmable en langage Python avec des commandes simples pour le faire avancer, reculer, tourner, etc… De plus, l’interface JupyterLab offre de nombreuses possibilités pour rendre plus agréable la gestion et le pilotage du robot. Par exemple, les Widgets permettent d’afficher le flux vidéo de la caméra en temps réel ou encore de créer des joysticks graphiques virtuels pour piloter le robot.

Nous verrons dans cette partie comment programmer nos propres interfaces de pilotage à l’aide de ces outils.

#3. Utilisation de la manette de jeu pour commander les déplacements du Jetbot

Le kit Jetbot est vendu avec une manette de jeu sans fil afin de rendre son pilotage plus attrayant.

Dans cette partie, vous apprendrez à programmer des scripts en Python pour gérer les ordres issus de la manette de jeu (comme par exemple pour déplacer le Jetbot). Vous verrez également comment prendre des images et les enregistrer à l’aide de la manette de jeu.

#4. Mise en place d’une IA pour faire de l’évitement de collisions

Les voitures autonomes sont en plein essor et une des tâches les plus importantes de ce domaine est d’éviter des obstacles. Pour cela, nous avons besoin de mettre en place une IA permettant de reconnaître des images.

ResNet est une structure de réseau qui est, dans sa version la plus complexe, composé de 50 couches, et a la particularité d’introduire des connexions résiduelles. Contrairement aux réseaux de neurones convolutifs qui ont une architecture linéaire (un empilement de couches dont chaque sortie est uniquement connectée à la couche suivante), dans un réseau résiduel, la sortie des couches précédentes est reliée à la sortie de nouvelles couches pour les transmettre toutes les deux à la couche suivante

Nous allons programmer ce modèle dans le Jetson nano en Python afin de l’utiliser avec le Jetbot pour réaliser de la détection d’obstacles.

#5. Optimisation des modèles avec Tensor-RT

Les modèles utilisés en intelligence artificielle demandent beaucoup de ressources de calcul : c’est d’ailleurs tout l’intérêt d’utiliser le Jetson nano, qui intègre un GPU dédié aux calculs complexes.

Mais les performances des GPU ne sont pas toujours assez élevées, et si nous souhaitons embarquer de l’intelligence artificielle dans un système de traitement en temps réel, nous devons optimiser au maximum les modèles. C’est là que le logiciel TensorRT de NVIDIA intervient.

Nous mettrons en pratique son utilisation pour optimiser notre modèle de reconnaissance d’image : il nous permettra d’améliorer le débit de traitement de notre modèle à presque 80 images/s.

 

 

#5. Faire un suivi de trajectoire en utilisant une IA (modèle Restnet-18)

Une autre problématique des voitures autonomes et de pouvoir suivre une trajectoire lors de leurs déplacements. Pour cela, elles peuvent utiliser une caméra embarquée afin de reconnaitre par exemple les marquages au sol sur les routes.

Dans cette partie, nous allons mettre en place une IA qui permettra au Jetbot de reconnaître des marquages au sol pour suivre une trajectoire. Nous mettrons également en œuvre un algorithme d’asservissement de type PID (Proportionnel Intégral et Dérivé) pour piloter le déplacement du Jetbot afin qu’il utilise au mieux les informations fournies par l’IA. De cette manière, ses déplacements seront mieux optimisés.

Bien entendu, tout cela se fera en temps réel après avoir optimisé le modèle avec TensorRT.

#5. Détecter et identifier des objets avec une IA (modèle SSD-MobileNet V2) en temps réel

Dans cette partie, vous apprendrez à utiliser des modèles pré-entrainé disponibles dans les ressources publiques de Tensorflow afin de les intégrer dans le Jetbot. Le modèle que nous utiliserons est le SSD-MobileNet V2.

Grace à ce modèle, le Jetbot sera capable d’identifier des objets spécifique sur une vidéo et de se déplacer vers ces objets. Bien entendu, tout cela se fera en temps réel après avoir optimisé le modèle avec TensorRT.