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 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 33 points, (sur les 43 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)
Exercise 16. Deep boat (2 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. Consensus (1 point)
Exercice 29. Platooning (2 points)
Exercice 30. Action on a field (1 point)
Exercice 31. Eight circuit (1 point)

Leçon F. Planification de chemin , 12:00.
Exercice 32. Planification d'une trajectoire (1 point)
Exercice 33. Drawing a Voronoi diagram (1 point)
Exercice 34. Calcul d'un diagramme de Voronoï (1 point)
Exercice 35. Commande en cap d'une voiture de Dubins (1 point)
Exercice 36. 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.
Il faudrait m'envoyer un fichier pdf avec des explications et des captures écran du programme réalisé.










Fichiers

Enoncés avec le cours.
Source code Latex + figures

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.







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



Exercice 2. Les trois bacs
pools.m ou pools.py.



Exercice 3. Train de robots
train.m ou train.py.







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.







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.







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


Exercice 16. Deep boat
deepboat.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.





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.



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.







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. Consensus
consensus.py.


Exercice 29. Platooning
platooning.py.


Exercice 30. Action on a field
actionfield.py.


Exercice 31. 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.







Exercice 32. Planification d'une trajectoire
bezier.m ou bezier.py.


Exercice 33. Drawing a Voronoi diagram (1 point)



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


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


Exercice 36. 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



31 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
Florian Gaurier
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



44 diplômés en 2023

Hugo Duarte
Olivier LUMEMBE KIBANGU
Jakub Hodek
Abdelrahman Sayed IBRAHIM
Abdelhaq Ouelli
Jérémy BERNAUDEAU
Florian Levray
Alexandre Batard
Victor Bellot
Léo Bernard
Johan Berrier-Gonzalez
Gwendal Créquer
Apolline De Vaulchier Du Deschaux
Alix Doineau
Marie Dubromel
Martin Galliot
Bastian Garagnon
Guillaume Garde
Louis Gillard
Clara Gondot
Adam Goux Gateau
Louis-Nam Gros
Hugo Hofmann
Tristan Le Floch
Jules Le Gouallec
Emilie Ledoussal
Hippolyte Leroy
Théo Massa
Marguerite Miallier
Ludovic Mustière
Océan Noel
Camilo Ortiz
Martin Pilon
Mathieu Pitaud
Aimé Randriamoramanana
Harendra Rangaradjou
Louis Ravain
Kevin Ren
Catherine Rizk
Louis Roullier
Etienne Roussel
Mathys Séry
Joachim Zafrana
Rania Ziane