UV 4.7
Simulation et commande des robots
Ce cours est associé en partie au MOOCs intitulés RobMOOC et IAMOOC
Luc Jaulin et Charles Vanwynsberghe, ENSTA-Bretagne, Lab-STICC





  1. Présentation de l'UV 4.7
  2. Version pdf du polycopié
  3. Site de RobMOOC
  4. Site de IAMOOC
  5. Calendrier
  6. Leçons
  7. Liste des étudiants de l'UV
  8. Proxy problems with ENSTA (IAMOOC)
  9. Vidéos en avance







Présentation

Introduction

Cette UV 4.7 est une des UV du profil robotique.
L'UV est centrée sur la simulation et la commande des robots avec des outils logiciels pour la robotique. Elle comprend quelques concepts d'intelligence artificielle comme les méthodes ensemblistes pour la localisation et la commande non-linéaire des robots. Elle possède
- une composante théorique basée sur le calcul par intervalles et qui sera utilisée pour la localisation (un peu de façon similaire au filtre de Kalman)
- une autre composante théorique sur la commande non-linéaire des robots
- et une composante logicielle.
Le seul langage autorisé sera Python. Matlab qui est normalement autorisé pour les extérieurs inscrits à RobMOOC ne le sera pas dans le cadre de cette UV.
Tout ce qui est écrit en vert dans les MOOC concerne les extérieurs (ceux qui font le MOOC et qui ne sont pas de l'ENSTA Bretagne).

Notation

Pour la notation de cette UV 4.7, vous avez deux notes (sur 20) toutes avec le même coefficient.

Contrôle continu. La note comprend
- les devoirs rendu sous Moodle. Vous pouvez vous mettre en binôme, mais chaque étudiant doit rendre son propre devoir en indiquant le nom de son binôme
- les évaluations machine. Suite à un tirage au sort, vous êtes évalués seuls devant la machine.
- les problèmes notés. Pour ces derniers, vous avez en H1 une présentation et aide à la résolution du problème. L'évaluation se passe en H2-H3. Vous pouvez vous mettre en binôme.
La note résultante est une moyenne des notes qui vous sont données lors des évaluations individuelles sur machine, les devoirs rendus sous Moodle et les problèmes notés.


Note Examen. Vous aurez une évaluation écrite en salle d'examen. Vous avez le droit à votre polycopié et à vos notes manuscrites. La calculatrice et autres appareils électroniques sont interdits. Cette évaluation écrite se décompose en
(1) Un QCM avec correction automatique grâce au logiciel AMC (auto-multiple-choice), portant sur des questions de cours et de compréhension. Le principe d'ACM est expliqué sur cette vidéo. Le QCM durera 30 minutes et vous donnera une note sur 10.
(2) Un examen écrit de 40 minutes avec des problèmes liés à cette UV 3.7 (assez proches des exercices vus en BE) vous donnera également une note sur 10.
La somme de ces deux notes (sur 10) vous donnera une note sur 20.
Afin de ne privilégier personne, je ne réponds pas aux questions individuelles sur l'examen. Bien sûr, vous pouvez poser votre question par email et si je la trouve pertinente, je réponds sous la forme d'un email à tous.

Absences. Il faut éviter absolument les absences pour le contrôle écrit.
Pour le contrôle continu, il y a beaucoup d'évaluations et des absences sont probables. Dans ce cas, vous faut justifier votre absence en la signalant auprès de Laurence Gautier par email en donnant une raison valable et en me mettant en copie. Laurence doit alors vous répondre pour accepter cette justification toujours me mettant en copie.
Votre notre sera gelée, ce qui signifie qu'elle ne sera pas prise en compte dans la moyenne qui forme votre note de contrôle continu.



Calendrier

Pour l'année 2017-18, vous trouverez le Calendrier pris sur hélato (onglet CI2A).

Calendrier RobMOOC

Lundi 15/01/2018. H4-H5-H6. RobMOOC A (disponible sur cette même page ci-dessous).
Pour ce premier cours, je serai absent. En H5-H6, Charles Vanwynsberghe votre deuxième encadrant viendra vous suivre en salle info.
Vous devrez rendre vos exercices 2.1, 2.2, 2.3 sous le Moodle de RobMOOC, Leçon A, avant le jeudi 25, 8:00.
Il faudra pour cela vous inscrire sur le site de RobMOOC.

Jeudi 18/01/2018. H1-H2-H3. RobMOOC : Problème (noté).
En H1 je vous présente le problème du funambule et vous donne toutes les explications pour la résolution. En H2-H3, vous devez faire la résolution sous Python. Vous devez avoir fini en H3. Il est fortement recommandé d'avoir assimilé la leçon A de RobMOOC. Une note sur 10 vous est donnée par Charles.

Jeudi 25/01/2018. H1-H2-H3. RobMOOC B (disponible sur cette même page ci-dessous).
En H1, vous devez faire la leçon B, seuls (je suis en déplacement à Sheffield). En H2-H3, vous aurez une évaluation individuelle sur machine avec Charles sur les BE de la leçon A. Pour les autres, vous pouvez faire les BE de la leçon B chez vous. J'essaie de vous annoncer la veille la liste des étudiants sélectionnés pour l'évaluation.
Vous devrez rendre vos exercices 2.4, 2.6, 2.8 sous le Moodle de RobMOOC, Leçon B, avant le jeudi 01/02, 8:00.

Jeudi 01/02/2018. H1-H2-H3. RobMOOC : Problème (noté).
Vous devez avoir rendu vos exercices 2.4, 2.6, 2.8 sous le Moodle de RobMOOC, Leçon B avant 8:00.
En H1 je vous présente un problème détaillé et vous donne toutes les explications théoriques pour la résolution. Vous avez le droit de poser toutes les questions que vous voulez. En H2-H3, vous devez faire la résolution sous Python. Vous devez avoir fini en H3. Il est fortement recommandé d'avoir assimilé les leçons A et B de RobMOOC. Une note sur 10 vous sera donnée par Charles.
Suite au problème, vous devez faire les exercices 2.9, 2.10 (voir ci-dessous), que vous devez terminer chez vous. Vous posterez vos programmes sous le Moodle de RobMOOC, Leçon B, avant le jeudi 08/02, 8:00.

Jeudi 08/02/2018. H1-H2-H3. RobMOOC C.
Vous devez avoir rendu vos exercices 2.9, 2.10 sous le Moodle de RobMOOC, Leçon B avant 8:00.
En H1, vous devez faire la leçon C en vous aidant de la vidéo.
En H2-H3, vous aurez une évaluation individuelle sur machine avec Charles sur les exercices 2.9, 2.10.
En parallèle, vous devez faire les BE de la leçon C (exercices 3.1, 3.2, 3.3).

Jeudi 08/03/2018. H1-H2-H3. RobMOOC D.
Avant 8h, il faut avoir rendu vos exercices de la leçon C (exercices 3.1, 3.2, 3.3).
En H1, vous devez faire la leçon D en vous aidant de la vidéo.
En H2-H3, vous aurez une évaluation individuelle sur machine avec Charles sur les exercices 3.1, 3.2, 3.3.
En parallèle, vous devez faire les BE de la leçon D (exercices 3.5, 3.6).

Jeudi 22/03/2018. H1-H2-H3. Problème (noté).
Avant 8h, il faut avoir rendu vos exercices de la leçon D (exercices 3.5, 3.6).
En H1 je vous présente un problème détaillé et vous donne toutes les explications théoriques pour la résolution. Vous avez le droit de poser toutes les questions que vous voulez. En H2-H3, vous devez faire la résolution sous Python. Vous devez avoir fini en H3. Il est fortement recommandé d'avoir assimilé les leçons C et D. Une note sur 10 vous sera donnée par Charles.
Suite au problème, vous devrez faire l'exercice 4.5 (voir ci-dessous), que vous devez terminer chez vous. Vous posterez votre programme sous le Moodle de RobMOOC, Leçon E, avant le jeudi 29/03, 8:00.

Jeudi 29/03/2018. H1-H2-H3. RobMOOC E.
Avant 8h, il faut avoir rendu votre exercice de la leçon E (exercice 4.5).
Vous devez également avoir posté votre exercice 3.7 sur la quadrirotor (exercice 3.7) sur la leçon D de RobMOOC.
En H1, vous devez faire la leçon E en vous aidant de la vidéo.
En H2-H3, vous aurez une évaluation individuelle sur machine avec Charles sur l'exercice 3.7.
En parallèle, vous devez faire les exercices de la leçon E (exercices 4.1, 4.7, 4.8).

Jeudi 05/04/2018. H1-H2-H3. RobMOOC F.
Avant 8h, il faut avoir rendu vos exercices de la leçon E (exercices 4.1, 4.7, 4.8).
En H1, vous devez faire la leçon F (la dernière de RobMOOC) en vous aidant de la vidéo ci-dessous.
En H2-H3, vous aurez une évaluation individuelle sur machine avec Charles sur les exercices 4.1, 4.7, 4.8.
En parallèle, vous devez faire les exercices de la leçon F (exercices 4.2, 4.4, 4.6).
Je ne serai pas présent car en mission à Plymouth.

Jeudi 12/04/2018. H1-H2-H3. RobMOOC Problème (noté) Avant 8h, il faut avoir rendu vos exercices de la leçon F (exercices 4.2, 4.4, 4.6).
En H1 je vous présente un problème détaillé et vous donne toutes les explications théoriques pour la résolution. En H2-H3, vous devez faire la résolution sous Python. Vous devez avoir fini en H3. Il est fortement recommandé d'avoir assimilé les leçons D,E,F. Une note sur 10 vous sera donnée par Charles.

Calendrier IAMOOC

Jeudi 19/04/2018. H1-H2-H3. IAMOOC A (Chapter 1, disponible sur le site de IAMOOC).
Avant de venir, il faut vous inscrire sur le site de IAMOOC et avoir fait la leçon 0 qui consiste à tout installer. Installer de chez vous pour éviter les problèmes de proxi de l'école.
Il faudra également avoir rendu sous Moodle (sur RobMOOC dernière leçon par exemple) votre programme sur le suivi d'isobath.
En H1, il faudra faire le Chapter 1.
En H2-H3, Charles Vanwynsberghe viendra vous suivre en salle info.
Vous devrez rendre vos exercices 1 et 2 sous le Moodle de IAMOOC, chapitre 1, avant le jeudi 26 avril, 8:00.

Jeudi 26/04/2018. H1-H2-H3. IAMOOC B (Chapter 2, disponible sur le site de IAMOOC).
Il faut avoir rendu sous Moodle (IAMOOC chapitre 1) les exercices 1 et 2.
En H1 (ou avant), il faudra suivre le chapitre 2.
En H2-H3, je viendrai vous évaluer sur le chapitre 1 (Charles est en conférence).
En parallèle, il faudra faire les exercices 3 et 4 que vous devrez rendre sous le Moodle de IAMOOC, chapitre 2, avant le jeudi 3 mai, 8:00.

Jeudi 03/05/2018. H1-H2-H3. IAMOOC C (Chapter 3).
Il faut avoir rendu sous Moodle (IAMOOC chapitre 2) les exercices 3 et 4.
En H1 (ou avant), il faudra suivre le chapitre 3.
En H2-H3, Charles viendra vous évaluer sur le chapitre 2.
En parallèle, il faudra faire les exercices 5,6,7 que vous devrez rendre sous le Moodle de IAMOOC, chapitre 3, avant le jeudi 17 mai, 8:00.

Jeudi 17/05/2018. H1-H2-H3. IAMOOC D (Chapter 4).
Il faut avoir rendu sous Moodle (IAMOOC chapitre 3) les exercices 5,6,7.
En H1 (ou avant), il faudra suivre le chapitre 4.
En H2-H3, Charles viendra vous évaluer sur le chapitre 3.
En parallèle, il faudra faire les exercices 8,9,10,11 que vous devrez rendre sous le Moodle de IAMOOC, chapitre 4, avant le jeudi 24 mai, 8:00.
Attention, les exercices sont longs et il vaut mieux vous y prendre à l'avance.
Notez également qu'il peut y avoir des informations contradictoires pour vous entre ce qui est demandé dans IAMOOC (en anglais) et ce qui est demandé dans l'UV 4.7 (en français). Dans ce cas, c'est bien sûr ce qui est dans l'UV 4.7 (sur cette page) qu'il faut écouter.





Jeudi 24/05/2018. H1-H2-H3. IAMOOC : thèse de Benoît Desrochers.
Après midi à partir de 15h, visite de DGA-TN, pour ceux qui sont inscrits.

Notez aussi que les 22-23 mai, il y a des expérimentations organisées en mer au Trez-Hir avec des robots autonomes.


Jeudi 31/05/2018. H1-H2-H3. Examen.






Leçons de RobMOOC et de IAMOOC

Les fichiers Python de RobMOOC utiles sont dans robmoocpy.zip. Dans le zip Python, il y a une librairie roblib.py qui faudrait essayer ne pas toucher afin que je puisse comprendre vos programmes et les faire tourner sur ma machine facilement.




Leçon A de RobMOOC. Introduction au bouclage linéarisant

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 2.1. Manivelle
Partez du fichier ex_crank.py qui se trouve robmoocpy.zip.
Exercice 2.2. Les trois bacs
ex_pools.py.
Exercice 2.3. Train de robots
ex_train.py.



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

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.



Exercice 2.4. Commande d'un robot sous marin 3D
ex_auv3d.py.
Exercice 2.6. Poursuite
ex_pursuit.py.
Exercise 2.8. Commande par mode glissant
ex_sliding.py.
Exercice 2.9. Groupe de robots
ex_group.m ou ex_group.py.
Exercice 2.10. Convoi de robots
ex_convoy.m ou ex_convoy.py.



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

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 3.1. Robot char sur une ligne (1 point)
ex_tank_line.m ou ex_tank_line.py.
Exercice 3.2. Voiture de Van der Pol (1 point)
ex_vanderpol.m ou ex_vanderpol.py.
Exercice 3.3. Ancrage (1 point)
ex_anchor.m ou ex_anchor.py.



Leçon D de RobMOOC. Commande de véhicules

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

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 3.5. Robot voilier (2 points)
ex_sailboat.m ou ex_sailboat.py.
Exercice 3.6. Avion (2 points)
ex_plane.m ou ex_plane.py.



Leçon E de RobMOOC. Guidage, champ de potentiels artificiels

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 4.5. Commande en cap d'une voiture de Dubins (1 point)
ex_dubins.m ou ex_dubins.py.
Exercice 4.1. Poursuite sur une sphère (1 point)
ex_earth.m ou ex_earth.py.
Exercice 4.7. Potentiels artificiels (1 point)
ex_potential.m ou ex_potential.py.
Exercice 4.8. Flocking (1 point)
ex_flocking.m ou ex_flocking.py.



Leçon F de RobMOOC. Planification de chemins

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 4.2. Planification d'une trajectoire (1 point)
ex_bezier.m ou ex_bezier.py.
Exercice 4.4. Calcul d'un diagramme de Voronoï (1 point)
ex_voronoi.m ou ex_voronoi.py.
Exercice 4.6. Chemins de Dubins (2 points)
ex_dubinspath.m ou ex_dubinspath.py.


Liste des étudiants de l'UV 4.7, 2017-18

AOUN DURAND Elias
ARSLANYAN Antony
BACCHUS Denis
BRUGIER Juliette
CHENU Alexandre
CLAVIER Evann
COSTA Maria
DELMAS Sarah
DEMANGEOT Téva
DO ROSARIO Maxime
DUSSOT Romain
FILIOL Pierre
GOUTORBE Charlie
HOUDEVILLE Alexandre
LAURENDIN Olivier
LEFÈVRE Lucie
POIRIER Fabrice
RAMADAN Abbas
VALÉRY Louis
BARES Victor (substitution)
GRAU Paul-Antoine (substitution)
NOELE Elodie (substitution)