RobMOOC
8ième édition
Commande non-linéaire des robots
Ouverture
Fermeture
Luc Jaulin, jaulin.robmooc@gmail.com

Lab-STICC UBO GDR MACS GDR Robotique ENSTA Bretagne DGA ROBEX Sperob SAGIP





  1. Introduction à RobMOOC
  2. Programme avec les dates et les points
  3. Rendus
  4. Fichiers
  5. Vidéos
  6. Autres MOOCs
  7. Liste des diplômés.







Introduction à RobMOOC

RobMOOC est un MOOC en français, gratuit et ouvert à tous. Il correspond aux chapitres 2,3,4 du livre "la robotique mobile, Luc Jaulin (2015), ISTE editions" qui existe aussi en version anglaise "Mobile Robotics, Luc Jaulin (2015), ISTE editions". Il s'agit de la cinquième édition (la première ayant eu lieu du 22 février au 04 avril 2016, la deuxième 2 février au 15 mars 2017, la troisième du 1 février au 15 mars 2018, la quatrième du 31 janvier au 21 mars 2019, la cinquième du 30 janvier au 19 mars 2020, la sixième du 27 janvier au 16 mars 2021, la septième du 3 février au 24 mars 2022) d'un cours sur la commande non-linéaire des robots mobiles. Ce cours s'adresse à des débutants, bien que certaines notions en mathématiques soient nécessaires (typiquement le niveau demandé à l'entrée des écoles d'ingénieur). Ce MOOC peut également aider les enseignants qui doivent enseigner l'automatique non-linéaire et qui souhaitent le faire de façon simple et intuitive, tout en restant rigoureux. Ici, nous ne traitons pas du problème de l'estimation d'état qui est rattaché à un autre MOOC : KalMOOC.



Contexte

Les robots mobiles sont en constante évolution ces dernières décennies. Pour se déplacer, ces robots peuvent rouler, glisser, naviguer, nager ou bien voler. Les équations différentielles qui régissent leurs mouvements sont fortement non-linéaires. L'objectif de ce cours est de donner les méthodes qui permettent d'élaborer les lois de commande qui permettront à ces robots d'accomplir une tâche précise et ceci dans un environnement parfois encombré. Dans ce cours, nous supposerons que le robot sait où il se trouve et qu'il est capable de percevoir son environnement. Ce cours s'intéresse donc principalement à la commande et au guidage.



Prérequis

Il est nécessaire d'avoir quelques notions en Matlab ou Python et des bases en mathématiques élémentaires (typiquement le niveau d'entrée requis à l'entrée d'école d'ingénieur). Nous éviterons l'utilisation d'outils mathématiques trop élaborés. Matlab ou Python doivent être installés sur votre machine.



Objectifs

Après ce cours, vous devriez être capables de concevoir une loi de commande pour un robot mobile décrit par des équations d'état, comme un avion, un voilier, ou une voiture. Cette loi de commande devra avoir un objectif clair (comme atteindre un point précis, ou suivre une ligne) tout en évitant les obstacles potentiels et ne pas entrer en collision avec d'autres robots.



Diplôme

Pour ceux et celles qui terminent correctement ce MOOC, un diplôme vous sera distribué à la fin de ce cours. Ce document permet à certains étudiants en thèse d'obtenir des crédits ECTS (European Credit Transfert System) que demandent les écoles doctorales. Ce cours correspond à 50 heures de formation incluant les cours théoriques et les formations pratiques.
Pour avoir votre diplôme, il vous faut un minimum de 32 points, (sur les 42 points atteignables) ce qui vous permet de ne pas faire tous les exercices.
Un exemple type de diplôme :



Inscription

Pour s'inscrire, il faut aller sur
L'inscription n'est pas obligatoire pour suivre les vidéos, mais est indispensable pour avoir le diplôme.



Vidéo de correction

Une vidéo de correction pour les exercices vous est donnée lors de l'ouverture de la leçon, mais pas le programme informatique car c'est à vous de le faire. Cette vidéo vous donne une méthode possible de résolution, mais vous n'êtes pas obligés de la suivre. Parfois, on ne vous demande pas de rendre un programme Matlab ou Python, mais une correction sur papier. Dans ce cas, postez un scan (pris par votre téléphone, par exemple) ou un fichier en pdf.



Structure du cours

Ce cours se réparti en 6 leçons (numérotées A,B,C,D,E,F). Chaque leçon est constituée d'une heure de cours et de travaux pratiques sur machine.






