RobMOOC
11ième édition, 2027
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







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)
Exercise 17. Hoverboard (2 point)
Exercice 18. Ancrage (1 point)
Exercice 19. Discretization of the state space (1 point)

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

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

Leçon F. Planification de chemin , 12:00.
Exercice 33. Planification d'une trajectoire (1 point)
Exercice 34. Drawing a Voronoi diagram (1 point)
Exercice 35. Calcul d'un diagramme de Voronoï (1 point)
Exercice 36. Commande en cap d'une voiture de Dubins (1 point)
Exercice 37. 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.









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. Hoverboard
hoverboard.py.


Exercice 18. Ancrage
anchor.m ou anchor.py.


Exercice 19. 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 20. Robot voilier
sailboat.m ou sailboat.py.


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


Exercice 22. Quadrotor
quadrotor.py.



Exercice 23. Isobath
isobath.py.


Exercice 24. Satellite
satellite.py.


Exercice 25. 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 26. Poursuite sur une sphère
earth.m ou earth.py.


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


Exercice 28. Flocking
flocking.m ou flocking.py.


Exercice 29. Consensus
consensus.py.


Exercice 30. Platooning
platooning.py.


Exercice 31. Action on a field
actionfield.py.


Exercice 32. 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 33. Planification d'une trajectoire
bezier.m ou bezier.py.


Exercice 34. Drawing a Voronoi diagram (1 point)



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


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


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