Programme avec les dates et les points


Leçon A. Introduction au bouclage linéarisant , 12:00.
Exercice 1. Manivelle (1 point)
Exercice 2. Les trois bacs (1 point)
Exercice 3. Train de robots (1 point)

Leçon B. Commande par bouclage linéarisant, singularités et modes glissants , 12:00.
Exercice 4. Commande d'un robot sous marin 3D (1 point)
Exercice 5. Reaction wheel (1 point)
Exercice 6. Poursuite (1 point)
Exercice 7. Saucisse (2 points)
Exercise 8. Commande par mode glissant (1 point)
Exercice 9. Groupe de robots (1 point)
Exercice 10. Convoi de robots (1 point)
Exercice 11. Profiling float (1 point)
Exercice 12. Field following (1 point)
Exercice 13. Sliding pendulum (1 point)
Exercice 14 Trailer (2 points)

Leçon C. Commande sans modèle (ou mimétique) , 12:00.
Exercice 15. Robot char sur une ligne (1 point)
Exercice 16. Voiture de Van der Pol (1 point)
Exercice 17. Ancrage (1 point)
Exercice 18. Discretization of the state space (1 point)

Leçon D. Commande de véhicules , 12:00.
Exercice 19. Robot voilier (2 points)
Exercice 20. Avion (2 points)
Exercice 21. Quadrotor (2 points)
Exercice 22. Isobath (2 points)
Exercice 23. Satellite (1 point)
Exercice 24. Double steering (1 point)

Leçon E. Guidage, champ de potentiels artificiels , 12:00.
Exercice 25. Poursuite sur une sphère (1 point)
Exercice 26. Potentiels artificiels (1 point)
Exercice 27. Flocking (1 point)
Exercice 28. Platooning (2 points)
Exercice 29. Action on a field (1 points)
Exercice 30. Eight circuit (1 points)

Leçon F. Planification de chemin , 12:00.
Exercice 31. Planification d'une trajectoire (1 point)
Exercice 32. Drawing a Voronoi diagram (1 point)
Exercice 33. Calcul d'un diagramme de Voronoï (1 point)
Exercice 34. Commande en cap d'une voiture de Dubins (1 point)
Exercice 35. Chemins de Dubins (2 points)

Fermeture : , 12:00.

Remise des diplômes : , 12:00.






Rendus

Pour chaque leçon, vous devez rendre, pour chaque exercice, le programme Python, Matlab (ou autre) associé.
Vos fichiers devront être envoyés par email à jaulin.robmooc@gmail.com
avant le jeudi (12h) de la semaine qui suit.
Pour les exercices, qui demandent l'exécution d'un programme, il faut m'envoyer un lien avec une capture vidéo
commentée de votre programme qui s'exécute. Ces vidéos doivent durer moins de 1 minute, si possible.
Une possibilité est d'ouvrir une chaîne youtube à votre nom et de m'envoyer le lien correspondant à la vidéo, dans le mail.
Pour la capture vidéo, vous pouvez utiliser 'SimpleScreenRecorder' sous Linux ou bien CamStudio sous Windows.





Vous pouvez utiliser Python (ou autre) online

Par exemple, aller sur le projet
Run pour tester que le programme tourne bien
Fork (pour cela il vous faudra créer un compte).
Modifier le programme comme il vous convient.
Pour poster votre programme, il vous suffit d'envoyez le lien.
Pour le correcteur, il est très facile de tester que votre programme tourne bien.






Fichiers

Enoncés avec le cours.
Programmes de démarrage pour les utilisateurs de Matlab.
Programmes de démarrage pour les utilisateurs de Python.
Librairie à utiliser par les utilisateurs de Python roblib.py.
Un micro help sur Python.









Leçons et Vidéos





Leçon A. Introduction au bouclage linéarisant

Ouverture (officielle) : , 12h
Officieusement, elle est ouverte dès maintenant pour permettre une phase d'adaptation.
Résumé : Dans cette leçon A, nous présenterons la problématique de la commande non-linéaire des robots mobiles. Nous introduirons ensuite la commande linéaire d'une chaîne d'intégrateurs par placement de pôles, qui sera un outil indispensable par la suite pour effectuer le suivi de trajectoire pour nos robots. Pour introduire le principe de commande linéarisante, nous nous intéresserons à la régulation d'un pendule. Nous appliquerons le même principe à la conception d'une loi de commande pour un robot de type char afin que ce dernier soit capable de suivre une trajectoire en forme de cycloïde.




Exercices.
Exercice 1. Manivelle
Si vous utilisez Matlab, vous pouvez partir du fichier crank.m qui se trouve robmooc.zip
Si vous utilisez Python, vous pouvez partir du fichier crank.py qui se trouve sur robmoocpy.zip
ou de façon équivalente avec replit.com


Exercice 2. Les trois bacs
pools.m ou pools.py.
Avec replit.com


Exercice 3. Train de robots
train.m ou train.py.
Avec replit.com






Leçon B. Commande par bouclage linéarisant, singularités et modes glissants

Ouverture : , 12h
Résumé : La leçon B, présentera d'une façon plus générale l'approche par bouclage linéarisant pour la commande des robots mobiles. Pour cela, nous introduirons les concepts de retards différentiels et le graphe qui lui est associé. Nous montrerons les problèmes de singularité pouvant exister dans les lois de commande et leur interprétation. Nous donnerons également des méthodes pour faire face à ces singularités. Nous introduirons une variante importante de la méthode par bouclage linéarisant : la commande par modes glissants, ou sliding modes.





Exercices. Attention, il y a beaucoup d'exercices, vous n'êtes pas censés tous les faire. Essayez d'avoir au moins 7 points.

Exercice 4. Commande d'un robot sous marin 3D (1 point)
auv3d.m ou auv3d.py.


Exercice 5. Reaction wheel
Pas de programme de démarrage Matlab. Pour Python : reaction_wheel.py.
View more : The Cubli: a cube that can jump up, balance, and 'walk'


Exercice 6. Poursuite
pursuit.m ou pursuit.py.


Exercice 7. Saucisse
Pas de programme de démarrage Matlab. Pour Python : saucisse.py.


Exercise 8. Commande par mode glissant
sliding.m ou sliding.py.


Exercice 9. Groupe de robots
group.m ou group.py.


Exercice 10. Convoi de robots
convoy.m ou convoy.py.


Exercice 11. Profiling float
Pas de programme de démarrage Matlab. Pour Python : float.py.



Exercice 12. Field following
Pas de programme de démarrage Matlab. Pour Python : field_follow.py.


Exercice 13. Sliding pendulum
Il n' a pas de programme à rendre juste un scan (ou photo) de votre feuille de papier ou un pdf.


Exercice 14. Trailer

Pas de programme de démarrage Matlab. Pour Python : trailer.py.






Leçon C. Commande sans modèle (ou mimétique)

Ouverture : , 12h
Résumé : Après avoir présenté le rôle du modèle dans la commande des robots, en s'intéressant plus particulièrement aux liens entre les modèles dynamiques et cinématiques, la leçon C proposera une autre vision de la régulation des robots mobiles. Cette dernière ne s'appuie pas sur les équations d'état du robot (c'est pour cela que nous la qualifions de sans modèle), mais plus sur l'intuition que l'on a sur sa dynamique. Cela pourra se faire par exemple en mimant les méthodes de pilotage existantes, qu'elles soient humaines (comme c'est le cas s'il s'agit d'un véhicule élaboré pour être conduit par un humain) ou de nature biologique (en copiant par exemple la méthode de déplacement d'une anguille). Pour illustrer ces notions, nous nous intéresserons au suivi de ligne pour un robot de type char et à la commande d'un robot patineur.




Exercices.
Exercice 15. Robot char sur une ligne
tank_line.m ou tank_line.py.


Exercice 16. Voiture de Van der Pol
vanderpol.m ou vanderpol.py.


Exercice 17. Ancrage
anchor.m ou anchor.py.


Exercice 18. Discretization of the state space






Leçon D. Commande de véhicules

Il n'y a pas de vidéo de cours pour cette leçon, juste des exercices.

Ouverture : , 12h
Résumé: On s'intéresse ici à des robots mobiles complexes et incertains de type véhicule (comme des voiliers, avions, quadrotors, etc) pour lesquels il n'existe pas d'équations d'état fiables et qui peuvent évoluer dans un environnement mal défini. Pourtant de tels systèmes sont parfois faciles à piloter du fait puisque qu'ils ont été conçus avec cette préoccupation, et évidemment aussi pour leurs performances. La leçon D illustre dans ce contexte comment la méthode de pilotage utilisée par l'humain pour piloter un véhicule peut être transformée en un régulateur simple et robuste.


Exercices.
Exercice 19. Robot voilier
sailboat.m ou sailboat.py.


Exercice 20. Avion
plane.m ou plane.py.
View more : C'est pas sorcier : les drones


Exercice 21. Quadrotor
quadrotor.py.
Avec repl.it


Exercice 22. Isobath
isobath.py.


Exercice 23. Satellite
satellite.py.


Exercice 24. Double steering
doublesteering.py.






Leçon E. Guidage, champ de potentiels artificiels

Ouverture : , 12h
Résumé : Une fois que le robot est capable de se réguler, de suivre un cap ou bien une trajectoire, il nous reste à trouver le chemin à suivre pour atteindre l'objectif fixé. Pour cela, il nous faut prendre en compte la structure de l'environnement, afin d'éviter les obstacles, de ne rester que dans les zones autorisées (par exemple un robot sous marin ne peut naviguer sur la terre ferme) ou de prendre en compte la rotondité de la terre lorsque les espaces à parcourir sont grands. Nous allons pour cela nous appuyer sur des méthodes à base de champ de potentiels artificiels.




Exercices.
Exercice 25. Poursuite sur une sphère
earth.m ou earth.py.


Exercice 26. Potentiels artificiels
potential.m ou potential.py.


Exercice 27. Flocking
flocking.m ou flocking.py.


Exercice 28. Platooning
platooning.py.


Exercice 29. Action on a field
actionfield.py.


Exercice 30. Eight circuit
eight.py.






Leçon F. Planification de chemin

Ouverture : , 12h
Résumé : Planifier son chemin ou sa trajectoire, lorsque le chemin dépend du temps, consiste à trouver une équation temporelle pour la consigne à suivre pour notre robot. Les outils qui peuvent être utilisés dans un tel contexte sont les polynômes de Bézier et les diagrammes de Voronoï, qui seront introduits dans cette leçon F.




Exercices.
Exercice 31. Planification d'une trajectoire
bezier.m ou bezier.py.


Exercice 32. Drawing a Voronoi diagram (1 point)


Exercice 33. Calcul d'un diagramme de Voronoï
voronoi.m ou voronoi.py.


Exercice 34. Commande en cap d'une voiture de Dubins
dubins.m ou dubins.py.


Exercice 35. Chemins de Dubins
dubinspath.m ou dubinspath.py.






Liste des étudiants diplômés




50 diplômés en 2016

Ayman Al-Khazraji
Quentin Aubertot
Kévin Baroni
Romain Baronnier
Pierre Basset
Maxime Beaudoin
Hela Ben Said
Evandro Bernardes
Bassem Bhiri
Hannah Boenning
Yassine Boukal
Auguste Bourgois
Simon Chanu
Guillaume Cotten
Eloïse Dalin
Zacharie El Abdalaoui
Alaa El Jawad
Fadil Ennouhi M'hamed
Werner Fontana
Alexandre Galland
Morgan Gy
Karkoub El Wali
Gwenn Le Roch
Kevin Legay
Ang Li
Wanxin Liu
Fatma Mansour
Pierre Martin
Nima Mehdi
Nacim Meslem
Rémi Milhem
Guillaume Neau
Rodolfo Orjuela
Sergio Pertierre Do Monte
Antoine Planchot
Vincent Rayneau
Brice Renaudeau
Gauthier Rousseau
Yoann Sola
Camille Soulié
Tithnara Sun
Florian Tanguy
Noel Tanguy
Adrien Thibault
Julien Tomezach
Hugo Vadaine
Sylvain Vandernotte
Anthony Welte
Lei Zhu
Mohamed Mahrez Ziane



39 diplômés en 2017

Raphael Abellan Romita
Maha Abouzaid
Alexandre Ambiehl
Matthieu Amy
Julien Brisset
Rafael Bailón-Ruiz
Yacine Benhnini
Maxence Blond
Salima Borsali
François C.
Philippe Chapuis
Jean-Louis Cougnon
Julien Damers
Emilien Fournier
Nicolas Gartner
Gabriel Godeau
Yoann Guguen
Jacques Kadima
Fabrice Lallement
Pierre-Albert Landel
Laëtitia Li
Damien Lucas
Fabien Niel
Yannick Madjidabaye
Mohamad Mezher
Philipe Miranda de Moura
Olivier Mullier
Yasmine Najar
Gustav Öman Lundin
Mohamed Amine Ouadrhiri
Mohamed Outahar
Eder Alejandro Rodriguez Martinez
Clément Rolinat
Joris Tillet
Quang Huy Truong
Sophie Tuton
Ulysse Vautier
Nicolas Veylon
Jean Walter
Noelie Ramuzat



36 diplômés en 2018

Mahmoud Almasri
Antony Arslanyan
Elias Aoun Durand
Ameni Azzabi
Denis Bacchus
Alexandre Chenu
Evann Clavier
Maria Luiza Costa Vianna
Georges Daher
Sarah Delmas
Teva Demangeot
Maxime Do Rosario
Romain Dussot
Ibrahima Faye
Pierre Filiol
Mohamed Fnadi
Quentin François
Charlie Goutorbe
Paul-Antoine Grau
Gauthier Hentz
Alexandre Houdeville
Juliette Brugier
Randa Kaddaj Mallat
Olivier Laurendin
Elise Lengrand
Lucie Lefevre
Mickael Martinez
Mohamed Amine Alouane
Hmidi Mohamed Hedi
Elodie Noëlé
Alexis Offermann
Hoang Anh Pham
Fabrice Poirier
Abbas Ramadan
Ornella Tortorici
Louis Valéry



30 diplômés en 2019

Maxens Achiepi-Autret
Lama Al Bassit
Ahmad AWDE
Khaled Benkhoud
Quentin Combal
Guillaume Hardouin
Ashley Hill
Jean-Luc Kersulec
Ghani Kissoum
Audrey Schanen
Ahmad Hably
Walid Hamdi
Thibaut Nico
Alexandre Argento
Kevin Bedin
Matthieu Bouveron
Quentin Cardinal
Cyril Cotsaftis
Alexandre Courjaud
Nathan Fourniol
Jonathan Gomis
Aurelien Grenier
Corentin Jegat
Arnaud Klipfel
Erwann Landais
Louis Lesieur
Luc Longin
Driss Tayebi
Andrieux Hyacinthe
Pierre-Yves Mauduit



30 diplômés en 2020

Adrien Bourgeade
Nicolas Boyer
Quentin Brateau
Jérémy Cornille
Ludovic Diguet
Alexandre Evain
Timothée Guy
Maha Halimi
Hamid Hacène
Jordan Mabboux
Mourtaza Kassamaly
Sofiane Kraiem
Francois Leborne
Corentin Lemoine
Antonin Lizé
Mamadou Dembele
Andrei Mitriakov
Badr Moutalib
Paul-Antoine Le Tolguenec
Gwendal Priser
Robin Sanchez
Aurélie Suzanne
Bertrand Turck
Ulrich Camille
Quentin Vintras



33 diplômés en 2021

Lilia DJOUSSOUF
Alexis Hou
Mahugnon ZOUNMENOU
Mathilde Roques
Juliette Drupt
Sylvain Hernandez
Nicolas Fleck
Mohamed Hamza LAKBAIBI
Abdallah SAID
Obil Dieu Béni MADOUNGU
Hugot Pichon
Ervan Kassarian
Bilal GHADER
Estelle ARRICAU
Antonin BETAILLE
Enzo-Loïd ESSONO AUBAME
Martin GOUNABOU
Yohann GOURRET
Bernardo HUMMES FLORES
Jean-Vincent KLEIN
Katell LAGATTU
Maxime LEGEAY
Stéphane NGNEPIEPAYE WEMBE
Yves Jordan NJAMEN NGONGANG
Nicolas ODORICO
Baptiste ORLHAC
Hugo PIQUARD
Samuel PROUTEN
Hugo SABATIER
Julien TARAN
Isaac-Andreï WITT
Thibault Jadoul
Christian Koumlah Mbey



28 diplômés en 2022

Hamza CHAKRAA
Vilma Muco
Patrick Auger
Amine LAGZOULI
Gabriel Betton
Théo Boutémy
Ermance Decaudaveine
Nicolas Defour
Laurent Droudin
Damien Esnault
Hugo Gace
Simon Gervaise
Mael Godard
Taddéo Guérin
Florian Jerram
Thibault Langlard
Augustin Morge
Virgile Pelle
Rémi Porée
Danut Pop
Chloe Potherat
Laurent Potin
Mirado Rajaomarosata
Hugo Reubrecht
Jonas Soueidan
Thomas Tacheron
Antoine Wanctin
Hugo Yverneau



?? diplômés en 2023

Hugo Duarte
Olivier LUMEMBE KIBANGU
Jakub Hodek
Abdelrahman Sayed IBRAHIM
Abdelhaq Ouelli
Jérémy BERNAUDEAU
Florian Levray